- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Wed, 23 Jul 2014 14:05:36 -0700
- To: Winston <wbe@psr.com>
- Cc: www-style list <www-style@w3.org>
On Wed, Jul 23, 2014 at 11:57 AM, Winston <wbe@psr.com> wrote: > Yes, I do think this one's useful. The problem is that the definition > of <general-enclosed> (which is somewhat broken, but I'll get to that > next) suggests that "" (the empty string) does not qualify. After > reading both level 4 draft and level 3, I was unable to determine > whether there was intent for "" to be treated as a valid > <general-enclosed> expression, prompting my original email. I contend > the spec needs to say, either via the rule or via an example. Sorry, this is a little unclear - do you mean literally an empty string, or just "nothing between the parentheses"? It's sometimes hard to tell whether quotes are meant to be delimiters for a code string or part of the code itself. ^_^ In any case, both an empty string and nothing are valid, as they both match <any-value>*. > 2) On to the definition of <general-enclosed> itself... This definition > in the June 3 version of the Level 4 Draft: > > ---------- > > <general-enclosed> = [ <function-token> | ( ] <any-value>* ) > > ---------- > > looks broken. I read it as "[...] <any-value>* )" (requiring a close > paren even if there was no open paren). What do you mean "even if there was no open paren"? It's possible that you're misinterpreting <function-token>, which is understandable, since it's a slightly funky detail of CSS's tokenization. <function-token> is the "beginning" of a function, composed of the name and open paren. > It also [as of June 3] means > that "" is not a valid <general-enclosed> (and thus that "()" is a > syntax error). Correct that neither an empty string nor nothing at all are valid <general-enclosed> values - as the name suggests, they must be enclosed, by parentheses in this case. However, `()` is absolutely valid. What makes you think otherwise? > 3) At high level, while I understand why "()" has been defined to return > false, that's contrary to what a newcomer might expect. One might > think "()" -- an expression in which no restrictions appear -- ought to > evaluate to the same value as "" (i.e., true), just as the absence of > an expression in "@media {...}" does, and that not() would be false, > and that "( <general-enclosed> )" would be the other way around (as it > is officially) only if there's non-whitespace content. That could be > accomplished by changing the first part of <media-in-parens> to > something like: > > <media-in-parens> = ( [ whitespace* | <media-condition> ] ) | ... > > and leaving <general-enclosed> as not including "". Of couse, then > the spec would need to add that "(whitespace*)" evaluates to true, > and the example I suggested back in topic #1 above would have to be > reversed. :) > > Not a bug, just an observation. :-) () is false not because it's empty, per se, but because it's a syntax error that we allow for future-compatibility reasons. Newcomers shouldn't use it at all. > Of course, the other, even simpler alternative, is simply to declare > "(whitespace*)" a syntax error, since it doesn't really provide much > value. The previous idea of having it be true was just if you wanted > to keep "()" as syntactically valid. While it's possible to do so, I don't see much reason to make it actually a syntax error, given the general MQ theme of attempting to recover from errors. ~TJ
Received on Wednesday, 23 July 2014 21:06:23 UTC