html5/markup/tools toc.xsl,NONE,1.1 specgen.xsl,1.27,1.28

Update of /sources/public/html5/markup/tools
In directory hutz:/tmp/cvs-serv29902/tools

Modified Files:
	specgen.xsl 
Added Files:
	toc.xsl 
Log Message:
fixed problem with TOC skip link, move TOC-generating XSL code to separate file


Index: specgen.xsl
===================================================================
RCS file: /sources/public/html5/markup/tools/specgen.xsl,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- specgen.xsl	1 May 2009 11:08:00 -0000	1.27
+++ specgen.xsl	1 May 2009 13:53:15 -0000	1.28
@@ -4,24 +4,20 @@
                 xmlns:date="http://exslt.org/dates-and-times"
                 exclude-result-prefixes='h date'
                 version='1.0' id='xslt'>
-
   <xsl:output method='html' encoding='us-ascii'
     doctype-public='-//W3C//DTD HTML 4.01//EN'
     doctype-system='http://www.w3.org/TR/html4/strict.dtd'
     media-type='text/html; charset=us-ascii'
     indent="yes"/>
-
+  <xsl:include href="toc.xsl"/>
   <xsl:include href="chunker.xsl"/>
   <xsl:param name="chunk" select="0"/>
   <xsl:param name="TOC-file"/>
-
   <xsl:key name="id" match="*" use="@id"/>
   <xsl:key name="chunk-for-id" match="*[@id]" use="ancestor::h:section[child::h:h2[@class='element-head']]
     |ancestor::h:section[(count(ancestor::h:section)=0 and not(@id='elements'))]"/>
-
   <xsl:variable name='sectionsID'>this_sections</xsl:variable>
   <xsl:variable name='appendicesID'>appendices</xsl:variable>
-
   <xsl:variable name='id' select='/*/h:head/h:meta[@name="revision"]/@content'/>
   <xsl:variable name='rev' select='substring-before(substring-after(substring-after($id, " "), " "), " ")'/>
   <xsl:variable name='toc-marker' select='//h:*[@id = "toc"][1]'/>
@@ -33,7 +29,6 @@
   <xsl:variable name="previous-nodeset" select="$info/h:*[@id = 'versions']/h:*[contains(@class,'previous')]"/>
   <xsl:variable name="person-nodeset" select='$info/h:*[@id="editors"]/h:*[@ class="person"]'/>
   <xsl:variable name="groupinfo-nodeset" select="$info/h:*[@id = 'groupinfo']"/>
-
   <xsl:template match='/'>
     <!-- * <xsl:if test='$maturity = "ED"'> -->
       <!-- * <xsl:comment> * </xsl:comment> -->
@@ -43,14 +38,12 @@
     <!-- * </xsl:if> -->
     <xsl:apply-templates select='/*'/>
   </xsl:template>
-
   <xsl:template match='h:*'>
     <xsl:element name="{name()}" namespace="{namespace-uri()}">
       <xsl:copy-of select='@*[namespace-uri()="" or namespace-uri="http://www.w3.org/XML/1998/namespace"]'/>
       <xsl:apply-templates select='node()'/>
     </xsl:element>
   </xsl:template>
-
   <xsl:template match='h:head'>
     <head>
       <xsl:copy-of select='@*[namespace-uri()="" or namespace-uri="http://www.w3.org/XML/1998/namespace"]'/>
@@ -75,7 +68,6 @@
       <xsl:text>&#10;  </xsl:text>
     </head>
   </xsl:template>
-
   <!-- * suppress meta@charset -->
   <xsl:template match="h:meta[@charset]"/>
   <!-- * suppress duplication of ED CSS link -->
@@ -86,7 +78,6 @@
   <xsl:template match="h:*[@id = 'info']"/>
   <!-- * remove source admonition -->
   <xsl:template match="*[@id = 'source-admonition']" priority="10"/>
-
   <xsl:template name='monthName'>
     <xsl:param name='n' select='1'/>
     <xsl:param name='s' select='"January February March April May June July August September October November December "'/>
@@ -103,7 +94,6 @@
       </xsl:otherwise>
     </xsl:choose>
   </xsl:template>
-
   <xsl:template match="h:body">
     <body>
       <xsl:copy-of select='@*[namespace-uri()="" or namespace-uri="http://www.w3.org/XML/1998/namespace"]'/>
@@ -111,7 +101,6 @@
       <xsl:apply-templates/>
     </body>
   </xsl:template>
-
   <xsl:template name='top'>
     <div class='head'>
       <!-- * CHANGE_ME_BACK -->
@@ -208,7 +197,6 @@
     </div>
     <hr/>
   </xsl:template>
-
   <xsl:template name='date'>
     <xsl:variable name='date'>
       <xsl:value-of select='substring($this, string-length($this) - 8, 8)'/>
