mirror of
				https://gitlab.gnome.org/GNOME/libxslt
				synced 2025-11-04 00:53:12 +03:00 
			
		
		
		
	Debug, debug: - libxslt/transform.c libxslt/xsltproc.c: cleanup and debug - libxslt/xsltutils.[ch] : added a small debugging hook Daniel
		
			
				
	
	
		
			2093 lines
		
	
	
		
			60 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			2093 lines
		
	
	
		
			60 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
<?xml version="1.0"?>
 | 
						|
 | 
						|
<!-- Version: $Id$ -->
 | 
						|
 | 
						|
<!-- Stylesheet for XMLspec -->
 | 
						|
<!-- Author: Norman Walsh (Norman.Walsh@East.Sun.COM) -->
 | 
						|
<!-- Author: Chris Maden (crism@lexica.net) -->
 | 
						|
<!-- Author: Ben Trafford (ben@legendary.org) -->
 | 
						|
<!-- Author: Eve Maler (eve.maler@east.sun.com) -->
 | 
						|
<!-- Date Created: 1999.09.07 -->
 | 
						|
 | 
						|
<!-- This stylesheet is copyright (c) 2000 by its authors.  Free
 | 
						|
     distribution and modification is permitted, including adding to
 | 
						|
     the list of authors and copyright holders, as long as this
 | 
						|
     copyright notice is maintained. -->
 | 
						|
 | 
						|
<!-- This stylesheet attempts to implement the XML Specification V2.1
 | 
						|
     DTD.  Documents conforming to earlier DTDs may not be correctly
 | 
						|
     transformed. -->
 | 
						|
 | 
						|
<!-- ChangeLog:
 | 
						|
 | 
						|
     25 Sep 2000: (Norman.Walsh@East.Sun.COM)
 | 
						|
       - Sync'd with Eve's version:
 | 
						|
         o Concatenated each inline element's output all on one line
 | 
						|
           to avoid spurious spaces in the output. (This is really an
 | 
						|
           IE bug, but...) (15 Sep 2000)
 | 
						|
         o Updated crism's email address in header (7 Sep 2000)
 | 
						|
         o Changed handling of affiliation to use comma instead of
 | 
						|
           parentheses (9 Aug 2000)
 | 
						|
 | 
						|
     14 Aug 2000: (Norman.Walsh@East.Sun.COM)
 | 
						|
 | 
						|
       - Added additional.title param (for diffspec.xsl to change)
 | 
						|
       - Fixed URI of W3C home icon
 | 
						|
       - Made CSS stylesheet selection depend on the w3c-doctype attribute
 | 
						|
         of spec instead of the w3c-doctype element in the header
 | 
						|
 | 
						|
     26 Jul 2000: (Norman.Walsh@East.Sun.COM)
 | 
						|
 | 
						|
       - Improved semantics of specref. Added xsl:message for unsupported
 | 
						|
         cases. (I'm by no means confident that I've covered the whole
 | 
						|
         list.)
 | 
						|
       - Support @role on author.
 | 
						|
       - Make lhs/rhs "code" in EBNF.
 | 
						|
       - Fixed bug in ID/IDREF linking.
 | 
						|
       - More effectively disabled special markup for showing @diffed
 | 
						|
         versions
 | 
						|
 | 
						|
     21 Jul 2000: (Norman.Walsh@East.Sun.COM)
 | 
						|
 | 
						|
       - Added support for @diff change tracking, primarily through
 | 
						|
         the auxiliary stylesheet diffspec.xsl. However, it was
 | 
						|
         impractical to handle some constructions, such as DLs and TABLEs,
 | 
						|
         in a completely out-of-band manner. So there is some inline
 | 
						|
         support for @diff markup.
 | 
						|
 | 
						|
       - Added $additional.css to allow downstream stylesheets to add
 | 
						|
         new markup to the <style> element.
 | 
						|
 | 
						|
       - Added required "type" attribute to the <style> element.
 | 
						|
 | 
						|
       - Fixed pervasive problem with nested <a> elements.
 | 
						|
 | 
						|
       - Added doctype-public to xsl:output.
 | 
						|
 | 
						|
       - Added $validity.hacks. If "1", then additional disable-output-escaping
 | 
						|
         markup may be inserted in some places to attempt to get proper,
 | 
						|
         valid HTML. For example, if a <glist> appears inside a <p> in the
 | 
						|
         xmlspec source, this creates a nested <dl> inside a <p> in the
 | 
						|
         HTML, which is not valid. If $validity.hacks is "1", then an
 | 
						|
         extra </p>, <p> pair is inserted around the <dl>.
 | 
						|
-->
 | 
						|
 | 
						|
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 | 
						|
               xmlns:saxon="http://icl.com/saxon"
 | 
						|
               exclude-result-prefixes="saxon"
 | 
						|
               version="1.0">
 | 
						|
 | 
						|
  <xsl:param name="validity.hacks">1</xsl:param>
 | 
						|
  <xsl:param name="show.diff.markup">0</xsl:param>
 | 
						|
  <xsl:param name="additional.css"></xsl:param>
 | 
						|
  <xsl:param name="additional.title"></xsl:param>
 | 
						|
  <xsl:param name="called.by.diffspec">0</xsl:param>
 | 
						|
  <xsl:param name="show.ednotes">1</xsl:param>
 | 
						|
 | 
						|
  <xsl:output method="html"
 | 
						|
       encoding="ISO-8859-1"
 | 
						|
       doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
 | 
						|
       indent="no"/>
 | 
						|
 | 
						|
  <xsl:strip-space elements="author"/>
 | 
						|
 | 
						|
  <!-- not handled:
 | 
						|
    attribute:   unhandled IDL stuff
 | 
						|
    case:        unhandled IDL stuff
 | 
						|
    component:   unhandled IDL stuff
 | 
						|
    constant:    unhandled IDL stuff
 | 
						|
    copyright:   boilerplate notice always used instead
 | 
						|
    definitions: unhandled IDL stuff
 | 
						|
    descr:       unhandled IDL stuff
 | 
						|
    enum:        unhandled IDL stuff
 | 
						|
    enumerator:  unhandled IDL stuff
 | 
						|
    exception:   unhandled IDL stuff
 | 
						|
    group:       unhandled IDL stuff
 | 
						|
    interface:   unhandled IDL stuff
 | 
						|
    method:      unhandled IDL stuff
 | 
						|
    module:      unhandled IDL stuff
 | 
						|
    param:       unhandled IDL stuff
 | 
						|
    parameters:  unhandled IDL stuff
 | 
						|
    raises:      unhandled IDL stuff
 | 
						|
    reference:   unhandled IDL stuff
 | 
						|
    returns:     unhandled IDL stuff
 | 
						|
    sequence:    unhandled IDL stuff
 | 
						|
    struct:      unhandled IDL stuff
 | 
						|
    typedef:     unhandled IDL stuff
 | 
						|
    typename:    unhandled IDL stuff
 | 
						|
    union:       unhandled IDL stuff
 | 
						|
 | 
						|
    Warning!
 | 
						|
    Only handles statuses of NOTE, WD, and REC.
 | 
						|
    -->
 | 
						|
 | 
						|
  <!-- Template for the root node.  Creation of <html> element could
 | 
						|
       go here, but that doesn't feel right. -->
 | 
						|
  <xsl:template match="/">
 | 
						|
    <xsl:apply-templates/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- abstract: appears only in header -->
 | 
						|
  <!-- format as a second-level div -->
 | 
						|
  <!-- called in enforced order from header's template -->
 | 
						|
  <xsl:template match="abstract">
 | 
						|
    <div id="abstract">
 | 
						|
      <xsl:text>
