Scientific notation in numbers

One implementor's comments on the scientific notation issue (please
keep in mind that dbaron may disagree with me):

Mozilla has a mode switch in the CSS lexer.  In "SVG mode", the syntax
for the core NUMBER production becomes

  ([0-9]+|[0-9]*"."[0-9]+)(e[+-]?[0-9]+)?

This also affects DIMENSION and PERCENTAGE tokens.  A NUMBER token with
a scientific-notation suffix is always treated as having a fractional
component, regardless of whether it does in a mathematical sense (that
is, it is not acceptable in contexts that require an integer) but is
otherwise not special cased.  "SVG mode" applies to style attributes on
SVG elements, but not to full style sheets linked from or embedded
within SVG documents.

The modified lexical rule is NOT consistent with the forward- 
compatible (section 4) grammar, because of the optional plus sign.
"1.24e+23" is one token in "SVG mode" but three tokens in the
forward-compatible grammar.

Two characters of look-ahead are required, because when "124e+" is
encountered, the plus will not be consumed if the character after that
is not a digit. This is not a new requirement on implementations;
dbaron is mistaken. Ignoring URI which is a special snowflake, the
character sequence "-\" also requires two characters of look-ahead (if
there is a newline or EOF after the backslash, the dash is a DELIM, not
the beginning of an identifier) and the sequence "<!-" requires three
(if a dash follows, this is a CDO token, otherwise the less-than sign
is a DELIM).

I actively want to eliminate the mode switch; it adds extra branches to
a hot path in the lexer, and it is the only such wart in the lexical
rules.  To do so, scientific notation must either be accepted
everywhere that NUMBERs are accepted, or forbidden everywhere.  I don't
much care which, but I am opposed to howcome's compromise proposal of
allowing scientific notation only in property values where it is
"necessary".  That would *not* eliminate the mode switch, it would add
extra complexity to the parser (which would now have to toggle the
switch on particular properties, and might have to care about whether
SVG disagrees with CSS-proper about whether scientific notation is
necessary in some context), and it strikes me as a documentation
nightmare.

I do not want lexical rules that forbid DIMENSION or PERCENTAGE
suffixes on scientific notation.  That would require *variable*
length look-ahead; the only current instance of that is URI and
I intend to submit a proposal to eliminate that Real Soon.  I would
be okay with making scientific notation plus % an automatic *parse*
error (kinda like INVALID partial-string tokens), but I don't think it
buys us anything.  And I think scientific notation plus a DIMENSION
suffix is probably useful in some circumstances, and should be
allowed, if scientific notation is allowed at all.

I don't buy the assertion that scientific notation will enable
browser-sniffing.  NUMBERs can only appear in a property value
(per the appendix G grammar) so the most aggressive differentiation
between implementations that you can achieve with scientific notation
is to wipe out one property declaration.  How's that different from
feature-sniffing for novel property values, which we encourage?

I'd like to point out that css3-selectors already broke the
forward-compatible grammar by introducing new match operators. That
enables more browser-sniffing than this does, since you can wipe out an
entire ruleset with an ill-formed selector.

zw

Received on Wednesday, 10 February 2010 20:44:51 UTC