@@ -232,7 +220,6 @@
       </xsl:otherwise>
     </xsl:choose>
   </xsl:template>
-
   <xsl:template name='maturity'>
     <xsl:choose>
       <xsl:when test='$maturity="FPWD"'>First Public Working Draft</xsl:when>
@@ -247,7 +234,6 @@
       <xsl:otherwise>Editor’s Draft</xsl:otherwise>
     </xsl:choose>
   </xsl:template>
-
   <xsl:template name='maturity-short'>
     <xsl:choose>
       <xsl:when test='$maturity="FPWD"'>Working Draft</xsl:when>
@@ -262,14 +248,12 @@
       <xsl:otherwise>Editor’s Draft</xsl:otherwise>
     </xsl:choose>
   </xsl:template>
-
   <xsl:template match="h:*[@id = 'abstract']">
     <div id="abstract">
       <xsl:apply-templates/>
       <!-- * <xsl:call-template name="revision-note"/> -->
     </div>
   </xsl:template>
-
   <xsl:template name='revision-note'>
     <xsl:if test='$maturity="ED"'>
       <div class='ednote'>
@@ -279,7 +263,6 @@
       </div>
     </xsl:if>
   </xsl:template>
-
   <xsl:template match="h:*[@id = 'status']">
     <div>
       <xsl:copy-of select='@*[namespace-uri()="" or namespace-uri="http://www.w3.org/XML/1998/namespace"]'/>
@@ -287,7 +270,6 @@
       <xsl:call-template name="sotd"/>
     </div>
   </xsl:template>
-
   <xsl:template name='sotd'>
     <xsl:variable name='w3c-ipp' select='$groupinfo-nodeset/*[@id = "w3c-ipp"]'/>
     <xsl:variable name='comments-address' select='$groupinfo-nodeset/*[@id = "comments-address"]'/>
@@ -412,27 +394,6 @@
       <xsl:text>&#10;</xsl:text>
     </xsl:if>
   </xsl:template>
-
-  <xsl:template match="h:*[@id = 'toc']">
-    <xsl:text>&#10;</xsl:text>
-    <div id='toc'>
-      <xsl:copy-of select='@*[namespace-uri()="" or namespace-uri="http://www.w3.org/XML/1998/namespace"]'/>
-      <xsl:apply-templates select='node()'/>
-      <xsl:call-template name="toc"/>
-    </div>
-  </xsl:template>
-
-  <xsl:template name='toc'>
-    <xsl:for-each select='//*[@id=$sectionsID]'>
-      <xsl:call-template name='toc1'/>
-    </xsl:for-each>
-    <xsl:for-each select='//*[@id=$appendicesID]'>
-      <xsl:call-template name='toc1'>
-        <xsl:with-param name='alpha' select='true()'/>
-      </xsl:call-template>
-    </xsl:for-each>
-  </xsl:template>
-
   <xsl:template match='processing-instruction("sref")'>
     <xsl:variable name='id' select='string(.)'/>
     <xsl:variable name='s' select='//*[@id=$id]/self::h:section'/>
@@ -445,7 +406,6 @@
       <xsl:otherwise>@@</xsl:otherwise>
     </xsl:choose>
   </xsl:template>
-
   <xsl:template match='processing-instruction("sdir")'>
     <xsl:variable name='id' select='string(.)'/>
     <xsl:choose>
@@ -454,88 +414,7 @@
       <xsl:otherwise>@@</xsl:otherwise>
     </xsl:choose>
   </xsl:template>
-
   <xsl:template match='processing-instruction()|comment()'/>
