Re: [svgwg] Use shorter symbol names in SVG path data grammar (#751)

Slight edit to my proposal.

I initially used an underscore in `coord_x` because I thought that otherwise, the `coordx` names would look too similar to the `coords` name, hiding the fact that those are fundamentally different types of syntax rules (one has recursion, the others haven't).

But I found a more elegant solution, which is to rename `coords` into `coord1s`, for consistency. Then the only remaining underscore is in `arcto_arg[s]`, which we can also get rid of, so that the grammar is alllowercase:

```
path ::= wsp* moveto? (moveto command*)?

command ::=
    closepath
    | moveto
    | lineto
    | hlineto
    | vlineto
    | ccurveto
    | scurveto
    | qcurveto
    | tcurveto
    | arcto

closepath ::= ("Z" | "z")
moveto    ::= ("M" | "m") wsp* coord2s
lineto    ::= ("L" | "l") wsp* coord2s
hlineto   ::= ("H" | "h") wsp* coord1s
vlineto   ::= ("V" | "v") wsp* coord1s
ccurveto  ::= ("C" | "c") wsp* coord6s
scurveto  ::= ("S" | "s") wsp* coord4s
qcurveto  ::= ("Q" | "q") wsp* coord4s
tcurveto  ::= ("T" | "t") wsp* coord2s
arcto     ::= ("A" | "a") wsp* arctoargs

coord    ::= sign? unsigned
coord2   ::= coord cw? coord
coord4   ::= coord cw? coord cw? coord cw? coord
coord6   ::= coord cw? coord cw? coord cw? coord cw? coord cw? coord
arctoarg ::= unsigned cw? unsigned cw? coord cw flag cw? flag cw? coord cw? coord

coord1s   ::= coord    | (coord    cw? coord1s)
coord2s   ::= coord2   | (coord2   cw? coord2s)
coord4s   ::= coord4   | (coord4   cw? coord4s)
coord6s   ::= coord6   | (coord6   cw? coord6s)
arctoargs ::= arctoarg | (arctoarg cw? arctoargs)

unsigned ::= frac exp?
frac     ::= (digit* "." digit+) | digit+
exp      ::= ("e" | "E") sign? digit+

cw    ::= (wsp+ ","? wsp*) | ("," wsp*)

sign  ::= "+" | "-"
flag  ::= "0" | "1"
wsp   ::= #x9 | #xA | #xC | #xD | #x20
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
```

(I also just reordered the closepath first, as it looks better)

But looking at it now, maybe there's no need to abbreviate the `_sequence` into `s`, since we can still keep one-liners. Below is how it looks for comparison. I don't have a strong opinion either way, though I think I have a slight preference for the shorter `s`. It looks a bit less scary, and psychology matters too: if it looks simpler, we have less mental blocks.


```
path ::= wsp* moveto? (moveto command*)?

command ::=
    closepath
    | moveto
    | lineto
    | hlineto
    | vlineto
    | ccurveto
    | scurveto
    | qcurveto
    | tcurveto
    | arcto

closepath ::= ("Z" | "z")
moveto    ::= ("M" | "m") wsp* coord2_sequence
lineto    ::= ("L" | "l") wsp* coord2_sequence
hlineto   ::= ("H" | "h") wsp* coord1_sequence
vlineto   ::= ("V" | "v") wsp* coord1_sequence
ccurveto  ::= ("C" | "c") wsp* coord6_sequence
scurveto  ::= ("S" | "s") wsp* coord4_sequence
qcurveto  ::= ("Q" | "q") wsp* coord4_sequence
tcurveto  ::= ("T" | "t") wsp* coord2_sequence
arcto     ::= ("A" | "a") wsp* arctoarg_sequence

coord    ::= sign? unsigned
coord2   ::= coord cw? coord
coord4   ::= coord cw? coord cw? coord cw? coord
coord6   ::= coord cw? coord cw? coord cw? coord cw? coord cw? coord
arctoarg ::= unsigned cw? unsigned cw? coord cw flag cw? flag cw? coord cw? coord

coord1_sequence   ::= coord    | (coord    cw? coord1_sequence)
coord2_sequence   ::= coord2   | (coord2   cw? coord2_sequence)
coord4_sequence   ::= coord4   | (coord4   cw? coord4_sequence)
coord6_sequence   ::= coord6   | (coord6   cw? coord6_sequence)
arctoarg_sequence ::= arctoarg | (arctoarg cw? arctoarg_sequence)

unsigned ::= frac exp?
frac     ::= (digit* "." digit+) | digit+
exp      ::= ("e" | "E") sign? digit+

cw    ::= (wsp+ ","? wsp*) | ("," wsp*)

sign  ::= "+" | "-"
flag  ::= "0" | "1"
wsp   ::= #x9 | #xA | #xC | #xD | #x20
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
```

-- 
GitHub Notification of comment by dalboris
Please view or discuss this issue at https://github.com/w3c/svgwg/issues/751#issuecomment-555176481 using your GitHub account

Received on Monday, 18 November 2019 19:40:52 UTC