doclib: More list-of-all-members formatting
g0dil [Mon, 14 Apr 2008 04:51:07 +0000 (04:51 +0000)]
doclib: Add more comments to html-munge.xsl

git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@811 270642c3-0616-0410-b53a-bc976706d245

Console/Doxyfile
doclib/html-munge.xsl

index 1fd99b4..1075516 100644 (file)
@@ -2,7 +2,6 @@
 
 PROJECT_NAME = libConsole
 GENERATE_TAGFILE = doc/Console.tag
-ALPHABETICAL_INDEX = NO
 
 TAGFILES = \
     "$(TOPDIR)/Socket/doc/Socket.tag" \
index 598587e..7da6022 100644 (file)
 \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
+      <!-- We need to filter the table rows by looking for indications on the object type       -->\r
+      <!-- The table has 3 acolumns:                                                            -->\r
+      <!--    td[1] is the name of the object,                                                  -->\r
+      <!--    td[2] is the name of the class the object is defined in                           -->\r
+      <!--    td[3] contains additional flags                                                   -->\r
+      <!--                                                                                      -->\r
+      <!-- The conditions we have are:                                                          -->\r
+      <!--                                                                                      -->\r
+      <!--    contains(td[3],'static')        static member (variable or function)              -->\r
+      <!--    contains(td[3],'protected')     protected member of arbitrary type                -->\r
+      <!--    contains(td[3],'private')       private member of arbitrary type                  -->\r
+      <!--    contains(td{3],'friend')        friend declaration (function or class)            -->\r
+      <!--    contains(td[3],'pure virtual')  entry is a pure-virtual member function           -->\r
+      <!--    starts-with(td[1]/text(),'(')   function entry (member, static or friend)         -->\r
+      <!--    contains(td[1], 'typedef')      entry is a typdef                                 -->\r
+      <!--    contains(td[1], 'enum ')        entry is enum type or enumerator                  -->\r
+      <!--    contains(td[1], 'enum name')    entry is the name of an enum type                 -->\r
+      <!--    contains(td[1], 'enum value')   entry is an enumerator value                      -->\r
+      <!--    str:split(substring-before(concat(td[2]/a,'&lt;'),'&lt;'),'::')[position()=last()]==string(td[1]/a) -->\r
+      <!--                                    entry is a constructor                            -->\r
+      <!--    not(starts-with(td[1]/a,'~'))   entry is a destructor                             -->\r
+\r
+      <xsl:variable name="public-static-memfn">\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'))][starts-with(td[1]/text(),'(')]"/>\r
+      </xsl:variable>\r
+      <xsl:if test="string($public-static-memfn)">\r
+        <tr><td colspan="3"><h2>Static Public Member Functions</h2></td></tr>\r
+        <xsl:copy-of select="$public-static-memfn"/>\r
+      </xsl:if>\r
+\r
+      <xsl:variable name="public-static-var">\r
+        <xsl:apply-templates select="tr[not(contains(td[1],'typedef'))][contains(td[3],'static')][not(contains(td[3],'protected'))][not(contains(td[3],'private'))][not(starts-with(td[1]/text(),'('))]"/>\r
+      </xsl:variable>\r
+      <xsl:if test="string($public-static-var)">\r
+        <tr><td colspan="3"><h2>Static Public Attributes</h2></td></tr>\r
+        <xsl:copy-of select="$public-static-var"/>\r
+      </xsl:if>\r
+      \r
+      <xsl:variable name="public-memfn">\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'))][starts-with(td[1]/text(),'(')][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
+      </xsl:variable>\r
+      <xsl:if test="string($public-memfn)">\r
+        <tr><td colspan="3"><h2>Public Member Functions</h2></td></tr>\r
+        <xsl:copy-of select="$public-memfn"/>\r
+      </xsl:if>\r
+\r
+      <xsl:variable name="public-var">\r
+        <xsl:apply-templates select="tr[not(contains(td[1],'typedef'))][not(contains(td[1],'enum '))][not(contains(td[3],'static'))][not(contains(td[3],'protected'))][not(contains(td[3],'private'))][not(starts-with(td[1]/text(),'('))]"/>\r
+      </xsl:variable>\r
+      <xsl:if test="string($public-var)">\r
+        <tr><td colspan="3"><h2>Public Attributes</h2></td></tr>\r
+        <xsl:copy-of select="$public-var"/>\r
+      </xsl:if>\r
+      \r
+      <xsl:variable name="public-enum">\r
+        <xsl:apply-templates select="tr[contains(td[1],'enum value')][not(contains(td[3],'protected'))][not(contains(td[3],'private'))]"/>\r
+      </xsl:variable>\r
+      <xsl:if test="string($public-enum)">\r
+        <tr><td colspan="3"><h2>Public Enumerators</h2></td></tr>\r
+        <xsl:copy-of select="$public-enum"/>\r
+      </xsl:if>\r
+      \r
+      <xsl:variable name="public-type">\r
+        <xsl:apply-templates select="tr[contains(td[1],'typedef') or contains(td[1],'enum name')][not(contains(td[3],'protected'))][not(contains(td[3],'private'))][not(contains(td[3],'friend'))]"/>\r
+      </xsl:variable>\r
+      <xsl:if test="string($public-type)">\r
+        <tr><td colspan="r"><h2>Public Types</h2></td></tr>\r
+        <xsl:copy-of select="$public-type"/>\r
+      </xsl:if>\r
+      \r
+      <xsl:variable name="non-public">\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
+      </xsl:variable>\r
+      <xsl:if test="string($non-public)">\r
+        <tr><td colspan="3"><h2>Non-Public Members</h2></td></tr>\r
+        <xsl:copy-of select="$non-public"/>\r
+      </xsl:if>\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
+    <!-- this removes the template args form the second column to make the table more compact -->\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
+    <!-- for some weird reason, some members have a fully qualified name in the first column -->\r
+    <!-- remove the qualification here -->\r
     <xsl:value-of select="str:split(.,'::')[position()=last()]"/>\r
   </xsl:template>\r
 \r
   <xsl:template match="li[form]"> \r
   </xsl:template>\r
 \r
+  <!-- Add CSS class to alphabetical class index table -->\r
   <xsl:template match="table[preceding-sibling::*[1][self::div][@class='qindex']]">\r
     <xsl:call-template name="add-class">\r
       <xsl:with-param name="class">qindextable</xsl:with-param>\r
     </xsl:call-template>\r
   </xsl:template>\r
-  \r
+\r
+  <!-- Add CSS class to special paragraphs -->\r
+\r
   <xsl:template match="dl[dt/b/a/text()='Bug:']">\r
     <xsl:call-template name="add-class">\r
       <xsl:with-param name="class">xref-bug</xsl:with-param>\r
     </xsl:call-template>\r
   </xsl:template>\r
 \r
-  <xsl:template match="table[descendant::td[@class='memItemLeft']]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">members</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="a[@href=string(current())]" priority="1">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">literal</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="a[contains(@href,'http://')]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">ext</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="a[not(@href)]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">anchor</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="div[@class='memdoc']/p[1]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">memtitle</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
   <xsl:template match="p[starts-with(text(),'Definition at line ')]">\r
     <xsl:call-template name="add-class">\r
       <xsl:with-param name="class">sourceline</xsl:with-param>\r
     <xsl:call-template name="break-comma"/>\r
   </xsl:template>\r
 \r
+  <!-- Add CSS class to the member overview table of a class documentation -->\r
+  <xsl:template match="table[descendant::td[@class='memItemLeft']]">\r
+    <xsl:call-template name="add-class">\r
+      <xsl:with-param name="class">members</xsl:with-param>\r
+    </xsl:call-template>\r
+  </xsl:template>\r
+\r
+  <!-- Add CSS class to literal links (links, where link text and href attribute are the same -->\r
+  <xsl:template match="a[@href=string(current())]" priority="1">\r
+    <xsl:call-template name="add-class">\r
+      <xsl:with-param name="class">literal</xsl:with-param>\r
+    </xsl:call-template>\r
+  </xsl:template>\r
+\r
+  <!-- Add CSS class to external links -->\r
+  <xsl:template match="a[contains(@href,'http://')]">\r
+    <xsl:call-template name="add-class">\r
+      <xsl:with-param name="class">ext</xsl:with-param>\r
+    </xsl:call-template>\r
+  </xsl:template>\r
+\r
+  <!-- Add CSS class to anchor-only links -->\r
+  <xsl:template match="a[not(@href)]">\r
+    <xsl:call-template name="add-class">\r
+      <xsl:with-param name="class">anchor</xsl:with-param>\r
+    </xsl:call-template>\r
+  </xsl:template>\r
+\r
+  <!-- Add CSS class to the brief documentation paragraph of the member documentation -->\r
+  <xsl:template match="div[@class='memdoc']/p[1]">\r
+    <xsl:call-template name="add-class">\r
+      <xsl:with-param name="class">memtitle</xsl:with-param>\r
+    </xsl:call-template>\r
+  </xsl:template>\r
+\r
   <!-- Remove external items from the namespace index -->\r
   <xsl:template match="div[@id='content2']/table[contains(preceding-sibling::h1/text(),'Namespace Reference')]/tr[td[@class='memItemRight']/a[1][@class='elRef'][@doxygen]]">\r
   </xsl:template>\r