devhelp file creation



This is the addition I mentioned in my previous email. Attached is a customisation layer for the docbook XSL stylesheets that generates a .devhelp file for the book. It can be invoked with:
   xsltproc --xinclude --stringparam gtkdoc.bookname foo foo.xml

Which will output a foo.devhelp file containign a toc and function index. I would like to integrate this into the existing gtk-doc XSL customisation layer (so that the .devhelp file will get generated with the rest of the docs, and the links will all match up).

This should help in making more gnome documentation available within devhelp (which is as good a package as any to promote as an API documentation browser).

James.

--
Email: james daa com au              | Linux.conf.au   http://linux.conf.au/
WWW: http://www.daa.com.au/~james/ | Jan 22-25 Perth, Western Australia.

<?xml version='1.0'?> <!--*- mode: xml -*-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                version='1.0'
                xmlns="http://www.devhelp.net/book";
                exclude-result-prefixes="#default">

  <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl"/>
  <xsl:param name="use.id.as.filename" select="'1'"/>
  <xsl:param name="html.ext" select="'.html'"/>
  <xsl:param name="refentry.generate.name" select="0"/>
  <xsl:param name="refentry.generate.title" select="1"/>

  <xsl:param name="gtkdoc.bookname" select="''"/>

  <xsl:template match="book|article">
    <xsl:call-template name="generate.devhelp"/>
  </xsl:template>


  <xsl:template name="generate.devhelp">
    <xsl:call-template name="write.chunk">
      <xsl:with-param name="filename">
        <xsl:choose>
          <xsl:when test="$gtkdoc.bookname">
            <xsl:value-of select="$gtkdoc.bookname"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:text>book</xsl:text>
          </xsl:otherwise>
        </xsl:choose>
        <xsl:text>.devhelp</xsl:text>
      </xsl:with-param>
      <xsl:with-param name="method" select="'xml'"/>
      <xsl:with-param name="indent" select="'yes'"/>
      <xsl:with-param name="encoding" select="'utf-8'"/>
      <xsl:with-param name="content">
        <xsl:call-template name="devhelp"/>
      </xsl:with-param>
    </xsl:call-template>
  </xsl:template>

  <xsl:template name="devhelp">
    <xsl:variable name="title">
      <xsl:apply-templates select="." mode="generate.devhelp.toc.title.mode"/>
    </xsl:variable>
    <xsl:variable name="link">
      <xsl:call-template name="href.target"/>
    </xsl:variable>
    <xsl:variable name="author">
      <xsl:if test="articleinfo|bookinfo">
        <xsl:apply-templates mode="generate.devhelp.authors"
                             select="articleinfo|bookinfo"/>
      </xsl:if>
    </xsl:variable>
    <xsl:variable name="toc.nodes" select="part|reference|preface|chapter|
                                           appendix|article|bibliography|
                                           glossary|index|refentry|
                                           bridgehead"/>

    <book title="{$title}" link="{$link}" author="{$author}" name="{$gtkdoc.bookname}">
      <xsl:if test="$toc.nodes">
        <chapters>
          <xsl:apply-templates select="$toc.nodes"
                               mode="generate.devhelp.toc.mode"/>
        </chapters>
      </xsl:if>
      <functions>
        <xsl:apply-templates select="//refsect2"
                             mode="generate.devhelp.index.mode"/>
      </functions>
    </book>
  </xsl:template>

  <xsl:template match="*" mode="generate.devhelp.toc.mode">
    <xsl:variable name="title">
      <xsl:apply-templates select="." mode="generate.devhelp.toc.title.mode"/>
    </xsl:variable>
    <xsl:variable name="target">
      <xsl:variable name="anchor" select="title/anchor"/>
      <xsl:choose>
        <xsl:when test="$anchor">
          <xsl:call-template name="href.target">
            <xsl:with-param name="object" select="$anchor"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
          <xsl:call-template name="href.target"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <sub name="{$title}" link="{$target}">
      <xsl:apply-templates select="section|sect1|sect2|
                                   refentry|refsect|refsect1|refsect2|
                                   bridgehead|part"
                           mode="generate.devhelp.toc.mode"/>
    </sub>
  </xsl:template>

  <xsl:template match="*" mode="generate.devhelp.index.mode">
    <xsl:variable name="title" select="title"/>
    <xsl:variable name="anchor" select="title/anchor"/>
    <xsl:if test="not($anchor/@href)">
      <xsl:variable name="target">
        <xsl:call-template name="href.target">
          <xsl:with-param name="object" select="$anchor"/>
        </xsl:call-template>
      </xsl:variable>
      <function name="{$title}" link="{$target}"/>
    </xsl:if>
  </xsl:template>

  <!-- get title -->
  <xsl:template match="article" mode="generate.devhelp.toc.title.mode">
    <xsl:value-of select="articleinfo/title"/>
  </xsl:template>
  <xsl:template match="book" mode="generate.devhelp.toc.title.mode">
    <xsl:value-of select="bookinfo/title"/>
  </xsl:template>
  <xsl:template match="refentry" mode="generate.devhelp.toc.title.mode">
    <xsl:value-of select="refmeta/refentrytitle"/>
  </xsl:template>
  <xsl:template match="*" mode="generate.devhelp.toc.title.mode">
    <xsl:value-of select="title"/>
  </xsl:template>

  <!-- -->
  <xsl:template match="articleinfo|bookinfo" mode="generate.devhelp.authors">
    <xsl:for-each select="authorgroup/author">
      <xsl:value-of select="firstname"/>
      <xsl:text> </xsl:text>
      <xsl:value-of select="surname"/>
      <xsl:if test="not(last())">
        <xsl:text>, </xsl:text>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]