- From: Alan Gresley <alan@css-class.com>
- Date: Tue, 05 Apr 2011 02:21:16 +1000
- To: Leif Halvard Silli <xn--mlform-iua@xn--mlform-iua.no>
- CC: timeless <timeless@gmail.com>, www-style@w3.org
On 4/04/2011 4:18 AM, Leif Halvard Silli wrote: > timeless, Sun, 3 Apr 2011 15:51:22 +0300: >> On Sun, Feb 20, 2011 at 7:14 PM, Leif Halvard Silli wrote: >>> For the sentence: >>> "First, inside a string, a backslash followed by a newline is >>> ignored (i.e., the string is deemed not to contain either the >>> backslash or the newline)." >>> Insert the wording "backslash newline escape" etc: >>> "First, inside a string, a plain backslash newline escape (backslash >>> followed by newline) cancels the meaning of the newline so that >>> the string is deemed to not contain whether backslash or newline." >> >> it should be "demeed to contain neither backslash nor newline". You >> have 'whether' which i think is a typo for 'either'. > > It was meant to be correct. But the "or" should probably be "nor": > "is deemed to not contain whether backslash nor newline." > It is meant to match sentences such as this one: "we do not know > whether it will cost nor how much", see > http://www.pcreview.co.uk/forums/no-we-do-not-know-whether-cost-nor-much-after-release-t1698715.html > > But here is a minimum change (for that part of the sentence) - simply > delete the confusing word "either" and replace "or" with "nor": > "deemed not to contain the backslash nor the newline." > Best? (Note: white-space is important is what I have below) I don't think that is what the spec is saying in 4.1.3. | First, inside a string, a backslash followed by a newline | is ignored (i.e., the string is deemed not to contain | either the backslash or the newline). This apply if the escape is in a string 4.3.7 [1]. | Strings can either be written with double quotes or with | single quotes. So in the example in the spec, a[title="a not s\ o very long title"] { background:green } becomes. a[title="a not so very long title"] { background:green } If white-space was added, then this, a[title="a not s\ o very long title"] {background:green} becomes. a[title="a not s o very long title"] {background:green} I see this above as different wording. >>> First, inside a string, a plain backslash newline escape >>> (backslash followed by newline) cancels the meaning of the >>> newline so that the string is deemed to not contain whether >>> backslash or newline." An escape (backslash) does not cancel the meaning of a newline since an escape at the end of the current line causes a newline to appear. You can not have "backslash followed by newline" neither since it is the backslash that has causes a newline to appear. I believe the below word wording is more to the point. > First, inside a string, an escape (backslash) followed > by a newline cancels the meaning of both the escape and > the newline (i.e., the string is deemed not to contain > either the backslash or the newline). The last part could be this. > the newline (i.e., the string is deemed not to contain > the backslash nor the newline). After this part the spec continues in saying in 4.1.3. | Outside a string, a backslash followed by a newline | stands for itself (i.e., a DELIM followed by a newline). Currently all browsers drop this, \ div { background: green } but only Firefox 3.6~4b parses both of theses. \ div { background: green } \ div { background: green } If a backslash followed by a newline stands for itself outside a string, then the above statements which Firefox 3.6~4b parses would appear like this I think. \div { background: green } \ div { background: green } The first one '\d' has a special meaning so Firefox 3.6~4b has a bug. I'm not sure what should happen with the later that has white-space. Some other examples and how browser handle them (either parsing them or dropping them). \p { background: green } /* parsed */ \ p { background: green } /* dropped */ \div { background: green } /* dropped */ \ div { background: green } /* dropped */ d\i\v { bac\k\g\r\o\u\nd: \g\ree\n } /* parsed */ \0064\0069\0076 { \0062\0061\0063\006B\0067\0072\006F\0075\006E\0064: \0067\0072\0065\0065\006E } /* parsed */ More example which only Firefox 3.6~4b parses. \ p { background: green } /* FF 3.6~4b parses */ \ p { background: green } /* FF 3.6~4b parses */ \ div { background: green } /* FF 3.6~4b parses */ \ div { background: green } /* FF 3.6~4b parses */ div\ { background: green } /* FF 3.6~4b parses */ div\ { background: green } /* FF 3.6~4b parses */ With '*', we get something different. \* { background: green } /* WebKit parses */ \ * { background: green } /* dropped */ \ * { background: green } /* dropped */ \ * { background: green } /* FF 3.6~4b parses */ More example which only Firefox 3.6~4b parses. \0064\ \0069\0076 { \0062\ \0061\0063\006B\0067\0072\006F\0075\006E\0064: \0067\ \0072\0065\0065\006E } \ \0064\ \ \0069\0076 { \0062\ \ \0061\0063\006B\0067\0072\006F\0075\006E\0064: \0067\ \ \0072\0065\0065\006E } \ For any other browser, the remainder of the style sheet is thrown out unless it something like 'p' is pulled in behind like what happen with '\p { background: green }'. The nesting of identifiers is important it seems. body \0064\0069\0076 { background: lime } /* parsed */ \0062\006F\0064\0079 div { background: lime } /* dropped */ \0062\006F\0064\0079\ div { background: lime } /* dropped */ \0062\006F\0064\0079\ div { background: lime } /* FF 3.6~4b parses */ The way all this should world with escape, newlines and white-space needs to bee looked at, especially if authors who use meaningful ID or class names should be able to easy select elements like this. <div class="α"> <p class="ω">This paragraph should have a green background.</p> </div> Here are four test cases. http://css-class.com/test/css21testsuite/escapes-060.xht http://css-class.com/test/css21testsuite/escapes-061.xht http://css-class.com/test/css21testsuite/escapes-062.xht http://css-class.com/test/css21testsuite/escapes-064.xht FF 3.6~4b parses 'escapes-061', 'escapes-062' and 'escapes-064'. All other browsers parses 'escapes-062' and 'escapes-064'. >>> For the sentence: >>> "Second, it cancels the meaning of special CSS characters." >>> Replace "it cancels" with "using plain backslash escapes to cancel": >>> "Second, using plain backslash escapes to cancel the meaning of >>> special >>> CSS characters." I would like to answer the rest of the email but I have already spent about 10 hours on this one and testing. I will reply more in part later. [1] http://www.w3.org/TR/CSS21/syndata.html#strings -- Alan http://css-class.com/ Armies Cannot Stop An Idea Whose Time Has Come. - Victor Hugo
Received on Monday, 4 April 2011 16:21:58 UTC