- From: Andrei Polushin <polushin@gmail.com>
- Date: Wed, 12 Mar 2008 18:41:15 +0600
- To: fantasai <fantasai.lists@inkedblade.net>
- Cc: www-style@w3.org
- Message-ID: <6b7fe1730803120541h22d6d5e5g41d5c3cf7f144852@mail.gmail.com>
2008/3/12, fantasai wrote:
> I'll note that
> 3cm-2cm
> will be parsed as a single DIMENSION token and
> 3cm -2cm
> will be parsed as two DIMENSION tokens. Is that what we want? Is whitespace
> required around minus and plus signs to treat them like operators or is
> tokenization different inside calc() like it is inside :nth-child()?
I propose changing the grammar around the {ident} as follows:
nmstart [_a-z]|{nonascii}|{escape}
nmchar [_a-z0-9-]|{nonascii}|{escape}
alpha [a-z]|{nonascii}|{escape}
alnum [_a-z0-9]|{nonascii}|{escape}
restrict {alpha}{alnum}*
simple {nmstart}{nmchar}*
prefixed [_-]{restrict}[-]{simple}
ident {simple}|{prefixed}
unit {restrict}|{prefixed}
%%
{num}{unit} {return DIMENSION;}
That is, the unit name cannot contain '-', unless that unit name
starts with either '-' or '_', as described by
http://www.w3.org/TR/2007/CR-CSS21-20070719/syndata.html#vendor-keywords
In addition, such grammar treats the '-' before the {ident} as a MINUS
SIGN, unless the {ident} itself contains '-' (see the example with
"-max()" below).
Tokenization examples:
:nth-child(3n-1)
=> OK: ':' FUNCTION(nth-child) DIMENSION(3n) '-' NUMBER(1) ')'
3cm-2cm
=> OK: DIMENSION(3cm) '-' DIMENSION(2cm)
3-x-parsec-2-x-angstrom
/* -x-parsec and -x-angstrom are vendor-specific unit names */
=> BAD: DIMENSION(3-x-parsec-2-x-angstrom)
3-x-parsec -2-x-angstrom
=> OK: DIMENSION(3-x-parsec) '-' DIMENSION(2-x-angstrom)
calc(3em-max(1em,9px))
=> OK: FUNCTION(calc) DIMENSION(3em) '-'
FUNCTION(max) DIMENSION(1em) ','
DIMENSION(9px) ')' ')'
Note that tokenization is *context-free*, it can be used in equally
incontext of 'calc', or in context of 'nth-child', or out of them.
The patch for the scanner grammar is attached.
--
Andrei Polushin
Attachments
- application/octet-stream attachment: scanner.l.diff
Received on Wednesday, 12 March 2008 12:41:33 UTC