You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by fi...@apache.org on 2007/10/09 00:57:53 UTC
svn commit: r582990 [2/3] -
/labs/webarch/trunk/http/draft-fielding-http/rfc2629.xslt
Added: labs/webarch/trunk/http/draft-fielding-http/rfc2629.xslt
URL: http://svn.apache.org/viewvc/labs/webarch/trunk/http/draft-fielding-http/rfc2629.xslt?rev=582990&view=auto
==============================================================================
--- labs/webarch/trunk/http/draft-fielding-http/rfc2629.xslt (added)
+++ labs/webarch/trunk/http/draft-fielding-http/rfc2629.xslt Mon Oct 8 15:57:47 2007
@@ -0,0 +1,4654 @@
+<!--
+ XSLT transformation from RFC2629 XML format to HTML
+
+ Copyright (c) 2006-2007, Julian Reschke (julian.reschke@greenbytes.de)
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of Julian Reschke nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+-->
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0"
+
+ xmlns:ed="http://greenbytes.de/2002/rfcedit"
+ xmlns:exslt="http://exslt.org/common"
+ xmlns:msxsl="urn:schemas-microsoft-com:xslt"
+ xmlns:myns="mailto:julian.reschke@greenbytes.de?subject=rcf2629.xslt"
+ xmlns:saxon="http://icl.com/saxon"
+ xmlns:x="http://purl.org/net/xml2rfc/ext"
+ xmlns:xhtml="http://www.w3.org/1999/xhtml"
+
+ exclude-result-prefixes="ed exslt msxsl myns saxon x xhtml"
+ >
+
+<xsl:strip-space elements="back front list middle rfc section"/>
+
+<xsl:output method="html" encoding="iso-8859-1" version="4.0" doctype-public="-//W3C//DTD HTML 4.01//EN" indent="no"/>
+
+<!-- process some of the processing instructions supported by Marshall T. Rose's
+ xml2rfc sofware, see <http://xml.resource.org/> -->
+
+<!-- delimiters in PIs -->
+<xsl:variable name="quote-chars">"'</xsl:variable>
+
+<!-- rfc comments PI -->
+
+<xsl:param name="xml2rfc-comments"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'comments=')], concat($quote-chars,' '), ''),
+ 'comments=')"
+/>
+
+<!-- rfc compact PI -->
+
+<xsl:param name="xml2rfc-compact"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'compact=')], concat($quote-chars,' '), ''),
+ 'compact=')"
+/>
+
+<!-- rfc footer PI -->
+
+<xsl:param name="xml2rfc-footer"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'footer=')], concat($quote-chars,' '), ''),
+ 'footer=')"
+/>
+
+<!-- rfc header PI -->
+
+<xsl:param name="xml2rfc-header"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'header=')], concat($quote-chars,' '), ''),
+ 'header=')"
+/>
+
+<!-- rfc inline PI -->
+
+<xsl:param name="xml2rfc-inline"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'inline=')], concat($quote-chars,' '), ''),
+ 'inline=')"
+/>
+
+<!-- rfc strict PI -->
+
+<xsl:param name="xml2rfc-strict"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'strict=')], concat($quote-chars,' '), ''),
+ 'strict=')"
+/>
+
+<!-- include a table of contents if a processing instruction <?rfc?>
+ exists with contents toc="yes". Can be overriden by an XSLT parameter -->
+
+<xsl:param name="xml2rfc-toc"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'toc=')], concat($quote-chars,' '), ''),
+ 'toc=')"
+/>
+
+<!-- optional tocdepth-->
+
+<xsl:param name="xml2rfc-tocdepth"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'tocdepth=')], concat($quote-chars,' '), ''),
+ 'tocdepth=')"
+/>
+
+<xsl:variable name="parsedTocDepth">
+ <xsl:choose>
+ <xsl:when test="$xml2rfc-tocdepth='1'">1</xsl:when>
+ <xsl:when test="$xml2rfc-tocdepth='2'">2</xsl:when>
+ <xsl:when test="$xml2rfc-tocdepth='3'">3</xsl:when>
+ <xsl:when test="$xml2rfc-tocdepth='4'">4</xsl:when>
+ <xsl:when test="$xml2rfc-tocdepth='5'">5</xsl:when>
+ <xsl:otherwise>99</xsl:otherwise>
+ </xsl:choose>
+</xsl:variable>
+
+<!-- suppress top block if a processing instruction <?rfc?>
+ exists with contents tocblock="no". Can be overriden by an XSLT parameter -->
+
+<xsl:param name="xml2rfc-topblock"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'topblock=')], concat($quote-chars,' '), ''),
+ 'topblock=')"
+/>
+
+<!-- use symbolic reference names instead of numeric ones unless a processing instruction <?rfc?>
+ exists with contents symrefs="no". Can be overriden by an XSLT parameter -->
+
+<xsl:param name="xml2rfc-symrefs"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'symrefs=')], concat($quote-chars,' '), ''),
+ 'symrefs=')"
+/>
+
+<!-- sort references if a processing instruction <?rfc?>
+ exists with contents sortrefs="yes". Can be overriden by an XSLT parameter -->
+
+<xsl:param name="xml2rfc-sortrefs"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'sortrefs=')], concat($quote-chars,' '), ''),
+ 'sortrefs=')"
+/>
+
+<!-- insert editing marks if a processing instruction <?rfc?>
+ exists with contents editing="yes". Can be overriden by an XSLT parameter -->
+
+<xsl:param name="xml2rfc-editing"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'editing=')], concat($quote-chars,' '), ''),
+ 'editing=')"
+/>
+
+<!-- make it a private paper -->
+
+<xsl:param name="xml2rfc-private"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'private=')], $quote-chars, ''),
+ 'private=')"
+/>
+
+<!-- background image? -->
+
+<xsl:param name="xml2rfc-background"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'background=')], $quote-chars, ''),
+ 'background=')"
+/>
+
+<!-- extension for XML parsing in artwork -->
+
+<xsl:param name="xml2rfc-ext-parse-xml-in-artwork"
+ select="substring-after(
+ translate(/processing-instruction('rfc-ext')[contains(.,'parse-xml-in-artwork=')], concat($quote-chars,' '), ''),
+ 'parse-xml-in-artwork=')"
+/>
+
+<!-- extension for excluding DCMI properties in meta tag (RFC2731) -->
+
+<xsl:param name="xml2rfc-ext-support-rfc2731"
+ select="substring-after(
+ translate(/processing-instruction('rfc-ext')[contains(.,'support-rfc2731=')], concat($quote-chars,' '), ''),
+ 'support-rfc2731=')"
+/>
+
+<!-- extension for allowing markup inside artwork -->
+
+<xsl:param name="xml2rfc-ext-allow-markup-in-artwork"
+ select="substring-after(
+ translate(/processing-instruction('rfc-ext')[contains(.,'allow-markup-in-artwork=')], concat($quote-chars,' '), ''),
+ 'allow-markup-in-artwork=')"
+/>
+
+<!-- extension for including references into index -->
+
+<xsl:param name="xml2rfc-ext-include-references-in-index"
+ select="substring-after(
+ translate(/processing-instruction('rfc-ext')[contains(.,'include-references-in-index=')], concat($quote-chars,' '), ''),
+ 'include-references-in-index=')"
+/>
+
+<!-- position of author's section -->
+
+<xsl:param name="xml2rfc-ext-authors-section"
+ select="substring-after(
+ translate(/processing-instruction('rfc-ext')[contains(.,'authors-section=')], concat($quote-chars,' '), ''),
+ 'authors-section=')"
+/>
+
+<!-- justification? -->
+
+<xsl:param name="xml2rfc-ext-justification"
+ select="substring-after(
+ translate(/processing-instruction('rfc-ext')[contains(.,'justification=')], concat($quote-chars,' '), ''),
+ 'justification=')"
+/>
+
+<!-- trailing dots in section numbers -->
+
+<xsl:param name="xml2rfc-ext-sec-no-trailing-dots"
+ select="substring-after(
+ translate(/processing-instruction('rfc-ext')[contains(.,'sec-no-trailing-dots=')], concat($quote-chars,' '), ''),
+ 'sec-no-trailing-dots=')"
+/>
+
+<!-- choose whether or not to do mailto links -->
+
+ <xsl:param name="xml2rfc-linkmailto"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'linkmailto=')], concat($quote-chars,' '), ''),
+ 'linkmailto=')"
+ />
+
+
+<!-- iprnotified switch -->
+
+ <xsl:param name="xml2rfc-iprnotified"
+ select="substring-after(
+ translate(/processing-instruction('rfc')[contains(.,'iprnotified=')], concat($quote-chars,' '), ''),
+ 'iprnotified=')"
+ />
+
+
+<!-- URL templates for RFCs and Internet Drafts. -->
+
+<!-- Reference the authorative ASCII versions
+<xsl:param name="rfcUrlPrefix" select="'http://www.ietf.org/rfc/rfc'" />
+<xsl:param name="rfcUrlPostfix" select="'.txt'" />
+-->
+<!-- Reference the marked up versions over on http://tools.ietf.org/html. -->
+<xsl:param name="rfcUrlPrefix" select="'http://tools.ietf.org/html/rfc'" />
+<xsl:param name="rfcUrlPostfix" select="''" />
+<xsl:param name="rfcUrlFrag" select="'section-'" />
+<xsl:param name="internetDraftUrlPrefix" select="'http://tools.ietf.org/html/'" />
+<xsl:param name="internetDraftUrlPostfix" select="''" />
+<xsl:param name="internetDraftUrlFrag" select="'section-'" />
+
+<!-- warning re: absent node-set ext. function -->
+<xsl:variable name="node-set-warning">
+ This stylesheet requires either an XSLT-1.0 processor with node-set()
+ extension function, or an XSLT-2.0 processor. Therefore, parts of the
+ document couldn't be displayed.
+</xsl:variable>
+
+<!-- character translation tables -->
+<xsl:variable name="lcase" select="'abcdefghijklmnopqrstuvwxyz'" />
+<xsl:variable name="ucase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
+
+<xsl:variable name="plain" select="' #/ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
+<xsl:variable name="touri" select="'___abcdefghijklmnopqrstuvwxyz'" />
+
+<!-- build help keys for indices -->
+<xsl:key name="index-first-letter"
+ match="iref|reference"
+ use="translate(substring(concat(@anchor,@item),1,1),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')" />
+
+<xsl:key name="index-item"
+ match="iref"
+ use="@item" />
+
+<xsl:key name="index-item-subitem"
+ match="iref"
+ use="concat(@item,'..',@subitem)" />
+
+<xsl:key name="index-xref"
+ match="xref[@x:sec]"
+ use="concat(@target,'..',@x:sec)" />
+
+<!-- prefix for automatically generated anchors -->
+<xsl:variable name="anchor-prefix" select="'rfc'" />
+
+<!-- IPR version switch -->
+<xsl:variable name="ipr-rfc3667" select="(
+ /rfc/@number > 3708) or
+ not(
+ (/rfc/@ipr = 'full2026') or
+ (/rfc/@ipr = 'noDerivativeWorks2026') or
+ (/rfc/@ipr = 'noDerivativeWorksNow') or
+ (/rfc/@ipr = 'none') or
+ (/rfc/@ipr = '') or
+ not(/rfc/@ipr)
+ )" />
+
+<xsl:variable name="ipr-rfc4748" select="(
+ $ipr-rfc3667 and
+ (
+ (/rfc/@number > 4671) or
+ (/rfc/front/date/@year > 2006) or
+ (/rfc/front/date/@year > 2005 and (/rfc/front/date/@month='November' or /rfc/front/date/@month='December'))
+ )
+ )" />
+
+<!-- will document have an index -->
+<xsl:variable name="has-index" select="//iref or (//xref and $xml2rfc-ext-include-references-in-index='yes')" />
+
+<!-- Templates for the various elements of rfc2629.dtd -->
+
+<xsl:template match="text()[not(ancestor::artwork)]">
+ <xsl:variable name="starts-with-ws" select="translate(substring(.,1,1),'	  ','')"/>
+ <xsl:variable name="ends-with-ws" select="translate(substring(.,string-length(.),1),'	  ','')"/>
+ <!--<xsl:message> Orig: "<xsl:value-of select="."/>"</xsl:message>
+ <xsl:message>Start: "<xsl:value-of select="$starts-with-ws"/>"</xsl:message>
+ <xsl:message> End: "<xsl:value-of select="$ends-with-ws"/>"</xsl:message> -->
+ <xsl:if test="$starts-with-ws='' and preceding-sibling::node()">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ <xsl:value-of select="normalize-space(.)"/>
+ <xsl:if test="$ends-with-ws='' and following-sibling::node()">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+</xsl:template>
+
+
+<xsl:template match="abstract">
+ <h1 id="{$anchor-prefix}.abstract"><a href="#{$anchor-prefix}.abstract">Abstract</a></h1>
+ <xsl:apply-templates />
+</xsl:template>
+
+<msxsl:script language="JScript" implements-prefix="myns">
+ function parseXml(str) {
+ try {
+ var doc = new ActiveXObject("MSXML2.DOMDocument");
+ doc.async = false;
+ if (doc.loadXML(str)) {
+ return "";
+ }
+ else {
+ return doc.parseError.reason + "\n" + doc.parseError.srcText + " (" + doc.parseError.line + "/" + doc.parseError.linepos + ")";
+ }
+ }
+ catch(e) {
+ return "";
+ }
+ }
+</msxsl:script>
+
+<xsl:template name="add-artwork-class">
+ <xsl:choose>
+ <xsl:when test="@type='abnf' or @type='abnf2616' or @type='application/xml-dtd' or @type='inline' or @type='application/relax-ng-compact-syntax'">
+ <xsl:attribute name="class">inline</xsl:attribute>
+ </xsl:when>
+ <xsl:when test="starts-with(@type,'message/http') and contains(@type,'msgtype="request"')">
+ <xsl:attribute name="class">text2</xsl:attribute>
+ </xsl:when>
+ <xsl:when test="starts-with(@type,'message/http')">
+ <xsl:attribute name="class">text</xsl:attribute>
+ </xsl:when>
+ <xsl:when test="starts-with(@type,'drawing')">
+ <xsl:attribute name="class">drawing</xsl:attribute>
+ </xsl:when>
+ <xsl:when test="starts-with(@type,'text/plain') or @type='example' or @type='code'">
+ <xsl:attribute name="class">text</xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise/>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="artwork">
+ <xsl:if test="not(ancestor::ed:del) and $xml2rfc-ext-parse-xml-in-artwork='yes' and function-available('myns:parseXml')">
+ <xsl:if test="contains(.,'<?xml')">
+ <xsl:variable name="body" select="substring-after(substring-after(.,'<?xml'),'?>')" />
+ <xsl:if test="$body!='' and myns:parseXml($body)!=''">
+ <table style="background-color: red; border-width: thin; border-style: solid; border-color: black;">
+ <tr><td>
+ XML PARSE ERROR; parsed the body below:
+ <pre>
+ <xsl:value-of select="$body"/>
+ </pre>
+ resulting in:
+ <pre>
+ <xsl:value-of select="myns:parseXml($body)" />
+ </pre>
+ </td></tr></table>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="@ed:parse-xml-after">
+ <xsl:if test="myns:parseXml(string(.))!=''">
+ <table style="background-color: red; border-width: thin; border-style: solid; border-color: black;">
+ <tr><td>
+ XML PARSE ERROR:
+ <pre><xsl:value-of select="myns:parseXml(string(.))" /></pre>
+ </td></tr></table>
+ </xsl:if>
+ </xsl:if>
+ </xsl:if>
+ <xsl:variable name="display">
+ <xsl:choose>
+ <xsl:when test="$xml2rfc-ext-allow-markup-in-artwork='yes'">
+ <xsl:apply-templates/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="@align='right'">
+ <div style="display:table; margin-left: auto; margin-right: 0pt;">
+ <pre style="margin-left: 0em;">
+ <xsl:call-template name="add-artwork-class"/>
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:copy-of select="$display"/>
+ </pre>
+ </div>
+ </xsl:when>
+ <xsl:when test="@align='center'">
+ <div style="display:table; margin-left: auto; margin-right: auto;">
+ <pre style="margin-left: 0em;">
+ <xsl:call-template name="add-artwork-class"/>
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:copy-of select="$display"/>
+ </pre>
+ </div>
+ </xsl:when>
+ <xsl:otherwise>
+ <pre>
+ <xsl:call-template name="add-artwork-class"/>
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:copy-of select="$display"/>
+ </pre>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:call-template name="check-artwork-width">
+ <xsl:with-param name="content"><xsl:apply-templates/></xsl:with-param>
+ </xsl:call-template>
+</xsl:template>
+
+<!-- special case for first text node in artwork -->
+<xsl:template match="artwork/text()[1]">
+ <xsl:choose>
+ <xsl:when test="starts-with(.,' ')">
+ <!-- reduce leading whitespace -->
+ <xsl:value-of select="substring(.,2)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<xsl:template name="check-artwork-width">
+ <xsl:param name="content"/>
+ <xsl:choose>
+ <xsl:when test="not(contains($content,' '))">
+ <xsl:if test="string-length($content) > 69">
+ <xsl:message>artwork line too long: <xsl:value-of select="$content"/></xsl:message>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="start" select="substring-before($content,' ')"/>
+ <xsl:variable name="end" select="substring-after($content,' ')"/>
+ <xsl:if test="string-length($start) > 69">
+ <xsl:message>WARNING: artwork line too long: <xsl:value-of select="$start"/><xsl:call-template name="lineno"/></xsl:message>
+ </xsl:if>
+ <xsl:call-template name="check-artwork-width">
+ <xsl:with-param name="content" select="$end"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="artwork[@src and starts-with(@type,'image/')]">
+ <img src="{@src}" alt="{.}">
+ <xsl:copy-of select="@width|@height"/>
+ </img>
+</xsl:template>
+
+<xsl:template match="author">
+
+ <address class="vcard">
+ <span class="vcardline">
+ <span class="fn">
+ <xsl:value-of select="@fullname" />
+ </span>
+ <xsl:if test="@role">
+ (<xsl:value-of select="@role" />)
+ </xsl:if>
+ <!-- components of name (hidden from display -->
+ <span class="n hidden">
+ <span class="family-name"><xsl:value-of select="@surname"/></span>
+ <!-- given-name family-name -->
+ <xsl:if test="@surname=substring(@fullname,1 + string-length(@fullname) - string-length(@surname))">
+ <span class="given-name"><xsl:value-of select="normalize-space(substring(@fullname,1,string-length(@fullname) - string-length(@surname)))"/></span>
+ </xsl:if>
+ <!-- family-name given-name -->
+ <xsl:if test="starts-with(@fullname,@surname)">
+ <span class="given-name"><xsl:value-of select="normalize-space(substring-after(@fullname,@surname))"/></span>
+ </xsl:if>
+ </span>
+ </span>
+ <xsl:if test="normalize-space(organization) != ''">
+ <span class="org vcardline">
+ <xsl:value-of select="organization" />
+ </span>
+ </xsl:if>
+ <xsl:if test="address/postal">
+ <span class="adr">
+ <xsl:if test="address/postal/street!=''">
+ <xsl:for-each select="address/postal/street">
+ <span class="street-address vcardline">
+ <xsl:value-of select="." />
+ </span>
+ </xsl:for-each>
+ </xsl:if>
+ <xsl:if test="address/postal/city|address/postal/region|address/postal/code">
+ <span class="vcardline">
+ <xsl:if test="address/postal/city"><span class="locality"><xsl:value-of select="address/postal/city" /></span>, </xsl:if>
+ <xsl:if test="address/postal/region"><span class="region"><xsl:value-of select="address/postal/region" /></span> </xsl:if>
+ <xsl:if test="address/postal/code"><span class="postal-code"><xsl:value-of select="address/postal/code" /></span></xsl:if>
+ </span>
+ </xsl:if>
+ <xsl:if test="address/postal/country">
+ <span class="country-name vcardline"><xsl:value-of select="address/postal/country" /></span>
+ </xsl:if>
+ </span>
+ </xsl:if>
+ <xsl:if test="address/phone">
+ <span class="vcardline tel">
+ <xsl:text>Phone: </xsl:text>
+ <a href="tel:{translate(address/phone,' ','')}"><span class="value"><xsl:value-of select="address/phone" /></span></a>
+ </span>
+ </xsl:if>
+ <xsl:if test="address/facsimile">
+ <span class="vcardline tel">
+ <span class="type">Fax</span><xsl:text>: </xsl:text>
+ <a href="fax:{translate(address/facsimile,' ','')}"><span class="value"><xsl:value-of select="address/facsimile" /></span></a>
+ </span>
+ </xsl:if>
+ <xsl:if test="address/email">
+ <span class="vcardline">
+ <xsl:text>EMail: </xsl:text>
+ <a>
+ <xsl:if test="$xml2rfc-linkmailto!='no'">
+ <xsl:attribute name="href">mailto:<xsl:value-of select="address/email" /></xsl:attribute>
+ </xsl:if>
+ <span class="email"><xsl:value-of select="address/email" /></span>
+ </a>
+ </span>
+ </xsl:if>
+ <xsl:if test="address/uri">
+ <span class="vcardline">
+ <xsl:text>URI: </xsl:text>
+ <a href="{address/uri}" class="url"><xsl:value-of select="address/uri" /></a>
+ </span>
+ </xsl:if>
+ </address>
+
+</xsl:template>
+
+<xsl:template match="back">
+
+ <!-- add references section first, no matter where it appears in the
+ source document -->
+ <!-- as of April 2004, process from middle section
+ <xsl:apply-templates select="references" />
+ -->
+
+ <!-- add editorial comments -->
+ <xsl:if test="//cref and $xml2rfc-comments='yes' and $xml2rfc-inline!='yes'">
+ <xsl:call-template name="insertComments" />
+ </xsl:if>
+
+ <!-- next, add information about the document's authors -->
+ <xsl:if test="$xml2rfc-ext-authors-section!='end'">
+ <xsl:call-template name="insertAuthors" />
+ </xsl:if>
+
+ <!-- add all other top-level sections under <back> -->
+ <xsl:apply-templates select="*[not(self::references) and not(self::ed:replace and .//references)]" />
+
+ <xsl:if test="$xml2rfc-ext-authors-section='end'">
+ <xsl:call-template name="insertAuthors" />
+ </xsl:if>
+
+ <xsl:if test="not($xml2rfc-private)">
+ <!-- copyright statements -->
+ <xsl:variable name="copyright"><xsl:call-template name="insertCopyright" /></xsl:variable>
+
+ <!-- emit it -->
+ <xsl:choose>
+ <xsl:when test="function-available('msxsl:node-set')">
+ <xsl:apply-templates select="msxsl:node-set($copyright)" />
+ </xsl:when>
+ <xsl:when test="function-available('exslt:node-set')">
+ <xsl:apply-templates select="exslt:node-set($copyright)" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message><xsl:value-of select="$node-set-warning"/></xsl:message>
+ <p class="error"><xsl:value-of select="$node-set-warning"/></p>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+
+ <!-- insert the index if index entries exist -->
+ <xsl:if test="$has-index">
+ <xsl:call-template name="insertIndex" />
+ </xsl:if>
+
+</xsl:template>
+
+<xsl:template match="eref[node()]">
+ <a href="{@target}"><xsl:apply-templates /></a>
+</xsl:template>
+
+<xsl:template match="eref[not(node())]">
+ <xsl:text><</xsl:text>
+ <a href="{@target}"><xsl:value-of select="@target" /></a>
+ <xsl:text>></xsl:text>
+</xsl:template>
+
+<xsl:template match="figure">
+ <xsl:if test="@anchor!=''">
+ <div id="{@anchor}"/>
+ </xsl:if>
+ <xsl:variable name="anch">
+ <xsl:call-template name="get-figure-anchor"/>
+ </xsl:variable>
+ <div id="{$anch}" />
+ <xsl:apply-templates />
+ <xsl:if test="@title!='' or @anchor!=''">
+ <xsl:variable name="n"><xsl:number level="any" count="figure[@title!='' or @anchor!='']" /></xsl:variable>
+ <p class="figure">Figure <xsl:value-of select="$n"/><xsl:if test="@title!=''">: <xsl:value-of select="@title" /></xsl:if></p>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="front">
+
+ <xsl:if test="$xml2rfc-topblock!='no'">
+ <!-- collect information for left column -->
+
+ <xsl:variable name="leftColumn">
+ <xsl:call-template name="collectLeftHeaderColumn" />
+ </xsl:variable>
+
+ <!-- collect information for right column -->
+
+ <xsl:variable name="rightColumn">
+ <xsl:call-template name="collectRightHeaderColumn" />
+ </xsl:variable>
+
+ <!-- insert the collected information -->
+ <table summary="header information" class="header" border="0" cellpadding="1" cellspacing="1">
+ <xsl:choose>
+ <xsl:when test="function-available('msxsl:node-set')">
+ <xsl:call-template name="emitheader">
+ <xsl:with-param name="lc" select="msxsl:node-set($leftColumn)" />
+ <xsl:with-param name="rc" select="msxsl:node-set($rightColumn)" />
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="function-available('exslt:node-set')">
+ <xsl:call-template name="emitheader">
+ <xsl:with-param name="lc" select="exslt:node-set($leftColumn)" />
+ <xsl:with-param name="rc" select="exslt:node-set($rightColumn)" />
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message><xsl:value-of select="$node-set-warning"/></xsl:message>
+ <p class="error"><xsl:value-of select="$node-set-warning"/></p>
+ </xsl:otherwise>
+ </xsl:choose>
+ </table>
+ </xsl:if>
+
+ <p class="title">
+ <!-- main title -->
+ <xsl:apply-templates select="title"/>
+ <xsl:if test="/rfc/@docName">
+ <br/>
+ <span class="filename"><xsl:value-of select="/rfc/@docName"/></span>
+
+ <xsl:if test="contains(/rfc/@docName,'.')">
+ <xsl:call-template name="warning">
+ <xsl:with-param name="msg">The @docName attribute should contain the base name, not the filename (thus no file extension).</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:if>
+ </p>
+
+ <!-- insert notice about update -->
+ <xsl:variable name="published-as" select="/*/x:link[@rel='Alternate' and starts-with(@title,'RFC')]"/>
+ <xsl:if test="$published-as">
+ <p style="color: green; text-align: center; font-size: 14pt; background-color: yellow;">
+ <b>Note:</b> a later version of this document has been published as <a href="{$published-as/@href}"><xsl:value-of select="$published-as/@title"/></a>.
+ </p>
+ </xsl:if>
+
+ <xsl:if test="not($xml2rfc-private)">
+ <!-- Get status info formatted as per RFC2629-->
+ <xsl:variable name="preamble"><xsl:call-template name="insertPreamble" /></xsl:variable>
+
+ <!-- emit it -->
+ <xsl:choose>
+ <xsl:when test="function-available('msxsl:node-set')">
+ <xsl:apply-templates select="msxsl:node-set($preamble)" />
+ </xsl:when>
+ <xsl:when test="function-available('exslt:node-set')">
+ <xsl:apply-templates select="exslt:node-set($preamble)" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message><xsl:value-of select="$node-set-warning"/></xsl:message>
+ <p class="error"><xsl:value-of select="$node-set-warning"/></p>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+
+ <xsl:apply-templates select="abstract" />
+ <xsl:apply-templates select="note" />
+ <!-- show notes inside change tracking as well -->
+ <xsl:apply-templates select="ed:replace[.//note]" />
+
+ <xsl:if test="$xml2rfc-toc='yes'">
+ <xsl:apply-templates select="/" mode="toc" />
+ <xsl:call-template name="insertTocAppendix" />
+ </xsl:if>
+
+</xsl:template>
+
+
+<xsl:template match="iref">
+ <xsl:variable name="anchor"><xsl:call-template name="compute-iref-anchor"/></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="ancestor::t|ancestor::figure">
+ <span id="{$anchor}"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <div id="{$anchor}"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="compute-iref-anchor">
+ <xsl:variable name="first" select="translate(substring(@item,1,1),$ucase,$lcase)"/>
+ <xsl:variable name="nkey" select="translate($first,$lcase,'')"/>
+ <xsl:choose>
+ <xsl:when test="$nkey=''">
+ <xsl:value-of select="$anchor-prefix"/>.iref.<xsl:value-of select="$first"/>.<xsl:number level="any" count="iref[starts-with(translate(@item,$ucase,$lcase),$first)]"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$anchor-prefix"/>.iref.<xsl:number level="any" count="iref[translate(substring(@item,1,1),concat($lcase,$ucase),'')='']"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- list templates depend on the list style -->
+
+<xsl:template match="list[@style='empty' or not(@style)]">
+ <dl class="empty">
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:apply-templates />
+ </dl>
+</xsl:template>
+
+<xsl:template match="list[starts-with(@style,'format ')]">
+ <dl>
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:apply-templates />
+ </dl>
+</xsl:template>
+
+<xsl:template match="list[@style='hanging']">
+ <dl>
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:apply-templates />
+ </dl>
+</xsl:template>
+
+<xsl:template match="list[@style='numbers']">
+ <ol>
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:apply-templates />
+ </ol>
+</xsl:template>
+
+<!-- numbered list inside numbered list -->
+<xsl:template match="list[@style='numbers']/t/list[@style='numbers']" priority="9">
+ <ol style="list-style-type: lower-alpha">
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:apply-templates />
+ </ol>
+</xsl:template>
+
+<xsl:template match="list[@style='letters']">
+ <ol style="list-style-type: lower-alpha">
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:apply-templates />
+ </ol>
+</xsl:template>
+
+<!-- nested lettered list uses uppercase -->
+<xsl:template match="list//t//list[@style='letters']" priority="9">
+ <ol style="list-style-type: upper-alpha">
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:apply-templates />
+ </ol>
+</xsl:template>
+
+<xsl:template match="list[@style='symbols']">
+ <ul>
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:apply-templates />
+ </ul>
+</xsl:template>
+
+
+<!-- same for t(ext) elements -->
+
+<xsl:template match="list[@style='empty' or not(@style)]/t | list[@style='empty' or not(@style)]/ed:replace/ed:*/t">
+ <!-- Inherited through CSS now <dd style="margin-top: .5em">-->
+ <dd>
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:if test="@anchor"><xsl:attribute name="id"><xsl:value-of select="@anchor"/></xsl:attribute></xsl:if>
+ <xsl:apply-templates />
+ </dd>
+</xsl:template>
+
+<xsl:template match="list[@style='numbers' or @style='symbols' or @style='letters']/x:lt">
+ <li>
+ <xsl:if test="@anchor"><xsl:attribute name="id"><xsl:value-of select="@anchor"/></xsl:attribute></xsl:if>
+ <xsl:apply-templates select="t" />
+ </li>
+</xsl:template>
+
+<xsl:template match="list[@style='numbers' or @style='symbols' or @style='letters']/t | list[@style='numbers' or @style='symbols' or @style='letters']/ed:replace/ed:*/t">
+ <li>
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:for-each select="../..">
+ <xsl:call-template name="insert-issue-pointer"/>
+ </xsl:for-each>
+ <xsl:if test="@anchor"><xsl:attribute name="id"><xsl:value-of select="@anchor"/></xsl:attribute></xsl:if>
+ <xsl:apply-templates />
+ </li>
+</xsl:template>
+
+<xsl:template match="list[@style='hanging']/x:lt">
+ <xsl:if test="@hangText!=''">
+ <dt>
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:variable name="del-node" select="ancestor::ed:del"/>
+ <xsl:variable name="rep-node" select="ancestor::ed:replace"/>
+ <xsl:variable name="deleted" select="$del-node and ($rep-node/ed:ins)"/>
+ <xsl:for-each select="../..">
+ <xsl:call-template name="insert-issue-pointer">
+ <xsl:with-param name="deleted-anchor" select="$deleted"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ <xsl:if test="@anchor"><xsl:attribute name="id"><xsl:value-of select="@anchor"/></xsl:attribute></xsl:if>
+ <xsl:value-of select="@hangText" />
+ </dt>
+ </xsl:if>
+ <dd>
+ <xsl:call-template name="insertInsDelClass"/>
+ <!-- if hangIndent present, use 0.7 of the specified value (1em is the width of the "m" character -->
+ <xsl:if test="../@hangIndent and ../@hangIndent!='0'">
+ <xsl:attribute name="style">margin-left: <xsl:value-of select="../@hangIndent * 0.7"/>em</xsl:attribute>
+ </xsl:if>
+ <xsl:apply-templates select="t" />
+ </dd>
+</xsl:template>
+
+<xsl:template match="list[@style='hanging']/t | list[@style='hanging']/ed:replace/ed:*/t">
+ <xsl:if test="@hangText!=''">
+ <dt>
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:if test="count(preceding-sibling::t)=0">
+ <xsl:variable name="del-node" select="ancestor::ed:del"/>
+ <xsl:variable name="rep-node" select="ancestor::ed:replace"/>
+ <xsl:variable name="deleted" select="$del-node and ($rep-node/ed:ins)"/>
+ <xsl:for-each select="../..">
+ <xsl:call-template name="insert-issue-pointer">
+ <xsl:with-param name="deleted-anchor" select="$deleted"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:if>
+ <xsl:if test="@anchor"><xsl:attribute name="id"><xsl:value-of select="@anchor"/></xsl:attribute></xsl:if>
+ <xsl:value-of select="@hangText" />
+ </dt>
+ </xsl:if>
+
+ <xsl:variable name="dd-content">
+ <xsl:apply-templates/>
+ </xsl:variable>
+
+ <xsl:if test="$dd-content!=''">
+ <dd>
+ <xsl:call-template name="insertInsDelClass"/>
+ <!-- if hangIndent present, use 0.7 of the specified value (1em is the width of the "m" character -->
+ <xsl:if test="../@hangIndent and ../@hangIndent!='0'">
+ <xsl:attribute name="style">margin-left: <xsl:value-of select="../@hangIndent * 0.7"/>em</xsl:attribute>
+ </xsl:if>
+ <xsl:apply-templates />
+ </dd>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="list[starts-with(@style,'format ') and (contains(@style,'%c') or contains(@style,'%d'))]/t">
+ <xsl:variable name="list" select=".." />
+ <xsl:variable name="format" select="substring-after(../@style,'format ')" />
+ <xsl:variable name="pos">
+ <xsl:choose>
+ <xsl:when test="$list/@counter">
+ <xsl:number level="any" count="list[@counter=$list/@counter or (not(@counter) and @style=concat('format ',$list/@counter))]/t" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:number level="any" count="list[concat('format ',@counter)=$list/@style or (not(@counter) and @style=$list/@style)]/t" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <dt>
+ <xsl:if test="@anchor"><xsl:attribute name="id"><xsl:value-of select="@anchor"/></xsl:attribute></xsl:if>
+ <xsl:choose>
+ <xsl:when test="contains($format,'%c')">
+ <xsl:value-of select="substring-before($format,'%c')"/><xsl:number value="$pos" format="a" /><xsl:value-of select="substring-after($format,'%c')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="substring-before($format,'%d')"/><xsl:number value="$pos" format="1" /><xsl:value-of select="substring-after($format,'%d')"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </dt>
+ <dd>
+ <xsl:apply-templates />
+ </dd>
+</xsl:template>
+
+<xsl:template match="middle">
+ <xsl:apply-templates />
+ <xsl:apply-templates select="../back//references"/>
+</xsl:template>
+
+<xsl:template match="note">
+ <xsl:variable name="num"><xsl:number/></xsl:variable>
+ <h1 id="{$anchor-prefix}.note.{$num}">
+ <xsl:call-template name="insertInsDelClass"/>
+ <a href="#{$anchor-prefix}.note.{$num}">
+ <xsl:value-of select="@title" />
+ </a>
+ </h1>
+ <xsl:apply-templates />
+</xsl:template>
+
+<xsl:template match="postamble">
+ <xsl:if test="normalize-space(.) != ''">
+ <p>
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:call-template name="editingMark" />
+ <xsl:apply-templates />
+ </p>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="preamble">
+ <xsl:if test="normalize-space(.) != ''">
+ <p>
+ <xsl:if test="@anchor">
+ <xsl:attribute name="id"><xsl:value-of select="@anchor"/></xsl:attribute>
+ </xsl:if>
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:call-template name="editingMark" />
+ <xsl:apply-templates />
+ </p>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template name="computed-auto-target">
+ <xsl:param name="bib"/>
+ <xsl:param name="ref"/>
+
+ <xsl:choose>
+ <xsl:when test="$bib/seriesInfo/@name='RFC'">
+ <xsl:value-of select="concat($rfcUrlPrefix,$bib/seriesInfo[@name='RFC']/@value,$rfcUrlPostfix)" />
+ <xsl:if test="$ref and $ref/@x:sec and $rfcUrlFrag">
+ <xsl:value-of select="concat('#',$rfcUrlFrag,$ref/@x:sec)"/>
+ </xsl:if>
+ </xsl:when>
+ <xsl:when test="$bib/seriesInfo/@name='Internet-Draft'">
+ <xsl:value-of select="concat($internetDraftUrlPrefix,$bib/seriesInfo[@name='Internet-Draft']/@value,$internetDraftUrlPostfix)" />
+ <xsl:if test="$ref and $ref/@x:sec and $internetDraftUrlFrag">
+ <xsl:value-of select="concat('#',$internetDraftUrlFrag,$ref/@x:sec)"/>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise />
+ </xsl:choose>
+
+</xsl:template>
+
+<xsl:template name="computed-target">
+ <xsl:param name="bib"/>
+ <xsl:param name="ref"/>
+
+ <xsl:choose>
+ <xsl:when test="$bib/@target">
+ <xsl:if test="$ref and $ref/@x:sec and $ref/@x:rel">
+ <xsl:value-of select="concat($bib/@target,$ref/@x:rel)"/>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="computed-auto-target">
+ <xsl:with-param name="bib" select="$bib"/>
+ <xsl:with-param name="ref" select="$ref"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+
+</xsl:template>
+
+<xsl:template match="reference">
+
+ <!-- check for reference to reference -->
+ <xsl:variable name="anchor" select="@anchor"/>
+ <xsl:if test="not(ancestor::ed:del) and not(//xref[@target=$anchor])">
+ <xsl:message>WARNING: unused reference '<xsl:value-of select="@anchor"/>'<xsl:call-template name="lineno"/></xsl:message>
+ </xsl:if>
+
+ <xsl:variable name="target">
+ <xsl:choose>
+ <xsl:when test="@target"><xsl:value-of select="@target" /></xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="computed-auto-target">
+ <xsl:with-param name="bib" select="."/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <tr>
+ <td class="reference">
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:variable name="del-node" select="ancestor::ed:del"/>
+ <xsl:variable name="rep-node" select="ancestor::ed:replace"/>
+ <xsl:variable name="deleted" select="$del-node and ($rep-node/ed:ins)"/>
+ <xsl:for-each select="../..">
+ <xsl:call-template name="insert-issue-pointer">
+ <xsl:with-param name="deleted-anchor" select="$deleted"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ <b id="{@anchor}">
+ <xsl:call-template name="referencename">
+ <xsl:with-param name="node" select="." />
+ </xsl:call-template>
+ </b>
+ </td>
+
+ <td class="top">
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:for-each select="front/author">
+ <xsl:variable name="initials">
+ <xsl:call-template name="format-initials"/>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="@surname and @surname!=''">
+ <xsl:variable name="displayname">
+ <!-- surname/initials is reversed for last author except when it's the only one -->
+ <xsl:choose>
+ <xsl:when test="position()=last() and position()!=1">
+ <xsl:value-of select="concat($initials,' ',@surname)" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="concat(@surname,', ',$initials)" />
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="@role='editor'">
+ <xsl:text>, Ed.</xsl:text>
+ </xsl:if>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="address/email">
+ <a>
+ <xsl:if test="$xml2rfc-linkmailto!='no'">
+ <xsl:attribute name="href">mailto:<xsl:value-of select="address/email" /></xsl:attribute>
+ </xsl:if>
+ <xsl:if test="organization/text()">
+ <xsl:attribute name="title"><xsl:value-of select="organization/text()"/></xsl:attribute>
+ </xsl:if>
+ <xsl:value-of select="$displayname" />
+ </a>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$displayname" />
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:choose>
+ <xsl:when test="position()=last() - 1">
+ <xsl:if test="last() > 2">,</xsl:if>
+ <xsl:text> and </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>, </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="organization/text()">
+ <xsl:choose>
+ <xsl:when test="address/uri">
+ <a href="{address/uri}"><xsl:value-of select="organization" /></a>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="organization" />
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:choose>
+ <xsl:when test="position()=last() - 1">
+ <xsl:if test="last() > 2">,</xsl:if>
+ <xsl:text> and </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>, </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise />
+ </xsl:choose>
+ </xsl:for-each>
+
+ <xsl:choose>
+ <xsl:when test="string-length($target) > 0">
+ <xsl:text>“</xsl:text><a href="{$target}"><xsl:value-of select="front/title" /></a><xsl:text>”</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>“</xsl:text><xsl:value-of select="front/title" /><xsl:text>”</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:for-each select="seriesInfo">
+ <xsl:text>, </xsl:text>
+ <xsl:choose>
+ <xsl:when test="not(@name) and not(@value) and ./text()"><xsl:value-of select="." /></xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@name" />
+ <xsl:if test="@value!=''"> <xsl:value-of select="@value" /></xsl:if>
+ <xsl:if test="translate(@name,$ucase,$lcase)='internet-draft'"> (work in progress)</xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+
+ <xsl:if test="front/date/@year != '' and front/date/@year != '???'">
+ <xsl:text>, </xsl:text>
+ <xsl:if test="front/date/@month and (front/date/@month!='???' and front/date/@month!='')"><xsl:value-of select="front/date/@month" /> </xsl:if>
+ <xsl:value-of select="front/date/@year" />
+ </xsl:if>
+
+ <xsl:if test="@target">
+ <xsl:text>, <</xsl:text>
+ <a href="{@target}"><xsl:value-of select="@target"/></a>
+ <xsl:text>></xsl:text>
+ </xsl:if>
+
+ <xsl:text>.</xsl:text>
+
+ <xsl:for-each select="annotation">
+ <br />
+ <xsl:apply-templates />
+ </xsl:for-each>
+
+ </td>
+ </tr>
+
+
+</xsl:template>
+
+
+<xsl:template match="references">
+
+ <xsl:variable name="name">
+ <xsl:if test="ancestor::ed:del">
+ <xsl:text>del-</xsl:text>
+ </xsl:if>
+ <xsl:number level="any"/>
+ </xsl:variable>
+
+ <xsl:variable name="refseccount" select="count(/rfc/back/references)+count(/rfc/back/ed:replace/ed:ins/references)"/>
+
+ <!-- insert pseudo section when needed -->
+ <xsl:if test="not(preceding::references) and $refseccount!=1">
+ <xsl:call-template name="insert-conditional-hrule"/>
+ <h1 id="{$anchor-prefix}.references">
+ <xsl:call-template name="insert-conditional-pagebreak"/>
+ <xsl:variable name="sectionNumber">
+ <xsl:call-template name="get-references-section-number"/>
+ </xsl:variable>
+ <a id="{$anchor-prefix}.section.{$sectionNumber}" href="#{$anchor-prefix}.section.{$sectionNumber}">
+ <xsl:call-template name="emit-section-number">
+ <xsl:with-param name="no" select="$sectionNumber"/>
+ </xsl:call-template>
+ </a>
+ <xsl:text> References</xsl:text>
+ </h1>
+ </xsl:if>
+
+ <xsl:variable name="elemtype">
+ <xsl:choose>
+ <xsl:when test="$refseccount!=1">h2</xsl:when>
+ <xsl:otherwise>h1</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="title">
+ <xsl:choose>
+ <xsl:when test="not(@title) or @title=''">References</xsl:when>
+ <xsl:otherwise><xsl:value-of select="@title"/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:element name="{$elemtype}">
+ <xsl:if test="$name='1'">
+ <xsl:call-template name="insert-conditional-pagebreak"/>
+ </xsl:if>
+ <xsl:variable name="sectionNumber">
+ <xsl:call-template name="get-section-number"/>
+ </xsl:variable>
+ <xsl:variable name="anchorpref">
+ <xsl:choose>
+ <xsl:when test="$elemtype='h1'"></xsl:when>
+ <xsl:otherwise>.<xsl:value-of select="$name"/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:attribute name="id"><xsl:value-of select="concat($anchor-prefix,'.references',$anchorpref)"/></xsl:attribute>
+ <a href="#{$anchor-prefix}.section.{$sectionNumber}" id="{$anchor-prefix}.section.{$sectionNumber}">
+ <xsl:call-template name="emit-section-number">
+ <xsl:with-param name="no" select="$sectionNumber"/>
+ </xsl:call-template>
+ </a>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$title"/>
+ </xsl:element>
+
+ <table summary="{$title}">
+ <xsl:choose>
+ <xsl:when test="$xml2rfc-sortrefs='yes' and $xml2rfc-symrefs!='no'">
+ <xsl:apply-templates>
+ <xsl:sort select="@anchor|.//ed:ins//reference/@anchor" />
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates />
+ </xsl:otherwise>
+ </xsl:choose>
+ </table>
+
+</xsl:template>
+
+<xsl:template match="rfc">
+
+ <!-- conformance checks -->
+ <xsl:if test="$xml2rfc-symrefs!='no' and $xml2rfc-symrefs!='yes' and //reference">
+ <xsl:message>WARNING: symrefs PI not specified; default has changed from 'no' to 'yes'.</xsl:message>
+ </xsl:if>
+
+ <xsl:variable name="lang">
+ <xsl:call-template name="get-lang" />
+ </xsl:variable>
+
+ <html lang="{$lang}">
+ <head profile="http://www.w3.org/2006/03/hcard">
+ <title>
+ <xsl:apply-templates select="front/title" mode="get-text-content" />
+ </title>
+ <style type="text/css" title="Xml2Rfc (sans serif)">
+ <xsl:call-template name="insertCss" />
+ </style>
+ <!-- <link rel="alternate stylesheet" type="text/css" media="screen" title="Plain (typewriter)" href="rfc2629tty.css" /> -->
+
+ <!-- link elements -->
+ <xsl:if test="$xml2rfc-toc='yes'">
+ <link rel="Contents" href="#{$anchor-prefix}.toc" />
+ </xsl:if>
+ <link rel="Author" href="#{$anchor-prefix}.authors" />
+ <xsl:if test="not($xml2rfc-private)">
+ <link rel="Copyright" href="#{$anchor-prefix}.copyright" />
+ </xsl:if>
+ <xsl:if test="$has-index">
+ <link rel="Index" href="#{$anchor-prefix}.index" />
+ </xsl:if>
+ <xsl:apply-templates select="/" mode="links" />
+ <xsl:for-each select="/rfc/x:link">
+ <link><xsl:copy-of select="@*" /></link>
+ </xsl:for-each>
+ <xsl:if test="/rfc/@number">
+ <link rel="Alternate" title="Authorative ASCII version" href="http://www.ietf.org/rfc/rfc{/rfc/@number}.txt" />
+ </xsl:if>
+
+ <!-- generator -->
+ <xsl:variable name="gen">
+ <xsl:call-template name="get-generator" />
+ </xsl:variable>
+ <meta name="generator" content="{$gen}" />
+
+ <!-- keywords -->
+ <xsl:if test="front/keyword">
+ <xsl:variable name="keyw">
+ <xsl:call-template name="get-keywords" />
+ </xsl:variable>
+ <meta name="keywords" content="{$keyw}" />
+ </xsl:if>
+
+ <xsl:if test="$xml2rfc-ext-support-rfc2731!='no'">
+ <!-- Dublin Core Metadata -->
+ <link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
+
+ <!-- DC creator, see RFC2731 -->
+ <xsl:for-each select="/rfc/front/author">
+ <xsl:variable name="initials">
+ <xsl:call-template name="format-initials"/>
+ </xsl:variable>
+ <meta name="DC.Creator" content="{concat(@surname,', ',$initials)}" />
+ </xsl:for-each>
+
+ <xsl:if test="not($xml2rfc-private)">
+ <xsl:choose>
+ <xsl:when test="/rfc/@number">
+ <meta name="DC.Identifier" content="urn:ietf:rfc:{/rfc/@number}" />
+ </xsl:when>
+ <xsl:when test="/rfc/@docName">
+ <meta name="DC.Identifier" content="urn:ietf:id:{/rfc/@docName}" />
+ </xsl:when>
+ <xsl:otherwise/>
+ </xsl:choose>
+ <xsl:variable name="month"><xsl:call-template name="get-month-as-num"/></xsl:variable>
+ <meta name="DC.Date.Issued" scheme="ISO8601" content="{/rfc/front/date/@year}-{$month}" />
+
+ <xsl:if test="/rfc/@obsoletes!=''">
+ <xsl:call-template name="rfclist-for-dcmeta">
+ <xsl:with-param name="list" select="/rfc/@obsoletes"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:if>
+
+ <xsl:if test="/rfc/front/abstract">
+ <meta name="DC.Description.Abstract" content="{normalize-space(/rfc/front/abstract)}" />
+ </xsl:if>
+ </xsl:if>
+ </head>
+ <body>
+ <!-- insert diagnostics -->
+ <xsl:call-template name="insert-diagnostics"/>
+
+ <xsl:apply-templates select="front" />
+ <xsl:apply-templates select="middle" />
+ <xsl:apply-templates select="back" />
+ </body>
+ </html>
+</xsl:template>
+
+
+<xsl:template match="t">
+ <xsl:if test="preceding-sibling::section or preceding-sibling::appendix">
+ <xsl:call-template name="warning">
+ <xsl:with-param name="msg">The paragraph below is misplaced; maybe a section is closed in the wrong place: </xsl:with-param>
+ <xsl:with-param name="msg2"><xsl:value-of select="."/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test="@anchor">
+ <div id="{@anchor}"><xsl:apply-templates mode="t-content" select="node()[1]" /></div>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates mode="t-content" select="node()[1]" />
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- for t-content, dispatch to default templates if it's block-level content -->
+<xsl:template mode="t-content" match="list|figure|texttable">
+ <!-- <xsl:comment>t-content block-level</xsl:comment> -->
+ <xsl:apply-templates select="." />
+ <xsl:apply-templates select="following-sibling::node()[1]" mode="t-content" />
+</xsl:template>
+
+<!-- ... otherwise group into p elements -->
+<xsl:template mode="t-content" match="*|node()">
+ <xsl:variable name="p">
+ <xsl:call-template name="get-paragraph-number" />
+ </xsl:variable>
+
+ <!-- do not open a new p element if this is a whitespace-only text node and no siblings follow -->
+ <xsl:if test="not(self::text() and normalize-space(.)='' and not(following-sibling::node()))">
+ <p>
+ <xsl:if test="$p!='' and not(ancestor::ed:del) and not(ancestor::ed:ins) and not(ancestor::x:lt) and count(preceding-sibling::node())=0">
+ <xsl:attribute name="id"><xsl:value-of select="$anchor-prefix"/>.section.<xsl:value-of select="$p"/></xsl:attribute>
+ </xsl:if>
+ <xsl:call-template name="insertInsDelClass"/>
+ <xsl:call-template name="editingMark" />
+ <xsl:apply-templates mode="t-content2" select="." />
+ </p>
+ </xsl:if>
+ <xsl:apply-templates mode="t-content" select="following-sibling::*[self::list or self::figure or self::texttable][1]" />
+</xsl:template>
+
+<xsl:template mode="t-content2" match="*">
+ <xsl:apply-templates select="." />
+ <xsl:if test="not(following-sibling::node()[1] [self::list or self::figure or self::texttable])">
+ <xsl:apply-templates select="following-sibling::node()[1]" mode="t-content2" />
+ </xsl:if>
+</xsl:template>
+
+<xsl:template mode="t-content2" match="text()">
+ <xsl:apply-templates select="." />
+ <xsl:if test="not(following-sibling::node()[1] [self::list or self::figure or self::texttable])">
+ <xsl:apply-templates select="following-sibling::node()[1]" mode="t-content2" />
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="title">
+ <xsl:apply-templates />
+</xsl:template>
+
+<xsl:template name="insertTitle">
+ <xsl:choose>
+ <xsl:when test="@ed:old-title">
+ <del>
+ <xsl:if test="ancestor-or-self::*[@ed:entered-by] and @ed:datetime">
+ <xsl:attribute name="title"><xsl:value-of select="concat(@ed:datetime,', ',ancestor-or-self::*[@ed:entered-by][1]/@ed:entered-by)"/></xsl:attribute>
+ </xsl:if>
+ <xsl:value-of select="@ed:old-title"/>
+ </del>
+ <ins>
+ <xsl:if test="ancestor-or-self::*[@ed:entered-by] and @ed:datetime">
+ <xsl:attribute name="title"><xsl:value-of select="concat(@ed:datetime,', ',ancestor-or-self::*[@ed:entered-by][1]/@ed:entered-by)"/></xsl:attribute>
+ </xsl:if>
+ <xsl:value-of select="@title"/>
+ </ins>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@title"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="section|appendix">
+
+ <xsl:variable name="sectionNumber">
+ <xsl:choose>
+ <xsl:when test="@myns:unnumbered"></xsl:when>
+ <xsl:otherwise><xsl:call-template name="get-section-number" /></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:if test="not(ancestor::section) and not(@myns:notoclink)">
+ <xsl:call-template name="insert-conditional-hrule"/>
+ </xsl:if>
+
+ <xsl:variable name="elemtype">
+ <xsl:choose>
+ <xsl:when test="count(ancestor::section) = 0">h1</xsl:when>
+ <xsl:when test="count(ancestor::section) = 1">h2</xsl:when>
+ <xsl:when test="count(ancestor::section) = 2">h3</xsl:when>
+ <xsl:when test="count(ancestor::section) = 3">h4</xsl:when>
+ <xsl:otherwise>h5</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <!-- process irefs immediadetely following the section so that their anchor
+ actually is the section heading -->
+ <xsl:apply-templates select="iref[count(preceding-sibling::*[not(self::iref)])=0]"/>
+
+ <xsl:element name="{$elemtype}">
+ <xsl:if test="$sectionNumber!=''">
+ <xsl:attribute name="id"><xsl:value-of select="$anchor-prefix"/>.section.<xsl:value-of select="$sectionNumber"/></xsl:attribute>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test="$sectionNumber='1'">
+ <!-- pagebreak, this the first section -->
+ <xsl:attribute name="class">np</xsl:attribute>
+ </xsl:when>
+ <xsl:when test="not(ancestor::section) and not(@myns:notoclink)">
+ <xsl:call-template name="insert-conditional-pagebreak"/>
+ </xsl:when>
+ <xsl:otherwise/>
+ </xsl:choose>
+
+ <xsl:call-template name="insertInsDelClass" />
+
+ <xsl:if test="$sectionNumber!=''">
+ <a href="#{$anchor-prefix}.section.{$sectionNumber}">
+ <xsl:call-template name="emit-section-number">
+ <xsl:with-param name="no" select="$sectionNumber"/>
+ </xsl:call-template>
+ </a>
+ <xsl:text> </xsl:text>
+ </xsl:if>
+
+ <!-- issue tracking? -->
+ <xsl:if test="@ed:resolves">
+ <xsl:call-template name="insert-issue-pointer"/>
+ </xsl:if>
+
+ <xsl:choose>
+ <xsl:when test="@anchor">
+ <a id="{@anchor}" href="#{@anchor}"><xsl:call-template name="insertTitle"/></a>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="insertTitle"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:element>
+ <!-- continue with all child elements but the irefs processed above -->
+ <xsl:apply-templates select="*[not(self::iref)]|iref[count(preceding-sibling::*[not(self::iref)])!=0]" />
+</xsl:template>
+
+<xsl:template match="spanx[@style='emph' or not(@style)]">
+ <em>
+ <xsl:if test="@anchor">
+ <xsl:attribute name="id"><xsl:value-of select="@anchor"/></xsl:attribute>
+ </xsl:if>
+ <xsl:apply-templates />
+ </em>
+</xsl:template>
+
+<xsl:template match="spanx[@style='verb']">
+ <samp>
+ <xsl:if test="@anchor">
+ <xsl:attribute name="id"><xsl:value-of select="@anchor"/></xsl:attribute>
+ </xsl:if>
+ <xsl:apply-templates />
+ </samp>
+</xsl:template>
+
+<xsl:template match="spanx[@style='strong']">
+ <strong>
+ <xsl:if test="@anchor">
+ <xsl:attribute name="id"><xsl:value-of select="@anchor"/></xsl:attribute>
+ </xsl:if>
+ <xsl:apply-templates />
+ </strong>
+</xsl:template>
+
+<xsl:template name="insert-blank-lines">
+ <xsl:param name="no"/>
+ <xsl:choose>
+ <xsl:when test="$no <= 0">
+ <br/>
+ <!-- done -->
+ </xsl:when>
+ <xsl:otherwise>
+ <br/>
+ <xsl:call-template name="insert-blank-lines">
+ <xsl:with-param name="no" select="$no - 1"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="vspace[not(@blankLines)]">
+ <br />
+</xsl:template>
+
+<xsl:template match="vspace">
+ <xsl:call-template name="insert-blank-lines">
+ <xsl:with-param name="no" select="@blankLines"/>
+ </xsl:call-template>
+</xsl:template>
+
+<!-- keep the root for the case when we process XSLT-inline markup -->
+<xsl:variable name="src" select="/" />
+
+<xsl:template name="render-section-ref">
+ <xsl:param name="from" />
+ <xsl:param name="to" />
+
+ <xsl:variable name="refname">
+ <xsl:for-each select="$to">
+ <xsl:call-template name="get-section-type">
+ <xsl:with-param name="prec" select="$from/preceding-sibling::node()[1]" />
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="refnum">
+ <xsl:for-each select="$to">
+ <xsl:call-template name="get-section-number" />
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:attribute name="title">
+ <xsl:value-of select="$to/@title" />
+ </xsl:attribute>
+ <xsl:choose>
+ <xsl:when test="@format='counter'">
+ <xsl:value-of select="$refnum"/>
+ </xsl:when>
+ <xsl:when test="@format='title'">
+ <xsl:value-of select="$to/@title"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="normalize-space(concat($refname,' ',$refnum))"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="xref[node()]">
+
+ <xsl:variable name="target" select="@target" />
+ <xsl:variable name="node" select="$src//*[@anchor=$target]" />
+ <xsl:variable name="anchor"><xsl:value-of select="$anchor-prefix"/>.xref.<xsl:value-of select="@target"/>.<xsl:number level="any" count="xref[@target=$target]"/></xsl:variable>
+
+ <xsl:choose>
+
+ <!-- x:fmt='none': do not generate any links -->
+ <xsl:when test="@x:fmt='none'">
+ <xsl:choose>
+ <xsl:when test="name($node)='reference'">
+ <cite title="{normalize-space($node/front/title)}">
+ <xsl:if test="$xml2rfc-ext-include-references-in-index='yes'">
+ <xsl:attribute name="id"><xsl:value-of select="$anchor"/></xsl:attribute>
+ </xsl:if>
+ <!-- insert id when a backlink to this xref is needed in the index -->
+ <xsl:if test="//iref[@x:for-anchor=$target] | //iref[@x:for-anchor='' and ../@anchor=$target]">
+ <xsl:attribute name="id"><xsl:value-of select="$anchor"/></xsl:attribute>
+ </xsl:if>
+ <xsl:apply-templates/>
+ </cite>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+
+ <!-- Other x:fmt values than "none": unsupported -->
+ <xsl:when test="@x:fmt and @x:fmt!='none'">
+ <xsl:message>unknown xref/@x:fmt extension: <xsl:value-of select="@x:fmt"/></xsl:message>
+ <span class="error">unknown xref/@x:fmt extension: <xsl:value-of select="@x:fmt"/></span>
+ </xsl:when>
+
+ <!-- Section links -->
+ <xsl:when test="name($node)='section' or name($node)='appendix'">
+ <xsl:apply-templates/>
+ <xsl:variable name="context" select="."/>
+ <xsl:text> (</xsl:text>
+ <a href="#{@target}">
+ <!-- insert id when a backlink to this xref is needed in the index -->
+ <xsl:if test="//iref[@x:for-anchor=$target] | //iref[@x:for-anchor='' and ../@anchor=$target]">
+ <xsl:attribute name="id"><xsl:value-of select="$anchor"/></xsl:attribute>
+ </xsl:if>
+ <xsl:call-template name="render-section-ref">
+ <xsl:with-param name="from" select="."/>
+ <xsl:with-param name="to" select="$node"/>
+ </xsl:call-template>
+ </a>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <a href="#{$target}"><xsl:apply-templates /></a>
+ <xsl:for-each select="$src/rfc/back/references//reference[@anchor=$target]">
+ <xsl:text> </xsl:text>
+ <cite title="{normalize-space(front/title)}">
+ <xsl:if test="$xml2rfc-ext-include-references-in-index='yes'">
+ <xsl:attribute name="id"><xsl:value-of select="$anchor"/></xsl:attribute>
+ </xsl:if>
+ <xsl:call-template name="referencename">
+ <xsl:with-param name="node" select="." />
+ </xsl:call-template>
+ </cite>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+
+</xsl:template>
+
+<xsl:template match="xref[not(node())]">
+
+ <xsl:variable name="context" select="." />
+ <xsl:variable name="target" select="@target" />
+ <xsl:variable name="anchor"><xsl:value-of select="$anchor-prefix"/>.xref.<xsl:value-of select="@target"/>.<xsl:number level="any" count="xref[@target=$target]"/></xsl:variable>
+ <xsl:variable name="node" select="$src//*[@anchor=$target]" />
+ <xsl:if test="count($node)=0 and not(ancestor::ed:del)">
+ <xsl:message>Undefined target: <xsl:value-of select="@target" /></xsl:message>
+ <span class="error">Undefined target: <xsl:value-of select="@target" /></span>
+ </xsl:if>
+
+ <xsl:choose>
+
+ <!-- Section links -->
+ <xsl:when test="name($node)='section' or name($node)='appendix'">
+ <a href="#{@target}">
+ <!-- insert id when a backlink to this xref is needed in the index -->
+ <xsl:if test="//iref[@x:for-anchor=$target] | //iref[@x:for-anchor='' and ../@anchor=$target]">
+ <xsl:attribute name="id"><xsl:value-of select="$anchor"/></xsl:attribute>
+ </xsl:if>
+ <xsl:call-template name="render-section-ref">
+ <xsl:with-param name="from" select="."/>
+ <xsl:with-param name="to" select="$node"/>
+ </xsl:call-template>
+ </a>
+ </xsl:when>
+
+ <!-- Figure links -->
+ <xsl:when test="name($node)='figure'">
+ <a href="#{$target}">
+ <xsl:variable name="figcnt">
+ <xsl:for-each select="$node">
+ <xsl:number level="any" count="figure[@title!='' or @anchor!='']" />
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="@format='counter'">
+ <xsl:value-of select="$figcnt" />
+ </xsl:when>
+ <xsl:when test="@format='title'">
+ <xsl:value-of select="$node/@title" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="normalize-space(concat('Figure ',$figcnt))"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </a>
+ </xsl:when>
+
+ <!-- Table links -->
+ <xsl:when test="name($node)='texttable'">
+ <a href="#{$target}">
+ <xsl:variable name="tabcnt">
+ <xsl:for-each select="$node">
+ <xsl:number level="any" count="texttable[@title!='' or @anchor!='']" />
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="@format='counter'">
+ <xsl:value-of select="$tabcnt" />
+ </xsl:when>
+ <xsl:when test="@format='title'">
+ <xsl:value-of select="$node/@title" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="normalize-space(concat('Table ',$tabcnt))"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </a>
+ </xsl:when>
+
+ <!-- Reference links -->
+ <xsl:when test="name($node)='reference'">
+
+ <xsl:variable name="href">
+ <xsl:call-template name="computed-target">
+ <xsl:with-param name="bib" select="$node"/>
+ <xsl:with-param name="ref" select="."/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <!--
+ Formats:
+
+ () [XXXX] (Section SS)
+ , [XXXX], Section SS
+ of Section SS of [XXXX]
+ sec Section SS
+ number SS
+ -->
+
+ <xsl:if test="@x:fmt and not(@x:fmt='()' or @x:fmt=',' or @x:fmt='of' or @x:fmt='sec' or @x:fmt='anchor' or @x:fmt='number')">
+ <xsl:message>unknown xref/@x:fmt extension: <xsl:value-of select="@x:fmt"/></xsl:message>
+ <span class="error">unknown xref/@x:fmt extension: <xsl:value-of select="@x:fmt"/></span>
+ </xsl:if>
+
+ <xsl:if test="@x:sec">
+
+ <xsl:choose>
+ <xsl:when test="@x:fmt='of' or @x:fmt='sec'">
+ <xsl:choose>
+ <xsl:when test="$href!=''">
+ <a href="{$href}">
+ <xsl:if test="@x:fmt='sec' and $xml2rfc-ext-include-references-in-index='yes'">
+ <xsl:attribute name="id"><xsl:value-of select="$anchor"/></xsl:attribute>
+ </xsl:if>
+ <xsl:text>Section </xsl:text>
+ <xsl:value-of select="@x:sec"/>
+ </a>
+ </xsl:when>
+ <xsl:otherwise>Section <xsl:value-of select="@x:sec"/></xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="@x:fmt='of'">
+ <xsl:text> of </xsl:text>
+ </xsl:if>
+ </xsl:when>
+ <xsl:when test="@x:fmt='number'">
+ <xsl:choose>
+ <xsl:when test="$href!=''">
+ <a href="{$href}">
+ <xsl:if test="$xml2rfc-ext-include-references-in-index='yes'">
+ <xsl:attribute name="id"><xsl:value-of select="$anchor"/></xsl:attribute>
+ </xsl:if>
+ <xsl:value-of select="@x:sec"/>
+ </a>
+ </xsl:when>
+ <xsl:otherwise><xsl:value-of select="@x:sec"/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise/>
+ </xsl:choose>
+ </xsl:if>
+
+ <xsl:if test="not(@x:sec) or (@x:fmt!='sec' and @x:fmt!='number')">
+ <a href="#{$target}">
+ <xsl:if test="$xml2rfc-ext-include-references-in-index='yes'">
+ <xsl:attribute name="id"><xsl:value-of select="$anchor"/></xsl:attribute>
+ </xsl:if>
+ <cite title="{normalize-space($node/front/title)}">
+ <xsl:variable name="val">
+ <xsl:call-template name="referencename">
+ <xsl:with-param name="node" select="$node" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="@x:fmt='anchor'">
+ <!-- remove brackets -->
+ <xsl:value-of select="substring($val,2,string-length($val)-2)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$val"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </cite>
+ </a>
+ </xsl:if>
+
+ <xsl:if test="@x:sec">
+ <xsl:choose>
+ <xsl:when test="@x:fmt='()'">
+ <xsl:text> (</xsl:text>
+ <xsl:choose>
+ <xsl:when test="$href!=''">
+ <a href="{$href}">Section <xsl:value-of select="@x:sec"/></a>
+ </xsl:when>
+ <xsl:otherwise>Section <xsl:value-of select="@x:sec"/></xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:when test="@x:fmt=','">
+ <xsl:text>, </xsl:text>
+ <xsl:choose>
+ <xsl:when test="$href!=''">
+ <a href="{$href}">Section <xsl:value-of select="@x:sec"/></a>
+ </xsl:when>
+ <xsl:otherwise>Section <xsl:value-of select="@x:sec"/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise/>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <xsl:message>xref to unknown element: <xsl:value-of select="name($node)"/></xsl:message>
+ <span class="error">xref to unknown element: <xsl:value-of select="name($node)"/></span>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- mark unmatched elements red -->
+
+<xsl:template match="*">
+ <xsl:message>ERROR: no XSLT template for element: <<xsl:value-of select="name()"/>></xsl:message>
+ <tt class="error"><<xsl:value-of select="name()" />></tt>
+ <xsl:copy><xsl:apply-templates select="node()|@*" /></xsl:copy>
+ <tt class="error"></<xsl:value-of select="name()" />></tt>
+</xsl:template>
+
+<xsl:template match="/">
+ <xsl:apply-templates select="*" />
+</xsl:template>
+
+<!-- utility templates -->
+
+<xsl:template name="collectLeftHeaderColumn">
+ <xsl:param name="mode" />
+ <!-- default case -->
+ <xsl:if test="not($xml2rfc-private)">
+ <myns:item>Network Working Group</myns:item>
+ <myns:item>
+ <xsl:choose>
+ <xsl:when test="/rfc/@ipr and not(/rfc/@number)">Internet Draft</xsl:when>
+ <xsl:otherwise>Request for Comments: <xsl:value-of select="/rfc/@number"/></xsl:otherwise>
+ </xsl:choose>
+ </myns:item>
+ <xsl:if test="/rfc/@docName and $mode!='nroff'">
+ <myns:item>
+ <<xsl:value-of select="/rfc/@docName" />>
+ </myns:item>
+ </xsl:if>
+ <xsl:if test="/rfc/@obsoletes and /rfc/@obsoletes!=''">
+ <myns:item>
+ <xsl:text>Obsoletes: </xsl:text>
+ <xsl:call-template name="rfclist">
+ <xsl:with-param name="list" select="normalize-space(/rfc/@obsoletes)" />
+ </xsl:call-template>
+ <xsl:if test="not(/rfc/@number)"> (if approved)</xsl:if>
+ </myns:item>
+ </xsl:if>
+ <xsl:if test="/rfc/@seriesNo">
+ <myns:item>
+ <xsl:choose>
+ <xsl:when test="/rfc/@category='bcp'">BCP: <xsl:value-of select="/rfc/@seriesNo" /></xsl:when>
+ <xsl:when test="/rfc/@category='info'">FYI: <xsl:value-of select="/rfc/@seriesNo" /></xsl:when>
+ <xsl:when test="/rfc/@category='std'">STD: <xsl:value-of select="/rfc/@seriesNo" /></xsl:when>
+ <xsl:otherwise><xsl:value-of select="concat(/rfc/@category,': ',/rfc/@seriesNo)" /></xsl:otherwise>
+ </xsl:choose>
+ </myns:item>
+ </xsl:if>
+ <xsl:if test="/rfc/@updates and /rfc/@updates!=''">
+ <myns:item>
+ <xsl:text>Updates: </xsl:text>
+ <xsl:call-template name="rfclist">
+ <xsl:with-param name="list" select="normalize-space(/rfc/@updates)" />
+ </xsl:call-template>
+ <xsl:if test="not(/rfc/@number)"> (if approved)</xsl:if>
+ </myns:item>
+ </xsl:if>
+ <xsl:if test="$mode!='nroff'">
+ <myns:item>
+ <xsl:choose>
+ <xsl:when test="/rfc/@number">
+ <xsl:text>Category: </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>Intended status: </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:call-template name="get-category-long" />
+ </myns:item>
+ </xsl:if>
+ <xsl:if test="/rfc/@ipr and not(/rfc/@number)">
+ <myns:item>Expires: <xsl:call-template name="expirydate" /></myns:item>
+ </xsl:if>
+ </xsl:if>
+
+ <!-- private case -->
+ <xsl:if test="$xml2rfc-private">
+ <myns:item><xsl:value-of select="$xml2rfc-private" /></myns:item>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template name="collectRightHeaderColumn">
+ <xsl:for-each select="author">
+ <xsl:variable name="initials">
+ <xsl:call-template name="format-initials"/>
+ </xsl:variable>
+ <xsl:if test="@surname">
+ <myns:item>
+ <xsl:value-of select="concat($initials,' ',@surname)" />
+ <xsl:if test="@role">
+ <xsl:choose>
+ <xsl:when test="@role='editor'">
+ <xsl:text>, Editor</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>, </xsl:text><xsl:value-of select="@role" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </myns:item>
+ </xsl:if>
+ <xsl:variable name="org">
+ <xsl:choose>
+ <xsl:when test="organization/@abbrev"><xsl:value-of select="organization/@abbrev" /></xsl:when>
+ <xsl:otherwise><xsl:value-of select="organization" /></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="orgOfFollowing">
+ <xsl:choose>
+ <xsl:when test="following-sibling::*[1]/organization/@abbrev"><xsl:value-of select="following-sibling::*[1]/organization/@abbrev" /></xsl:when>
+ <xsl:otherwise><xsl:value-of select="following-sibling::*/organization" /></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:if test="$org != $orgOfFollowing and $org != ''">
+ <myns:item><xsl:value-of select="$org" /></myns:item>
+ </xsl:if>
+ </xsl:for-each>
+ <myns:item>
+ <xsl:value-of select="concat(date/@month,' ',date/@year)" />
+ </myns:item>
+</xsl:template>
+
+
+<xsl:template name="emitheader">
+ <xsl:param name="lc" />
+ <xsl:param name="rc" />
+
+ <xsl:for-each select="$lc/myns:item | $rc/myns:item">
+ <xsl:variable name="pos" select="position()" />
+ <xsl:if test="$pos < count($lc/myns:item) + 1 or $pos < count($rc/myns:item) + 1">
+ <tr>
+ <td class="header left"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$lc/myns:item[$pos]/node()" /></xsl:call-template></td>
+ <td class="header right"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$rc/myns:item[$pos]/node()" /></xsl:call-template></td>
+ </tr>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<!-- convenience template that avoids copying namespace nodes we don't want -->
+<xsl:template name="copynodes">
+ <xsl:param name="nodes" />
+ <xsl:for-each select="$nodes">
+ <xsl:choose>
+ <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>
+ <xsl:when test="self::*">
+ <xsl:element name="{name()}">
+ <xsl:copy-of select="@*|node()" />
+ </xsl:element>
+ </xsl:when>
+ <!-- workaround for opera, remove when Opera > 9.0.x comes out -->
+ <xsl:when test="self::text()">
+ <xsl:value-of select="."/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select="." />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="expirydate">
+ <xsl:variable name="date" select="/rfc/front/date" />
+ <xsl:choose>
+ <xsl:when test="$date/@month='January'">July <xsl:value-of select="$date/@year" /></xsl:when>
+ <xsl:when test="$date/@month='February'">August <xsl:value-of select="$date/@year" /></xsl:when>
+ <xsl:when test="$date/@month='March'">September <xsl:value-of select="$date/@year" /></xsl:when>
+ <xsl:when test="$date/@month='April'">October <xsl:value-of select="$date/@year" /></xsl:when>
+ <xsl:when test="$date/@month='May'">November <xsl:value-of select="$date/@year" /></xsl:when>
+ <xsl:when test="$date/@month='June'">December <xsl:value-of select="$date/@year" /></xsl:when>
+ <xsl:when test="$date/@month='July'">January <xsl:value-of select="$date/@year + 1" /></xsl:when>
+ <xsl:when test="$date/@month='August'">February <xsl:value-of select="$date/@year + 1" /></xsl:when>
+ <xsl:when test="$date/@month='September'">March <xsl:value-of select="$date/@year + 1" /></xsl:when>
+ <xsl:when test="$date/@month='October'">April <xsl:value-of select="$date/@year + 1" /></xsl:when>
+ <xsl:when test="$date/@month='November'">May <xsl:value-of select="$date/@year + 1" /></xsl:when>
+ <xsl:when test="$date/@month='December'">June <xsl:value-of select="$date/@year + 1" /></xsl:when>
+ <xsl:otherwise>WRONG SYNTAX FOR MONTH</xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="get-month-as-num">
+ <xsl:variable name="date" select="/rfc/front/date" />
+ <xsl:choose>
+ <xsl:when test="$date/@month='January'">01</xsl:when>
+ <xsl:when test="$date/@month='February'">02</xsl:when>
+ <xsl:when test="$date/@month='March'">03</xsl:when>
+ <xsl:when test="$date/@month='April'">04</xsl:when>
+ <xsl:when test="$date/@month='May'">05</xsl:when>
+ <xsl:when test="$date/@month='June'">06</xsl:when>
+ <xsl:when test="$date/@month='July'">07</xsl:when>
+ <xsl:when test="$date/@month='August'">08</xsl:when>
+ <xsl:when test="$date/@month='September'">09</xsl:when>
+ <xsl:when test="$date/@month='October'">10</xsl:when>
+ <xsl:when test="$date/@month='November'">11</xsl:when>
+ <xsl:when test="$date/@month='December'">12</xsl:when>
+ <xsl:otherwise>WRONG SYNTAX FOR MONTH</xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- produce back section with author information -->
+<xsl:template name="get-authors-section-title">
+ <xsl:choose>
+ <xsl:when test="count(/rfc/front/author)=1">Author's Address</xsl:when>
+ <xsl:otherwise>Authors' Addresses</xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="get-authors-section-number">
+ <xsl:if test="/*/x:assign-section-number[@builtin-target='authors']">
+ <xsl:value-of select="/*/x:assign-section-number[@builtin-target='authors']/@number"/>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template name="insertAuthors">
+
+ <xsl:call-template name="insert-conditional-hrule"/>
+
+ <xsl:variable name="number">
+ <xsl:call-template name="get-authors-section-number"/>
+ </xsl:variable>
+
+ <h1 id="{$anchor-prefix}.authors">
+ <xsl:call-template name="insert-conditional-pagebreak"/>
+ <xsl:if test="$number != ''">
+ <a href="#{$anchor-prefix}.section.{$number}" id="{$anchor-prefix}.section.{$number}"><xsl:value-of select="$number"/>.</a>
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ <a href="#{$anchor-prefix}.authors"><xsl:call-template name="get-authors-section-title"/></a>
+ </h1>
+
+ <xsl:apply-templates select="/rfc/front/author" />
+</xsl:template>
+
+
+
+<!-- insert copyright statement -->
+
+<xsl:template name="insertCopyright" myns:namespaceless-elements="xml2rfc">
+
+ <xsl:choose>
+ <xsl:when test="$ipr-rfc3667">
+ <section title="Full Copyright Statement" anchor="{$anchor-prefix}.copyright" myns:unnumbered="unnumbered" myns:notoclink="notoclink">
+ <t>
+ <xsl:choose>
+ <xsl:when test="$ipr-rfc4748">
+ Copyright © The IETF Trust (<xsl:value-of select="/rfc/front/date/@year" />).
+ </xsl:when>
+ <xsl:otherwise>
+ Copyright © The Internet Society (<xsl:value-of select="/rfc/front/date/@year" />).
+ </xsl:otherwise>
+ </xsl:choose>
+ </t>
+ <t>
+ This document is subject to the rights, licenses and restrictions
+ contained in BCP 78<xsl:if test="/rfc/@submissionType='independent'"> and at <eref target="http://www.rfc-editor.org/copyright.html"/></xsl:if>, and except as set forth therein, the authors
+ retain all their rights.
+ </t>
+ <t>
+ <xsl:choose>
+ <xsl:when test="$ipr-rfc4748">
+ This document and the information contained herein are provided
+ on an “AS IS” basis and THE CONTRIBUTOR,
+ THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY),
+ THE INTERNET SOCIETY, THE IETF TRUST AND THE INTERNET ENGINEERING
+ TASK FORCE DISCLAIM ALL WARRANTIES,
+ EXPRESS OR IMPLIED,
+ INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
+ INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+ WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ </xsl:when>
+ <xsl:otherwise>
+ This document and the information contained herein are provided
+ on an “AS IS” basis and THE CONTRIBUTOR,
+ THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY),
+ THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM
+ ALL WARRANTIES,
+ EXPRESS OR IMPLIED,
+ INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
+ INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+ WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ </xsl:otherwise>
+ </xsl:choose>
+ </t>
+ </section>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- <http://tools.ietf.org/html/rfc2026#section-10.4> -->
+ <section title="Full Copyright Statement" anchor="{$anchor-prefix}.copyright" myns:unnumbered="unnumbered" myns:notoclink="notoclink">
+ <t>
+ Copyright © The Internet Society (<xsl:value-of select="/rfc/front/date/@year" />). All Rights Reserved.
+ </t>
+ <t>
+ This document and translations of it may be copied and furnished to
+ others, and derivative works that comment on or otherwise explain it
+ or assist in its implementation may be prepared, copied, published and
+ distributed, in whole or in part, without restriction of any kind,
+ provided that the above copyright notice and this paragraph are
+ included on all such copies and derivative works. However, this
+ document itself may not be modified in any way, such as by removing
+ the copyright notice or references to the Internet Society or other
+ Internet organizations, except as needed for the purpose of
+ developing Internet standards in which case the procedures for
+ copyrights defined in the Internet Standards process must be
+ followed, or as required to translate it into languages other than
+ English.
+ </t>
+ <t>
+ The limited permissions granted above are perpetual and will not be
+ revoked by the Internet Society or its successors or assignees.
+ </t>
+ <t>
+ This document and the information contained herein is provided on an
+ “;AS IS” basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+ TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+ HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ </t>
+ </section>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <section title="Intellectual Property" anchor="{$anchor-prefix}.ipr" myns:unnumbered="unnumbered">
+ <xsl:choose>
+ <xsl:when test="$ipr-rfc3667">
+ <t>
+ The IETF takes no position regarding the validity or scope of any
+ Intellectual Property Rights or other rights that might be claimed to
+ pertain to the implementation or use of the technology described in
+ this document or the extent to which any license under such rights
+ might or might not be available; nor does it represent that it has
+ made any independent effort to identify any such rights. Information
+ on the procedures with respect to rights in RFC documents
+ can be found in BCP 78 and BCP 79.
+ </t>
+ <t>
+ Copies of IPR disclosures made to the IETF Secretariat and any
+ assurances of licenses to be made available, or the result of an
+ attempt made to obtain a general license or permission for the use
+ of such proprietary rights by implementers or users of this
+ specification can be obtained from the IETF on-line IPR repository
+ at <eref target="http://www.ietf.org/ipr"/>.
+ </t>
+ <t>
+ The IETF invites any interested party to bring to its attention any
+ copyrights, patents or patent applications, or other proprietary
+ rights that may cover technology that may be required to implement
+ this standard. Please address the information to the IETF at
+ <eref target="mailto:ietf-ipr@ietf.org">ietf-ipr@ietf.org</eref>.
+ </t>
+ </xsl:when>
+ <xsl:otherwise>
+ <t>
+ The IETF takes no position regarding the validity or scope of
+ any intellectual property or other rights that might be claimed
+ to pertain to the implementation or use of the technology
+ described in this document or the extent to which any license
+ under such rights might or might not be available; neither does
+ it represent that it has made any effort to identify any such
+ rights. Information on the IETF's procedures with respect to
+ rights in standards-track and standards-related documentation
+ can be found in BCP-11. Copies of claims of rights made
+ available for publication and any assurances of licenses to
+ be made available, or the result of an attempt made
+ to obtain a general license or permission for the use of such
+ proprietary rights by implementors or users of this
+ specification can be obtained from the IETF Secretariat.
+ </t>
+ <t>
+ The IETF invites any interested party to bring to its
+ attention any copyrights, patents or patent applications, or
+ other proprietary rights which may cover technology that may be
+ required to practice this standard. Please address the
+ information to the IETF Executive Director.
+ </t>
+ <xsl:if test="$xml2rfc-iprnotified='yes'">
+ <t>
+ The IETF has been notified of intellectual property rights
[... 2386 lines stripped ...]
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org