/[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.8 by wakaba, Mon Oct 15 00:32:05 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        (<dfn id=var-sss><var>sss</var></dfn>)</dt>
176        <dd class=ed>@@</dd>        <dd class=ed>@@</dd>
177      <dt>If it is a combinator (<var>c</var>)</dt>      <dt>If it is a combinator (<dfn id=var-c><var>c</var></dfn>)</dt>
178        <dd>        <dd>
179          <ol>          <ol>
180          <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 188  U+000D U+000A or U+000A ??</span>.</p>
188            <dt>If <var>c</var> is child combinator            <dt>If <var>c</var> is child combinator
189            (<code class=char>></code>)</dt>            (<code class=char>></code>)</dt>
190              <dd>Append a <code class=char>U+003E</code>              <dd>Append a <code class=char>U+003E</code>
191              <code class=charname>GREATER-THAN SIGN</code> character to              <code class=charname>GREATER-THAN SIGN</code>
192              <var>result</var>.</dd>              (<code class=char>></code>) character to <var>result</var>.</dd>
193            <dt>If <var>c</var> is adjacent sibling combinator            <dt>If <var>c</var> is adjacent sibling combinator
194            (<code class=char>+</code>)</dt>            (<code class=char>+</code>)</dt>
195              <dd>Append a <code class=char>U+002B</code>              <dd>Append a <code class=char>U+002B</code>
196              <code class=charname>PLUS SIGN</code> character to              <code class=charname>PLUS SIGN</code> (<code class=char>+</code>)
197              <var>result</var>.</dd>              character to <var>result</var>.</dd>
198            <dt>If <var>c</var> is general sibling combinator            <dt>If <var>c</var> is general sibling combinator
199            (<code class=char>~</code>)</dt>            (<code class=char>~</code>)</dt>
200              <dd>Append a <code class=char>U+007E</code>              <dd>Append a <code class=char>U+007E</code>
201              <code class=charname>TILDE</code> character to              <code class=charname>TILDE</code> (<code class=char>~</code>)
202              <var>result</var>.</dd>              character to <var>result</var>.</dd>
203            </dl>            </dl>
204          </li>          </li>
205          <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 211  U+000D U+000A or U+000A ??</span>.</p>
211    </ol>    </ol>
212  </li>  </li>
213  <li>Then, <var>result</var> is the  <li>Then, <var>result</var> is the
214  <abbr title="Selectors Serialization Format for Testing">SFFT</abbr>  <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
215  representation of the group of selectors.</li>  representation of <var>gs</var>.</li>
216  </ol>  </ol>
217    
218    <p>To
219    <dfn id=algorithm-serialize-a-simple-selector title="serialize a simple selector">serialize
220    a simple selector (<dfn><var id=var-ss>ss</var></dfn>)</dfn>:</p>
221    <dl class=switch>
222    <dt>If <var>ss</var> is a type or universal selector</dt>
223      <dd>
224        <ol>
225        <li>
226          <dl class=switch>
227          <dt>If a namespace URI is specified (via namespace prefix, or
228          by omitting namespace prefix where a default namespace is specified)</dt>
229            <dd class="ed">@@</dd>
230          <dt>If the null namespace is specified (by zero$B!>(Blength namespace
231          prefix)</dt>
232            <dd>Append a <code class=char>U+007C</code>
233            <code class=charname>VERTICAL BAR</code> (<code class=char>|</code>)
234            character to <var>result</var>.</dd>
235          <dt>If no namespace is specified (by namespace prefix <code>*</code>,
236          or by omitting namespace prefix where no default namespace is
237          specified)</dt>
238            <dd>Append a <code class=char>U+002A</code>
239            <code class=charname>ASTERISK</code> (<code class=char>*</code>)
240            character, followed by a <code class=char>U+007C</code>
241            <code class=charname>VERTICAL BAR</code> (<code class=char>|</code>)
242            character, to <var>result</var>.</dd>
243          </dl>
244        </li>
245        <li>If <var>ss</var> is a type selector, append the
246        <span class=ed>@@ normalized</span> local name to <var>result</var>.</li>
247        <li>If <var>ss</var> is a universal selector, append
248        a <code class=char>U+002A</code> <code class=charname>ASTERISK</code>
249        (<code class=char>*</code>) character to <var>result</var>.</li>
250        </ol>
251      </dd>
252    <dt>If <var>ss</var> is an attribute selector</dt>
253      <dd class=ed>@@</dd>
254    <dt>If <var>ss</var> is a class selector</dt>
255      <dd>Append a <code class=char>U+002E</code> <code class=charname>FULL
256      STOP</code> (<code class=char>.</code>) character, followed
257      by <span class=ed>@@ normalized</span> class name,
258      <var>result</var>.</dd>
259    <dt>If <var>ss</var> is an <abbr>ID</abbr> selector</dt>
260      <dd>Append a <code class=char>U+0023</code> <code class=charname>NUMBER
261      SIGN</code> (<code class=char>#</code>) character, followed
262      by <span class=ed>@@ normalized</span> <abbr>ID</abbr>,
263      to <var>result</var>.</dd>
264    <dt>If <var>ss</var> is a pseudo$B!>(Bclass selector</dt>
265      <dd>
266        <ol>
267        <li>Append a <code class=char>U+003A</code>
268        <code class=charname>COLON</code> (<code class=char>:</code>) character
269        to <var>result</var>.</li>
270        <li>Append the <span class=ed>@@ normalized</span> name of the
271        pseudo$B!>(Bclass to <var>result</var>.</li>
272        <li>Append any arguments as following:
273          <dl class=switch>
274          <dt>If the name of the pseudo$B!>(Bclass is <code>lang</code></dt>
275            <dd>
276              <ol>
277              <li>Append a <code class=char>U+0028</code> <code class=charname>LEFT
278              PARENTHESIS</code> (<code class=char>(</code>) character
279              to <var>result</var>.</li>
280              <li>Append <span class=ed>@@ normalized</span>
281              language tag (the argument) to <var>result</var>.</li>
282              <li>Append a <code class=char>U+0029</code>
283              <code class=charname>RIGHT PARENTHESIS</code>
284              (<code class=char>)</code>) character
285              to <var>result</var>.</li>
286              </ol>
287            </dd>
288          <dt>If the name of the pseudo$B!>(Bclass is
289          <code>-manakai-contains</code></dt>
290            <dd>
291              <ol>
292              <li>Append a <code class=char>U+0028</code> <code class=charname>LEFT
293              PARENTHESIS</code> (<code class=char>(</code>) character
294              to <var>result</var>.</li>
295              <li>Append <span class=ed>@@ normalized</span>
296              string (the argument) to <var>result</var>.</li>
297              <li>Append a <code class=char>U+0029</code>
298              <code class=charname>RIGHT PARENTHESIS</code>
299              (<code class=char>)</code>) character
300              to <var>result</var>.</li>
301              </ol>
302            </dd>
303          <dt>If name of the pseudo$B!>(Bclass is either <code>nth-child</code>,
304          <code>nth-last-child</code>, <code>nth-of-type</code>, or
305          <code>nth-last-of-type</code></dt>
306            <dd>
307              <ol>
308              <li>Append a <code class=char>U+0028</code> <code class=charname>LEFT
309              PARENTHESIS</code> (<code class=char>(</code>) character
310              to <var>result</var>.</li>
311              <li>Append <span class=ed>@@ normalized</span>
312              integer <var>a</var> to <var>result</var>.
313              If the argument is a keyword <code>odd</code> or <code>even</code>,
314              <var>a</var> is <code>2</code>.  If <var>a</var> and
315              <code>n</code> is omitted, <var>a</var> is assumed as
316              <code>0</code>.  Otherwise, if <var>a</var> is omitted,
317              it is assumed as <code>1</code> (or <code>-1</code>,
318              if there is a <code class=char>U+002D</code>
319              <code class=charname>HYPHEN-MINUS</code> (<code class=char>-</code>)
320              character).</li>
321              <li>Append a <code class=char>U+006E</code>
322              <code class=charname>LATIN SMALL LETTER N</code>
323              (<code class=char>n</code>) character to <var>result</var>.</li>
324              <li>Append <span class=ed>@@ normalized</span>
325              integer <var>b</var> to <var>result</var>.
326              It <em class=rfc2119>MUST</em> be preceded by a sign,
327              either <code class=char>U+002B</code> <code class=charname>PLUS
328              SIGN</code> (<code class=char>+</code>) or
329              <code class=char>U+002D</code>
330              <code class=charname>HYPHEN-MINUS</code> (<code class=char>-</code>)
331              character.  If the argument is a keyword <code>odd</code>,
332              <var>b</var> is <code>1</code>.  If the argument
333              is a keyword <code>even</code>, <var>b</var> is
334              <code>0</code>.  If <var>b</var> is omitted, it is assumed as
335              <code>0</code>.  The sign of <code>0</code>
336              <em class=rfc2119>MUST</em> be <code class=char>U+002B</code>
337              <code class=charname>PLUS SIGN</code>
338              (<code class=char>+</code>).</li>
339              <li>Append a <code class=char>U+0029</code>
340              <code class=charname>RIGHT PARENTHESIS</code>
341              (<code class=char>)</code>) character
342              to <var>result</var>.</li>
343              </ol>
344            </dd>
345          <dt>If the name of the pseudo$B!>(Bclass is <code>not</code></dt>
346            <dd>
347              <ol>
348                <li>Append a string of <code class=char>U+003A</code>
349                <code class=charname>COLON</code>, <code class=char>U+006E</code>
350                <code class=charname>LATIN SMALL LETTER N</code>,
351                <code class=char>U+006F</code> <code class=charname>LATIN
352                SMALL LETTER O</code>, <code class=char>U+0074</code>
353                <code class=charname>LATIN SMALL LETTER T</code>, and
354                <code class=char>U+0028</code> <code class=charname>LEFT
355                PARENTHESIS</code> (<code>:not(</code>), followed by a
356                <a href="#newline">newline</a>, to <var>result</var>.</li>
357                <li>Append four <code class=char>U+0020</code>
358                <code class=charname>SPACE</code> characters to
359                <var>result</var>.</li>
360                <li>Append four <code class=char>U+0020</code>
361                <code class=charname>SPACE</code> characters to
362                <var>result</var> again.</li>
363                <li><a href="#algorithm-serialize-a-simple-selector">Serialize
364                the simple selector specified as the argument to the
365                <code>not</code> pseudo$B!>(Bclass</a>.</li>
366                <li>Append a <a href="#newline">newline</a> to
367                <var>result</var>.</li>
368                <li>Append four <code class=char>U+0020</code>
369                <code class=charname>SPACE</code> characters to
370                <var>result</var>.</li>
371                <li>Append a <code class=char>U+0029</code>
372                <code class=charname>RIGHT PARENTHESIS</code>
373                (<code class=char>)</code>) character
374                to <var>result</var>.</li>
375              </ol>
376            </dd>
377          </dl>
378        </li>
379        </ol>
380      </dd>
381    <dt>If <var>ss</var> is a pseudo$B!>(Belement</dt>
382      <dd>
383        <ol>
384        <li>Append two <code class=char>U+003A</code>
385        <code class=charname>COLON</code> characters (<code>::</code>)
386        to <var>result</var>.</li>
387        <li>Append the <span class=ed>@@ normalized</span> name of the
388        pseudo$B!>(Belement to <var>result</var>.</li>
389        <!-- For future version: append "(", arguments, ")", if any. -->
390        </ol>
391      </dd>
392    </dl>
393    
394    
395    <p>A <dfn id=newline title=newline>newline</dfn>
396    <em class=rfc2119>SHOULD</em> be represented as a
397    <code class=char>U+000A</code> <code class=charname>LINE FEED</code>
398    character.  However, depending on the context where
399    the <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
400    representation is in use, a sequence of
401    <code class=char>U+000D</code> <code class=charname>CARRIAGE RETURN</code>
402    followed by a <code class=char>U+000A</code>
403    <code class=charname>LINE FEED</code> or a character
404    <code class=char>U+000D</code> <code class=charname>CARRIAGE RETURN</code>
405    <em class=rfc2119>MAY</em> be used as a newline instead.</p>
406    
407    <div class="note memo">
408    <p>Therefore, when
409    <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
410    representations are literally compared, newlines must be normalized.</p>
411    </div>
412    
413  </div>  </div>
414    
415  <div class="section" id="parsing">  <div class="section" id="parsing">
416  <h2>Parsing  <h2>Parsing
417  <abbr title="Selectors Serialization Format for Testing">SFFT</abbr>  <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
418  Groups of Selectors</h2>  Groups of Selectors</h2>
419    
420  <p>Since <a href="#serializing">the serializing algorithm</a> is  <p>Since <a href="#serializing">the serializing algorithm</a> is
421  so designed that it always output a valid  so designed that it always output a valid
422  <a href="http://www.w3.org/TR/css3-selectors/#grouping">group of  <a href="http://www.w3.org/TR/css3-selectors/#grouping">group of
423  selectors</a>, no special parser for  selectors</a>, no special parser for the
424  <abbr title="Selectors Serialization Format for Testing">SFFT</abbr>  <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
425  is necessary.  Any conforming  representation is necessary.  Any conforming parser for
426  <a href="http://www.w3.org/TR/css3-selectors/#grouping">group of  <a href="http://www.w3.org/TR/css3-selectors/#grouping">groups of
427  selectors</a> parser <em class=rfc2119>MAY</em> be used  selectors</a> <em class=rfc2119>MAY</em> be used
428  to parse <abbr title="Selectors Serialization Format for Testing">SFFT</abbr>  to parse <abbr title="Selectors Serialization Format for Testing">SSFT</abbr>
429  groups of selectors.</p>  representations of groups of selectors.</p>
430  </div>  </div>
431    
432  <div class="section" id="examples">  <div class="section" id="examples">
433  <h2>Examples</h2>  <h2>Examples</h2>
434    
435  <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>
436    
437  <div class="ed issue">  <div class="ed issue">
438  <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>,
439  by choosing <q>Selectors</q> radio button.</a></p>  by choosing <q>Selectors</q> radio button.</p>
440    
441  <div class="example figure block">  <div class="example figure block">
442  <div class="caption">...</div>  <div class="caption">...</div>
# Line 241  by choosing <q>Selectors</q> radio butto Line 449  by choosing <q>Selectors</q> radio butto
449  </div>  </div>
450    
451  <div id="references" class="section reference">  <div id="references" class="section reference">
452  <h2>References</h1>  <h2>References</h2>
453    
454  <div id="normative-references" class="section normative reference">  <div id="normative-references" class="section normative reference">
455  <h3>Normative References</h3>  <h3>Normative References</h3>
# Line 265  by choosing <q>Selectors</q> radio butto Line 473  by choosing <q>Selectors</q> radio butto
473  </div>  </div>
474    
475  <div id="informative-references" class="section informative reference">  <div id="informative-references" class="section informative reference">
476  <h3>Non-normative References</h3>  <h3>Non$B!>(Bnormative References</h3>
477    
478  <dl>  <dl>
479  <dt id=ref-CSS>CSS</dt>  <dt id=ref-CSS>CSS</dt>

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24