wayland/doc/publican/xsl/doxygen-to-publican.xsl
Pekka Paalanen 4216a08b96 doc/xsl: rearrange member doc generation
Creating an empty <variablelist> is illegal. This can already be seen in
the XSL anywhere it is generated. The used XSL programming pattern
requires the look-up conditions to be repeated between the <xsl:if> and
<xsl:apply-templates> tags. Usually this is not a problem, but the
conditions for memberdef is too much to copy around.

The conditions between the if and the apply-templates have already
diverged, causing validation errors (that are currently suppressed).

Rearrange the XSL so that the applicable memberdef are stored in a
variable, so that both the if and the apply-templates operate on the
exact same set of matches. This avoids emitting empty <variablelist>.

As a result, the members of structures wl_argument, wl_interface,
wl_message, and wl_listener newly appear in the documentation.

Signed-off-by: Pekka Paalanen <pq@iki.fi>
2025-12-29 16:27:42 +02:00

160 lines
4.8 KiB
XML

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:param name="which" />
<xsl:template match="/">
<xsl:apply-templates select="/doxygen/compounddef[@kind!='file' and @kind!='dir']" />
<section id="{$which}-Functions">
<title>Functions</title>
<para />
<xsl:apply-templates select="/doxygen/compounddef[@kind='file']/sectiondef" />
</section>
</xsl:template>
<xsl:template match="parameteritem">
<varlistentry>
<term>
<xsl:apply-templates select="parameternamelist/parametername"/>
</term>
<listitem>
<simpara><xsl:apply-templates select="parameterdescription"/></simpara>
</listitem>
</varlistentry>
</xsl:template>
<xsl:template match="parameterlist">
<xsl:if test="parameteritem">
<variablelist>
<xsl:apply-templates select="parameteritem" />
</variablelist>
</xsl:if>
</xsl:template>
<xsl:template match="ref">
<link linkend="{$which}-{@refid}"><xsl:value-of select="." /></link>
</xsl:template>
<xsl:template match="simplesect[@kind='return']">
<variablelist>
<varlistentry>
<term>Returns:</term>
<listitem>
<simpara><xsl:apply-templates /></simpara>
</listitem>
</varlistentry>
</variablelist>
</xsl:template>
<xsl:template match="simplesect[@kind='see']">
See also: <xsl:apply-templates />
</xsl:template>
<xsl:template match="simplesect[@kind='since']">
Since: <xsl:apply-templates />
</xsl:template>
<xsl:template match="simplesect[@kind='note']">
<emphasis>Note: <xsl:apply-templates /></emphasis>
</xsl:template>
<xsl:template match="sp">
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="programlisting">
<programlisting><xsl:apply-templates /></programlisting>
</xsl:template>
<xsl:template match="itemizedlist">
<itemizedlist><xsl:apply-templates select="listitem" /></itemizedlist>
</xsl:template>
<xsl:template match="listitem">
<listitem><simpara><xsl:apply-templates /></simpara></listitem>
</xsl:template>
<!-- stops cross-references in the section titles -->
<xsl:template match="briefdescription">
<xsl:value-of select="." />
</xsl:template>
<!-- this opens a para for each detaileddescription/para. I could not find a
way to extract the right text for the description from the
source otherwise. Downside: we can't use para for return value, "see
also", etc. because they're already inside a para. So they're lists.
It also means we don't control the order of when something is added to
the output, it matches the input file
-->
<xsl:template match="detaileddescription/para">
<para><xsl:apply-templates /></para>
</xsl:template>
<xsl:template match="detaileddescription">
<xsl:apply-templates select="para" />
</xsl:template>
<xsl:template match="sectiondef">
<xsl:variable name="docitems"
select="memberdef[
(@kind = 'function' and
(@static = 'no' or
substring(location/@bodyfile,
string-length(location/@bodyfile) - 1,
1000) = '.h'
)
and @prot = 'public'
)
or
(@kind != 'function' and normalize-space(briefdescription) != '')
]" />
<xsl:if test="$docitems">
<variablelist>
<!-- Apply memberdef template -->
<xsl:apply-templates select="$docitems" />
</variablelist>
</xsl:if>
</xsl:template>
<!-- methods -->
<xsl:template match="memberdef" >
<varlistentry id="{$which}-{@id}">
<term>
<xsl:value-of select="name"/>
<xsl:if test="normalize-space(briefdescription) != ''">
- <xsl:apply-templates select="briefdescription" />
</xsl:if>
</term>
<listitem>
<synopsis>
<xsl:apply-templates select="definition"/><xsl:apply-templates select="argsstring"/>
</synopsis>
<xsl:apply-templates select="detaileddescription" />
</listitem>
</varlistentry>
</xsl:template>
<!-- classes -->
<xsl:template match="compounddef" >
<section id="{$which}-{@id}">
<title>
<xsl:value-of select="compoundname" />
<xsl:if test="normalize-space(briefdescription) != ''">
- <xsl:apply-templates select="briefdescription" />
</xsl:if>
</title>
<xsl:choose>
<xsl:when test="normalize-space(detaileddescription) != ''">
<xsl:apply-templates select="detaileddescription" />
</xsl:when>
<xsl:otherwise>
<para />
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="sectiondef" />
</section>
</xsl:template>
</xsl:stylesheet>