Re: [CSS21] core grammar doesn't generate example in 4.1.6 Blocks

On Wednesday 2009-10-21 11:46 -0500, Dan Connolly wrote:
> 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?

I think this is a bug in the core grammar.

Since the core grammar serves two purposes:

 (1) defining behavior of not-yet-valid CSS so that CSS can be
 extended in the future

 (2) defining behavior of invalid CSS so that implementations
 interoperate on "garbage" input

I think we should:

 (a) fix the core grammar to allow more things inside FUNCTION ...
 ')', '(' ... ')', and '[' ... ']'.

 (b) document that we will never use that change as a future
 extension of CSS

This will lead to greater interoperability on bad input, but will
not lead to future CSS extensions that might be incompatible with
implementations that were correct at the time they were written.

-David

-- 
L. David Baron                                 http://dbaron.org/
Mozilla Corporation                       http://www.mozilla.com/

Received on Wednesday, 21 October 2009 18:46:44 UTC