</xsl:text>
 | 
						|
      <h2>
 | 
						|
        <a name="abstract">Abstract</a>
 | 
						|
      </h2>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- affiliation: follows a name in author and member -->
 | 
						|
  <!-- put it in parens with a leading space -->
 | 
						|
  <xsl:template match="affiliation">
 | 
						|
    <xsl:text>, </xsl:text>
 | 
						|
    <xsl:apply-templates/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- arg: appears only in proto -->
 | 
						|
  <!-- argument in function prototype -->
 | 
						|
  <!-- output argument type, italicized as placeholder; separate the
 | 
						|
       list with commas and spaces -->
 | 
						|
  <xsl:template match="arg">
 | 
						|
    <xsl:if test="preceding-sibling::arg">
 | 
						|
      <xsl:text>, </xsl:text>
 | 
						|
    </xsl:if>
 | 
						|
    <var>
 | 
						|
      <xsl:value-of select="@type"/>
 | 
						|
    </var>
 | 
						|
    <xsl:if test="@occur = 'opt'">
 | 
						|
      <xsl:text>?</xsl:text>
 | 
						|
    </xsl:if>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- att: attribute name -->
 | 
						|
  <!-- used lots of places -->
 | 
						|
  <!-- format as monospaced code -->
 | 
						|
  <xsl:template match="att">
 | 
						|
    <code><xsl:apply-templates/></code>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- attribute: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- attval: attribute name -->
 | 
						|
  <!-- used lots of places -->
 | 
						|
  <!-- format as quoted string -->
 | 
						|
  <xsl:template match="attval">
 | 
						|
    <xsl:text>"</xsl:text>
 | 
						|
    <xsl:apply-templates/>
 | 
						|
    <xsl:text>"</xsl:text>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- authlist: list of authors (editors, really) -->
 | 
						|
  <!-- called in enforced order from header's template, in <dl>
 | 
						|
       context -->
 | 
						|
  <xsl:template match="authlist">
 | 
						|
    <dt>
 | 
						|
      <xsl:text>Editor</xsl:text>
 | 
						|
      <xsl:if test="count(author) > 1">
 | 
						|
        <xsl:text>s</xsl:text>
 | 
						|
      </xsl:if>
 | 
						|
      <xsl:text>:</xsl:text>
 | 
						|
    </dt>
 | 
						|
    <xsl:apply-templates/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- author: an editor of a spec -->
 | 
						|
  <!-- only appears in authlist -->
 | 
						|
  <!-- called in <dl> context -->
 | 
						|
  <xsl:template match="author">
 | 
						|
    <dd>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
      <xsl:if test="@role = '2e'">
 | 
						|
	<xsl:text> - Second Edition</xsl:text>
 | 
						|
      </xsl:if>
 | 
						|
    </dd>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- back: back matter for the spec -->
 | 
						|
  <!-- make a <div> for neatness -->
 | 
						|
  <!-- affects numbering of div1 children -->
 | 
						|
  <xsl:template match="back">
 | 
						|
    <div class="back">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- bibl: bibliographic entry -->
 | 
						|
  <!-- only appears in blist -->
 | 
						|
  <!-- called with <dl> context -->
 | 
						|
  <!-- if there's a key, use it in the <dt>, otherwise use the ID -->
 | 
						|
  <!-- if there's an href, add a ref in parens at the end of the text -->
 | 
						|
  <xsl:template match="bibl">
 | 
						|
    <dt class="label">
 | 
						|
      <xsl:if test="@id">
 | 
						|
	<a name="{@id}"/>
 | 
						|
      </xsl:if>
 | 
						|
      <xsl:choose>
 | 
						|
	<xsl:when test="@key">
 | 
						|
	  <xsl:value-of select="@key"/>
 | 
						|
	</xsl:when>
 | 
						|
	<xsl:otherwise>
 | 
						|
	  <xsl:value-of select="@id"/>
 | 
						|
	</xsl:otherwise>
 | 
						|
      </xsl:choose>
 | 
						|
    </dt>
 | 
						|
    <dd>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
      <xsl:if test="@href">
 | 
						|
        <xsl:text>  (See </xsl:text>
 | 
						|
        <a href="{@href}">
 | 
						|
          <xsl:value-of select="@href"/>
 | 
						|
        </a>
 | 
						|
        <xsl:text>.)</xsl:text>
 | 
						|
      </xsl:if>
 | 
						|
    </dd>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- bibref: reference to a bibliographic entry -->
 | 
						|
  <!-- make a link to the bibl -->
 | 
						|
  <!-- if the bibl has a key, put it in square brackets; otherwise use
 | 
						|
       the bibl's ID -->
 | 
						|
  <xsl:template match="bibref">
 | 
						|
    <a>
 | 
						|
      <xsl:attribute name="href">
 | 
						|
        <xsl:call-template name="href.target">
 | 
						|
          <xsl:with-param name="target" select="id(@ref)"/>
 | 
						|
        </xsl:call-template>
 | 
						|
      </xsl:attribute>
 | 
						|
      <xsl:text>[</xsl:text>
 | 
						|
      <xsl:choose>
 | 
						|
        <xsl:when test="id(@ref)/@key">
 | 
						|
          <xsl:value-of select="id(@ref)/@key"/>
 | 
						|
        </xsl:when>
 | 
						|
        <xsl:otherwise>
 | 
						|
          <xsl:value-of select="@ref"/>
 | 
						|
        </xsl:otherwise>
 | 
						|
      </xsl:choose>
 | 
						|
      <xsl:text>]</xsl:text>
 | 
						|
    </a>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- blist: list of bibliographic entries -->
 | 
						|
  <!-- set up the list and process children -->
 | 
						|
  <xsl:template match="blist">
 | 
						|
    <dl>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </dl>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- bnf: un-marked-up BNF productions -->
 | 
						|
  <!-- preformatted within a table cell -->
 | 
						|
  <!-- scrap provides <table> context -->
 | 
						|
  <xsl:template match="bnf">
 | 
						|
    <tbody>
 | 
						|
      <tr>
 | 
						|
        <td>
 | 
						|
	  <xsl:if test="@diff and $show.diff.markup='1'">
 | 
						|
	    <xsl:attribute name="class">
 | 
						|
	      <xsl:text>diff-</xsl:text>
 | 
						|
	      <xsl:value-of select="@diff"/>
 | 
						|
	    </xsl:attribute>
 | 
						|
	  </xsl:if>
 | 
						|
          <pre>
 | 
						|
            <xsl:apply-templates/>
 | 
						|
          </pre>
 | 
						|
        </td>
 | 
						|
      </tr>
 | 
						|
    </tbody>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- body: the meat of the spec -->
 | 
						|
  <!-- create a TOC and then go to work -->
 | 
						|
  <!-- (don't forget the TOC for the back matter and a pointer to end
 | 
						|
       notes) -->
 | 
						|
  <xsl:template match="body">
 | 
						|
    <div class="toc">
 | 
						|
      <xsl:text>
</xsl:text>
 | 
						|
      <h2>
 | 
						|
        <a name="contents">Table of Contents</a>
 | 
						|
      </h2>
 | 
						|
      <p class="toc">
 | 
						|
        <xsl:apply-templates mode="toc" select="div1"/>
 | 
						|
      </p>
 | 
						|
      <xsl:if test="../back">
 | 
						|
        <xsl:text>
