Rocco Rutte:
[apps/madmutt.git] / doc / xslt / common / targets.xsl
1 <?xml version='1.0'?>
2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3                 xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
4                 exclude-result-prefixes="doc"
5                 version='1.0'>
6
7 <!-- ********************************************************************
8      $Id$
9      ********************************************************************
10
11      This file is part of the XSL DocBook Stylesheet distribution.
12      See ../README or http://nwalsh.com/docbook/xsl/ for copyright
13      and other information.
14
15      ******************************************************************** -->
16
17 <!-- ==================================================================== -->
18
19 <!-- cross reference target collection  -->
20
21 <doc:mode mode="collect.targets" xmlns="">
22 <refpurpose>Collects information for potential cross reference targets</refpurpose>
23 <refdescription>
24 <para>Processing the root element in the
25 <literal role="mode">collect.targets</literal> mode produces 
26 a set of target database elements that can be used by
27 the olink mechanism to resolve external cross references.
28 The collection process is controlled by the <literal>
29 collect.xref.targets</literal> parameter, which can be
30 <literal>yes</literal> to collect targets and process
31 the document for output, <literal>only</literal> to
32 only collect the targets, and <literal>no</literal>
33 (default) to not collect the targets and only process the document.
34 </para>
35 <para>
36 A <literal>targets.filename</literal> parameter must be
37 specified to receive the output if 
38 <literal>collect.xref.targets</literal> is
39 set to <literal>yes</literal> so as to
40 redirect the target data to a file separate from the
41 document output.
42 </para>
43 </refdescription>
44 </doc:mode>
45
46 <!-- ============================================================ -->
47
48 <xsl:template match="*" mode="collect.targets">
49   <xsl:choose>
50     <xsl:when test="$collect.xref.targets = 'yes' and $targets.filename = ''">
51       <xsl:message>
52         Must specify a $targets.filename parameter when
53         $collect.xref.targets is set to 'yes'.
54         The xref targets were not collected.
55       </xsl:message>
56     </xsl:when> 
57     <xsl:otherwise>
58       <xsl:choose>
59         <xsl:when test="$targets.filename">
60           <xsl:call-template name="write.chunk">
61             <xsl:with-param name="filename" select="$targets.filename"/>
62             <xsl:with-param name="method" select="'xml'"/>
63             <xsl:with-param name="encoding" select="'utf-8'"/>
64             <xsl:with-param name="omit-xml-declaration" select="'yes'"/>
65             <xsl:with-param name="doctype-public" select="''"/>
66             <xsl:with-param name="doctype-system" select="''"/>
67             <xsl:with-param name="indent" select="'yes'"/>
68             <xsl:with-param name="quiet" select="0"/>
69             <xsl:with-param name="content">
70               <xsl:apply-templates select="." mode="olink.mode"/>
71             </xsl:with-param>
72           </xsl:call-template>
73         </xsl:when>
74         <xsl:otherwise>
75           <!-- Else write to standard output -->
76           <xsl:apply-templates select="." mode="olink.mode"/>
77         </xsl:otherwise>
78       </xsl:choose>
79     </xsl:otherwise>
80   </xsl:choose>
81 </xsl:template>
82
83 <xsl:template name="olink.href.target">
84   <xsl:param name="nd" select="."/>
85
86   <xsl:value-of select="$olink.base.uri"/>
87   <xsl:call-template name="href.target">
88     <xsl:with-param name="object" select="$nd"/>
89   </xsl:call-template>
90 </xsl:template>
91
92 <!-- Templates for extracting cross reference information
93      from a document for use in an xref database.
94 -->
95
96 <xsl:template name="attrs">
97   <xsl:param name="nd" select="."/>
98
99   <xsl:attribute name="element">
100     <xsl:value-of select="local-name(.)"/>
101   </xsl:attribute>
102
103   <xsl:attribute name="href">
104     <xsl:call-template name="olink.href.target">
105       <xsl:with-param name="nd" select="$nd"/>
106     </xsl:call-template>
107   </xsl:attribute>
108
109   <xsl:variable name="num">
110     <xsl:apply-templates select="$nd" mode="label.markup">
111       <xsl:with-param name="verbose" select="0"/>
112     </xsl:apply-templates>
113   </xsl:variable>
114
115   <xsl:if test="$num">
116     <xsl:attribute name="number">
117       <xsl:value-of select="$num"/>
118     </xsl:attribute>
119   </xsl:if>
120
121   <xsl:if test="$nd/@id">
122     <xsl:attribute name="targetptr">
123       <xsl:value-of select="$nd/@id"/>
124     </xsl:attribute>
125   </xsl:if>
126
127   <xsl:if test="$nd/@lang">
128     <xsl:attribute name="lang">
129       <xsl:value-of select="$nd/@lang"/>
130     </xsl:attribute>
131   </xsl:if>
132
133 </xsl:template>
134
135 <xsl:template name="div">
136   <xsl:param name="nd" select="."/>
137
138   <div>
139     <xsl:call-template name="attrs">
140       <xsl:with-param name="nd" select="$nd"/>
141     </xsl:call-template>
142     <ttl>
143       <xsl:apply-templates select="$nd" mode="title.markup">
144         <xsl:with-param name="verbose" select="0"/>
145       </xsl:apply-templates>
146     </ttl>
147     <xreftext>
148       <xsl:choose>
149         <xsl:when test="$nd/@xreflabel">
150           <xsl:call-template name="xref.xreflabel">
151             <xsl:with-param name="target" select="$nd"/>
152           </xsl:call-template>
153         </xsl:when>
154         <xsl:otherwise>
155           <xsl:apply-templates select="$nd" mode="xref-to">
156             <xsl:with-param name="verbose" select="0"/>
157           </xsl:apply-templates>
158         </xsl:otherwise>
159       </xsl:choose>
160     </xreftext>
161     <xsl:apply-templates mode="olink.mode"/>
162   </div>
163 </xsl:template>
164
165 <xsl:template name="obj">
166   <xsl:param name="nd" select="."/>
167
168   <obj>
169     <xsl:call-template name="attrs">
170       <xsl:with-param name="nd" select="$nd"/>
171     </xsl:call-template>
172     <ttl>
173       <xsl:apply-templates select="$nd" mode="title.markup">
174         <xsl:with-param name="verbose" select="0"/>
175       </xsl:apply-templates>
176     </ttl>
177     <xreftext>
178       <xsl:choose>
179         <xsl:when test="$nd/@xreflabel">
180           <xsl:call-template name="xref.xreflabel">
181             <xsl:with-param name="target" select="$nd"/>
182           </xsl:call-template>
183         </xsl:when>
184         <xsl:otherwise>
185           <xsl:apply-templates select="$nd" mode="xref-to">
186             <xsl:with-param name="verbose" select="0"/>
187           </xsl:apply-templates>
188         </xsl:otherwise>
189       </xsl:choose>
190     </xreftext>
191   </obj>
192 </xsl:template>
193
194 <xsl:template match="text()|processing-instruction()|comment()"
195               mode="olink.mode">
196   <!-- nop -->
197 </xsl:template>
198
199 <!--
200 <xsl:template match="*" mode="olink.mode">
201 </xsl:template>
202 -->
203
204 <xsl:template match="set" mode="olink.mode">
205   <xsl:call-template name="div"/>
206 </xsl:template>
207
208 <xsl:template match="book" mode="olink.mode">
209   <xsl:call-template name="div"/>
210 </xsl:template>
211
212 <xsl:template match="preface|chapter|appendix" mode="olink.mode">
213   <xsl:call-template name="div"/>
214 </xsl:template>
215
216 <xsl:template match="part|reference" mode="olink.mode">
217   <xsl:call-template name="div"/>
218 </xsl:template>
219
220 <xsl:template match="article" mode="olink.mode">
221   <xsl:call-template name="div"/>
222 </xsl:template>
223
224 <xsl:template match="bibliography|bibliodiv" mode="olink.mode">
225   <xsl:call-template name="div"/>
226 </xsl:template>
227
228 <xsl:template match="biblioentry|bibliomixed" mode="olink.mode">
229   <xsl:call-template name="obj"/>
230 </xsl:template>
231
232 <xsl:template match="refentry" mode="olink.mode">
233   <xsl:call-template name="div"/>
234 </xsl:template>
235
236 <xsl:template match="section|sect1|sect2|sect3|sect4|sect5" mode="olink.mode">
237   <xsl:call-template name="div"/>
238 </xsl:template>
239
240 <xsl:template match="refsection|refsect1|refsect2|refsect3" mode="olink.mode">
241   <xsl:call-template name="div"/>
242 </xsl:template>
243
244 <xsl:template match="figure|example|table" mode="olink.mode">
245   <xsl:call-template name="obj"/>
246 </xsl:template>
247
248 <xsl:template match="equation[title]" mode="olink.mode">
249   <xsl:call-template name="obj"/>
250 </xsl:template>
251
252 <xsl:template match="qandaset|qandaentry" mode="olink.mode">
253   <xsl:call-template name="div"/>
254 </xsl:template>
255
256 <xsl:template match="*" mode="olink.mode">
257   <xsl:if test="@id">
258     <xsl:call-template name="obj"/>
259   </xsl:if> 
260   <xsl:apply-templates mode="olink.mode"/>
261 </xsl:template>
262
263 </xsl:stylesheet>