Console: Overhaul documentation
[senf.git] / doclib / html-munge.xsl
index 734ca8b..598587e 100644 (file)
@@ -1,5 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>\r
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  version="1.0">\r
+<xsl:stylesheet version="1.0"\r
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+  xmlns:str="http://exslt.org/strings"\r
+  extension-element-prefixes="str">\r
 \r
   <xsl:output \r
     method="html" \r
       <ul>\r
         <xsl:for-each select="following::h2|following::h3|following::h4">\r
           <xsl:element name="li">\r
-            <xsl:attribute name="class"><xsl:value-of select="concat('level_',local-name())"/></xsl:attribute>\r
-            <b><xsl:call-template name="section-number"/></b>\r
+            <xsl:attribute name="class">\r
+              <xsl:value-of select="concat('level_',local-name())"/>\r
+            </xsl:attribute>\r
+            <b><xsl:call-template name="section-number"/><xsl:text> </xsl:text></b>\r
             <xsl:element name="a">\r
-              <xsl:attribute name="href"><xsl:value-of select="concat('#',a/@name)"/></xsl:attribute>\r
+              <xsl:choose>\r
+                <xsl:when test="a/@name">\r
+                  <xsl:attribute name="href">\r
+                    <xsl:value-of select="concat('#',a/@name)"/>\r
+                  </xsl:attribute>\r
+                </xsl:when>\r
+                <xsl:otherwise>\r
+                  <xsl:attribute name="href">\r
+                    <xsl:text>#autotoc-</xsl:text>\r
+                    <xsl:call-template name="section-number"/>\r
+                  </xsl:attribute>\r
+                </xsl:otherwise>\r
+              </xsl:choose>\r
               <xsl:value-of select="string(current())"/>\r
             </xsl:element>\r
           </xsl:element>\r
   </xsl:template>\r
 \r
   <xsl:template name="section-number">\r
-    <xsl:number level="any" from="h1" count="h2"/>\r
+    <xsl:number level="any" from="div[@id='autotoc']" count="h2"/>\r
     <xsl:text>.</xsl:text>\r
     <xsl:if test="self::h3|self::h4">\r
       <xsl:number level="any" from="h2" count="h3"/>\r
       <xsl:number level="any" from="h3" count="h4"/>\r
       <xsl:text>.</xsl:text>\r
     </xsl:if>\r
-    <xsl:text> </xsl:text>\r
   </xsl:template>\r
   \r
   <xsl:template match="h2|h3|h4">\r
     <xsl:copy>\r
       <xsl:call-template name="copy-attributes"/>\r
-      <xsl:if test="preceding::div[@id='autotoc']">\r
-        <xsl:call-template name="section-number"/>\r
-      </xsl:if>\r
-      <xsl:apply-templates/>\r
+      <xsl:choose>\r
+        <xsl:when test="preceding::div[@id='autotoc']">\r
+          <xsl:call-template name="section-number"/>\r
+          <xsl:text> </xsl:text>\r
+          <xsl:choose>\r
+            <xsl:when test="a">\r
+              <xsl:apply-templates/>\r
+            </xsl:when>\r
+            <xsl:otherwise>\r
+              <xsl:element name="a">\r
+                <xsl:attribute name="class"><xsl:text>anchor</xsl:text></xsl:attribute>\r
+                <xsl:attribute name="name">\r
+                  <xsl:text>autotoc-</xsl:text>\r
+                  <xsl:call-template name="section-number"/>\r
+                </xsl:attribute>\r
+                <xsl:apply-templates/>\r
+              </xsl:element>\r
+            </xsl:otherwise>\r
+          </xsl:choose>\r
+        </xsl:when>\r
+        <xsl:otherwise>\r
+          <xsl:apply-templates/>\r
+        </xsl:otherwise>\r
+      </xsl:choose>\r
     </xsl:copy>\r
   </xsl:template>\r
-  \r
+\r
   <!-- Build dia image-map from special div/span elements -->\r
   <xsl:template match="div[@class='diamap']">\r
     <xsl:element name="map">\r
     </xsl:element>\r
   </xsl:template>\r
 \r
+  <!-- Add grouping to all-members page -->\r
+\r
+  <xsl:template match="table[preceding-sibling::h1[1][contains(text(),'Member List')]]">\r
+    <table class="allmembers">\r
+      <tr><td colspan="3"><h2>Public static member functions</h2></td></tr>\r
+      <xsl:apply-templates select="tr[contains(td[3],'static')][not(contains(td[3],'protected'))][not(contains(td[3],'private'))][not(contains(td[3],'friend'))][str:split(substring-before(concat(td[2]/a,'&lt;'),'&lt;'),'::')[position()=last()]!=string(td[1]/a)][not(starts-with(td[1]/a,'~'))]"/>\r
+\r
+      <tr><td colspan="3"><h2>Public member functions</h2></td></tr>\r
+      <xsl:apply-templates select="tr[not(contains(td[1],'typedef'))][not(contains(td[3],'static'))][not(contains(td[3],'protected'))][not(contains(td[3],'private'))][not(contains(td[3],'friend'))][str:split(substring-before(concat(td[2]/a,'&lt;'),'&lt;'),'::')[position()=last()]!=string(td[1]/a)][not(starts-with(td[1]/a,'~'))][not(contains(td[3],'pure virtual'))]"/>\r
+\r
+      <tr><td colspan="r"><h2>Public typedefs</h2></td></tr>\r
+      <xsl:apply-templates select="tr[contains(td[1],'typedef')][not(contains(td[3],'protected'))][not(contains(td[3],'private'))][not(contains(td[3],'friend'))][str:split(substring-before(concat(td[2]/a,'&lt;'),'&lt;'),'::')[position()=last()]!=string(td[1]/a)][not(starts-with(td[1]/a,'~'))][not(contains(td[3],'pure virtual'))]"/>\r
+\r
+      <tr><td colspan="3"><h2>Non-public members</h2></td></tr>\r
+      <xsl:apply-templates select="tr[contains(td[3],'protected') or contains(td[3],'private') or contains(td[3],'friend')][str:split(substring-before(concat(td[2]/a,'&lt;'),'&lt;'),'::')[position()=last()]!=string(td[1]/a)][not(starts-with(td[1]/a,'~'))][not(contains(td[3],'pure virtual'))]"/>\r
+\r
+    </table>\r
+  </xsl:template>\r
+\r
+  <xsl:template match="table[preceding-sibling::h1[1][contains(text(),'Member List')]]/tr/td[2]/a/text()[contains(.,'&lt;')]">\r
+    <xsl:value-of select="substring-before(.,'&lt;')"/>\r
+  </xsl:template>\r
+\r
+  <xsl:template match="table[preceding-sibling::h1[1][contains(text(),'Member List')]]/tr/td[1]/a/text()[contains(.,'::')]">\r
+    <xsl:value-of select="str:split(.,'::')[position()=last()]"/>\r
+  </xsl:template>\r
+\r
   <!-- Remove the automatically inserted search form (we build our own) -->\r
   <xsl:template match="li[form]"> \r
   </xsl:template>\r