Line = Level D [Xref D] Tag [D LineVal] EOL
LineVal = pointer / lineStr
lineStr = (nonAt / atsign atsign) *nonEOL ; leading @ doubled
and
Note that production LineVal does not match the empty string. Because empty payloads and missing payloads are considered equivalent, both a structure with no payload and a structure with the empty string as its payload are encoded with no LineVal and no space after the Tag.
We have empty LineVals in spaces.ged too, with NOTEs identifying them as intentional. I don't know why we have that, so I have not included fixing that in this PR.
Dangling spaces are forbidden by ABNF
The relevant parts of section 1.3 of the spec are
and
We have empty LineVals in spaces.ged too, with NOTEs identifying them as intentional. I don't know why we have that, so I have not included fixing that in this PR.