+ <xsl:template match="memberdef[@kind = 'function']">
+ <xsl:variable name="name" select="name"/>
+
+ <section id="{@id}" xreflabel="{name}">
+ <title>
+ <xsl:text>Function </xsl:text>
+ <xsl:value-of select="name"/>
+ <xsl:text>()</xsl:text>
+ </title>
+
+ <xsl:call-template name="generate.index.id">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+
+ <para>
+ <emphasis role="italic">
+ <xsl:value-of select="briefdescription"/>
+ </emphasis>
+ </para>
+
+ <programlisting language="c">
+ <xsl:value-of select="definition"/>
+ <xsl:text> </xsl:text>
+ <xsl:apply-templates select="argsstring"/>
+ </programlisting>
+
+ <xsl:apply-templates select="detaileddescription"/>
+ </section>
+ </xsl:template>
+
+ <xsl:template match="memberdef[@kind = 'enum']">
+ <xsl:variable name="name" select="name"/>
+
+ <section id="{@id}" xreflabel="{name}">
+ <title>
+ <xsl:text>Enum </xsl:text>
+ <xsl:value-of select="name"/>
+ </title>
+
+ <xsl:call-template name="generate.index.id">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+
+ <xsl:apply-templates select="detaileddescription"/>
+
+ <informaltable tabstyle="striped">
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Enum Value</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <xsl:for-each select="enumvalue">
+ <row>
+ <entry>
+ <para id="{@id}" xreflabel="{name}">
+ <xsl:value-of select="name"/>
+ </para>
+ </entry>
+ <entry>
+ <xsl:apply-templates select="detaileddescription"/>
+ </entry>
+ </row>
+ </xsl:for-each>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </section>
+ </xsl:template>
+
+ <xsl:template match="memberdef[@kind = 'define']">
+ <xsl:variable name="name" select="name"/>
+
+ <section id="{@id}" xreflabel="{name}">
+ <title>
+ <xsl:text>Macro </xsl:text>
+ <xsl:value-of select="name"/>
+ </title>
+
+ <xsl:call-template name="generate.index.id">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+
+ <programlisting language="c">
+ <xsl:text>#define </xsl:text>
+ <xsl:value-of select="name"/>
+ <xsl:if test="count(param) > 0">
+ <xsl:text>(</xsl:text>
+ <xsl:for-each select="param/defname">
+ <xsl:if test="position() > 1">
+ <xsl:text>,</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="."/>
+ </xsl:for-each>
+ <xsl:text>)</xsl:text>
+ </xsl:if>
+
+ <xsl:text> </xsl:text>
+
+ <!-- Split long macro definitions across multiple lines -->
+ <xsl:if test="(string-length(initializer) > 50) or (count(param) > 0)">
+ <xsl:text>\</xsl:text>
+ </xsl:if>
+
+ <xsl:value-of select="initializer"/>
+ </programlisting>
+
+ <xsl:apply-templates select="detaileddescription"/>
+ </section>
+ </xsl:template>
+
+ <xsl:template match="memberdef[@kind = 'variable' or @kind = 'typedef']">
+ <xsl:variable name="name" select="name"/>
+
+ <section id="{@id}" xreflabel="{name}">
+ <title>
+ <!-- Doxygen gets confused and thinks function pointer type definitions
+ are variables, so we need to map them to this common section and
+ check the definition to see which of the two it is. -->
+ <xsl:choose>
+ <xsl:when test="contains(definition,'typedef')">
+ <xsl:text>Type </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>Variable </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:value-of select="name"/>
+ </title>
+
+ <xsl:call-template name="generate.index.id">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+
+ <programlisting language="c">
+ <xsl:value-of select="definition"/>
+ </programlisting>
+
+ <xsl:apply-templates select="detaileddescription"/>
+ </section>
+ </xsl:template>
+