]> git.lyx.org Git - lyx.git/blob - lib/docbook/xhtml/chunktoc.xsl
Use same find-dialogs as other bind-files also for x?emacs
[lyx.git] / lib / docbook / xhtml / chunktoc.xsl
1 <?xml version="1.0" encoding="ASCII"?><!--This file was created automatically by html2xhtml--><!--from the HTML stylesheets.--><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:d="http://docbook.org/ns/docbook" xmlns:doc="http://nwalsh.com/xsl/documentation/1.0" xmlns="http://www.w3.org/1999/xhtml" version="1.0" exclude-result-prefixes="doc d">
2
3 <!-- ********************************************************************
4
5      This file is part of the XSL DocBook Stylesheet distribution.
6      See ../README or http://cdn.docbook.org/release/xsl/current/ for
7      copyright and other information.
8
9      ******************************************************************** -->
10
11 <!-- ==================================================================== -->
12
13 <xsl:import href="docbook-no-doctype.xsl"/>
14 <xsl:import href="chunk-common.xsl"/>
15
16 <xsl:template name="chunk">
17   <xsl:param name="node" select="."/>
18   <!-- returns 1 if $node is a chunk -->
19
20   <xsl:variable name="id">
21     <xsl:call-template name="object.id">
22       <xsl:with-param name="object" select="$node"/>
23     </xsl:call-template>
24   </xsl:variable>
25
26   <xsl:variable name="chunks" select="document($chunk.toc,/)"/>
27
28   <xsl:choose>
29     <xsl:when test="$chunks//d:tocentry[@linkend=$id]">1</xsl:when>
30     <xsl:otherwise>0</xsl:otherwise>
31   </xsl:choose>
32 </xsl:template>
33
34 <!-- ==================================================================== -->
35
36 <xsl:template match="*" mode="chunk-filename">
37   <!-- returns the filename of a chunk -->
38
39   <xsl:variable name="id">
40     <xsl:call-template name="object.id"/>
41   </xsl:variable>
42
43   <xsl:variable name="chunks" select="document($chunk.toc,/)"/>
44
45   <xsl:variable name="chunk" select="$chunks//d:tocentry[@linkend=$id]"/>
46   <xsl:variable name="filename">
47     <xsl:call-template name="pi.dbhtml_filename">
48       <xsl:with-param name="node" select="$chunk"/>
49     </xsl:call-template>
50   </xsl:variable>
51
52   <xsl:choose>
53     <xsl:when test="$chunk">
54       <xsl:value-of select="$filename"/>
55     </xsl:when>
56     <xsl:otherwise>
57       <xsl:apply-templates select="parent::*" mode="chunk-filename"/>
58     </xsl:otherwise>
59   </xsl:choose>
60 </xsl:template>
61
62 <!-- ==================================================================== -->
63
64 <xsl:template name="process-chunk">
65   <xsl:variable name="id">
66     <xsl:call-template name="object.id"/>
67   </xsl:variable>
68
69   <xsl:variable name="chunks" select="document($chunk.toc,/)"/>
70
71   <xsl:variable name="chunk" select="$chunks//d:tocentry[@linkend=$id]"/>
72   <xsl:variable name="prev-id" select="($chunk/preceding::d:tocentry                          |$chunk/ancestor::d:tocentry)[last()]/@linkend"/>
73   <xsl:variable name="next-id" select="($chunk/following::d:tocentry                          |$chunk/child::d:tocentry)[1]/@linkend"/>
74
75   <xsl:variable name="prev" select="key('id',$prev-id)"/>
76   <xsl:variable name="next" select="key('id',$next-id)"/>
77
78   <xsl:variable name="ischunk">
79     <xsl:call-template name="chunk"/>
80   </xsl:variable>
81
82   <xsl:variable name="chunkfn">
83     <xsl:if test="$ischunk='1'">
84       <xsl:apply-templates mode="chunk-filename" select="."/>
85     </xsl:if>
86   </xsl:variable>
87
88   <xsl:variable name="filename">
89     <xsl:call-template name="make-relative-filename">
90       <xsl:with-param name="base.dir" select="$chunk.base.dir"/>
91       <xsl:with-param name="base.name" select="$chunkfn"/>
92     </xsl:call-template>
93   </xsl:variable>
94
95   <xsl:choose>
96     <xsl:when test="$ischunk = 0">
97       <xsl:apply-imports/>
98     </xsl:when>
99
100     <xsl:otherwise>
101       <xsl:call-template name="write.chunk">
102         <xsl:with-param name="filename" select="$filename"/>
103         <xsl:with-param name="content">
104           <xsl:call-template name="chunk-element-content">
105             <xsl:with-param name="prev" select="$prev"/>
106             <xsl:with-param name="next" select="$next"/>
107           </xsl:call-template>
108         </xsl:with-param>
109         <xsl:with-param name="quiet" select="$chunk.quietly"/>
110       </xsl:call-template>
111     </xsl:otherwise>
112   </xsl:choose>
113 </xsl:template>
114
115 <!-- ==================================================================== -->
116
117 <xsl:template match="d:set">
118   <xsl:call-template name="process-chunk"/>
119 </xsl:template>
120
121 <xsl:template match="d:book">
122   <xsl:call-template name="process-chunk"/>
123 </xsl:template>
124
125 <xsl:template match="d:book/d:appendix">
126   <xsl:call-template name="process-chunk"/>
127 </xsl:template>
128
129 <xsl:template match="d:book/d:glossary">
130   <xsl:call-template name="process-chunk"/>
131 </xsl:template>
132
133 <xsl:template match="d:book/d:bibliography">
134   <xsl:call-template name="process-chunk"/>
135 </xsl:template>
136
137 <xsl:template match="d:dedication" mode="dedication">
138   <xsl:call-template name="process-chunk"/>
139 </xsl:template>
140
141 <xsl:template match="d:preface|d:chapter">
142   <xsl:call-template name="process-chunk"/>
143 </xsl:template>
144
145 <xsl:template match="d:part|d:reference">
146   <xsl:call-template name="process-chunk"/>
147 </xsl:template>
148
149 <xsl:template match="d:refentry">
150   <xsl:call-template name="process-chunk"/>
151 </xsl:template>
152
153 <xsl:template match="d:colophon">
154   <xsl:call-template name="process-chunk"/>
155 </xsl:template>
156
157 <xsl:template match="d:article">
158   <xsl:call-template name="process-chunk"/>
159 </xsl:template>
160
161 <xsl:template match="d:topic">
162   <xsl:call-template name="process-chunk"/>
163 </xsl:template>
164
165 <xsl:template match="d:article/d:appendix">
166   <xsl:call-template name="process-chunk"/>
167 </xsl:template>
168
169 <xsl:template match="d:article/d:glossary">
170   <xsl:call-template name="process-chunk"/>
171 </xsl:template>
172
173 <xsl:template match="d:article/d:bibliography">
174   <xsl:call-template name="process-chunk"/>
175 </xsl:template>
176
177 <xsl:template match="d:sect1|d:sect2|d:sect3|d:sect4|d:sect5|d:section">
178   <xsl:variable name="ischunk">
179     <xsl:call-template name="chunk"/>
180   </xsl:variable>
181
182   <xsl:choose>
183     <xsl:when test="$ischunk != 0">
184       <xsl:call-template name="process-chunk"/>
185     </xsl:when>
186     <xsl:otherwise>
187       <xsl:apply-imports/>
188     </xsl:otherwise>
189   </xsl:choose>
190 </xsl:template>
191
192 <xsl:template match="d:setindex                      |d:book/d:index                      |d:article/d:index">
193   <!-- some implementations use completely empty index tags to indicate -->
194   <!-- where an automatically generated index should be inserted. so -->
195   <!-- if the index is completely empty, skip it. -->
196   <xsl:if test="count(*)&gt;0 or $generate.index != '0'">
197     <xsl:call-template name="process-chunk"/>
198   </xsl:if>
199 </xsl:template>
200
201 <!-- ==================================================================== -->
202
203 <xsl:template match="/">
204   <!-- * Get a title for current doc so that we let the user -->
205   <!-- * know what document we are processing at this point. -->
206   <xsl:variable name="doc.title">
207     <xsl:call-template name="get.doc.title"/>
208   </xsl:variable>
209   <xsl:choose>
210     <xsl:when test="$chunk.toc = ''">
211       <xsl:message terminate="yes">
212         <xsl:text>The chunk.toc file is not set.</xsl:text>
213       </xsl:message>
214     </xsl:when>
215     <xsl:when test="$exsl.node.set.available != 0 and                    namespace-uri(/*) != 'http://docbook.org/ns/docbook'">
216       <xsl:call-template name="log.message">
217         <xsl:with-param name="level">Note</xsl:with-param>
218         <xsl:with-param name="source" select="$doc.title"/>
219         <xsl:with-param name="context-desc">
220           <xsl:text>namesp. add</xsl:text>
221         </xsl:with-param>
222         <xsl:with-param name="message">
223           <xsl:text>added namespace before processing</xsl:text>
224         </xsl:with-param>
225       </xsl:call-template>
226       <xsl:apply-templates select="exsl:node-set($with.namespace)"/>
227     </xsl:when>
228     <!-- Can't process unless namespace is correct -->
229     <xsl:when test="namespace-uri(/*) != 'http://docbook.org/ns/docbook'">
230       <xsl:message terminate="yes">
231         <xsl:text>Unable to add the namespace from DB4 document,</xsl:text>
232         <xsl:text> cannot proceed.</xsl:text>
233       </xsl:message>
234     </xsl:when>
235     <xsl:otherwise>
236       <xsl:choose>
237         <xsl:when test="$rootid != ''">
238           <xsl:choose>
239             <xsl:when test="count(key('id',$rootid)) = 0">
240               <xsl:message terminate="yes">
241                 <xsl:text>ID '</xsl:text>
242                 <xsl:value-of select="$rootid"/>
243                 <xsl:text>' not found in document.</xsl:text>
244               </xsl:message>
245             </xsl:when>
246             <xsl:otherwise>
247               <xsl:if test="$collect.xref.targets = 'yes' or                             $collect.xref.targets = 'only'">
248                 <xsl:apply-templates select="key('id', $rootid)" mode="collect.targets"/>
249               </xsl:if>
250               <xsl:if test="$collect.xref.targets != 'only'">
251                 <xsl:apply-templates select="key('id',$rootid)" mode="process.root"/>
252                 <xsl:if test="$tex.math.in.alt != ''">
253                   <xsl:apply-templates select="key('id',$rootid)" mode="collect.tex.math"/>
254                 </xsl:if>
255                 <xsl:if test="$generate.manifest != 0">
256                   <xsl:call-template name="generate.manifest">
257                     <xsl:with-param name="node" select="key('id',$rootid)"/>
258                   </xsl:call-template>
259                 </xsl:if>
260               </xsl:if>
261             </xsl:otherwise>
262           </xsl:choose>
263         </xsl:when>
264         <xsl:otherwise>
265           <xsl:if test="$collect.xref.targets = 'yes' or                         $collect.xref.targets = 'only'">
266             <xsl:apply-templates select="/" mode="collect.targets"/>
267           </xsl:if>
268           <xsl:if test="$collect.xref.targets != 'only'">
269             <xsl:apply-templates select="/" mode="process.root"/>
270             <xsl:if test="$tex.math.in.alt != ''">
271               <xsl:apply-templates select="/" mode="collect.tex.math"/>
272             </xsl:if>
273             <xsl:if test="$generate.manifest != 0">
274               <xsl:call-template name="generate.manifest">
275                 <xsl:with-param name="node" select="/"/>
276               </xsl:call-template>
277             </xsl:if>
278           </xsl:if>
279         </xsl:otherwise>
280       </xsl:choose>
281     </xsl:otherwise>
282   </xsl:choose>
283 </xsl:template>
284
285 <xsl:template match="*" mode="process.root">
286   <xsl:apply-templates select="."/>
287   <xsl:call-template name="generate.css"/>
288 </xsl:template>
289
290 <xsl:template name="make.lots">
291   <xsl:param name="toc.params" select="''"/>
292   <xsl:param name="toc"/>
293
294   <xsl:variable name="lots">
295     <xsl:if test="contains($toc.params, 'toc')">
296       <xsl:copy-of select="$toc"/>
297     </xsl:if>
298
299     <xsl:if test="contains($toc.params, 'figure')">
300       <xsl:choose>
301         <xsl:when test="$chunk.separate.lots != '0'">
302           <xsl:call-template name="make.lot.chunk">
303             <xsl:with-param name="type" select="'figure'"/>
304             <xsl:with-param name="lot">
305               <xsl:call-template name="list.of.titles">
306                 <xsl:with-param name="titles" select="'figure'"/>
307                 <xsl:with-param name="nodes" select=".//d:figure"/>
308               </xsl:call-template>
309             </xsl:with-param>
310           </xsl:call-template>
311         </xsl:when>
312         <xsl:otherwise>
313           <xsl:call-template name="list.of.titles">
314             <xsl:with-param name="titles" select="'figure'"/>
315             <xsl:with-param name="nodes" select=".//d:figure"/>
316           </xsl:call-template>
317         </xsl:otherwise>
318       </xsl:choose>
319     </xsl:if>
320
321     <xsl:if test="contains($toc.params, 'table')">
322       <xsl:choose>
323         <xsl:when test="$chunk.separate.lots != '0'">
324           <xsl:call-template name="make.lot.chunk">
325             <xsl:with-param name="type" select="'table'"/>
326             <xsl:with-param name="lot">
327               <xsl:call-template name="list.of.titles">
328                 <xsl:with-param name="titles" select="'table'"/>
329                 <xsl:with-param name="nodes" select=".//d:table"/>
330               </xsl:call-template>
331             </xsl:with-param>
332           </xsl:call-template>
333         </xsl:when>
334         <xsl:otherwise>
335           <xsl:call-template name="list.of.titles">
336             <xsl:with-param name="titles" select="'table'"/>
337             <xsl:with-param name="nodes" select=".//d:table"/>
338           </xsl:call-template>
339         </xsl:otherwise>
340       </xsl:choose>
341     </xsl:if>
342
343     <xsl:if test="contains($toc.params, 'example')">
344       <xsl:choose>
345         <xsl:when test="$chunk.separate.lots != '0'">
346           <xsl:call-template name="make.lot.chunk">
347             <xsl:with-param name="type" select="'example'"/>
348             <xsl:with-param name="lot">
349               <xsl:call-template name="list.of.titles">
350                 <xsl:with-param name="titles" select="'example'"/>
351                 <xsl:with-param name="nodes" select=".//d:example"/>
352               </xsl:call-template>
353             </xsl:with-param>
354           </xsl:call-template>
355         </xsl:when>
356         <xsl:otherwise>
357           <xsl:call-template name="list.of.titles">
358             <xsl:with-param name="titles" select="'example'"/>
359             <xsl:with-param name="nodes" select=".//d:example"/>
360           </xsl:call-template>
361         </xsl:otherwise>
362       </xsl:choose>
363     </xsl:if>
364
365     <xsl:if test="contains($toc.params, 'equation')">
366       <xsl:choose>
367         <xsl:when test="$chunk.separate.lots != '0'">
368           <xsl:call-template name="make.lot.chunk">
369             <xsl:with-param name="type" select="'equation'"/>
370             <xsl:with-param name="lot">
371               <xsl:call-template name="list.of.titles">
372                 <xsl:with-param name="titles" select="'equation'"/>
373                 <xsl:with-param name="nodes" select=".//d:equation"/>
374               </xsl:call-template>
375             </xsl:with-param>
376           </xsl:call-template>
377         </xsl:when>
378         <xsl:otherwise>
379           <xsl:call-template name="list.of.titles">
380             <xsl:with-param name="titles" select="'equation'"/>
381             <xsl:with-param name="nodes" select=".//d:equation"/>
382           </xsl:call-template>
383         </xsl:otherwise>
384       </xsl:choose>
385     </xsl:if>
386
387     <xsl:if test="contains($toc.params, 'procedure')">
388       <xsl:choose>
389         <xsl:when test="$chunk.separate.lots != '0'">
390           <xsl:call-template name="make.lot.chunk">
391             <xsl:with-param name="type" select="'procedure'"/>
392             <xsl:with-param name="lot">
393               <xsl:call-template name="list.of.titles">
394                 <xsl:with-param name="titles" select="'procedure'"/>
395                 <xsl:with-param name="nodes" select=".//d:procedure[d:title]"/>
396               </xsl:call-template>
397             </xsl:with-param>
398           </xsl:call-template>
399         </xsl:when>
400         <xsl:otherwise>
401           <xsl:call-template name="list.of.titles">
402             <xsl:with-param name="titles" select="'procedure'"/>
403             <xsl:with-param name="nodes" select=".//d:procedure[d:title]"/>
404           </xsl:call-template>
405         </xsl:otherwise>
406       </xsl:choose>
407     </xsl:if>
408   </xsl:variable>
409
410   <xsl:if test="string($lots) != ''">
411     <xsl:choose>
412       <xsl:when test="$chunk.tocs.and.lots != 0 and not(parent::*)">
413         <xsl:call-template name="write.chunk">
414           <xsl:with-param name="filename">
415             <xsl:call-template name="make-relative-filename">
416               <xsl:with-param name="base.dir" select="$chunk.base.dir"/>
417               <xsl:with-param name="base.name">
418                 <xsl:call-template name="dbhtml-dir"/>
419                 <xsl:apply-templates select="." mode="recursive-chunk-filename">
420                   <xsl:with-param name="recursive" select="true()"/>
421                 </xsl:apply-templates>
422                 <xsl:text>-toc</xsl:text>
423                 <xsl:value-of select="$html.ext"/>
424               </xsl:with-param>
425             </xsl:call-template>
426           </xsl:with-param>
427           <xsl:with-param name="content">
428             <xsl:call-template name="chunk-element-content">
429               <xsl:with-param name="prev" select="/d:foo"/>
430               <xsl:with-param name="next" select="/d:foo"/>
431               <xsl:with-param name="nav.context" select="'toc'"/>
432               <xsl:with-param name="content">
433                 <h1>
434                   <xsl:apply-templates select="." mode="object.title.markup"/>
435                 </h1>
436                 <xsl:copy-of select="$lots"/>
437               </xsl:with-param>
438             </xsl:call-template>
439           </xsl:with-param>
440           <xsl:with-param name="quiet" select="$chunk.quietly"/>
441         </xsl:call-template>
442       </xsl:when>
443       <xsl:otherwise>
444         <xsl:copy-of select="$lots"/>
445       </xsl:otherwise>
446     </xsl:choose>
447   </xsl:if>
448 </xsl:template>
449
450 <xsl:template name="make.lot.chunk">
451   <xsl:param name="type" select="''"/>
452   <xsl:param name="lot"/>
453
454   <xsl:if test="string($lot) != ''">
455     <xsl:variable name="filename">
456       <xsl:call-template name="make-relative-filename">
457         <xsl:with-param name="base.dir" select="$chunk.base.dir"/>
458         <xsl:with-param name="base.name">
459           <xsl:call-template name="dbhtml-dir"/>
460           <xsl:value-of select="$type"/>
461           <xsl:text>-toc</xsl:text>
462           <xsl:value-of select="$html.ext"/>
463         </xsl:with-param>
464       </xsl:call-template>
465     </xsl:variable>
466
467     <xsl:variable name="href">
468       <xsl:call-template name="make-relative-filename">
469         <xsl:with-param name="base.dir" select="''"/>
470         <xsl:with-param name="base.name">
471           <xsl:call-template name="dbhtml-dir"/>
472           <xsl:value-of select="$type"/>
473           <xsl:text>-toc</xsl:text>
474           <xsl:value-of select="$html.ext"/>
475         </xsl:with-param>
476       </xsl:call-template>
477     </xsl:variable>
478
479     <xsl:call-template name="write.chunk">
480       <xsl:with-param name="filename" select="$filename"/>
481       <xsl:with-param name="content">
482         <xsl:call-template name="chunk-element-content">
483           <xsl:with-param name="prev" select="/d:foo"/>
484           <xsl:with-param name="next" select="/d:foo"/>
485           <xsl:with-param name="nav.context" select="'toc'"/>
486           <xsl:with-param name="content">
487             <xsl:copy-of select="$lot"/>
488           </xsl:with-param>
489         </xsl:call-template>
490       </xsl:with-param>
491       <xsl:with-param name="quiet" select="$chunk.quietly"/>
492     </xsl:call-template>
493     <!-- And output a link to this file -->
494     <div>
495       <xsl:attribute name="class">
496         <xsl:text>ListofTitles</xsl:text>
497       </xsl:attribute>
498       <a href="{$href}">
499         <xsl:call-template name="gentext">
500           <xsl:with-param name="key">
501             <xsl:choose>
502               <xsl:when test="$type='table'">ListofTables</xsl:when>
503               <xsl:when test="$type='figure'">ListofFigures</xsl:when>
504               <xsl:when test="$type='equation'">ListofEquations</xsl:when>
505               <xsl:when test="$type='example'">ListofExamples</xsl:when>
506               <xsl:when test="$type='procedure'">ListofProcedures</xsl:when>
507               <xsl:otherwise>ListofUnknown</xsl:otherwise>
508             </xsl:choose>
509           </xsl:with-param>
510         </xsl:call-template>
511       </a>
512     </div>
513   </xsl:if>
514 </xsl:template>
515
516 </xsl:stylesheet>