Blame xsl/xref.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
<xsl:param name="xref.hypermarkup" select="0"/>
Packit 0f19cf
<xsl:param name="ulink.block.symbol">\textbullet</xsl:param>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="anchor">
Packit 0f19cf
  <xsl:call-template name="label.id">
Packit 0f19cf
    <xsl:with-param name="inline" select="1"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="hyperlink.markup">
Packit 0f19cf
  <xsl:param name="referrer" select="." />
Packit 0f19cf
  <xsl:param name="linkend"/>
Packit 0f19cf
  <xsl:param name="text"/>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
                select="key('id',$linkend)/ancestor-or-self::book"/>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
                select="$referrer/ancestor-or-self::book"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="referrer_i">
Packit 0f19cf
    <xsl:apply-templates select="$referbook" mode="booknumber"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="target_i">
Packit 0f19cf
    <xsl:apply-templates select="$targetbook" mode="booknumber"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  <xsl:when test="$referrer_i != $target_i">
Packit 0f19cf
    <xsl:text>\href{</xsl:text>
Packit 0f19cf
    <xsl:apply-templates select="$targetbook" mode="bookname"/>
Packit 0f19cf
    <xsl:value-of select="concat('\#',$linkend)" />
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:otherwise>
Packit 0f19cf
    <xsl:text>\hyperlink{</xsl:text>
Packit 0f19cf
    <xsl:value-of select="$linkend"/>
Packit 0f19cf
  </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:text>}{</xsl:text>
Packit 0f19cf
  <xsl:value-of select="$text"/>
Packit 0f19cf
  <xsl:text>}</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="*" mode="object.xref.markup2">
Packit 0f19cf
  <xsl:param name="purpose" select="'xref'"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="verbose" select="1"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="markup">
Packit 0f19cf
    <xsl:apply-templates select="." mode="object.xref.markup">
Packit 0f19cf
      <xsl:with-param name="purpose" select="$purpose"/>
Packit 0f19cf
      <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
      <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
      <xsl:with-param name="verbose" select="$verbose"/>
Packit 0f19cf
    </xsl:apply-templates>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    
Packit 0f19cf
    
Packit 0f19cf
                    not(contains($markup, '\hyperlink{') or
Packit 0f19cf
                        contains($markup, '\href{'))">
Packit 0f19cf
      
Packit 0f19cf
      <xsl:variable name="text">
Packit 0f19cf
        <xsl:call-template name="string-replace">
Packit 0f19cf
          <xsl:with-param name="string" select="$markup"/>
Packit 0f19cf
          <xsl:with-param name="from" select="'ref{'"/>
Packit 0f19cf
          <xsl:with-param name="to" select="'ref*{'"/>
Packit 0f19cf
        </xsl:call-template>
Packit 0f19cf
      </xsl:variable>
Packit 0f19cf
      
Packit 0f19cf
      <xsl:call-template name="hyperlink.markup">
Packit 0f19cf
        <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
        <xsl:with-param name="linkend" select="(@id|@xml:id)[1]"/>
Packit 0f19cf
        <xsl:with-param name="text" select="$text"/>
Packit 0f19cf
      </xsl:call-template>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:value-of select="$markup"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="xref|biblioref" mode="xref.text">
Packit 0f19cf
  <xsl:variable name="target" select="key('id',@linkend)[1]"/>
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:when test="@endterm">
Packit 0f19cf
    <xsl:variable name="etarget" select="key('id',@endterm)[1]"/>
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
    <xsl:when test="count($etarget) = 0">
Packit 0f19cf
      <xsl:message>
Packit 0f19cf
        <xsl:text>Endterm points to nonexistent ID: </xsl:text>
Packit 0f19cf
        <xsl:value-of select="@endterm"/>
Packit 0f19cf
      </xsl:message>
Packit 0f19cf
      <xsl:text>[??]</xsl:text>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:apply-templates select="$etarget" mode="xref.text"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:when test="$target/@xreflabel">
Packit 0f19cf
    <xsl:call-template name="scape">
Packit 0f19cf
      <xsl:with-param name="string" select="$target/@xreflabel"/>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:otherwise/>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="xref" name="xref">
Packit 0f19cf
  <xsl:variable name="target" select="key('id',@linkend)[1]"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:call-template name="check.id.unique">
Packit 0f19cf
    <xsl:with-param name="linkend" select="@linkend"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="xrefstyle">
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
      
Packit 0f19cf
                      and $use.role.as.xrefstyle != 0">
Packit 0f19cf
        <xsl:value-of select="@role"/>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
      <xsl:otherwise>
Packit 0f19cf
        <xsl:value-of select="@xrefstyle"/>
Packit 0f19cf
      </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  <xsl:when test="count($target)=0">
Packit 0f19cf
    <xsl:message>
Packit 0f19cf
      <xsl:text>XRef to nonexistent id: </xsl:text>
Packit 0f19cf
      <xsl:value-of select="@linkend"/>
Packit 0f19cf
    </xsl:message>
Packit 0f19cf
    <xsl:text>[?]</xsl:text>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:otherwise>
Packit 0f19cf
    <xsl:variable name="text">
Packit 0f19cf
      <xsl:apply-templates select="." mode="xref.text"/>
Packit 0f19cf
    </xsl:variable>
Packit 0f19cf
Packit 0f19cf
    
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
    <xsl:when test="$text!=''">
Packit 0f19cf
      <xsl:call-template name="hyperlink.markup">
Packit 0f19cf
        <xsl:with-param name="linkend" select="@linkend"/>
Packit 0f19cf
        <xsl:with-param name="text" select="$text"/>
Packit 0f19cf
      </xsl:call-template>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:apply-templates select="$target" mode="xref-to">
Packit 0f19cf
        <xsl:with-param name="referrer" select="."/>
Packit 0f19cf
        <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
      </xsl:apply-templates>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  <xsl:when test="self::biblioref">
Packit 0f19cf
    
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  
Packit 0f19cf
                  and contains($xrefstyle, 'nopage')">
Packit 0f19cf
    
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  
Packit 0f19cf
                and (contains($xrefstyle, 'page')
Packit 0f19cf
                     or contains($xrefstyle, 'Page')))
