/[suikacvs]/markup/selectors/ssft/ssft-work.en.html
Suika

Diff of /markup/selectors/ssft/ssft-work.en.html

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.6 by wakaba, Tue Oct 2 10:13:58 2007 UTC revision 1.18 by wakaba, Sun Oct 28 07:19:15 2007 UTC
# Line 10  Line 10 
10  <div class="header">  <div class="header">
11  <h1>Selectors Serialization Format for Testing (<abbr>SSFT</abbr>)  <h1>Selectors Serialization Format for Testing (<abbr>SSFT</abbr>)
12  Specification</h1>  Specification</h1>
13  <h2>Working Draft <time datetime=2007-10-02>2 October 2007</time></h2>  <h2>Working Draft <time datetime=2007-10-28>28 October 2007</time></h2>
14    
15  <dl class="versions-uri">  <dl class="versions-uri">
16  <dt>This Version</dt>  <dt>This Version</dt>
# Line 63  available at <code class="URI">&lt;<a Line 63  available at <code class="URI">&lt;<a
63  at the time of its publication.  Other documents  at the time of its publication.  Other documents
64  might supersede this document.</em></p>  might supersede this document.</em></p>
65    
66  <p>This document is a working draft, produced as part  <p>This document is a working draft, produced as part of the
67    <a href="http://suika.fam.cx/www/markup/html/whatpm/readme">Whatpm</a>
68    subproject
69  of the <a href="http://suika.fam.cx/www/manakai-core/doc/web/">manakai</a>  of the <a href="http://suika.fam.cx/www/manakai-core/doc/web/">manakai</a>
70  project.  It might be updated, replaced, or obsoleted by  project.  It might be updated, replaced, or obsoleted by
71  other documents at any time.  It is inappropriate to  other documents at any time.  It is inappropriate to
# Line 80  normative version.</p> Line 82  normative version.</p>
82  <div id="introduction" class="section">  <div id="introduction" class="section">
83  <h2>Introduction</h2>  <h2>Introduction</h2>
84    
85  <p class=section-info>This section is <em>non-normative</em>.</p>  <p class=section-info>This section is <em>non$B!>(Bnormative</em>.</p>
86    
87  <p>Selectors  <p>Selectors
88  <cite class="bibref normative">[<a href="#ref-SELECTORS">SELECTORS</a>]</cite>  <cite class="bibref normative">[<a href="#ref-SELECTORS">SELECTORS</a>]</cite>
# Line 96  in a tree structure and are used in Web Line 98  in a tree structure and are used in Web
98  <abbr>API</abbr></a>  <abbr>API</abbr></a>
99  <cite class="bibref informative">[<a href="#ref-SAPI">SAPI</a>]</cite>.</p>  <cite class="bibref informative">[<a href="#ref-SAPI">SAPI</a>]</cite>.</p>
100    
101  <div class="issue ed">...</div>  <p>It is so flexible language that a conceptually same pattern
102    can be represented in inifnite numbers of instances of selectors.
103    It might be convinient for e.g. validation of a test result to
104    define a subset of the language, in which no semantically equivalent
105    selectors are contained.</p>
106    
107  <p><a href="http://dev.w3.org/cvsweb/csswg/cssom/Overview.html">The  <p><a href="http://dev.w3.org/cvsweb/csswg/cssom/Overview.html">The
108  <abbr title="Cascading Style Sheets Object Model">CSSOM</abbr>  <abbr title="Cascading Style Sheets Object Model">CSSOM</abbr>
# Line 109  attribute.  However, the algorithm is in Line 115  attribute.  However, the algorithm is in
115  <time datetime=2007-09-25>at the time of the writing</time>.    <time datetime=2007-09-25>at the time of the writing</time>.  
116  Note that current Web browser implementations  Note that current Web browser implementations
117  of the <code>selectorText</code> attribute are consistently broken  of the <code>selectorText</code> attribute are consistently broken
118  in not escaping unsafe identifiers.</p>  in not escaping unsafe identifiers and therefore it is not wise
119    to deploy that format for testing.</p>
120    
121  </div>  </div>
122    
123  <div class="section" id="terminology">  <div class="section" id="terminology">
124  <h2>Terminology</h2>  <h2>Terminology</h2>
125    
126  <p>The key words <q><em class="rfc2119">MUST</em></q>,  <p>The key words <q><dfn id=must><em class="rfc2119">MUST</em></dfn></q>,
127  <q><em class="rfc2119">MUST NOT</em></q>,  <q><dfn id=must-not><em class="rfc2119">MUST NOT</em></dfn></q>,
128  <q><em class="rfc2119">SHOULD</em></q>,  <q><dfn id=should><em class="rfc2119">SHOULD</em></dfn></q>,
129  <q><em class="rfc2119">SHOULD NOT</em></q>, and  <q><dfn id=should-not><em class="rfc2119">SHOULD NOT</em></dfn></q>, and
130  <q><em class=rfc2119>MAY</em></q> in this  <q><dfn id=may><em class=rfc2119>MAY</em></dfn></q> in this
131  document are to be interpreted as described in  document are to be interpreted as described in
132  <a href="urn:ietf:rfc:2119"><abbr title="Request for Comments">RFC</abbr>  <a href="urn:ietf:rfc:2119"><abbr title="Request for Comments">RFC</abbr>
133  2119</a>  2119</a>
134  <cite class="bibref normative">[<a href="#ref-KEYWORDS">KEYWORDS</a>]</cite>.</p>  <cite class="bibref normative">[<a href="#ref-KEYWORDS">KEYWORDS</a>]</cite>.</p>
135    
136    <p>Requirements phrased in the imperative as part of algorithms are to be
137    interpreted with the meaning of the key word (<em class=rfc2119>MUST</em>)
138    used in introducing the algorithm.</p>
139    
140    <p>Conformance requirements phrased as algorithms or specific steps
141    <em class=rfc2119>MAY</em> be implemented in any manner, so long as the end
142    result is equivalent.</p>
143    
144  <!-- Strictly speaking the paragraph below is not part of terminology. -->  <!-- Strictly speaking the paragraph below is not part of terminology. -->
145  <p>All examples and notes in this specification are non-normative,  <p>All examples and notes in this specification are non$B!>(Bnormative,
146  as are all sections explicitly marked non-normative.  Everything  as are all sections explicitly marked non$B!>(Bnormative.  Everything
147  else in this specification is normative.</p>  else in this specification is normative.</p>
148    
149    <p>For the purpose of this specification, pseudo$B!>(Belements are also
150    referred to as <dfn title="simple selector" id=simple-selector>simple
151    selectors</dfn> and are considered as part of the last sequence of
152    simple selector in a selector.</p>
153  </div>  </div>
154    
155  <div class="section" id="serializing">  <div class="section" id="serializing">
156  <h2>Serializing Groups of Selectors</h2>  <h2>Serializing Selectors in
157    <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
158    Representation</h2>
159    
160    <p>Subsections of this section define algorithms
161    to <a href="#algorithm-serialize-a-simple-selector">serialize a simple
162    selector</a> or <a href="#algorithm-serialize-a-group-of-selectors">serialize
163    a group of selectors</a>.</p>
164    
165  <div class="issue ed">  <div class="issue ed">
166  <p><a href="http://suika.fam.cx/gate/cvs/*checkout*/markup/html/whatpm/Whatpm/CSS/SelectorsSerializer.pm">See the reference implementation</a>  <p><a href="http://suika.fam.cx/gate/cvs/*checkout*/markup/html/whatpm/Whatpm/CSS/SelectorsSerializer.pm">See
167  for now.</p>  also the reference implementation</a> for now.</p>
168  </div>  </div>
169    
170  <p><dfn id=newline>Newline</dfn> is <code class=char>U+000A</code>  <div class="note memo">
171  <code class=charname>LINE FEED</code> <span class=ed>or  <p>The serialized representation will not contain any comment.</p>
172  U+000D U+000A or U+000A ??</span>.</p>  </div>
   
173  <!-- TODO: link terms to Selectors -->  <!-- TODO: link terms to Selectors -->
174    
175  <p>To <dfn id=algorithm-serialize-a-group-of-selectors>serialize a group of  <div class=section id=serializing-tokens>
176  selectors</dfn> (<dfn id=var-gs><var>gs</var></dfn>):</p>  <h3>Serializing Tokens</h3>
177    
178    <p>To <dfn id=algorithm-normalize-an-ident title="normalize a string as an IDENT">normalize
179    a string (<dfn id=var-n><var>n</var></dfn>) as an <code>IDENT</code></dfn>,
180    the following algorithm <em class=rfc2119>MUST</em> be used:</p>
181    <ol>
182    <li>If <var>n</var> is either an <code>IDENT</code> or a <code>HASH</code>,
183    replace the escape sequences (<code>\</code> and following characters) in
184    <var>n</var> by characters represented by them respectively.</li>
185    <li>If <var>n</var> is a <code>HASH</code>, remove the leading
186    <code class=char>U+0023</code> <code class=charname>NUMBER SIGN</code>
187    (<code class=char>#</code>) character from <var>n</var>.</li>
188    <li>If there is any character that is <em>not</em> one of
189    <code class=char>U+002D</code> <code class=charname>HYPHEN-MINUS</code>
190    (<code class=char>-</code>), <code class=char>U+0030</code>
191    <code class=charname>DIGIT ZERO</code>
192    (<code class=char>0</code>) to <code class=char>U+0039</code>
193    <code class=charname>DIGIT NINE</code> (<code class=char>9</code>),
194    <code class=char>U+0041</code> <code class=charname>LATIN CAPITAL LETTER
195    A</code> (<code class=char>A</code>) to <code class=char>U+005A</code>
196    <code class=charname>LATIN CAPITAL LETTER Z</code> (<code class=char>Z</code>),
197    <code class=char>U+005F</code> <code class=charname>LOW LINE</code>
198    (<code class=char>_</code>), <code class=char>U+0061</code>
199    <code class=charname>LATIN SMALL LETTER A</code>
200    (<code class=char>a</code>) to <code class=char>U+006A</code>
201    <code class=charname>LATIN SMALL LETTER Z</code> (<code class=char>z</code>),
202    <code class=char>U+0080</code> to <code class=char>U+D7FF</code>, or
203    <code class=char>U+E000</code> to <code class=char>U+10FFFF</code> in
204    <var>n</var>, then replace it by string <code>\<var>HHHHHH</var></code>, where
205    <dfn id=var-HHHHHH><var>HHHHHH</var></dfn> is the upper$B!>(Bcase zero$B!>(Bpadded
206    hexadecimal representation of the character.  If the character
207    is outside the range of <code>[<code class=char>U+0000</code>,
208    <code class=char>U+10FFFF</code>]</code>, <var>HHHHHH</var>
209    <em class=rfc2119>MUST</em> be <code>FFFFFF</code>.</li>
210    <li>If the first character in <var>n</var> is one of
211    <code class=char>U+0030</code> <code class=charname>DIGIT ZERO</code>
212    (<code class=char>0</code>) to <code class=char>U+0039</code>
213    <code class=charname>DIGIT NINE</code> (<code class=char>9</code>),
214    then prepend a string <code>\00003</code> at the beginning of
215    <var>n</var>.</li>
216    <li>If the first character in <var>n</var> is <code class=char>U+002D</code>
217    <code class=charname>HYPHEN-MINUS</code> (<code class=char>-</code>) and
218    the second character, if any, is <em>not</em> one of
219    <code class=char>U+0041</code> <code class=charname>LATIN CAPITAL LETTER
220    A</code> (<code class=char>A</code>) to <code class=char>U+005A</code>
221    <code class=charname>LATIN CAPITAL LETTER Z</code> (<code class=char>Z</code>),
222    <code class=char>U+005F</code> <code class=charname>LOW LINE</code>
223    (<code class=char>_</code>), <code class=char>U+0061</code>
224    <code class=charname>LATIN SMALL LETTER A</code>
225    (<code class=char>a</code>) to <code class=char>U+006A</code>
226    <code class=charname>LATIN SMALL LETTER Z</code> (<code class=char>z</code>),
227    <code>U+0080</code> to <code>U+D7FF</code>, or
228    <code>U+E000</code> to <code>U+10FFFF</code>, or
229    <var>n</var> is equal to <code class=char>U+002D</code>
230    <code class=charname>HYPHEN-MINUS</code> (<code class=char>-</code>), then
231    replace the <code class=char>U+002D</code>
232    <code class=charname>HYPHEN-MINUS</code> (<code class=char>-</code>)
233    character by string <code>\00002D</code>.</li>
234    <li>Then, <var>n</var> is the result of the algorithm.</li>
235    </ol>
236    
237    <p>To <dfn id=algorithm-normalize-a-string title="normalize a string (STRING or IDENT) as a STRING">normalize
238    a string (<dfn id=var-s><var>s</var></dfn>) as a <code>STRING</code></dfn>,
239    the following algorithm <em class=rfc2119>MUST</em> be used:</p>
240    <ol>
241    <li>If <var>s</var> is either an <code>IDENT</code> or a
242    <code>STRING</code>, replace the escape sequences (<code>\</code> and
243    following characters) in <var>s</var> by characters represented by them
244    (or an empty string if <code>\</code> is immediately followed by
245    newline character(s)) respectively.</li>
246    <li>If <var>s</var> is a <code>STRING</code>, remove the quotation marks
247    enclosing <var>s</var>.</li>
248    <li><p>If there is any character that is <em>not</em> one of
249    <code class=char>U+0020</code> <code class=charname>SPACE</code>,
250    <code class=char>U+0021</code> <code class=charname>EXCLAMATION MARK</code>
251    (<code class=char>!</code>), <code class=char>U+0023</code>
252    <code class=charname>NUMBER SIGN</code> (<code class=char>#</code>) to
253    <code class=char>U+005B</code> <code class=charname>LEFT SQUARE
254    BRACKET</code>, <code class=char>U+005D</code> <code class=charname>RIGHT
255    SQUARE BRACKET</code> to <code class=char>U+D7FF</code>, or
256    <code class=char>U+E000</code> to <code class=char>U+10FFFF</code> in
257    <var>s</var>, then replace it by string <code>\<var>HHHHHH</var></code>, where
258    <dfn id=var-HHHHHH><var>HHHHHH</var></dfn> is the upper$B!>(Bcase zero$B!>(Bpadded
259    hexadecimal representation of the character.  If the character
260    is outside the range of <code>[<code class=char>U+0000</code>,
261    <code class=char>U+10FFFF</code>]</code>, <var>HHHHHH</var>
262    <em class=rfc2119>MUST</em> be <code>FFFFFF</code>.</p></li>
263    <li><p>Insert a <code class=char>U+0022</code> <code class=charname>QUOTATION
264    MARK</code> (<code class=char>"</code>) at the beginning of
265    <var>s</var>.</p></li>
266    <li><p>Insert a <code class=char>U+0022</code> <code class=charname>QUOTATION
267    MARK</code> (<code class=char>"</code>) at the end of <var>s</var>.</p></li>
268    <li><p>Then, <var>s</var> is the result of the algorithm.</p></li>
269    </ol>
270    
271    <p>A <dfn id=newline title=newline>newline</dfn>
272    <em class=rfc2119>SHOULD</em> be represented as a
273    <code class=char>U+000A</code> <code class=charname>LINE FEED</code>
274    character.  However, depending on the context where
275    the <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
276    representation is in use, a sequence of
277    <code class=char>U+000D</code> <code class=charname>CARRIAGE RETURN</code>
278    followed by a <code class=char>U+000A</code>
279    <code class=charname>LINE FEED</code> (i.e. a
280    <code>CRLF</code> sequence) or a character
281    <code class=char>U+000D</code> <code class=charname>CARRIAGE RETURN</code>
282    <em class=rfc2119>MAY</em> be used as a <a href="#newline">newline</a> instead.
283    <a href="#newline">Newline</a> representations
284    <em class=rfc2119>SHOULD</em> be consistent in an
285    <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
286    representation.</p>
287    
288    <div class="note memo">
289    <p>Therefore, newlines must be normalized before
290    <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
291    representations are literally compared.</p>
292    </div>
293    
294    <div class="issue ed">
295    <p>Need to define <dfn id=lower-case>lower$B!>(Bcase</dfn>.
296    It is tr/A-Z/a-z/ for now.</p>
297    </div>
298    
299    </div>
300    
301    
302    <div class=section id=serializing-simple-selectors>
303    <h3>Serializing Simple Selectors</h3>
304    
305    <p>No <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
306    representation is defined for an invalid <a href="#simple-selector">simple
307    selector</a>.</p>
308    
309    <p>To
310    <dfn id=algorithm-serialize-a-simple-selector title="serialize a simple selector">serialize
311    a simple selector (<dfn><var id=var-ss>ss</var></dfn>)</dfn>,
312    the following algorithm <em class=rfc2119>MUST</em> be used:</p>
313    <ol>
314    <li>Let <dfn id=var-r><var>r</var></dfn> an empty string.</li>
315    <li>Process <var>ss</var> as following:
316    
317    <dl class=switch>
318    <dt>If <var>ss</var> is a type or universal selector</dt>
319      <dd>
320        <ol>
321        <li>Append a namespace prefix as following:
322    
323          <dl class=switch>
324          <dt>If a namespace URI is specified (via namespace prefix, or
325          by omitting namespace prefix where a default namespace is specified)</dt>
326            <dd>Append the namespace URI as a
327            <a href="#algorithm-normalize-an-ident" title="normalize a string as an IDENT">normalized
328            <code>IDENT</code></a> to <var>r</var>.  Then, append a
329            <code class=char>U+007C</code>
330            <code class=charname>VERTICAL BAR</code> (<code class=char>|</code>)
331            character to <var>r</var>.</dd>
332          <dt>If the null namespace is specified (by zero$B!>(Blength namespace
333          prefix)</dt>
334            <dd>Append a <code class=char>U+007C</code>
335            <code class=charname>VERTICAL BAR</code> (<code class=char>|</code>)
336            character to <var>r</var>.</dd>
337          <dt>If no namespace is specified (by namespace prefix <code>*</code>,
338          or by omitting namespace prefix where no default namespace is
339          specified)</dt>
340            <dd>Append a <code class=char>U+002A</code>
341            <code class=charname>ASTERISK</code> (<code class=char>*</code>)
342            character, followed by a <code class=char>U+007C</code>
343            <code class=charname>VERTICAL BAR</code> (<code class=char>|</code>)
344            character, to <var>r</var>.</dd>
345          </dl>
346        </li>
347        <li>If <var>ss</var> is a type selector, append the
348        <a href="#algorithm-normalize-an-ident" title="normalize a string (IDENT) an IDENT">normalized</a>
349        local name to <var>r</var>.</li>
350        <li>If <var>ss</var> is a universal selector, append
351        a <code class=char>U+002A</code> <code class=charname>ASTERISK</code>
352        (<code class=char>*</code>) character to <var>r</var>.</li>
353        </ol>
354      </dd>
355    <dt>If <var>ss</var> is an attribute selector</dt>
356      <dd>
357        <ol>
358        <li>Append a <code class=char>U+005B</code> <code class=charname>LEFT
359        SQUARE BRACKET</code> (<code class=char>[</code>) to
360        <var>r</var>.</li>
361        <li>
362          Append a namespace prefix as following:
363          <dl>
364          <dt>If a namespace URI is specified</dt>
365            <dd>Append the namespace URI as a
366            <a href="#algorithm-normalize-an-ident" title="normalize a string as an IDENT">normalized
367            <code>IDENT</code></a> to <var>r</var>.  Then, append a
368            <code class=char>U+007C</code>
369            <code class=charname>VERTICAL BAR</code> (<code class=char>|</code>)
370            character to <var>r</var>.</dd>
371          <dt>If the null namespace is specified</dt>
372            <dd>Append a <code class=char>U+007C</code>
373            <code class=charname>VERTICAL BAR</code> character to
374            <var>r</var>.</dd>
375          <dt>If no namespace is specified</dt>
376            <dd>Append a <code class=char>U+002A</code>
377            <code class=charname>ASTERISK</code> (<code class=char>*</code>)
378            character, followed by a <code class=char>U+007C</code>
379            <code class=charname>VERTICAL BAR</code> (<code class=char>|</code>)
380            character, to <var>r</var>.</dd>
381          </dl>
382        </li>
383        <li>Append the
384        <a href="#algorithm-normalize-an-ident" title="normalize a string (IDENT) as an IDENT">normalized</a>
385        local name to <var>r</var>.</li>
386        <li>If a value is specified in <var>ss</var>:
387          <ol>
388          <li>Depending on the way to match, append <code>=</code>,
389          <code>~=</code>, <code>|=</code>, <code>^=</code>,
390          <code>$=</code>, or <code>*=</code> to <var>r</var>.</li>
391          <li>Append the
392          <a href="#algorithm-normalize-a-string" title="normalize a string">normalized</a>
393          value to <var>r</var>.</li>
394          </ol>
395        </li>
396        <li>Append a <code class=char>U+005D</code> <code class=charname>RIGHT
397        SQUARE BRACKET</code> (<code class=char>]</code>) to
398        <var>r</var>.</li>
399        </ol>
400      </dd>
401    <dt>If <var>ss</var> is a class selector</dt>
402      <dd>Append a <code class=char>U+002E</code> <code class=charname>FULL
403      STOP</code> (<code class=char>.</code>) character, followed
404      by <a href="#algorithm-normalize-an-ident" title="normalize a string (IDENT) as an IDENT">normalized</a>
405      class name, to <var>r</var>.</dd>
406    <dt>If <var>ss</var> is an <abbr>ID</abbr> selector</dt>
407      <dd>Append a <code class=char>U+0023</code> <code class=charname>NUMBER
408      SIGN</code> (<code class=char>#</code>) character, followed
409      by <a href="#algorithm-normalize-an-ident" title="normalize a string (HASH except for the leading #) as an IDENT">normalized</a>
410      <abbr>ID</abbr>, to <var>r</var>.</dd>
411    <dt>If <var>ss</var> is a pseudo$B!>(Bclass selector</dt>
412      <dd>
413        <ol>
414        <li>Append a <code class=char>U+003A</code>
415        <code class=charname>COLON</code> (<code class=char>:</code>) character
416        to <var>r</var>.</li>
417        <li>Append the
418        <a href="#algorithm-normalize-an-ident" title="normalize a string (IDENT) as an IDENT">normalized</a>
419        name (in <a href="#lower-case">lower$B!>(Bcase</a>) of the pseudo$B!>(Bclass to
420        <var>r</var>.</li>
421        <li>Append any arguments as following:
422          <dl class=switch>
423          <dt>If the name of the pseudo$B!>(Bclass is <code>lang</code></dt>
424            <dd>
425              <ol>
426              <li>Append a <code class=char>U+0028</code> <code class=charname>LEFT
427              PARENTHESIS</code> (<code class=char>(</code>) character
428              to <var>r</var>.</li>
429              <li>Append the
430              <a href="#algorithm-normalize-an-ident" title="normalize a string (IDENT) as an IDENT">normalized</a>
431              language tag (the argument) to <var>r</var>.
432              <span class="issue ed">Should we normalize cases?</span></li>
433              <li>Append a <code class=char>U+0029</code>
434              <code class=charname>RIGHT PARENTHESIS</code>
435              (<code class=char>)</code>) character
436              to <var>r</var>.</li>
437              </ol>
438            </dd>
439          <dt>If the name of the pseudo$B!>(Bclass is
440          <code>-manakai-contains</code></dt>
441            <dd>
442              <ol>
443              <li>Append a <code class=char>U+0028</code> <code class=charname>LEFT
444              PARENTHESIS</code> (<code class=char>(</code>) character
445              to <var>r</var>.</li>
446              <li>Append the
447              <a href="#algorithm-normalize-a-string" title="normalize a string">normalized</a>
448              string (the argument) to <var>r</var>.</li>
449              <li>Append a <code class=char>U+0029</code>
450              <code class=charname>RIGHT PARENTHESIS</code>
451              (<code class=char>)</code>) character
452              to <var>r</var>.</li>
453              </ol>
454            </dd>
455          <dt>If name of the pseudo$B!>(Bclass is either <code>nth-child</code>,
456          <code>nth-last-child</code>, <code>nth-of-type</code>, or
457          <code>nth-last-of-type</code></dt>
458            <dd>
459              <ol>
460              <li>Append a <code class=char>U+0028</code> <code class=charname>LEFT
461              PARENTHESIS</code> (<code class=char>(</code>) character
462              to <var>r</var>.</li>
463              <li>Append <span class=ed>@@ normalized</span>
464              integer <var>a</var> to <var>r</var>.
465              If the argument is a keyword <code>odd</code> or <code>even</code>,
466              <var>a</var> is <code>2</code>.  If <var>a</var> and
467              <code>n</code> is omitted, <var>a</var> is assumed as
468              <code>0</code>.  Otherwise, if <var>a</var> is omitted,
469              it is assumed as <code>1</code> (or <code>-1</code>,
470              if there is a <code class=char>U+002D</code>
471              <code class=charname>HYPHEN-MINUS</code> (<code class=char>-</code>)
472              character).</li>
473              <li>Append a <code class=char>U+006E</code>
474              <code class=charname>LATIN SMALL LETTER N</code>
475              (<code class=char>n</code>) character to <var>r</var>.</li>
476              <li>Append <span class=ed>@@ normalized</span>
477              integer <var>b</var> to <var>r</var>.
478              It <em class=rfc2119>MUST</em> be preceded by a sign,
479              either <code class=char>U+002B</code> <code class=charname>PLUS
480              SIGN</code> (<code class=char>+</code>) or
481              <code class=char>U+002D</code>
482              <code class=charname>HYPHEN-MINUS</code> (<code class=char>-</code>)
483              character.  If the argument is a keyword <code>odd</code>,
484              <var>b</var> is <code>1</code>.  If the argument
485              is a keyword <code>even</code>, <var>b</var> is
486              <code>0</code>.  If <var>b</var> is omitted, it is assumed as
487              <code>0</code>.  The sign of <code>0</code>
488              <em class=rfc2119>MUST</em> be <code class=char>U+002B</code>
489              <code class=charname>PLUS SIGN</code>
490              (<code class=char>+</code>).</li>
491              <li>Append a <code class=char>U+0029</code>
492              <code class=charname>RIGHT PARENTHESIS</code>
493              (<code class=char>)</code>) character
494              to <var>r</var>.</li>
495              </ol>
496            </dd>
497          <dt>If the name of the pseudo$B!>(Bclass is <code>not</code></dt>
498            <dd>
499              <ol>
500                <li>Append a string of <code class=char>U+003A</code>
501                <code class=charname>COLON</code>, <code class=char>U+006E</code>
502                <code class=charname>LATIN SMALL LETTER N</code>,
503                <code class=char>U+006F</code> <code class=charname>LATIN
504                SMALL LETTER O</code>, <code class=char>U+0074</code>
505                <code class=charname>LATIN SMALL LETTER T</code>, and
506                <code class=char>U+0028</code> <code class=charname>LEFT
507                PARENTHESIS</code> (<code>:not(</code>), followed by a
508                <a href="#newline">newline</a>, to <var>r</var>.</li>
509                <li>Append four <code class=char>U+0020</code>
510                <code class=charname>SPACE</code> characters to
511                <var>r</var>.</li>
512                <li>Append four <code class=char>U+0020</code>
513                <code class=charname>SPACE</code> characters to
514                <var>r</var> again.</li>
515                <li><a href="#algorithm-serialize-a-simple-selector">Serialize
516                the simple selector specified as the argument to the
517                <code>not</code> pseudo$B!>(Bclass</a>.</li>
518                <li>Append a <a href="#newline">newline</a> to
519                <var>r</var>.</li>
520                <li>Append four <code class=char>U+0020</code>
521                <code class=charname>SPACE</code> characters to
522                <var>r</var>.</li>
523                <li>Append a <code class=char>U+0029</code>
524                <code class=charname>RIGHT PARENTHESIS</code>
525                (<code class=char>)</code>) character
526                to <var>r</var>.</li>
527              </ol>
528            </dd>
529          <dt>Otherwise</dt>
530            <dd>The pseudo$B!>(Bclass is not supported by this version of
531            <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
532            and therefore no
533            <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
534            representation is defined for <var>ss</var>.  Stop the algorithm.</dd>
535          </dl>
536        </li>
537        </ol>
538      </dd>
539    <dt>If <var>ss</var> is a pseudo$B!>(Belement</dt>
540      <dd>
541        <ol>
542        <li>Append two <code class=char>U+003A</code>
543        <code class=charname>COLON</code> characters (<code>::</code>)
544        to <var>r</var>.</li>
545        <li>Append the
546        <a href="#algorithm-normalize-an-ident" title="normalize a string (IDENT) as an IDENT">normalized</a>
547        name (in <a href="#lower-case">lower$B!>(Bcase</a>) of the pseudo$B!>(Belement
548        to <var>r</var>.</li>
549        <li>If the pseudo$B!>(Belement has any arguments:
550            The pseudo$B!>(Belement is not supported by this version of
551            <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
552            and therefore no
553            <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
554            representation is defined for <var>ss</var>.  Stop the algorithm.
555        </li>
556        </ol>
557      </dd>
558    </dl>
559    </li>
560    <li>Then, <var>r</var> is the
561    <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
562    representation of <var>ss</var>.</li>
563    </ol>
564    
565    </div>
566    
567    <div class=section id=serializing-groups-of-selectors>
568    <h3>Serializing Groups of Selectors</h3>
569    
570    <p>No <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
571    representation is defined for an invalid
572    <a href="http://www.w3.org/TR/css3-selectors/#grouping">group of
573    selectors</a>.</p>
574    
575    <p>To
576    <dfn id=algorithm-serialize-a-group-of-selectors title="serialize a group of selectors">serialize
577    a group of selectors (<dfn id=var-gs><var>gs</var></dfn>)</dfn>,
578    the following algorithm <em class=rfc2119>MUST</em> be used:</p>
579  <ol>  <ol>
580  <li>Let <dfn id=var-result><var>result</var></dfn> an empty string.</li>  <li>Let <dfn id=var-result><var>result</var></dfn> an empty string.</li>
581  <li>For each selector (<dfn id=var-selector><var>selector</var></dfn>) in  <li>For each selector (<dfn id=var-selector><var>selector</var></dfn>) in
582  <var>gs</var>:  <var>gs</var>:
583    <ol>    <ol>
584    <li>If <var>selector</var> is <em>not</em> the first selector    <li>If <var>selector</var> is <em>not</em> the first selector
585    in the group of selectors, then append a <code class=char>U+002C</code>    in the <var>gs</var>, then append a <code class=char>U+002C</code>
586    <code class=charname>COMMA</code> followed by a    <code class=charname>COMMA</code> (<code class=char>,</code>) followed by a
587    <a href="#newline">newline</a> to <var>result</var>.</li>    <a href="#newline">newline</a> to <var>result</var>.</li>
588    <li>Append four <code class=char>U+0020</code>    <li>Append four <code class=char>U+0020</code>
589    <code class=charname>SPACE</code> characters to <var>result</var>.</li>    <code class=charname>SPACE</code> characters to <var>result</var>.</li>
590    <li>Process each sequence of simple selectors or    <li>Process each sequence of simple selectors or
591    combinator in <var>selector</var> by following algorithm:    combinator in <var>selector</var> as following:
592      <dl class=switch>      <dl class=switch>
593      <dt>If it is a sequence of simle selector      <dt>If it is a sequence of simle selector
594      (<dfn id=var-sss><var>sss</var></dfn>)</dt>      (<dfn id=var-sss><var>sss</var></dfn>)</dt>
595        <dd class=ed>@@</dd>        <dd>
596            <ol>
597            <li class=ed><a href="#algorithm-serialize-a-simple-selector">Serialize
598            each simple selector</a> in <var>sss</var>.</li>
599            <li class=ed>sort</li>
600            <li>Append a <a href="#newline">newline</a> to <var>result</var>.</li>
601            </ol>
602          </dd>
603      <dt>If it is a combinator (<dfn id=var-c><var>c</var></dfn>)</dt>      <dt>If it is a combinator (<dfn id=var-c><var>c</var></dfn>)</dt>
604        <dd>        <dd>
605          <ol>          <ol>
606          <li>Append two <code class=char>U+0020</code>          <li>Append two <code class=char>U+0020</code>
607          <code class=charname>SPACE</code> characters to <var>result</var>.</li>          <code class=charname>SPACE</code> characters to <var>result</var>.</li>
608          <li>          <li>Process <var>c</var> as following:
609    
610            <dl class=switch>            <dl class=switch>
611            <dt>If <var>c</var> is descendant combinator (white space)</dt>            <dt>If <var>c</var> is descendant combinator (white space)</dt>
612              <dd>Append a <code class=char>U+0020</code>              <dd>Append a <code class=char>U+0020</code>
# Line 179  selectors</dfn> (<dfn id=var-gs><var>gs< Line 615  selectors</dfn> (<dfn id=var-gs><var>gs<
615            <dt>If <var>c</var> is child combinator            <dt>If <var>c</var> is child combinator
616            (<code class=char>></code>)</dt>            (<code class=char>></code>)</dt>
617              <dd>Append a <code class=char>U+003E</code>              <dd>Append a <code class=char>U+003E</code>
618              <code class=charname>GREATER-THAN SIGN</code> character to              <code class=charname>GREATER-THAN SIGN</code>
619              <var>result</var>.</dd>              (<code class=char>></code>) character to <var>result</var>.</dd>
620            <dt>If <var>c</var> is adjacent sibling combinator            <dt>If <var>c</var> is adjacent sibling combinator
621            (<code class=char>+</code>)</dt>            (<code class=char>+</code>)</dt>
622              <dd>Append a <code class=char>U+002B</code>              <dd>Append a <code class=char>U+002B</code>
623              <code class=charname>PLUS SIGN</code> character to              <code class=charname>PLUS SIGN</code> (<code class=char>+</code>)
624              <var>result</var>.</dd>              character to <var>result</var>.</dd>
625            <dt>If <var>c</var> is general sibling combinator            <dt>If <var>c</var> is general sibling combinator
626            (<code class=char>~</code>)</dt>            (<code class=char>~</code>)</dt>
627              <dd>Append a <code class=char>U+007E</code>              <dd>Append a <code class=char>U+007E</code>
628              <code class=charname>TILDE</code> character to              <code class=charname>TILDE</code> (<code class=char>~</code>)
629              <var>result</var>.</dd>              character to <var>result</var>.</dd>
630            </dl>            </dl>
631          </li>          </li>
632          <li>Append a <code class=char>U+0020</code>          <li>Append a <code class=char>U+0020</code>
# Line 202  selectors</dfn> (<dfn id=var-gs><var>gs< Line 638  selectors</dfn> (<dfn id=var-gs><var>gs<
638    </ol>    </ol>
639  </li>  </li>
640  <li>Then, <var>result</var> is the  <li>Then, <var>result</var> is the
641  <abbr title="Selectors Serialization Format for Testing">SFFT</abbr>  <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
642  representation of the group of selectors.</li>  representation of <var>gs</var>.</li>
643  </ol>  </ol>
644    
645  <p>To <dfn id=algorithm-serialize-a-simple-selector>serialize a simple  </div>
 selector</dfn> (<dfn><var id=var-ss>ss</var></dfn>):</p>  
 <dl class=switch>  
 <dt>If <var>ss</var> is a type or universal selector</dt>  
   <dd><dl class=switch>  
   <dt>If a namespace URI is specified (via namespace prefix, or  
   by omitting namespace prefix where a default namespace is specified)</dt>  
     <dd class="ed">@@</dd>  
   <dt>If the null namespace is specified (by zero$B!>(Blength namespace  
   prefix)</dt>  
     <dd>Return a <code class=char>U+007C</code> <code class=charname>VERTICAL  
     BAR</code> character, followed by either local name (if <var>ss</var>  
     is a type selector) or a <code class=char>U+002A</code>  
     <code class=charname>ASTERISK</code> character (if <var>ss</var>  
     is a universal selector).</dd>  
   <dt>If no namespace is specified (by namespace prefix <code>*</code>,  
   or by omitting namespace prefix where no default namespace is specified)</dt>  
     <dd>Return a <code class=char>U+002A</code>  
     <code class=charname>ASTERISK</code> character, followed by a  
     <code class=char>U+007C</code> <code class=charname>VERTICAL BAR</code>  
     character, followed by either local name (if <var>ss</var>  
     is a type selector) or a <code class=char>U+002A</code>  
     <code class=charname>ASTERISK</code> character (if <var>ss</var>  
     is a universal selector).</dd>  
   </dl></dd>  
 <dt class=ed>@@</dt>  
 </dl>  
646    
647  </div>  </div>
648    
649  <div class="section" id="parsing">  <div class="section" id="parsing">
650  <h2>Parsing  <h2>Parsing
651  <abbr title="Selectors Serialization Format for Testing">SFFT</abbr>  <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
652  Groups of Selectors</h2>  Representations of Selectors</h2>
653    
654  <p>Since <a href="#serializing">the serializing algorithm</a> is  <p>Since <a href="#algorithm-serialize-a-group-of-selectors">the serializing
655  so designed that it always output a valid  algorithm for groups of selectors</a> is so designed that it always outputs a
656  <a href="http://www.w3.org/TR/css3-selectors/#grouping">group of  valid <a href="http://www.w3.org/TR/css3-selectors/#grouping">group of
657  selectors</a>, no special parser for  selectors</a>, no special parser for the
658  <abbr title="Selectors Serialization Format for Testing">SFFT</abbr>  <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
659  is necessary.  Any conforming  representation is necessary.  Any conforming parser for
660  <a href="http://www.w3.org/TR/css3-selectors/#grouping">group of  <a href="http://www.w3.org/TR/css3-selectors/#grouping">groups of
661  selectors</a> parser <em class=rfc2119>MAY</em> be used  selectors</a> <em class=rfc2119>MAY</em> be used
662  to parse <abbr title="Selectors Serialization Format for Testing">SFFT</abbr>  to parse <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
663  groups of selectors.</p>  representations of
664    <a href="http://www.w3.org/TR/css3-selectors/#grouping">groups of
665    selectors</a>.</p>
666    
667    <p>Likewise, <a href="#algorithm-serialize-a-simple-selector">the serializing
668    algorithm for simple selectors</a> always outputs a valid
669    <a href="#simple-selector">simple selector</a> and therefore any
670    conforming parser for <a href="#simple-selector">simple selector</a>
671    <em class=rfc2119>MAY</em> be used to parse
672    <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
673    representations of <a href="#simple-selector">simple selectors</a>.</p>
674  </div>  </div>
675    
676  <div class="section" id="examples">  <div class="section" id="examples">
677  <h2>Examples</h2>  <h2>Examples</h2>
678    
679  <p class=section-info>This section is <em>non-normative</em>.</p>  <p class=section-info>This section is <em>non$B!>(Bnormative</em>.</p>
680    
681  <div class="ed issue">  <div class="ed issue">
682  <p><a href="http://suika.fam.cx/gate/2007/css/parser-interface">Try demo</a>,  <p><a href="http://suika.fam.cx/gate/2007/css/parser-interface">Try demo</a>,
683  by choosing <q>Selectors</q> radio button.</a></p>  by choosing <q>Selectors</q> radio button.</p>
684    
685  <div class="example figure block">  <div class="example figure block">
686  <div class="caption">...</div>  <div class="caption">...</div>
# Line 273  by choosing <q>Selectors</q> radio butto Line 693  by choosing <q>Selectors</q> radio butto
693  </div>  </div>
694    
695  <div id="references" class="section reference">  <div id="references" class="section reference">
696  <h2>References</h1>  <h2>References</h2>
697    
698  <div id="normative-references" class="section normative reference">  <div id="normative-references" class="section normative reference">
699  <h3>Normative References</h3>  <h3>Normative References</h3>
# Line 286  by choosing <q>Selectors</q> radio butto Line 706  by choosing <q>Selectors</q> radio butto
706    <a href="urn:ietf:bcp:14"><abbr title="Best Current Practice">BCP</abbr>    <a href="urn:ietf:bcp:14"><abbr title="Best Current Practice">BCP</abbr>
707    14</a>, <abbr title="Request for Comments">RFC</abbr> 2119,    14</a>, <abbr title="Request for Comments">RFC</abbr> 2119,
708    <time datetime=1997-03>March 1997</time>.    <time datetime=1997-03>March 1997</time>.
709    This version of the specification is referenced</dd>    This version of the specification is referenced.</dd>
710  <dt id=ref-SELECTORS>SELECTORS</dt>  <dt id=ref-SELECTORS>SELECTORS</dt>
711    <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215"><cite>Selectors</cite></a>,    <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215"><cite>Selectors</cite></a>,
712    <abbr title="World Wide Web Consortium">W3C</abbr> Working Draft,    <abbr title="World Wide Web Consortium">W3C</abbr> Working Draft,
# Line 297  by choosing <q>Selectors</q> radio butto Line 717  by choosing <q>Selectors</q> radio butto
717  </div>  </div>
718    
719  <div id="informative-references" class="section informative reference">  <div id="informative-references" class="section informative reference">
720  <h3>Non-normative References</h3>  <h3>Non$B!>(Bnormative References</h3>
721    
722  <dl>  <dl>
723  <dt id=ref-CSS>CSS</dt>  <dt id=ref-CSS>CSS</dt>
# Line 328  by choosing <q>Selectors</q> radio butto Line 748  by choosing <q>Selectors</q> radio butto
748    <code class=URI>&lt;<a href="http://dev.w3.org/2006/webapi/selectors-api/Overview.html">http://dev.w3.org/2006/webapi/selectors-api/Overview.html</a>></code>.    <code class=URI>&lt;<a href="http://dev.w3.org/2006/webapi/selectors-api/Overview.html">http://dev.w3.org/2006/webapi/selectors-api/Overview.html</a>></code>.
749    The latest published version of the specification is available at    The latest published version of the specification is available at
750    <code class=URI>&lt;<a href="http://www.w3.org/TR/selectors-api/">http://www.w3.org/TR/selectors-api/</a>></code>.</dd>    <code class=URI>&lt;<a href="http://www.w3.org/TR/selectors-api/">http://www.w3.org/TR/selectors-api/</a>></code>.</dd>
751  <dt id=XBL2>XBL2</dt>  <dt id=ref-XBL2>XBL2</dt>
752    <dd><cite><a href="http://www.mozilla.org/projects/xbl/xbl2.html"><abbr>XBL</abbr>    <dd><cite><a href="http://www.mozilla.org/projects/xbl/xbl2.html"><abbr>XBL</abbr>
753    2.0</a></cite>, Mozilla.org, <time datetime=2007-03-15>15 Mar 2007</time>.    2.0</a></cite>, Mozilla.org, <time datetime=2007-03-15>15 Mar 2007</time>.
754    Work in progress.  The latest    Work in progress.  The latest

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.18

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24