[css-counter-styles][css-fonts] Editorial: syntax of declarations

Hi,

Style rules, style attributes, @viewport rules and nested rules in 
@keyframes all use a similar formal grammar to define the syntax of 
property/descriptor declarations. This grammar encodes corner cases like 
semicolons before the first declaration, consecutive semicolons, and no 
semicolon after the last declaration:

div {; ; background: black;; ;color: white}


CSS 2.1
> ruleset     : selector? '{' S* declaration? [ ';' S* declaration? ]* '}' S*;

css-style-attr
> declaration-list
>   : S* declaration? [ ';' S* declaration? ]*
>   ;

css-device-adapt
> viewport
>   : VIEWPORT_SYM S*
>     '{' S* declaration? [ ';' S* declaration? ]* '}' S*;

css-animations
> keyframes_blocks: [ keyframe_selector '{' S* declaration? [ ';' S* declaration? ]* '}' S* ]* ;



However, @font-face rules, nested rules in @font-feature-values and 
@counter-style rules are a bit more hand-wavy in the definition of the 
syntax for declarations.

css-fonts
> @font-face { <font-description> }
>
> where <font-description> has the form:
>
> descriptor: value;
> descriptor: value;
> [...]
> descriptor: value;

css-fonts
> @font-feature-values <font-family># {
>   @<feature-type> {
>     <feature-ident> : <feature-index>+;
>     <feature-ident> : <feature-index>+;
>     ...
>   }
>   ...
> }

css-counter-styles
> @counter-style <counter-style-name> {
>   [ descriptor: value; ]+
> }
>

We all know what that means, but the specs should still have a normative 
definition of the syntax that encodes all the corner cases. The trends 
seems to be a formal grammar that extends CSS 2.1 §4.1, but "like 
declarations in style rules" with a normative reference to CSS 2.1 would 
work for me too.

Alternatively, refer to "parse a list of declarations" in Syntax 3, but 
see http://lists.w3.org/Archives/Public/www-style/2013Apr/0506.html


(Based on http://wiki.csswg.org/spec/cssom-constants , this should be 
everything that uses the declaration syntax. Not counting @page which 
allows mixed declarations and at-rules. Did I miss anything?)


Bonus question: where is !important allowed?

-- 
Simon Sapin

Received on Sunday, 21 April 2013 12:25:23 UTC