Packit 0f19cf
                and ( $insert.xref.page.number = 'yes' 
Packit 0f19cf
                   or $insert.xref.page.number = '1')
Packit 0f19cf
                or (local-name($target) = 'para'
Packit 0f19cf
                    and $xrefstyle = ''
Packit 0f19cf
                    and $insert.xref.page.number.para = 'yes')">
Packit 0f19cf
    <xsl:apply-templates select="$target" mode="page.citation">
Packit 0f19cf
      <xsl:with-param name="id" select="@linkend"/>
Packit 0f19cf
    </xsl:apply-templates>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="biblioref">
Packit 0f19cf
  <xsl:call-template name="xref"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="ulink-encode">
Packit 0f19cf
  <xsl:param name="escape" select="0"/>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:call-template name="scape-encode">
Packit 0f19cf
    <xsl:with-param name="string">
Packit 0f19cf
      <xsl:choose>
Packit 0f19cf
      
Packit 0f19cf
                      ancestor::footnote or ancestor::term">
Packit 0f19cf
        <xsl:call-template name="string-replace">
Packit 0f19cf
          <xsl:with-param name="string">
Packit 0f19cf
            <xsl:call-template name="string-replace">
Packit 0f19cf
              <xsl:with-param name="string">
Packit 0f19cf
                <xsl:call-template name="string-replace">
Packit 0f19cf
                  <xsl:with-param name="string" select="@url"/>
Packit 0f19cf
                  <xsl:with-param name="from" select="'%'"/>
Packit 0f19cf
                  <xsl:with-param name="to" select="'\%'"/>
Packit 0f19cf
                </xsl:call-template>
Packit 0f19cf
              </xsl:with-param>
Packit 0f19cf
              <xsl:with-param name="from" select="'#'"/>
Packit 0f19cf
              <xsl:with-param name="to" select="'\#'"/>
Packit 0f19cf
            </xsl:call-template>
Packit 0f19cf
          </xsl:with-param>
Packit 0f19cf
          <xsl:with-param name="from" select="'&'"/>
Packit 0f19cf
          <xsl:with-param name="to" select="'\&'"/>
Packit 0f19cf
        </xsl:call-template>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
      <xsl:otherwise>
Packit 0f19cf
        <xsl:value-of select="@url"/>
Packit 0f19cf
      </xsl:otherwise>
Packit 0f19cf
      </xsl:choose>
Packit 0f19cf
    </xsl:with-param>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="ulink-show">
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    <xsl:when test="starts-with(@xrefstyle, 'url.show')">
Packit 0f19cf
      <xsl:value-of select="1"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:when test="starts-with(@xrefstyle, 'url.hide')">
Packit 0f19cf
      <xsl:value-of select="0"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:value-of select="$ulink.show"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="ulink-foot">
Packit 0f19cf
  
Packit 0f19cf
       $style extract the optional '.infoot' or '.after' part -->
Packit 0f19cf
  <xsl:variable name="style">
Packit 0f19cf
    <xsl:call-template name="string-replace">
Packit 0f19cf
      
Packit 0f19cf
                      select="substring-after(@xrefstyle, 'url')"/>
Packit 0f19cf
      <xsl:with-param name="from" select="'.show'"/>
Packit 0f19cf
      <xsl:with-param name="to" select="''"/>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    <xsl:when test="$style = '.infoot'">
Packit 0f19cf
      <xsl:value-of select="1"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:when test="$style = '.after'">
Packit 0f19cf
      <xsl:value-of select="0"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:value-of select="$ulink.footnotes"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template name="ulink.format">
Packit 0f19cf
  <xsl:variable name="url">
Packit 0f19cf
    <xsl:call-template name="ulink-encode"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  <xsl:when test=".=''">
Packit 0f19cf
    <xsl:text>\url{</xsl:text>
Packit 0f19cf
    <xsl:value-of select="$url"/>
Packit 0f19cf
    <xsl:text>}</xsl:text>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:otherwise>
Packit 0f19cf
    <xsl:text>\href{</xsl:text>
Packit 0f19cf
    <xsl:value-of select="$url"/>
Packit 0f19cf
    <xsl:text>}{</xsl:text>
Packit 0f19cf
    
Packit 0f19cf
    <xsl:apply-templates/>
Packit 0f19cf
    <xsl:text>}</xsl:text>
Packit 0f19cf
Packit 0f19cf
    <xsl:variable name="url.show">
Packit 0f19cf
      <xsl:call-template name="ulink-show"/>
