- From: L. David Baron <dbaron@dbaron.org>
- Date: Wed, 29 Aug 2012 00:21:11 -0700
- To: www-style@w3.org
I did a quick read through of all the parsing states in http://dev.w3.org/csswg/css3-syntax/#tree-construction . Comments follow: 3.6.3 At-rule mode { token Otherwise, this is a parse error: The sentences "Switch to the next-block error mode. Reconsume the current input token." should probably be in the other order. But it would be simpler to just say "Consume a primitive and ignore the return value" as you do in "Top-level mode. additional case needed: You need a case for the } token. To be compatible with CSS 2.1 it should only apply when the at-rule is inside another rule (which I think means when the stack of open rules has greater than two items). (However, I think it would be a reasonable change to make it apply always... but that probably doesn't work for the other cases where you need this same change.) This case should say: Discard the current rule. Reconsume the current input token. 3.6.4 Rule mode { needs to be a parse error just like in 3.6.2 Top-level mode. 3.6.5 Selector mode needs a case for } just as I propose above for 3.6.3. EOF Token Is discarding the current rule correct? It seems inconistent with CSS 2.1's EOF rules, which should suggest leaving the rule, or perhaps only leaving the rule if it has a nonempty selector? 3.6.8 Declaration-value mode DELIM with value of ! I think you should proceed into a new mode in which you expect important. (If it's there, go to declaration-end mode. For EOF, probably discard the current declaration. And for anything else, reprocess the current token and go into next-declaration error mode.) Then again, this does forbid ! within the toplevel of a variable, as fantasai points out. You do need to allow whitespace and comments here somehow. Also, there are contexts (in particular, keyframe rules) in which !important is a parse error and causes the declaration to be discarded. You should allow for this. anything else As I said before [1], I think these quirks should be described as part of the property grammar. 3.6.10 Next block error mode I think you can remove this given how flexible your at-rule parsing is (see comments on 3.6.3). But if you don't, you need a case for } like for 3.6.5 and 3.6.3. 3.6.13 and 3.6.14 (quirks) Again, see previous post on quirks [1]. 3.6.18 Pop the current rule The validity of the rule can depend on whether the rule was terminated by an EOF. This means it can't be tested in the way you describe, since by this point you've lost that information. I think this is fixable by having a separate state for "pop the current rule for an end of file". (For example, media queries have similar "closing open constructs" rules to the ones rules do, and the validity of the @media query determines the validity of an @import rule.) It's probably also worth explicitly saying that "according to the appropriate grammar rules" means that errors that were handled by some smaller piece being discarded don't count. Finally, whether the current rule is valid also depends on context. Some at-rules are only valid at top-level and not within other at rules. Some (actually, currently, all) of these are only valid if the prior rules that were appended to the new current rule (i.e., the style sheet) were in certain categories (i.e., @charset, @import, @namespace). In general, "Reprocess the current input token" and "Reconsume the current input token" aren't defined. Presumably they cause the next occurrence of "Consume the next input token" to do nothing. You should probably also stick to one wording. But you also often use them after the "switch to the ... state" wording, and I tend to think it should be before. You need to define that "discard the current rule" removes the rule from the stack of open rules. You need to define when the "current declaration" is set and unset. It's not defined at all. -David [1] end of http://lists.w3.org/Archives/Public/www-style/2012Aug/0806.html -- 𝄞 L. David Baron http://dbaron.org/ 𝄂 𝄢 Mozilla http://www.mozilla.org/ 𝄂
Received on Wednesday, 29 August 2012 07:21:39 UTC