</xsl:text>
 | 
						|
        <h3>
 | 
						|
          <xsl:text>Appendi</xsl:text>
 | 
						|
          <xsl:choose>
 | 
						|
            <xsl:when test="count(../back/div1 | ../back/inform-div1) > 1">
 | 
						|
              <xsl:text>ces</xsl:text>
 | 
						|
            </xsl:when>
 | 
						|
            <xsl:otherwise>
 | 
						|
              <xsl:text>x</xsl:text>
 | 
						|
            </xsl:otherwise>
 | 
						|
          </xsl:choose>
 | 
						|
        </h3>
 | 
						|
        <p class="toc">
 | 
						|
          <xsl:apply-templates mode="toc"
 | 
						|
            select="../back/div1 | ../back/inform-div1"/>
 | 
						|
        </p>
 | 
						|
      </xsl:if>
 | 
						|
      <xsl:if test="//footnote">
 | 
						|
        <p class="toc">
 | 
						|
          <a href="#endnotes">
 | 
						|
            <xsl:text>End Notes</xsl:text>
 | 
						|
          </a>
 | 
						|
        </p>
 | 
						|
      </xsl:if>
 | 
						|
    </div>
 | 
						|
    <hr/>
 | 
						|
    <div class="body">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- caption: see table -->
 | 
						|
 | 
						|
  <!-- case: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- code: generic computer code -->
 | 
						|
  <!-- output as HTML <code> for monospaced formatting -->
 | 
						|
  <xsl:template match="code">
 | 
						|
    <code><xsl:apply-templates/></code>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- col: see table -->
 | 
						|
 | 
						|
  <!-- colgroup: see table -->
 | 
						|
 | 
						|
  <!-- com: formal production comment -->
 | 
						|
  <!-- can appear in prod or rhs -->
 | 
						|
  <xsl:template match="com">
 | 
						|
    <xsl:choose>
 | 
						|
      <xsl:when test="preceding-sibling::*[1][name()='rhs']">
 | 
						|
        <td>
 | 
						|
	  <xsl:if test="ancestor-or-self::*/@diff and $show.diff.markup='1'">
 | 
						|
	    <xsl:attribute name="class">
 | 
						|
	      <xsl:text>diff-</xsl:text>
 | 
						|
	      <xsl:value-of select="ancestor-or-self::*/@diff"/>
 | 
						|
	    </xsl:attribute>
 | 
						|
	  </xsl:if>
 | 
						|
          <i>
 | 
						|
            <xsl:text>/* </xsl:text>
 | 
						|
            <xsl:apply-templates/>
 | 
						|
            <xsl:text> */</xsl:text>
 | 
						|
          </i>
 | 
						|
        </td>
 | 
						|
      </xsl:when>
 | 
						|
      <xsl:otherwise>
 | 
						|
        <tr valign="baseline">
 | 
						|
          <td/><td/><td/><td/>
 | 
						|
          <td>
 | 
						|
	    <xsl:if test="ancestor-or-self::*/@diff and $show.diff.markup='1'">
 | 
						|
	      <xsl:attribute name="class">
 | 
						|
		<xsl:text>diff-</xsl:text>
 | 
						|
		<xsl:value-of select="ancestor-or-self::*/@diff"/>
 | 
						|
	      </xsl:attribute>
 | 
						|
	    </xsl:if>
 | 
						|
            <i>
 | 
						|
              <xsl:text>/* </xsl:text>
 | 
						|
              <xsl:apply-templates/>
 | 
						|
              <xsl:text> */</xsl:text>
 | 
						|
            </i>
 | 
						|
          </td>
 | 
						|
        </tr>
 | 
						|
      </xsl:otherwise>
 | 
						|
    </xsl:choose>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- this could probably be handled better, but given that rhs can
 | 
						|
       have arbitrary text and com mixed in, I don't feel like
 | 
						|
       spending enough time to figure out how -->
 | 
						|
  <xsl:template match="rhs/com">
 | 
						|
    <i>
 | 
						|
      <xsl:text>/* </xsl:text>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
      <xsl:text> */</xsl:text>
 | 
						|
    </i>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- component: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- constant: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- constraint: a note in a formal production -->
 | 
						|
  <!-- refers to a constraint note -->
 | 
						|
  <xsl:template match="constraint">
 | 
						|
    <xsl:choose>
 | 
						|
      <xsl:when test="preceding-sibling::*[1][name()='rhs']">
 | 
						|
        <td>
 | 
						|
	  <xsl:if test="@diff and $show.diff.markup='1'">
 | 
						|
	    <xsl:attribute name="class">
 | 
						|
	      <xsl:text>diff-</xsl:text>
 | 
						|
	      <xsl:value-of select="@diff"/>
 | 
						|
	    </xsl:attribute>
 | 
						|
	  </xsl:if>
 | 
						|
          <a>
 | 
						|
            <xsl:attribute name="href">
 | 
						|
              <xsl:call-template name="href.target">
 | 
						|
                <xsl:with-param name="target" select="id(@def)"/>
 | 
						|
              </xsl:call-template>
 | 
						|
            </xsl:attribute>
 | 
						|
            <xsl:text>[Constraint: </xsl:text>
 | 
						|
            <xsl:apply-templates select="id(@def)/head" mode="text"/>
 | 
						|
            <xsl:text>]</xsl:text>
 | 
						|
          </a>
 | 
						|
        </td>
 | 
						|
      </xsl:when>
 | 
						|
      <xsl:otherwise>
 | 
						|
        <tr valign="baseline">
 | 
						|
          <td/><td/><td/><td/>
 | 
						|
          <td>
 | 
						|
	    <xsl:if test="@diff and $show.diff.markup='1'">
 | 
						|
	      <xsl:attribute name="class">
 | 
						|
		<xsl:text>diff-</xsl:text>
 | 
						|
		<xsl:value-of select="@diff"/>
 | 
						|
	      </xsl:attribute>
 | 
						|
	    </xsl:if>
 | 
						|
            <a>
 | 
						|
              <xsl:attribute name="href">
 | 
						|
                <xsl:call-template name="href.target">
 | 
						|
                  <xsl:with-param name="target" select="id(@def)"/>
 | 
						|
                </xsl:call-template>
 | 
						|
              </xsl:attribute>
 | 
						|
              <xsl:text>[Constraint: </xsl:text>
 | 
						|
              <xsl:apply-templates select="id(@def)/head" mode="text"/>
 | 
						|
              <xsl:text>]</xsl:text>
 | 
						|
            </a>
 | 
						|
          </td>
 | 
						|
        </tr>
 | 
						|
      </xsl:otherwise>
 | 
						|
    </xsl:choose>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- constraintnote: note constraining a formal production -->
 | 
						|
  <!-- see also constraintnote/head -->
 | 
						|
  <xsl:template match="constraintnote">
 | 
						|
    <div class="constraint">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- copyright: notice for this document-->
 | 
						|
  <!-- right now, a boilerplate copyright notice is inserted by the
 | 
						|
       template for header; this may need to be changed -->
 | 
						|
 | 
						|
  <!-- day: day of month of spec -->
 | 
						|
  <!-- only used in pudate; called directly from header template -->
 | 
						|
 | 
						|
  <!-- def: glossary definition -->
 | 
						|
  <!-- already in <dl> context from glist -->
 | 
						|
  <xsl:template match="def">
 | 
						|
    <dd>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </dd>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- definitions: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- descr: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- div[n]: structural divisions -->
 | 
						|
  <!-- make an HTML div -->
 | 
						|
  <!-- see also div[n]/head -->
 | 
						|
  <xsl:template match="div1">
 | 
						|
    <div class="div1">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="div2">
 | 
						|
    <div class="div2">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="div3">
 | 
						|
    <div class="div3">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="div4">
 | 
						|
    <div class="div4">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="div5">
 | 
						|
    <div class="div5">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- ednote: editors' note -->
 | 
						|
  <xsl:template match="ednote">
 | 
						|
    <xsl:if test="$show.ednotes != 0">
 | 
						|
      <table border="1">
 | 
						|
        <xsl:attribute name="summary">
 | 
						|
          <xsl:text>Editorial note</xsl:text>
 | 
						|
          <xsl:if test="name">
 | 
						|
            <xsl:text>: </xsl:text>
 | 
						|
            <xsl:value-of select="name"/>
 | 
						|
          </xsl:if>
 | 
						|
        </xsl:attribute>
 | 
						|
        <tr>
 | 
						|
          <td align="left" valign="top" width="50%">
 | 
						|
            <b>
 | 
						|
              <xsl:text>Editorial note</xsl:text>
 | 
						|
              <xsl:if test="name">
 | 
						|
                <xsl:text>: </xsl:text>
 | 
						|
                <xsl:apply-templates select="name"/>
 | 
						|
              </xsl:if>
 | 
						|
            </b>
 | 
						|
          </td>
 | 
						|
          <td align="right" valign="top" width="50%">
 | 
						|
            <xsl:choose>
 | 
						|
              <xsl:when test="date">
 | 
						|
                <xsl:apply-templates select="date"/>
 | 
						|
              </xsl:when>
 | 
						|
              <xsl:otherwise> </xsl:otherwise>
 | 
						|
            </xsl:choose>
 | 
						|
          </td>
 | 
						|
        </tr>
 | 
						|
        <tr>
 | 
						|
          <td colspan="2" align="left" valign="top">
 | 
						|
            <xsl:apply-templates select="edtext"/>
 | 
						|
          </td>
 | 
						|
        </tr>
 | 
						|
      </table>
 | 
						|
    </xsl:if>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="date">
 | 
						|
    <xsl:apply-templates/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- edtext: text of an editors' note -->
 | 
						|
  <!-- ednote is currently hidden -->
 | 
						|
 | 
						|
  <!-- eg: a literal example -->
 | 
						|
  <!-- present as preformatted text -->
 | 
						|
  <xsl:template match="eg">
 | 
						|
    <table class="eg" cellpadding="5" border="1"
 | 
						|
           bgcolor="#99ffff" width="100%"
 | 
						|
           summary="Example">
 | 
						|
      <tr>
 | 
						|
        <td>
 | 
						|
	  <xsl:if test="@diff and $show.diff.markup='1'">
 | 
						|
	    <xsl:attribute name="class">
 | 
						|
	      <xsl:text>diff-</xsl:text>
 | 
						|
	      <xsl:value-of select="@diff"/>
 | 
						|
	    </xsl:attribute>
 | 
						|
	  </xsl:if>
 | 
						|
          <pre>
 | 
						|
            <xsl:apply-templates/>
 | 
						|
          </pre>
 | 
						|
        </td>
 | 
						|
      </tr>
 | 
						|
    </table>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- el: an XML element -->
 | 
						|
  <!-- present as preformatted text, no markup -->
 | 
						|
  <!-- Chris's personal preference is to put pointy-brackets around
 | 
						|
       this, but he seems to be in the minority -->
 | 
						|
  <xsl:template match="el">
 | 
						|
    <code><xsl:apply-templates/></code>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- email: an email address for an editor -->
 | 
						|
  <!-- only occurs in author -->
 | 
						|
  <xsl:template match="email">
 | 
						|
    <xsl:text> </xsl:text>
 | 
						|
    <a href="{@href}">
 | 
						|
      <xsl:text><</xsl:text>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
      <xsl:text>></xsl:text>
 | 
						|
    </a>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- emph: in-line emphasis -->
 | 
						|
  <!-- equates to HTML <em> -->
 | 
						|
  <!-- the role attribute could be used for multiple kinds of
 | 
						|
       emphasis, but that would not be kind -->
 | 
						|
  <xsl:template match="emph">
 | 
						|
    <em><xsl:apply-templates/></em>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- enum: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- enumerator: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- example: what it seems -->
 | 
						|
  <!-- block-level with title -->
 | 
						|
  <!-- see also example/head -->
 | 
						|
  <xsl:template match="example">
 | 
						|
    <div class="example">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- exception: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- footnote: format as endnote, actually -->
 | 
						|
  <xsl:template match="footnote">
 | 
						|
    <xsl:variable name="this-note-id">
 | 
						|
      <xsl:choose>
 | 
						|
        <xsl:when test="@id">
 | 
						|
          <xsl:value-of select="@id"/>
 | 
						|
        </xsl:when>
 | 
						|
        <xsl:otherwise>
 | 
						|
          <xsl:value-of select="generate-id(.)"/>
 | 
						|
        </xsl:otherwise>
 | 
						|
      </xsl:choose>
 | 
						|
    </xsl:variable>
 | 
						|
    <a name="FN-ANCH-{$this-note-id}" href="#{$this-note-id}">
 | 
						|
      <xsl:number level="any" format="[1]"/>
 | 
						|
    </a>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- front: front matter for the spec -->
 | 
						|
  <!-- make a div for cleanliness -->
 | 
						|
  <xsl:template match="front">
 | 
						|
    <div class="front">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- function: name of a function -->
 | 
						|
  <!-- format as HTML <code> for monospaced presentation -->
 | 
						|
  <xsl:template match="function">
 | 
						|
    <code><xsl:apply-templates/></code>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- gitem: glossary list entry -->
 | 
						|
  <!-- just pass children through for <dd>/<dt> formatting -->
 | 
						|
  <xsl:template match="gitem">
 | 
						|
    <xsl:apply-templates/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- glist: glossary list -->
 | 
						|
  <!-- create <dl> and handle children -->
 | 
						|
  <xsl:template match="glist">
 | 
						|
    <xsl:if test="$validity.hacks and local-name(..) = 'p'">
 | 
						|
      <xsl:text disable-output-escaping="yes"></p></xsl:text>
 | 
						|
    </xsl:if>
 | 
						|
    <dl>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </dl>
 | 
						|
    <xsl:if test="$validity.hacks and local-name(..) = 'p'">
 | 
						|
      <xsl:text disable-output-escaping="yes"><p></xsl:text>
 | 
						|
    </xsl:if>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- graphic: external illustration -->
 | 
						|
  <!-- reference external graphic file with alt text -->
 | 
						|
  <xsl:template match="graphic">
 | 
						|
    <img src="{@source}">
 | 
						|
      <xsl:if test="@alt">
 | 
						|
        <xsl:attribute name="alt">
 | 
						|
          <xsl:value-of select="@alt"/>
 | 
						|
        </xsl:attribute>
 | 
						|
      </xsl:if>
 | 
						|
    </img>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- group: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- head: title for a variety of constructs -->
 | 
						|
 | 
						|
  <!-- constraintnotes have different types, but they're
 | 
						|
       non-enumerated; nothing is done with them right now -->
 | 
						|
  <xsl:template match="constraintnote/head">
 | 
						|
    <p class="prefix">
 | 
						|
      <xsl:if test="../@id">
 | 
						|
	<a name="{../@id}"/>
 | 
						|
      </xsl:if>
 | 
						|
      <b><xsl:text>Constraint: </xsl:text><xsl:apply-templates/></b>
 | 
						|
    </p>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="div1/head">
 | 
						|
    <xsl:text>
</xsl:text>
 | 
						|
    <h2>
 | 
						|
      <a>
 | 
						|
        <xsl:attribute name="name">
 | 
						|
          <xsl:choose>
 | 
						|
            <xsl:when test="../@id">
 | 
						|
              <xsl:value-of select="../@id"/>
 | 
						|
            </xsl:when>
 | 
						|
            <xsl:otherwise>
 | 
						|
              <xsl:value-of select="generate-id(..)"/>
 | 
						|
            </xsl:otherwise>
 | 
						|
          </xsl:choose>
 | 
						|
        </xsl:attribute>
 | 
						|
      </a>
 | 
						|
      <xsl:apply-templates select=".." mode="divnum"/>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </h2>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="div2/head">
 | 
						|
    <xsl:text>
</xsl:text>
 | 
						|
    <h3>
 | 
						|
      <a>
 | 
						|
        <xsl:attribute name="name">
 | 
						|
          <xsl:choose>
 | 
						|
            <xsl:when test="../@id">
 | 
						|
              <xsl:value-of select="../@id"/>
 | 
						|
            </xsl:when>
 | 
						|
            <xsl:otherwise>
 | 
						|
              <xsl:value-of select="generate-id(..)"/>
 | 
						|
            </xsl:otherwise>
 | 
						|
          </xsl:choose>
 | 
						|
        </xsl:attribute>
 | 
						|
      </a>
 | 
						|
      <xsl:apply-templates select=".." mode="divnum"/>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </h3>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="div3/head">
 | 
						|
    <xsl:text>
</xsl:text>
 | 
						|
    <h4>
 | 
						|
      <a>
 | 
						|
	<xsl:attribute name="name">
 | 
						|
          <xsl:choose>
 | 
						|
            <xsl:when test="../@id">
 | 
						|
              <xsl:value-of select="../@id"/>
 | 
						|
            </xsl:when>
 | 
						|
            <xsl:otherwise>
 | 
						|
              <xsl:value-of select="generate-id(..)"/>
 | 
						|
            </xsl:otherwise>
 | 
						|
          </xsl:choose>
 | 
						|
        </xsl:attribute>
 | 
						|
      </a>
 | 
						|
      <xsl:apply-templates select=".." mode="divnum"/>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </h4>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="div4/head">
 | 
						|
    <xsl:text>
