Mercurial > pidgin
changeset 20912:f34539eb7a61
Add some xsl magic to generate a .devhelp index from doxygen's XML output,
allowing the documentation to be viewed in Devhelp. It's not perfect ---
there are some broken links and the transformation is a bit fragile --- but
works well enough to be useful.
author | Will Thompson <will.thompson@collabora.co.uk> |
---|---|
date | Sat, 13 Oct 2007 15:44:43 +0000 |
parents | 54d232b52607 |
children | f48bee915ede |
files | Doxyfile.in Makefile.am configure.ac doxy2devhelp.xsl |
diffstat | 4 files changed, 124 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/Doxyfile.in Fri Oct 12 22:26:44 2007 +0000 +++ b/Doxyfile.in Sat Oct 13 15:44:43 2007 +0000 @@ -858,7 +858,7 @@ # feature is still experimental and incomplete at the # moment. -GENERATE_XML = NO +GENERATE_XML = YES # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be
--- a/Makefile.am Fri Oct 12 22:26:44 2007 +0000 +++ b/Makefile.am Sat Oct 13 15:44:43 2007 +0000 @@ -48,6 +48,13 @@ if HAVE_DOXYGEN @echo "Running doxygen..." @doxygen +if HAVE_XSLTPROC + @echo "Generating devhelp index..." + @xsltproc doxy2devhelp.xsl doc/xml/index.xml > doc/html/pidgin.devhelp + @echo "(Symlink doc/html to ~/.local/share/gtk-doc/html/pidgin to make devhelp see the documentation)" +else + @echo "Not generating devhelp index: xsltproc was not found by configure" +endif else @echo "doxygen was not found during configure. Aborting." @echo;
--- a/configure.ac Fri Oct 12 22:26:44 2007 +0000 +++ b/configure.ac Sat Oct 13 15:44:43 2007 +0000 @@ -2101,6 +2101,10 @@ [AC_HELP_STRING([--enable-dot], [enable graphs in doxygen via 'dot'])], enable_dot="$enableval", enable_dot="yes") +AC_ARG_ENABLE(devhelp, + [AC_HELP_STRING([--enable-devhelp], + [enable building index for devhelp documentation browser])], + enable_devhelp="$enableval", enable_devhelp="yes") if test "x$enable_doxygen" = xyes; then AC_CHECK_PROG(DOXYGEN, doxygen, true, false) @@ -2120,14 +2124,28 @@ AC_DEFINE_UNQUOTED(HAVE_DOT, 1, [whether or not we have dot]) fi fi + + if test "x$enable_devhelp" = "xyes"; then + AC_CHECK_PROG(XSLTPROC, xsltproc, true, false) + + if test $XSLTPROC = false; then + enable_devhelp="no"; + AC_MSG_WARN([*** xsltproc not found; devhelp index will not be created]) + else + AC_DEFINE_UNQUOTED(HAVE_XSLTPROC, 1, [whether or not we have xsltproc for devhelp index]) + fi + fi fi else enable_dot="no" + enable_devhelp="no" fi AC_SUBST(enable_doxygen) AC_SUBST(enable_dot) +AC_SUBST(enable_devhelp) AM_CONDITIONAL(HAVE_DOXYGEN, test "x$enable_doxygen" = "xyes") +AM_CONDITIONAL(HAVE_XSLTPROC, test "x$enable_devhelp" = "xyes") AC_ARG_ENABLE(debug, [AC_HELP_STRING([--enable-debug], [compile with debugging support])], , enable_debug=no)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doxy2devhelp.xsl Sat Oct 13 15:44:43 2007 +0000 @@ -0,0 +1,98 @@ +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:fo="http://www.w3.org/1999/XSL/Format" + version="1.0"> + +<!-- Based on http://bur.st/~eleusis/devhelp/doxy2devhelp.xsl + (http://bur.st/~eleusis/devhelp/README) + which is based on http://bugzilla.gnome.org/show_bug.cgi?id=122450 +--> + +<xsl:output method="xml" version="1.0" indent="yes"/> + +<xsl:param name="reference_prefix"></xsl:param> + +<xsl:template match="/"> + <book title="Pidgin Documentation" + name="pidgin" + link="{$reference_prefix}main.html"> + <chapters> + <sub name="Modules" link="{$reference_prefix}modules.html"> + <xsl:apply-templates select="doxygenindex/compound[@kind='group']"> + <xsl:sort select="."/> + </xsl:apply-templates> + </sub> + <!-- annotated.html has the short descriptions beside each struct. is + that more useful than being grouped alphabetically? + --> + <sub name="Structs" link="{$reference_prefix}classes.html"> + <xsl:apply-templates select="doxygenindex/compound[@kind='struct']"> + <xsl:sort select="."/> + </xsl:apply-templates> + </sub> + <!-- This is redundant given Modules --> + <!-- + <sub name="Directories" link="{$reference_prefix}dirs.html"> + <xsl:apply-templates select="doxygenindex/compound[@kind='dir']"> + <xsl:sort select="."/> + </xsl:apply-templates> + </sub> + --> + <!-- FIXME: Some files show up here but are broken links; mostly + files that are under pages... + --> + <sub name="Files" link="{$reference_prefix}files.html"> + <xsl:apply-templates select="doxygenindex/compound[@kind='file']"> + <xsl:sort select="."/> + </xsl:apply-templates> + </sub> + <sub name="Signals, HOWTOs, Other" link="{$reference_prefix}pages.html"> + <xsl:apply-templates select="doxygenindex/compound[@kind='page']"> + <xsl:sort select="."/> + </xsl:apply-templates> + </sub> + </chapters> + + <functions> + <!-- @todo: maybe select only the real functions, ie those with kind=="function"? --> + <xsl:apply-templates select="doxygenindex/compound/member" mode="as-function"/> + </functions> + </book> +</xsl:template> + +<xsl:template match="compound"> + <xsl:param name="name"><xsl:value-of select="name"/></xsl:param> + <xsl:param name="link"><xsl:value-of select="@refid"/>.html</xsl:param> + <sub name="{$name}" link="{$reference_prefix}{$link}"> + <xsl:apply-templates select="member" mode="as-sub"> + <xsl:sort select="."/> + </xsl:apply-templates> + </sub> +</xsl:template> + +<xsl:template match="member" mode="as-function"> + <!-- + <function name="atk_set_value" link="atk-atkvalue.html#ATK-SET-VALUE"/> + --> + <xsl:param name="name"><xsl:value-of select="name"/></xsl:param> + <!-- Link is refid attribute of parent element + "#" + diff between refid of parent and own refid --> + <xsl:param name="refid_parent"><xsl:value-of select="parent::node()/@refid"/></xsl:param> + <xsl:param name="own_refid"><xsl:value-of select="@refid"/></xsl:param> + <xsl:param name="offset"><xsl:value-of select="string-length($refid_parent) + 3"/></xsl:param> + <xsl:param name="ref_diff"><xsl:value-of select="substring($own_refid, $offset, 33)"/></xsl:param> + <xsl:param name="link"><xsl:value-of select="$refid_parent"/>.html#<xsl:value-of select="$ref_diff"/></xsl:param> + <function name="{$name}" link="{$reference_prefix}{$link}"/> +</xsl:template> + +<xsl:template match="member" mode="as-sub"> + <xsl:param name="name"><xsl:value-of select="name"/></xsl:param> + <!-- Link is refid attribute of parent element + "#" + diff between refid of parent and own refid --> + <xsl:param name="refid_parent"><xsl:value-of select="parent::node()/@refid"/></xsl:param> + <xsl:param name="own_refid"><xsl:value-of select="@refid"/></xsl:param> + <xsl:param name="offset"><xsl:value-of select="string-length($refid_parent) + 3"/></xsl:param> + <xsl:param name="ref_diff"><xsl:value-of select="substring($own_refid, $offset, 33)"/></xsl:param> + <xsl:param name="link"><xsl:value-of select="$refid_parent"/>.html#<xsl:value-of select="$ref_diff"/></xsl:param> + <sub name="{$name}" link="{$reference_prefix}{$link}"/> +</xsl:template> + +</xsl:stylesheet>