/[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.5 by wakaba, Mon Oct 1 11:37:06 2007 UTC revision 1.9 by wakaba, Mon Oct 15 00:52:18 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-01>1 October 2007</time></h2>  <h2>Working Draft <time datetime=2007-10-15>15 October 2007</time></h2>
14    
15  <dl class="versions-uri">  <dl class="versions-uri">
16  <dt>This Version</dt>  <dt>This Version</dt>
# Line 80  normative version.</p> Line 80  normative version.</p>
80  <div id="introduction" class="section">  <div id="introduction" class="section">
81  <h2>Introduction</h2>  <h2>Introduction</h2>
82    
83  <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>
84    
85  <p>Selectors  <p>Selectors
86  <cite class="bibref normative">[<a href="#ref-SELECTORS">SELECTORS</a>]</cite>  <cite class="bibref normative">[<a href="#ref-SELECTORS">SELECTORS</a>]</cite>
# Line 127  document are to be interpreted as descri Line 127  document are to be interpreted as descri
127  <cite class="bibref normative">[<a href="#ref-KEYWORDS">KEYWORDS</a>]</cite>.</p>  <cite class="bibref normative">[<a href="#ref-KEYWORDS">KEYWORDS</a>]</cite>.</p>
128    
129  <!-- Strictly speaking the paragraph below is not part of terminology. -->  <!-- Strictly speaking the paragraph below is not part of terminology. -->
130  <p>All examples and notes in this specification are non-normative,  <p>All examples and notes in this specification are non$B!>(Bnormative,
131  as are all sections explicitly marked non-normative.  Everything  as are all sections explicitly marked non$B!>(Bnormative.  Everything
132  else in this specification is normative.</p>  else in this specification is normative.</p>
133    
134    <p>For the purpose of this specification, pseudo$B!>(Belements are also
135    referred to as <dfn title="simple selector" id=simple-selector>simple
136    selectors</dfn> and are considered as part of the last sequence of
137    simple selector in a selector.</p>
138  </div>  </div>
139    
140  <div class="section" id="serializing">  <div class="section" id="serializing">
# Line 140  else in this specification is normative. Line 145  else in this specification is normative.
145  for now.</p>  for now.</p>
146  </div>  </div>
147    
148  <p><dfn id=newline>Newline</dfn> is <code class=char>U+000A</code>  <p>No <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
149  <code class=charname>LINE FEED</code> <span class=ed>or  representation is defined for an invalid group of selectors.</p>
150  U+000D U+000A or U+000A ??</span>.</p>  
151    <div class="note memo">
152    <p>The serialized representation will not contain any comment.</p>
153    </div>
154    
155  <!-- TODO: link terms to Selectors -->  <!-- TODO: link terms to Selectors -->
156    
157    <p>To
158    <dfn id=algorithm-serialize-a-group-of-selectors title="serialize a group of selectors">serialize
159    a group of selectors (<dfn id=var-gs><var>gs</var></dfn>)</dfn>:</p>
160  <ol>  <ol>
161  <li>Let <var>result</var> an empty string.</li>  <li>Let <dfn id=var-result><var>result</var></dfn> an empty string.</li>
162  <li>For each selector (<var>selector</var>) in the group of selectors:  <li>For each selector (<dfn id=var-selector><var>selector</var></dfn>) in
163    <var>gs</var>:
164    <ol>    <ol>
165    <li>If <var>selector</var> is <em>not</em> the first selector    <li>If <var>selector</var> is <em>not</em> the first selector
166    in the group of selectors, then append a <code class=char>U+002C</code>    in the group of selectors, then append a <code class=char>U+002C</code>
167    <code class=charname>COMMA</code> followed by a    <code class=charname>COMMA</code> (<code class=char>,</code>) followed by a
168    <a href="#newline">newline</a> to <var>result</var>.</li>    <a href="#newline">newline</a> to <var>result</var>.</li>
169    <li>Append four <code class=char>U+0020</code>    <li>Append four <code class=char>U+0020</code>
170    <code class=charname>SPACE</code> characters to <var>result</var>.</li>    <code class=charname>SPACE</code> characters to <var>result</var>.</li>
171    <li>Process each sequence of simple selectors or    <li>Process each sequence of simple selectors or
172    combinator in <var>selector</var> by following algorithm:    combinator in <var>selector</var> by following algorithm:
173      <dl class=switch>      <dl class=switch>
174      <dt>If it is a sequence of simle selector (<var>sss</var>)</dt>      <dt>If it is a sequence of simle selector
175        <dd class=ed>@@</dd>      (<dfn id=var-sss><var>sss</var></dfn>)</dt>
176      <dt>If it is a combinator (<var>c</var>)</dt>        <dd>
177            <ol>
178            <li class=ed><a href="#algorithm-serialize-a-simple-selector">Serialize
179            each simple selector</a> in <var>sss</var>.</li>
180            <li class=ed>sort</li>
181            <li>Append a <a href="#newline">newline</a> to <var>result</var>.</li>
182            </ol>
183          </dd>
184        <dt>If it is a combinator (<dfn id=var-c><var>c</var></dfn>)</dt>
185        <dd>        <dd>
186          <ol>          <ol>
187          <li>Append two <code class=char>U+0020</code>          <li>Append two <code class=char>U+0020</code>
# Line 175  U+000D U+000A or U+000A ??</span>.</p> Line 195  U+000D U+000A or U+000A ??</span>.</p>
195            <dt>If <var>c</var> is child combinator            <dt>If <var>c</var> is child combinator
196            (<code class=char>></code>)</dt>            (<code class=char>></code>)</dt>
197              <dd>Append a <code class=char>U+003E</code>              <dd>Append a <code class=char>U+003E</code>
198              <code class=charname>GREATER-THAN SIGN</code> character to              <code class=charname>GREATER-THAN SIGN</code>
199              <var>result</var>.</dd>              (<code class=char>></code>) character to <var>result</var>.</dd>
200            <dt>If <var>c</var> is adjacent sibling combinator            <dt>If <var>c</var> is adjacent sibling combinator
201            (<code class=char>+</code>)</dt>            (<code class=char>+</code>)</dt>
202              <dd>Append a <code class=char>U+002B</code>              <dd>Append a <code class=char>U+002B</code>
203              <code class=charname>PLUS SIGN</code> character to              <code class=charname>PLUS SIGN</code> (<code class=char>+</code>)
204              <var>result</var>.</dd>              character to <var>result</var>.</dd>
205            <dt>If <var>c</var> is general sibling combinator            <dt>If <var>c</var> is general sibling combinator
206            (<code class=char>~</code>)</dt>            (<code class=char>~</code>)</dt>
207              <dd>Append a <code class=char>U+007E</code>              <dd>Append a <code class=char>U+007E</code>
208              <code class=charname>TILDE</code> character to              <code class=charname>TILDE</code> (<code class=char>~</code>)
209              <var>result</var>.</dd>              character to <var>result</var>.</dd>
210            </dl>            </dl>
211          </li>          </li>
212          <li>Append a <code class=char>U+0020</code>          <li>Append a <code class=char>U+0020</code>
# Line 198  U+000D U+000A or U+000A ??</span>.</p> Line 218  U+000D U+000A or U+000A ??</span>.</p>
218    </ol>    </ol>
219  </li>  </li>
220  <li>Then, <var>result</var> is the  <li>Then, <var>result</var> is the
221  <abbr title="Selectors Serialization Format for Testing">SFFT</abbr>  <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
222  representation of the group of selectors.</li>  representation of <var>gs</var>.</li>
223  </ol>  </ol>
224    
225    <p>To
226    <dfn id=algorithm-serialize-a-simple-selector title="serialize a simple selector">serialize
227    a simple selector (<dfn><var id=var-ss>ss</var></dfn>)</dfn>:</p>
228    <dl class=switch>
229    <dt>If <var>ss</var> is a type or universal selector</dt>
230      <dd>
231        <ol>
232        <li>
233          <dl class=switch>
234          <dt>If a namespace URI is specified (via namespace prefix, or
235          by omitting namespace prefix where a default namespace is specified)</dt>
236            <dd class="ed">@@</dd>
237          <dt>If the null namespace is specified (by zero$B!>(Blength namespace
238          prefix)</dt>
239            <dd>Append a <code class=char>U+007C</code>
240            <code class=charname>VERTICAL BAR</code> (<code class=char>|</code>)
241            character to <var>result</var>.</dd>
242          <dt>If no namespace is specified (by namespace prefix <code>*</code>,
243          or by omitting namespace prefix where no default namespace is
244          specified)</dt>
245            <dd>Append a <code class=char>U+002A</code>
246            <code class=charname>ASTERISK</code> (<code class=char>*</code>)
247            character, followed by a <code class=char>U+007C</code>
248            <code class=charname>VERTICAL BAR</code> (<code class=char>|</code>)
249            character, to <var>result</var>.</dd>
250          </dl>
251        </li>
252        <li>If <var>ss</var> is a type selector, append the
253        <span class=ed>@@ normalized</span> local name to <var>result</var>.</li>
254        <li>If <var>ss</var> is a universal selector, append
255        a <code class=char>U+002A</code> <code class=charname>ASTERISK</code>
256        (<code class=char>*</code>) character to <var>result</var>.</li>
257        </ol>
258      </dd>
259    <dt>If <var>ss</var> is an attribute selector</dt>
260      <dd>
261        <ol>
262        <li>Append a <code class=char>U+005B</code> <code class=charname>LEFT
263        SQUARE BRACKET</code> (<code class=char>[</code>) to
264        <var>result</var>.</li>
265        <li>
266          Append a namespace prefix as following:
267          <dl>
268          <dt>If a namespace URI is specified</dt>
269            <dd class=ed>@@</dd>
270            <dd class=ed>@@ Current reference implementation is wrong,
271            since its result of sorting depends on namespace prefix.</dd>
272          <dt>If the null namespace is specified</dt>
273            <dd>Append a <code class=char>U+007C</code>
274            <code class=charname>VERTICAL BAR</code> character to
275            <var>result</var>.</dd>
276          <dt>If no namespace is specified</dt>
277            <dd>Append a <code class=char>U+002A</code>
278            <code class=charname>ASTERISK</code> (<code class=char>*</code>)
279            character, followed by a <code class=char>U+007C</code>
280            <code class=charname>VERTICAL BAR</code> (<code class=char>|</code>)
281            character, to <var>result</var>.</dd>
282          </dl>
283        </li>
284        <li>Append the <span class=ed>@@ normalized</span> local name to
285        <var>result</var>.</li>
286        <li>If a value is specified in <var>ss</var>:
287          <ol>
288          <li>Depending on the way to match, append <code>=</code>,
289          <code>~=</code>, <code>|=</code>, <code>^=</code>,
290          <code>$=</code>, or <code>*=</code> to <var>result</var>.</li>
291          <li>Append the <span class=ed>@@ normalized</span> value to
292          <var>result</var>.</li>
293          </ol>
294        </li>
295        <li>Append a <code class=char>U+005D</code> <code class=charname>RIGHT
296        SQUARE BRACKET</code> (<code class=char>]</code>) to
297        <var>result</var>.</li>
298        </ol>
299      </dd>
300    <dt>If <var>ss</var> is a class selector</dt>
301      <dd>Append a <code class=char>U+002E</code> <code class=charname>FULL
302      STOP</code> (<code class=char>.</code>) character, followed
303      by <span class=ed>@@ normalized</span> class name,
304      <var>result</var>.</dd>
305    <dt>If <var>ss</var> is an <abbr>ID</abbr> selector</dt>
306      <dd>Append a <code class=char>U+0023</code> <code class=charname>NUMBER
307      SIGN</code> (<code class=char>#</code>) character, followed
308      by <span class=ed>@@ normalized</span> <abbr>ID</abbr>,
309      to <var>result</var>.</dd>
310    <dt>If <var>ss</var> is a pseudo$B!>(Bclass selector</dt>
311      <dd>
312        <ol>
313        <li>Append a <code class=char>U+003A</code>
314        <code class=charname>COLON</code> (<code class=char>:</code>) character
315        to <var>result</var>.</li>
316        <li>Append the <span class=ed>@@ normalized</span> name of the
317        pseudo$B!>(Bclass to <var>result</var>.</li>
318        <li>Append any arguments as following:
319          <dl class=switch>
320          <dt>If the name of the pseudo$B!>(Bclass is <code>lang</code></dt>
321            <dd>
322              <ol>
323              <li>Append a <code class=char>U+0028</code> <code class=charname>LEFT
324              PARENTHESIS</code> (<code class=char>(</code>) character
325              to <var>result</var>.</li>
326              <li>Append <span class=ed>@@ normalized</span>
327              language tag (the argument) to <var>result</var>.</li>
328              <li>Append a <code class=char>U+0029</code>
329              <code class=charname>RIGHT PARENTHESIS</code>
330              (<code class=char>)</code>) character
331              to <var>result</var>.</li>
332              </ol>
333            </dd>
334          <dt>If the name of the pseudo$B!>(Bclass is
335          <code>-manakai-contains</code></dt>
336            <dd>
337              <ol>
338              <li>Append a <code class=char>U+0028</code> <code class=charname>LEFT
339              PARENTHESIS</code> (<code class=char>(</code>) character
340              to <var>result</var>.</li>
341              <li>Append <span class=ed>@@ normalized</span>
342              string (the argument) to <var>result</var>.</li>
343              <li>Append a <code class=char>U+0029</code>
344              <code class=charname>RIGHT PARENTHESIS</code>
345              (<code class=char>)</code>) character
346              to <var>result</var>.</li>
347              </ol>
348            </dd>
349          <dt>If name of the pseudo$B!>(Bclass is either <code>nth-child</code>,
350          <code>nth-last-child</code>, <code>nth-of-type</code>, or
351          <code>nth-last-of-type</code></dt>
352            <dd>
353              <ol>
354              <li>Append a <code class=char>U+0028</code> <code class=charname>LEFT
355              PARENTHESIS</code> (<code class=char>(</code>) character
356              to <var>result</var>.</li>
357              <li>Append <span class=ed>@@ normalized</span>
358              integer <var>a</var> to <var>result</var>.
359              If the argument is a keyword <code>odd</code> or <code>even</code>,
360              <var>a</var> is <code>2</code>.  If <var>a</var> and
361              <code>n</code> is omitted, <var>a</var> is assumed as
362              <code>0</code>.  Otherwise, if <var>a</var> is omitted,
363              it is assumed as <code>1</code> (or <code>-1</code>,
364              if there is a <code class=char>U+002D</code>
365              <code class=charname>HYPHEN-MINUS</code> (<code class=char>-</code>)
366              character).</li>
367              <li>Append a <code class=char>U+006E</code>
368              <code class=charname>LATIN SMALL LETTER N</code>
369              (<code class=char>n</code>) character to <var>result</var>.</li>
370              <li>Append <span class=ed>@@ normalized</span>
371              integer <var>b</var> to <var>result</var>.
372              It <em class=rfc2119>MUST</em> be preceded by a sign,
373              either <code class=char>U+002B</code> <code class=charname>PLUS
374              SIGN</code> (<code class=char>+</code>) or
375              <code class=char>U+002D</code>
376              <code class=charname>HYPHEN-MINUS</code> (<code class=char>-</code>)
377              character.  If the argument is a keyword <code>odd</code>,
378              <var>b</var> is <code>1</code>.  If the argument
379              is a keyword <code>even</code>, <var>b</var> is
380              <code>0</code>.  If <var>b</var> is omitted, it is assumed as
381              <code>0</code>.  The sign of <code>0</code>
382              <em class=rfc2119>MUST</em> be <code class=char>U+002B</code>
383              <code class=charname>PLUS SIGN</code>
384              (<code class=char>+</code>).</li>
385              <li>Append a <code class=char>U+0029</code>
386              <code class=charname>RIGHT PARENTHESIS</code>
387              (<code class=char>)</code>) character
388              to <var>result</var>.</li>
389              </ol>
390            </dd>
391          <dt>If the name of the pseudo$B!>(Bclass is <code>not</code></dt>
392            <dd>
393              <ol>
394                <li>Append a string of <code class=char>U+003A</code>
395                <code class=charname>COLON</code>, <code class=char>U+006E</code>
396                <code class=charname>LATIN SMALL LETTER N</code>,
397                <code class=char>U+006F</code> <code class=charname>LATIN
398                SMALL LETTER O</code>, <code class=char>U+0074</code>
399                <code class=charname>LATIN SMALL LETTER T</code>, and
400                <code class=char>U+0028</code> <code class=charname>LEFT
401                PARENTHESIS</code> (<code>:not(</code>), followed by a
402                <a href="#newline">newline</a>, to <var>result</var>.</li>
403                <li>Append four <code class=char>U+0020</code>
404                <code class=charname>SPACE</code> characters to
405                <var>result</var>.</li>
406                <li>Append four <code class=char>U+0020</code>
407                <code class=charname>SPACE</code> characters to
408                <var>result</var> again.</li>
409                <li><a href="#algorithm-serialize-a-simple-selector">Serialize
410                the simple selector specified as the argument to the
411                <code>not</code> pseudo$B!>(Bclass</a>.</li>
412                <li>Append a <a href="#newline">newline</a> to
413                <var>result</var>.</li>
414                <li>Append four <code class=char>U+0020</code>
415                <code class=charname>SPACE</code> characters to
416                <var>result</var>.</li>
417                <li>Append a <code class=char>U+0029</code>
418                <code class=charname>RIGHT PARENTHESIS</code>
419                (<code class=char>)</code>) character
420                to <var>result</var>.</li>
421              </ol>
422            </dd>
423          </dl>
424        </li>
425        </ol>
426      </dd>
427    <dt>If <var>ss</var> is a pseudo$B!>(Belement</dt>
428      <dd>
429        <ol>
430        <li>Append two <code class=char>U+003A</code>
431        <code class=charname>COLON</code> characters (<code>::</code>)
432        to <var>result</var>.</li>
433        <li>Append the <span class=ed>@@ normalized</span> name of the
434        pseudo$B!>(Belement to <var>result</var>.</li>
435        <!-- For future version: append "(", arguments, ")", if any. -->
436        </ol>
437      </dd>
438    </dl>
439    
440    
441    <p>A <dfn id=newline title=newline>newline</dfn>
442    <em class=rfc2119>SHOULD</em> be represented as a
443    <code class=char>U+000A</code> <code class=charname>LINE FEED</code>
444    character.  However, depending on the context where
445    the <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
446    representation is in use, a sequence of
447    <code class=char>U+000D</code> <code class=charname>CARRIAGE RETURN</code>
448    followed by a <code class=char>U+000A</code>
449    <code class=charname>LINE FEED</code> (i.e. a
450    <code>CRLF</code> sequence) or a character
451    <code class=char>U+000D</code> <code class=charname>CARRIAGE RETURN</code>
452    <em class=rfc2119>MAY</em> be used as a <a href="#newline">newline</a> instead.
453    <a href="#newline">Newline</a> representations
454    <em class=rfc2119>SHOULD</em> be consistent in an
455    <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
456    representation.</p>
457    
458    <div class="note memo">
459    <p>Therefore, newlines must be normalized before
460    <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
461    representations are literally compared.</p>
462    </div>
463    
464  </div>  </div>
465    
466  <div class="section" id="parsing">  <div class="section" id="parsing">
467  <h2>Parsing  <h2>Parsing
468  <abbr title="Selectors Serialization Format for Testing">SFFT</abbr>  <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
469  Groups of Selectors</h2>  Groups of Selectors</h2>
470    
471  <p>Since <a href="#serializing">the serializing algorithm</a> is  <p>Since <a href="#serializing">the serializing algorithm</a> is
472  so designed that it always output a valid  so designed that it always output a valid
473  <a href="http://www.w3.org/TR/css3-selectors/#grouping">group of  <a href="http://www.w3.org/TR/css3-selectors/#grouping">group of
474  selectors</a>, no special parser for  selectors</a>, no special parser for the
475  <abbr title="Selectors Serialization Format for Testing">SFFT</abbr>  <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
476  is necessary.  Any conforming  representation is necessary.  Any conforming parser for
477  <a href="http://www.w3.org/TR/css3-selectors/#grouping">group of  <a href="http://www.w3.org/TR/css3-selectors/#grouping">groups of
478  selectors</a> parser <em class=rfc2119>MAY</em> be used  selectors</a> <em class=rfc2119>MAY</em> be used
479  to parse <abbr title="Selectors Serialization Format for Testing">SFFT</abbr>  to parse <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
480  groups of selectors.</p>  representations of groups of selectors.</p>
481  </div>  </div>
482    
483  <div class="section" id="examples">  <div class="section" id="examples">
484  <h2>Examples</h2>  <h2>Examples</h2>
485    
486  <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>
487    
488  <div class="ed issue">  <div class="ed issue">
489  <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>,
490  by choosing <q>Selectors</q> radio button.</a></p>  by choosing <q>Selectors</q> radio button.</p>
491    
492  <div class="example figure block">  <div class="example figure block">
493  <div class="caption">...</div>  <div class="caption">...</div>
# Line 241  by choosing <q>Selectors</q> radio butto Line 500  by choosing <q>Selectors</q> radio butto
500  </div>  </div>
501    
502  <div id="references" class="section reference">  <div id="references" class="section reference">
503  <h2>References</h1>  <h2>References</h2>
504    
505  <div id="normative-references" class="section normative reference">  <div id="normative-references" class="section normative reference">
506  <h3>Normative References</h3>  <h3>Normative References</h3>
# Line 265  by choosing <q>Selectors</q> radio butto Line 524  by choosing <q>Selectors</q> radio butto
524  </div>  </div>
525    
526  <div id="informative-references" class="section informative reference">  <div id="informative-references" class="section informative reference">
527  <h3>Non-normative References</h3>  <h3>Non$B!>(Bnormative References</h3>
528    
529  <dl>  <dl>
530  <dt id=ref-CSS>CSS</dt>  <dt id=ref-CSS>CSS</dt>

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.9

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24