Blame xsl/labelid.xsl

Packit 0f19cf
Packit 0f19cf
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
    XSLT Stylesheet DocBook -> LaTeX 
Packit 0f19cf
    ############################################################################ -->
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:param name="titleabbrev.in.toc">1</xsl:param>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="mapheading">
Packit 0f19cf
  <xsl:call-template name="makeheading">
Packit 0f19cf
    <xsl:with-param name="command">
Packit 0f19cf
      <xsl:call-template name="sec-map">
Packit 0f19cf
        <xsl:with-param name="keyword" select="local-name(.)"/>
Packit 0f19cf
      </xsl:call-template>
Packit 0f19cf
    </xsl:with-param>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template name="makeheading">
Packit 0f19cf
  <xsl:param name="num" select="'1'"/>
Packit 0f19cf
  <xsl:param name="allnum" select="'0'"/>
Packit 0f19cf
  <xsl:param name="level"/>
Packit 0f19cf
  <xsl:param name="name"/>
Packit 0f19cf
  <xsl:param name="command"/>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:param name="title" select="(title|info/title)[1]"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="rcommand">
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
    <xsl:when test="$command=''">
Packit 0f19cf
      <xsl:call-template name="map.sect.level">
Packit 0f19cf
        <xsl:with-param name="name" select="$name"/>
Packit 0f19cf
        <xsl:with-param name="level" select="$level"/>
Packit 0f19cf
        <xsl:with-param name="num" select="$num"/>
Packit 0f19cf
        <xsl:with-param name="allnum" select="$allnum"/>
Packit 0f19cf
      </xsl:call-template>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:value-of select="$command"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:if test="@label and @label!=''">
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
    <xsl:when test="string(number(@label))='NaN' or floor(@label)!=@label">
Packit 0f19cf
      <xsl:message>
Packit 0f19cf
      <xsl:text>Warning: only an integer in @label can be processed: '</xsl:text>
Packit 0f19cf
      <xsl:value-of select="@label"/>
Packit 0f19cf
      <xsl:text>'</xsl:text>
Packit 0f19cf
      </xsl:message>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      
Packit 0f19cf
      <xsl:text>\setcounter{</xsl:text>
Packit 0f19cf
      <xsl:value-of select="substring-after($rcommand, '\')"/>
Packit 0f19cf
      <xsl:text>}{</xsl:text>
Packit 0f19cf
      <xsl:value-of select="number(@label)-1"/>
Packit 0f19cf
      <xsl:text>}
</xsl:text>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
Packit 0f19cf
  <xsl:value-of select="$rcommand"/>
Packit 0f19cf
  <xsl:apply-templates select="$title" mode="format.title">
Packit 0f19cf
    <xsl:with-param name="allnum" select="$allnum"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
  <xsl:call-template name="label.id"/>
Packit 0f19cf
  <xsl:apply-templates select="$title" mode="foottext"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
     \section{title string}\label{label.id}
Packit 0f19cf
     -->
Packit 0f19cf
<xsl:template name="maketitle">
Packit 0f19cf
  <xsl:param name="num" select="'1'"/>
Packit 0f19cf
  <xsl:param name="allnum" select="'0'"/>
Packit 0f19cf
  <xsl:param name="with-label" select="1"/>
Packit 0f19cf
  <xsl:param name="level"/>
Packit 0f19cf
  <xsl:param name="name"/>
Packit 0f19cf
  <xsl:param name="command"/>
Packit 0f19cf
  <xsl:param name="title"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="rcommand">
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
    <xsl:when test="$command=''">
Packit 0f19cf
      <xsl:call-template name="map.sect.level">
Packit 0f19cf
        <xsl:with-param name="name" select="$name"/>
Packit 0f19cf
        <xsl:with-param name="level" select="$level"/>
Packit 0f19cf
        <xsl:with-param name="num" select="$num"/>
Packit 0f19cf
        <xsl:with-param name="allnum" select="$allnum"/>
Packit 0f19cf
      </xsl:call-template>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:value-of select="$command"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:value-of select="$rcommand"/>
Packit 0f19cf
  <xsl:text>{</xsl:text>
Packit 0f19cf
  <xsl:value-of select="$title"/>
Packit 0f19cf
  <xsl:text>}
</xsl:text>
Packit 0f19cf
  <xsl:if test="$with-label != 0">
Packit 0f19cf
    <xsl:call-template name="label.id"/>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="label.id">
Packit 0f19cf
  <xsl:param name="object" select="."/>
Packit 0f19cf
  <xsl:param name="string" select="''"/>
Packit 0f19cf
  <xsl:param name="inline" select="0"/>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:variable name="id">
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
      <xsl:when test="$object/@id">
Packit 0f19cf
        <xsl:value-of select="$object/@id"/>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
      <xsl:when test="$object/@xml:id">
