Re: [css3-syntax] Error handling within known at-rules

On Fri, 3 Sep 2004, Christian Roth wrote:
> 
> Assuming the following stylesheet:
> 
> @import "include.css" { color: red } print;
> .red { color: red; }
> 
> 1) Should it include "include.css"?

No.

> 2) Should it include "include.css" only for the print media type?

No.

> 3) Should the @import rule be ignored completely?

Yes.

> 4) Should elements of class "red" have red text?

No.


> 1: MAYBE: The rule is neither unrecognized nor misplaced [1], so it may
> not be ignored. However, it cannot be parsed further starting with the
> open curly brace, so its remainder is ignored up to the ending semicolon,
> leaving us with
>   @import "include.css"
> plus the again recognized ';' since we know an @import rule ends with a
> semicolon.

The rule uses invalid syntax and thus must be ignored.

The rule consists of exactly:

   @import "include.css" { color: red }

...no more, no less. That's not valid.


> 2: MAYBE: Same reasoning like in (1), but { ... } is not allowed in
> @import. However, @import ends with a semicolon, so we skip the unknown
> part between braces and pick up again after it, giving us a print media type.

You can't combine different parts of the stylesheet after ignoring parts.  


> 3: MAYBE: It is neither unrecognized nor misplaced (-> NO), except for
> when "unrecognized" means "either unknown name or not valid according to
> the grammar" (-> YES). [1]

I agree that the spec should be clearer.


> 4: MAYBE: According to the rules for forming at-rules [1], the @import
> rule ends after the closing brace. The remaining stylesheet is
>   print; ...
> whereby this is no longer parseable according to the grammar, and
> therefore [1] applies, whereby we take the largest chunk of the
> stylesheet to be parsed from the beginning, discarding the rest from the
> place where we can no longer parse. This means the stylesheet would end
> after the closing brace in @import.

My interpretation is that the sheet consists of:

1. An invalid @rule: @import "include.css" { color: red }
2. An invalid rule: print; .red { color: red; }

Both are dropped.

-- 
Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'

Received on Saturday, 4 September 2004 11:24:53 UTC