[css3-syntax] Both ; and {} should end all at-rules

Hi,

This is a recent change, but the 23 February 2013 ED distinguishes 
at-rules that end with ; and those that end with {}. When encountering 
the "wrong" end delimiter, the parser considers it a normal of the 
at-rule’s prelude and continues parsing the prelude. Instead, both ; and 
{} blocks should end any at-rule, even when the other is expected.


Consider these test cases:

data:text/html,<style>@media;body{background:green
data:text/html,<style>@import{}body{background:green

Both of them have an (invalid) at-rule that ends just before "body". The 
current ED would instead parse an @media rule whose prelude goes up to 
"{", and an @import rule whose prelude goes until the end of the 
stylesheet. In both cases, it fails to parse the style rule.


(By the way, this issue disappears if we get rid of 
recognized/rule-filled/declaration-filled at-rules concepts as in 
http://lists.w3.org/Archives/Public/www-style/2013Feb/0411.html )

Cheers,
-- 
Simon Sapin

Received on Saturday, 23 February 2013 20:23:31 UTC