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

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24