</xsl:text>
 | 
						|
    <h5>
 | 
						|
      <a>
 | 
						|
        <xsl:attribute name="name">
 | 
						|
          <xsl:choose>
 | 
						|
            <xsl:when test="../@id">
 | 
						|
              <xsl:value-of select="../@id"/>
 | 
						|
            </xsl:when>
 | 
						|
            <xsl:otherwise>
 | 
						|
              <xsl:value-of select="generate-id(..)"/>
 | 
						|
            </xsl:otherwise>
 | 
						|
          </xsl:choose>
 | 
						|
        </xsl:attribute>
 | 
						|
      </a>
 | 
						|
      <xsl:apply-templates select=".." mode="divnum"/>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </h5>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="div5/head">
 | 
						|
    <xsl:text>
</xsl:text>
 | 
						|
    <h6>
 | 
						|
      <a>
 | 
						|
        <xsl:attribute name="name">
 | 
						|
          <xsl:choose>
 | 
						|
            <xsl:when test="../@id">
 | 
						|
              <xsl:value-of select="../@id"/>
 | 
						|
            </xsl:when>
 | 
						|
            <xsl:otherwise>
 | 
						|
              <xsl:value-of select="generate-id(..)"/>
 | 
						|
            </xsl:otherwise>
 | 
						|
          </xsl:choose>
 | 
						|
        </xsl:attribute>
 | 
						|
      </a>
 | 
						|
      <xsl:apply-templates select=".." mode="divnum"/>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </h6>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="example/head">
 | 
						|
    <xsl:text>
</xsl:text>
 | 
						|
    <h5>
 | 
						|
      <xsl:text>Example: </xsl:text>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </h5>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="inform-div1/head">
 | 
						|
    <xsl:text>
</xsl:text>
 | 
						|
    <h2>
 | 
						|
      <a>
 | 
						|
        <xsl:attribute name="name">
 | 
						|
          <xsl:choose>
 | 
						|
            <xsl:when test="../@id">
 | 
						|
              <xsl:value-of select="../@id"/>
 | 
						|
            </xsl:when>
 | 
						|
            <xsl:otherwise>
 | 
						|
              <xsl:value-of select="generate-id(..)"/>
 | 
						|
            </xsl:otherwise>
 | 
						|
          </xsl:choose>
 | 
						|
        </xsl:attribute>
 | 
						|
      </a>
 | 
						|
      <xsl:apply-templates select=".." mode="divnum"/>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
      <xsl:text> (Non-Normative)</xsl:text>
 | 
						|
    </h2>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="issue/head">
 | 
						|
    <p class="prefix">
 | 
						|
      <b><xsl:apply-templates/></b>
 | 
						|
    </p>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="scrap/head">
 | 
						|
    <xsl:text>
</xsl:text>
 | 
						|
    <h5>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </h5>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="vcnote/head">
 | 
						|
    <p class="prefix">
 | 
						|
      <xsl:if test="../@id">
 | 
						|
	<a name="{../@id}"/>
 | 
						|
      </xsl:if>
 | 
						|
      <b><xsl:text>Validity constraint: </xsl:text><xsl:apply-templates/></b>
 | 
						|
    </p>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="wfcnote/head">
 | 
						|
    <p class="prefix">
 | 
						|
      <xsl:if test="../@id">
 | 
						|
	<a name="{../@id}"/>
 | 
						|
      </xsl:if>
 | 
						|
      <b><xsl:text>Well-formedness constraint: </xsl:text><xsl:apply-templates/></b>
 | 
						|
    </p>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- header: metadata about the spec -->
 | 
						|
  <!-- pull out information into standard W3C layout -->
 | 
						|
  <xsl:template match="header">
 | 
						|
    <div class="head">
 | 
						|
      <p>
 | 
						|
        <a href="http://www.w3.org/">
 | 
						|
          <img src="http://www.w3.org/Icons/w3c_home"
 | 
						|
            alt="W3C" height="48" width="72"/>
 | 
						|
        </a>
 | 
						|
      </p>
 | 
						|
      <xsl:text>
</xsl:text>
 | 
						|
      <h1>
 | 
						|
        <xsl:apply-templates select="title"/>
 | 
						|
        <xsl:if test="version">
 | 
						|
          <xsl:text> </xsl:text>
 | 
						|
          <xsl:apply-templates select="version"/>
 | 
						|
        </xsl:if>
 | 
						|
      </h1>
 | 
						|
      <xsl:if test="subtitle">
 | 
						|
        <xsl:text>
</xsl:text>
 | 
						|
        <h2>
 | 
						|
          <xsl:apply-templates select="subtitle"/>
 | 
						|
        </h2>
 | 
						|
      </xsl:if>
 | 
						|
      <xsl:text>
</xsl:text>
 | 
						|
      <h2>
 | 
						|
        <xsl:apply-templates select="w3c-doctype"/>
 | 
						|
        <xsl:text> </xsl:text>
 | 
						|
        <xsl:if test="pubdate/day">
 | 
						|
          <xsl:apply-templates select="pubdate/day"/>
 | 
						|
          <xsl:text> </xsl:text>
 | 
						|
        </xsl:if>
 | 
						|
        <xsl:apply-templates select="pubdate/month"/>
 | 
						|
        <xsl:text> </xsl:text>
 | 
						|
        <xsl:apply-templates select="pubdate/year"/>
 | 
						|
      </h2>
 | 
						|
      <dl>
 | 
						|
        <xsl:apply-templates select="publoc"/>
 | 
						|
        <xsl:apply-templates select="latestloc"/>
 | 
						|
        <xsl:apply-templates select="prevlocs"/>
 | 
						|
        <xsl:apply-templates select="authlist"/>
 | 
						|
      </dl>
 | 
						|
      <p class="copyright">
 | 
						|
        <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
 | 
						|
          <xsl:text>Copyright</xsl:text>
 | 
						|
        </a>
 | 
						|
        <xsl:text> © </xsl:text>
 | 
						|
        <xsl:apply-templates select="pubdate/year"/>
 | 
						|
        <xsl:text> </xsl:text>
 | 
						|
        <a href="http://www.w3.org/">
 | 
						|
          <abbr title="World Wide Web Consortium">W3C</abbr>
 | 
						|
        </a>
 | 
						|
        <sup>®</sup>
 | 
						|
        <xsl:text> (</xsl:text>
 | 
						|
        <a href="http://www.lcs.mit.edu/">
 | 
						|
          <abbr title="Massachusetts Institute of Technology">MIT</abbr>
 | 
						|
        </a>
 | 
						|
        <xsl:text>, </xsl:text>
 | 
						|
        <a href="http://www.inria.fr/">
 | 
						|
        <abbr lang="fr"
 | 
						|
          title="Institut National de Recherche en Informatique et Automatique">INRIA</abbr>
 | 
						|
        </a>
 | 
						|
        <xsl:text>, </xsl:text>
 | 
						|
        <a href="http://www.keio.ac.jp/">Keio</a>
 | 
						|
        <xsl:text>), All Rights Reserved. W3C </xsl:text>
 | 
						|
        <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>
 | 
						|
        <xsl:text>, </xsl:text>
 | 
						|
        <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>
 | 
						|
        <xsl:text>, </xsl:text>
 | 
						|
        <a href="http://www.w3.org/Consortium/Legal/copyright-documents-19990405">document use</a>
 | 
						|
        <xsl:text>, and </xsl:text>
 | 
						|
        <a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720">software licensing</a>
 | 
						|
        <xsl:text> rules apply.</xsl:text>
 | 
						|
      </p>
 | 
						|
    </div>
 | 
						|
    <hr/>
 | 
						|
    <xsl:apply-templates select="notice"/>
 | 
						|
    <xsl:apply-templates select="abstract"/>
 | 
						|
    <xsl:apply-templates select="status"/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- inform-div1: non-normative back matter top-level division -->
 | 
						|
  <!-- treat like div1 except add "(Non-Normative)" to title -->
 | 
						|
  <xsl:template match="inform-div1">
 | 
						|
    <div class="div1">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- interface: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- issue: open issue before the Working Group -->
 | 
						|
  <!-- maintain an ID for linking to it -->
 | 
						|
  <!-- currently generates boilerplate head plus optional head child
 | 
						|
       element; this should probably be cleaned up to only use the
 | 
						|
       head if it's present -->
 | 
						|
  <xsl:template match="issue">
 | 
						|
    <div class="issue">
 | 
						|
      <p class="prefix">
 | 
						|
	<xsl:if test="@id">
 | 
						|
	  <a name="{@id}"/>
 | 
						|
	</xsl:if>
 | 
						|
	<b><xsl:text>Issue (</xsl:text><xsl:value-of select="@id"/><xsl:text>):</xsl:text></b>
 | 
						|
      </p>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- item: generic list item -->
 | 
						|
  <xsl:template match="item">
 | 
						|
    <li>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </li>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- kw: keyword -->
 | 
						|
  <!-- make it bold -->
 | 
						|
  <xsl:template match="kw">
 | 
						|
    <b><xsl:apply-templates/></b>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- label: term for defintion in glossary entry -->
 | 
						|
  <!-- already in <dl> context from glist -->
 | 
						|
  <xsl:template match="label">
 | 
						|
    <dt class="label">
 | 
						|
      <xsl:if test="@id"><a name="{@id}"/></xsl:if>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </dt>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- language: -->
 | 
						|
  <!-- langusage: -->
 | 
						|
  <!-- identify language usage within a spec; not actually formatted -->
 | 
						|
 | 
						|
  <!-- latestloc: latest location for this spec -->
 | 
						|
  <!-- called in a <dl> context from header -->
 | 
						|
  <xsl:template match="latestloc">
 | 
						|
    <dt>Latest version:</dt>
 | 
						|
    <dd>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </dd>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- lhs: left-hand side of formal productions -->
 | 
						|
  <!-- make a table row with the lhs and the corresponding other
 | 
						|
       pieces in this crazy mixed-up content model -->
 | 
						|
  <xsl:template match="lhs">
 | 
						|
    <tr valign="baseline">
 | 
						|
      <td>
 | 
						|
	<xsl:if test="ancestor-or-self::*/@diff and $show.diff.markup='1'">
 | 
						|
	  <xsl:attribute name="class">
 | 
						|
	    <xsl:text>diff-</xsl:text>
 | 
						|
	    <xsl:value-of select="ancestor-or-self::*/@diff"/>
 | 
						|
	  </xsl:attribute>
 | 
						|
	</xsl:if>
 | 
						|
	<xsl:if test="../@id">
 | 
						|
	  <a name="{../@id}"/>
 | 
						|
	</xsl:if>
 | 
						|
	<xsl:apply-templates select="ancestor::prod" mode="number"/>
 | 
						|
