diff options
Diffstat (limited to 'src/boost/tools/boostbook/xsl/docbook.xsl')
-rw-r--r-- | src/boost/tools/boostbook/xsl/docbook.xsl | 538 |
1 files changed, 538 insertions, 0 deletions
diff --git a/src/boost/tools/boostbook/xsl/docbook.xsl b/src/boost/tools/boostbook/xsl/docbook.xsl new file mode 100644 index 000000000..a862bb107 --- /dev/null +++ b/src/boost/tools/boostbook/xsl/docbook.xsl @@ -0,0 +1,538 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com> + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) + --> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xi="http://www.w3.org/2001/XInclude" + version="1.0"> + <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/common/common.xsl"/> + <xsl:include href="reference.xsl"/> + + <xsl:output method="xml" + doctype-public="-//OASIS//DTD DocBook XML V4.2//EN" + doctype-system="http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"/> + + <!-- Generate consistent id values if document is unchanged --> + <xsl:param name="generate.consistent.ids" select="0"/> + + <!-- The maximum number of columns allowed in preformatted text --> + <xsl:param name="max-columns" select="78"/> + + <!-- The root of the Boost directory --> + <xsl:param name="boost.root" select="'../..'"/> + + <!-- A space-separated list of libraries to include in the + output. If this list is empty, all libraries will be included. --> + <xsl:param name="boost.include.libraries" select="''"/> + + <!-- Whether to rewrite relative URL's to point to the website --> + <xsl:param name="boost.url.prefix"/> + + <!-- A space-separated list of xml elements in the input file for which + whitespace should be preserved --> + <xsl:preserve-space elements="*"/> + + <!-- The root for boost headers --> + <xsl:param name="boost.header.root"> + <xsl:if test="$boost.url.prefix"> + <xsl:value-of select="$boost.url.prefix"/> + <xsl:text>/</xsl:text> + </xsl:if> + <xsl:value-of select="$boost.root"/> + </xsl:param> + + <!-- The prefix for 'boost:' links. --> + <xsl:variable name="boost.protocol.text"> + <xsl:if test="($boost.url.prefix != '') and (contains($boost.root, '://') = 0)"> + <xsl:value-of select="concat($boost.url.prefix, '/', $boost.root)"/> + </xsl:if> + <xsl:if test="($boost.url.prefix = '') or contains($boost.root, '://')"> + <xsl:value-of select="$boost.root"/> + </xsl:if> + </xsl:variable> + + <xsl:template match="library-reference"> + <xsl:choose> + <xsl:when test="ancestor::library-reference"> + <xsl:apply-templates/> + </xsl:when> + <xsl:otherwise> + <section> + <xsl:choose> + <xsl:when test="@id"> + <xsl:attribute name="id"> + <xsl:value-of select="@id"/> + </xsl:attribute> + </xsl:when> + <xsl:when test="ancestor::library/attribute::id"> + <xsl:attribute name="id"> + <xsl:value-of select="ancestor::library/attribute::id"/> + <xsl:text>.reference</xsl:text> + </xsl:attribute> + </xsl:when> + </xsl:choose> + <xsl:if test="not(title)"> + <title> + <xsl:text>Reference</xsl:text> + </title> + </xsl:if> + + <xsl:if test="concept"> + <section> + <xsl:choose> + <xsl:when test="@id"> + <xsl:attribute name="id"> + <xsl:value-of select="@id"/> + <xsl:text>.concepts</xsl:text> + </xsl:attribute> + </xsl:when> + <xsl:when test="ancestor::library/attribute::id"> + <xsl:attribute name="id"> + <xsl:value-of select="ancestor::library/attribute::id"/> + <xsl:text>.concepts</xsl:text> + </xsl:attribute> + </xsl:when> + </xsl:choose> + + <title>Concepts</title> + + <itemizedlist> + <xsl:for-each select="concept"> + <listitem><simpara> + <xsl:call-template name="internal-link"> + <xsl:with-param name="to"> + <xsl:call-template name="generate.id"/> + </xsl:with-param> + <xsl:with-param name="text" select="@name"/> + </xsl:call-template> + </simpara></listitem> + </xsl:for-each> + </itemizedlist> + </section> + </xsl:if> + + <xsl:apply-templates/> + </section> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="header"> + <xsl:if test="*"> + <section> + <xsl:attribute name="id"> + <xsl:call-template name="generate.id"/> + </xsl:attribute> + + <title> + <xsl:text>Header <</xsl:text> + <ulink> + <xsl:attribute name="url"> + <xsl:value-of select="$boost.header.root"/> + <xsl:text>/</xsl:text> + <xsl:value-of select="@name"/> + </xsl:attribute> + <xsl:value-of select="@name"/> + </ulink> + <xsl:text>></xsl:text> + </title> + + <xsl:apply-templates select="para|section" mode="annotation"/> + + <xsl:if test="macro"> + <xsl:call-template name="synopsis"> + <xsl:with-param name="text"> + <xsl:apply-templates mode="synopsis" select="macro"> + <xsl:with-param name="indentation" select="0"/> + </xsl:apply-templates> + </xsl:with-param> + </xsl:call-template> + </xsl:if> + + <xsl:if test="descendant::class|descendant::struct|descendant::union + |descendant::function|descendant::free-function-group + |descendant::overloaded-function|descendant::enum + |descendant::typedef"> + <xsl:call-template name="synopsis"> + <xsl:with-param name="text"> + <xsl:apply-templates mode="synopsis" + select="namespace|class|struct|union + |function|free-function-group + |overloaded-function|enum + |typedef"> + <xsl:with-param name="indentation" select="0"/> + </xsl:apply-templates> + </xsl:with-param> + </xsl:call-template> + </xsl:if> + + <xsl:apply-templates mode="namespace-reference"/> + </section> + </xsl:if> + </xsl:template> + + <xsl:template match="header" mode="generate.id"> + <xsl:text>header.</xsl:text> + <xsl:value-of select="translate(@name, '/.', '._')"/> + </xsl:template> + + <xsl:template match="*" mode="passthrough"> + <xsl:copy-of select="."/> + </xsl:template> + + <xsl:template name="monospaced"> + <xsl:param name="text"/> + <computeroutput><xsl:value-of select="$text"/></computeroutput> + </xsl:template> + + <!-- Linking --> + <xsl:template match="ulink"> + <xsl:copy> + <xsl:copy-of select="@*"/> + <xsl:attribute name="url"> + <xsl:choose> + <xsl:when test="starts-with(@url, 'boost:/')"> + <xsl:value-of select="concat($boost.protocol.text, substring-after(@url, 'boost:'))"/> + </xsl:when> + <xsl:when test="starts-with(@url, 'boost:')"> + <xsl:value-of select="concat($boost.protocol.text, '/', substring-after(@url, 'boost:'))"/> + </xsl:when> + <xsl:when test="$boost.url.prefix != '' and not(contains(@url, ':') or starts-with(@url, '//'))"> + <xsl:value-of select="concat($boost.url.prefix, '/', @url)"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="@url"/> + </xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:apply-templates/> + </xsl:copy> + </xsl:template> + <xsl:template name="internal-link"> + <xsl:param name="to"/> + <xsl:param name="text"/> + <xsl:param name="highlight" select="false()"/> + + <link linkend="{$to}"> + <xsl:if test="$highlight"> + <xsl:call-template name="source-highlight"> + <xsl:with-param name="text" select="$text"/> + </xsl:call-template> + </xsl:if> + <xsl:if test="not($highlight)"> + <xsl:value-of select="string($text)"/> + </xsl:if> + </link> + </xsl:template> + + <xsl:template name="anchor"> + <xsl:param name="to"/> + <xsl:param name="text"/> + <xsl:param name="highlight" select="false()"/> + + <anchor id="{$to}"/> + <xsl:if test="$highlight"> + <xsl:call-template name="source-highlight"> + <xsl:with-param name="text" select="$text"/> + </xsl:call-template> + </xsl:if> + <xsl:if test="not($highlight)"> + <xsl:value-of select="$text"/> + </xsl:if> + </xsl:template> + + <xsl:template name="link-or-anchor"> + <xsl:param name="to"/> + <xsl:param name="text"/> + + <!-- True if we should create an anchor, otherwise we will create + a link. If you require more control (e.g., with the possibility of + having no link or anchor), set link-type instead: if present, it + takes precedence. --> + <xsl:param name="is-anchor"/> + + <!-- 'anchor', 'link', or 'none' --> + <xsl:param name="link-type"> + <xsl:choose> + <xsl:when test="$is-anchor"> + <xsl:text>anchor</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>link</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:param> + + <xsl:param name="highlight" select="false()"/> + + <xsl:choose> + <xsl:when test="$link-type='anchor'"> + <xsl:call-template name="anchor"> + <xsl:with-param name="to" select="$to"/> + <xsl:with-param name="text" select="$text"/> + <xsl:with-param name="highlight" select="$highlight"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="$link-type='link'"> + <xsl:call-template name="internal-link"> + <xsl:with-param name="to" select="$to"/> + <xsl:with-param name="text" select="$text"/> + <xsl:with-param name="highlight" select="$highlight"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="$link-type='none'"> + <xsl:if test="$highlight"> + <xsl:call-template name="source-highlight"> + <xsl:with-param name="text" select="$text"/> + </xsl:call-template> + </xsl:if> + <xsl:if test="not($highlight)"> + <xsl:value-of select="$text"/> + </xsl:if> + </xsl:when> + <xsl:otherwise> + <xsl:message> +Error: XSL template 'link-or-anchor' called with invalid link-type '<xsl:value-of select="$link-type"/>' + </xsl:message> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template name="separator"/> + + <xsl:template name="reference-documentation"> + <xsl:param name="name"/> + <xsl:param name="refname"/> + <xsl:param name="purpose"/> + <xsl:param name="anchor"/> + <xsl:param name="synopsis"/> + <xsl:param name="text"/> + + <refentry id="{$anchor}"> + <refmeta> + <refentrytitle><xsl:value-of select="$name"/></refentrytitle> + <manvolnum>3</manvolnum> + </refmeta> + <refnamediv> + <refname><xsl:value-of select="$refname"/></refname> + <refpurpose> + <xsl:apply-templates mode="purpose" select="$purpose"/> + </refpurpose> + </refnamediv> + <refsynopsisdiv> + <synopsis> + <xsl:copy-of select="$synopsis"/> + </synopsis> + </refsynopsisdiv> + <xsl:if test="not(string($text)='')"> + <refsect1> + <title>Description</title> + <xsl:copy-of select="$text"/> + </refsect1> + </xsl:if> + </refentry> + </xsl:template> + + <xsl:template name="member-documentation"> + <xsl:param name="name"/> + <xsl:param name="text"/> + + <refsect2> + <title><xsl:copy-of select="$name"/></title> + <xsl:copy-of select="$text"/> + </refsect2> + </xsl:template> + + <xsl:template name="preformatted"> + <xsl:param name="text"/> + + <literallayout class="monospaced"> + <xsl:copy-of select="$text"/> + </literallayout> + </xsl:template> + + <xsl:template name="synopsis"> + <xsl:param name="text"/> + + <synopsis> + <xsl:copy-of select="$text"/> + </synopsis> + </xsl:template> + + <!-- Fallthrough for DocBook elements --> + <xsl:template match="*"> + <xsl:element name="{name(.)}"> + <xsl:for-each select="./@*"> + <xsl:choose> + <xsl:when test="local-name(.)='last-revision'"> + <xsl:attribute + name="rev:last-revision" + namespace="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision"> + <xsl:value-of select="."/> + </xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="{name(.)}"> + <xsl:value-of select="."/> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> + <xsl:apply-templates/> + </xsl:element> + </xsl:template> + + <xsl:template match="processing-instruction()"> + <xsl:copy/> + </xsl:template> + + <xsl:template match="code"> + <computeroutput> + <xsl:apply-templates mode="annotation"/> + </computeroutput> + </xsl:template> + + <xsl:template match="code[@language='jam']"> + <computeroutput> + <xsl:apply-templates mode="highlight-jam"/> + </computeroutput> + </xsl:template> + + <xsl:template match="code[@language='c++']"> + <xsl:apply-templates select="." mode="annotation"/> + </xsl:template> + + <xsl:template match="bold"> + <emphasis role="bold"> + <xsl:apply-templates mode="annotation"/> + </emphasis> + </xsl:template> + + <xsl:template match="library"> + <xsl:if test="not(@html-only = 1) and + ($boost.include.libraries='' or + contains($boost.include.libraries, @id))"> + <chapter> + <xsl:copy-of select="@*[not(contains(' last-revision name dirname html-only url ', concat(' ',local-name(),' ')))]"/> + <xsl:if test="not(@id)"> + <xsl:attribute name="id"> + <xsl:call-template name="generate.id"/> + </xsl:attribute> + </xsl:if> + + <xsl:if test="@last-revision"> + <xsl:attribute + name="rev:last-revision" + namespace="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision"> + <xsl:value-of select="@last-revision"/> + </xsl:attribute> + </xsl:if> + <xsl:apply-templates/> + </chapter> + </xsl:if> + </xsl:template> + + <xsl:template match="chapter"> + <xsl:if test="$boost.include.libraries=''"> + <chapter> + <xsl:copy-of select="./@*" /> + <xsl:apply-templates/> + </chapter> + </xsl:if> + </xsl:template> + + <xsl:template match="boostbook"> + <book> + <xsl:copy-of select="@*[not(contains(' last-revision name dirname html-only url ', concat(' ',local-name(),' ')))]"/> + <xsl:apply-templates/> + </book> + </xsl:template> + + <xsl:template match="programlisting"> + <programlisting><xsl:apply-templates/></programlisting> + </xsl:template> + + <xsl:template match="programlisting[@language='jam']"> + <programlisting> + <xsl:apply-templates mode="highlight-jam"/> + </programlisting> + </xsl:template> + + <xsl:template match="programlisting[@language='c++']"> + <xsl:apply-templates select="." mode="annotation"/> + </xsl:template> + + <!-- These DocBook elements have special meaning. Use the annotation mode --> + <xsl:template match="classname|methodname|functionname|enumname| + macroname|headername|globalname"> + <computeroutput> + <xsl:apply-templates select="." mode="annotation"/> + </computeroutput> + </xsl:template> + + <xsl:template match="libraryname|conceptname"> + <xsl:apply-templates select="." mode="annotation"/> + </xsl:template> + + <xsl:template match="description"> + <xsl:apply-templates mode="annotation"/> + </xsl:template> + + <!-- Swallow using-namespace and using-class directives along with + last-revised elements --> + <xsl:template match="using-namespace|using-class|last-revised"/> + + <!-- If there is no "namespace-reference" mode, forward to + "reference" mode --> + <xsl:template match="*" mode="namespace-reference"> + <xsl:apply-templates select="." mode="reference"/> + </xsl:template> + + <!-- Make the various blocks immediately below a "part" be + "chapter"-s. Must also take into account turning + chapters within chpaters into sections. --> + <xsl:template match="part/part|part/article"> + <chapter> + <xsl:copy-of select="./@*"/> + <xsl:apply-templates/> + </chapter> + </xsl:template> + <xsl:template match="part/part/partinfo|part/article/articleinfo"> + <chapterinfo><xsl:apply-templates/></chapterinfo> + </xsl:template> + <xsl:template match="part/part/chapter|part/part/appendix"> + <section> + <xsl:copy-of select="./@*"/> + <xsl:apply-templates/> + </section> + </xsl:template> + <xsl:template match="part/part/chapter/chapterinfo|part/part/appendix/appendixinfo"> + <sectioninfo><xsl:apply-templates/></sectioninfo> + </xsl:template> + + <!-- Header link comment to be inserted at the start of a reference page's + synopsis --> + <xsl:template name="header-link"> + <xsl:if test="ancestor::header"> + <xsl:call-template name="highlight-comment"> + <xsl:with-param name="text"> + <xsl:text>// In header: <</xsl:text> + <xsl:call-template name="internal-link"> + <xsl:with-param name="to"> + <xsl:call-template name="generate.id"> + <xsl:with-param name="node" select="ancestor::header[1]"/> + </xsl:call-template> + </xsl:with-param> + <xsl:with-param name="text" select="ancestor::header[1]/@name" /> + </xsl:call-template> + <xsl:text>> </xsl:text> + </xsl:with-param> + </xsl:call-template> + </xsl:if> + </xsl:template> +</xsl:stylesheet> + |