Blame xsl/callout.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="co.tagout" select="'</t>'"/>
Packit 0f19cf
<xsl:param name="co.linkends.show" select="'1'"/>
Packit 0f19cf
<xsl:param name="callout.markup.circled" select="'1'"/>
Packit 0f19cf
<xsl:param name="callout.linkends.hot" select="'1'"/>
Packit 0f19cf
<xsl:param name="calloutlist.style" select="'leftmargin=1cm,style=sameline'"/>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
     * \co{text}
Packit 0f19cf
     * \coref{text}{label}
Packit 0f19cf
     * \colabel{label}
Packit 0f19cf
     * \collabel{label}
Packit 0f19cf
-->
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
     find the first sequence of the form "<[try]" that is not contained in
Packit 0f19cf
     the listing, to ensure that no conflict will occur with lstlisting -->
Packit 0f19cf
Packit 0f19cf
<xsl:template name="co-tagin-gen">
Packit 0f19cf
  <xsl:param name="text" select="."/>
Packit 0f19cf
  <xsl:param name="try" select="'0'"/>
Packit 0f19cf
  <xsl:variable name="tag">
Packit 0f19cf
    <xsl:text><</xsl:text>
Packit 0f19cf
    <xsl:if test="$try > 0">
Packit 0f19cf
      <xsl:value-of select="$try"/>
Packit 0f19cf
    </xsl:if>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  <xsl:when test="contains($text, $tag)">
Packit 0f19cf
    
Packit 0f19cf
    <xsl:call-template name="co-tagin-gen">
Packit 0f19cf
      <xsl:with-param name="text" select="$text"/>
Packit 0f19cf
      <xsl:with-param name="try" select="$try+1"/>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:otherwise>
Packit 0f19cf
    
Packit 0f19cf
    <xsl:value-of select="$tag"/>
Packit 0f19cf
  </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="coref.link.create">
Packit 0f19cf
  <xsl:param name="ref"/>
Packit 0f19cf
  <xsl:param name="rnode" select="/"/>
Packit 0f19cf
  <xsl:param name="circled" select="0"/>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
       in the RTF, like <areaset>s -->
Packit 0f19cf
  
Packit 0f19cf
                select="($rnode//*[@id=$ref or @xml:id=$ref]|
Packit 0f19cf
                        //*[@id=$ref or @xml:id=$ref])[1]"/>
Packit 0f19cf
  <xsl:apply-templates select="$coitem" mode="coref.link">
Packit 0f19cf
    <xsl:with-param name="circled" select="$circled"/>
Packit 0f19cf
    <xsl:with-param name="from" select="local-name(.)"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="co|area|callout" mode="coref.link">
Packit 0f19cf
  <xsl:param name="circled" select="0"/>
Packit 0f19cf
  <xsl:param name="from"/>
Packit 0f19cf
  <xsl:variable name="coval">
Packit 0f19cf
    <xsl:apply-templates select="." mode="conumber"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:variable name="markup">
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
    <xsl:when test="$circled != 0">
Packit 0f19cf
      <xsl:text>\conum{</xsl:text>
Packit 0f19cf
      <xsl:value-of select="$coval"/>
Packit 0f19cf
      <xsl:text>}</xsl:text>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:when test="$from='callout' and $callout.markup.circled='1'">
Packit 0f19cf
      <xsl:text>\conum{</xsl:text>
Packit 0f19cf
      <xsl:value-of select="$coval"/>
Packit 0f19cf
      <xsl:text>}</xsl:text>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:value-of select="$coval"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  <xsl:when test="$callout.linkends.hot='0' and $from='callout'">
Packit 0f19cf
    <xsl:value-of select="$markup"/>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:otherwise>
Packit 0f19cf
    <xsl:text>\hyperref[</xsl:text>
Packit 0f19cf
    <xsl:value-of select="(@id|@xml:id)[1]"/>
Packit 0f19cf
    <xsl:text>]{</xsl:text>
Packit 0f19cf
    <xsl:value-of select="$markup"/>
Packit 0f19cf
    <xsl:text>}</xsl:text>
Packit 0f19cf
  </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="areaset" mode="coref.link">
Packit 0f19cf
  <xsl:param name="circled" select="0"/>
