W3C home > Mailing lists > Public > www-style@w3.org > April 2013

[css-variables] Syntax of custom property declarations

From: Simon Sapin <simon.sapin@exyr.org>
Date: Sun, 14 Apr 2013 16:00:44 +0200
Message-ID: <516AB68C.6090200@exyr.org>
To: "www-style@w3.org" <www-style@w3.org>
Hi,

The "Values" line for custom properties is defined as:

   [ <value> | <CDO> | <CDC> ]+

Where <value> is defined in the CSS 2.1 core grammar:

> stylesheet  : [ CDO | CDC | S | statement ]*;
> statement   : ruleset | at-rule;
> at-rule     : ATKEYWORD S* any* [ block | ';' S* ];
> block       : '{' S* [ any | block | ATKEYWORD S* | ';' S* ]* '}' S*;
> ruleset     : selector? '{' S* declaration? [ ';' S* declaration? ]* '}' S*;
> selector    : any+;
> declaration : property S* ':' S* value;
> property    : IDENT;
> value       : [ any | block | ATKEYWORD S* ]+;
> any         : [ IDENT | NUMBER | PERCENTAGE | DIMENSION | STRING
>               | DELIM | URI | HASH | UNICODE-RANGE | INCLUDES
>               | DASHMATCH | ':' | FUNCTION S* [any|unused]* ')'
>               | '(' S* [any|unused]* ')' | '[' S* [any|unused]* ']'
>               ] S*;
> unused      : block | ATKEYWORD S* | ';' S* | CDO S* | CDC S*;
>
> The "unused" production is not used in CSS and will not be used by
> any future extension. It is included here only to help with error
> handling.

Im a bit confused as to what this means exactly. Is <declaration> 
extended to allow CDO and CDC? Is <unused> allowed in spite of being  
"not used"? Are CDO and CDC allowed inside a {} block? Is a 
declaration-level ';' token allowed?

     var-foo: <!-- bar -->;
     var-foo: [@bar];
     var-foo: [{}];
     var-foo: [;];
     @supports (var-foo: bar;baz) {}
     var-foo: [<!-- bar -->];
     var-foo: {<!-- bar -->};
     var-foo: /* unmatched */ )]};
     var-foo: url("bar" bad url);
     var-foo: bar "Bad string: unquoted newline
       ;
     var-foo: bar /* Bad comment not closed until EOF

Even if such corner cases would never be valid in a "real" property 
through var(), they make a difference in which custom properties are 
available through CSSStyleDeclaration.

Id be more comfortable with a negative definition. Something like: "any 
sequence of tokens except BAD_STRING, BAD_URL, BAD_COMMENT[1], unmatched 
')', unmatched ']', and unmatched '}'."

[1] Not sure about BAD_COMMENT as Syntax 3 makes all comments valid, 
even unclosed.

A definition based on Syntax 3 (which defines precisely how any 
character sequence is parsed into a tree of "component values") would be 
even better, but I understand that Syntax 3 might not be mature enough 
to be referenced from Variables which we want to progress fast.

Im not asking for a change here, only clarification. I hope this will 
not delay the spec going to LC and CR.

-- 
Simon Sapin
Received on Sunday, 14 April 2013 14:01:07 UTC

This archive was generated by hypermail 2.3.1 : Monday, 2 May 2016 14:39:10 UTC