<!--
 | 
						|
  This could be done right here, but XT goes into deep space when the
 | 
						|
  node to be numbered isn't the current node and level="any":
 | 
						|
          <xsl:number count="prod" level="any" from="spec"
 | 
						|
            format="[1]"/>
 | 
						|
  -->
 | 
						|
	<xsl:text>   </xsl:text>
 | 
						|
      </td>
 | 
						|
      <td>
 | 
						|
	<xsl:if test="ancestor-or-self::*/@diff and $show.diff.markup='1'">
 | 
						|
	  <xsl:attribute name="class">
 | 
						|
	    <xsl:text>diff-</xsl:text>
 | 
						|
	    <xsl:value-of select="ancestor-or-self::*/@diff"/>
 | 
						|
	  </xsl:attribute>
 | 
						|
	</xsl:if>
 | 
						|
        <code><xsl:apply-templates/></code>
 | 
						|
      </td>
 | 
						|
      <td>
 | 
						|
	<xsl:if test="ancestor-or-self::*/@diff and $show.diff.markup='1'">
 | 
						|
	  <xsl:attribute name="class">
 | 
						|
	    <xsl:text>diff-</xsl:text>
 | 
						|
	    <xsl:value-of select="ancestor-or-self::*/@diff"/>
 | 
						|
	  </xsl:attribute>
 | 
						|
	</xsl:if>
 | 
						|
        <xsl:text>   ::=   </xsl:text>
 | 
						|
      </td>
 | 
						|
      <xsl:apply-templates
 | 
						|
        select="following-sibling::*[1][name()='rhs']"/>
 | 
						|
    </tr>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- loc: a Web location -->
 | 
						|
  <!-- outside the header, it's a normal cross-reference -->
 | 
						|
  <xsl:template match="loc">
 | 
						|
    <a href="{@href}">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </a>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- member: member of an organization -->
 | 
						|
  <!-- appears only in orglist, which creates <ul> context -->
 | 
						|
  <xsl:template match="member">
 | 
						|
    <li>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </li>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- method: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- module: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- month: month of spec -->
 | 
						|
  <!-- only used in pudate; called directly from header template -->
 | 
						|
 | 
						|
  <!-- name: name of an editor or organization member -->
 | 
						|
  <!-- only appears in author and member -->
 | 
						|
  <!-- just output text -->
 | 
						|
  <xsl:template match="name">
 | 
						|
    <xsl:apply-templates/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- note: a note about the spec -->
 | 
						|
  <xsl:template match="note">
 | 
						|
    <div class="note">
 | 
						|
      <p class="prefix">
 | 
						|
        <b>Note:</b>
 | 
						|
      </p>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- notice: a front-matter advisory about the spec's status -->
 | 
						|
  <!-- make sure people notice it -->
 | 
						|
  <xsl:template match="notice">
 | 
						|
    <div class="notice">
 | 
						|
      <p class="prefix">
 | 
						|
        <b>NOTICE:</b>
 | 
						|
      </p>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- nt: production non-terminal -->
 | 
						|
  <!-- make a link to the non-terminal's definition -->
 | 
						|
  <xsl:template match="nt">
 | 
						|
    <a>
 | 
						|
      <xsl:attribute name="href">
 | 
						|
        <xsl:call-template name="href.target">
 | 
						|
          <xsl:with-param name="target" select="id(@def)"/>
 | 
						|
        </xsl:call-template>
 | 
						|
      </xsl:attribute>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </a>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- olist: an ordered list -->
 | 
						|
  <xsl:template match="olist">
 | 
						|
    <ol>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </ol>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- orglist: a list of an organization's members -->
 | 
						|
  <xsl:template match="orglist">
 | 
						|
    <ul>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </ul>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- p: a standard paragraph -->
 | 
						|
  <xsl:template match="p">
 | 
						|
    <p>
 | 
						|
      <xsl:if test="@id">
 | 
						|
        <xsl:attribute name="id">
 | 
						|
          <xsl:value-of select="@id"/>
 | 
						|
        </xsl:attribute>
 | 
						|
      </xsl:if>
 | 
						|
      <xsl:if test="@role">
 | 
						|
        <xsl:attribute name="class">
 | 
						|
          <xsl:value-of select="@role"/>
 | 
						|
        </xsl:attribute>
 | 
						|
      </xsl:if>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </p>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- param: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- parameters: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- phrase: semantically meaningless markup hanger -->
 | 
						|
  <!-- role attributes may be used to request different formatting,
 | 
						|
       which isn't currently handled -->
 | 
						|
  <xsl:template match="phrase">
 | 
						|
    <xsl:apply-templates/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- prevlocs: previous locations for this spec -->
 | 
						|
  <!-- called in a <dl> context from header -->
 | 
						|
  <xsl:template match="prevlocs">
 | 
						|
    <dt>Previous versions:</dt>
 | 
						|
    <dd>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </dd>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- prod: a formal grammar production -->
 | 
						|
  <!-- if not in a prodgroup, needs a <tbody> -->
 | 
						|
  <!-- has a weird content model; makes a table but there are no
 | 
						|
       explicit rules; many different things can start a new row -->
 | 
						|
  <!-- process the first child in each row, and it will process the
 | 
						|
       others -->
 | 
						|
  <xsl:template match="prod">
 | 
						|
    <tbody>
 | 
						|
      <xsl:apply-templates
 | 
						|
        select="lhs |
 | 
						|
                rhs[preceding-sibling::*[1][name()!='lhs']] |
 | 
						|
                com[preceding-sibling::*[1][name()!='rhs']] |
 | 
						|
                constraint[preceding-sibling::*[1][name()!='rhs']] |
 | 
						|
                vc[preceding-sibling::*[1][name()!='rhs']] |
 | 
						|
                wfc[preceding-sibling::*[1][name()!='rhs']]"/>
 | 
						|
    </tbody>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template match="prodgroup/prod">
 | 
						|
    <xsl:apply-templates
 | 
						|
      select="lhs |
 | 
						|
              rhs[preceding-sibling::*[1][name()!='lhs']] |
 | 
						|
              com[preceding-sibling::*[1][name()!='rhs']] |
 | 
						|
              constraint[preceding-sibling::*[1][name()!='rhs']] |
 | 
						|
              vc[preceding-sibling::*[1][name()!='rhs']] |
 | 
						|
              wfc[preceding-sibling::*[1][name()!='rhs']]"/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- prodgroup: group of formal productions -->
 | 
						|
  <!-- create one <tbody> for each group -->
 | 
						|
  <xsl:template match="prodgroup">
 | 
						|
    <tbody>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </tbody>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- prodrecap: reiteration of a prod -->
 | 
						|
  <!-- process the prod in another node that will never generate a
 | 
						|
       <tbody> or a number, plus links the lhs to the original
 | 
						|
       production -->
 | 
						|
  <xsl:template match="prodrecap">
 | 
						|
    <tbody>
 | 
						|
      <xsl:apply-templates select="id(@ref)" mode="ref"/>
 | 
						|
    </tbody>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- proto: function prototype -->
 | 
						|
  <!-- type and name of the function, with arguments in parens -->
 | 
						|
  <xsl:template match="proto">
 | 
						|
    <p>
 | 
						|
      <em><xsl:value-of select="@return-type"/></em>
 | 
						|
      <xsl:text> </xsl:text>
 | 
						|
      <b><xsl:value-of select="@name"/></b>
 | 
						|
      <xsl:text>(</xsl:text>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
      <xsl:text>)</xsl:text>
 | 
						|
    </p>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- pubdate: date of spec -->
 | 
						|
  <!-- called directly from header -->
 | 
						|
 | 
						|
  <!-- publoc: location of current version of spec -->
 | 
						|
  <!-- called from header in <dl> context -->
 | 
						|
  <xsl:template match="publoc">
 | 
						|
    <dt>This version:</dt>
 | 
						|
    <dd>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </dd>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- pubstmt: statement of publication -->
 | 
						|
  <!-- not currently output -->
 | 
						|
 | 
						|
  <!-- quote: a quoted string or phrase -->
 | 
						|
  <!-- it would be nice to use HTML <q> elements, but browser support
 | 
						|
       is abysmal -->
 | 
						|
  <xsl:template match="quote">
 | 
						|
    <xsl:text>"</xsl:text>
 | 
						|
    <xsl:apply-templates/>
 | 
						|
    <xsl:text>"</xsl:text>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- raises: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- reference: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- resolution: resolution of an issue -->
 | 
						|
  <xsl:template match="resolution">
 | 
						|
    <p class="prefix">
 | 
						|
      <b>Resolution:</b>
 | 
						|
    </p>
 | 
						|
    <xsl:apply-templates/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- returns: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- revisiondesc: description of spec revision -->
 | 
						|
  <!-- used for internal tracking; not formatted -->
 | 
						|
 | 
						|
  <!-- rhs: right-hand side of a formal production -->
 | 
						|
  <!-- make a table cell; if it's not the first after an LHS, make a
 | 
						|
       new row, too -->
 | 
						|
  <xsl:template match="rhs">
 | 
						|
    <xsl:choose>
 | 
						|
      <xsl:when test="preceding-sibling::*[1][name()='lhs']">
 | 
						|
        <td>
 | 
						|
	  <xsl:if test="ancestor-or-self::*/@diff and $show.diff.markup='1'">
 | 
						|
	    <xsl:attribute name="class">
 | 
						|
	      <xsl:text>diff-</xsl:text>
 | 
						|
	      <xsl:value-of select="ancestor-or-self::*/@diff"/>
 | 
						|
	    </xsl:attribute>
 | 
						|
	  </xsl:if>
 | 
						|
          <code><xsl:apply-templates/></code>
 | 
						|
        </td>
 | 
						|
	<xsltdebug/>
 | 
						|
        <xsl:apply-templates
 | 
						|
          select="following-sibling::*[1][name()='com' or
 | 
						|
                                          name()='constraint' or
 | 
						|
                                          name()='vc' or
 | 
						|
                                          name()='wfc']"/>
 | 
						|
      </xsl:when>
 | 
						|
      <xsl:otherwise>
 | 
						|
        <tr valign="baseline">
 | 
						|
          <td/><td/><td/>
 | 
						|
          <td>
 | 
						|
	    <xsl:if test="ancestor-or-self::*/@diff and $show.diff.markup='1'">
 | 
						|
	      <xsl:attribute name="class">
 | 
						|
		<xsl:text>diff-</xsl:text>
 | 
						|
		<xsl:value-of select="ancestor-or-self::*/@diff"/>
 | 
						|
	      </xsl:attribute>
 | 
						|
	    </xsl:if>
 | 
						|
            <code><xsl:apply-templates/></code>
 | 
						|
          </td>
 | 
						|
          <xsl:apply-templates
 | 
						|
            select="following-sibling::*[1][name()='com' or
 | 
						|
                                            name()='constraint' or
 | 
						|
                                            name()='vc' or
 | 
						|
                                            name()='wfc']"/>
 | 
						|
        </tr>
 | 
						|
      </xsl:otherwise>
 | 
						|
    </xsl:choose>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- role: part played by a member of an organization -->
 | 
						|
  <xsl:template match="role">
 | 
						|
    <xsl:text> (</xsl:text>
 | 
						|
    <i><xsl:apply-templates/></i>
 | 
						|
    <xsl:text>) </xsl:text>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- scrap: series of formal grammar productions -->
 | 
						|
  <!-- set up a <table> and handle children -->
 | 
						|
  <xsl:template match="scrap">
 | 
						|
    <xsl:apply-templates select="head"/>
 | 
						|
    <table class="scrap" summary="Scrap">
 | 
						|
      <xsl:apply-templates select="bnf | prod | prodgroup"/>
 | 
						|
    </table>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- sequence: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- sitem: simple list item -->
 | 
						|
  <!-- just make one paragraph with <br>s between items -->
 | 
						|
  <xsl:template match="sitem[position() > 1]">
 | 
						|
    <br/>
 | 
						|
    <xsl:apply-templates/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- slist: simple list -->
 | 
						|
  <!-- using a <blockquote> to indent the list is very wrong, but it
 | 
						|
       works -->
 | 
						|
  <xsl:template match="slist">
 | 
						|
    <blockquote>
 | 
						|
      <p>
 | 
						|
        <xsl:apply-templates/>
 | 
						|
      </p>
 | 
						|
    </blockquote>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- source: the source of an issue -->
 | 
						|
  <xsl:template match="source">
 | 
						|
    <p>
 | 
						|
      <b>Source</b>
 | 
						|
      <xsl:text>: </xsl:text>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </p>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- sourcedesc: description of spec preparation -->
 | 
						|
  <!-- used for tracking the source, but not formatted -->
 | 
						|
 | 
						|
  <!-- spec: the specification itself -->
 | 
						|
  <xsl:template match="spec">
 | 
						|
    <html>
 | 
						|
      <xsl:if test="header/langusage/language">
 | 
						|
        <xsl:attribute name="lang">
 | 
						|
          <xsl:value-of select="header/langusage/language/@id"/>
 | 
						|
        </xsl:attribute>
 | 
						|
      </xsl:if>
 | 
						|
      <head>
 | 
						|
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
 | 
						|
        <title>
 | 
						|
          <xsl:apply-templates select="header/title"/>
 | 
						|
          <xsl:if test="header/version">
 | 
						|
            <xsl:text> </xsl:text>
 | 
						|
            <xsl:apply-templates select="header/version"/>
 | 
						|
          </xsl:if>
 | 
						|
          <xsl:if test="$additional.title != ''">
 | 
						|
            <xsl:text> -- </xsl:text>
 | 
						|
            <xsl:value-of select="$additional.title"/>
 | 
						|
	  </xsl:if>
 | 
						|
        </title>
 | 
						|
        <xsl:call-template name="css"/>
 | 
						|
      </head>
 | 
						|
      <body>
 | 
						|
        <xsl:apply-templates/>
 | 
						|
        <xsl:if test="//footnote">
 | 
						|
          <hr/>
 | 
						|
          <div class="endnotes">
 | 
						|
            <xsl:text>
