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@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@greenbytes.de) 15 16 placed into the public domain 17 18 change history: 19 20 2001-03-28 julian.reschke@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@greenbytes.de 26 27 Moved HTML output into XHTML namespace. 28 29 2001-10-02 julian.reschke@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@greenbytes.de 35 36 Made telephone number links active. 37 38 2001-10-08 julian.reschke@greenbytes.de 39 40 Support for vspace element. 41 42 2001-10-09 julian.reschke@greenbytes.de 43 44 Experimental support for rfc-issue PI. 45 46 2001-11-11 julian.reschke@greenbytes.de 47 48 Support rfc private PI. Removed bogus code reporting the WG in the header. 49 50 2001-12-17 julian.reschke@greenbytes.de 51 52 Support title attribute on references element 53 54 2002-01-05 julian.reschke@greenbytes.de 55 56 Support for list/@style="@format" 57 58 2002-01-09 julian.reschke@greenbytes.de 59 60 Display "closed" RFC issues as deleted 61 62 2002-01-14 julian.reschke@greenbytes.de 63 64 Experimentally and optionally parse XML encountered in artwork elements 65 (requires MSXSL). 66 67 2002-01-27 julian.reschke@greenbytes.de 68 69 Some cleanup. Moved RFC issues from PIs into namespaced elements. 70 71 2002-01-29 julian.reschke@greenbytes.de 72 73 Added support for sortrefs PI. Added support for figure names. 74 75 2002-02-07 julian.reschke@greenbytes.de 76 77 Highlight parts of artwork which are too wide (72 characters). 78 79 2002-02-12 julian.reschke@greenbytes.de 80 81 Code rearrangement for static texts. Fixes for section numbering. 82 TOC generation rewritten. 83 84 2002-02-15 julian.reschke@greenbytes.de 85 86 Support for irefs in sections; support iref @primary=true 87 88 2002-03-03 julian.reschke@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@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@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@greenbytes.de 104 105 Made rendering of references more tolerant re: missing parts. 106 107 2002-04-08 julian.reschke@greenbytes.de 108 109 Fixed reference numbering when references are split into separate sections. 110 111 2002-04-16 julian.reschke@greenbytes.de 112 113 Fix default namespace (shouldn't be set for HTML output method). 114 115 2002-04-19 julian.reschke@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@greenbytes.de 121 122 Make numbered list inside numbered lists use alphanumeric numbering. 123 124 2002-05-05 julian.reschke@greenbytes.de 125 126 Updated issue/editing support. 127 128 2002-05-15 julian.reschke@greenbytes.de 129 130 Bugfix for section numbering after introduction of ed:replace 131 132 2002-06-21 julian.reschke@greenbytes.de 133 134 When producing private documents, do not include document status, copyright etc. 135 136 2002-07-08 julian.reschke@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@greenbytes.de 149 150 Support for tocdepth PI. 151 152 2002-11-03 julian.reschke@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@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@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@greenbytes.de 168 169 experimental support for appendix and spanx elements 170 171 2003-04-19 julian.reschke@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@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@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@greenbytes.de 190 191 support for "background" PI. 192 193 2003-05-11 julian.reschke@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@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@greenbytes.de 208 209 add DC.Creator meta tag, refactoring 210 211 2003-05-16 julian.reschke@greenbytes.de 212 213 put nbsps between "section" and section number (xref). 214 215 2003-05-18 julian.reschke@greenbytes.de 216 217 author summary: add missing comma. 218 219 2003-06-06 julian.reschke@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@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@greenbytes.de 232 233 Another fix for DC.Creator meta tag creation based on RFC2731 234 235 2003-07-24 julian.reschke@greenbytes.de 236 237 Fix namespace name for DC.Creator. 238 239 2003-08-06 julian.reschke@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@greenbytes.de 245 246 Generate HTML lang tag. 247 248 2003-08-10 julian.reschke@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@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@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@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@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@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@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@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@greenbytes.de 301 302 When PI compact = 'yes', make most CSS print page breaks conditional. 303 304 2004-02-20 julian.reschke@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@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@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=')], '" ', ''), 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=')], '" ', ''), 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=')], '" ', ''), 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=')], '" ', ''), 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=')], '" ', ''), 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=')], '" ', ''), 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=')], '" ', ''), 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=')], '" ', ''), 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=')], '" ', ''), 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=')], '"', ''), 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=')], '"', ''), 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=')], '" ', ''), 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=')], '" ', ''), 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=')], '"', ''), 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=')], '"', ''), 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 > 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(.,'<?xml')"> 523 <xsl:variable name="body" select="substring-after(substring-after(.,'<?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> </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> </td> 569 <td><xsl:value-of select="organization" /></td> 570 </tr> 571 <xsl:if test="address/postal/street!=''"> 572 <tr> 573 <td> </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> </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" /> </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> </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: </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: </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: </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: </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> </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><</xsl:text> 674 <a href="{@target}"><xsl:value-of select="@target" /></a> 675 <xsl:text>></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">, </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">, </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) > 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!=''"> <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" /> </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) > 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>  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 > 0]"> 1273 <br/><xsl:for-each select="//*[position() <= @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,' ',$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 ',$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><<xsl:value-of select="name()" />></tt></font> 1358 <xsl:copy><xsl:apply-templates select="node()|@*" /></xsl:copy> 1359 <font color="red"><tt></<xsl:value-of select="name()" />></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 <<xsl:value-of select="/rfc/@docName" />> 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 < count($lc/myns:item) + 1 or $pos < 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> </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> </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) > 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@ietf.org">ietf-ipr@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 "AS IS" 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"> 1703a { 1704 text-decoration: none 1705} 1706a:hover { 1707 text-decoration: underline 1708} 1709a:active { 1710 text-decoration: underline 1711} 1712body { 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} 1720dl { 1721 margin-left: 2em; 1722} 1723h1 { 1724 color: #333333; 1725 font-size: 16px; 1726 line-height: 16px; 1727 font-family: helvetica, arial, sans-serif; 1728 page-break-after: avoid; 1729} 1730h1.np { 1731 page-break-before: always; 1732} 1733h2 { 1734 color: #000000; 1735 font-size: 14px; 1736 font-family: helvetica, arial, sans-serif; 1737 page-break-after: avoid; 1738} 1739h3 { 1740 color: #000000; 1741 font-size: 13px; 1742 font-family: helvetica, arial, sans-serif; 1743 page-break-after: avoid; 1744} 1745img { 1746 margin-left: 3em; 1747} 1748li { 1749 margin-left: 2em; 1750 margin-right: 2em; 1751} 1752ol { 1753 margin-left: 2em; 1754 margin-right: 2em; 1755} 1756p { 1757 margin-left: 2em; 1758 margin-right: 2em; 1759} 1760pre { 1761 margin-left: 3em; 1762 background-color: lightyellow; 1763} 1764table { 1765 margin-left: 2em; 1766} 1767table.header { 1768 width: 66%; 1769} 1770td.top { 1771 vertical-align: top; 1772} 1773td.topnowrap { 1774 vertical-align: top; 1775 white-space: nowrap; 1776} 1777td.right { 1778 text-align: right; 1779} 1780td.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} 1788td.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} 1796thead { 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} 1856del { 1857 color: red; 1858 text-decoration: line-through; 1859} 1860.del { 1861 color: red; 1862 text-decoration: line-through; 1863} 1864ins { 1865 color: green; 1866 text-decoration: underline; 1867} 1868.ins { 1869 color: green; 1870 text-decoration: underline; 1871} 1872 1873table.openissue { 1874 background-color: khaki; 1875 border-width: thin; 1876 border-style: solid; 1877 border-color: black; 1878} 1879 1880table.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  <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   <xsl:value-of select="@item" />  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     <xsl:value-of select="@subitem" />  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 "Internet Official Protocol 2120 Standards" (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§','.')) >= $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="'      '"/> 2170 <del> 2171 <xsl:value-of select="$number" />  2172 <a href="#{$target}"><xsl:value-of select="$title"/></a> 2173 </del> 2174 </xsl:when> 2175 <xsl:when test="$number=''"> 2176 <b> 2177    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§',' ')"/> 2184 <xsl:value-of select="$number" />  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="'§'"/> 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="'§'"/> 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="'§'"/> 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="'§'"/> 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"> RFC </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"> TOC </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) > $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) >= $maxw"> 2393 <span class="toowide"><xsl:value-of select="substring($line,$maxw)" /></span> 2394 </xsl:if> 2395 <xsl:text> </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,' ',' ')"/></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,' ')" /> 2411 </xsl:when> 2412 <xsl:otherwise><xsl:value-of select="concat($line,' ')" /></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="' '" /> 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;</xsl:when> 2462 <xsl:when test="$c=' '">&#10;</xsl:when> 2463 <xsl:when test="$c=' '">&#13;</xsl:when> 2464 <xsl:when test="$c='&'">&amp;</xsl:when> 2465 <xsl:otherwise><xsl:value-of select="$c" /></xsl:otherwise> 2466 </xsl:choose> 2467 <xsl:if test="string-length($text) > 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> </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> i </xsl:text> 2548 </a> 2549 <xsl:text> </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   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> <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(' <',@cite,'>')" /> 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> i </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> i </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> i </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() < $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   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,' & ',/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) > 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