-
-  <xsl:template name='toc1'>
-    <xsl:param name='prefix'/>
-    <xsl:param name='alpha'/>
-    <xsl:variable name='subsections' select='h:section[not(contains(@class,"no-toc"))]'/>
-    <xsl:if test='$subsections'>
-      <ul>
-      <xsl:text>&#10;</xsl:text>
-        <xsl:for-each select='h:section[not(contains(@class,"no-toc"))]'>
-          <xsl:variable name='number'>
-            <xsl:value-of select='$prefix'/>
-            <xsl:if test='$prefix'>.</xsl:if>
-            <xsl:choose>
-              <xsl:when test='$alpha'><xsl:number value='position()' format='A'/></xsl:when>
-              <xsl:otherwise><xsl:value-of select='position()'/></xsl:otherwise>
-            </xsl:choose>
-          </xsl:variable>
-          <xsl:variable name='frag'>
-            <xsl:choose>
-              <xsl:when test='@id'><xsl:value-of select='@id'/></xsl:when>
-              <xsl:otherwise><xsl:value-of select='generate-id(.)'/></xsl:otherwise>
-            </xsl:choose>
-          </xsl:variable>
-          <xsl:variable name='section-id'>
-            <xsl:choose>
-              <xsl:when test='$chunk=0'/>
-              <xsl:otherwise>
-                <xsl:value-of select="
-                  key('id',$frag)[ancestor-or-self::h:section[@id='elements']]/@id
-                  |key('id',$frag)/ancestor-or-self::h:section[count(ancestor::h:section)=0 and not(@id='elements')]/@id
-                  "/>
-              </xsl:otherwise>
-            </xsl:choose>
-          </xsl:variable>
-          <xsl:variable name='filename'>
-            <xsl:choose>
-              <xsl:when test='$chunk=0'/>
-              <xsl:when test="$section-id=''">
-                <xsl:message>
-                  <xsl:text>UNDEFINED: </xsl:text>
-                  <xsl:value-of select="$frag"/>
-                  <xsl:text> in </xsl:text>
-                  <xsl:value-of select="ancestor-or-self::h:section[child::h:h2[@class='element-head']]/@id
-                    |ancestor::h:section[(count(ancestor::h:section)=0 and not(@id='elements'))]/@id"/>
-                  <xsl:text>.html</xsl:text>
-                </xsl:message>
-              </xsl:when>
-              <xsl:otherwise>
-                <xsl:message>
-                  <xsl:value-of select="concat($section-id,'.html')"/>
-                </xsl:message>
-                <xsl:value-of select="concat($section-id,'.html')"/>
-              </xsl:otherwise>
-            </xsl:choose>
-          </xsl:variable>
-          <li id='{$frag}-toc'>
-            <a href='{$filename}#{$frag}'>
-              <xsl:if test="not(contains(@class,'no-number'))">
-                <xsl:value-of select='$number'/>
-                <xsl:text>. </xsl:text>
-              </xsl:if>
-              <xsl:copy-of select='(h:h2|h:h3|h:h4|h:h5|h:h6)/node()'/>
-            </a>
-            <xsl:if test='h:h2[@class = "element-head"]
-              and .//*[@class = "obsolete"]'>
-              <xsl:text> </xsl:text>
-              <span class="obsolete">(obsolete)</span>
-            </xsl:if>
-            <xsl:text>&#10;</xsl:text>
-            <xsl:call-template name='toc1'>
-              <xsl:with-param name='prefix' select='$number'/>
-            </xsl:call-template>
-          </li>
-          <xsl:text>&#10;</xsl:text>
-        </xsl:for-each>
-      </ul>
-      <xsl:text>&#10;</xsl:text>
-    </xsl:if>
-  </xsl:template>
-
   <xsl:template name='section-number'>
     <xsl:param name='section'/>
     <xsl:param name='sections' select="//*[@id = $sectionsID]"/>
@@ -566,7 +445,6 @@
       </xsl:when>
     </xsl:choose>
   </xsl:template>
-
   <xsl:template match='h:h2[
     not(../@id = "abstract")
     and not(../@id="status")
@@ -607,11 +485,17 @@
       <a class="hash" href="#{$myid}">#</a>
       <xsl:if test='not(parent::h:*[contains(@class,"no-toc")])'>
         <xsl:text> </xsl:text>
-        <a class="toc-bak" href="{$TOC-file}#{$myid}-toc">T</a>
+        <xsl:choose>
+          <xsl:when test="not($chunk=0)">
+            <a class="toc-bak" href="{$TOC-file}#{$myid}-toc">T</a>
+          </xsl:when>
+          <xsl:otherwise>
+            <a class="toc-bak" href="#{$myid}-toc">T</a>
+          </xsl:otherwise>
+        </xsl:choose>
       </xsl:if>
     </xsl:element>
   </xsl:template>
-
   <xsl:template match='h:*[@class="ednote"]'>
     <div>
       <xsl:copy-of select='@*[namespace-uri()="" or namespace-uri="http://www.w3.org/XML/1998/namespace"]'/>
@@ -619,7 +503,6 @@
       <xsl:apply-templates select='node()'/>
     </div>
   </xsl:template>
-
   <!-- * <xsl:template match='h:*[@class="example"]'> -->
     <!-- * <div> -->
       <!-- * <xsl:copy-of select='@*[namespace-uri()="" or namespace-uri="http://www.w3.org/XML/1998/namespace"]'/> -->
@@ -627,7 +510,6 @@
       <!-- * <xsl:apply-templates select='node()'/> -->
     <!-- * </div> -->
   <!-- * </xsl:template> -->
-
   <!-- * <xsl:template match='h:*[@class="note"]'> -->
     <!-- * <div> -->
       <!-- * <xsl:copy-of select='@*[namespace-uri()="" or namespace-uri="http://www.w3.org/XML/1998/namespace"]'/> -->
@@ -635,7 +517,6 @@
       <!-- * <xsl:apply-templates select='node()'/> -->
     <!-- * </div> -->
   <!-- * </xsl:template> -->