</xsl:text>
 | 
						|
            <h3>
 | 
						|
              <a name="endnotes">
 | 
						|
                <xsl:text>End Notes</xsl:text>
 | 
						|
              </a>
 | 
						|
            </h3>
 | 
						|
            <dl>
 | 
						|
              <xsl:apply-templates select="//footnote" mode="notes"/>
 | 
						|
            </dl>
 | 
						|
          </div>
 | 
						|
        </xsl:if>
 | 
						|
      </body>
 | 
						|
    </html>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- specref: reference to another part of teh current specification -->
 | 
						|
  <xsl:template match="specref">
 | 
						|
    <xsl:variable name="target" select="id(@ref)[1]"/>
 | 
						|
    <a>
 | 
						|
      <xsl:attribute name="href">
 | 
						|
        <xsl:call-template name="href.target">
 | 
						|
          <xsl:with-param name="target" select="id(@ref)"/>
 | 
						|
        </xsl:call-template>
 | 
						|
      </xsl:attribute>
 | 
						|
      <xsl:choose>
 | 
						|
	<xsl:when test="starts-with(local-name($target), 'div')">
 | 
						|
	  <b><xsl:apply-templates select="id(@ref)" mode="divnum"/><xsl:apply-templates select="id(@ref)/head" mode="text"/></b>
 | 
						|
	</xsl:when>
 | 
						|
	<xsl:when test="starts-with(local-name($target), 'inform-div')">
 | 
						|
	  <b><xsl:apply-templates select="id(@ref)" mode="divnum"/><xsl:apply-templates select="id(@ref)/head" mode="text"/></b>
 | 
						|
	</xsl:when>
 | 
						|
	<xsl:when test="local-name($target) = 'vcnote'">
 | 
						|
	  <b><xsl:text>[VC: </xsl:text><xsl:apply-templates select="id(@ref)/head" mode="text"/><xsl:text>]</xsl:text></b>
 | 
						|
	</xsl:when>
 | 
						|
	<xsl:when test="local-name($target) = 'prod'">
 | 
						|
	  <b>
 | 
						|
            <xsl:text>[PROD: </xsl:text>
 | 
						|
            <xsl:apply-templates select="$target" mode="number-simple"/>
 | 
						|
            <xsl:text>]</xsl:text>
 | 
						|
          </b>
 | 
						|
	</xsl:when>
 | 
						|
	<xsl:when test="local-name($target) = 'label'">
 | 
						|
	  <b>
 | 
						|
            <xsl:text>[</xsl:text>
 | 
						|
            <xsl:value-of select="$target"/>
 | 
						|
            <xsl:text>]</xsl:text>
 | 
						|
          </b>
 | 
						|
	</xsl:when>
 | 
						|
	<xsl:otherwise>
 | 
						|
	  <xsl:message>
 | 
						|
	    <xsl:text>Unsupported specref to </xsl:text>
 | 
						|
	    <xsl:value-of select="local-name($target)"/>
 | 
						|
	    <xsl:text> [</xsl:text>
 | 
						|
	    <xsl:value-of select="@ref"/>
 | 
						|
	    <xsl:text>] </xsl:text>
 | 
						|
	    <xsl:text> (Contact stylesheet maintainer).</xsl:text>
 | 
						|
	  </xsl:message>
 | 
						|
	  <b>???</b>
 | 
						|
	</xsl:otherwise>
 | 
						|
      </xsl:choose>
 | 
						|
    </a>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- status: the status of the spec -->
 | 
						|
  <xsl:template match="status">
 | 
						|
    <div id="status">
 | 
						|
      <xsl:text>
