Home | History | Annotate | Download | only in rfc
      1 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      2                 version="1.0"
      3                 
      4                 xmlns:msxsl="urn:schemas-microsoft-com:xslt"
      5                 xmlns:exslt="http://exslt.org/common"
      6                 xmlns:myns="mailto:julian.reschke (a] greenbytes.de?subject=rcf2629.xslt"
      7                 xmlns:ed="http://greenbytes.de/2002/rfcedit"
      8 
      9                 exclude-result-prefixes="msxsl exslt myns ed"
     10                 >
     11 <!--
     12     XSLT transformation from RFC2629 XML format to HTML
     13 
     14     Copyright (c) 2001-2004 Julian F. Reschke (julian.reschke (a] greenbytes.de)
     15 
     16     placed into the public domain
     17 
     18     change history:
     19 
     20     2001-03-28  julian.reschke (a] greenbytes.de
     21 
     22     Code rearranged, generate numbered section anchors for paragraphs (t)
     23     as well. Fixes in index handling.
     24 
     25     2001-04-12  julian.reschke (a] greenbytes.de
     26 
     27     Moved HTML output into XHTML namespace.
     28 
     29     2001-10-02  julian.reschke (a] greenbytes.de
     30 
     31     Fixed default location for RFCs and numbering of section references.
     32     Support ?rfc editing processing instruction.
     33 
     34     2001-10-07  julian.reschke (a] greenbytes.de
     35 
     36     Made telephone number links active.
     37 
     38     2001-10-08  julian.reschke (a] greenbytes.de
     39 
     40     Support for vspace element.
     41 
     42     2001-10-09  julian.reschke (a] greenbytes.de
     43 
     44     Experimental support for rfc-issue PI.
     45 
     46     2001-11-11  julian.reschke (a] greenbytes.de
     47 
     48     Support rfc private PI. Removed bogus code reporting the WG in the header.
     49 
     50     2001-12-17  julian.reschke (a] greenbytes.de
     51 
     52     Support title attribute on references element
     53 
     54     2002-01-05  julian.reschke (a] greenbytes.de
     55 
     56     Support for list/@style="@format"
     57 
     58     2002-01-09  julian.reschke (a] greenbytes.de
     59 
     60     Display "closed" RFC issues as deleted
     61 
     62     2002-01-14  julian.reschke (a] greenbytes.de
     63 
     64     Experimentally and optionally parse XML encountered in artwork elements
     65     (requires MSXSL).
     66 
     67     2002-01-27  julian.reschke (a] greenbytes.de
     68 
     69     Some cleanup. Moved RFC issues from PIs into namespaced elements.
     70 
     71     2002-01-29  julian.reschke (a] greenbytes.de
     72 
     73     Added support for sortrefs PI. Added support for figure names.
     74 
     75     2002-02-07  julian.reschke (a] greenbytes.de
     76 
     77     Highlight parts of artwork which are too wide (72 characters).
     78 
     79     2002-02-12  julian.reschke (a] greenbytes.de
     80 
     81     Code rearrangement for static texts. Fixes for section numbering.
     82     TOC generation rewritten.
     83 
     84     2002-02-15  julian.reschke (a] greenbytes.de
     85 
     86     Support for irefs in sections; support iref @primary=true
     87 
     88     2002-03-03  julian.reschke (a] greenbytes.de
     89 
     90     Moved anchor prefix into a constant. Added sanity checks on user anchor
     91     names.
     92 
     93     2002-03-23  julian.reschke (a] greenbytes.de
     94 
     95     Bugfix in detection of matching org names when creating the header. Fixed
     96     sorting in subitems.
     97 
     98     2002-04-02  julian.reschke (a] greenbytes.de
     99 
    100     Fix TOC link HTML generation when no TOC is generated (created broken
    101     HTML table code).
    102 
    103     2002-04-03  julian.reschke (a] greenbytes.de
    104 
    105     Made rendering of references more tolerant re: missing parts.
    106 
    107     2002-04-08  julian.reschke (a] greenbytes.de
    108 
    109     Fixed reference numbering when references are split into separate sections.
    110 
    111     2002-04-16  julian.reschke (a] greenbytes.de
    112 
    113     Fix default namespace (shouldn't be set for HTML output method).
    114 
    115     2002-04-19  julian.reschke (a] greenbytes.de
    116 
    117     Lowercase internal CSS selectors for Mozilla compliance. Do not put TOC
    118     into ul element.
    119 
    120     2002-04-21  julian.reschke (a] greenbytes.de
    121 
    122     Make numbered list inside numbered lists use alphanumeric numbering.
    123 
    124     2002-05-05  julian.reschke (a] greenbytes.de
    125 
    126     Updated issue/editing support.
    127 
    128     2002-05-15  julian.reschke (a] greenbytes.de
    129 
    130     Bugfix for section numbering after introduction of ed:replace
    131 
    132     2002-06-21  julian.reschke (a] greenbytes.de
    133 
    134     When producing private documents, do not include document status, copyright etc.
    135 
    136     2002-07-08  julian.reschke (a] greenbytes.de
    137 
    138     Fix xrefs to Appendices.
    139 
    140     2002-07-19  fielding
    141 
    142     Make artwork lightyellow for easier reading.
    143 
    144     2002-10-09  fielding
    145 
    146     Translate references title to anchor name to avoid non-uri characters.
    147     
    148     2002-10-13  julian.reschke (a] greenbytes.de
    149     
    150     Support for tocdepth PI.
    151 
    152     2002-11-03  julian.reschke (a] greenbytes.de
    153     
    154     Added temporariry workaround for Mozilla/Transformiix result tree fragment problem.
    155     (search for 'http://bugzilla.mozilla.org/show_bug.cgi?id=143668')
    156     
    157     2002-12-25  julian.reschke (a] greenbytes.de
    158     
    159     xref code: attempt to uppercase "section" and "appendix" when at the start
    160     of a sentence.
    161     
    162     2003-02-02  julian.reschke (a] greenbytes.de
    163     
    164     fixed code for vspace blankLines="0", enhanced display for list with "format" style,
    165     got rid of HTML blockquote elements, added support for "hangIndent"
    166     
    167     2003-04-10  julian.reschke (a] greenbytes.de
    168     
    169     experimental support for appendix and spanx elements
    170     
    171     2003-04-19  julian.reschke (a] greenbytes.de
    172     
    173     fixed counting of list numbers in "format %" styles (one counter
    174     per unique format string). Added more spanx styles.
    175 
    176     2003-05-02  julian.reschke (a] greenbytes.de
    177     
    178     experimental texttable support
    179     
    180     2003-05-02  fielding 
    181     
    182     Make mailto links optional (default = none) (jre: default and PI name changed)
    183 
    184     2003-05-04  julian.rechke (a] greenbytes.de
    185     
    186     experimental support for HTML link elements; fix default for table header
    187     alignment default
    188 
    189     2003-05-06  julian.rechke (a] greenbytes.de
    190     
    191     support for "background" PI.
    192     
    193     2003-05-11  julian.reschke (a] greenbytes.de
    194     
    195     change %c format to lowercase alphabetic. add support for keyword
    196     elements (generate META tag). fix various HTML conformance problems.
    197     added experimental support for role attribute. do not number paragraphs
    198     in unnumbered sections. update boilerplate texts. support for
    199     "iprnotified" PI. bugfix list numbering. strip whitespace when
    200     building tel: URIs.
    201     
    202     2003-05-12  julian.reschke (a] greenbytes.de
    203   
    204     more conformance fixes (layout moved into CSS, move lists and figures
    205     out of para content, do not use tables for list formatting)
    206     
    207     2003-05-13  julian.reschke (a] greenbytes.de
    208   
    209     add DC.Creator meta tag, refactoring
    210 
    211     2003-05-16  julian.reschke (a] greenbytes.de
    212   
    213     put nbsps between "section" and section number (xref).
    214 
    215     2003-05-18  julian.reschke (a] greenbytes.de
    216   
    217     author summary: add missing comma.
    218     
    219     2003-06-06  julian.reschke (a] greenbytes.de
    220     
    221     fix index generation bug (transposed characters in key generation). Enhance
    222     sentence start detection (xref starting a section was using lowercase
    223     "section").
    224     
    225     2003-06-22  julian.reschke (a] greenbytes.de
    226     
    227     exp. support for xref/@format. Add missing support for eref w/o content.
    228     exp. support for annotations in reference elements. Code cleanup
    229     reference table formatting.
    230     
    231     2003-07-09  julian.reschke (a] greenbytes.de
    232     
    233     Another fix for DC.Creator meta tag creation based on RFC2731
    234 
    235     2003-07-24  julian.reschke (a] greenbytes.de
    236     
    237     Fix namespace name for DC.Creator.
    238     
    239     2003-08-06  julian.reschke (a] greenbytes.de
    240     
    241     Cleanup node-set support (only use exslt (saxon, xalan, libxslt) extension
    242     functions; remove Transformix workarounds that stopped to work in Moz 1.4)
    243 
    244     2003-08-09  julian.reschke (a] greenbytes.de
    245     
    246     Generate HTML lang tag.
    247     
    248     2003-08-10  julian.reschke (a] greenbytes.de
    249     
    250     Map spanx/verb to HTML "samp" element. Fix author name display in
    251     references (reverse surname/initials for last author), add "Ed.".
    252     Fix internal bookmark generation.
    253     
    254     2003-08-17  julian.reschke (a] greenbytes.de
    255     
    256     Add DCMI dates, identifiers and abstract. Add PI to suppress DCMI
    257     generation.  Do not add TOC entry to Copyright Statement when there is
    258     none. Align RFC2629 PI names and parameter names. Change style for
    259     inline URIs generated by eref. Add header and footer support.
    260     Enhance CSS paging properties. Support topblock PI. Added hooks for
    261     proper XHTML generation through separate XSLT. Enhance warning and
    262     error messages. Add support for artwork image display. Table formatting
    263     fixes (borders, thead continuation).
    264 
    265     2003-08-18  julian.reschke (a] greenbytes.de
    266     
    267     Add workaround for MSXML4 node-set and Mozilla node-set issues (fallback
    268     just displays are warning).
    269     
    270     2003-10-06  julian.reschke (a] greenbytes.de
    271     
    272     Add workaround for broken pre/ins handling in Mozilla
    273     (see <http://bugzilla.mozilla.org/show_bug.cgi?id=204401>). Make use
    274     of cite attribute on ed:replace. CSS cleanup.
    275     
    276     2003-10-08  julian.reschke (a] greenbytes.de
    277     
    278     Fix minor issue detecting the same org for the header (caused by IE's
    279     non-standard whitespace handling). Fix default handling for /rfc/@category.
    280     
    281     2003-11-09  julian.reschke (a] greenbytes.de
    282     
    283     Inherit ed:entered-by from ancestor elements. Change CSS color for inserted
    284     text to green. Generate issues-list anchor. Do not complain about missing
    285     targets when the xref element is below ed:del. Remove code that attempted
    286     to distinguish section/Section when producing links - always use
    287     uppercase. Fix date rendering for issue resolutions.
    288 
    289     2003-11-29  julian.reschke (a] greenbytes.de
    290     
    291     Fix color values for table backgrounds for issue rendering. Change
    292     rendering of issue links to use inline-styles. Add colored issue markers to
    293     issues. 
    294 
    295     2003-12-13  julian.reschke (a] greenbytes.de
    296     
    297     Fix inheritance of ed:entered-by attribute. Display note elements inside
    298     change tracking as well.
    299     
    300     2004-01-18  julian.reschke (a] greenbytes.de
    301     
    302     When PI compact = 'yes', make most CSS print page breaks conditional.
    303 
    304     2004-02-20  julian.reschke (a] greenbytes.de
    305     
    306     Support for RFC3667 IPR changes (xml2rfc 1.22); see
    307     <http://lists.xml.resource.org/pipermail/xml2rfc/2004-February/001088.html>.
    308     
    309     2004-03-11  julian.reschke (a] greenbytes.de
    310     
    311     Add "(if approved)" to "updates" and "obsoletes" unless the document has
    312     an RFC number.
    313     
    314     2004-04-01  julian.reschke (a] greenbytes.de
    315     
    316     Fix RFC3667 output, see <http://lists.xml.resource.org/pipermail/xml2rfc/2004-April/001208.html>
    317 -->
    318 
    319 
    320 <xsl:output method="html" encoding="iso-8859-1" version="4.0" doctype-public="-//W3C//DTD HTML 4.01//EN" />
    321 
    322 
    323 <!-- process some of the processing instructions supported by Marshall T. Rose's
    324      xml2rfc sofware, see <http://xml.resource.org/> -->
    325 
    326 
    327 <!-- rfc compact PI -->
    328 
    329 <xsl:param name="xml2rfc-compact"
    330   select="substring-after(
    331       translate(/processing-instruction('rfc')[contains(.,'compact=')], '&quot; ', ''),
    332         'compact=')"
    333 />
    334 
    335 <!-- rfc footer PI -->
    336 
    337 <xsl:param name="xml2rfc-footer"
    338   select="substring-after(
    339       translate(/processing-instruction('rfc')[contains(.,'footer=')], '&quot; ', ''),
    340         'footer=')"
    341 />
    342 
    343 <!-- rfc header PI -->
    344 
    345 <xsl:param name="xml2rfc-header"
    346   select="substring-after(
    347       translate(/processing-instruction('rfc')[contains(.,'header=')], '&quot; ', ''),
    348         'header=')"
    349 />
    350 
    351 <!-- include a table of contents if a processing instruction <?rfc?>
    352      exists with contents toc="yes". Can be overriden by an XSLT parameter -->
    353 
    354 <xsl:param name="xml2rfc-toc"
    355   select="substring-after(
    356       translate(/processing-instruction('rfc')[contains(.,'toc=')], '&quot; ', ''),
    357         'toc=')"
    358 />
    359 
    360 <!-- optional tocdepth-->
    361 
    362 <xsl:param name="xml2rfc-tocdepth"
    363   select="substring-after(
    364       translate(/processing-instruction('rfc')[contains(.,'tocdepth=')], '&quot; ', ''),
    365         'tocdepth=')"
    366 />
    367 
    368 <xsl:variable name="parsedTocDepth">
    369   <xsl:choose>
    370     <xsl:when test="$xml2rfc-tocdepth='1'">1</xsl:when>
    371     <xsl:when test="$xml2rfc-tocdepth='2'">2</xsl:when>
    372     <xsl:when test="$xml2rfc-tocdepth='3'">3</xsl:when>
    373     <xsl:when test="$xml2rfc-tocdepth='4'">4</xsl:when>
    374     <xsl:when test="$xml2rfc-tocdepth='5'">5</xsl:when>
    375     <xsl:otherwise>99</xsl:otherwise>
    376   </xsl:choose>
    377 </xsl:variable>
    378 
    379 <!-- suppress top block if a processing instruction <?rfc?>
    380      exists with contents tocblock="no". Can be overriden by an XSLT parameter -->
    381 
    382 <xsl:param name="xml2rfc-topblock"
    383   select="substring-after(
    384       translate(/processing-instruction('rfc')[contains(.,'topblock=')], '&quot; ', ''),
    385         'topblock=')"
    386 />
    387 
    388 <!-- use symbolic reference names instead of numeric ones if a processing instruction <?rfc?>
    389      exists with contents symrefs="yes". Can be overriden by an XSLT parameter -->
    390 
    391 <xsl:param name="xml2rfc-symrefs"
    392   select="substring-after(
    393       translate(/processing-instruction('rfc')[contains(.,'symrefs=')], '&quot; ', ''),
    394         'symrefs=')"
    395 />
    396 
    397 <!-- sort references if a processing instruction <?rfc?>
    398      exists with contents sortrefs="yes". Can be overriden by an XSLT parameter -->
    399 
    400 <xsl:param name="xml2rfc-sortrefs"
    401   select="substring-after(
    402       translate(/processing-instruction('rfc')[contains(.,'sortrefs=')], '&quot; ', ''),
    403         'sortrefs=')"
    404 />
    405 
    406 <!-- insert editing marks if a processing instruction <?rfc?>
    407      exists with contents editing="yes". Can be overriden by an XSLT parameter -->
    408 
    409 <xsl:param name="xml2rfc-editing"
    410   select="substring-after(
    411       translate(/processing-instruction('rfc')[contains(.,'editing=')], '&quot; ', ''),
    412         'editing=')"
    413 />
    414 
    415 <!-- make it a private paper -->
    416 
    417 <xsl:param name="xml2rfc-private"
    418   select="substring-after(
    419       translate(/processing-instruction('rfc')[contains(.,'private=')], '&quot;', ''),
    420         'private=')"
    421 />
    422 
    423 <!-- background image? -->
    424 
    425 <xsl:param name="xml2rfc-background"
    426   select="substring-after(
    427       translate(/processing-instruction('rfc')[contains(.,'background=')], '&quot;', ''),
    428         'background=')"
    429 />
    430 
    431 <!-- extension for XML parsing in artwork -->
    432 
    433 <xsl:param name="parse-xml-in-artwork"
    434   select="substring-after(
    435       translate(/processing-instruction('rfc-ext')[contains(.,'parse-xml-in-artwork=')], '&quot; ', ''),
    436         'parse-xml-in-artwork=')"
    437 />
    438 
    439 <!-- extension for exclusing DCMI properties in meta tag (RFC2731) -->
    440 
    441 <xsl:param name="xml2rfc-ext-support-rfc2731"
    442   select="substring-after(
    443       translate(/processing-instruction('rfc-ext')[contains(.,'support-rfc2731=')], '&quot; ', ''),
    444         'support-rfc2731=')"
    445 />
    446 
    447 <!-- choose whether or not to do mailto links --> 
    448   
    449  <xsl:param name="xml2rfc-linkmailto" 
    450    select="substring-after( 
    451        translate(/processing-instruction('rfc')[contains(.,'linkmailto=')], '&quot;', ''), 
    452          'linkmailto=')" 
    453  /> 
    454 
    455 
    456 <!-- iprnotified switch --> 
    457   
    458  <xsl:param name="xml2rfc-iprnotified" 
    459    select="substring-after( 
    460        translate(/processing-instruction('rfc')[contains(.,'iprnotified=')], '&quot;', ''), 
    461          'iprnotified=')" 
    462  /> 
    463 
    464 
    465 <!-- URL prefix for RFCs. -->
    466 
    467 <xsl:param name="rfcUrlPrefix" select="'http://www.ietf.org/rfc/rfc'" />
    468 
    469 <!-- warning re: absent node-set ext. function -->
    470 <xsl:variable name="node-set-warning">
    471   This stylesheet requires either an XSLT-1.0 processor with node-set()
    472   extension function, or an XSLT-2.0 processor. Therefore, parts of the
    473   document couldn't be displayed.
    474 </xsl:variable>
    475 
    476 <!-- build help keys for indices -->
    477 <xsl:key name="index-first-letter"
    478   match="iref"
    479     use="translate(substring(@item,1,1),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')" />
    480 
    481 <xsl:key name="index-item"
    482   match="iref"
    483     use="@item" />
    484 
    485 <xsl:key name="index-item-subitem"
    486   match="iref"
    487     use="concat(@item,'..',@subitem)" />
    488 
    489 <!-- character translation tables -->
    490 <xsl:variable name="lcase" select="'abcdefghijklmnopqrstuvwxyz'" />
    491 <xsl:variable name="ucase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />       
    492 
    493 <xsl:variable name="plain" select="' #/ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
    494 <xsl:variable name="touri" select="'___abcdefghijklmnopqrstuvwxyz'" />
    495 
    496 <!-- prefix for automatically generated anchors -->
    497 <xsl:variable name="anchor-prefix" select="'rfc'" />
    498 
    499 <!-- IPR version switch -->
    500 <xsl:variable name="ipr-rfc3667" select="(/rfc/@number &gt; 3708) or not((/rfc/@ipr = 'full2026') or 
    501   (/rfc/@ipr = 'noDerivativeWorks2026') or (/rfc/@ipr = 'noDerivativeWorksNow') or (/rfc/@ipr = 'none'))" />
    502 
    503           
    504 <!-- Templates for the various elements of rfc2629.dtd -->
    505               
    506 <xsl:template match="abstract">
    507   <h1><a name="{$anchor-prefix}.abstract"/>Abstract</h1>
    508   <xsl:apply-templates />
    509 </xsl:template>
    510 
    511 <msxsl:script language="JScript" implements-prefix="myns">
    512   function parseXml(str) {
    513     var doc = new ActiveXObject ("MSXML2.DOMDocument");
    514     doc.async = false;
    515     if (doc.loadXML (str)) return "";
    516     return doc.parseError.reason + "\n" + doc.parseError.srcText + " (" + doc.parseError.line + "/" + doc.parseError.linepos + ")";
    517   }
    518 </msxsl:script>
    519 
    520 <xsl:template match="artwork">
    521   <xsl:if test="not(ancestor::ed:del) and $parse-xml-in-artwork='yes' and function-available('myns:parseXml')">
    522     <xsl:if test="contains(.,'&lt;?xml')">
    523       <xsl:variable name="body" select="substring-after(substring-after(.,'&lt;?xml'),'?>')" /> 
    524       <xsl:if test="$body!='' and myns:parseXml($body)!=''">
    525         <table style="background-color: red; border-width: thin; border-style: solid; border-color: black;">
    526         <tr><td>
    527         XML PARSE ERROR:
    528         <pre><xsl:value-of select="myns:parseXml($body)" /></pre>
    529         </td></tr></table>
    530       </xsl:if>
    531     </xsl:if>
    532     <xsl:if test="@ed:parse-xml-after">
    533       <xsl:if test="myns:parseXml(string(.))!=''">
    534         <table style="background-color: red; border-width: thin; border-style: solid; border-color: black;">
    535         <tr><td>
    536         XML PARSE ERROR:
    537         <pre><xsl:value-of select="myns:parseXml(string(.))" /></pre>
    538         </td></tr></table>
    539       </xsl:if>
    540     </xsl:if>
    541   </xsl:if>
    542   <pre>
    543     <xsl:call-template name="insertInsDelClass" />
    544     <!--<xsl:value-of select="." />--><xsl:call-template name="showArtwork">
    545     <xsl:with-param name="mode" select="'html'" />
    546     <xsl:with-param name="text" select="." />
    547     <xsl:with-param name="initial" select="'yes'" />
    548   </xsl:call-template></pre>
    549 </xsl:template>
    550 
    551 <xsl:template match="artwork[@src and starts-with(@type,'image/')]">
    552   <img src="{@src}" alt="{.}">
    553     <xsl:copy-of select="@width|@height"/>
    554   </img>
    555 </xsl:template>
    556 
    557 <xsl:template match="author">
    558   <tr>
    559     <td>&#0160;</td>
    560     <td>
    561       <xsl:value-of select="@fullname" />
    562       <xsl:if test="@role">
    563         (<xsl:value-of select="@role" />)
    564       </xsl:if>
    565     </td>
    566   </tr>
    567   <tr>
    568     <td>&#0160;</td>
    569     <td><xsl:value-of select="organization" /></td>
    570   </tr>
    571   <xsl:if test="address/postal/street!=''">
    572     <tr>
    573       <td>&#0160;</td>
    574       <td><xsl:for-each select="address/postal/street"><xsl:value-of select="." /><br /></xsl:for-each></td>
    575     </tr>
    576   </xsl:if>
    577   <xsl:if test="address/postal/city|address/postal/region|address/postal/code">
    578     <tr>
    579       <td>&#0160;</td>
    580       <td>
    581         <xsl:if test="address/postal/city"><xsl:value-of select="address/postal/city" />, </xsl:if>
    582         <xsl:if test="address/postal/region"><xsl:value-of select="address/postal/region" />&#160;</xsl:if>
    583         <xsl:if test="address/postal/code"><xsl:value-of select="address/postal/code" /></xsl:if>
    584       </td>
    585     </tr>
    586   </xsl:if>
    587   <xsl:if test="address/postal/country">
    588     <tr>
    589       <td>&#0160;</td>
    590       <td><xsl:value-of select="address/postal/country" /></td>
    591     </tr>
    592   </xsl:if>
    593   <xsl:if test="address/phone">
    594     <tr>
    595       <td class="right"><b>Phone:&#0160;</b></td>
    596       <td><a href="tel:{translate(address/phone,' ','')}"><xsl:value-of select="address/phone" /></a></td>
    597     </tr>
    598   </xsl:if>
    599   <xsl:if test="address/facsimile">
    600     <tr>
    601       <td class="right"><b>Fax:&#0160;</b></td>
    602       <td><a href="fax:{translate(address/facsimile,' ','')}"><xsl:value-of select="address/facsimile" /></a></td>
    603     </tr>
    604   </xsl:if>
    605   <xsl:if test="address/email">
    606     <tr>
    607       <td class="right"><b>EMail:&#0160;</b></td>
    608       <td>
    609         <a>
    610           <xsl:if test="$xml2rfc-linkmailto!='no'">
    611             <xsl:attribute name="href">mailto:<xsl:value-of select="address/email" /></xsl:attribute>
    612           </xsl:if>
    613           <xsl:value-of select="address/email" />
    614         </a>
    615       </td>
    616     </tr>
    617   </xsl:if>
    618   <xsl:if test="address/uri">
    619     <tr>
    620       <td class="right"><b>URI:&#0160;</b></td>
    621       <td><a href="{address/uri}"><xsl:value-of select="address/uri" /></a></td>
    622     </tr>
    623   </xsl:if>
    624   <tr>
    625     <td>&#0160;</td>
    626     <td />
    627   </tr>
    628 </xsl:template>
    629 
    630 <xsl:template match="back">
    631 
    632   <!-- add references section first, no matter where it appears in the
    633     source document -->
    634   <xsl:apply-templates select="references" />
    635    
    636   <!-- next, add information about the document's authors -->
    637   <xsl:call-template name="insertAuthors" />
    638     
    639   <!-- add all other top-level sections under <back> -->
    640   <xsl:apply-templates select="*[not(self::references)]" />
    641 
    642   <xsl:if test="not($xml2rfc-private)">
    643     <!-- copyright statements -->
    644     <xsl:variable name="copyright"><xsl:call-template name="insertCopyright" /></xsl:variable>
    645   
    646     <!-- emit it -->
    647     <xsl:choose>
    648       <xsl:when test="function-available('msxsl:node-set')">
    649         <xsl:apply-templates select="msxsl:node-set($copyright)" />
    650       </xsl:when>
    651       <xsl:when test="function-available('exslt:node-set')">
    652         <xsl:apply-templates select="exslt:node-set($copyright)" />
    653       </xsl:when>
    654       <xsl:otherwise>
    655         <xsl:message><xsl:value-of select="$node-set-warning"/></xsl:message>
    656         <p class="error"><xsl:value-of select="$node-set-warning"/></p>
    657       </xsl:otherwise>
    658     </xsl:choose>
    659   </xsl:if>
    660   
    661   <!-- insert the index if index entries exist -->
    662   <xsl:if test="//iref">
    663     <xsl:call-template name="insertIndex" />
    664   </xsl:if>
    665 
    666 </xsl:template>
    667 
    668 <xsl:template match="eref[node()]">
    669   <a href="{@target}"><xsl:apply-templates /></a>
    670 </xsl:template>
    671                
    672 <xsl:template match="eref[not(node())]">
    673   <xsl:text>&lt;</xsl:text>
    674   <a href="{@target}"><xsl:value-of select="@target" /></a>
    675   <xsl:text>&gt;</xsl:text>
    676 </xsl:template>
    677 
    678 <xsl:template match="figure">
    679   <xsl:if test="@anchor!=''">
    680     <div><a name="{@anchor}" /></div>
    681   </xsl:if>
    682   <xsl:choose>
    683     <xsl:when test="@title!='' or @anchor!=''">
    684       <xsl:variable name="n"><xsl:number level="any" count="figure[@title!='' or @anchor!='']" /></xsl:variable>
    685       <div><a name="{$anchor-prefix}.figure.{$n}" /></div>
    686     </xsl:when>
    687     <xsl:otherwise>
    688       <xsl:variable name="n"><xsl:number level="any" count="figure[not(@title!='' or @anchor!='')]" /></xsl:variable>
    689       <div><a name="{$anchor-prefix}.figure.u.{$n}" /></div>
    690     </xsl:otherwise>
    691   </xsl:choose>
    692   <xsl:apply-templates />
    693   <xsl:if test="@title!='' or @anchor!=''">
    694     <xsl:variable name="n"><xsl:number level="any" count="figure[@title!='' or @anchor!='']" /></xsl:variable>
    695     <p class="figure">Figure <xsl:value-of select="$n"/><xsl:if test="@title!=''">: <xsl:value-of select="@title" /></xsl:if></p>
    696   </xsl:if>
    697 </xsl:template>
    698 
    699 <xsl:template match="front">
    700   
    701   <xsl:if test="$xml2rfc-topblock!='no'">
    702     <xsl:call-template name="insertTocLink">
    703       <xsl:with-param name="includeTitle" select="true()" />
    704     </xsl:call-template>
    705 
    706     <!-- collect information for left column -->
    707       
    708     <xsl:variable name="leftColumn">
    709       <xsl:call-template name="collectLeftHeaderColumn" />    
    710     </xsl:variable>
    711   
    712     <!-- collect information for right column -->
    713       
    714     <xsl:variable name="rightColumn">
    715       <xsl:call-template name="collectRightHeaderColumn" />    
    716     </xsl:variable>
    717       
    718     <!-- insert the collected information -->
    719     <table summary="header information" class="header" border="0" cellpadding="1" cellspacing="1">
    720       <xsl:choose>
    721         <xsl:when test="function-available('msxsl:node-set')">
    722           <xsl:call-template name="emitheader">
    723             <xsl:with-param name="lc" select="msxsl:node-set($leftColumn)" />    
    724             <xsl:with-param name="rc" select="msxsl:node-set($rightColumn)" />    
    725           </xsl:call-template>
    726         </xsl:when>    
    727         <xsl:when test="function-available('exslt:node-set')">
    728           <xsl:call-template name="emitheader">
    729             <xsl:with-param name="lc" select="exslt:node-set($leftColumn)" />    
    730             <xsl:with-param name="rc" select="exslt:node-set($rightColumn)" />    
    731           </xsl:call-template>
    732         </xsl:when>    
    733         <xsl:otherwise>
    734           <xsl:message><xsl:value-of select="$node-set-warning"/></xsl:message>
    735           <p class="error"><xsl:value-of select="$node-set-warning"/></p>
    736         </xsl:otherwise>
    737       </xsl:choose>
    738     </table>
    739   </xsl:if>
    740     
    741   <p class="title">
    742     <!-- main title -->
    743     <xsl:value-of select="title"/>
    744     <xsl:if test="/rfc/@docName">
    745       <br/>
    746       <span class="filename"><xsl:value-of select="/rfc/@docName"/></span>
    747     </xsl:if>  
    748   </p>
    749   
    750   <xsl:if test="not($xml2rfc-private)">
    751     <!-- Get status info formatted as per RFC2629-->
    752     <xsl:variable name="preamble"><xsl:call-template name="insertPreamble" /></xsl:variable>
    753     
    754     <!-- emit it -->
    755     <xsl:choose>
    756       <xsl:when test="function-available('msxsl:node-set')">
    757         <xsl:apply-templates select="msxsl:node-set($preamble)" />
    758       </xsl:when>
    759       <xsl:when test="function-available('exslt:node-set')">
    760         <xsl:apply-templates select="exslt:node-set($preamble)" />
    761       </xsl:when>
    762       <xsl:otherwise>
    763         <xsl:message><xsl:value-of select="$node-set-warning"/></xsl:message>
    764         <p class="error"><xsl:value-of select="$node-set-warning"/></p>
    765       </xsl:otherwise>
    766     </xsl:choose>
    767   </xsl:if>
    768             
    769   <xsl:apply-templates select="abstract" />
    770   <xsl:apply-templates select="note" />
    771   <!-- show notes inside change tracking as well -->
    772   <xsl:apply-templates select="ed:replace[.//note]" />
    773     
    774   <xsl:if test="$xml2rfc-toc='yes'">
    775     <xsl:apply-templates select="/" mode="toc" />
    776     <xsl:call-template name="insertTocAppendix" />
    777   </xsl:if>
    778 
    779 </xsl:template>
    780 
    781 
    782 <xsl:template match="iref">
    783   <a><xsl:attribute name="name"><xsl:value-of select="$anchor-prefix"/>.iref.<xsl:number level="any"/></xsl:attribute></a>
    784 </xsl:template>
    785 
    786 <!-- list templates depend on the list style -->
    787 
    788 <xsl:template match="list[@style='empty' or not(@style)]">
    789   <dl>
    790     <xsl:call-template name="insertInsDelClass"/>
    791     <xsl:apply-templates />
    792   </dl>
    793 </xsl:template>
    794 
    795 <xsl:template match="list[starts-with(@style,'format ')]">
    796   <dl>
    797     <xsl:call-template name="insertInsDelClass"/>
    798     <xsl:apply-templates />
    799   </dl>
    800 </xsl:template>
    801 
    802 <xsl:template match="list[@style='hanging']">
    803   <dl>
    804     <xsl:call-template name="insertInsDelClass"/>
    805     <xsl:apply-templates />
    806   </dl>
    807 </xsl:template>
    808 
    809 <xsl:template match="list[@style='numbers']">
    810   <ol>
    811     <xsl:call-template name="insertInsDelClass"/>
    812     <xsl:apply-templates />
    813   </ol>
    814 </xsl:template>
    815 
    816 <!-- numbered list inside numbered list -->
    817 <xsl:template match="list[@style='numbers']/t/list[@style='numbers']" priority="9">
    818   <ol style="list-style-type: lower-alpha">
    819     <xsl:call-template name="insertInsDelClass"/>
    820     <xsl:apply-templates />
    821   </ol>
    822 </xsl:template>
    823 
    824 <xsl:template match="list[@style='symbols']">
    825   <ul>
    826     <xsl:call-template name="insertInsDelClass"/>
    827     <xsl:apply-templates />
    828   </ul>
    829 </xsl:template>
    830 
    831 <!-- same for t(ext) elements -->
    832 
    833 <xsl:template match="list[@style='empty' or not(@style)]/t">
    834   <dd style="margin-top: .5em">
    835     <xsl:apply-templates />
    836   </dd>
    837 </xsl:template>
    838 
    839 <xsl:template match="list[@style='numbers' or @style='symbols']/t">
    840   <li>
    841     <xsl:apply-templates />
    842   </li>
    843 </xsl:template>
    844 
    845 <xsl:template match="list[@style='hanging']/t">
    846   <dt style="margin-top: .5em">
    847     <xsl:value-of select="@hangText" />
    848   </dt>
    849   <dd>
    850     <!-- if hangIndent present, use 0.7 of the specified value (1em is the width of the "m" character -->
    851     <xsl:if test="../@hangIndent and ../@hangIndent!='0'">
    852       <xsl:attribute name="style">margin-left: <xsl:value-of select="../@hangIndent * 0.7"/>em</xsl:attribute>
    853     </xsl:if>
    854     <xsl:apply-templates />
    855   </dd>
    856 </xsl:template>
    857 
    858 <xsl:template match="list[starts-with(@style,'format ') and (contains(@style,'%c') or contains(@style,'%d'))]/t">
    859   <xsl:variable name="list" select=".." />
    860   <xsl:variable name="format" select="substring-after(../@style,'format ')" />
    861   <xsl:variable name="pos">
    862     <xsl:choose>
    863       <xsl:when test="$list/@counter">
    864         <xsl:number level="any" count="list[@counter=$list/@counter or (not(@counter) and @style=concat('format ',$list/@counter))]/t" />
    865       </xsl:when>
    866       <xsl:otherwise>
    867         <xsl:number level="any" count="list[concat('format ',@counter)=$list/@style or (not(@counter) and @style=$list/@style)]/t" />
    868       </xsl:otherwise>
    869     </xsl:choose>
    870   </xsl:variable>
    871   <dt>
    872     <xsl:choose>
    873       <xsl:when test="contains($format,'%c')">
    874         <xsl:value-of select="substring-before($format,'%c')"/><xsl:number value="$pos" format="a" /><xsl:value-of select="substring-after($format,'%c')"/>
    875       </xsl:when>
    876       <xsl:otherwise>
    877         <xsl:value-of select="substring-before($format,'%d')"/><xsl:number value="$pos" format="1" /><xsl:value-of select="substring-after($format,'%d')"/>
    878       </xsl:otherwise>
    879     </xsl:choose>
    880   </dt>
    881   <dd>
    882     <xsl:apply-templates />
    883   </dd>
    884 </xsl:template>
    885 
    886 <xsl:template match="middle">
    887   <xsl:apply-templates />
    888 </xsl:template>
    889 
    890 <xsl:template match="note">
    891   <xsl:variable name="num"><xsl:number/></xsl:variable>
    892   <h1><a name="{$anchor-prefix}.note.{$num}"/><xsl:value-of select="@title" /></h1>
    893     <xsl:apply-templates />
    894 </xsl:template>
    895 
    896 <xsl:template match="postamble">
    897   <p>
    898     <xsl:call-template name="editingMark" />
    899     <xsl:apply-templates />
    900   </p>
    901 </xsl:template>
    902 
    903 <xsl:template match="preamble">
    904   <p>
    905     <xsl:call-template name="editingMark" />
    906     <xsl:apply-templates />
    907   </p>
    908 </xsl:template>
    909 
    910 
    911 <xsl:template match="reference">
    912 
    913   <xsl:variable name="target">
    914     <xsl:choose>
    915       <xsl:when test="@target"><xsl:value-of select="@target" /></xsl:when>
    916       <xsl:when test="seriesInfo/@name='RFC'"><xsl:value-of select="concat($rfcUrlPrefix,seriesInfo[@name='RFC']/@value,'.txt')" /></xsl:when>
    917       <xsl:when test="seriesInfo[starts-with(.,'RFC')]">
    918         <xsl:variable name="rfcRef" select="seriesInfo[starts-with(.,'RFC')]" />
    919         <xsl:value-of select="concat($rfcUrlPrefix,substring-after (normalize-space($rfcRef), ' '),'.txt')" />
    920       </xsl:when>
    921       <xsl:otherwise />
    922     </xsl:choose>
    923   </xsl:variable>
    924   
    925   <tr>
    926     <td class="topnowrap">
    927       <b>
    928         <a name="{@anchor}">
    929           <xsl:call-template name="referencename">
    930             <xsl:with-param name="node" select="." />
    931           </xsl:call-template>
    932         </a>
    933       </b>
    934     </td>
    935     
    936     <td class="top">
    937       <xsl:for-each select="front/author">
    938         <xsl:choose>
    939           <xsl:when test="@surname and @surname!=''">
    940             <xsl:variable name="displayname">
    941               <!-- surname/initials is reversed for last author except when it's the only one -->
    942               <xsl:choose>
    943                 <xsl:when test="position()=last() and position()!=1">
    944                   <xsl:value-of select="concat(@initials,' ',@surname)" />
    945                 </xsl:when>
    946                 <xsl:otherwise>
    947                   <xsl:value-of select="concat(@surname,', ',@initials)" />
    948                 </xsl:otherwise>
    949               </xsl:choose>
    950               <xsl:if test="@role='editor'">
    951                 <xsl:text>, Ed.</xsl:text>
    952               </xsl:if>
    953             </xsl:variable>
    954             <xsl:choose>
    955                <xsl:when test="address/email">
    956                 <a>
    957                   <xsl:if test="$xml2rfc-linkmailto!='no'">
    958                     <xsl:attribute name="href">mailto:<xsl:value-of select="address/email" /></xsl:attribute>
    959                   </xsl:if>
    960                   <xsl:if test="organization/text()">
    961                     <xsl:attribute name="title"><xsl:value-of select="organization/text()"/></xsl:attribute>
    962                   </xsl:if>
    963                   <xsl:value-of select="$displayname" />
    964                 </a>
    965               </xsl:when>
    966               <xsl:otherwise>
    967                 <xsl:value-of select="$displayname" />
    968               </xsl:otherwise>
    969             </xsl:choose>
    970             
    971             <xsl:if test="position()!=last() - 1">,&#0160;</xsl:if>
    972             <xsl:if test="position()=last() - 1"> and </xsl:if>
    973           </xsl:when>
    974           <xsl:when test="organization/text()">
    975             <xsl:choose>
    976               <xsl:when test="address/uri">
    977                 <a href="{address/uri}"><xsl:value-of select="organization" /></a>
    978               </xsl:when>
    979               <xsl:otherwise>
    980                 <xsl:value-of select="organization" />
    981               </xsl:otherwise>
    982             </xsl:choose>
    983             <xsl:if test="position()!=last() - 1">,&#0160;</xsl:if>
    984             <xsl:if test="position()=last() - 1"> and </xsl:if>
    985           </xsl:when>
    986           <xsl:otherwise />
    987         </xsl:choose>
    988       </xsl:for-each>
    989          
    990       <xsl:choose>
    991         <xsl:when test="string-length($target) &gt; 0">
    992           <xsl:text>"</xsl:text><a href="{$target}"><xsl:value-of select="front/title" /></a><xsl:text>"</xsl:text>
    993         </xsl:when>
    994         <xsl:otherwise>
    995           <xsl:text>"</xsl:text><xsl:value-of select="front/title" /><xsl:text>"</xsl:text>
    996         </xsl:otherwise>
    997       </xsl:choose>
    998             
    999       <xsl:for-each select="seriesInfo">
   1000         <xsl:text>, </xsl:text>
   1001         <xsl:choose>
   1002           <xsl:when test="not(@name) and not(@value) and ./text()"><xsl:value-of select="." /></xsl:when>
   1003           <xsl:otherwise><xsl:value-of select="@name" /><xsl:if test="@value!=''">&#0160;<xsl:value-of select="@value" /></xsl:if></xsl:otherwise>
   1004         </xsl:choose>
   1005       </xsl:for-each>
   1006       
   1007       <xsl:if test="front/date/@year != '' and front/date/@year != '???'">
   1008         <xsl:text>, </xsl:text>
   1009         <xsl:if test="front/date/@month and front/date/@month!='???'"><xsl:value-of select="front/date/@month" />&#0160;</xsl:if>
   1010         <xsl:value-of select="front/date/@year" />
   1011       </xsl:if>
   1012       
   1013       <xsl:text>.</xsl:text>
   1014 
   1015       <xsl:for-each select="annotation">
   1016         <br />
   1017         <xsl:apply-templates />
   1018       </xsl:for-each>
   1019 
   1020     </td>
   1021   </tr>
   1022   
   1023   
   1024 </xsl:template>
   1025 
   1026 
   1027 <xsl:template match="references">
   1028 
   1029   <xsl:call-template name="insertTocLink">
   1030     <xsl:with-param name="rule" select="true()" />
   1031   </xsl:call-template>
   1032 
   1033   <xsl:variable name="name">
   1034     <xsl:choose>
   1035       <xsl:when test="not(preceding::references)" />
   1036       <xsl:otherwise>
   1037         <xsl:text>.</xsl:text><xsl:number/>      
   1038       </xsl:otherwise>
   1039     </xsl:choose>
   1040   </xsl:variable>
   1041   
   1042   <h1>
   1043     <!-- force page break before first reference section -->
   1044     <xsl:if test="$name=''">
   1045       <xsl:call-template name="insert-conditional-pagebreak"/>
   1046     </xsl:if>
   1047     
   1048     <a name="{$anchor-prefix}.references{$name}">
   1049       <xsl:choose>
   1050         <xsl:when test="not(@title) or @title=''">References</xsl:when>
   1051         <xsl:otherwise><xsl:value-of select="@title"/></xsl:otherwise>
   1052       </xsl:choose>
   1053     </a>
   1054   </h1>
   1055  
   1056   <table summary="{@title}" border="0" cellpadding="2">
   1057     <xsl:choose>
   1058       <xsl:when test="$xml2rfc-sortrefs='yes'">
   1059         <xsl:apply-templates>
   1060           <xsl:sort select="@anchor" />
   1061         </xsl:apply-templates>
   1062       </xsl:when>
   1063       <xsl:otherwise>
   1064         <xsl:apply-templates />
   1065       </xsl:otherwise>
   1066     </xsl:choose>
   1067   </table>
   1068 
   1069 </xsl:template>
   1070 
   1071 <xsl:template match="rfc">
   1072   
   1073   <xsl:variable name="lang">
   1074     <xsl:call-template name="get-lang" />
   1075   </xsl:variable>
   1076 
   1077   <html lang="{$lang}">
   1078     <head>
   1079       <title><xsl:value-of select="front/title" /></title>
   1080       <style type="text/css" title="Xml2Rfc (sans serif)">
   1081         <xsl:call-template name="insertCss" />
   1082       </style>
   1083       <!-- <link rel="alternate stylesheet" type="text/css" media="screen" title="Plain (typewriter)" href="rfc2629tty.css" /> -->
   1084             
   1085       <!-- link elements -->
   1086       <xsl:if test="$xml2rfc-toc='yes'">
   1087         <link rel="Contents" href="#{$anchor-prefix}.toc" />
   1088       </xsl:if>
   1089       <link rel="Author" href="#{$anchor-prefix}.authors" />
   1090       <xsl:if test="not($xml2rfc-private)">
   1091         <link rel="Copyright" href="#{$anchor-prefix}.copyright" />
   1092       </xsl:if>
   1093       <xsl:if test="//iref">
   1094         <link rel="Index" href="#{$anchor-prefix}.index" />
   1095       </xsl:if>
   1096       <xsl:apply-templates select="/" mode="links" />
   1097       <xsl:for-each select="/rfc/ed:link">
   1098         <link><xsl:copy-of select="@*" /></link>
   1099       </xsl:for-each>
   1100       <xsl:if test="/rfc/@number">
   1101         <link rel="Alternate" title="Authorative ASCII version" href="http://www.ietf.org/rfc/rfc{/rfc/@number}" />
   1102       </xsl:if>
   1103 
   1104       <!-- generator -->
   1105       <xsl:variable name="gen">
   1106         <xsl:call-template name="get-generator" />
   1107       </xsl:variable>
   1108       <meta name="generator" content="{$gen}" />
   1109       
   1110       <!-- keywords -->
   1111       <xsl:if test="front/keyword">
   1112         <xsl:variable name="keyw">
   1113           <xsl:call-template name="get-keywords" />
   1114         </xsl:variable>
   1115         <meta name="keywords" content="{$keyw}" />
   1116       </xsl:if>
   1117 
   1118       <xsl:if test="$xml2rfc-ext-support-rfc2731!='no'">
   1119         <!-- Dublin Core Metadata -->
   1120         <link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
   1121               
   1122         <!-- DC creator, see RFC2731 -->
   1123         <xsl:for-each select="/rfc/front/author">
   1124           <meta name="DC.Creator" content="{concat(@surname,', ',@initials)}" />
   1125         </xsl:for-each>
   1126         
   1127         <xsl:if test="not($xml2rfc-private)">
   1128           <xsl:choose>
   1129             <xsl:when test="/rfc/@number">
   1130               <meta name="DC.Identifier" content="urn:ietf:rfc:{/rfc/@number}" />
   1131             </xsl:when>
   1132             <xsl:when test="/rfc/@docName">
   1133               <meta name="DC.Identifier" content="urn:ietf:id:{/rfc/@docName}" />
   1134             </xsl:when>
   1135             <xsl:otherwise/>
   1136           </xsl:choose>
   1137           <xsl:variable name="month"><xsl:call-template name="get-month-as-num"/></xsl:variable>
   1138           <meta name="DC.Date.Issued" scheme="ISO8601" content="{/rfc/front/date/@year}-{$month}" />
   1139   
   1140           <xsl:if test="/rfc/@obsoletes!=''">
   1141             <xsl:call-template name="rfclist-for-dcmeta">
   1142               <xsl:with-param name="list" select="/rfc/@obsoletes"/>
   1143             </xsl:call-template>
   1144           </xsl:if>
   1145         </xsl:if>
   1146   
   1147         <xsl:if test="/rfc/front/abstract">
   1148           <meta name="DC.Description.Abstract" content="{normalize-space(/rfc/front/abstract)}" />
   1149         </xsl:if>      
   1150       </xsl:if>      
   1151     </head>
   1152     <body>
   1153       <!-- insert diagnostics -->
   1154       <xsl:call-template name="insert-diagnostics"/>
   1155     
   1156       <xsl:apply-templates select="front" />
   1157       <xsl:apply-templates select="middle" />
   1158       <xsl:apply-templates select="back" />
   1159     </body>
   1160   </html>
   1161 </xsl:template>               
   1162 
   1163 
   1164 <xsl:template match="t">
   1165   <xsl:variable name="paraNumber">
   1166     <xsl:call-template name="sectionnumberPara" />
   1167   </xsl:variable>
   1168      
   1169   <xsl:if test="string-length($paraNumber) &gt; 0">
   1170     <div><a name="{$anchor-prefix}.section.{$paraNumber}" /></div>
   1171   </xsl:if>
   1172 
   1173   <xsl:apply-templates mode="t-content" select="node()[1]" />
   1174 </xsl:template>
   1175 
   1176 
   1177 
   1178 <!-- for t-content, dispatch to default templates if it's block-level content -->
   1179 <xsl:template mode="t-content" match="list|figure|texttable">
   1180   <!-- <xsl:comment>t-content block-level</xsl:comment>  -->
   1181   <xsl:apply-templates select="." />
   1182   <xsl:apply-templates select="following-sibling::node()[1]" mode="t-content" />
   1183 </xsl:template>               
   1184                
   1185 <!-- ... otherwise group into p elements -->
   1186 <xsl:template mode="t-content" match="*|node()">
   1187   <p>
   1188     <xsl:call-template name="insertInsDelClass"/>
   1189     <xsl:call-template name="editingMark" />
   1190     <xsl:apply-templates mode="t-content2" select="." />
   1191   </p>
   1192   <xsl:apply-templates mode="t-content" select="following-sibling::*[self::list or self::figure or self::texttable][1]" />
   1193 </xsl:template>               
   1194                
   1195 <xsl:template mode="t-content2" match="*|node()">
   1196   <xsl:apply-templates select="." />
   1197   <xsl:if test="not(following-sibling::node()[1] [self::list or self::figure or self::texttable])">
   1198     <xsl:apply-templates select="following-sibling::node()[1]" mode="t-content2" />
   1199   </xsl:if>
   1200 </xsl:template>               
   1201 
   1202 <xsl:template match="section|appendix">
   1203 
   1204   <xsl:variable name="sectionNumber">
   1205     <xsl:choose>
   1206       <xsl:when test="@myns:unnumbered"></xsl:when>
   1207       <xsl:otherwise><xsl:call-template name="get-section-number" /></xsl:otherwise>
   1208     </xsl:choose>
   1209   </xsl:variable>
   1210     
   1211   <xsl:if test="not(ancestor::section) and not(@myns:notoclink)">
   1212     <xsl:call-template name="insertTocLink">
   1213       <xsl:with-param name="rule" select="true()" />
   1214     </xsl:call-template>
   1215   </xsl:if>
   1216   
   1217   <xsl:variable name="elemtype">
   1218     <xsl:choose>
   1219       <xsl:when test="count(ancestor::section) = 0">h1</xsl:when>
   1220       <xsl:when test="count(ancestor::section) = 1">h2</xsl:when>
   1221       <xsl:otherwise>h3</xsl:otherwise>
   1222     </xsl:choose>
   1223   </xsl:variable>
   1224   
   1225   <xsl:element name="{$elemtype}">
   1226     <xsl:choose>
   1227       <xsl:when test="$sectionNumber='1'">
   1228         <!-- pagebreak, this the first section -->
   1229         <xsl:attribute name="class">np</xsl:attribute>
   1230       </xsl:when>
   1231       <xsl:when test="not(ancestor::section) and not(@myns:notoclink)">
   1232         <xsl:call-template name="insert-conditional-pagebreak"/>
   1233       </xsl:when>
   1234       <xsl:otherwise/>
   1235     </xsl:choose>
   1236     <xsl:call-template name="insertInsDelClass" />
   1237     
   1238     <!-- generate anchors for irefs that are immediate childs of this section -->
   1239     <xsl:apply-templates select="iref"/>
   1240     <xsl:if test="$sectionNumber!=''">
   1241       <a name="{$anchor-prefix}.section.{$sectionNumber}"><xsl:value-of select="$sectionNumber" /></a>&#0160;
   1242     </xsl:if>
   1243     <xsl:choose>
   1244       <xsl:when test="@anchor">
   1245         <a name="{@anchor}"><xsl:value-of select="@title" /></a>
   1246       </xsl:when>
   1247       <xsl:otherwise>
   1248         <xsl:value-of select="@title" />
   1249       </xsl:otherwise>
   1250     </xsl:choose>
   1251   </xsl:element>
   1252   <xsl:apply-templates select="*[not(self::iref)]" />
   1253 </xsl:template>
   1254 
   1255 <xsl:template match="spanx[@style='emph' or not(@style)]">
   1256   <em><xsl:apply-templates /></em>
   1257 </xsl:template>
   1258 
   1259 <xsl:template match="spanx[@style='verb']">
   1260   <samp><xsl:apply-templates /></samp>
   1261 </xsl:template>
   1262 
   1263 <xsl:template match="spanx[@style='strong']">
   1264   <strong><xsl:apply-templates /></strong>
   1265 </xsl:template>
   1266 
   1267 
   1268 <xsl:template match="vspace[not(@blankLines) or @blankLines=0]">
   1269   <br />
   1270 </xsl:template>
   1271 
   1272 <xsl:template match="vspace[@blankLines &gt; 0]">
   1273   <br/><xsl:for-each select="//*[position() &lt;= @blankLines]"> <br /></xsl:for-each>
   1274 </xsl:template>
   1275 
   1276 <!-- keep the root for the case when we process XSLT-inline markup -->
   1277 <xsl:variable name="src" select="/" />
   1278 
   1279 <xsl:template match="xref[node()]">
   1280   <xsl:variable name="target" select="@target" />
   1281   <xsl:variable name="node" select="$src//*[@anchor=$target]" />
   1282   <a href="#{$target}"><xsl:apply-templates /></a>
   1283   <xsl:for-each select="$src/rfc/back/references/reference[@anchor=$target]">
   1284     <xsl:text> </xsl:text><xsl:call-template name="referencename">
   1285        <xsl:with-param name="node" select="." />
   1286     </xsl:call-template>
   1287   </xsl:for-each>
   1288 </xsl:template>
   1289                
   1290 <xsl:template match="xref[not(node())]">
   1291   <xsl:variable name="context" select="." />
   1292   <xsl:variable name="target" select="@target" />
   1293   <xsl:variable name="node" select="$src//*[@anchor=$target]" />
   1294   <xsl:if test="count($node)=0 and not(ancestor::ed:del)">
   1295     <xsl:message>Undefined target: <xsl:value-of select="@target" /></xsl:message>
   1296     <span class="error">Undefined target: <xsl:value-of select="@target" /></span>
   1297   </xsl:if>
   1298   <a href="#{$target}">
   1299     <xsl:choose>
   1300       <xsl:when test="local-name($node)='section'">
   1301         <xsl:variable name="refname">
   1302           <xsl:for-each select="$node">
   1303             <xsl:call-template name="get-section-type">
   1304               <xsl:with-param name="prec" select="$context/preceding-sibling::node()[1]" />
   1305             </xsl:call-template>
   1306           </xsl:for-each>
   1307         </xsl:variable>
   1308         <xsl:variable name="refnum">
   1309           <xsl:for-each select="$node">
   1310             <xsl:call-template name="get-section-number" />
   1311           </xsl:for-each>
   1312         </xsl:variable>
   1313         <xsl:attribute name="title">
   1314           <xsl:value-of select="$node/@title" />
   1315         </xsl:attribute>
   1316         <xsl:choose>
   1317           <xsl:when test="@format='counter'">
   1318             <xsl:value-of select="$refnum"/>
   1319           </xsl:when>
   1320           <xsl:when test="@format='title'">
   1321             <xsl:value-of select="$node/@title"/>
   1322           </xsl:when>
   1323           <xsl:otherwise>
   1324             <xsl:value-of select="normalize-space(concat($refname,'&#160;',$refnum))"/>
   1325           </xsl:otherwise>
   1326         </xsl:choose>
   1327       </xsl:when>
   1328       <xsl:when test="local-name($node)='figure'">
   1329         <xsl:variable name="figcnt">
   1330           <xsl:for-each select="$node">
   1331             <xsl:number level="any" count="figure[@title!='' or @anchor!='']" />
   1332           </xsl:for-each>
   1333         </xsl:variable>
   1334         <xsl:choose>
   1335           <xsl:when test="@format='counter'">
   1336             <xsl:value-of select="$figcnt" />
   1337           </xsl:when>
   1338           <xsl:when test="@format='title'">
   1339             <xsl:value-of select="$node/@title" />
   1340           </xsl:when>
   1341           <xsl:otherwise>
   1342             <xsl:value-of select="normalize-space(concat('Figure&#160;',$figcnt))"/>
   1343           </xsl:otherwise>
   1344         </xsl:choose>
   1345       </xsl:when>
   1346       <xsl:otherwise>
   1347         <xsl:attribute name="title"><xsl:value-of select="normalize-space($node/front/title)" /></xsl:attribute>
   1348         <xsl:call-template name="referencename"><xsl:with-param name="node" select="$src/rfc/back/references/reference[@anchor=$target]" /></xsl:call-template></xsl:otherwise>
   1349     </xsl:choose>
   1350   </a>
   1351 </xsl:template>
   1352 
   1353 
   1354 <!-- mark unmatched elements red -->
   1355 
   1356 <xsl:template match="*">
   1357      <font color="red"><tt>&lt;<xsl:value-of select="name()" />&gt;</tt></font>
   1358     <xsl:copy><xsl:apply-templates select="node()|@*" /></xsl:copy>
   1359      <font color="red"><tt>&lt;/<xsl:value-of select="name()" />&gt;</tt></font>
   1360 </xsl:template>
   1361 
   1362 <xsl:template match="/">
   1363   <xsl:copy><xsl:apply-templates select="node()" /></xsl:copy>
   1364 </xsl:template>
   1365 
   1366 
   1367 
   1368 
   1369 
   1370 
   1371 
   1372 
   1373 <!-- utility templates -->
   1374 
   1375 <xsl:template name="collectLeftHeaderColumn">
   1376   <xsl:param name="mode" />
   1377   <!-- default case -->
   1378   <xsl:if test="not($xml2rfc-private)">
   1379     <myns:item>Network Working Group</myns:item>
   1380     <myns:item>
   1381        <xsl:choose>
   1382         <xsl:when test="/rfc/@ipr and $mode='nroff'">Internet Draft</xsl:when>
   1383         <xsl:when test="/rfc/@ipr">INTERNET DRAFT</xsl:when>
   1384         <xsl:otherwise>Request for Comments: <xsl:value-of select="/rfc/@number"/></xsl:otherwise>
   1385       </xsl:choose>
   1386     </myns:item>
   1387     <xsl:if test="/rfc/@docName and $mode!='nroff'">
   1388       <myns:item>
   1389         &lt;<xsl:value-of select="/rfc/@docName" />&gt;
   1390       </myns:item>
   1391     </xsl:if>
   1392     <xsl:if test="/rfc/@obsoletes and /rfc/@obsoletes!=''">
   1393       <myns:item>
   1394         Obsoletes: <xsl:call-template name="rfclist">
   1395           <xsl:with-param name="list" select="normalize-space(/rfc/@obsoletes)" />
   1396         </xsl:call-template>
   1397         <xsl:if test="not(/rfc/@number)"> (if approved)</xsl:if>
   1398       </myns:item>
   1399     </xsl:if>
   1400     <xsl:if test="/rfc/@seriesNo">
   1401        <myns:item>
   1402         <xsl:choose>
   1403           <xsl:when test="/rfc/@category='bcp'">BCP: <xsl:value-of select="/rfc/@seriesNo" /></xsl:when>
   1404           <xsl:when test="/rfc/@category='info'">FYI: <xsl:value-of select="/rfc/@seriesNo" /></xsl:when>
   1405           <xsl:when test="/rfc/@category='std'">STD: <xsl:value-of select="/rfc/@seriesNo" /></xsl:when>
   1406           <xsl:otherwise><xsl:value-of select="concat(/rfc/@category,': ',/rfc/@seriesNo)" /></xsl:otherwise>
   1407         </xsl:choose>
   1408       </myns:item>
   1409     </xsl:if>
   1410     <xsl:if test="/rfc/@updates and /rfc/@updates!=''">
   1411       <myns:item>
   1412           Updates: <xsl:call-template name="rfclist">
   1413              <xsl:with-param name="list" select="normalize-space(/rfc/@updates)" />
   1414           </xsl:call-template>
   1415           <xsl:if test="not(/rfc/@number)"> (if approved)</xsl:if>
   1416       </myns:item>
   1417     </xsl:if>
   1418     <xsl:if test="$mode!='nroff'">
   1419       <myns:item>
   1420          Category:
   1421         <xsl:call-template name="get-category-long" />
   1422       </myns:item>
   1423     </xsl:if>
   1424     <xsl:if test="/rfc/@ipr">
   1425        <myns:item>Expires: <xsl:call-template name="expirydate" /></myns:item>
   1426     </xsl:if>
   1427   </xsl:if>
   1428     
   1429   <!-- private case -->
   1430   <xsl:if test="$xml2rfc-private">
   1431     <myns:item><xsl:value-of select="$xml2rfc-private" /></myns:item>
   1432   </xsl:if>
   1433 </xsl:template>
   1434 
   1435 <xsl:template name="collectRightHeaderColumn">
   1436   <xsl:for-each select="author">
   1437     <xsl:if test="@surname">
   1438       <myns:item>
   1439         <xsl:value-of select="concat(@initials,' ',@surname)" />
   1440         <xsl:if test="@role">
   1441           <xsl:choose>
   1442             <xsl:when test="@role='editor'">
   1443               <xsl:text>, Editor</xsl:text>
   1444             </xsl:when>
   1445             <xsl:otherwise>
   1446               <xsl:text>, </xsl:text><xsl:value-of select="@role" />
   1447             </xsl:otherwise>
   1448           </xsl:choose>
   1449         </xsl:if>
   1450       </myns:item>
   1451     </xsl:if>
   1452     <xsl:variable name="org">
   1453       <xsl:choose>
   1454         <xsl:when test="organization/@abbrev"><xsl:value-of select="organization/@abbrev" /></xsl:when>
   1455         <xsl:otherwise><xsl:value-of select="organization" /></xsl:otherwise>
   1456       </xsl:choose>
   1457     </xsl:variable>
   1458     <xsl:variable name="orgOfFollowing">
   1459       <xsl:choose>
   1460         <xsl:when test="following-sibling::*[1]/organization/@abbrev"><xsl:value-of select="following-sibling::*[1]/organization/@abbrev" /></xsl:when>
   1461         <xsl:otherwise><xsl:value-of select="following-sibling::*/organization" /></xsl:otherwise>
   1462       </xsl:choose>
   1463     </xsl:variable>
   1464     <xsl:if test="$org != $orgOfFollowing">
   1465       <myns:item><xsl:value-of select="$org" /></myns:item>
   1466     </xsl:if>
   1467   </xsl:for-each>
   1468   <myns:item>
   1469     <xsl:value-of select="concat(date/@month,' ',date/@year)" />
   1470   </myns:item>
   1471 </xsl:template>
   1472 
   1473 
   1474 <xsl:template name="emitheader">
   1475   <xsl:param name="lc" />
   1476   <xsl:param name="rc" />
   1477 
   1478   <xsl:for-each select="$lc/myns:item | $rc/myns:item">
   1479     <xsl:variable name="pos" select="position()" />
   1480     <xsl:if test="$pos &lt; count($lc/myns:item) + 1 or $pos &lt; count($rc/myns:item) + 1"> 
   1481       <tr>
   1482         <td class="header-l"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$lc/myns:item[$pos]/node()" /></xsl:call-template>&#0160;</td>
   1483         <td class="header-r"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$rc/myns:item[$pos]/node()" /></xsl:call-template>&#0160;</td>
   1484       </tr>
   1485     </xsl:if>
   1486   </xsl:for-each>
   1487 </xsl:template>
   1488 
   1489 <!-- convenience template that avoids copying namespace nodes we don't want -->
   1490 <xsl:template name="copynodes">
   1491   <xsl:param name="nodes" />
   1492   <xsl:for-each select="$nodes">
   1493     <xsl:choose>
   1494       <xsl:when test="namespace-uri()='http://www.w3.org/1999/xhtml'"><xsl:element name="{name()}" namespace="{namespace-uri()}"><xsl:copy-of select="@*|node()" /></xsl:element></xsl:when>
   1495       <xsl:when test="self::*"><xsl:element name="{name()}"><xsl:copy-of select="@*|node()" /></xsl:element></xsl:when>
   1496       <xsl:otherwise><xsl:copy-of select="." /></xsl:otherwise>
   1497     </xsl:choose>
   1498   </xsl:for-each>
   1499 </xsl:template>
   1500 
   1501 
   1502 <xsl:template name="expirydate">
   1503   <xsl:variable name="date" select="/rfc/front/date" />
   1504   <xsl:choose>
   1505       <xsl:when test="$date/@month='January'">July <xsl:value-of select="$date/@year" /></xsl:when>
   1506       <xsl:when test="$date/@month='February'">August <xsl:value-of select="$date/@year" /></xsl:when>
   1507       <xsl:when test="$date/@month='March'">September <xsl:value-of select="$date/@year" /></xsl:when>
   1508       <xsl:when test="$date/@month='April'">October <xsl:value-of select="$date/@year" /></xsl:when>
   1509       <xsl:when test="$date/@month='May'">November <xsl:value-of select="$date/@year" /></xsl:when>
   1510       <xsl:when test="$date/@month='June'">December <xsl:value-of select="$date/@year" /></xsl:when>
   1511       <xsl:when test="$date/@month='July'">January <xsl:value-of select="$date/@year + 1" /></xsl:when>
   1512       <xsl:when test="$date/@month='August'">February <xsl:value-of select="$date/@year + 1" /></xsl:when>
   1513       <xsl:when test="$date/@month='September'">March <xsl:value-of select="$date/@year + 1" /></xsl:when>
   1514       <xsl:when test="$date/@month='October'">April <xsl:value-of select="$date/@year + 1" /></xsl:when>
   1515       <xsl:when test="$date/@month='November'">May <xsl:value-of select="$date/@year + 1" /></xsl:when>
   1516       <xsl:when test="$date/@month='December'">June <xsl:value-of select="$date/@year + 1" /></xsl:when>
   1517         <xsl:otherwise>WRONG SYNTAX FOR MONTH</xsl:otherwise>
   1518      </xsl:choose>
   1519 </xsl:template>
   1520 
   1521 <xsl:template name="get-month-as-num">
   1522   <xsl:variable name="date" select="/rfc/front/date" />
   1523   <xsl:choose>
   1524       <xsl:when test="$date/@month='January'">01</xsl:when>
   1525       <xsl:when test="$date/@month='February'">02</xsl:when>
   1526       <xsl:when test="$date/@month='March'">03</xsl:when>
   1527       <xsl:when test="$date/@month='April'">04</xsl:when>
   1528       <xsl:when test="$date/@month='May'">05</xsl:when>
   1529       <xsl:when test="$date/@month='June'">06</xsl:when>
   1530       <xsl:when test="$date/@month='July'">07</xsl:when>
   1531       <xsl:when test="$date/@month='August'">08</xsl:when>
   1532       <xsl:when test="$date/@month='September'">09</xsl:when>
   1533       <xsl:when test="$date/@month='October'">10</xsl:when>
   1534       <xsl:when test="$date/@month='November'">11</xsl:when>
   1535       <xsl:when test="$date/@month='December'">12</xsl:when>
   1536         <xsl:otherwise>WRONG SYNTAX FOR MONTH</xsl:otherwise>
   1537      </xsl:choose>
   1538 </xsl:template>
   1539 
   1540 <!-- produce back section with author information -->
   1541 <xsl:template name="insertAuthors">
   1542 
   1543   <!-- insert link to TOC including horizontal rule -->
   1544   <xsl:call-template name="insertTocLink">
   1545     <xsl:with-param name="rule" select="true()" />
   1546   </xsl:call-template>
   1547     
   1548   <h1>
   1549     <xsl:call-template name="insert-conditional-pagebreak"/>
   1550     <a name="{$anchor-prefix}.authors" />Author's Address<xsl:if test="count(/rfc/front/author) &gt; 1">es</xsl:if>
   1551   </h1>
   1552 
   1553   <table summary="Authors" width="99%" border="0" cellpadding="0" cellspacing="0">
   1554     <xsl:apply-templates select="/rfc/front/author" />
   1555   </table>
   1556 </xsl:template>
   1557 
   1558 
   1559 
   1560 <!-- insert copyright statement -->
   1561 
   1562 <xsl:template name="insertCopyright" xmlns="">
   1563 
   1564   <section title="Intellectual Property Statement" anchor="{$anchor-prefix}.ipr" myns:unnumbered="unnumbered" myns:is-rfc2629="true">
   1565     <xsl:choose>
   1566       <xsl:when test="$ipr-rfc3667">
   1567         <t myns:is-rfc2629="true">
   1568           The IETF takes no position regarding the validity or scope of any
   1569           Intellectual Property Rights or other rights that might be claimed to
   1570           pertain to the implementation or use of the technology described in
   1571           this document or the extent to which any license under such rights
   1572           might or might not be available; nor does it represent that it has
   1573           made any independent effort to identify any such rights. Information
   1574           on the IETF's procedures with respect to rights in IETF Documents
   1575           can be found in BCP 78 and BCP 79.
   1576         </t>       
   1577         <t myns:is-rfc2629="true">
   1578           Copies of IPR disclosures made to the IETF Secretariat and any
   1579           assurances of licenses to be made available, or the result of an
   1580           attempt made to obtain a general license or permission for the use
   1581           of such proprietary rights by implementers or users of this
   1582           specification can be obtained from the IETF on-line IPR repository 
   1583           at <eref target="http://www.ietf.org/ipr"/>.
   1584         </t>       
   1585         <t myns:is-rfc2629="true">
   1586           The IETF invites any interested party to bring to its attention any
   1587           copyrights, patents or patent applications, or other proprietary
   1588           rights that may cover technology that may be required to implement
   1589           this standard. Please address the information to the IETF at
   1590           <eref target="mailto:ietf-ipr (a] ietf.org">ietf-ipr (a] ietf.org</eref>.
   1591         </t>       
   1592       </xsl:when>
   1593       <xsl:otherwise>
   1594         <t myns:is-rfc2629="true">
   1595           The IETF takes no position regarding the validity or scope of
   1596           any intellectual property or other rights that might be claimed
   1597           to  pertain to the implementation or use of the technology
   1598           described in this document or the extent to which any license
   1599           under such rights might or might not be available; neither does
   1600           it represent that it has made any effort to identify any such
   1601           rights. Information on the IETF's procedures with respect to
   1602           rights in standards-track and standards-related documentation
   1603           can be found in BCP-11. Copies of claims of rights made
   1604           available for publication and any assurances of licenses to
   1605           be made available, or the result of an attempt made
   1606           to obtain a general license or permission for the use of such
   1607           proprietary rights by implementors or users of this
   1608           specification can be obtained from the IETF Secretariat.
   1609         </t>
   1610         <t myns:is-rfc2629="true">
   1611           The IETF invites any interested party to bring to its
   1612           attention any copyrights, patents or patent applications, or
   1613           other proprietary rights which may cover technology that may be
   1614           required to practice this standard. Please address the
   1615           information to the IETF Executive Director.
   1616         </t>
   1617         <xsl:if test="$xml2rfc-iprnotified='yes'">
   1618           <t myns:is-rfc2629="true">
   1619             The IETF has been notified of intellectual property rights
   1620             claimed in regard to some or all of the specification contained
   1621             in this document. For more information consult the online list
   1622             of claimed rights.
   1623           </t>
   1624         </xsl:if>
   1625       </xsl:otherwise>
   1626     </xsl:choose>
   1627   </section>
   1628   
   1629   <xsl:if test="$ipr-rfc3667">
   1630     <section title="Disclaimer of Validity" anchor="{$anchor-prefix}.disclaimer" myns:unnumbered="unnumbered" myns:notoclink="notoclink" myns:is-rfc2629="true">
   1631       <t myns:is-rfc2629="true">
   1632         This document and the information contained herein are provided on an
   1633         "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   1634         OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
   1635         ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
   1636         INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE 
   1637         INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED 
   1638         WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
   1639       </t>
   1640     </section>
   1641   </xsl:if>
   1642 
   1643   <xsl:choose>
   1644     <xsl:when test="$ipr-rfc3667">
   1645       <section title="Copyright Statement" anchor="{$anchor-prefix}.copyright" myns:unnumbered="unnumbered" myns:notoclink="notoclink" myns:is-rfc2629="true">
   1646         <t myns:is-rfc2629="true">
   1647           Copyright (C) The Internet Society (<xsl:value-of select="/rfc/front/date/@year" />).
   1648           This document is subject to the rights, licenses and restrictions
   1649           contained in BCP 78, and except as set forth therein, the authors
   1650           retain all their rights.
   1651         </t>
   1652       </section>    
   1653     </xsl:when>
   1654     <xsl:otherwise>
   1655       <section title="Full Copyright Statement" anchor="{$anchor-prefix}.copyright" myns:unnumbered="unnumbered" myns:notoclink="notoclink" myns:is-rfc2629="true">
   1656         <t myns:is-rfc2629="true">
   1657           Copyright (C) The Internet Society (<xsl:value-of select="/rfc/front/date/@year" />). All Rights Reserved.
   1658         </t>
   1659         <t myns:is-rfc2629="true">
   1660           This document and translations of it may be copied and furnished to
   1661           others, and derivative works that comment on or otherwise explain it
   1662           or assist in its implementation may be prepared, copied, published and
   1663           distributed, in whole or in part, without restriction of any kind,
   1664           provided that the above copyright notice and this paragraph are
   1665           included on all such copies and derivative works. However, this
   1666           document itself may not be modified in any way, such as by removing
   1667           the copyright notice or references to the Internet Society or other
   1668           Internet organizations, except as needed for the purpose of
   1669           developing Internet standards in which case the procedures for
   1670           copyrights defined in the Internet Standards process must be
   1671           followed, or as required to translate it into languages other than
   1672           English.
   1673         </t>
   1674         <t myns:is-rfc2629="true">
   1675           The limited permissions granted above are perpetual and will not be
   1676           revoked by the Internet Society or its successors or assignees.
   1677         </t>
   1678         <t myns:is-rfc2629="true">
   1679           This document and the information contained herein is provided on an
   1680           &quot;AS IS&quot; basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
   1681           TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
   1682           BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
   1683           HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
   1684           MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
   1685         </t>
   1686       </section>
   1687     </xsl:otherwise>
   1688   </xsl:choose>
   1689   
   1690   <section title="Acknowledgement" myns:unnumbered="unnumbered" myns:notoclink="notoclink" myns:is-rfc2629="true">
   1691     <t myns:is-rfc2629="true">
   1692       Funding for the RFC Editor function is currently provided by the
   1693       Internet Society.
   1694     </t>
   1695   </section>
   1696 
   1697 </xsl:template>
   1698 
   1699 
   1700 <!-- insert CSS style info -->
   1701 
   1702 <xsl:template name="insertCss">
   1703 a {
   1704   text-decoration: none
   1705 }
   1706 a:hover {
   1707   text-decoration: underline
   1708 }
   1709 a:active {
   1710   text-decoration: underline
   1711 }
   1712 body {
   1713   <xsl:if test="$xml2rfc-background!=''">
   1714   background: url(<xsl:value-of select="$xml2rfc-background" />) #ffffff left top;
   1715   </xsl:if>
   1716   color: #000000;
   1717   font-family: helvetica, arial, sans-serif;
   1718   font-size: 13px;
   1719 }
   1720 dl {
   1721   margin-left: 2em;
   1722 }
   1723 h1 {
   1724   color: #333333;
   1725   font-size: 16px;
   1726   line-height: 16px;
   1727   font-family: helvetica, arial, sans-serif;
   1728   page-break-after: avoid;
   1729 }
   1730 h1.np {
   1731   page-break-before: always;
   1732 }
   1733 h2 {
   1734   color: #000000;
   1735   font-size: 14px;
   1736   font-family: helvetica, arial, sans-serif;
   1737   page-break-after: avoid;
   1738 }
   1739 h3 {
   1740   color: #000000;
   1741   font-size: 13px;
   1742   font-family: helvetica, arial, sans-serif;
   1743   page-break-after: avoid;
   1744 }
   1745 img {
   1746   margin-left: 3em;
   1747 }
   1748 li {
   1749   margin-left: 2em;
   1750   margin-right: 2em;
   1751 }
   1752 ol {
   1753   margin-left: 2em;
   1754   margin-right: 2em;
   1755 }
   1756 p {
   1757   margin-left: 2em;
   1758   margin-right: 2em;
   1759 }
   1760 pre {
   1761   margin-left: 3em;
   1762   background-color: lightyellow;
   1763 }
   1764 table {
   1765   margin-left: 2em;
   1766 }
   1767 table.header {
   1768   width: 66%;
   1769 }
   1770 td.top {
   1771   vertical-align: top;
   1772 }
   1773 td.topnowrap {
   1774   vertical-align: top;
   1775   white-space: nowrap; 
   1776 }
   1777 td.right {
   1778   text-align: right;
   1779 }
   1780 td.header-l {
   1781   width: 33%;
   1782   color: #ffffff;
   1783   background-color: #666666;
   1784   font-size: 10px;
   1785   font-family: arial, helvetica, sans-serif;
   1786   vertical-align: top
   1787 }
   1788 td.header-r {
   1789   width: 33%;
   1790   color: #ffffff;
   1791   background-color: #666666;
   1792   font-size: 10px;
   1793   font-family: arial, helvetica, sans-serif;
   1794   vertical-align: top;
   1795 }
   1796 thead {
   1797   display:table-header-group
   1798 }
   1799 .editingmark {
   1800   background-color: khaki;
   1801 }
   1802 .error {
   1803   font-size: 14pt;
   1804   background-color: red;
   1805 }
   1806 .hotText {
   1807   color:#ffffff;
   1808   font-weight: normal;
   1809   text-decoration: none;
   1810   font-family: chelvetica, arial, sans-serif;
   1811   font-size: 9px
   1812 }
   1813 .link2 {
   1814   color:#ffffff;
   1815   font-weight: bold;
   1816   text-decoration: none;
   1817   font-family: helvetica, arial, sans-serif;
   1818   font-size: 9px
   1819 }
   1820 .toowide {
   1821   color: red;
   1822   font-weight: bold;
   1823 }
   1824 .RFC {
   1825   color:#666666;
   1826   font-weight: bold;
   1827   text-decoration: none;
   1828   font-family: helvetica, arial, sans-serif;
   1829   font-size: 9px
   1830 }
   1831 .title {
   1832   color: #990000;
   1833   font-size: 22px;
   1834   line-height: 22px;
   1835   font-weight: bold;
   1836   text-align: right;
   1837   font-family: helvetica, arial, sans-serif
   1838 }
   1839 .figure {
   1840   font-weight: bold;
   1841   text-align: center;
   1842   font-size: 12px;
   1843 }
   1844 .filename {
   1845   color: #333333;
   1846   font-weight: bold;
   1847   font-size: 16px;
   1848   line-height: 24px;
   1849   font-family: helvetica, arial, sans-serif;
   1850   text-align: right;
   1851 }
   1852 .warning {
   1853   font-size: 14pt;
   1854   background-color: yellow;
   1855 }
   1856 del {
   1857   color: red;
   1858   text-decoration: line-through;
   1859 }
   1860 .del {
   1861   color: red;
   1862   text-decoration: line-through;
   1863 }
   1864 ins {
   1865   color: green;
   1866   text-decoration: underline;
   1867 }
   1868 .ins {
   1869   color: green;
   1870   text-decoration: underline;
   1871 }
   1872 
   1873 table.openissue {
   1874   background-color: khaki;
   1875   border-width: thin;
   1876   border-style: solid;
   1877   border-color: black;
   1878 }
   1879 
   1880 table.closedissue {
   1881   background-color: white;
   1882   border-width: thin;
   1883   border-style: solid;
   1884   border-color: gray;
   1885   color: gray; 
   1886 }
   1887 
   1888 .closed-issue {
   1889   border: solid;
   1890   border-width: thin;
   1891   background-color: lime;
   1892   font-size: small;
   1893   font-weight: bold;
   1894 }
   1895 
   1896 .open-issue {
   1897   border: solid;
   1898   border-width: thin;
   1899   background-color: red;
   1900   font-size: small;
   1901   font-weight: bold;
   1902 }
   1903 
   1904 .editor-issue {
   1905   border: solid;
   1906   border-width: thin;
   1907   background-color: yellow;
   1908   font-size: small;
   1909   font-weight: bold;
   1910 }
   1911 
   1912 @media print {
   1913   .noprint {
   1914     display: none;
   1915   }
   1916 }
   1917 </xsl:template>
   1918 
   1919 
   1920 <!-- generate the index section -->
   1921 
   1922 <xsl:template name="insertSingleIref">
   1923   <xsl:variable name="backlink">#<xsl:value-of select="$anchor-prefix"/>.iref.<xsl:number level="any" /></xsl:variable>
   1924   &#0160;<a href="{$backlink}"><xsl:choose>
   1925       <xsl:when test="@primary='true'"><b><xsl:call-template name="get-section-number" /></b></xsl:when>
   1926       <xsl:otherwise><xsl:call-template name="get-section-number" /></xsl:otherwise>
   1927     </xsl:choose>
   1928   </a><xsl:if test="position()!=last()">, </xsl:if>
   1929 </xsl:template>
   1930 
   1931 
   1932 <xsl:template name="insertIndex">
   1933 
   1934   <!-- insert link to TOC including horizontal rule -->
   1935   <xsl:call-template name="insertTocLink">
   1936     <xsl:with-param name="rule" select="true()" />
   1937   </xsl:call-template> 
   1938 
   1939   <h1>
   1940     <xsl:call-template name="insert-conditional-pagebreak"/>
   1941     <a name="{$anchor-prefix}.index" />Index
   1942   </h1>
   1943 
   1944   <table summary="Index">
   1945 
   1946     <xsl:for-each select="//iref[generate-id(.) = generate-id(key('index-first-letter',translate(substring(@item,1,1),$lcase,$ucase)))]">
   1947       <xsl:sort select="translate(@item,$lcase,$ucase)" />
   1948             
   1949       <tr>
   1950         <td>
   1951           <b><xsl:value-of select="translate(substring(@item,1,1),$lcase,$ucase)" /></b>
   1952         </td>
   1953       </tr>
   1954             
   1955       <xsl:for-each select="key('index-first-letter',translate(substring(@item,1,1),$lcase,$ucase))">
   1956     
   1957         <xsl:sort select="translate(@item,$lcase,$ucase)" />
   1958          
   1959         <xsl:if test="generate-id(.) = generate-id(key('index-item',@item))">
   1960     
   1961           <tr>
   1962             <td>
   1963               &#0160;&#0160;<xsl:value-of select="@item" />&#0160;
   1964                 
   1965               <xsl:for-each select="key('index-item',@item)[not(@subitem) or @subitem='']">
   1966                 <xsl:sort select="translate(@item,$lcase,$ucase)" />
   1967                 <xsl:call-template name="insertSingleIref" />
   1968               </xsl:for-each>
   1969             </td>
   1970           </tr>
   1971                 
   1972           <xsl:for-each select="key('index-item',@item)[@subitem and @subitem!='']">
   1973             <xsl:sort select="translate(@subitem,$lcase,$ucase)" />
   1974             
   1975              <xsl:if test="generate-id(.) = generate-id(key('index-item-subitem',concat(@item,'..',@subitem)))">
   1976             <tr>
   1977               <td>
   1978                 &#0160;&#0160;&#0160;&#0160;<xsl:value-of select="@subitem" />&#0160;
   1979                   
   1980                 <xsl:for-each select="key('index-item-subitem',concat(@item,'..',@subitem))">
   1981                   <xsl:sort select="translate(@item,$lcase,$ucase)" />                    
   1982                   <xsl:call-template name="insertSingleIref" />
   1983                 </xsl:for-each>
   1984               </td>
   1985             </tr>
   1986             </xsl:if>
   1987           </xsl:for-each>
   1988                 
   1989         </xsl:if>
   1990                 
   1991       </xsl:for-each>            
   1992 
   1993     </xsl:for-each>
   1994   </table>
   1995 </xsl:template>
   1996 
   1997 
   1998 
   1999 
   2000 <xsl:template name="insertPreamble" xmlns="">
   2001 
   2002   <section title="Status of this Memo" myns:unnumbered="unnumbered" myns:notoclink="notoclink" anchor="{$anchor-prefix}.status" myns:is-rfc2629="true">
   2003 
   2004   <xsl:choose>
   2005     <xsl:when test="/rfc/@ipr">
   2006       <t myns:is-rfc2629="true">
   2007         <xsl:choose>
   2008           
   2009           <!-- RFC2026 -->
   2010           <xsl:when test="/rfc/@ipr = 'full2026'">
   2011             This document is an Internet-Draft and is 
   2012             in full conformance with all provisions of Section 10 of RFC2026.    
   2013           </xsl:when>
   2014           <xsl:when test="/rfc/@ipr = 'noDerivativeWorks2026'">
   2015             This document is an Internet-Draft and is 
   2016             in full conformance with all provisions of Section 10 of RFC2026
   2017             except that the right to produce derivative works is not granted.   
   2018           </xsl:when>
   2019           <xsl:when test="/rfc/@ipr = 'noDerivativeWorksNow'">
   2020             This document is an Internet-Draft and is 
   2021             in full conformance with all provisions of Section 10 of RFC2026
   2022             except that the right to produce derivative works is not granted.
   2023             (If this document becomes part of an IETF working group activity,
   2024             then it will be brought into full compliance with Section 10 of RFC2026.)  
   2025           </xsl:when>
   2026           <xsl:when test="/rfc/@ipr = 'none'">
   2027             This document is an Internet-Draft and is 
   2028             NOT offered in accordance with Section 10 of RFC2026,
   2029             and the author does not provide the IETF with any rights other
   2030             than to publish as an Internet-Draft.
   2031           </xsl:when>
   2032           
   2033           <!-- RFC3667 -->
   2034           <xsl:when test="/rfc/@ipr = 'full3667'">
   2035             By submitting this Internet-Draft, I certify that any applicable
   2036             patent or other IPR claims of which I am aware have been disclosed,
   2037             and any of which I become aware will be disclosed, in accordance
   2038             with RFC 3668.
   2039           </xsl:when>
   2040           <xsl:when test="/rfc/@ipr = 'noModification3667'">
   2041             By submitting this Internet-Draft, I certify that any applicable
   2042             patent or other IPR claims of which I am aware have been disclosed,
   2043             and any of which I become aware will be disclosed, in accordance
   2044             with RFC 3668. This document may not be modified, and derivative
   2045             works of it may not be created, except to publish it as an RFC and
   2046             to translate it into languages other than English<xsl:if test="/rfc/@iprExtract">,
   2047             other than to extract <xref target="{/rfc/@iprExtract}"/> as-is for separate use.</xsl:if>.
   2048           </xsl:when>
   2049           <xsl:when test="/rfc/@ipr = 'noDerivatives3667'">
   2050             By submitting this Internet-Draft, I certify that any applicable
   2051             patent or other IPR claims of which I am aware have been disclosed,
   2052             and any of which I become aware will be disclosed, in accordance
   2053             with RFC 3668. This document may not be modified, and derivative
   2054             works of it may not be created<xsl:if test="/rfc/@iprExtract">,
   2055             other than to extract <xref target="{/rfc/@iprExtract}"/> as-is for separate use.</xsl:if>..
   2056           </xsl:when>
   2057           
   2058           <xsl:otherwise>CONFORMANCE UNDEFINED.</xsl:otherwise>
   2059         </xsl:choose>
   2060       </t>
   2061       <t myns:is-rfc2629="true">
   2062         Internet-Drafts are working documents of the Internet Engineering
   2063         Task Force (IETF), its areas, and its working groups.
   2064         Note that other groups may also distribute working documents as
   2065         Internet-Drafts.
   2066       </t>
   2067       <t myns:is-rfc2629="true">
   2068         Internet-Drafts are draft documents valid for a maximum of six months
   2069         and may be updated, replaced, or obsoleted by other documents at any time.
   2070         It is inappropriate to use Internet-Drafts as reference material or to cite
   2071         them other than as "work in progress".
   2072       </t>
   2073       <t myns:is-rfc2629="true">
   2074         The list of current Internet-Drafts can be accessed at
   2075         <eref target='http://www.ietf.org/ietf/1id-abstracts.txt' myns:is-rfc2629="true" />.
   2076       </t>
   2077       <t myns:is-rfc2629="true">
   2078         The list of Internet-Draft Shadow Directories can be accessed at
   2079         <eref target='http://www.ietf.org/shadow.html' myns:is-rfc2629="true"/>.
   2080       </t>
   2081       <t myns:is-rfc2629="true">
   2082         This Internet-Draft will expire in <xsl:call-template name="expirydate" />.
   2083       </t>
   2084     </xsl:when>
   2085 
   2086     <xsl:when test="/rfc/@category='bcp'">
   2087       <t myns:is-rfc2629="true">
   2088         This document specifies an Internet Best Current Practices for the Internet
   2089         Community, and requests discussion and suggestions for improvements.
   2090         Distribution of this memo is unlimited.
   2091       </t>
   2092     </xsl:when>
   2093     <xsl:when test="/rfc/@category='exp'">
   2094       <t myns:is-rfc2629="true">
   2095         This memo defines an Experimental Protocol for the Internet community.
   2096         It does not specify an Internet standard of any kind.
   2097         Discussion and suggestions for improvement are requested.
   2098         Distribution of this memo is unlimited.
   2099       </t>
   2100     </xsl:when>
   2101     <xsl:when test="/rfc/@category='historic'">
   2102       <t myns:is-rfc2629="true">
   2103         This memo describes a historic protocol for the Internet community.
   2104         It does not specify an Internet standard of any kind.
   2105         Distribution of this memo is unlimited.
   2106       </t>
   2107     </xsl:when>
   2108     <xsl:when test="/rfc/@category='info' or not(/rfc/@category)">
   2109       <t myns:is-rfc2629="true">
   2110         This memo provides information for the Internet community.
   2111         It does not specify an Internet standard of any kind.
   2112         Distribution of this memo is unlimited.
   2113       </t>
   2114     </xsl:when>
   2115     <xsl:when test="/rfc/@category='std'">
   2116       <t myns:is-rfc2629="true">
   2117         This document specifies an Internet standards track protocol for the Internet
   2118         community, and requests discussion and suggestions for improvements.
   2119         Please refer to the current edition of the &quot;Internet Official Protocol
   2120         Standards&quot; (STD 1) for the standardization state and status of this
   2121         protocol. Distribution of this memo is unlimited.
   2122       </t>
   2123     </xsl:when>
   2124     <xsl:otherwise>
   2125       <t myns:is-rfc2629="true">UNSUPPORTED CATEGORY.</t>
   2126     </xsl:otherwise>
   2127   </xsl:choose>
   2128   
   2129   </section>
   2130 
   2131   <section title="Copyright Notice" myns:unnumbered="unnumbered" myns:notoclink="notoclink" anchor="{$anchor-prefix}.copyrightnotice" myns:is-rfc2629="true">
   2132   <t myns:is-rfc2629="true">
   2133     Copyright (C) The Internet Society (<xsl:value-of select="/rfc/front/date/@year" />). All Rights Reserved.
   2134   </t>
   2135   </section>
   2136   
   2137 </xsl:template>
   2138 
   2139 <!-- TOC generation -->
   2140 
   2141 <xsl:template match="/" mode="toc">
   2142   <xsl:call-template name="insertTocLink">
   2143     <xsl:with-param name="includeTitle" select="true()" />
   2144       <xsl:with-param name="rule" select="true()" />
   2145   </xsl:call-template>
   2146 
   2147   <h1 class="np"> <!-- this pagebreak occurs always -->
   2148     <a name="{$anchor-prefix}.toc">Table of Contents</a>
   2149   </h1>
   2150 
   2151   <p>
   2152     <xsl:apply-templates mode="toc" />
   2153   </p>
   2154 </xsl:template>
   2155 
   2156 <xsl:template name="insertTocLine">
   2157   <xsl:param name="number" />
   2158   <xsl:param name="target" />
   2159   <xsl:param name="title" />
   2160 
   2161   <!-- handle tocdepth parameter -->
   2162   <xsl:choose>  
   2163     <xsl:when test="string-length(translate($number,'.ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890&#167;','.')) &gt;= $parsedTocDepth">
   2164       <!-- dropped entry -->
   2165     </xsl:when>
   2166     <xsl:otherwise>
   2167       <xsl:choose>
   2168         <xsl:when test="starts-with($number,'del-')">
   2169           <xsl:value-of select="'&#160;&#160;&#160;&#160;&#160;&#160;'"/>
   2170           <del>
   2171             <xsl:value-of select="$number" />&#0160;
   2172             <a href="#{$target}"><xsl:value-of select="$title"/></a>
   2173           </del>
   2174         </xsl:when>
   2175         <xsl:when test="$number=''">
   2176           <b>
   2177             &#0160;&#0160;
   2178             <a href="#{$target}"><xsl:value-of select="$title"/></a>
   2179           </b>
   2180         </xsl:when>
   2181         <xsl:otherwise>
   2182           <b>
   2183             <xsl:value-of select="translate($number,'.ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890&#167;','&#160;')"/>
   2184             <xsl:value-of select="$number" />&#0160;
   2185             <a href="#{$target}"><xsl:value-of select="$title"/></a>
   2186           </b>
   2187         </xsl:otherwise>
   2188       </xsl:choose>
   2189       <br />
   2190     </xsl:otherwise>
   2191   </xsl:choose>
   2192 </xsl:template>
   2193 
   2194 
   2195 <xsl:template match="back" mode="toc">
   2196 
   2197   <xsl:apply-templates select="references" mode="toc" />
   2198   <xsl:apply-templates select="/rfc/front" mode="toc" />
   2199   <xsl:apply-templates select="*[not(self::references)]" mode="toc" />
   2200 
   2201   <!-- copyright statements -->
   2202   <xsl:if test="not($xml2rfc-private)">
   2203     <xsl:call-template name="insertTocLine">
   2204       <xsl:with-param name="number" select="'&#167;'"/>
   2205       <xsl:with-param name="target" select="concat($anchor-prefix,'.ipr')"/>
   2206       <xsl:with-param name="title" select="'Intellectual Property and Copyright Statements'"/>
   2207     </xsl:call-template>
   2208   </xsl:if>
   2209   
   2210   <!-- insert the index if index entries exist -->
   2211   <xsl:if test="//iref">
   2212     <xsl:call-template name="insertTocLine">
   2213       <xsl:with-param name="number" select="'&#167;'"/>
   2214       <xsl:with-param name="target" select="concat($anchor-prefix,'.index')"/>
   2215       <xsl:with-param name="title" select="'Index'"/>
   2216     </xsl:call-template>
   2217   </xsl:if>
   2218 
   2219 </xsl:template>
   2220 
   2221 <xsl:template match="front" mode="toc">
   2222 
   2223   <xsl:variable name="title">
   2224     <xsl:if test="count(author)=1">Author's Address</xsl:if>
   2225     <xsl:if test="count(author)!=1">Author's Addresses</xsl:if>
   2226   </xsl:variable>
   2227 
   2228   <xsl:call-template name="insertTocLine">
   2229     <xsl:with-param name="number" select="'&#167;'"/>
   2230     <xsl:with-param name="target" select="concat($anchor-prefix,'.authors')"/>
   2231     <xsl:with-param name="title" select="$title"/>
   2232   </xsl:call-template>
   2233 
   2234 </xsl:template>
   2235 
   2236 <xsl:template match="references" mode="toc">
   2237 
   2238   <xsl:variable name="num">
   2239     <xsl:choose>
   2240       <xsl:when test="not(preceding::references)" />
   2241       <xsl:otherwise>
   2242         <xsl:text>.</xsl:text><xsl:number/>      
   2243       </xsl:otherwise>
   2244     </xsl:choose>
   2245   </xsl:variable>
   2246 
   2247   <xsl:variable name="title">
   2248     <xsl:choose>
   2249       <xsl:when test="@title!=''"><xsl:value-of select="@title" /></xsl:when>
   2250       <xsl:otherwise>References</xsl:otherwise>
   2251     </xsl:choose>
   2252   </xsl:variable>
   2253 
   2254   <xsl:call-template name="insertTocLine">
   2255     <xsl:with-param name="number" select="'&#167;'"/>
   2256     <xsl:with-param name="target" select="concat($anchor-prefix,'.references',$num)"/>
   2257     <xsl:with-param name="title" select="$title"/>
   2258   </xsl:call-template>
   2259 
   2260 </xsl:template>
   2261 
   2262 <xsl:template match="section" mode="toc">
   2263   <xsl:variable name="sectionNumber">
   2264     <xsl:call-template name="get-section-number" />
   2265   </xsl:variable>
   2266 
   2267   <xsl:variable name="target">
   2268     <xsl:choose>
   2269       <xsl:when test="@anchor"><xsl:value-of select="@anchor" /></xsl:when>
   2270        <xsl:otherwise><xsl:value-of select="$anchor-prefix"/>.section.<xsl:value-of select="$sectionNumber" /></xsl:otherwise>
   2271     </xsl:choose>
   2272   </xsl:variable>
   2273 
   2274   <xsl:call-template name="insertTocLine">
   2275     <xsl:with-param name="number" select="$sectionNumber"/>
   2276     <xsl:with-param name="target" select="$target"/>
   2277     <xsl:with-param name="title" select="@title"/>
   2278   </xsl:call-template>
   2279 
   2280   <xsl:apply-templates mode="toc" />
   2281 </xsl:template>
   2282 
   2283 <xsl:template match="middle" mode="toc">
   2284   <xsl:apply-templates mode="toc" />
   2285 </xsl:template>
   2286 
   2287 <xsl:template match="rfc" mode="toc">
   2288   <xsl:apply-templates select="middle|back" mode="toc" />
   2289 </xsl:template>
   2290 
   2291 <xsl:template match="ed:del|ed:ins|ed:replace" mode="toc">
   2292   <xsl:apply-templates mode="toc" />
   2293 </xsl:template>
   2294 
   2295 <xsl:template match="*" mode="toc" />
   2296 
   2297 
   2298 <xsl:template name="insertTocAppendix">
   2299   
   2300   <xsl:if test="//figure[@title!='' or @anchor!='']">
   2301     <p>
   2302       <xsl:for-each select="//figure[@title!='' or @anchor!='']">
   2303         <xsl:variable name="title">Figure <xsl:value-of select="position()"/><xsl:if test="@title">: <xsl:value-of select="@title"/></xsl:if>
   2304         </xsl:variable>
   2305         <xsl:call-template name="insertTocLine">
   2306           <xsl:with-param name="target" select="concat($anchor-prefix,'.figure.',position())" />
   2307           <xsl:with-param name="title" select="$title" />
   2308         </xsl:call-template>
   2309       </xsl:for-each>
   2310     </p>
   2311   </xsl:if>
   2312   
   2313   <!-- experimental -->
   2314   <xsl:if test="//ed:issue">
   2315     <xsl:call-template name="insertIssuesList" />
   2316   </xsl:if>
   2317 
   2318 </xsl:template>
   2319 
   2320 <xsl:template name="insertTocLink">
   2321   <xsl:param name="includeTitle" select="false()" />
   2322   <xsl:param name="rule" />
   2323   <xsl:if test="$rule"><hr class="noprint"/></xsl:if>
   2324   <xsl:if test="$includeTitle or $xml2rfc-toc='yes'">
   2325     <table summary="link to TOC" class="noprint" style="margin-left: auto; margin-right: 0; float: right; width: 2.5em;">
   2326       <xsl:if test="$includeTitle">
   2327         <tr>
   2328           <td style="background-color: #000000; text-align: center; vertical-align: middle; height: 2.5em;">
   2329             <b><span class="RFC">&#0160;RFC&#0160;</span></b>
   2330             <xsl:if test="/rfc/@number">
   2331               <br />
   2332               <span class="hotText"><xsl:value-of select="/rfc/@number"/></span>
   2333             </xsl:if>
   2334           </td>
   2335         </tr>
   2336       </xsl:if>
   2337       <xsl:if test="$xml2rfc-toc='yes'">
   2338         <tr>
   2339           <td style="background-color: #990000; text-align: center; height: 1.5em;">
   2340             <a href="#{$anchor-prefix}.toc"><b class="link2">&#0160;TOC&#0160;</b></a>
   2341           </td>
   2342         </tr>
   2343       </xsl:if>
   2344     </table>
   2345   </xsl:if>
   2346 </xsl:template>
   2347 
   2348 
   2349 <xsl:template name="referencename">
   2350   <xsl:param name="node" />
   2351   <xsl:choose>
   2352     <xsl:when test="$xml2rfc-symrefs='yes'">[<xsl:value-of select="$node/@anchor" />]</xsl:when>
   2353     <xsl:otherwise><xsl:for-each select="$node">[<xsl:number level="any" />]</xsl:for-each></xsl:otherwise>
   2354   </xsl:choose>
   2355 </xsl:template>
   2356 
   2357 
   2358 
   2359 <xsl:template name="replace-substring">
   2360 
   2361   <xsl:param name="string" />
   2362   <xsl:param name="replace" />
   2363   <xsl:param name="by" />
   2364 
   2365   <xsl:choose>
   2366     <xsl:when test="contains($string,$replace)">
   2367       <xsl:value-of select="concat(substring-before($string, $replace),$by)" />
   2368       <xsl:call-template name="replace-substring">
   2369         <xsl:with-param name="string" select="substring-after($string,$replace)" />
   2370         <xsl:with-param name="replace" select="$replace" />
   2371         <xsl:with-param name="by" select="$by" />
   2372       </xsl:call-template>
   2373     </xsl:when>
   2374     <xsl:otherwise><xsl:value-of select="$string" /></xsl:otherwise>
   2375   </xsl:choose>
   2376 
   2377 </xsl:template>
   2378 
   2379 <xsl:template name="showArtworkLine">
   2380   <xsl:param name="line" />
   2381   <xsl:param name="mode" />
   2382   
   2383   <xsl:variable name="maxw" select="69" />
   2384   
   2385   <xsl:if test="string-length($line) &gt; $maxw">
   2386     <xsl:message>Artwork exceeds maximum width: <xsl:value-of select="$line" /></xsl:message>
   2387   </xsl:if>
   2388   
   2389   <xsl:choose>
   2390     <xsl:when test="$mode='html'">
   2391       <xsl:value-of select="substring($line,0,$maxw)" />
   2392       <xsl:if test="string-length($line) &gt;= $maxw">
   2393         <span class="toowide"><xsl:value-of select="substring($line,$maxw)" /></span>
   2394       </xsl:if>
   2395       <xsl:text>&#10;</xsl:text>
   2396     </xsl:when>
   2397     <xsl:when test="$mode='wordml'">
   2398       <r xmlns="http://schemas.microsoft.com/office/word/2003/wordml">
   2399         <t><xsl:value-of select="translate($line,' ','&#160;')"/></t>
   2400       </r>
   2401     </xsl:when>
   2402     <xsl:when test="$mode='nroff'">
   2403       <xsl:variable name="cline">
   2404         <xsl:call-template name="replace-substring">
   2405           <xsl:with-param name="string" select="$line" />
   2406           <xsl:with-param name="replace" select="'\'" />
   2407           <xsl:with-param name="by" select="'\\'" />
   2408         </xsl:call-template>
   2409       </xsl:variable>
   2410       <xsl:value-of select="concat($cline,'&#10;')" />
   2411     </xsl:when>
   2412     <xsl:otherwise><xsl:value-of select="concat($line,'&#10;')" /></xsl:otherwise>
   2413   </xsl:choose>
   2414   
   2415 </xsl:template>
   2416 
   2417 <xsl:template name="showArtwork">
   2418   <xsl:param name="mode" />
   2419   <xsl:param name="text" />
   2420   <xsl:param name="initial" />
   2421   <xsl:variable name="delim" select="'&#10;'" />
   2422   <xsl:variable name="first" select="substring-before($text,$delim)" />
   2423   <xsl:variable name="remainder" select="substring-after($text,$delim)" />
   2424   
   2425   <xsl:choose>
   2426     <xsl:when test="not(contains($text,$delim))">
   2427       <xsl:call-template name="showArtworkLine">
   2428         <xsl:with-param name="line" select="$text" />
   2429         <xsl:with-param name="mode" select="$mode" />
   2430       </xsl:call-template>
   2431     </xsl:when>
   2432     <xsl:otherwise>
   2433       <!-- suppress empty initial lines -->
   2434       <xsl:if test="$initial!='yes' or normalize-space($first)!=''">
   2435         <xsl:call-template name="showArtworkLine">
   2436           <xsl:with-param name="line" select="$first" />
   2437           <xsl:with-param name="mode" select="$mode" />
   2438         </xsl:call-template>
   2439         <xsl:if test="$mode='wordml' and $remainder!=''">
   2440           <r xmlns="http://schemas.microsoft.com/office/word/2003/wordml">
   2441             <br />
   2442           </r>
   2443         </xsl:if>
   2444       </xsl:if>
   2445       <xsl:if test="$remainder!=''">
   2446         <xsl:call-template name="showArtwork">
   2447           <xsl:with-param name="text" select="$remainder" />
   2448           <xsl:with-param name="mode" select="$mode" />
   2449         </xsl:call-template>
   2450       </xsl:if>
   2451     </xsl:otherwise>
   2452   </xsl:choose>
   2453   
   2454 </xsl:template>
   2455 
   2456 
   2457 <!--<xsl:template name="dump">
   2458   <xsl:param name="text" />
   2459   <xsl:variable name="c" select="substring($text,1,1)"/>
   2460   <xsl:choose>
   2461     <xsl:when test="$c='&#9;'">&amp;#9;</xsl:when>
   2462     <xsl:when test="$c='&#10;'">&amp;#10;</xsl:when>
   2463     <xsl:when test="$c='&#13;'">&amp;#13;</xsl:when>
   2464     <xsl:when test="$c='&amp;'">&amp;amp;</xsl:when>
   2465     <xsl:otherwise><xsl:value-of select="$c" /></xsl:otherwise>
   2466   </xsl:choose>
   2467   <xsl:if test="string-length($text) &gt; 1">
   2468     <xsl:call-template name="dump">
   2469       <xsl:with-param name="text" select="substring($text,2)" />
   2470     </xsl:call-template>
   2471   </xsl:if>
   2472 </xsl:template>-->
   2473 
   2474 
   2475 <xsl:template name="rfclist">
   2476   <xsl:param name="list" />
   2477   <xsl:choose>
   2478     <xsl:when test="contains($list,',')">
   2479       <xsl:variable name="rfcNo" select="substring-before($list,',')" />
   2480       <a href="{concat($rfcUrlPrefix,$rfcNo,'.txt')}"><xsl:value-of select="$rfcNo" /></a>,
   2481       <xsl:call-template name="rfclist">
   2482         <xsl:with-param name="list" select="normalize-space(substring-after($list,','))" />
   2483       </xsl:call-template>
   2484     </xsl:when>
   2485     <xsl:otherwise>
   2486       <xsl:variable name="rfcNo" select="$list" />
   2487       <a href="{concat($rfcUrlPrefix,$rfcNo,'.txt')}"><xsl:value-of select="$rfcNo" /></a>
   2488     </xsl:otherwise>
   2489   </xsl:choose>
   2490 </xsl:template>
   2491 
   2492 <xsl:template name="rfclist-for-dcmeta">
   2493   <xsl:param name="list" />
   2494   <xsl:choose>
   2495     <xsl:when test="contains($list,',')">
   2496       <xsl:variable name="rfcNo" select="substring-before($list,',')" />
   2497       <meta name="DC.Relation.Replaces" content="urn:ietf:rfc:{$rfcNo}" />
   2498       <xsl:call-template name="rfclist-for-dcmeta">
   2499         <xsl:with-param name="list" select="normalize-space(substring-after($list,','))" />
   2500       </xsl:call-template>
   2501     </xsl:when>
   2502     <xsl:otherwise>
   2503       <xsl:variable name="rfcNo" select="$list" />
   2504       <meta name="DC.Relation.Replaces" content="urn:ietf:rfc:{$rfcNo}" />
   2505     </xsl:otherwise>
   2506   </xsl:choose>
   2507 </xsl:template>
   2508 
   2509 <xsl:template name="sectionnumberPara">
   2510   <!-- get section number of ancestor section element, then add t or figure number -->
   2511   <xsl:if test="ancestor::section and not(ancestor::section[@myns:unnumbered='unnumbered'])">
   2512     <xsl:for-each select="ancestor::section[1]"><xsl:call-template name="get-section-number" />.p.</xsl:for-each><xsl:number count="t|figure" />
   2513   </xsl:if>
   2514 </xsl:template>
   2515 
   2516 <xsl:template name="editingMark">
   2517   <xsl:if test="$xml2rfc-editing='yes' and ancestor::rfc">
   2518     <sup class="editingmark"><span><xsl:number level="any" count="postamble|preamble|t"/></span>&#0160;</sup>
   2519   </xsl:if>
   2520 </xsl:template>
   2521 
   2522 <!-- experimental annotation support -->
   2523 
   2524 <xsl:template match="ed:issue">
   2525   <xsl:variable name="class">
   2526     <xsl:choose>
   2527       <xsl:when test="@status='closed'">closedissue</xsl:when>
   2528       <xsl:otherwise>openissue</xsl:otherwise>
   2529     </xsl:choose>
   2530   </xsl:variable>
   2531   
   2532   <table summary="issue {@name}" class="{$class}">
   2533     <tr>
   2534       <td colspan="3">
   2535         <a name="{$anchor-prefix}.issue.{@name}">
   2536           <xsl:choose>
   2537             <xsl:when test="@status='closed'">
   2538               <xsl:attribute name="class">closed-issue</xsl:attribute>
   2539             </xsl:when>
   2540             <xsl:when test="@status='editor'">
   2541               <xsl:attribute name="class">editor-issue</xsl:attribute>
   2542             </xsl:when>
   2543             <xsl:otherwise>
   2544               <xsl:attribute name="class">open-issue</xsl:attribute>
   2545             </xsl:otherwise>
   2546           </xsl:choose>
   2547           <xsl:text>&#160;i&#160;</xsl:text>
   2548         </a>
   2549         <xsl:text>&#160;</xsl:text>
   2550         <xsl:choose>
   2551           <xsl:when test="@href">
   2552             <em><a href="{@href}"><xsl:value-of select="@name" /></a></em>
   2553           </xsl:when>
   2554           <xsl:otherwise>
   2555             <em><xsl:value-of select="@name" /></em>
   2556           </xsl:otherwise>
   2557         </xsl:choose>
   2558         &#0160;
   2559         (type: <xsl:value-of select="@type"/>, status: <xsl:value-of select="@status"/>)
   2560       </td>
   2561     </tr>
   2562     <xsl:for-each select="ed:item">
   2563       <tr>
   2564         <td class="top">
   2565           <a href="mailto:{@entered-by}?subject={/rfc/@docName}, {../@name}"><i><xsl:value-of select="@entered-by"/></i></a>
   2566         </td>
   2567         <td class="topnowrap">
   2568           <xsl:value-of select="@date"/>
   2569         </td>
   2570         <td class="top">
   2571           <xsl:call-template name="copynodes">
   2572             <xsl:with-param name="nodes" select="node()" />
   2573           </xsl:call-template>
   2574         </td>
   2575       </tr>
   2576     </xsl:for-each>
   2577     <xsl:for-each select="ed:resolution">
   2578       <tr>
   2579         <td class="top">
   2580           <xsl:if test="@entered-by">
   2581             <a href="mailto:{@entered-by}?subject={/rfc/@docName}, {../@name}"><i><xsl:value-of select="@entered-by"/></i></a>
   2582           </xsl:if>
   2583         </td>
   2584         <td class="topnowrap">
   2585           <xsl:value-of select="@datetime"/>
   2586         </td>
   2587         <td class="top">
   2588           <em>Resolution:</em>&#0160;<xsl:copy-of select="node()" />
   2589         </td>
   2590       </tr>
   2591     </xsl:for-each>      
   2592   </table>
   2593     
   2594 </xsl:template>
   2595 
   2596 <xsl:template name="insertIssuesList">
   2597 
   2598   <h2><a name="{$anchor-prefix}.issues-list">Issues list</a></h2>
   2599   <table summary="Issues list">
   2600     <xsl:for-each select="//ed:issue">
   2601       <xsl:sort select="@status" />
   2602       <xsl:sort select="@name" />
   2603       <tr>
   2604         <td><a href="#{$anchor-prefix}.issue.{@name}"><xsl:value-of select="@name" /></a></td>
   2605         <td><xsl:value-of select="@type" /></td>
   2606         <td><xsl:value-of select="@status" /></td>
   2607         <td><xsl:value-of select="ed:item[1]/@date" /></td>
   2608         <td><a href="mailto:{ed:item[1]/@entered-by}?subject={/rfc/@docName}, {@name}"><xsl:value-of select="ed:item[1]/@entered-by" /></a></td>
   2609       </tr>
   2610     </xsl:for-each>
   2611   </table>
   2612   
   2613 </xsl:template>
   2614 
   2615 <xsl:template name="formatTitle">
   2616   <xsl:if test="@who">
   2617     <xsl:value-of select="@who" />
   2618   </xsl:if>
   2619   <xsl:if test="@datetime">
   2620     <xsl:value-of select="concat(' (',@datetime,')')" />
   2621   </xsl:if>
   2622   <xsl:if test="@reason">
   2623     <xsl:value-of select="concat(': ',@reason)" />
   2624   </xsl:if>
   2625   <xsl:if test="@cite">
   2626     <xsl:value-of select="concat(' &lt;',@cite,'&gt;')" />
   2627   </xsl:if>
   2628 </xsl:template>
   2629 
   2630 <xsl:template name="insert-diagnostics">
   2631   
   2632   <!-- check anchor names -->
   2633   <xsl:variable name="badAnchors" select="//*[starts-with(@anchor,concat($anchor-prefix,'.'))]" />
   2634   <xsl:if test="$badAnchors">
   2635     <p class="warning">
   2636       The following anchor names may collide with internally generated anchors because of their prefix "<xsl:value-of select="$anchor-prefix" />":
   2637       <xsl:for-each select="$badAnchors">
   2638         <xsl:value-of select="@anchor"/><xsl:if test="position()!=last()">, </xsl:if>
   2639       </xsl:for-each>
   2640     </p>
   2641     <xsl:message>
   2642       The following anchor names may collide with internally generated anchors because of their prefix "<xsl:value-of select="$anchor-prefix" />":
   2643       <xsl:for-each select="$badAnchors">
   2644         <xsl:value-of select="@anchor"/><xsl:if test="position()!=last()">, </xsl:if>
   2645       </xsl:for-each>
   2646     </xsl:message>
   2647   </xsl:if>
   2648   
   2649   <!-- check IDs -->
   2650   <xsl:variable name="badTargets" select="//xref[not(@target=//@anchor) and not(ancestor::ed:del)]" />
   2651   <xsl:if test="$badTargets">
   2652     <p class="error">
   2653       The following target names do not exist:
   2654       <xsl:for-each select="$badTargets">
   2655         <xsl:value-of select="@target"/><xsl:if test="position()!=last()">, </xsl:if>
   2656       </xsl:for-each>
   2657     </p>
   2658     <xsl:message>
   2659       The following target names do not exist:
   2660       <xsl:for-each select="$badTargets">
   2661         <xsl:value-of select="@target"/><xsl:if test="position()!=last()">, </xsl:if>
   2662       </xsl:for-each>
   2663     </xsl:message>
   2664   </xsl:if>
   2665  
   2666   
   2667 </xsl:template>
   2668 
   2669 <!-- special change mark support, not supported by RFC2629 yet -->
   2670 
   2671 <xsl:template match="@ed:*" />
   2672 
   2673 <xsl:template match="ed:del">
   2674   <xsl:call-template name="insert-issue-pointer"/>
   2675   <del>
   2676     <xsl:copy-of select="@*[namespace-uri()='']"/>
   2677     <xsl:if test="not(@title) and ancestor-or-self::*[@ed:entered-by] and @datetime">
   2678       <xsl:attribute name="title"><xsl:value-of select="concat(@datetime,', ',ancestor-or-self::*[@ed:entered-by][1]/@ed:entered-by)"/></xsl:attribute>
   2679     </xsl:if>
   2680     <xsl:apply-templates />
   2681   </del>
   2682 </xsl:template>
   2683 
   2684 <xsl:template match="ed:ins">
   2685   <xsl:call-template name="insert-issue-pointer"/>
   2686   <ins>
   2687     <xsl:copy-of select="@*[namespace-uri()='']"/>
   2688     <xsl:if test="not(@title) and ancestor-or-self::*[@ed:entered-by] and @datetime">
   2689       <xsl:attribute name="title"><xsl:value-of select="concat(@datetime,', ',ancestor-or-self::*[@ed:entered-by][1]/@ed:entered-by)"/></xsl:attribute>
   2690     </xsl:if>
   2691     <xsl:apply-templates />
   2692   </ins>
   2693 </xsl:template>
   2694 
   2695 <xsl:template name="insert-issue-pointer">
   2696   <xsl:if test="@ed:resolves">
   2697     <xsl:variable name="resolves" select="@ed:resolves"/>
   2698     <xsl:choose>
   2699       <xsl:when test="not(ancestor::t)">
   2700         <div><a class="open-issue" href="#{$anchor-prefix}.issue.{$resolves}" title="resolves: {$resolves}">
   2701           <xsl:choose>
   2702             <xsl:when test="//ed:issue[@name=$resolves and @status='closed']">
   2703               <xsl:attribute name="class">closed-issue</xsl:attribute>
   2704             </xsl:when>
   2705             <xsl:when test="//ed:issue[@name=$resolves and @status='editor']">
   2706               <xsl:attribute name="class">editor-issue</xsl:attribute>
   2707             </xsl:when>
   2708             <xsl:otherwise>
   2709               <xsl:attribute name="class">open-issue</xsl:attribute>
   2710             </xsl:otherwise>
   2711           </xsl:choose>
   2712           <xsl:text>&#160;i&#160;</xsl:text>
   2713         </a></div>
   2714       </xsl:when>
   2715       <xsl:otherwise>
   2716         <a class="open-issue" href="#{$anchor-prefix}.issue.{$resolves}" title="resolves: {$resolves}">
   2717           <xsl:choose>
   2718             <xsl:when test="//ed:issue[@name=$resolves and @status='closed']">
   2719               <xsl:attribute name="class">closed-issue</xsl:attribute>
   2720             </xsl:when>
   2721             <xsl:when test="//ed:issue[@name=$resolves and @status='editor']">
   2722               <xsl:attribute name="class">editor-issue</xsl:attribute>
   2723             </xsl:when>
   2724             <xsl:otherwise>
   2725               <xsl:attribute name="class">open-issue</xsl:attribute>
   2726             </xsl:otherwise>
   2727           </xsl:choose>
   2728           <xsl:text>&#160;i&#160;</xsl:text>
   2729         </a>
   2730       </xsl:otherwise>
   2731     </xsl:choose>
   2732   </xsl:if>
   2733 </xsl:template>
   2734 
   2735 <xsl:template match="ed:replace">
   2736   <xsl:if test="@cite">
   2737     <a class="editor-issue" href="{@cite}" target="_blank" title="see {@cite}">
   2738       <xsl:text>&#160;i&#160;</xsl:text>
   2739     </a>
   2740   </xsl:if>
   2741   <xsl:call-template name="insert-issue-pointer"/>
   2742   <xsl:if test="ed:del">
   2743     <del>
   2744       <xsl:copy-of select="@*[namespace-uri()='']"/>
   2745       <xsl:if test="not(@title) and ancestor-or-self::*[@ed:entered-by] and @datetime">
   2746         <xsl:attribute name="title"><xsl:value-of select="concat(@datetime,', ',ancestor-or-self::*[@ed:entered-by][1]/@ed:entered-by)"/></xsl:attribute>
   2747       </xsl:if>
   2748       <xsl:apply-templates select="ed:del/node()" />
   2749     </del>
   2750   </xsl:if>
   2751   <xsl:if test="ed:ins">
   2752     <ins>
   2753       <xsl:copy-of select="@*[namespace-uri()='']"/>
   2754       <xsl:if test="not(@title) and ancestor-or-self::*[@ed:entered-by] and @datetime">
   2755         <xsl:attribute name="title"><xsl:value-of select="concat(@datetime,', ',ancestor-or-self::*[@ed:entered-by][1]/@ed:entered-by)"/></xsl:attribute>
   2756       </xsl:if>
   2757       <xsl:apply-templates select="ed:ins/node()" />
   2758     </ins>
   2759   </xsl:if>
   2760 </xsl:template>
   2761 
   2762 <!-- convenience template for helping Mozilla (pre/ins inheritance problem) -->
   2763 <xsl:template name="insertInsDelClass">
   2764   <xsl:if test="ancestor::ed:del">
   2765     <xsl:attribute name="class">del</xsl:attribute>
   2766   </xsl:if>
   2767   <xsl:if test="ancestor::ed:ins">
   2768     <xsl:attribute name="class">ins</xsl:attribute>
   2769   </xsl:if>
   2770 </xsl:template>
   2771 
   2772 
   2773 <xsl:template name="sectionnumberAndEdits">
   2774   <xsl:choose>
   2775     <xsl:when test="ancestor::ed:del">del-<xsl:number count="ed:del//section" level="any"/></xsl:when>
   2776     <xsl:when test="self::section and parent::ed:ins and local-name(../..)='replace'">
   2777       <xsl:for-each select="../.."><xsl:call-template name="sectionnumberAndEdits" /></xsl:for-each>
   2778       <xsl:for-each select="..">
   2779         <xsl:if test="parent::ed:replace">
   2780           <xsl:for-each select="..">
   2781             <xsl:if test="parent::section">.</xsl:if><xsl:value-of select="1+count(preceding-sibling::section|preceding-sibling::ed:ins/section|preceding-sibling::ed:replace/ed:ins/section)" />
   2782           </xsl:for-each>
   2783         </xsl:if>
   2784       </xsl:for-each>
   2785     </xsl:when>
   2786     <xsl:when test="self::section[parent::ed:ins]">
   2787       <xsl:for-each select="../.."><xsl:call-template name="sectionnumberAndEdits" /></xsl:for-each>
   2788       <xsl:for-each select="..">
   2789         <xsl:if test="parent::section">.</xsl:if><xsl:value-of select="1+count(preceding-sibling::section|preceding-sibling::ed:ins/section|preceding-sibling::ed:replace/ed:ins/section)" />
   2790       </xsl:for-each>
   2791     </xsl:when>
   2792     <xsl:when test="self::section">
   2793       <xsl:for-each select=".."><xsl:call-template name="sectionnumberAndEdits" /></xsl:for-each>
   2794       <xsl:if test="parent::section">.</xsl:if>
   2795       <xsl:choose>
   2796         <xsl:when test="parent::back">
   2797           <xsl:number format="A" value="1+count(preceding-sibling::section|preceding-sibling::ed:ins/section|preceding-sibling::ed:replace/ed:ins/section)" />
   2798         </xsl:when>
   2799         <xsl:otherwise>
   2800           <xsl:number value="1+count(preceding-sibling::section|preceding-sibling::ed:ins/section|preceding-sibling::ed:replace/ed:ins/section)" />
   2801         </xsl:otherwise>
   2802       </xsl:choose>
   2803     </xsl:when>
   2804     <xsl:when test="self::middle or self::back"><!-- done --></xsl:when>
   2805     <xsl:otherwise>
   2806       <!-- go up one level -->
   2807       <xsl:for-each select=".."><xsl:call-template name="sectionnumberAndEdits" /></xsl:for-each>
   2808     </xsl:otherwise>
   2809   </xsl:choose>
   2810 </xsl:template>
   2811 
   2812 <!-- experimental table formatting -->
   2813 
   2814 <xsl:template match="texttable">
   2815   <xsl:apply-templates select="preamble" />
   2816   <table summary="{preamble}" border="1" cellpadding="3" cellspacing="0">
   2817     <thead>
   2818       <tr>
   2819         <xsl:apply-templates select="ttcol" />
   2820       </tr>
   2821     </thead>
   2822     <tbody>
   2823       <xsl:variable name="columns" select="count(ttcol)" />
   2824       <xsl:for-each select="c[(position() mod $columns) = 1]">
   2825         <tr>
   2826           <xsl:for-each select=". | following-sibling::c[position() &lt; $columns]">
   2827             <td class="top">
   2828               <xsl:variable name="pos" select="position()" />
   2829               <xsl:variable name="col" select="../ttcol[position() = $pos]" />
   2830               <xsl:if test="$col/@align">
   2831                 <xsl:attribute name="style">text-align: <xsl:value-of select="$col/@align" />;</xsl:attribute>
   2832               </xsl:if>
   2833               <xsl:apply-templates select="node()" />
   2834               &#0160;
   2835             </td>
   2836           </xsl:for-each>
   2837         </tr>
   2838       </xsl:for-each>
   2839     </tbody>
   2840   </table>
   2841   <xsl:apply-templates select="postamble" />
   2842 </xsl:template>
   2843 
   2844 <xsl:template match="ttcol">
   2845   <th valign="top">
   2846     <xsl:variable name="width">
   2847       <xsl:if test="@width">width: <xsl:value-of select="@width" />; </xsl:if>
   2848     </xsl:variable>
   2849     <xsl:variable name="align">
   2850       <xsl:choose>
   2851         <xsl:when test="@align">text-align: <xsl:value-of select="@align" />;</xsl:when>
   2852         <xsl:otherwise>text-align: left;</xsl:otherwise>
   2853       </xsl:choose>
   2854     </xsl:variable>
   2855     <xsl:attribute name="style"><xsl:value-of select="concat($width,$align)" /></xsl:attribute>
   2856     <xsl:apply-templates />
   2857   </th>
   2858 </xsl:template>
   2859 
   2860 <!-- Chapter Link Generation -->
   2861 
   2862 <xsl:template match="*" mode="links"><xsl:apply-templates mode="links"/></xsl:template>
   2863 <xsl:template match="text()" mode="links" />
   2864 
   2865 <xsl:template match="/*/middle//section[not(myns:unnumbered) and not(ancestor::section)]" mode="links">
   2866   <xsl:variable name="sectionNumber"><xsl:call-template name="get-section-number" /></xsl:variable>
   2867   <link rel="Chapter" title="{$sectionNumber} {@title}" href="#{$anchor-prefix}.section.{$sectionNumber}" />
   2868   <xsl:apply-templates mode="links" />
   2869 </xsl:template>
   2870 
   2871 <xsl:template match="/*/back//section[not(myns:unnumbered) and not(ancestor::section)]" mode="links">
   2872   <xsl:variable name="sectionNumber"><xsl:call-template name="get-section-number" /></xsl:variable>
   2873   <link rel="Appendix" title="{$sectionNumber} {@title}" href="#{$anchor-prefix}.section.{$sectionNumber}" />
   2874   <xsl:apply-templates mode="links" />
   2875 </xsl:template>
   2876 
   2877 <!-- convenience templates -->
   2878 
   2879 <xsl:template name="get-author-summary">
   2880   <xsl:choose>
   2881     <xsl:when test="count(/rfc/front/author)=1">
   2882       <xsl:value-of select="/rfc/front/author[1]/@surname" />
   2883     </xsl:when>
   2884     <xsl:when test="count(/rfc/front/author)=2">
   2885       <xsl:value-of select="concat(/rfc/front/author[1]/@surname,' &amp; ',/rfc/front/author[2]/@surname)" />
   2886     </xsl:when>
   2887     <xsl:otherwise>
   2888       <xsl:value-of select="concat(/rfc/front/author[1]/@surname,', et al.')" />
   2889     </xsl:otherwise>
   2890   </xsl:choose>
   2891 </xsl:template>
   2892 
   2893 <xsl:template name="get-authors">
   2894   <xsl:for-each select="/rfc/front/author">
   2895     <xsl:value-of select="@fullname" />
   2896     <xsl:if test="position()!=last()">, </xsl:if>
   2897   </xsl:for-each>
   2898 </xsl:template>
   2899 
   2900 <xsl:template name="get-category-long">
   2901   <xsl:choose>
   2902     <xsl:when test="$xml2rfc-footer"><xsl:value-of select="$xml2rfc-footer" /></xsl:when>
   2903     <xsl:when test="$xml2rfc-private"/> <!-- private draft, footer not set -->
   2904     <xsl:when test="/rfc/@category='bcp'">Best Current Practice</xsl:when>
   2905     <xsl:when test="/rfc/@category='historic'">Historic</xsl:when>
   2906     <xsl:when test="/rfc/@category='info' or not(/rfc/@category)">Informational</xsl:when>
   2907     <xsl:when test="/rfc/@category='std'">Standards Track</xsl:when>
   2908     <xsl:when test="/rfc/@category='exp'">Experimental</xsl:when>
   2909     <xsl:otherwise>(category unknown)</xsl:otherwise>
   2910   </xsl:choose>
   2911 </xsl:template>
   2912 
   2913 <xsl:template name="get-header-center">
   2914   <xsl:choose>
   2915     <xsl:when test="string-length(/rfc/front/title/@abbrev) &gt; 0">
   2916       <xsl:value-of select="/rfc/front/title/@abbrev" />
   2917     </xsl:when>
   2918     <xsl:otherwise>
   2919       <xsl:value-of select="/rfc/front/title" />
   2920     </xsl:otherwise>
   2921   </xsl:choose>
   2922 </xsl:template>
   2923 
   2924 <xsl:template name="get-header-left">
   2925   <xsl:choose>
   2926     <xsl:when test="$xml2rfc-header"><xsl:value-of select="$xml2rfc-header" /></xsl:when>
   2927     <xsl:when test="$xml2rfc-private"/> <!-- private draft, header not set -->
   2928     <xsl:when test="/rfc/@ipr">INTERNET DRAFT</xsl:when>
   2929     <xsl:otherwise>RFC <xsl:value-of select="/rfc/@number"/></xsl:otherwise>
   2930   </xsl:choose>
   2931 </xsl:template>
   2932 
   2933 <xsl:template name="get-generator">
   2934   <xsl:variable name="gen">
   2935     <xsl:text>http://greenbytes.de/tech/webdav/rfc2629.xslt, </xsl:text>
   2936     <!-- when RCS keyword substitution in place, add version info -->
   2937     <xsl:if test="contains('$Revision: 1.149 $',':')">
   2938       <xsl:value-of select="concat('Revision ',normalize-space(translate(substring-after('$Revision: 1.149 $', 'Revision: '),'$','')),', ')" />
   2939     </xsl:if>
   2940     <xsl:value-of select="concat('XSLT vendor: ',system-property('xsl:vendor'),' ',system-property('xsl:vendor-url'))" />
   2941   </xsl:variable>
   2942   <xsl:value-of select="$gen" />
   2943 </xsl:template>
   2944 
   2945 <xsl:template name="get-header-right">
   2946   <xsl:value-of select="concat(/rfc/front/date/@month,' ',/rfc/front/date/@year)" />
   2947 </xsl:template>
   2948 
   2949 <xsl:template name="get-keywords">
   2950   <xsl:variable name="keyw">
   2951     <xsl:for-each select="/rfc/front/keyword">
   2952       <xsl:value-of select="translate(.,',',' ')" />
   2953       <xsl:if test="position()!=last()">, </xsl:if>
   2954     </xsl:for-each>
   2955   </xsl:variable>
   2956   <xsl:value-of select="normalize-space($keyw)" />
   2957 </xsl:template>
   2958 
   2959 <!-- get language from context node. nearest ancestor or return the default of "en" -->
   2960 <xsl:template name="get-lang">
   2961   <xsl:choose>
   2962     <xsl:when test="ancestor-or-self::*[@xml:lang]"><xsl:value-of select="ancestor-or-self::*/@xml:lang" /></xsl:when>
   2963     <xsl:otherwise>en</xsl:otherwise>
   2964   </xsl:choose>
   2965 </xsl:template>
   2966 
   2967 <xsl:template name="get-section-number">
   2968   <xsl:variable name="hasEdits" select="count(//ed:del|//ed:ins)!=0" />
   2969   <xsl:choose>
   2970     <xsl:when test="$hasEdits">
   2971       <xsl:call-template name="sectionnumberAndEdits" />
   2972     </xsl:when>
   2973     <xsl:otherwise>
   2974       <xsl:choose>
   2975         <xsl:when test="ancestor::back"><xsl:number count="ed:del|ed:ins|section|appendix" level="multiple" format="A.1.1.1.1.1.1.1" /></xsl:when>
   2976         <xsl:when test="self::appendix"><xsl:number count="ed:del|ed:ins|appendix" level="multiple" format="A.1.1.1.1.1.1.1" /></xsl:when>
   2977         <xsl:otherwise><xsl:number count="ed:del|ed:ins|section" level="multiple"/></xsl:otherwise>
   2978       </xsl:choose>
   2979     </xsl:otherwise>
   2980   </xsl:choose>
   2981 </xsl:template>
   2982 
   2983 <xsl:template name="get-section-type">
   2984   <xsl:param name="prec" />
   2985   <xsl:choose>
   2986     <xsl:when test="ancestor::back">Appendix</xsl:when>
   2987     <xsl:otherwise>Section</xsl:otherwise>
   2988   </xsl:choose>
   2989 </xsl:template>
   2990 
   2991 <xsl:template name="insert-conditional-pagebreak">
   2992   <xsl:if test="$xml2rfc-compact!='yes'">
   2993     <xsl:attribute name="class">np</xsl:attribute>
   2994   </xsl:if>
   2995 </xsl:template>
   2996 
   2997 
   2998 </xsl:stylesheet>
   2999