Packit 0f19cf
        <xsl:value-of select="$object/@xml:id"/>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:value-of select="$string"/>
Packit 0f19cf
  <xsl:if test="$id!=''">
Packit 0f19cf
    <xsl:text>\label{</xsl:text>
Packit 0f19cf
    <xsl:value-of select="normalize-space($id)"/>
Packit 0f19cf
    <xsl:text>}</xsl:text>
Packit 0f19cf
    
Packit 0f19cf
    <xsl:text>\hyperlabel{</xsl:text>
Packit 0f19cf
    <xsl:value-of select="normalize-space($id)"/>
Packit 0f19cf
    <xsl:text>}</xsl:text>
Packit 0f19cf
    <xsl:if test="$inline=0">
Packit 0f19cf
      <xsl:text>%
</xsl:text>
Packit 0f19cf
    </xsl:if>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
     It gives something like:
Packit 0f19cf
     [{string in TOC}]{heading string}
Packit 0f19cf
     -->
Packit 0f19cf
<xsl:template match="title|table/caption" mode="format.title">
Packit 0f19cf
  <xsl:param name="allnum" select="'0'"/>
Packit 0f19cf
  <xsl:apply-templates select="." mode="toc">
Packit 0f19cf
    <xsl:with-param name="allnum" select="$allnum"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
  <xsl:text>{</xsl:text> 
Packit 0f19cf
  
Packit 0f19cf
  <xsl:apply-templates select="." mode="content"/>
Packit 0f19cf
  <xsl:text>}
</xsl:text> 
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
     title if the title contains unsupported things like hot links
Packit 0f19cf
     or graphics, or if some titleabbrev is provided and should be used
Packit 0f19cf
     for the TOC.
Packit 0f19cf
 -->
Packit 0f19cf
<xsl:template match="title|table/caption" mode="toc">
Packit 0f19cf
  <xsl:param name="allnum" select="0"/>
Packit 0f19cf
  <xsl:param name="pre" select="'[{'"/>
Packit 0f19cf
  <xsl:param name="post" select="'}]'"/>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:variable name="abbrev">
Packit 0f19cf
    <xsl:if test="$titleabbrev.in.toc='1'">
Packit 0f19cf
      
Packit 0f19cf
        mode="toc.skip"
Packit 0f19cf
        select="(../titleabbrev
Packit 0f19cf
                |../sect1info/titleabbrev
Packit 0f19cf
                |../sect2info/titleabbrev
Packit 0f19cf
                |../sect3info/titleabbrev
Packit 0f19cf
                |../sect4info/titleabbrev
Packit 0f19cf
                |../sect5info/titleabbrev
Packit 0f19cf
                |../sectioninfo/titleabbrev
Packit 0f19cf
                |../chapterinfo/titleabbrev
Packit 0f19cf
                |../partinfo/titleabbrev
Packit 0f19cf
                |../refsect1info/titleabbrev
Packit 0f19cf
                |../refsect2info/titleabbrev
Packit 0f19cf
                |../refsect3info/titleabbrev
Packit 0f19cf
                |../refsectioninfo/titleabbrev
Packit 0f19cf
                |../referenceinfo/titleabbrev
Packit 0f19cf
                )[1]"/>
Packit 0f19cf
    </xsl:if>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
                select="parent::refsect1
Packit 0f19cf
                       |parent::refsect2
Packit 0f19cf
                       |parent::refsect3
Packit 0f19cf
                       |parent::refsection
Packit 0f19cf
                       |ancestor::preface
Packit 0f19cf
                       |parent::colophon
Packit 0f19cf
                       |parent::dedication"/>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
                ($abbrev!='' or
Packit 0f19cf
                (descendant::footnote|
Packit 0f19cf
                 descendant::xref|
Packit 0f19cf
                 descendant::link|
Packit 0f19cf
                 descendant::ulink|
Packit 0f19cf
                 descendant::anchor|
Packit 0f19cf
                 descendant::glossterm[@linkend]|
Packit 0f19cf
                 descendant::inlinegraphic|
Packit 0f19cf
                 descendant::inlinemediaobject) or
Packit 0f19cf
                 (descendant::glossterm and $glossterm.auto.link != 0))">
Packit 0f19cf
    <xsl:value-of select="$pre"/> 
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
    <xsl:when test="$abbrev!=''">
Packit 0f19cf
      
Packit 0f19cf
      <xsl:value-of select="normalize-space($abbrev)"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      
Packit 0f19cf
      <xsl:variable name="s">
Packit 0f19cf
        <xsl:apply-templates mode="toc.skip"/>
Packit 0f19cf
      </xsl:variable>
Packit 0f19cf
      <xsl:value-of select="normalize-space($s)"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
    <xsl:value-of select="$post"/> 
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="title|table/caption" mode="content">
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
</xsl:stylesheet>