- From: Simon Sapin <simon.sapin@exyr.org>
- Date: Sun, 21 Apr 2013 14:24:55 +0200
- To: www-style@w3.org
- CC: "Tab Atkins Jr." <jackalmage@gmail.com>, John Daggett <jdaggett@mozilla.com>
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