W3C home > Mailing lists > Public > www-style@w3.org > January 1999

Errors in CSS1, CSS2 specs (mainly css grammar)

From: Ian Hickson <py8ieh@bath.ac.uk>
Date: Mon, 11 Jan 1999 02:22:51 +0000 (BST)
To: www-style <www-style@w3.org>
cc: css2-editors@w3.org
Message-ID: <Pine.GSO.4.04.9901110132010.8581-100000@amos.bath.ac.uk>

While pursuing the CSS specs I discovered some anomalies. They are listed below.

================

Here is an extract from the CSS1 grammar [1]:

#    unicode         \\[0-9a-f]{1,4}
#    latin1          [-]
#    escape          {unicode}|\\[ -~-]
#    nmchar          [-a-z0-9]|{latin1}|{escape}
#    name            {nmchar}+       
#    "."{name}       {BEGIN(AFTER_IDENT); return CLASS;}

According to this, a number *is* allowed at the start of a class,
since a class consists of a "." followed by a {name} and a {name}
consists of one or more {nmchar} and {nmchar} is any of "-", "a"-"z",
"0"-"9", {latin1} or {escape}. This is not what CSS1 says at the end
of section 7.1 [2]:

#    * in CSS1, selectors (element names, classes and IDs) can contain
#      only the characters A-Z, 0-9, and Unicode characters 161-255, plus
#      dash (-); they cannot start with a dash or a digit; [...]
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
================

CSS1, Appendix B, Paragraph 2 [1]: 

#   It is in some sense, however, still a superset of CSS1: there are
#   additional semantic constraints not expressed in this grammar.

The word "superset" should be "subset".

================

The CSS2 grammar [2] appears to be missing the line returning CLASS
altogether.

================

The last paragraph of the CSS2 grammar says [3]:
 
#   In CSS1, a class name could start with a digit (".55ft"), unless it
#   was a dimension (".55in"). In CSS2, such classes are parsed as
#   unknown dimensions (to allow for future additions of new units). To
#   make ".55ft" a valid class, CSS2 requires the first digit to be
#   escaped (".\55ft")

The final string is incorrect. The correct way of escaping ".55ft" so
that it is a valid CSS2 class is ".\abc 5ft", where "\abc" is whatever
the unicode id for the number "5" is in hexidecimal.

================

The CSS2 errata [4] document has a typo too (!):

# Section 9.2.1
#
#  In the example after the diagram, the HTML fragment "<P>jThis is the
#  content of P.</>" should end instead with the end tag "</P>".

There is a extraneous "j" after the "<P>", which does not appear in
the CSS2 spec.

================

References:
[1] http://www.w3.org/TR/REC-CSS1#appendix-b
[2] http://www.w3.org/TR/REC-CSS1#forward-compatible-parsing
[3] http://www.w3.org/TR/REC-CSS2/grammar.html
[4] http://www.w3.org/Style/css2-updates/REC-CSS2-19980512-errata.html

-- 
Ian Hickson
Received on Sunday, 10 January 1999 21:22:55 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 27 April 2009 13:53:58 GMT