Packit 0f19cf
    </xsl:variable>
Packit 0f19cf
Packit 0f19cf
    <xsl:variable name="url.foot">
Packit 0f19cf
      <xsl:if test="$url.show != 0">
Packit 0f19cf
        <xsl:call-template name="ulink-foot"/>
Packit 0f19cf
      </xsl:if>
Packit 0f19cf
    </xsl:variable>
Packit 0f19cf
Packit 0f19cf
    
Packit 0f19cf
                  and string(.) != @url
Packit 0f19cf
                  and $url.show != 0">
Packit 0f19cf
      
Packit 0f19cf
      <xsl:choose>
Packit 0f19cf
        <xsl:when test="$url.foot != 0 and not(ancestor::footnote)">
Packit 0f19cf
          <xsl:text>\footnote{</xsl:text>
Packit 0f19cf
          <xsl:text>\url{</xsl:text>
Packit 0f19cf
          
Packit 0f19cf
          <xsl:call-template name="ulink-encode">
Packit 0f19cf
            <xsl:with-param name="escape" select="1"/>
Packit 0f19cf
          </xsl:call-template>
Packit 0f19cf
          <xsl:text>}</xsl:text>
Packit 0f19cf
          <xsl:text>}</xsl:text>
Packit 0f19cf
        </xsl:when>
Packit 0f19cf
        <xsl:otherwise>
Packit 0f19cf
          
Packit 0f19cf
          <xsl:text> [</xsl:text>
Packit 0f19cf
          <xsl:text>\url{</xsl:text>
Packit 0f19cf
          <xsl:value-of select="$url"/>
Packit 0f19cf
          <xsl:text>}</xsl:text>
Packit 0f19cf
          <xsl:text>]</xsl:text>
Packit 0f19cf
        </xsl:otherwise>
Packit 0f19cf
      </xsl:choose>
Packit 0f19cf
    </xsl:if>
Packit 0f19cf
Packit 0f19cf
  </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
     a block. The default is the solution sponsored by Freexian -->
Packit 0f19cf
Packit 0f19cf
<xsl:template name="ulink.block.markup">
Packit 0f19cf
  <xsl:text>

</xsl:text>
Packit 0f19cf
   
Packit 0f19cf
  <xsl:value-of select="$ulink.block.symbol"/>
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:when test="ancestor::sidebar">
Packit 0f19cf
    <xsl:text>\enspace</xsl:text>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:otherwise>
Packit 0f19cf
    <xsl:text>\space</xsl:text>
Packit 0f19cf
  </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
  <xsl:call-template name="ulink.format"/>
Packit 0f19cf
  <xsl:text>

</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="ulink">
Packit 0f19cf
  <xsl:variable name="urlstring">
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  <xsl:when test="@type='block'">
Packit 0f19cf
    <xsl:call-template name="ulink.block.markup"/>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:otherwise>
Packit 0f19cf
    <xsl:call-template name="ulink.format"/>
Packit 0f19cf
  </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="link" mode="xref.text">
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  <xsl:when test=".!=''">
Packit 0f19cf
    <xsl:call-template name="normalize-scape">
Packit 0f19cf
      <xsl:with-param name="string">
Packit 0f19cf
        <xsl:copy-of select="."/>
Packit 0f19cf
      </xsl:with-param>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:when test="@endterm">
Packit 0f19cf
    <xsl:variable name="etarget" select="key('id',@endterm)[1]"/>
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
    <xsl:when test="count($etarget) = 0">
Packit 0f19cf
      <xsl:message>
Packit 0f19cf
        <xsl:text>Endterm points to nonexistent ID: </xsl:text>
Packit 0f19cf
        <xsl:value-of select="@endterm"/>
Packit 0f19cf
      </xsl:message>
Packit 0f19cf
      <xsl:text>???</xsl:text>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:apply-templates select="$etarget" mode="xref.text"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:otherwise/>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="link">
Packit 0f19cf
  <xsl:call-template name="hyperlink.markup">
Packit 0f19cf
    <xsl:with-param name="linkend" select="@linkend"/>
Packit 0f19cf
    <xsl:with-param name="text">
Packit 0f19cf
      <xsl:apply-templates select="." mode="xref.text"/>
Packit 0f19cf
    </xsl:with-param>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
     the special latex characters, but things like anchors must be skipped -->
Packit 0f19cf
Packit 0f19cf
<xsl:template match="*" mode="xref.text">
Packit 0f19cf
  <xsl:apply-templates select="text()|*[not(self::anchor)]"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="term" mode="xref.text">
Packit 0f19cf
  <xsl:variable name="text">
Packit 0f19cf
    <xsl:apply-templates mode="xref.text"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
  <xsl:value-of select="normalize-space($text)"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="link" mode="toc.skip">
Packit 0f19cf
  <xsl:apply-templates select="." mode="xref.text"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="xref.nolink">
Packit 0f19cf
  <xsl:param name="string">
Packit 0f19cf
    <xsl:apply-templates select="."/>
Packit 0f19cf
  </xsl:param>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:variable name="xref.text">
Packit 0f19cf
    <xsl:call-template name="string-replace">
Packit 0f19cf
      <xsl:with-param name="string" select="$string"/>
Packit 0f19cf
      <xsl:with-param name="from" select="'\ref{'"/>
