- From: Bert Bos <Bert.Bos@sophia.inria.fr>
- Date: Mon, 11 Jan 1999 13:49:30 +0100 (MET)
- To: Ian Hickson <py8ieh=www-style@bath.ac.uk>
- Cc: www-style <www-style@w3.org>, css2-editors@w3.org
Ian Hickson writes: > > While pursuing the CSS specs I discovered some anomalies. They are listed below. Thanks. I believe you are correct in all but two of them: > > ================ > > 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; [...] > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indeed. This error in the grammar seems to haunt us, and this time again we forgot to correct it :-( The intention is that class names may not start with a digit, so the error is in the grammar. Unfortunately, there are differences in implementation already. Some implementers (understandably) missed the text in 7.1. > ================ > > 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". No, it should not. The grammar defines a language that is smaller than the language defined in 7.1, but still larger than CSS1. For example, appendix B allows 'font-size: bold', which is not a legal declaration in CSS1. > > ================ > > The CSS2 grammar [2] appears to be missing the line returning CLASS > altogether. Correct, but this is not an error. CSS2 doesn't define "class" as a terminal symbol, but instead as a non-terminal: class: '.' IDENT; It is at a different level in the definition, but the effect is the same (and this time the initial digit *is* forbidden :-) ) > > ================ > > 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. In fact, the whole paragraph might have been omitted. CSS1 only *appeared* to allow initial digits, but as you pointed out, the text in 7.1 explicitly forbade them. I don't know how we could have missed the escape. It should indeed be ".\35 5ft". > > ================ > > 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. OK. > > ================ > > 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 > > Bert -- Bert Bos ( W 3 C ) http://www.w3.org/ http://www.w3.org/people/bos/ W3C/INRIA bert@w3.org 2004 Rt des Lucioles / BP 93 +33 (0)4 92 38 76 92 06902 Sophia Antipolis Cedex, France
Received on Monday, 11 January 1999 08:08:52 UTC