</xsl:text>
 | 
						|
      <h2>
 | 
						|
        <a name="status">Status of this Document</a>
 | 
						|
      </h2>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- struct: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- sub: subscript -->
 | 
						|
  <xsl:template match="sub">
 | 
						|
    <sub>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </sub>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- subtitle: secondary title of spec -->
 | 
						|
  <!-- handled directly within header -->
 | 
						|
 | 
						|
  <!-- sup: superscript -->
 | 
						|
  <xsl:template match="sup">
 | 
						|
    <sup>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </sup>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- table: the HTML table model adopted wholesale -->
 | 
						|
  <!-- tbody: -->
 | 
						|
  <!-- td: -->
 | 
						|
  <xsl:template
 | 
						|
    match="caption | col | colgroup | table | tbody | td | tfoot | th | thead | tr">
 | 
						|
    <xsl:copy>
 | 
						|
      <xsl:for-each select="@*">
 | 
						|
	<!-- Wait: some of these aren't HTML attributes after all... -->
 | 
						|
	<xsl:if test="local-name(.) != 'diff'">
 | 
						|
	  <xsl:copy>
 | 
						|
	    <xsl:apply-templates/>
 | 
						|
	  </xsl:copy>
 | 
						|
	</xsl:if>
 | 
						|
      </xsl:for-each>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </xsl:copy>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- term: the actual mention of a term within a termdef -->
 | 
						|
  <xsl:template match="term">
 | 
						|
    <b><xsl:apply-templates/></b>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- termdef: sentence or phrase defining a term -->
 | 
						|
  <xsl:template match="termdef">
 | 
						|
    <xsl:text>[</xsl:text>
 | 
						|
    <a name="{@id}" title="{@term}">
 | 
						|
      <xsl:text>Definition</xsl:text>
 | 
						|
    </a>
 | 
						|
    <xsl:text>: </xsl:text>
 | 
						|
    <xsl:apply-templates/>
 | 
						|
    <xsl:text>]</xsl:text>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- termref: reference to a defined term -->
 | 
						|
  <xsl:template match="termref">
 | 
						|
    <a title="{id(@def)/@term}">
 | 
						|
      <xsl:attribute name="href">
 | 
						|
        <xsl:call-template name="href.target">
 | 
						|
          <xsl:with-param name="target" select="id(@def)"/>
 | 
						|
        </xsl:call-template>
 | 
						|
      </xsl:attribute>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </a>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- tfoot: see table -->
 | 
						|
  <!-- th: see table -->
 | 
						|
  <!-- thead: see table -->
 | 
						|
 | 
						|
  <!-- title: title of the specification -->
 | 
						|
  <!-- called directly within header -->
 | 
						|
 | 
						|
  <!-- titleref: reference to the title of any work -->
 | 
						|
  <!-- if a URL is given, link it -->
 | 
						|
  <xsl:template match="titleref">
 | 
						|
    <xsl:choose>
 | 
						|
      <xsl:when test="@href">
 | 
						|
        <a href="{@href}">
 | 
						|
          <cite>
 | 
						|
            <xsl:apply-templates/>
 | 
						|
          </cite>
 | 
						|
        </a>
 | 
						|
      </xsl:when>
 | 
						|
      <xsl:otherwise>
 | 
						|
        <cite>
 | 
						|
          <xsl:apply-templates/>
 | 
						|
        </cite>
 | 
						|
      </xsl:otherwise>
 | 
						|
    </xsl:choose>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- tr: see table -->
 | 
						|
 | 
						|
  <!-- typedef: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- typename: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- ulist: unordered list -->
 | 
						|
  <xsl:template match="ulist">
 | 
						|
    <ul>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </ul>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- union: -->
 | 
						|
  <!-- IDL stuff isn't handled yet -->
 | 
						|
 | 
						|
  <!-- var: a variable -->
 | 
						|
  <xsl:template match="var">
 | 
						|
    <var>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </var>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- vc: validity check reference in a formal production -->
 | 
						|
  <xsl:template match="vc">
 | 
						|
    <xsl:choose>
 | 
						|
      <xsl:when test="preceding-sibling::*[1][name()='rhs']">
 | 
						|
        <td>
 | 
						|
	  <xsl:if test="@diff and $show.diff.markup='1'">
 | 
						|
	    <xsl:attribute name="class">
 | 
						|
	      <xsl:text>diff-</xsl:text>
 | 
						|
	      <xsl:value-of select="@diff"/>
 | 
						|
	    </xsl:attribute>
 | 
						|
	  </xsl:if>
 | 
						|
          <a>
 | 
						|
            <xsl:attribute name="href">
 | 
						|
              <xsl:call-template name="href.target">
 | 
						|
                <xsl:with-param name="target" select="id(@def)"/>
 | 
						|
              </xsl:call-template>
 | 
						|
            </xsl:attribute>
 | 
						|
            <xsl:text>[VC: </xsl:text>
 | 
						|
            <xsl:apply-templates select="id(@def)/head" mode="text"/>
 | 
						|
            <xsl:text>]</xsl:text>
 | 
						|
          </a>
 | 
						|
        </td>
 | 
						|
      </xsl:when>
 | 
						|
      <xsl:otherwise>
 | 
						|
        <tr valign="baseline">
 | 
						|
          <td/><td/><td/><td/>
 | 
						|
          <td>
 | 
						|
	    <xsl:if test="@diff and $show.diff.markup='1'">
 | 
						|
	      <xsl:attribute name="class">
 | 
						|
		<xsl:text>diff-</xsl:text>
 | 
						|
		<xsl:value-of select="@diff"/>
 | 
						|
	      </xsl:attribute>
 | 
						|
	    </xsl:if>
 | 
						|
            <a>
 | 
						|
              <xsl:attribute name="href">
 | 
						|
                <xsl:call-template name="href.target">
 | 
						|
                  <xsl:with-param name="target" select="id(@def)"/>
 | 
						|
                </xsl:call-template>
 | 
						|
              </xsl:attribute>
 | 
						|
              <xsl:text>[VC: </xsl:text>
 | 
						|
              <xsl:apply-templates select="id(@def)/head" mode="text"/>
 | 
						|
              <xsl:text>]</xsl:text>
 | 
						|
            </a>
 | 
						|
          </td>
 | 
						|
        </tr>
 | 
						|
      </xsl:otherwise>
 | 
						|
    </xsl:choose>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- vcnote: validity check note after a formal production -->
 | 
						|
  <xsl:template match="vcnote">
 | 
						|
    <div class="constraint">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- version: version of this spec -->
 | 
						|
  <!-- called directly from header -->
 | 
						|
 | 
						|
  <!-- w3c-designation: canonical name for this spec -->
 | 
						|
  <!-- not used for formatting -->
 | 
						|
 | 
						|
  <!-- w3c-doctype: type of document the specification is -->
 | 
						|
  <!-- used by header template to select CSS stylesheet for output
 | 
						|
       HTML -->
 | 
						|
 | 
						|
  <!-- wfc: well-formedness check reference in a formal production -->
 | 
						|
  <xsl:template match="wfc">
 | 
						|
    <xsl:choose>
 | 
						|
      <xsl:when test="preceding-sibling::*[1][name()='rhs']">
 | 
						|
        <td>
 | 
						|
	  <xsl:if test="@diff and $show.diff.markup='1'">
 | 
						|
	    <xsl:attribute name="class">
 | 
						|
	      <xsl:text>diff-</xsl:text>
 | 
						|
	      <xsl:value-of select="@diff"/>
 | 
						|
	    </xsl:attribute>
 | 
						|
	  </xsl:if>
 | 
						|
          <a>
 | 
						|
            <xsl:attribute name="href">
 | 
						|
              <xsl:call-template name="href.target">
 | 
						|
                <xsl:with-param name="target" select="id(@def)"/>
 | 
						|
              </xsl:call-template>
 | 
						|
            </xsl:attribute>
 | 
						|
            <xsl:text>[WFC: </xsl:text>
 | 
						|
            <xsl:apply-templates select="id(@def)/head" mode="text"/>
 | 
						|
            <xsl:text>]</xsl:text>
 | 
						|
          </a>
 | 
						|
        </td>
 | 
						|
      </xsl:when>
 | 
						|
      <xsl:otherwise>
 | 
						|
        <tr valign="baseline">
 | 
						|
          <td/><td/><td/><td/>
 | 
						|
          <td>
 | 
						|
	    <xsl:if test="@diff and $show.diff.markup='1'">
 | 
						|
	      <xsl:attribute name="class">
 | 
						|
		<xsl:text>diff-</xsl:text>
 | 
						|
		<xsl:value-of select="@diff"/>
 | 
						|
	      </xsl:attribute>
 | 
						|
	    </xsl:if>
 | 
						|
            <a>
 | 
						|
              <xsl:attribute name="href">
 | 
						|
                <xsl:call-template name="href.target">
 | 
						|
                  <xsl:with-param name="target" select="id(@def)"/>
 | 
						|
                </xsl:call-template>
 | 
						|
              </xsl:attribute>
 | 
						|
              <xsl:text>[WFC: </xsl:text>
 | 
						|
              <xsl:apply-templates select="id(@def)/head" mode="text"/>
 | 
						|
              <xsl:text>]</xsl:text>
 | 
						|
            </a>
 | 
						|
          </td>
 | 
						|
        </tr>
 | 
						|
      </xsl:otherwise>
 | 
						|
    </xsl:choose>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- wfcnote: well-formedness check note after formal production -->
 | 
						|
  <xsl:template match="wfcnote">
 | 
						|
    <div class="constraint">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </div>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- xnt: external non-terminal -->
 | 
						|
  <!-- xspecref: external specification reference -->
 | 
						|
  <!-- xtermref: external term reference -->
 | 
						|
  <!-- just link to URI provided -->
 | 
						|
  <xsl:template match="xnt | xspecref | xtermref">
 | 
						|
    <a href="{@href}">
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </a>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- year: year of spec -->
 | 
						|
  <!-- only used in pudate; called directly from header template -->
 | 
						|
 | 
						|
  <!-- Silly HTML elements used for pasting stuff in; shouldn't ever
 | 
						|
       show up in a spec, but they're easy to handle and you just
 | 
						|
       never know. -->
 | 
						|
  <xsl:template match="a|div|em|h1|h2|h3|h4|h5|h6|li|ol|pre|ul">
 | 
						|
    <xsl:copy>
 | 
						|
      <xsl:for-each select="@*">
 | 
						|
        <xsl:copy>
 | 
						|
          <xsl:apply-templates/>
 | 
						|
        </xsl:copy>
 | 
						|
      </xsl:for-each>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </xsl:copy>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- legacy XML spec stuff -->
 | 
						|
  <xsl:template match="htable">
 | 
						|
    <table summary="HTML Table">
 | 
						|
      <xsl:for-each select="@*">
 | 
						|
        <xsl:copy>
 | 
						|
          <xsl:apply-templates/>
 | 
						|
        </xsl:copy>
 | 
						|
      </xsl:for-each>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </table>
 | 
						|
  </xsl:template>
 | 
						|
  <xsl:template match="htbody">
 | 
						|
    <tbody>
 | 
						|
      <xsl:for-each select="@*">
 | 
						|
        <xsl:copy>
 | 
						|
          <xsl:apply-templates/>
 | 
						|
        </xsl:copy>
 | 
						|
      </xsl:for-each>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </tbody>
 | 
						|
  </xsl:template>
 | 
						|
  <xsl:template match="key-term">
 | 
						|
    <b><xsl:apply-templates/></b>
 | 
						|
  </xsl:template>
 | 
						|
  <xsl:template match="statusp">
 | 
						|
    <p>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </p>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- legacy DocBook stuff -->
 | 
						|
  <xsl:template match="itemizedlist">
 | 
						|
    <ul>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </ul>
 | 
						|
  </xsl:template>
 | 
						|
  <xsl:template match="listitem">
 | 
						|
    <li>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </li>
 | 
						|
  </xsl:template>
 | 
						|
  <xsl:template match="orderedlist">
 | 
						|
    <ol>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </ol>
 | 
						|
  </xsl:template>
 | 
						|
  <xsl:template match="para">
 | 
						|
    <p>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </p>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- mode: divnum -->
 | 
						|
  <xsl:template mode="divnum" match="div1">
 | 
						|
    <xsl:number format="1 "/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="divnum" match="back/div1 | inform-div1">
 | 
						|
    <xsl:number count="div1 | inform-div1" format="A "/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="divnum"
 | 
						|
    match="front/div1 | front//div2 | front//div3 | front//div4 | front//div5"/>
 | 
						|
 | 
						|
  <xsl:template mode="divnum" match="div2">
 | 
						|
    <xsl:number level="multiple" count="div1 | div2" format="1.1 "/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="divnum" match="back//div2">
 | 
						|
    <xsl:number level="multiple" count="div1 | div2 | inform-div1"
 | 
						|
      format="A.1 "/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="divnum" match="div3">
 | 
						|
    <xsl:number level="multiple" count="div1 | div2 | div3"
 | 
						|
      format="1.1.1 "/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="divnum" match="back//div3">
 | 
						|
    <xsl:number level="multiple"
 | 
						|
      count="div1 | div2 | div3 | inform-div1" format="A.1.1 "/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="divnum" match="div4">
 | 
						|
    <xsl:number level="multiple" count="div1 | div2 | div3 | div4"
 | 
						|
      format="1.1.1.1 "/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="divnum" match="back//div4">
 | 
						|
    <xsl:number level="multiple"
 | 
						|
      count="div1 | div2 | div3 | div4 | inform-div1"
 | 
						|
      format="A.1.1.1 "/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="divnum" match="div5">
 | 
						|
    <xsl:number level="multiple"
 | 
						|
      count="div1 | div2 | div3 | div4 | div5" format="1.1.1.1.1 "/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="divnum" match="back//div5">
 | 
						|
    <xsl:number level="multiple"
 | 
						|
      count="div1 | div2 | div3 | div4 | div5 | inform-div1"
 | 
						|
      format="A.1.1.1.1 "/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- mode: notes -->
 | 
						|
  <xsl:template mode="notes" match="footnote">
 | 
						|
    <xsl:variable name="this-note-id">
 | 
						|
      <xsl:choose>
 | 
						|
        <xsl:when test="@id">
 | 
						|
          <xsl:value-of select="@id"/>
 | 
						|
        </xsl:when>
 | 
						|
        <xsl:otherwise>
 | 
						|
          <xsl:value-of select="generate-id(.)"/>
 | 
						|
        </xsl:otherwise>
 | 
						|
      </xsl:choose>
 | 
						|
    </xsl:variable>
 | 
						|
    <dt>
 | 
						|
      <a name="{$this-note-id}" href="#FN-ANCH-{$this-note-id}">
 | 
						|
        <xsl:number level="any" format="[1]"/>
 | 
						|
      </a>
 | 
						|
    </dt>
 | 
						|
    <dd>
 | 
						|
      <xsl:apply-templates/>
 | 
						|
    </dd>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- mode: number -->
 | 
						|
  <xsl:template mode="number" match="prod">
 | 
						|
    <xsl:text>[</xsl:text>
 | 
						|
    <xsl:apply-templates select="." mode="number-simple"/>
 | 
						|
    <xsl:text>]</xsl:text>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="number" match="prod[@diff='add']">
 | 
						|
    <xsl:text>[</xsl:text>
 | 
						|
    <xsl:apply-templates select="preceding::prod[not(@diff='add')][1]"
 | 
						|
      mode="number-simple"/>
 | 
						|
<!--
 | 
						|
  Once again, this could be done right here, but XT won't hear of it.
 | 
						|
    <xsl:number level="any" count="prod[not(@diff='add')]"/>
 | 
						|
  -->
 | 
						|
    <xsl:number level="any" count="prod[@diff='add']"
 | 
						|
      from="prod[not(@diff='add')]" format="a"/>
 | 
						|
    <xsl:text>]</xsl:text>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- mode: number-simple -->
 | 
						|
  <xsl:template mode="number-simple" match="prod">
 | 
						|
    <xsl:number level="any" count="prod[not(@diff='add')]"/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- mode: ref -->
 | 
						|
  <xsl:template match="lhs" mode="ref">
 | 
						|
    <tr valign="baseline">
 | 
						|
      <td/>
 | 
						|
      <td>
 | 
						|
	<xsl:if test="ancestor-or-self::*/@diff and $show.diff.markup='1'">
 | 
						|
	  <xsl:attribute name="class">
 | 
						|
	    <xsl:text>diff-</xsl:text>
 | 
						|
	    <xsl:value-of select="ancestor-or-self::*/@diff"/>
 | 
						|
	  </xsl:attribute>
 | 
						|
	</xsl:if>
 | 
						|
	<xsl:if test="../@id">
 | 
						|
	  <a name="{../@id}"/>
 | 
						|
	</xsl:if>
 | 
						|
	<code><xsl:apply-templates/></code>
 | 
						|
      </td>
 | 
						|
      <td>
 | 
						|
	<xsl:if test="ancestor-or-self::*/@diff and $show.diff.markup='1'">
 | 
						|
	  <xsl:attribute name="class">
 | 
						|
	    <xsl:text>diff-</xsl:text>
 | 
						|
	    <xsl:value-of select="ancestor-or-self::*/@diff"/>
 | 
						|
	  </xsl:attribute>
 | 
						|
	</xsl:if>
 | 
						|
        <xsl:text>   ::=   </xsl:text>
 | 
						|
      </td>
 | 
						|
      <xsl:apply-templates
 | 
						|
        select="following-sibling::*[1][name()='rhs']"/>
 | 
						|
    </tr>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="ref" match="prod">
 | 
						|
    <xsl:apply-templates select="lhs" mode="ref"/>
 | 
						|
    <xsl:apply-templates
 | 
						|
      select="rhs[preceding-sibling::*[1][name()!='lhs']] |
 | 
						|
              com[preceding-sibling::*[1][name()!='rhs']] |
 | 
						|
              constraint[preceding-sibling::*[1][name()!='rhs']] |
 | 
						|
              vc[preceding-sibling::*[1][name()!='rhs']] |
 | 
						|
              wfc[preceding-sibling::*[1][name()!='rhs']]"/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <!-- mode: text -->
 | 
						|
  <!-- most stuff processes just as text here, but some things should
 | 
						|
       be hidden -->
 | 
						|
  <xsl:template mode="text" match="ednote | footnote"/>
 | 
						|
 | 
						|
  <!-- mode: toc -->
 | 
						|
  <xsl:template mode="toc" match="div1">
 | 
						|
    <xsl:apply-templates select="." mode="divnum"/>
 | 
						|
    <a>
 | 
						|
      <xsl:attribute name="href">
 | 
						|
        <xsl:call-template name="href.target">
 | 
						|
          <xsl:with-param name="target" select="."/>
 | 
						|
        </xsl:call-template>
 | 
						|
      </xsl:attribute>
 | 
						|
      <xsl:apply-templates select="head" mode="text"/>
 | 
						|
    </a>
 | 
						|
    <br/>
 | 
						|
    <xsl:apply-templates select="div2" mode="toc"/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="toc" match="div2">
 | 
						|
    <xsl:text>    </xsl:text>
 | 
						|
    <xsl:apply-templates select="." mode="divnum"/>
 | 
						|
    <a>
 | 
						|
      <xsl:attribute name="href">
 | 
						|
        <xsl:call-template name="href.target">
 | 
						|
          <xsl:with-param name="target" select="."/>
 | 
						|
        </xsl:call-template>
 | 
						|
      </xsl:attribute>
 | 
						|
      <xsl:apply-templates select="head" mode="text"/>
 | 
						|
    </a>
 | 
						|
    <br/>
 | 
						|
    <xsl:apply-templates select="div3" mode="toc"/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="toc" match="div3">
 | 
						|
    <xsl:text>        </xsl:text>
 | 
						|
    <xsl:apply-templates select="." mode="divnum"/>
 | 
						|
    <a>
 | 
						|
      <xsl:attribute name="href">
 | 
						|
        <xsl:call-template name="href.target">
 | 
						|
          <xsl:with-param name="target" select="."/>
 | 
						|
        </xsl:call-template>
 | 
						|
      </xsl:attribute>
 | 
						|
      <xsl:apply-templates select="head" mode="text"/>
 | 
						|
    </a>
 | 
						|
    <br/>
 | 
						|
    <xsl:apply-templates select="div4" mode="toc"/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="toc" match="div4">
 | 
						|
    <xsl:text>            </xsl:text>
 | 
						|
    <xsl:apply-templates select="." mode="divnum"/>
 | 
						|
    <a>
 | 
						|
      <xsl:attribute name="href">
 | 
						|
        <xsl:call-template name="href.target">
 | 
						|
          <xsl:with-param name="target" select="."/>
 | 
						|
        </xsl:call-template>
 | 
						|
      </xsl:attribute>
 | 
						|
      <xsl:apply-templates select="head" mode="text"/>
 | 
						|
    </a>
 | 
						|
    <br/>
 | 
						|
    <xsl:apply-templates select="div5" mode="toc"/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="toc" match="div5">
 | 
						|
    <xsl:text>                </xsl:text>
 | 
						|
    <xsl:apply-templates select="." mode="divnum"/>
 | 
						|
    <a>
 | 
						|
      <xsl:attribute name="href">
 | 
						|
        <xsl:call-template name="href.target">
 | 
						|
          <xsl:with-param name="target" select="."/>
 | 
						|
        </xsl:call-template>
 | 
						|
      </xsl:attribute>
 | 
						|
      <xsl:apply-templates select="head" mode="text"/>
 | 
						|
    </a>
 | 
						|
    <br/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template mode="toc" match="inform-div1">
 | 
						|
    <xsl:apply-templates select="." mode="divnum"/>
 | 
						|
    <a>
 | 
						|
      <xsl:attribute name="href">
 | 
						|
        <xsl:call-template name="href.target">
 | 
						|
          <xsl:with-param name="target" select="."/>
 | 
						|
        </xsl:call-template>
 | 
						|
      </xsl:attribute>
 | 
						|
      <xsl:apply-templates select="head" mode="text"/>
 | 
						|
    </a>
 | 
						|
    <xsl:text> (Non-Normative)</xsl:text>
 | 
						|
    <br/>
 | 
						|
    <xsl:apply-templates select="div2" mode="toc"/>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template name="css">
 | 
						|
    <style type="text/css">
 | 
						|
      <xsl:text>
 | 
						|