Packit 0f19cf
      <xsl:with-param name="to" select="'\ref*{'"/>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    <xsl:when test="contains($xref.text, '\hyperlink{')">
Packit 0f19cf
      <xsl:value-of select="substring-before($xref.text,'\hyperlink{')"/>
Packit 0f19cf
      
Packit 0f19cf
                                            '\hyperlink{'), '}')"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:value-of select="$xref.text"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="xref" mode="toc.skip">
Packit 0f19cf
  <xsl:variable name="xref.text">
Packit 0f19cf
    <xsl:apply-templates select="." mode="xref.text"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    <xsl:when test="$xref.text != ''">
Packit 0f19cf
      <xsl:value-of select="$xref.text"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:call-template name="xref.nolink"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="ulink" mode="toc.skip">
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  <xsl:when test=".=''">
Packit 0f19cf
    <xsl:value-of select="@url"/>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:otherwise>
Packit 0f19cf
    
Packit 0f19cf
    <xsl:apply-templates mode="slash.hyphen"/>
Packit 0f19cf
  </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="ulink" mode="xref.text">
Packit 0f19cf
  <xsl:apply-templates select="." mode="toc.skip"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="*" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="verbose" select="1"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:param name="refelem" select="local-name(.)"/>
Packit 0f19cf
  <xsl:message>
Packit 0f19cf
    <xsl:text>Don't know what gentext to create for xref to: "</xsl:text>
Packit 0f19cf
    <xsl:value-of select="$refelem"/>
Packit 0f19cf
    <xsl:text>" (linkend=</xsl:text>
Packit 0f19cf
    <xsl:value-of select="(@id|@xml:id)[1]"/>
Packit 0f19cf
    <xsl:text>)</xsl:text>
Packit 0f19cf
  </xsl:message>
Packit 0f19cf
  <xsl:text>[?</xsl:text><xsl:value-of select="$refelem"/><xsl:text>]</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="step" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="verbose" select="1"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:call-template name="gentext">
Packit 0f19cf
    <xsl:with-param name="key" select="'Step'"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
  <xsl:text> </xsl:text>
Packit 0f19cf
  <xsl:apply-templates select="." mode="label.markup"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="title" mode="xref">
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="book" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="text">
Packit 0f19cf
    <xsl:text>\emph{</xsl:text>
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
    <xsl:when test="title">
Packit 0f19cf
      <xsl:apply-templates select="title" mode="xref"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:apply-templates select="bookinfo/title" mode="xref"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
    <xsl:text>}</xsl:text>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:call-template name="hyperlink.markup">
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="linkend" select="(@id|@xml:id)[1]"/>
Packit 0f19cf
    <xsl:with-param name="text" select="$text"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
     uses the xrefstyle attribute if specified, or if not it falls back
Packit 0f19cf
     to the container element's link text -->
Packit 0f19cf
<xsl:template match="para|phrase|simpara|anchor|quote" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="verbose"/>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
                                       |ancestor::section
Packit 0f19cf
                                       |ancestor::sect1
Packit 0f19cf
                                       |ancestor::sect2
Packit 0f19cf
                                       |ancestor::sect3
Packit 0f19cf
                                       |ancestor::sect4
Packit 0f19cf
                                       |ancestor::sect5
Packit 0f19cf
                                       |ancestor::topic
Packit 0f19cf
                                       |ancestor::refsection
Packit 0f19cf
                                       |ancestor::refsect1
Packit 0f19cf
                                       |ancestor::refsect2
Packit 0f19cf
                                       |ancestor::refsect3
Packit 0f19cf
                                       |ancestor::chapter
Packit 0f19cf
                                       |ancestor::appendix
Packit 0f19cf
                                       |ancestor::preface
Packit 0f19cf
                                       |ancestor::partintro
Packit 0f19cf
                                       |ancestor::dedication
Packit 0f19cf
                                       |ancestor::acknowledgements
Packit 0f19cf
                                       |ancestor::colophon
Packit 0f19cf
                                       |ancestor::bibliography
Packit 0f19cf
                                       |ancestor::index
Packit 0f19cf
                                       |ancestor::glossary
Packit 0f19cf
                                       |ancestor::glossentry
Packit 0f19cf
                                       |ancestor::listitem
Packit 0f19cf
                                       |ancestor::varlistentry)[last()]"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    <xsl:when test="$xrefstyle != ''">
Packit 0f19cf
      <xsl:apply-templates select="." mode="object.xref.markup2">
Packit 0f19cf
        <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
        <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
        <xsl:with-param name="verbose" select="$verbose"/>
Packit 0f19cf
      </xsl:apply-templates>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:if test="$verbose != 0">
Packit 0f19cf
        <xsl:message>
Packit 0f19cf
          <xsl:text>WARNING: xref to <</xsl:text>
Packit 0f19cf
          <xsl:value-of select="local-name()"/>
Packit 0f19cf
          <xsl:text> id="</xsl:text>
Packit 0f19cf
          <xsl:value-of select="@id|@xml:id"/>
Packit 0f19cf
          <xsl:text>"> has no generated text. Trying its ancestor elements.</xsl:text>
Packit 0f19cf
        </xsl:message>
Packit 0f19cf
      </xsl:if>
Packit 0f19cf
      <xsl:apply-templates select="$context" mode="xref-to">
Packit 0f19cf
        <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
        <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
        <xsl:with-param name="verbose" select="$verbose"/>
