- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Tue, 18 Dec 2012 11:29:28 -0800
- To: www-style list <www-style@w3.org>
This is something that's been bugging me for a while. Most of the time, CSS just uses whitespace as a separator between values. This works great, because if a term is omitted, the implied whitespace on either side just collapses into a single whitespace block, so you don't have to worry about "too much" whitespace being left around when a term is omitted. Sometimes, though, we use a comma to separate terms, and it doesn't have this behavior. If a term is completely omitted, you have to carefully construct the grammar to force an associated comma to also be omitted. This distorts a bunch of grammars, forcing a lot of extra wrappers and duplication of terms, making them harder to read than they should be. One of the major purposes of our grammar is to be a relatively easily-understandable description of the allowed values, so this is a failure. Could we perhaps define the use of the comma in grammars to have this behavior automatically? Here's some before/after examples of how this would help. radial-gradient(): [ [ <shape> || <size> ] [ at <position> ]? , | at <position>, ]? <color-stop-list> ==> [ <shape> || <size> ]? [ at <position> ]? <color-stop-list> image(): <image-tags>? [ <image-src> , ]* [ <image-src> | <color> ] ==> <image-tags>? <image-src># , <color>? image-set(): [ <image-set-decl>, ]* [ <image-set-decl> | <color>] ==> <image-set-decl># , <color>? Specifically, the rule would be that, a comma must be omitted if, ignoring whitespace and comments, it would be the first or last token in the function/property value, or if the immediately preceding token is also a comma. Informally, commas must separate terms, so omit them if they don't. ~TJ
Received on Tuesday, 18 December 2012 19:30:14 UTC