Packit 0f19cf
  <xsl:param name="from"/>
Packit 0f19cf
  <xsl:for-each select="area">
Packit 0f19cf
    <xsl:apply-templates select="." mode="coref.link">
Packit 0f19cf
      <xsl:with-param name="circled" select="$circled"/>
Packit 0f19cf
      <xsl:with-param name="from" select="$from"/>
Packit 0f19cf
    </xsl:apply-templates>
Packit 0f19cf
    <xsl:if test="position()!=last()">
Packit 0f19cf
      <xsl:text>, </xsl:text>
Packit 0f19cf
    </xsl:if>
Packit 0f19cf
  </xsl:for-each>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="corefs.split">
Packit 0f19cf
  <xsl:param name="refs"/>
Packit 0f19cf
  <xsl:param name="rnode" select="/"/>
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  <xsl:when test="contains($refs, ' ')">
Packit 0f19cf
    <xsl:call-template name="coref.link.create">
Packit 0f19cf
      <xsl:with-param name="ref" select="substring-before($refs, ' ')"/>
Packit 0f19cf
      <xsl:with-param name="rnode" select="$rnode"/>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
    <xsl:text>, </xsl:text>
Packit 0f19cf
    <xsl:call-template name="corefs.split">
Packit 0f19cf
      <xsl:with-param name="refs" select="substring-after($refs, ' ')"/>
Packit 0f19cf
      <xsl:with-param name="rnode" select="$rnode"/>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:otherwise>
Packit 0f19cf
    <xsl:call-template name="coref.link.create">
Packit 0f19cf
      <xsl:with-param name="ref" select="$refs"/>
Packit 0f19cf
      <xsl:with-param name="rnode" select="$rnode"/>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
  </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="co|area" mode="linkends.create">
Packit 0f19cf
  <xsl:param name="rnode" select="/"/>
Packit 0f19cf
  <xsl:if test="@linkends and $co.linkends.show='1'">
Packit 0f19cf
    <xsl:text>[</xsl:text>
Packit 0f19cf
    <xsl:call-template name="corefs.split">
Packit 0f19cf
      <xsl:with-param name="refs" select="normalize-space(@linkends)"/>
Packit 0f19cf
      <xsl:with-param name="rnode" select="$rnode"/>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
    <xsl:text>]</xsl:text>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="co|area" mode="latex.programlisting">
Packit 0f19cf
  <xsl:param name="rnode" select="/"/>
Packit 0f19cf
  <xsl:param name="co-tagin" select="'<'"/>
Packit 0f19cf
  <xsl:param name="co-tagout" select="$co.tagout"/>
Packit 0f19cf
  <xsl:param name="co-hide" select="0"/>
Packit 0f19cf
  <xsl:variable name="conum">
Packit 0f19cf
    <xsl:apply-templates select="." mode="conumber"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
  <xsl:variable name="id" select="(@id|@xml:id)[1]"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:if test="$co-tagin != ''">
Packit 0f19cf
    <xsl:value-of select="concat($co-tagin, 't>')"/>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  <xsl:when test="$co-hide != 0">
Packit 0f19cf
    <xsl:if test="$id">
Packit 0f19cf
      <xsl:text>\colabel{</xsl:text>
Packit 0f19cf
      <xsl:value-of select="$id"/>
Packit 0f19cf
      <xsl:text>}</xsl:text>
Packit 0f19cf
    </xsl:if>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:when test="$id">
Packit 0f19cf
    <xsl:text>\coref{</xsl:text>
Packit 0f19cf
    <xsl:value-of select="$conum"/>
Packit 0f19cf
    <xsl:text>}{</xsl:text>
Packit 0f19cf
    <xsl:value-of select="$id"/>
Packit 0f19cf
    <xsl:text>}</xsl:text>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:otherwise>
Packit 0f19cf
    <xsl:text>\co{</xsl:text>
Packit 0f19cf
    <xsl:value-of select="$conum"/>
Packit 0f19cf
    <xsl:text>}</xsl:text>
Packit 0f19cf
  </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
  <xsl:apply-templates select="." mode="linkends.create">
Packit 0f19cf
    <xsl:with-param name="rnode" select="$rnode"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
  <xsl:value-of select="$co-tagout"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="coref" mode="latex.programlisting">