Packit 0f19cf
      </xsl:apply-templates>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
              mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="verbose" select="1"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:apply-templates select="." mode="object.xref.markup2">
Packit 0f19cf
    <xsl:with-param name="purpose" select="'xref'"/>
Packit 0f19cf
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="verbose" select="$verbose"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="dedication|preface|part|chapter|appendix" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="verbose" select="1"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:apply-templates select="." mode="object.xref.markup2">
Packit 0f19cf
    <xsl:with-param name="purpose" select="'xref'"/>
Packit 0f19cf
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="verbose" select="$verbose"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
                     |sect1|sect2|sect3|sect4|sect5
Packit 0f19cf
                     |refsect1|refsect2|refsect3|refsection" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="verbose" select="1"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:apply-templates select="." mode="object.xref.markup2">
Packit 0f19cf
    <xsl:with-param name="purpose" select="'xref'"/>
Packit 0f19cf
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="verbose" select="$verbose"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="figure|example|table" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="verbose" select="1"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:apply-templates select="." mode="object.xref.markup2">
Packit 0f19cf
    <xsl:with-param name="purpose" select="'xref'"/>
Packit 0f19cf
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="verbose" select="$verbose"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
     for untitled equations. So, the cross reference label must be
Packit 0f19cf
     different if a title is given or not.
Packit 0f19cf
 -->
Packit 0f19cf
<xsl:template match="equation" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="verbose" select="1"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:apply-templates select="." mode="object.xref.markup2">
Packit 0f19cf
    <xsl:with-param name="purpose" select="'xref'"/>
Packit 0f19cf
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="verbose" select="$verbose"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
     Change the context to make the difference.
Packit 0f19cf
-->
Packit 0f19cf
<xsl:template match="equation[not(child::title)]" mode="object.xref.template">
Packit 0f19cf
  <xsl:param name="purpose"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:call-template name="gentext.template">
Packit 0f19cf
    <xsl:with-param name="context" select="'xref-without-title'"/>
Packit 0f19cf
    <xsl:with-param name="name">
Packit 0f19cf
      <xsl:call-template name="xpath.location"/>
Packit 0f19cf
    </xsl:with-param>
Packit 0f19cf
    <xsl:with-param name="purpose" select="$purpose"/>
Packit 0f19cf
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="refentry" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:call-template name="hyperlink.markup">
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="linkend" select="(@id|@xml:id)[1]"/>
Packit 0f19cf
    <xsl:with-param name="text">
Packit 0f19cf
      
Packit 0f19cf
                select="(refmeta/refentrytitle|refnamediv/refname[1])[1]"
Packit 0f19cf
                mode="xref.text"/>
Packit 0f19cf
      <xsl:apply-templates select="refmeta/manvolnum"/>
Packit 0f19cf
    </xsl:with-param>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="refnamediv" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:call-template name="hyperlink.markup">
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="linkend" select="(@id|@xml:id)[1]"/>
Packit 0f19cf
    <xsl:with-param name="text">
Packit 0f19cf
      <xsl:apply-templates select="refname[1]" mode="xref.text"/>
Packit 0f19cf
    </xsl:with-param>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="varlistentry|term" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:call-template name="hyperlink.markup">
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="linkend" select="(@id|@xml:id)[1]"/>
Packit 0f19cf
    <xsl:with-param name="text">
Packit 0f19cf
      <xsl:choose>
Packit 0f19cf
      <xsl:when test="local-name(.)='term'">
Packit 0f19cf
        <xsl:apply-templates select="." mode="xref.text"/>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
      <xsl:otherwise>
Packit 0f19cf
        <xsl:apply-templates select="term" mode="xref.text"/>
Packit 0f19cf
      </xsl:otherwise>
Packit 0f19cf
      </xsl:choose>
Packit 0f19cf
    </xsl:with-param>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="biblioentry|bibliomixed" mode="xref-to">
Packit 0f19cf
  <xsl:text>\cite{</xsl:text>
Packit 0f19cf
  <xsl:call-template name="bibitem.id"/>
Packit 0f19cf
  <xsl:text>}</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="glossentry" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:call-template name="hyperlink.markup">
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="linkend" select="(@id|@xml:id)[1]"/>
Packit 0f19cf
    <xsl:with-param name="text">
Packit 0f19cf
      <xsl:call-template name="inline.italicseq">
Packit 0f19cf
        <xsl:with-param name="content">
Packit 0f19cf
          <xsl:apply-templates select="glossterm" mode="xref.text"/>
Packit 0f19cf
        </xsl:with-param>
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 match="cmdsynopsis" mode="xref-to">
Packit 0f19cf
  <xsl:variable name="command" select="(.//command)[1]"/>
Packit 0f19cf
  <xsl:apply-templates select="$command" mode="xref"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="funcsynopsis" mode="xref-to">
Packit 0f19cf
  <xsl:variable name="func" select="(.//function)[1]"/>
Packit 0f19cf
  <xsl:apply-templates select="$func" mode="xref"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="bibliography|glossary|index" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="verbose" select="1"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:apply-templates select="." mode="object.xref.markup2">
Packit 0f19cf
    <xsl:with-param name="purpose" select="'xref'"/>
Packit 0f19cf
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="verbose" select="$verbose"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="reference" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="verbose" select="1"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:apply-templates select="." mode="object.xref.markup2">
Packit 0f19cf
    <xsl:with-param name="purpose" select="'xref'"/>
