- 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
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 UTC