- From: Dan Connolly <connolly@w3.org>
- Date: Wed, 21 Oct 2009 11:46:05 -0500
- To: Bert Bos <bert@w3.org>
- Cc: www-style <www-style@w3.org>
On Wed, 2009-10-21 at 18:03 +0200, Bert Bos wrote: > On Wednesday 21 October 2009, Dan Connolly wrote: > > In 4.1.6 Blocks > > http://www.w3.org/TR/CSS2/syndata.html#block > > > > this is given as an example of a block: > > > > { causta: "}" + ({7} * '\'') } > > > > but it doesn't match the core grammar in 4.1.1, > > because between ()s can only be any*, and > > the { token isn't part of any. i.e. any doesn't > > contain blocks. > > True, but it is marked as illegal already. This leaves me wondering what is the role of the core syntax, especially this statement: "The meaning of input that cannot be tokenized or parsed is undefined in CSS 2.1." Is the definition of block in 4.1.6 supposed to be a re-statement of the grammar or an independent definition? > The idea is to show that > curly braces must be balanced, even in input that is going to be > ignored. The rules further down in 4.2 under "malformed declarations" > apply: there is an unexpected token in the value of the property Which part of the spec tells me that the { token is _in_ the value of the property? Clearly not the core syntax. > and > thus the property and its value must be ignored. And to know where the > value ends, you must know where the block ends. You seem to be saying "don't confuse the block production with the definition in 4.1.6; the latter is the real definition of a block." Well, I am confused. I think the spec is confusing. If the names of the productions under core syntax get clobbered by text later in the spec, perhaps the core syntax grammar is just a distraction. Another distraction is mixing parsing and tokenization: A block starts with a left curly brace ({) and ends with the matching right curly brace (}). In between there may be any tokens, except that parentheses (( )), brackets ([ ]), and braces ({ }) must always occur in matching pairs and may be nested. Single (') and double quotes (") must also occur in matching pairs, and characters between them are parsed as a string. The "Single (') and double quotes (") must also occur..." is parallel to "braces ({ }) must always occur" and so suggest that single and double quotes are tokens. But they're not. It's not even strictly true, since { "\"" } is a block but its "s don't all occur in matching pairs. Perhaps more clear would be: A block starts with a left curly brace ({) and ends with the matching right curly brace (}). In between there may be any tokens, except that parentheses (( )), brackets ([ ]), and braces ({ }) must always occur in matching pairs and may be nested. (Note that tokenization ensures matching of single (') and double quotes (") in strings.) -- Dan Connolly, W3C http://www.w3.org/People/Connolly/ gpg D3C2 887B 0F92 6005 C541 0875 0F91 96DE 6E52 C29E
Received on Wednesday, 21 October 2009 16:46:10 UTC