-
   <xsl:template match='h:section'>
     <xsl:variable name="content">
       <div>
@@ -661,9 +542,7 @@
       </xsl:otherwise>
     </xsl:choose>
   </xsl:template>
-
   <xsl:template match='*'/>
-
   <xsl:template match="h:a[@href[starts-with(.,'#')]]">
     <!-- * href ID references in chunked output need to become intra-file -->
     <!-- * references to IDs that are to targets in other files; so this -->
@@ -703,5 +582,9 @@
       </xsl:otherwise>
     </xsl:choose>
   </xsl:template>
-
+  <xsl:template match="h:div[@id='tocjump']">
+    <div id="tocjump" class="skip-link" style="text-align: center">
+      <a href="{$TOC-file}#toc">Skip to Table of Contents</a>
+    </div>
+  </xsl:template>
 </xsl:stylesheet>

--- NEW FILE: toc.xsl ---
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
                xmlns:h='http://www.w3.org/1999/xhtml'
                xmlns='http://www.w3.org/1999/xhtml'
                version='1.0' id='xslt'>
  <xsl:template match="h:*[@id = 'toc']">
    <xsl:text>&#10;</xsl:text>
    <div id='toc'>
      <xsl:copy-of select='@*[namespace-uri()="" or namespace-uri="http://www.w3.org/XML/1998/namespace"]'/>
      <xsl:apply-templates select='node()'/>
      <xsl:call-template name="toc"/>
    </div>
  </xsl:template>
  <xsl:template name='toc'>
    <xsl:for-each select='//*[@id=$sectionsID]'>
      <xsl:call-template name='toc1'/>
    </xsl:for-each>
    <xsl:for-each select='//*[@id=$appendicesID]'>
      <xsl:call-template name='toc1'>
        <xsl:with-param name='alpha' select='true()'/>
      </xsl:call-template>
    </xsl:for-each>
  </xsl:template>
  <xsl:template name='toc1'>
    <xsl:param name='prefix'/>
    <xsl:param name='alpha'/>
    <xsl:variable name='subsections' select='h:section[not(contains(@class,"no-toc"))]'/>
    <xsl:if test='$subsections'>
      <ul>
      <xsl:text>&#10;</xsl:text>
        <xsl:for-each select='h:section[not(contains(@class,"no-toc"))]'>
          <xsl:variable name='number'>
            <xsl:value-of select='$prefix'/>
            <xsl:if test='$prefix'>.</xsl:if>
            <xsl:choose>
              <xsl:when test='$alpha'><xsl:number value='position()' format='A'/></xsl:when>
              <xsl:otherwise><xsl:value-of select='position()'/></xsl:otherwise>
            </xsl:choose>
          </xsl:variable>
          <xsl:variable name='frag'>
            <xsl:choose>
              <xsl:when test='@id'><xsl:value-of select='@id'/></xsl:when>
              <xsl:otherwise><xsl:value-of select='generate-id(.)'/></xsl:otherwise>
            </xsl:choose>
          </xsl:variable>
          <xsl:variable name='section-id'>
            <xsl:choose>
              <xsl:when test='$chunk=0'/>
              <xsl:otherwise>
                <xsl:value-of select="
                  key('id',$frag)[ancestor-or-self::h:section[@id='elements']]/@id
                  |key('id',$frag)/ancestor-or-self::h:section[count(ancestor::h:section)=0 and not(@id='elements')]/@id
                  "/>
              </xsl:otherwise>
            </xsl:choose>
          </xsl:variable>
          <xsl:variable name='filename'>
            <xsl:choose>
              <xsl:when test='$chunk=0'/>
              <xsl:otherwise>
                <xsl:value-of select="concat($section-id,'.html')"/>
              </xsl:otherwise>
            </xsl:choose>
          </xsl:variable>
          <li id='{$frag}-toc'>
            <a href='{$filename}#{$frag}'>
              <xsl:if test="not(contains(@class,'no-number'))">
                <xsl:value-of select='$number'/>
                <xsl:text>. </xsl:text>
              </xsl:if>
              <xsl:copy-of select='(h:h2|h:h3|h:h4|h:h5|h:h6)/node()'/>
            </a>
            <xsl:if test='h:h2[@class = "element-head"]
              and .//*[@class = "obsolete"]'>
              <xsl:text> </xsl:text>
              <span class="obsolete">(obsolete)</span>
            </xsl:if>
            <xsl:text>&#10;</xsl:text>
            <xsl:call-template name='toc1'>
              <xsl:with-param name='prefix' select='$number'/>
            </xsl:call-template>
          </li>
          <xsl:text>&#10;</xsl:text>
        </xsl:for-each>
      </ul>
      <xsl:text>&#10;</xsl:text>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

Received on Friday, 1 May 2009 13:53:29 UTC