Packit 0f19cf
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="verbose" select="$verbose"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="sidebar" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="verbose" select="1"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:apply-templates select="." mode="object.xref.markup2">
Packit 0f19cf
    <xsl:with-param name="purpose" select="'xref'"/>
Packit 0f19cf
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="verbose" select="$verbose"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="qandaset" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="verbose" select="1"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:apply-templates select="." mode="object.xref.markup2">
Packit 0f19cf
    <xsl:with-param name="purpose" select="'xref'"/>
Packit 0f19cf
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="verbose" select="$verbose"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="question|answer" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="verbose" select="1"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:apply-templates select="." mode="object.xref.markup2">
Packit 0f19cf
    <xsl:with-param name="purpose" select="'xref'"/>
Packit 0f19cf
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="verbose" select="$verbose"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="formalpara" mode="xref-to">
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="verbose" select="1"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:apply-templates select="." mode="object.xref.markup2">
Packit 0f19cf
    <xsl:with-param name="purpose" select="'xref'"/>
Packit 0f19cf
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="verbose" select="$verbose"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
                     preface//sect3| preface//sect4|
Packit 0f19cf
                     preface//sect5| preface//section"
Packit 0f19cf
              mode="is.autonumber">
Packit 0f19cf
  <xsl:value-of select="0"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="co" mode="xref-to">
Packit 0f19cf
  <xsl:call-template name="coref.link.create">
Packit 0f19cf
    <xsl:with-param name="ref" select="(@id|@xml:id)[1]"/>
Packit 0f19cf
    <xsl:with-param name="circled" select="1"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="olink">
Packit 0f19cf
  <xsl:variable name="localinfo" select="@localinfo"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    
Packit 0f19cf
    <xsl:when test="@targetdoc or @targetptr" >
Packit 0f19cf
      <xsl:variable name="targetdoc.att" select="@targetdoc"/>
Packit 0f19cf
      <xsl:variable name="targetptr.att" select="@targetptr"/>
Packit 0f19cf
Packit 0f19cf
      <xsl:variable name="olink.lang">
Packit 0f19cf
        <xsl:call-template name="l10n.language">
Packit 0f19cf
          <xsl:with-param name="xref-context" select="true()"/>
Packit 0f19cf
        </xsl:call-template>
Packit 0f19cf
      </xsl:variable>
Packit 0f19cf
    
Packit 0f19cf
      <xsl:variable name="target.database.filename">
Packit 0f19cf
        <xsl:call-template name="select.target.database">
Packit 0f19cf
          <xsl:with-param name="targetdoc.att" select="$targetdoc.att"/>
Packit 0f19cf
          <xsl:with-param name="targetptr.att" select="$targetptr.att"/>
Packit 0f19cf
          <xsl:with-param name="olink.lang" select="$olink.lang"/>
Packit 0f19cf
        </xsl:call-template>
Packit 0f19cf
      </xsl:variable>
Packit 0f19cf
    
Packit 0f19cf
      
Packit 0f19cf
                    select="document($target.database.filename, /)"/>
Packit 0f19cf
    
Packit 0f19cf
      <xsl:if test="$olink.debug != 0">
Packit 0f19cf
        <xsl:message>
Packit 0f19cf
          <xsl:text>Olink debug: root element of target.database is '</xsl:text>
Packit 0f19cf
          <xsl:value-of select="local-name($target.database/*[1])"/>
Packit 0f19cf
          <xsl:text>'.</xsl:text>
Packit 0f19cf
        </xsl:message>
Packit 0f19cf
      </xsl:if>
Packit 0f19cf
Packit 0f19cf
      <xsl:variable name="olink.key">
Packit 0f19cf
        <xsl:call-template name="select.olink.key">
Packit 0f19cf
          <xsl:with-param name="targetdoc.att" select="$targetdoc.att"/>
Packit 0f19cf
          <xsl:with-param name="targetptr.att" select="$targetptr.att"/>
Packit 0f19cf
          <xsl:with-param name="olink.lang" select="$olink.lang"/>
Packit 0f19cf
          <xsl:with-param name="target.database" select="$target.database"/>
Packit 0f19cf
        </xsl:call-template>
Packit 0f19cf
      </xsl:variable>
Packit 0f19cf
    
Packit 0f19cf
      <xsl:if test="string-length($olink.key) = 0">
Packit 0f19cf
        <xsl:message>
Packit 0f19cf
          <xsl:text>Error: unresolved olink: </xsl:text>
Packit 0f19cf
          <xsl:text>targetdoc/targetptr = '</xsl:text>
Packit 0f19cf
          <xsl:value-of select="$targetdoc.att"/>
Packit 0f19cf
          <xsl:text>/</xsl:text>
Packit 0f19cf
          <xsl:value-of select="$targetptr.att"/>
Packit 0f19cf
          <xsl:text>'.</xsl:text>
Packit 0f19cf
        </xsl:message>
Packit 0f19cf
      </xsl:if>
Packit 0f19cf
Packit 0f19cf
      <xsl:variable name="href">
Packit 0f19cf
        <xsl:call-template name="make.olink.href">
Packit 0f19cf
          <xsl:with-param name="olink.key" select="$olink.key"/>
Packit 0f19cf
          <xsl:with-param name="target.database" select="$target.database"/>