code           { font-family: monospace; }
 | 
						|
 | 
						|
div.constraint,
 | 
						|
div.issue,
 | 
						|
div.note,
 | 
						|
div.notice     { margin-left: 2em; }
 | 
						|
 | 
						|
dt.label       { display: run-in; }
 | 
						|
 | 
						|
li p           { margin-top: 0.3em;
 | 
						|
                 margin-bottom: 0.3em; }
 | 
						|
      </xsl:text>
 | 
						|
      <xsl:value-of select="$additional.css"/>
 | 
						|
    </style>
 | 
						|
    <link rel="stylesheet" type="text/css">
 | 
						|
      <xsl:attribute name="href">
 | 
						|
        <xsl:text>W3C-</xsl:text>
 | 
						|
        <xsl:choose>
 | 
						|
          <xsl:when test="/spec/@w3c-doctype='wd'">WD</xsl:when>
 | 
						|
          <xsl:when test="/spec/@w3c-doctype='rec'">REC</xsl:when>
 | 
						|
          <xsl:when test="/spec/@w3c-doctype='pr'">REC</xsl:when>
 | 
						|
          <xsl:when test="/spec/@w3c-doctype='cr'">REC</xsl:when>
 | 
						|
          <xsl:otherwise>NOTE</xsl:otherwise>
 | 
						|
        </xsl:choose>
 | 
						|
        <xsl:text>.css</xsl:text>
 | 
						|
      </xsl:attribute>
 | 
						|
    </link>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
  <xsl:template name="href.target">
 | 
						|
    <xsl:param name="target" select="."/>
 | 
						|
 | 
						|
    <xsl:text>#</xsl:text>
 | 
						|
 | 
						|
    <xsl:choose>
 | 
						|
      <xsl:when test="$target/@id">
 | 
						|
        <xsl:value-of select="$target/@id"/>
 | 
						|
      </xsl:when>
 | 
						|
      <xsl:otherwise>
 | 
						|
        <xsl:value-of select="generate-id($target)"/>
 | 
						|
      </xsl:otherwise>
 | 
						|
    </xsl:choose>
 | 
						|
  </xsl:template>
 | 
						|
 | 
						|
</xsl:transform>
 |