- From: L. David Baron <dbaron@dbaron.org>
- Date: Wed, 17 Feb 2010 13:21:14 -0500
- To: www-style@w3.org
Various comments on the value serialization rules in: http://dev.w3.org/csswg/cssom/#serializing-css-values follow. For <angle>, <frequency>, <length>, <resolution>, and <time>, Gecko currently preserves the unit the author specified. I'm ok with normalizing to a single unit, although I worry about two things: * compatibility issues * choice of what the canonical unit is In particular, I suspect serializing '12pt' to '4.2333mm' might lead to confusion, though maybe it would be good that authors learn that 'pt' are physical units. The escaping rules presented for <string> and <uri> have bugs in that they produce values that don't round-trip correctly (e.g., values with \n or \r in them, or values with \ in them). I'd propose fixing that the way I did in Gecko, and also generally making the escaping rules for <identifier> more similar to those for <string> and <uri>, by making them as follows: Define "serialize as a codepoint escape" as: serialize the character as: a literal "\" (U+005C), followed by the Unicode code point as the smallest possible number of hexadecimal digits in the range 0-9 a-f (U+0030 to U+0039 and U+0061 to U+0066) to represent the code point in base 16, followed by a space (U+0020). Define "serialize as a character escape" as: serialize the character as: a literal "\" (U+005C), followed by the character. Define "escape as an identifier" as a string represented by the concatenation of, for each character: * if the character is in the range U+0000 to U+001F, the character serialized as a codepoint escape * if the character is the first character and is in the range 0-9 (U+0030 to U+0039), the character serialized as a codepoint escape * if the character is the second character and is in the range 0-9 (U+0030 to U+0039) and the first character is a "-" (U+002D), the character serialized as a codepoint escape * if the character is the second character and is "-" (U+002D) and the first character is "-" too, then the character serialized as a character escape * if the character is not handled by one of the above rules and is greater than or equal to U+0080, is "-" (U+002D) or "_" (U+005F), or is in one of the ranges 0-9 (U+0030 to U+0039), A-Z (U+0041 to U+005A), or a-z (U+0061 to U+007A), the character itself * otherwise, the character serialized as a character escape Define "escape as an string" as a string represented by the concatenation of, for each character: * if the character is in the range U+0000 to U+001F, the character serialized as a codepoint escape * if the character is '"' (U+0022), "'" (U+0027), or '\' (U+005C), the character serialized as a character escape * otherwise, the character itself These rules also have the advantages that they minimize the use of codepoint escapes (generally quite ugly due to the space-as-terminator) to ASCII nonprintables and escaping of digits, and that they escape all ASCII nonprintables (which could otherwise be quite confusing to read). Then <uri> and <string> can refer to "escape as a string" and <identifier> can refer to "escape as an identifier". Also, <uri> should end with '")' rather than ')"'. For <color>, what Gecko does, I believe, is that it handles system colors, color keywords, and 'currentColor' like <keyword>, but handles 'transparent', 'rgb()', 'rgba()', 'hsl()', 'hsla()', '#rgb', and '#rrggbb' as color values which are serialized as follows: * 'transparent' when R, G, B, and A components are all 0 * as 'rgb()' when A component is 255 * as 'rgba()' otherwise I'm not particularly committed to keeping it that way, though. However, I'm somewhat concerned about the idea of switching to #rrggbb notation since rgb() can handle out-of-sRGB values whereas #rrggbb cannot. (Gecko doesn't currently implement that, but I'd like to.) Also, the title of the section following is misspelled ("Declaraton" needs an i). -David -- L. David Baron http://dbaron.org/ Mozilla Corporation http://www.mozilla.com/
Received on Wednesday, 17 February 2010 18:21:45 UTC