- From: Leif Halvard Silli <xn--mlform-iua@xn--mlform-iua.no>
- Date: Wed, 6 Apr 2011 14:58:30 +0200
- To: Alan Gresley <alan@css-class.com>
- Cc: timeless <timeless@gmail.com>, www-style@w3.org
Alan Gresley, Tue, 05 Apr 2011 02:21:16 +1000: > 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: >>>> 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." [variant b] >> "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 [variant c] >> "deemed not to contain the backslash nor the newline." > I don't think that is what the spec is saying in 4.1.3. May be because you didn't got the fine points of was it said? See below. [ snip ] > 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. Note the words "so that": "cancels the meaning of the newline _so that_ the string is deemed to not contain whether backslash or newline". >>>> 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. Again, note that "so that" begins a phrase which describes what "cancels" means. The "special meaning" that newline has inside a string is that it is illegal. But with \ before it becomes legal as well as ignored. > You can not have "backslash followed by newline" neither since it is > the backslash that has causes a newline to appear. Inside "a string", no newline appears. It doesn't disappears either. It is simply "deemed" to not be there. > 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). An escape cannot cancel the meaning of itself. ;-) The special escape character meaning of \ is not cancelled ... [ snip ] > but only Firefox 3.6~4b parses both of theses. > \ > div { background: green } [ snip ] > 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 } No. Outside a string, the newline becomes a space: \ div{} The Firefox bug is that it does not discern between inside and outside a string. There ought to be a test case to catch that. > With '*', we get something different. > > \* { background: green } /* WebKit parses */ Yes. I have asked for a test case for that thing. http://lists.w3.org/Archives/Public/public-css-testsuite/2011Feb/0089.html > 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 */ There needs to be one more space before the div. Read the spec - I'll just quote one bit: ]] Note that this means that a "real" space after the escape sequence must be doubled. [[ Thus: \0062\006F\0064\0079 div { background: lime } /* parsed */ In theory, this should have worked, though, but doesn't: \000062\00006F\000064\000079 div { background: lime } /*dropped*/ Above there are 6 digits in each escape, and thus the double space ought not to have been necessary. But, alas, it seems to be needed. Some place you also had these example: > \p { background: green } /* parsed */ > \ p { background: green } /* dropped */ > > \div { background: green } /* dropped */ > \ div { background: green } /* dropped */ The difference between \p and \div is related to the fact that the Unicode escapes uses the characters in the 0-9 and A-F range. Thus, in case of \div, then it looks to the user agent as an incorrect/illegal escape sequence. I don't know if the spec talks about that problem, but at least it says this: ]] If a character in the range [0-9a-fA-F] follows the hexadecimal number, the end of the number needs to be made clear. [[k You can also try this document, to check how <f> and <g> are treated differently: <!DOCTYPE html><style>\f,\g{background: lime;}</style><f class=f>f</f><g class=g>g</g> [...] > 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. Bear in mind that this letter is meant to be an *editorial* comment. -- leif halvard silli
Received on Wednesday, 6 April 2011 12:59:02 UTC