Packit 0f19cf
  <xsl:param name="rnode" select="/"/>
Packit 0f19cf
  <xsl:param name="co-tagin" select="'<'"/>
Packit 0f19cf
  <xsl:param name="co-tagout" select="$co.tagout"/>
Packit 0f19cf
  <xsl:variable name="linkend" select="@linkend"/>
Packit 0f19cf
  <xsl:variable name="co" select="$rnode//*[@id=$linkend or @xml:id=$linkend]"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  <xsl:when test="$co">
Packit 0f19cf
    <xsl:variable name="conum">
Packit 0f19cf
      <xsl:apply-templates select="$co" mode="conumber"/>
Packit 0f19cf
    </xsl:variable>
Packit 0f19cf
    
Packit 0f19cf
    <xsl:value-of select="concat($co-tagin, 't>')"/>
Packit 0f19cf
    
Packit 0f19cf
    <xsl:text>\conum{</xsl:text>
Packit 0f19cf
    <xsl:value-of select="$conum"/>
Packit 0f19cf
    <xsl:text>}</xsl:text>
Packit 0f19cf
    
Packit 0f19cf
    <xsl:apply-templates select="$co" mode="linkends.create">
Packit 0f19cf
      <xsl:with-param name="rnode" select="$rnode"/>
Packit 0f19cf
    </xsl:apply-templates>
Packit 0f19cf
    
Packit 0f19cf
    <xsl:value-of select="$co-tagout"/>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:otherwise>
Packit 0f19cf
    <xsl:message>
Packit 0f19cf
      <xsl:text>*** Invalid coref/@linkend='</xsl:text>
Packit 0f19cf
      <xsl:value-of select="@linkend"/>
Packit 0f19cf
      <xsl:text>'</xsl:text>
Packit 0f19cf
    </xsl:message>
Packit 0f19cf
  </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="calloutlist">
Packit 0f19cf
  <xsl:param name="rnode" select="/"/>
Packit 0f19cf
  <xsl:apply-templates select="title"/>
Packit 0f19cf
  <xsl:text>
\begin{description}
</xsl:text>
Packit 0f19cf
  <xsl:if test="$calloutlist.style != ''">
Packit 0f19cf
    <xsl:text>[</xsl:text>
Packit 0f19cf
    <xsl:value-of select="$calloutlist.style"/>
Packit 0f19cf
    <xsl:text>]</xsl:text>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
  <xsl:text>
</xsl:text>
Packit 0f19cf
  <xsl:apply-templates select="callout" mode="item">
Packit 0f19cf
    <xsl:with-param name="rnode" select="$rnode"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
  <xsl:text>\end{description}
</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="callout" mode="item">
Packit 0f19cf
  <xsl:param name="rnode" select="/"/>
Packit 0f19cf
  <xsl:text>\item[{</xsl:text>
Packit 0f19cf
  <xsl:call-template name="corefs.split">
Packit 0f19cf
    <xsl:with-param name="refs" select="normalize-space(@arearefs)"/>
Packit 0f19cf
    <xsl:with-param name="rnode" select="$rnode"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
  <xsl:text>}]</xsl:text>
Packit 0f19cf
  <xsl:if test="(@id|@xml:id) and $co.linkends.show='1'">
Packit 0f19cf
    <xsl:text>\collabel{</xsl:text>
Packit 0f19cf
    <xsl:value-of select="(@id|@xml:id)[1]"/>
Packit 0f19cf
    <xsl:text>}</xsl:text>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="calloutlist/title">
Packit 0f19cf
  <xsl:text>
{\bf </xsl:text>
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
  <xsl:text>}
</xsl:text>
Packit 0f19cf
  <xsl:call-template name="label.id">
Packit 0f19cf
    <xsl:with-param name="object" select=".."/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:text>\nopagebreak
</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="co|callout" mode="conumber">
Packit 0f19cf
  
Packit 0f19cf
              level="any"
Packit 0f19cf
              format="1"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="area" mode="conumber">
Packit 0f19cf
  
Packit 0f19cf
              level="any"
Packit 0f19cf
              format="1"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
</xsl:stylesheet>