Packit 0f19cf
        </xsl:call-template>
Packit 0f19cf
      </xsl:variable>
Packit 0f19cf
Packit 0f19cf
      
Packit 0f19cf
      <xsl:variable name="linkend">
Packit 0f19cf
        <xsl:call-template name="olink.as.linkend">
Packit 0f19cf
          <xsl:with-param name="olink.key" select="$olink.key"/>
Packit 0f19cf
          <xsl:with-param name="olink.lang" select="$olink.lang"/>
Packit 0f19cf
          <xsl:with-param name="target.database" select="$target.database"/>
Packit 0f19cf
        </xsl:call-template>
Packit 0f19cf
      </xsl:variable>
Packit 0f19cf
Packit 0f19cf
      <xsl:variable name="hottext">
Packit 0f19cf
        <xsl:call-template name="olink.hottext">
Packit 0f19cf
          <xsl:with-param name="olink.key" select="$olink.key"/>
Packit 0f19cf
          <xsl:with-param name="olink.lang" select="$olink.lang"/>
Packit 0f19cf
          <xsl:with-param name="target.database" select="$target.database"/>
Packit 0f19cf
        </xsl:call-template>
Packit 0f19cf
      </xsl:variable>
Packit 0f19cf
Packit 0f19cf
      <xsl:variable name="olink.docname.citation">
Packit 0f19cf
        <xsl:call-template name="olink.document.citation">
Packit 0f19cf
          <xsl:with-param name="olink.key" select="$olink.key"/>
Packit 0f19cf
          <xsl:with-param name="target.database" select="$target.database"/>
Packit 0f19cf
          <xsl:with-param name="olink.lang" select="$olink.lang"/>
Packit 0f19cf
        </xsl:call-template>
Packit 0f19cf
      </xsl:variable>
Packit 0f19cf
Packit 0f19cf
      <xsl:variable name="olink.page.citation">
Packit 0f19cf
        <xsl:call-template name="olink.page.citation">
Packit 0f19cf
          <xsl:with-param name="olink.key" select="$olink.key"/>
Packit 0f19cf
          <xsl:with-param name="target.database" select="$target.database"/>
Packit 0f19cf
          <xsl:with-param name="olink.lang" select="$olink.lang"/>
Packit 0f19cf
          <xsl:with-param name="linkend" select="$linkend"/>
Packit 0f19cf
        </xsl:call-template>
Packit 0f19cf
      </xsl:variable>
Packit 0f19cf
Packit 0f19cf
      <xsl:choose>
Packit 0f19cf
        <xsl:when test="$linkend != ''">
Packit 0f19cf
          
Packit 0f19cf
          <xsl:call-template name="hyperlink.markup">
Packit 0f19cf
            <xsl:with-param name="linkend" select="$linkend"/>
Packit 0f19cf
            <xsl:with-param name="text" select="$hottext"/>
Packit 0f19cf
          </xsl:call-template>
Packit 0f19cf
        </xsl:when>
Packit 0f19cf
        <xsl:when test="$href != ''">
Packit 0f19cf
          
Packit 0f19cf
          <xsl:call-template name="hyperref.format">
Packit 0f19cf
            <xsl:with-param name="href" select="$href"/>
Packit 0f19cf
            <xsl:with-param name="hottext" select="$hottext"/>
Packit 0f19cf
          </xsl:call-template>
Packit 0f19cf
          <xsl:copy-of select="$olink.page.citation"/>
Packit 0f19cf
          <xsl:copy-of select="$olink.docname.citation"/>
Packit 0f19cf
        </xsl:when>
Packit 0f19cf
        <xsl:otherwise>
Packit 0f19cf
          <xsl:copy-of select="$hottext"/>
Packit 0f19cf
          <xsl:copy-of select="$olink.page.citation"/>
Packit 0f19cf
          <xsl:copy-of select="$olink.docname.citation"/>
Packit 0f19cf
        </xsl:otherwise>
Packit 0f19cf
      </xsl:choose>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
Packit 0f19cf
    
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:apply-templates/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template name="olink.as.linkend">
Packit 0f19cf
  <xsl:param name="olink.key" select="''"/>
Packit 0f19cf
  <xsl:param name="olink.lang" select="''"/>
Packit 0f19cf
  <xsl:param name="target.database" select="NotANode"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="targetdoc">
Packit 0f19cf
    <xsl:value-of select="substring-before($olink.key, '/')"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="targetptr">
Packit 0f19cf
    
Packit 0f19cf
       select="substring-before(substring-after($olink.key, '/'), '/')"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="target.lang">
Packit 0f19cf
    <xsl:variable name="candidate">
Packit 0f19cf
      <xsl:for-each select="$target.database" >
Packit 0f19cf
        
Packit 0f19cf
                  select="key('targetptr-key', $olink.key)/@lang" />
Packit 0f19cf
      </xsl:for-each>
Packit 0f19cf
    </xsl:variable>
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
      <xsl:when test="$candidate != ''">
Packit 0f19cf
        <xsl:value-of select="$candidate"/>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
      <xsl:otherwise>
Packit 0f19cf
        <xsl:value-of select="$olink.lang"/>
Packit 0f19cf
      </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
                $olink.lang = $target.lang">
Packit 0f19cf
  
Packit 0f19cf
  <xsl:message>targetdoc=<xsl:value-of select="$targetdoc"/></xsl:message>
