- From: Simon Sapin <simon.sapin@exyr.org>
- Date: Mon, 27 May 2013 15:13:47 +0800
- To: www-style list <www-style@w3.org>
§5. Parsing The items that can appear in the tree are a mixture of basic tokens and new objects: I would remove "basic tokens" here. Some tokens are non-preserved and never appear in the parsed tree, and preserved tokens are already part of the definition of "component value". at-rule An at-rule has […] an optional value consisting of a simple {} block. I’d like to rename this "value" to "block", so that we can refer to "the block of an at-rule". For example: "@import rules have no block."; "@font-face rules have block that contains a list of declarations." preserved tokens Any token produced by the tokenizer except for 〈function〉s, 〈{〉s, 〈(〉s, and 〈[〉s. I’d like to add a note saying that 〈}〉, 〈)〉, 〈]〉, 〈bad-string〉, and 〈bad-url〉 tokens as component values are always parse errors but are preserved by css-syntax to allow higher-level parsers such as Media Queries to have more fine-grained error handling than dropping a whole declaration or rule. §5.1. Parser Railroad Diagrams Railroad diagrams are more compact than a state-machine, but often easier to read than a regular expression. The parser is not a state-machine anymore, but I’m not sure what to change this to. §5.3. Parser Entry Points Of course this is only editorial. Implementations are free do use another strategy (such as doing tokenization and parsing in one pass) as long as the overall behavior is the same. Dunno about "Parse a value" yet. I'll remove it if I don't figure out what to do with it. It would be used by 'attr()' with a <type-or-unit> other than 'string'. "Parse a list of values" is for the contents of presentational attributes, which parse text into a single declaration's value. Also selectors, MQs, and @supports conditions outside of stylesheets (e.g. in APIs or HTML.) But we probably don’t need an exhaustive list here, which would be hard to keep up-to-date. "Parse a comma-separated list of values" is similar, but for comma-separated lists. I’m still not convinced this is useful to have in the Syntax spec. It is easy to re-define on top of "Parse a list of values", and never the only thing you want. It’s also the same as the '#' grammar multiplier defined in Values. Are there any other things somewhere where some tech (that isn't straight CSS itself) needs to parse some text into CSS? I can’t think of anything else that belongs in Syntax. Component values, declarations and rules are all that this spec defines. All of the algorithms defined in this spec may be called with either a list of tokens or of component values. As mentioned before in this list, I think it’d be simpler to have everything (except "Consume a component value" itself) always work on component values and not tokens. Also I’m not sure that the distinction between "entry points" and "algorithms" brings much, and some entry points do little more that call an algorithms. I’d merge the two concepts. §6.2. The <an+b> type This section needs to define (possibly by reference) how this grammar works. In particular: * A - character is not special like []'|? are, but part of a "symbol". * Unquoted symbols represent <ident> tokens whose parsed value (after unescaping) is an ASCII-insensitive match for the symbol. * Whitespace tokens are ignored (according to your emails on the subject.) Maybe just refer to the Values spec? Also, changes for the Selectors 3 definition of an+b need to be in some "Changes" section. §7.1. Defining Block Contents: the <declaration-list>, <rule-list>, and <stylesheet> productions Similarly, the <rule-list> production represents a list of rules […] Finally, the <stylesheet> production represents a list of rules. It is identical to <rule-list>, except that blocks using it default to accepting all rules. I don’t see the point of having <stylesheet> in this spec. It’s really the same as <rule-list> since none of them really define what rules are allowed in a given context. And "accepting all rules" is misleading at best. For example, an @top-left margin rule is only allowed inside @page, not a the stylesheet top-level. Another spec should not have to exclude it explicitly. Also, css-conditional already has a concept of "nested statements". For example, the ‘@font-face’ rule is defined to have no prelude […] I think a definition of @font-face in Syntax 3 terms would still have to be a bit more formal. Its prelude must either be empty or contain only whitespace tokens. (All at-rules have a prelude.) Actually, I’m not convinced that a grammar is even useful in this case. You can just define @font-face with prose and a reference to <declaration-list>. Only in some cases you might want a grammar for the prelude and/or the value of a rule (for example page selectors in @page.) Within a <declaration-list>, !important is automatically invalid on any descriptors. If you really want to keep this statement "descriptor" needs to be defined in this spec, but I’d rather not have that. I think that this spec should only speak of declarations. Whether a given declaration is for a property or a descriptor or whether !important is allowed should be out of scope and left to the respective specs using <declaration-list> or <declaration>. The rest of this paragraph also seems out of scope. It probably belongs in the Cascade module. -- Simon Sapin
Received on Monday, 27 May 2013 07:14:19 UTC