Home | History | Annotate | Download | only in doc
      1 <?xml version="1.0"?>
      2 <!--
      3   Stylesheet to generate the HTML documentation from an XML API descriptions:
      4   xsltproc wiki.xsl libxml2-api.xml
      5 
      6   Daniel Veillard
      7 -->
      8 <xsl:stylesheet version="1.0"
      9   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     10   xmlns:exsl="http://exslt.org/common"
     11   xmlns:str="http://exslt.org/strings"
     12   extension-element-prefixes="exsl str"
     13   exclude-result-prefixes="exsl str">
     14 
     15   <!-- Generate XHTML-1.0 transitional -->
     16   <xsl:output method="xml" encoding="UTF-8" indent="yes"
     17       doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
     18       doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
     19 
     20   <!-- Build keys for all symbols -->
     21   <xsl:key name="symbols" match="/api/symbols/*" use="@name"/>
     22 
     23   <!-- the target directory for the HTML output -->
     24   <xsl:variable name="htmldir">wiki</xsl:variable>
     25   <xsl:variable name="href_base">../</xsl:variable>
     26 
     27   <xsl:template name="style">
     28     <link rel="SHORTCUT ICON" href="/favicon.ico"/> 
     29     <style type="text/css">
     30 TD {font-family: Verdana,Arial,Helvetica}
     31 BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
     32 H1 {font-family: Verdana,Arial,Helvetica}
     33 H2 {font-family: Verdana,Arial,Helvetica}
     34 H3 {font-family: Verdana,Arial,Helvetica}
     35 A:link, A:visited, A:active { text-decoration: underline }
     36 </style>
     37   </xsl:template>
     38 
     39   <xsl:template name="docstyle">
     40     <style type="text/css">
     41       div.deprecated pre.programlisting {border-style: double;border-color:red}
     42       pre.programlisting {border-style: double;}
     43     </style>
     44   </xsl:template>
     45 
     46   <!-- This is convoluted but needed to force the current document to
     47        be the API one and not the result tree from the tokenize() result,
     48        because the keys are only defined on the main document -->
     49   <xsl:template mode="dumptoken" match='*'>
     50     <xsl:param name="token"/>
     51     <xsl:variable name="ref" select="key('symbols', $token)"/>
     52     <xsl:choose>
     53       <xsl:when test="$ref">
     54         <a href="libxml-{$ref/@file}.html#{$ref/@name}"><xsl:value-of select="$token"/></a>
     55       </xsl:when>
     56       <xsl:otherwise>
     57         <xsl:value-of select="$token"/>
     58       </xsl:otherwise>
     59     </xsl:choose>
     60   </xsl:template>
     61 
     62   <!-- dumps a string, making cross-reference links -->
     63   <xsl:template name="dumptext">
     64     <xsl:param name="text"/>
     65     <xsl:variable name="ctxt" select='.'/>
     66     <!-- <xsl:value-of select="$text"/> -->
     67     <xsl:for-each select="str:tokenize($text, ' &#9;')">
     68       <xsl:apply-templates select="$ctxt" mode='dumptoken'>
     69         <xsl:with-param name="token" select="string(.)"/>
     70       </xsl:apply-templates>
     71       <xsl:if test="position() != last()">
     72         <xsl:text> </xsl:text>
     73       </xsl:if>
     74     </xsl:for-each>
     75   </xsl:template>
     76 
     77   <xsl:template match="macro" mode="toc">
     78     <pre class="programlisting">
     79     <xsl:text>#define </xsl:text><a href="#{@name}"><xsl:value-of select="@name"/></a>
     80     </pre>
     81   </xsl:template>
     82 
     83   <xsl:template match="variable" mode="toc">
     84     <pre class="programlisting">
     85     <xsl:text>Variable </xsl:text>
     86     <xsl:call-template name="dumptext">
     87       <xsl:with-param name="text" select="string(@type)"/>
     88     </xsl:call-template>
     89     <xsl:text> </xsl:text>
     90     <a name="{@name}"></a>
     91     <xsl:value-of select="@name"/>
     92     <xsl:text>
     93 
     94 </xsl:text>
     95     </pre>
     96   </xsl:template>
     97 
     98   <xsl:template match="typedef" mode="toc">
     99     <xsl:variable name="name" select="string(@name)"/>
    100     <pre class="programlisting">
    101     <xsl:choose>
    102       <xsl:when test="@type = 'enum'">
    103 	<xsl:text>Enum </xsl:text>
    104 	<a href="#{$name}"><xsl:value-of select="$name"/></a>
    105 	<xsl:text>
    106 </xsl:text>
    107       </xsl:when>
    108       <xsl:otherwise>
    109 	<xsl:text>Typedef </xsl:text>
    110 	<xsl:call-template name="dumptext">
    111 	  <xsl:with-param name="text" select="@type"/>
    112 	</xsl:call-template>
    113 	<xsl:text> </xsl:text>
    114 	<a name="{$name}"><xsl:value-of select="$name"/></a>
    115 	<xsl:text>
    116 </xsl:text>
    117       </xsl:otherwise>
    118     </xsl:choose>
    119     </pre>
    120   </xsl:template>
    121 
    122   <xsl:template match="typedef[@type = 'enum']">
    123     <xsl:variable name="name" select="string(@name)"/>
    124     <h3>Enum <a name="{$name}"><xsl:value-of select="$name"/></a></h3>
    125     <pre class="programlisting">
    126       <xsl:text>Enum </xsl:text>
    127       <xsl:value-of select="$name"/>
    128       <xsl:text> {
    129 </xsl:text>
    130       <xsl:for-each select="/api/symbols/enum[@type = $name]">
    131         <xsl:sort select="@value" data-type="number" order="ascending"/>
    132         <xsl:text>    </xsl:text>
    133         <a name="{@name}"><xsl:value-of select="@name"/></a>
    134         <xsl:text> = </xsl:text>
    135         <xsl:value-of select="@value"/>
    136         <xsl:if test="@info != ''">
    137 	  <xsl:text> : </xsl:text>
    138 	  <xsl:call-template name="dumptext">
    139 	    <xsl:with-param name="text" select="@info"/>
    140 	  </xsl:call-template>
    141         </xsl:if>
    142         <xsl:text>
    143 </xsl:text>
    144       </xsl:for-each>
    145       <xsl:text>}
    146 </xsl:text>
    147     </pre>
    148   </xsl:template>
    149 
    150   <xsl:template match="struct" mode="toc">
    151     <pre class="programlisting">
    152     <xsl:text>Structure </xsl:text><a href="#{@name}"><xsl:value-of select="@name"/></a><br/>
    153     <xsl:value-of select="@type"/><xsl:text>
    154 </xsl:text>
    155     <xsl:if test="not(field)">
    156       <xsl:text>The content of this structure is not made public by the API.
    157 </xsl:text>
    158     </xsl:if>
    159     </pre>
    160   </xsl:template>
    161 
    162   <xsl:template match="struct">
    163     <h3><a name="{@name}">Structure <xsl:value-of select="@name"/></a></h3>
    164     <pre class="programlisting">
    165     <xsl:text>Structure </xsl:text><xsl:value-of select="@name"/><br/>
    166     <xsl:value-of select="@type"/><xsl:text> {
    167 </xsl:text>
    168     <xsl:if test="not(field)">
    169       <xsl:text>The content of this structure is not made public by the API.
    170 </xsl:text>
    171     </xsl:if>
    172     <xsl:for-each select="field">
    173         <xsl:text>    </xsl:text>
    174 	<xsl:call-template name="dumptext">
    175 	  <xsl:with-param name="text" select="@type"/>
    176 	</xsl:call-template>
    177 	<xsl:text>&#9;</xsl:text>
    178 	<xsl:value-of select="@name"/>
    179 	<xsl:if test="@info != ''">
    180 	  <xsl:text>&#9;: </xsl:text>
    181 	  <xsl:call-template name="dumptext">
    182 	    <xsl:with-param name="text" select="substring(@info, 1, 40)"/>
    183 	  </xsl:call-template>
    184 	</xsl:if>
    185 	<xsl:text>
    186 </xsl:text>
    187     </xsl:for-each>
    188     <xsl:text>}</xsl:text>
    189     </pre>
    190   </xsl:template>
    191 
    192   <xsl:template match="macro">
    193     <xsl:variable name="name" select="string(@name)"/>
    194     <h3><a name="{$name}"></a>Macro: <xsl:value-of select="$name"/></h3>
    195     <pre><xsl:text>#define </xsl:text><xsl:value-of select="$name"/></pre>
    196     <p>
    197     <xsl:call-template name="dumptext">
    198       <xsl:with-param name="text" select="info"/>
    199     </xsl:call-template>
    200     </p><xsl:text>
    201 </xsl:text>
    202   </xsl:template>
    203 
    204   <xsl:template match="function" mode="toc">
    205     <xsl:variable name="name" select="string(@name)"/>
    206     <xsl:variable name="nlen" select="string-length($name)"/>
    207     <xsl:variable name="tlen" select="string-length(return/@type)"/>
    208     <xsl:variable name="blen" select="(($nlen + 8) - (($nlen + 8) mod 8)) + (($tlen + 8) - (($tlen + 8) mod 8))"/>
    209     <pre class="programlisting">
    210     <xsl:call-template name="dumptext">
    211       <xsl:with-param name="text" select="return/@type"/>
    212     </xsl:call-template>
    213     <xsl:text>&#9;</xsl:text>
    214     <a href="#{@name}"><xsl:value-of select="@name"/></a>
    215     <xsl:if test="$blen - 40 &lt; -8">
    216       <xsl:text>&#9;</xsl:text>
    217     </xsl:if>
    218     <xsl:if test="$blen - 40 &lt; 0">
    219       <xsl:text>&#9;</xsl:text>
    220     </xsl:if>
    221     <xsl:text>&#9;(</xsl:text>
    222     <xsl:if test="not(arg)">
    223       <xsl:text>void</xsl:text>
    224     </xsl:if>
    225     <xsl:for-each select="arg">
    226       <xsl:call-template name="dumptext">
    227         <xsl:with-param name="text" select="@type"/>
    228       </xsl:call-template>
    229       <xsl:text> </xsl:text>
    230       <xsl:value-of select="@name"/>
    231       <xsl:if test="position() != last()">
    232         <xsl:text>, </xsl:text><br/>
    233 	<xsl:if test="$blen - 40 &gt; 8">
    234 	  <xsl:text>&#9;</xsl:text>
    235 	</xsl:if>
    236 	<xsl:if test="$blen - 40 &gt; 0">
    237 	  <xsl:text>&#9;</xsl:text>
    238 	</xsl:if>
    239 	<xsl:text>&#9;&#9;&#9;&#9;&#9; </xsl:text>
    240       </xsl:if>
    241     </xsl:for-each>
    242     <xsl:text>)</xsl:text>
    243     </pre><xsl:text>
    244 </xsl:text>
    245   </xsl:template>
    246 
    247   <xsl:template match="functype" mode="toc">
    248     <xsl:variable name="name" select="string(@name)"/>
    249     <xsl:variable name="nlen" select="string-length($name)"/>
    250     <xsl:variable name="tlen" select="string-length(return/@type)"/>
    251     <xsl:variable name="blen" select="(($nlen + 8) - (($nlen + 8) mod 8)) + (($tlen + 8) - (($tlen + 8) mod 8))"/>
    252     <pre class="programlisting">
    253     <xsl:text>Function type: </xsl:text>
    254     <a href="#{$name}"><xsl:value-of select="$name"/></a>
    255     <xsl:text>
    256 </xsl:text>
    257     <xsl:call-template name="dumptext">
    258       <xsl:with-param name="text" select="return/@type"/>
    259     </xsl:call-template>
    260     <xsl:text>&#9;</xsl:text>
    261     <a href="#{$name}"><xsl:value-of select="$name"/></a>
    262     <xsl:if test="$blen - 40 &lt; -8">
    263       <xsl:text>&#9;</xsl:text>
    264     </xsl:if>
    265     <xsl:if test="$blen - 40 &lt; 0">
    266       <xsl:text>&#9;</xsl:text>
    267     </xsl:if>
    268     <xsl:text>&#9;(</xsl:text>
    269     <xsl:if test="not(arg)">
    270       <xsl:text>void</xsl:text>
    271     </xsl:if>
    272     <xsl:for-each select="arg">
    273       <xsl:call-template name="dumptext">
    274         <xsl:with-param name="text" select="@type"/>
    275       </xsl:call-template>
    276       <xsl:text> </xsl:text>
    277       <xsl:value-of select="@name"/>
    278       <xsl:if test="position() != last()">
    279         <xsl:text>, </xsl:text><br/>
    280 	<xsl:if test="$blen - 40 &gt; 8">
    281 	  <xsl:text>&#9;</xsl:text>
    282 	</xsl:if>
    283 	<xsl:if test="$blen - 40 &gt; 0">
    284 	  <xsl:text>&#9;</xsl:text>
    285 	</xsl:if>
    286 	<xsl:text>&#9;&#9;&#9;&#9;&#9; </xsl:text>
    287       </xsl:if>
    288     </xsl:for-each>
    289     <xsl:text>)
    290 </xsl:text>
    291     </pre>
    292     <xsl:text>
    293 </xsl:text>
    294   </xsl:template>
    295 
    296   <xsl:template match="functype">
    297     <xsl:variable name="name" select="string(@name)"/>
    298     <xsl:variable name="nlen" select="string-length($name)"/>
    299     <xsl:variable name="tlen" select="string-length(return/@type)"/>
    300     <xsl:variable name="blen" select="(($nlen + 8) - (($nlen + 8) mod 8)) + (($tlen + 8) - (($tlen + 8) mod 8))"/>
    301     <h3>
    302       <a name="{$name}"></a>
    303       <xsl:text>Function type: </xsl:text>
    304       <xsl:value-of select="$name"/>
    305     </h3>
    306     <pre class="programlisting">
    307     <xsl:text>Function type: </xsl:text>
    308     <xsl:value-of select="$name"/>
    309     <xsl:text>
    310 </xsl:text>
    311     <xsl:call-template name="dumptext">
    312       <xsl:with-param name="text" select="return/@type"/>
    313     </xsl:call-template>
    314     <xsl:text>&#9;</xsl:text>
    315     <xsl:value-of select="@name"/>
    316     <xsl:if test="$blen - 40 &lt; -8">
    317       <xsl:text>&#9;</xsl:text>
    318     </xsl:if>
    319     <xsl:if test="$blen - 40 &lt; 0">
    320       <xsl:text>&#9;</xsl:text>
    321     </xsl:if>
    322     <xsl:text>&#9;(</xsl:text>
    323     <xsl:if test="not(arg)">
    324       <xsl:text>void</xsl:text>
    325     </xsl:if>
    326     <xsl:for-each select="arg">
    327       <xsl:call-template name="dumptext">
    328         <xsl:with-param name="text" select="@type"/>
    329       </xsl:call-template>
    330       <xsl:text> </xsl:text>
    331       <xsl:value-of select="@name"/>
    332       <xsl:if test="position() != last()">
    333         <xsl:text>, </xsl:text><br/>
    334 	<xsl:if test="$blen - 40 &gt; 8">
    335 	  <xsl:text>&#9;</xsl:text>
    336 	</xsl:if>
    337 	<xsl:if test="$blen - 40 &gt; 0">
    338 	  <xsl:text>&#9;</xsl:text>
    339 	</xsl:if>
    340 	<xsl:text>&#9;&#9;&#9;&#9;&#9; </xsl:text>
    341       </xsl:if>
    342     </xsl:for-each>
    343     <xsl:text>)
    344 </xsl:text>
    345     </pre>
    346     <p>
    347     <xsl:call-template name="dumptext">
    348       <xsl:with-param name="text" select="info"/>
    349     </xsl:call-template>
    350     </p>
    351     <xsl:if test="arg | return">
    352       <div class="variablelist"><table border="0"><col align="left"/><tbody>
    353       <xsl:for-each select="arg">
    354         <tr>
    355           <td><span class="term"><i><tt><xsl:value-of select="@name"/></tt></i>:</span></td>
    356 	  <td>
    357 	    <xsl:call-template name="dumptext">
    358 	      <xsl:with-param name="text" select="@info"/>
    359 	    </xsl:call-template>
    360 	  </td>
    361         </tr>
    362       </xsl:for-each>
    363       <xsl:if test="return/@info">
    364         <tr>
    365           <td><span class="term"><i><tt>Returns</tt></i>:</span></td>
    366 	  <td>
    367 	    <xsl:call-template name="dumptext">
    368 	      <xsl:with-param name="text" select="return/@info"/>
    369 	    </xsl:call-template>
    370 	  </td>
    371         </tr>
    372       </xsl:if>
    373       </tbody></table></div>
    374     </xsl:if>
    375     <br/>
    376     <xsl:text>
    377 </xsl:text>
    378   </xsl:template>
    379 
    380   <xsl:template match="function">
    381     <xsl:variable name="name" select="string(@name)"/>
    382     <xsl:variable name="nlen" select="string-length($name)"/>
    383     <xsl:variable name="tlen" select="string-length(return/@type)"/>
    384     <xsl:variable name="blen" select="(($nlen + 8) - (($nlen + 8) mod 8)) + (($tlen + 8) - (($tlen + 8) mod 8))"/>
    385     <h3><a name="{$name}"></a>Function: <xsl:value-of select="$name"/></h3>
    386     <pre class="programlisting">
    387     <xsl:call-template name="dumptext">
    388       <xsl:with-param name="text" select="return/@type"/>
    389     </xsl:call-template>
    390     <xsl:text>&#9;</xsl:text>
    391     <xsl:value-of select="@name"/>
    392     <xsl:if test="$blen - 40 &lt; -8">
    393       <xsl:text>&#9;</xsl:text>
    394     </xsl:if>
    395     <xsl:if test="$blen - 40 &lt; 0">
    396       <xsl:text>&#9;</xsl:text>
    397     </xsl:if>
    398     <xsl:text>&#9;(</xsl:text>
    399     <xsl:if test="not(arg)">
    400       <xsl:text>void</xsl:text>
    401     </xsl:if>
    402     <xsl:for-each select="arg">
    403       <xsl:call-template name="dumptext">
    404         <xsl:with-param name="text" select="@type"/>
    405       </xsl:call-template>
    406       <xsl:text> </xsl:text>
    407       <xsl:value-of select="@name"/>
    408       <xsl:if test="position() != last()">
    409         <xsl:text>, </xsl:text><br/>
    410 	<xsl:if test="$blen - 40 &gt; 8">
    411 	  <xsl:text>&#9;</xsl:text>
    412 	</xsl:if>
    413 	<xsl:if test="$blen - 40 &gt; 0">
    414 	  <xsl:text>&#9;</xsl:text>
    415 	</xsl:if>
    416 	<xsl:text>&#9;&#9;&#9;&#9;&#9; </xsl:text>
    417       </xsl:if>
    418     </xsl:for-each>
    419     <xsl:text>)</xsl:text><br/>
    420     <xsl:text>
    421 </xsl:text>
    422     </pre>
    423     <p>
    424     <xsl:call-template name="dumptext">
    425       <xsl:with-param name="text" select="info"/>
    426     </xsl:call-template>
    427     </p><xsl:text>
    428 </xsl:text>
    429     <xsl:if test="arg | return/@info">
    430       <div class="variablelist"><table border="0"><col align="left"/><tbody>
    431       <xsl:for-each select="arg">
    432         <tr>
    433           <td><span class="term"><i><tt><xsl:value-of select="@name"/></tt></i>:</span></td>
    434 	  <td>
    435 	    <xsl:call-template name="dumptext">
    436 	      <xsl:with-param name="text" select="@info"/>
    437 	    </xsl:call-template>
    438 	  </td>
    439         </tr>
    440       </xsl:for-each>
    441       <xsl:if test="return/@info">
    442         <tr>
    443           <td><span class="term"><i><tt>Returns</tt></i>:</span></td>
    444 	  <td>
    445 	    <xsl:call-template name="dumptext">
    446 	      <xsl:with-param name="text" select="return/@info"/>
    447 	    </xsl:call-template>
    448 	  </td>
    449         </tr>
    450       </xsl:if>
    451       </tbody></table></div>
    452     </xsl:if>
    453   </xsl:template>
    454 
    455   <xsl:template match="exports" mode="toc">
    456     <xsl:apply-templates select="key('symbols', string(@symbol))[1]" mode="toc"/>
    457   </xsl:template>
    458 
    459   <xsl:template match="exports">
    460     <xsl:apply-templates select="key('symbols', string(@symbol))[1]"/>
    461   </xsl:template>
    462 
    463   <xsl:template name="description">
    464     <xsl:if test="deprecated">
    465       <h2 style="font-weight:bold;color:red;text-align:center">This module is deprecated</h2>
    466     </xsl:if>
    467     <xsl:if test="description">
    468       <p><xsl:value-of select="description"/></p>
    469     </xsl:if>
    470   </xsl:template>
    471 
    472   <xsl:template name="docomponents">
    473     <xsl:param name="mode"/>
    474     <xsl:apply-templates select="exports[@type='macro']" mode="$mode">
    475       <xsl:sort select='@symbol'/>
    476     </xsl:apply-templates>
    477     <xsl:apply-templates select="exports[@type='enum']" mode="$mode">
    478       <xsl:sort select='@symbol'/>
    479     </xsl:apply-templates>
    480     <xsl:apply-templates select="exports[@type='typedef']" mode="$mode">
    481       <xsl:sort select='@symbol'/>
    482     </xsl:apply-templates>
    483     <xsl:apply-templates select="exports[@type='struct']" mode="$mode">
    484       <xsl:sort select='@symbol'/>
    485     </xsl:apply-templates>
    486     <xsl:apply-templates select="exports[@type='function']" mode="$mode">
    487       <xsl:sort select='@symbol'/>
    488     </xsl:apply-templates>
    489   </xsl:template>
    490   
    491   <xsl:template match="file">
    492     <xsl:variable name="name" select="@name"/>
    493     <xsl:variable name="title">Module <xsl:value-of select="$name"/> from <xsl:value-of select="/api/@name"/></xsl:variable>
    494     <xsl:document href="{$htmldir}/libxml-{$name}.html" method="xml" encoding="UTF-8"
    495       doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
    496       doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    497 	    <xsl:call-template name="style"/>
    498 	    <xsl:call-template name="docstyle"/>
    499       <table border="0" cellpadding="3" cellspacing="1" width="100%">
    500         <tr>
    501           <td>
    502 	    <xsl:call-template name="description"/>
    503 	    <xsl:choose>
    504 	      <xsl:when test="deprecated">
    505 	        <div class="deprecated">
    506 		  <h2>Table of Contents</h2>
    507 		  <xsl:apply-templates select="exports" mode="toc"/>
    508 		  <h2>Description</h2>
    509 		  <xsl:text>
    510 </xsl:text>
    511 		  <xsl:apply-templates select="exports"/>
    512 		</div>
    513 	      </xsl:when>
    514 	      <xsl:otherwise>
    515 		<h2>Table of Contents</h2>
    516 		<xsl:apply-templates select="exports[@type='macro']" mode="toc">
    517 		  <xsl:sort select='@symbol'/>
    518 		</xsl:apply-templates>
    519 		<xsl:apply-templates select="exports[@type='enum']" mode="toc">
    520 		  <xsl:sort select='@symbol'/>
    521 		</xsl:apply-templates>
    522 		<xsl:apply-templates select="exports[@type='typedef']" mode="toc">
    523 		  <xsl:sort select='@symbol'/>
    524 		</xsl:apply-templates>
    525 		<xsl:apply-templates select="exports[@type='struct']" mode="toc">
    526 		  <xsl:sort select='@symbol'/>
    527 		</xsl:apply-templates>
    528 		<xsl:apply-templates select="exports[@type='function']" mode="toc">
    529 		  <xsl:sort select='@symbol'/>
    530 		</xsl:apply-templates>
    531 		<h2>Description</h2>
    532 		<xsl:text>
    533 </xsl:text>
    534 		<xsl:apply-templates select="exports[@type='macro']">
    535 		  <xsl:sort select='@symbol'/>
    536 		</xsl:apply-templates>
    537 		<xsl:apply-templates select="exports[@type='enum']">
    538 		  <xsl:sort select='@symbol'/>
    539 		</xsl:apply-templates>
    540 		<xsl:apply-templates select="exports[@type='typedef']">
    541 		  <xsl:sort select='@symbol'/>
    542 		</xsl:apply-templates>
    543 		<xsl:apply-templates select="exports[@type='struct']">
    544 		  <xsl:sort select='@symbol'/>
    545 		</xsl:apply-templates>
    546 		<xsl:apply-templates select="exports[@type='function']">
    547 		  <xsl:sort select='@symbol'/>
    548 		</xsl:apply-templates>
    549 	      </xsl:otherwise>
    550 	    </xsl:choose>
    551     </td>
    552   </tr>
    553 </table>
    554     </xsl:document>
    555   </xsl:template>
    556 
    557   <xsl:template match="file" mode="toc">
    558     <xsl:variable name="name" select="@name"/>
    559     <b><a href="http://xmlsoft.org/wiki/index.php?title=Libxml2:Api:{$name}"><xsl:value-of select="$name"/></a></b><br/>
    560       <xsl:value-of select="summary"/>
    561       <br/><br/>
    562   </xsl:template>
    563 
    564   <xsl:template name="mainpage">
    565     <xsl:param name="file" select="concat($htmldir, '/libxml-index.html')"/>
    566     <xsl:variable name="title">Reference Manual for <xsl:value-of select="/api/@name"/></xsl:variable>
    567     <xsl:document href="{$file}" method="xml" encoding="UTF-8"
    568       doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
    569       doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    570       <xsl:call-template name="style"/>
    571       <xsl:call-template name="docstyle"/>
    572       <table border="0" cellpadding="3" cellspacing="1" width="100%">
    573         <tr>
    574           <td>
    575             <xsl:apply-templates select="/api/files/file" mode="toc"/>
    576           </td>
    577         </tr>
    578       </table>
    579     </xsl:document>
    580   </xsl:template>
    581 
    582   <xsl:template match="/">
    583     <!-- Save the main libxml-index.html as well as a couple of copies -->
    584     <xsl:call-template name="mainpage"/>
    585     <!-- now build the file for each of the modules -->
    586     <xsl:apply-templates select="/api/files/file"/>
    587   </xsl:template>
    588 
    589 </xsl:stylesheet>
    590