summaryrefslogtreecommitdiff
path: root/docs/xslt/db2latex-xsl/xsl/index.mod.xsl
diff options
context:
space:
mode:
Diffstat (limited to 'docs/xslt/db2latex-xsl/xsl/index.mod.xsl')
-rw-r--r--docs/xslt/db2latex-xsl/xsl/index.mod.xsl470
1 files changed, 470 insertions, 0 deletions
diff --git a/docs/xslt/db2latex-xsl/xsl/index.mod.xsl b/docs/xslt/db2latex-xsl/xsl/index.mod.xsl
new file mode 100644
index 0000000000..b58e1d1910
--- /dev/null
+++ b/docs/xslt/db2latex-xsl/xsl/index.mod.xsl
@@ -0,0 +1,470 @@
+<?xml version='1.0'?>
+<!DOCTYPE xsl:stylesheet [ <!ENTITY % xsldoc.ent SYSTEM "./xsldoc.ent"> %xsldoc.ent; ]>
+<!--#############################################################################
+| $Id: index.mod.xsl,v 1.17 2004/01/27 05:59:51 j-devenish Exp $
+|- #############################################################################
+| $Author: j-devenish $
++ ############################################################################## -->
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
+ exclude-result-prefixes="doc" version='1.0'>
+
+ <doc:reference id="index" xmlns="">
+ <referenceinfo>
+ <releaseinfo role="meta">
+ $Id: index.mod.xsl,v 1.17 2004/01/27 05:59:51 j-devenish Exp $
+ </releaseinfo>
+ <authorgroup>
+ &ramon;
+ &james;
+ </authorgroup>
+ <copyright>
+ <year>2000</year><year>2001</year><year>2002</year><year>2003</year>
+ <holder>Ramon Casellas</holder>
+ </copyright>
+ <revhistory>
+ <doc:revision rcasver="1.11">&rev_2003_05;</doc:revision>
+ </revhistory>
+ </referenceinfo>
+ <title>Indices <filename>index.mod.xsl</filename></title>
+ <partintro>
+ <para>The file <filename>index.mod.xsl</filename> contains the
+ XSL template for <doc:db>index</doc:db>.</para>
+ <!-- TODO: -->
+ <para>Describe indexterm-range key.</para>
+ <para>
+
+ An <literal>indexterm-range</literal> XSLT key is defined for
+ all <quote>startofrange</quote> <doc:db>indexterm</doc:db>
+ elements, matching their <sgmltag
+ class="attribute">id</sgmltag> attribute.
+
+ </para>
+ </partintro>
+ </doc:reference>
+
+ <!-- Our key for ranges -->
+ <xsl:key name="indexterm-range" match="indexterm[@class='startofrange']" use="@id"/>
+
+ <doc:template basename="index" xmlns="">
+ <refpurpose>Process <doc:db>index</doc:db> and <doc:db>setindex</doc:db> elements</refpurpose>
+ <doc:description>
+ <para>
+ Produce a chapter-level index in &LaTeX;.
+ </para>
+ </doc:description>
+ <doc:variables>
+ &no_var;
+ </doc:variables>
+ <doc:notes>
+
+ <para>
+
+ You will need to run your typesetter at least twice, and
+ possibly three times, to have the index generated normally (you
+ will also need to run the <command>makeidx</command> command).
+
+ </para>
+
+ &essential_preamble;
+ </doc:notes>
+ <doc:samples>
+ <simplelist type='inline'>
+ &test_book;
+ &test_index;
+ &test_draft;
+ </simplelist>
+ </doc:samples>
+ </doc:template>
+ <xsl:template match="index|setindex">
+ <xsl:variable name="preamble" select="node()[not(self::indexinfo or self::setindexinfo or self::title or self::subtitle or self::titleabbrev or self::indexdiv or self::indexentry)]"/>
+ <xsl:text>\setlength\saveparskip\parskip&#10;</xsl:text>
+ <xsl:text>\setlength\saveparindent\parindent&#10;</xsl:text>
+ <xsl:text>\begin{dbtolatexindex}{</xsl:text>
+ <xsl:call-template name="generate.label.id"/>
+ <xsl:text>}&#10;</xsl:text>
+ <xsl:text>\setlength\tempparskip\parskip \setlength\tempparindent\parindent&#10;</xsl:text>
+ <xsl:text>\parskip\saveparskip \parindent\saveparindent&#10;</xsl:text>
+ <xsl:text>\noindent </xsl:text><!-- &#10; -->
+ <xsl:apply-templates select="$preamble"/>
+ <xsl:call-template name="map.begin"/>
+ <xsl:text>\parskip\tempparskip&#10;</xsl:text>
+ <xsl:text>\parindent\tempparindent&#10;</xsl:text>
+ <xsl:text>\makeatletter\@input@{\jobname.ind}\makeatother&#10;</xsl:text>
+ <xsl:call-template name="map.end"/>
+ <xsl:text>\end{dbtolatexindex}&#10;</xsl:text>
+ </xsl:template>
+
+ <doc:template xmlns="">
+ <refpurpose> Essential preamble for <filename>index.mod.xsl</filename> support </refpurpose>
+ <doc:description>
+ <para>
+
+ This preamble aids the following:
+ <itemizedlist>
+ <listitem>
+ <simpara>
+ Allow user to override the &LaTeX; default index name
+ with a &DocBook; localisation.
+ </simpara>
+ <simpara>
+ Integrate <doc:db>index</doc:db>/@<sgmltag
+ class="attribute">id</sgmltag> cross-references
+ with &LaTeX; and tables of contents (makes indices
+ behave a bit like chapters).
+ </simpara>
+ <simpara>
+ Allow <quote>preamble</quote> templates or
+ mappings to be applied for indices.
+ </simpara>
+ </listitem>
+ </itemizedlist>
+
+ </para>
+ </doc:description>
+ <doc:seealso>
+ <itemizedlist>
+ <listitem><simpara>&preamble;</simpara></listitem>
+ </itemizedlist>
+ </doc:seealso>
+ </doc:template>
+ <xsl:template name="latex.preamble.essential.index">
+ <xsl:text>
+ <![CDATA[
+% index labeling helper
+\newif\ifdocbooktolatexprintindex\docbooktolatexprintindextrue
+\let\dbtolatex@@theindex\theindex
+\let\dbtolatex@@endtheindex\endtheindex
+\def\theindex{\relax}
+\def\endtheindex{\relax}
+\newenvironment{dbtolatexindex}[1]
+ {
+\if@openright\cleardoublepage\else\clearpage\fi
+\let\dbtolatex@@indexname\indexname
+\def\dbtolatex@indexlabel{%
+ \ifnum \c@secnumdepth >\m@ne \refstepcounter{chapter}\fi%
+ \label{#1}\hypertarget{#1}{\dbtolatex@@indexname}%
+ \global\docbooktolatexprintindexfalse}
+\def\indexname{\ifdocbooktolatexprintindex\dbtolatex@indexlabel\else\dbtolatex@@indexname\fi}
+\dbtolatex@@theindex
+ }
+ {
+\dbtolatex@@endtheindex\let\indexname\dbtolatex@@indexname
+ }
+
+\newlength\saveparskip \newlength\saveparindent
+\newlength\tempparskip \newlength\tempparindent
+]]>
+ </xsl:text>
+ </xsl:template>
+
+<!--
+ <xsl:template match="index/title">
+ <xsl:call-template name="label.id"> <xsl:with-param name="object" select=".."/> </xsl:call-template>
+ </xsl:template>
+
+<xsl:template match="indexdiv">
+ <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="indexdiv/title">
+ <xsl:call-template name="label.id"> <xsl:with-param name="object" select=".."/> </xsl:call-template>
+</xsl:template>
+
+ <xsl:template match="primary|secondary|tertiary|see|seealso"/>
+
+-->
+
+ <doc:template xmlns="">
+ <refpurpose>Process <doc:db>indexterm</doc:db> elements</refpurpose>
+ <doc:description>
+ <para>
+ Identify an instance of an indexed term.
+ </para>
+ </doc:description>
+ <doc:variables>
+ <itemizedlist>
+ <listitem><simpara><xref linkend="param.latex.generate.indexterm"/></simpara></listitem>
+ </itemizedlist>
+ </doc:variables>
+ <doc:params>
+ <variablelist>
+ <varlistentry>
+ <term>style</term>
+ <listitem><simpara>
+ &LaTeX; code used to format the displayed entry.
+ By default, this is drawn from any <quote>latex-index-style</quote>
+ processing instructions (and is therefore empty most of the time).
+ </simpara></listitem>
+ </varlistentry>
+ </variablelist>
+ </doc:params>
+ <doc:notes>
+ <para>
+ A &LaTeX; <function condition="latex">index</function> command
+ is issued. When an <doc:db>index</doc:db> element is included
+ in your document and indexing is enabled, this indexterm will
+ be indexed.
+ </para>
+ <para>
+ When <link linkend="param.latex.is.draft">draft mode</link> is
+ enabled, the physical location of <doc:db
+ basename="indexterm">indexterms</doc:db> will be highlighted
+ within the body of the text as well as appearing in the index
+ proper.
+ </para>
+ <para>
+ &DB2LaTeX; includes some logic to handle the
+ <quote>startofrange</quote> and <quote>endofrange</quote>
+ classes.
+ </para>
+ <para>
+ It is possible to format an entry (e.g.
+ make it bold or italic) by inserting a processing instruction
+ named <quote>latex-index-style</quote> in the appropriate
+ subterm.
+ </para>
+ </doc:notes>
+ <doc:samples>
+ <simplelist type='inline'>
+ &test_book;
+ &test_ddh;
+ &test_draft1;
+ &test_draft2;
+ &test_index;
+ </simplelist>
+ </doc:samples>
+ <doc:seealso>
+ <itemizedlist>
+ <listitem><simpara><xref linkend="param.latex.is.draft"/></simpara></listitem>
+ </itemizedlist>
+ </doc:seealso>
+ </doc:template>
+ <!-- INDEX TERM CONTENT MODEL
+ IndexTerm ::=
+ (Primary,
+ ((Secondary,
+ ((Tertiary,
+ (See|SeeAlso+)?)|
+ See|SeeAlso+)?)|
+ See|SeeAlso+)?)
+ -->
+ <xsl:template match="indexterm">
+ <xsl:if test="$latex.generate.indexterm='1'">
+ <xsl:variable name="idxterm">
+ <xsl:apply-templates mode="indexterm"/>
+ </xsl:variable>
+
+ <xsl:if test="@class and @zone">
+ <xsl:message terminate="yes">Error: Only one attribute (@class or @zone) is in indexterm possible!</xsl:message>
+ </xsl:if>
+
+ <xsl:choose>
+ <xsl:when test="@class='startofrange'">
+ <xsl:text>\index{</xsl:text>
+ <xsl:value-of select="$idxterm"/>
+ <xsl:text>|(}</xsl:text>
+ </xsl:when>
+ <xsl:when test="@class='endofrange'">
+ <xsl:choose>
+ <xsl:when test="count(key('indexterm-range',@startref)) = 0">
+ <xsl:message terminate="yes"><xsl:text>Error: No indexterm with </xsl:text>
+ <xsl:text>id='</xsl:text><xsl:value-of select="@startref"/>
+ <xsl:text>' found!</xsl:text>
+ <xsl:text> Check your attributs id/startref in your indexterms!</xsl:text>
+ </xsl:message>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="thekey" select="key('indexterm-range',@startref)"/>
+ <xsl:for-each select="$thekey[1]">
+ <xsl:text>\index{</xsl:text>
+ <xsl:apply-templates mode="indexterm"/>
+ <xsl:text>|)}</xsl:text>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>\index{</xsl:text>
+ <xsl:value-of select="$idxterm"/>
+ <xsl:text>}</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="*" mode="indexterm">
+ <xsl:message>WARNING: Element '<xsl:value-of select="local-name()"/>' in indexterm not supported and skipped!</xsl:message>
+ </xsl:template>
+
+ <!--
+ <xsl:template match="acronym|foreignphrase" mode="indexterm">
+ <xsl:apply-templates mode="indexterm"/>
+ </xsl:template>
+ -->
+
+ <doc:template xmlns="">
+ <refpurpose>Process the contents of <doc:db basename="indexterm">indexterms</doc:db></refpurpose>
+ <doc:description>
+ <para>
+ Register a primary index term.
+ </para>
+ </doc:description>
+ <doc:variables>
+ &no_var;
+ </doc:variables>
+ <doc:notes>
+ <para>
+ Calls <xref linkend="template.index.subterm"/>.
+ </para>
+ </doc:notes>
+ </doc:template>
+ <xsl:template match="primary" mode="indexterm">
+ <xsl:call-template name="index.subterm"/>
+ </xsl:template>
+
+ <doc:template xmlns="">
+ <refpurpose>Process the contents of <doc:db basename="indexterm">indexterms</doc:db></refpurpose>
+ <doc:description>
+ <para>
+ Register a secondary or tertiary index term.
+ </para>
+ </doc:description>
+ <doc:variables>
+ &no_var;
+ </doc:variables>
+ <doc:notes>
+ <para>
+ Calls <xref linkend="template.index.subterm"/>.
+ </para>
+ </doc:notes>
+ </doc:template>
+ <xsl:template match="secondary|tertiary" mode="indexterm">
+ <xsl:text>!</xsl:text>
+ <xsl:call-template name="index.subterm"/>
+ </xsl:template>
+
+ <doc:template xmlns="">
+ <refpurpose>Process the contents of <doc:db basename="indexterm">indexterms</doc:db></refpurpose>
+ <doc:description>
+ <para>
+ Register a primary, secondary or tertiary index term.
+ </para>
+ </doc:description>
+ <doc:variables>
+ &no_var;
+ </doc:variables>
+ <doc:notes>
+ <para>
+
+ If no <sgmltag class="attribute">sortas</sgmltag> attribute is
+ present, the contents of <doc:db>primary</doc:db>,
+ <doc:db>secondary</doc:db> and <doc:db>tertiary</doc:db>
+ elements are converted to text-only and no templates are
+ applied. If the <sgmltag class="attribute">sortas</sgmltag>
+ attribute is present and non-empty, its value is used for indexing
+ and sorting (but not for display)<!-- and templates
+ <emphasis>are</emphasis> applied for display purposes-->.
+
+ </para>
+ <para>
+
+ If a <quote>latex-index-style</quote> processing instruction is
+ present, the displayed indexterm will be formatted by treating
+ the content of the PI as a &LaTeX; command.
+
+ </para>
+ </doc:notes>
+ </doc:template>
+ <xsl:template name="index.subterm">
+ <xsl:variable name="style" select="processing-instruction('latex-index-style')"/>
+ <xsl:choose>
+ <xsl:when test="@sortas!=''">
+ <xsl:variable name="string">
+ <xsl:call-template name="scape-indexterm">
+ <xsl:with-param name="string" select="@sortas"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="content">
+ <xsl:call-template name="scape-indexterm">
+ <xsl:with-param name="string" select="."/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($string)"/>
+ <xsl:text>@{</xsl:text>
+ <xsl:value-of select="$style"/>
+ <xsl:text>{</xsl:text>
+ <xsl:value-of select="normalize-space($content)"/>
+ <xsl:text>}}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="string">
+ <xsl:call-template name="scape-indexterm">
+ <xsl:with-param name="string" select="."/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($string)"/>
+ <xsl:if test="$style!=''">
+ <xsl:text>@{</xsl:text>
+ <xsl:value-of select="$style"/>
+ <xsl:text>{</xsl:text>
+ <xsl:value-of select="normalize-space($string)"/>
+ <xsl:text>}}</xsl:text>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!--
+ <xsl:apply-templates mode="indexterm"/>
+ -->
+ </xsl:template>
+
+ <doc:template xmlns="">
+ <refpurpose>Process the contents of <doc:db>see</doc:db> and <doc:db>seealso</doc:db> elements</refpurpose>
+ <doc:description>
+ <para>
+ Annotate an index entry with a <quote>See</quote> or <quote>See also</quote> cross-reference.
+ </para>
+ </doc:description>
+ <doc:variables>
+ &no_var;
+ </doc:variables>
+ <doc:notes>
+ <para>
+ Templates are applied.
+ <quote>See</quote> or <quote>see also</quote> text
+ is generated by <literal>gentext.element.name</literal>
+ and formatted in italics.
+ </para>
+ </doc:notes>
+ </doc:template>
+ <xsl:template match="see|seealso" mode="indexterm">
+ <xsl:text>|textit{</xsl:text>
+ <xsl:call-template name="gentext.element.name"/>
+ <xsl:text>} {</xsl:text>
+ <xsl:apply-templates/>
+ <!--
+ <xsl:apply-templates mode="indexterm"/>
+ -->
+ <xsl:text>} </xsl:text>
+ </xsl:template>
+
+ <doc:template xmlns="">
+ <refpurpose> Skip <doc:db>indexentry</doc:db>-related elements </refpurpose>
+ <doc:description>
+ <para>
+ Ignores the elements.
+ </para>
+ </doc:description>
+ <doc:variables>
+ &no_var;
+ </doc:variables>
+ <doc:notes>
+ <para>
+ &DB2LaTeX; only supports indices that are generated by &LaTeX; itself.
+ </para>
+ </doc:notes>
+ </doc:template>
+ <xsl:template match="indexentry|primaryie|secondaryie|tertiaryie|seeie|seealsoie"/>
+
+</xsl:stylesheet>