- From: Florian Rivoal <florian@rivoal.net>
- Date: Fri, 02 Nov 2012 22:31:41 +0100
- To: "www-style@w3.org" <www-style@w3.org>
I've checked the new version of @supports, and although I agree with the
intent, I've found a few things to nitpick about.
The spec says:
> to avoid confusion caused by precedence rules, the syntax does not allow
> ‘and’, ‘or’, and ‘not’ operators to be mixed without a layer of
> parentheses.
This is only true of the specialized grammar, not of the generic one,
which allows 'and' and 'or' without nesting. More importantly, there
doesn't seem to be any guidance on how to evaluate such an expression.
The only instruction I can find on how to evaluate things that match the
generic grammar but not the specialized one is this:
> anything else If a parenthesized expression does not match
> the result of one of the grammar productions
> above, it must not be treated as invalid, but
> rather simply be false for the purpose of
> support conditions.
However, the following construction is "anything else", matches the loose
grammar, but is not a parenthesized expression:
(foo:bar) and (bar:baz) or (baz:bang)
It seems to me that the current wording does not indicate whether this
should be treated as invalid or as false. Example 8 suggests invalid, but
I cannot find a clear justification in the normative text.
This could be fixed by adding the following sentence to the "anything
else" paragraph: "If a non-parenthesized expression does not match the
result of one of the grammar productions above, it must be treated as
invalid". Alternatively, the loose grammar could be changed to:
supports_condition
: NOT S* '(' any+ ')' S* |
'(' any+ ')' S* ( OR S* any+ )* |
'(' any+ ')' S* ( AND S* any+ )*
It should be noted that with both solutions, "(foo) and (bar) or (baz)" is
invalid while "((foo) and (bar) or (baz))" is false. I am only moderately
happy about that, but I am not sure there is a good way around it if we
want the forward compatibility offered by allowing anything inside
parentheses.
On a side note, each of the 3 parts of example 8 has an extra closing
parenthesis, which should be removed.
- Florian
Received on Friday, 2 November 2012 21:32:08 UTC