Packit 0f19cf
  <xsl:message>docid=<xsl:value-of select="$current.docid"/></xsl:message>
Packit 0f19cf
  <xsl:message>lang=<xsl:value-of select="$target.lang"/></xsl:message>
Packit 0f19cf
  <xsl:message>lang=<xsl:value-of select="$olink.lang"/></xsl:message>
Packit 0f19cf
  <xsl:message>ptr=<xsl:value-of select="$targetptr"/></xsl:message>
Packit 0f19cf
  -->
Packit 0f19cf
    <xsl:variable name="targets" select="key('id',$targetptr)"/>
Packit 0f19cf
    <xsl:variable name="target" select="$targets[1]"/>
Packit 0f19cf
    <xsl:if test="$target">
Packit 0f19cf
      <xsl:value-of select="$targetptr"/>
Packit 0f19cf
    </xsl:if>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="hyperref.format">
Packit 0f19cf
  <xsl:param name="href"/>
Packit 0f19cf
  <xsl:param name="hottext"/>
Packit 0f19cf
  <xsl:variable name="url" select="substring-before($href, '#')"/>
Packit 0f19cf
  <xsl:variable name="name" select="substring-after($href, '#')"/>
Packit 0f19cf
  <xsl:text>\hyperref{</xsl:text>
Packit 0f19cf
  <xsl:value-of select="$url"/>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:text>}{}{</xsl:text>
Packit 0f19cf
  <xsl:value-of select="$name"/>
Packit 0f19cf
  <xsl:text>}{</xsl:text>
Packit 0f19cf
  <xsl:value-of select="$hottext"/>
Packit 0f19cf
  <xsl:text>}</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="command" mode="xref">
Packit 0f19cf
  <xsl:call-template name="inline.boldseq"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="function" mode="xref">
Packit 0f19cf
  <xsl:call-template name="inline.monoseq"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="*" mode="page.citation">
Packit 0f19cf
  <xsl:param name="id" select="'???'"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:call-template name="substitute-markup">
Packit 0f19cf
    <xsl:with-param name="template">
Packit 0f19cf
      <xsl:call-template name="gentext.template">
Packit 0f19cf
        <xsl:with-param name="name" select="'page.citation'"/>
Packit 0f19cf
        <xsl:with-param name="context" select="'xref'"/>
Packit 0f19cf
      </xsl:call-template>
Packit 0f19cf
    </xsl:with-param>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="link" mode="no.anchor.mode" priority="1">
Packit 0f19cf
  <xsl:apply-templates select="." mode="xref.text"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="text()" mode="no.anchor.mode">
Packit 0f19cf
  <xsl:apply-templates select="."/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
                     sect1|sect2|sect3|sect4|sect5|section" mode="label.markup"
Packit 0f19cf
                     priority="1">
Packit 0f19cf
  <xsl:text>\ref{</xsl:text>
Packit 0f19cf
  <xsl:value-of select="(@id|@xml:id)[1]"/>
Packit 0f19cf
  <xsl:text>}</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
              priority="1">
Packit 0f19cf
  <xsl:text>\ref{</xsl:text>
Packit 0f19cf
  <xsl:value-of select="(@id|@xml:id)[1]"/>
Packit 0f19cf
  <xsl:text>}</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="step" mode="label.markup" priority="1">
Packit 0f19cf
  <xsl:text>\ref{</xsl:text>
Packit 0f19cf
  <xsl:value-of select="(@id|@xml:id)[1]"/>
Packit 0f19cf
  <xsl:text>}</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="*" mode="pagenumber.markup">
Packit 0f19cf
  <xsl:text>\pageref{</xsl:text>
Packit 0f19cf
  <xsl:value-of select="(@id|@xml:id)[1]"/>
Packit 0f19cf
  <xsl:text>}</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="*" mode="insert.title.markup">
Packit 0f19cf
  <xsl:param name="purpose"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="title"/>
Packit 0f19cf
  <xsl:param name="referrer"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:call-template name="hyperlink.markup">
Packit 0f19cf
    <xsl:with-param name="referrer" select="$referrer"/>
Packit 0f19cf
    <xsl:with-param name="linkend" select="(@id|@xml:id)[1]"/>
Packit 0f19cf
    <xsl:with-param name="text" select="$title"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="*" mode="insert.subtitle.markup">
Packit 0f19cf
  <xsl:param name="purpose"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="subtitle"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:copy-of select="$subtitle"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="*" mode="insert.label.markup">
Packit 0f19cf
  <xsl:param name="purpose"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="label"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:copy-of select="$label"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="*" mode="insert.pagenumber.markup">
Packit 0f19cf
  <xsl:param name="purpose"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="pagenumber"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:copy-of select="$pagenumber"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="*" mode="insert.direction.markup">
Packit 0f19cf
  <xsl:param name="purpose"/>
Packit 0f19cf
  <xsl:param name="xrefstyle"/>
Packit 0f19cf
  <xsl:param name="direction"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:copy-of select="$direction"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="*" mode="insert.olink.docname.markup">
Packit 0f19cf
  <xsl:param name="docname" select="''"/>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:text>\emph{</xsl:text>
Packit 0f19cf
  <xsl:copy-of select="$docname"/>
Packit 0f19cf
  <xsl:text>}</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
</xsl:stylesheet>