[CSS21] Function parsing in declarations

Suppose we have the following declaration:

  volume: -foo-marshall(11)

In 4.1.3, Characters and case [1], it reads:

"Only properties, values, units, pseudo-classes, pseudo-elements, and at-
rules may start with a hyphen (-); other  identifiers (e.g. element
names, classes, or IDs) may not."

I infer from this that functions (e.g. in values) are not allowed to
start with a hyphen by interpreting "may not" by english language rules
and not in the sense of "MAY" in RFC2119 [2]. But what are the
consequences from the above sentence for the parser? Two possibilities:

(a) Since functions "may not start with a hyphen", it can not reasonably
be part of the function name. Hence, the tokenization of the above
declaration must become:

 S(" ")
 DELIM("-") /* since the hyphen cannot be part of FUNCTION */


(b) Since functions may not start with a hyphen, but -foo-marshall does,
it is simply invalid, and the declaration is discarded based on 4.2,
Rules for handling parsing errors [3].

Solution (a) would leave a backdoor to have unary minus on functions some
time later in CSS. Unfortunately, it requires a different Scanner
specifically for declarations, which is probably a very bad idea.

Solution (b) is in some way a "natural" solution, although it is nowhere
indicated in the specification why function names should be exempt from
the rule that vendor specific extensions should and can start with -foo-.
There might well be vendor-specific functions needed in some applications.

Could you please clarify the wording and intention of the spec in this regard?

[1] <http://www.w3.org/TR/CSS21/syndata.html#q6>
[2] <http://www.ietf.org/rfc/rfc2119.txt>
[3] <http://www.w3.org/TR/CSS21/syndata.html#parsing-errors>

Regards, Christian.

Received on Tuesday, 22 March 2005 21:26:52 UTC