[CSS21] Font-family syntax

Boris Zbarsky wrote to <mailto:www-style@w3.org> on 19 May 2004 in 'Re: 
Question on parsing of "font" property' 
(<mid:40AC125D.2000308@mit.edu>):

> [...] we are actually getting the following rule for non-quoted font 
> names:
>
>   font-name: term [ operator term ]*
>
> where "operator" is not allowed to be a COMMA.

[...]

> I do agree that per the grammar '@' would indeed need to be escaped.

There are many syntactic constructs which, though allowed by the prose 
description of 'font-family', are forbidden by the Appendix G grammar 
[GRAM]. As noted, the bare commercial at sign (U+0040) is one. It 
becomes necessary to move to a value syntax like that in section 4, the 
core syntax  [SD]:

value       : [ any | block | ATKEYWORD S* ]+;
any         : [ IDENT | NUMBER | PERCENTAGE | DIMENSION | STRING
               | DELIM | URI | HASH | UNICODE-RANGE | INCLUDES
               | DASHMATCH | FUNCTION S* any* ')'
               | '(' S* any* ')' | '[' S* any* ']' ] S*;


Even then, blocks nested in parentheses or in brackets remain illegal:

font-family: (this {is} illegal);

The remedy is simple:

value       : [ any | block | ATKEYWORD S* ]+;
any         : [ IDENT | NUMBER | PERCENTAGE | DIMENSION | STRING
               | DELIM | URI | HASH | UNICODE-RANGE | INCLUDES
               | DASHMATCH | FUNCTION S* value? ')'
               | '(' S* value? ')' | '[' S* value? ']' ] S*;

Your humble correspondent has addressed this in previous messages 
[BN-1] [BN-2].



[GRAM]
Bert Bos; Tantek Çelik; Ian Hickson; Håkon Wium Lie.
"Grammar of CSS 2.1", appendix G in the CSS 2.1 specification.
25 February 2005.
W3C Candidate Recommendation.
<http://www.w3.org/TR/2004/CR-CSS21-20040225/grammar.html>

[SD]
Bert Bos; Tantek Çelik; Ian Hickson; Håkon Wium Lie.
"Tokenization", section 4.1.1 in the CSS 2.1 specification.
25 February 2005.
W3C Candidate Recommendation.
<http://www.w3.org/TR/2004/CR-CSS21-20040225/syndata.html#tokenization>

[BN-1]
Etan Wexler.
"Re: Blocks in parentheses or brackets".
14 February 2003 (but self-labeled 14 December 2003).
Public correspondence to <mailto:www-style@w3.org>.
<mid:blocks-in-parentheses@d20030214.etan.wexler> /
<http://lists.w3.org/Archives/Public/www-style/2003Feb/0054.html>.

[BN-2]
Etan Wexler.
"Re: Blocks in parentheses or brackets".
8 March 2003.
Public correspondence to <mailto:www-style@w3.org>.
<mid:BA8EE31E.3CD%25ewexler@stickdog.com> /
<http://lists.w3.org/Archives/Public/www-style/2003Mar/0055.html>.


-- 
Etan Wexler.

Received on Friday, 6 August 2004 05:24:45 UTC