1<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
2                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
3                exclude-result-prefixes="doc"
4                version="1.0">
5
6<!-- ********************************************************************
7     $Id$
8     ******************************************************************** 
9
10     This file is used by htmlhelp.xsl if you want to generate source
11     files for HTML Help.  It is based on the XSL DocBook Stylesheet
12     distribution (especially on JavaHelp code) from Norman Walsh.
13
14     ******************************************************************** -->
15
16<!-- ==================================================================== -->
17<xsl:param name="htmlhelp.encoding" select="'iso-8859-1'"/>
18
19<doc:param name="htmlhelp.encoding" xmlns="">
20<refpurpose>Character encoding to use in files for HTML Help compiler.</refpurpose>
21<refdescription>
22<para>HTML Help Compiler is not UTF-8 aware, so you should always use
23apropriate single-byte encoding here.</para>
24</refdescription>
25</doc:param>
26
27<xsl:param name="suppress.navigation" select="1"/>
28
29<!-- ==================================================================== -->
30
31<xsl:template match="/">
32  <xsl:apply-templates/>
33  <xsl:call-template name="hhp"/>
34  <xsl:call-template name="hhc"/>
35</xsl:template>
36
37<!-- ==================================================================== -->
38
39<xsl:template name="hhp">
40  <xsl:call-template name="write.text.chunk">
41    <xsl:with-param name="filename" select="'htmlhelp.hhp'"/>
42    <xsl:with-param name="method" select="'text'"/>
43    <xsl:with-param name="content">
44      <xsl:call-template name="hhp-main"/>
45    </xsl:with-param>
46    <xsl:with-param name="encoding" select="$htmlhelp.encoding"/>
47  </xsl:call-template>
48</xsl:template>
49
50<!-- ==================================================================== -->
51<xsl:template name="hhp-main">
52<xsl:text>[OPTIONS]
53</xsl:text>
54<xsl:if test="//indexterm">
55<xsl:text>Auto Index=Yes
56</xsl:text></xsl:if>
57<xsl:text>Compatibility=1.1 or later
58Compiled file=htmlhelp.chm
59Contents file=toc.hhc
60Default topic=</xsl:text>
61 <xsl:call-template name="make-relative-filename">
62   <xsl:with-param name="base.dir" select="$base.dir"/>
63   <xsl:with-param name="base.name">
64     <xsl:apply-templates mode="chunk-filename" select="/"/>
65   </xsl:with-param>
66 </xsl:call-template>
67<xsl:text>
68Display compile progress=No
69Full-text search=Yes
70Language=</xsl:text>
71<xsl:if test="//@lang">
72  <xsl:variable name="lang" select="//@lang[1]"/>
73  <xsl:value-of select="document('langcodes.xml')//gentext[@lang=string($lang)]"/>
74</xsl:if>
75<xsl:if test="not(//@lang)">
76  <xsl:text>0x0409 English (United States)
77</xsl:text></xsl:if>
78<xsl:text>
79Title=</xsl:text><xsl:value-of select="//title[1]"/>
80<xsl:text>
81
82[FILES]
83</xsl:text>
84<xsl:apply-templates mode="enumerate-files"/>
85</xsl:template>
86<!-- ==================================================================== -->
87
88<xsl:template match="set|book|part|preface|chapter|appendix
89                     |article
90                     |reference|refentry
91                     |sect1[position()>1]
92                     |section[position()>1 and name(parent::*) != 'section']
93                     |book/glossary|article/glossary
94                     |book/bibliography|article/bibliography
95                     |colophon"
96              mode="enumerate-files">
97  <xsl:variable name="ischunk"><xsl:call-template name="chunk"/></xsl:variable>
98  <xsl:if test="$ischunk='1'">
99    <xsl:call-template name="make-relative-filename">
100      <xsl:with-param name="base.dir" select="$base.dir"/>
101      <xsl:with-param name="base.name">
102        <xsl:apply-templates mode="chunk-filename" select="."/>
103      </xsl:with-param>
104    </xsl:call-template>
105    <xsl:text>&#10;</xsl:text>
106  </xsl:if>
107  <xsl:apply-templates select="*" mode="enumerate-files"/>
108</xsl:template>
109
110<xsl:template match="text()" mode="enumerate-files">
111</xsl:template>
112
113<!-- ==================================================================== -->
114
115<!-- Following templates are not nice. It is because MS help compiler is unable
116     to process correct HTML files. We must generate following weird
117     stuff instead. -->
118
119<xsl:template name="hhc">
120  <xsl:call-template name="write.text.chunk">
121    <xsl:with-param name="filename" select="'toc.hhc'"/>
122    <xsl:with-param name="method" select="'text'"/>
123    <xsl:with-param name="content">
124      <xsl:call-template name="hhc-main"/>
125    </xsl:with-param>
126    <xsl:with-param name="encoding" select="$htmlhelp.encoding"/>
127  </xsl:call-template>
128</xsl:template>
129
130<xsl:template name="hhc-main">
131    <xsl:text>&lt;HTML&gt;
132&lt;HEAD&gt;
133&lt;/HEAD&gt;
134&lt;BODY&gt;
135&lt;OBJECT type="text/site properties"&gt;
136	&lt;param name="ImageType" value="Folder"&gt;
137&lt;/OBJECT&gt;
138&lt;UL&gt;
139</xsl:text>
140      <xsl:apply-templates select="." mode="hhc"/>
141<xsl:text>&lt;/UL&gt;
142&lt;/BODY&gt;
143&lt;/HTML&gt;</xsl:text>
144</xsl:template>
145
146<xsl:template match="set" mode="hhc">
147  <xsl:variable name="title">
148    <xsl:apply-templates select="." mode="title.markup"/>
149  </xsl:variable>
150
151  <xsl:text>&lt;LI&gt; &lt;OBJECT type="text/sitemap"&gt;
152    &lt;param name="Name" value="</xsl:text>
153	<xsl:value-of select="$title"/>
154    <xsl:text>"&gt;
155    &lt;param name="Local" value="</xsl:text>
156	<xsl:call-template name="href.target.with.base.dir"/>
157    <xsl:text>"&gt;
158  &lt;/OBJECT&gt;</xsl:text>
159  <xsl:if test="book">
160    <xsl:text>&lt;UL&gt;</xsl:text>
161      <xsl:apply-templates select="book" mode="hhc"/>
162    <xsl:text>&lt;/UL&gt;</xsl:text>
163  </xsl:if>
164</xsl:template>
165
166<xsl:template match="book" mode="hhc">
167  <xsl:variable name="title">
168    <xsl:apply-templates select="." mode="title.markup"/>
169  </xsl:variable>
170
171  <xsl:text>&lt;LI&gt; &lt;OBJECT type="text/sitemap"&gt;
172    &lt;param name="Name" value="</xsl:text>
173	<xsl:value-of select="$title"/>
174    <xsl:text>"&gt;
175    &lt;param name="Local" value="</xsl:text>
176	<xsl:call-template name="href.target.with.base.dir"/>
177    <xsl:text>"&gt;
178  &lt;/OBJECT&gt;</xsl:text>
179  <xsl:if test="part|reference|preface|chapter|appendix|article|colophon">
180    <xsl:text>&lt;UL&gt;</xsl:text>
181      <xsl:apply-templates select="part|reference|preface|chapter|appendix|article|colophon"
182			   mode="hhc"/>
183    <xsl:text>&lt;/UL&gt;</xsl:text>
184  </xsl:if>
185</xsl:template>
186
187<xsl:template match="part|reference|preface|chapter|appendix|article"
188              mode="hhc">
189  <xsl:variable name="title">
190    <xsl:apply-templates select="." mode="title.markup"/>
191  </xsl:variable>
192
193  <xsl:text>&lt;LI&gt; &lt;OBJECT type="text/sitemap"&gt;
194    &lt;param name="Name" value="</xsl:text>
195	<xsl:value-of select="$title"/>
196    <xsl:text>"&gt;
197    &lt;param name="Local" value="</xsl:text>
198	<xsl:call-template name="href.target.with.base.dir"/>
199    <xsl:text>"&gt;
200  &lt;/OBJECT&gt;</xsl:text>
201  <xsl:if test="reference|preface|chapter|appendix|refentry|section|sect1">
202    <xsl:text>&lt;UL&gt;</xsl:text>
203      <xsl:apply-templates
204	select="reference|preface|chapter|appendix|refentry|section|sect1"
205	mode="hhc"/>
206    <xsl:text>&lt;/UL&gt;</xsl:text>
207  </xsl:if>
208</xsl:template>
209
210<xsl:template match="section" mode="hhc">
211  <xsl:variable name="title">
212    <xsl:apply-templates select="." mode="title.markup"/>
213  </xsl:variable>
214
215  <xsl:text>&lt;LI&gt; &lt;OBJECT type="text/sitemap"&gt;
216    &lt;param name="Name" value="</xsl:text>
217	<xsl:value-of select="$title"/>
218    <xsl:text>"&gt;
219    &lt;param name="Local" value="</xsl:text>
220	<xsl:call-template name="href.target.with.base.dir"/>
221    <xsl:text>"&gt;
222  &lt;/OBJECT&gt;</xsl:text>
223  <xsl:if test="section">
224    <xsl:text>&lt;UL&gt;</xsl:text>
225      <xsl:apply-templates select="section" mode="hhc"/>
226    <xsl:text>&lt;/UL&gt;</xsl:text>
227  </xsl:if>
228</xsl:template>
229
230<xsl:template match="sect1" mode="hhc">
231  <xsl:variable name="title">
232    <xsl:apply-templates select="." mode="title.markup"/>
233  </xsl:variable>
234
235  <xsl:text>&lt;LI&gt; &lt;OBJECT type="text/sitemap"&gt;
236    &lt;param name="Name" value="</xsl:text>
237	<xsl:value-of select="$title"/>
238    <xsl:text>"&gt;
239    &lt;param name="Local" value="</xsl:text>
240	<xsl:call-template name="href.target.with.base.dir"/>
241    <xsl:text>"&gt;
242  &lt;/OBJECT&gt;</xsl:text>
243  <xsl:if test="sect2">
244    <xsl:text>&lt;UL&gt;</xsl:text>
245      <xsl:apply-templates select="sect2"
246			   mode="hhc"/>
247    <xsl:text>&lt;/UL&gt;</xsl:text>
248  </xsl:if>
249</xsl:template>
250
251<xsl:template match="sect2" mode="hhc">
252  <xsl:variable name="title">
253    <xsl:apply-templates select="." mode="title.markup"/>
254  </xsl:variable>
255
256  <xsl:text>&lt;LI&gt; &lt;OBJECT type="text/sitemap"&gt;
257    &lt;param name="Name" value="</xsl:text>
258	<xsl:value-of select="$title"/>
259    <xsl:text>"&gt;
260    &lt;param name="Local" value="</xsl:text>
261	<xsl:call-template name="href.target.with.base.dir"/>
262    <xsl:text>"&gt;
263  &lt;/OBJECT&gt;</xsl:text>
264  <xsl:if test="sect3">
265    <xsl:text>&lt;UL&gt;</xsl:text>
266      <xsl:apply-templates select="sect3"
267			   mode="hhc"/>
268    <xsl:text>&lt;/UL&gt;</xsl:text>
269  </xsl:if>
270</xsl:template>
271
272<xsl:template match="sect3" mode="hhc">
273  <xsl:variable name="title">
274    <xsl:apply-templates select="." mode="title.markup"/>
275  </xsl:variable>
276
277  <xsl:text>&lt;LI&gt; &lt;OBJECT type="text/sitemap"&gt;
278    &lt;param name="Name" value="</xsl:text>
279	<xsl:value-of select="$title"/>
280    <xsl:text>"&gt;
281    &lt;param name="Local" value="</xsl:text>
282	<xsl:call-template name="href.target.with.base.dir"/>
283    <xsl:text>"&gt;
284  &lt;/OBJECT&gt;</xsl:text>
285  <xsl:if test="sect4">
286    <xsl:text>&lt;UL&gt;</xsl:text>
287      <xsl:apply-templates select="sect4"
288			   mode="hhc"/>
289    <xsl:text>&lt;/UL&gt;</xsl:text>
290  </xsl:if>
291</xsl:template>
292
293<xsl:template match="sect4" mode="hhc">
294  <xsl:variable name="title">
295    <xsl:apply-templates select="." mode="title.markup"/>
296  </xsl:variable>
297
298  <xsl:text>&lt;LI&gt; &lt;OBJECT type="text/sitemap"&gt;
299    &lt;param name="Name" value="</xsl:text>
300	<xsl:value-of select="$title"/>
301    <xsl:text>"&gt;
302    &lt;param name="Local" value="</xsl:text>
303	<xsl:call-template name="href.target.with.base.dir"/>
304    <xsl:text>"&gt;
305  &lt;/OBJECT&gt;</xsl:text>
306  <xsl:if test="sect5">
307    <xsl:text>&lt;UL&gt;</xsl:text>
308      <xsl:apply-templates select="sect5"
309			   mode="hhc"/>
310    <xsl:text>&lt;/UL&gt;</xsl:text>
311  </xsl:if>
312</xsl:template>
313
314<xsl:template match="sect5|refentry|colophon" mode="hhc">
315  <xsl:variable name="title">
316    <xsl:apply-templates select="." mode="title.markup"/>
317  </xsl:variable>
318
319  <xsl:text>&lt;LI&gt; &lt;OBJECT type="text/sitemap"&gt;
320    &lt;param name="Name" value="</xsl:text>
321	<xsl:value-of select="$title"/>
322    <xsl:text>"&gt;
323    &lt;param name="Local" value="</xsl:text>
324	<xsl:call-template name="href.target.with.base.dir"/>
325    <xsl:text>"&gt;
326  &lt;/OBJECT&gt;</xsl:text>
327</xsl:template>
328
329<!-- ==================================================================== -->
330
331<xsl:template match="indexterm">
332
333  <xsl:variable name="text">
334    <xsl:value-of select="primary"/>
335    <xsl:if test="secondary">
336      <xsl:text>, </xsl:text>
337      <xsl:value-of select="secondary"/>
338    </xsl:if>
339    <xsl:if test="tertiary">
340      <xsl:text>, </xsl:text>
341      <xsl:value-of select="tertiary"/>
342    </xsl:if>
343  </xsl:variable>
344
345  <OBJECT type="application/x-oleobject"
346          classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
347    <param name="Keyword" value="{$text}"/>
348  </OBJECT>
349</xsl:template>
350
351<!-- ==================================================================== -->
352
353<xsl:template name="href.target.with.base.dir">
354  <xsl:value-of select="$base.dir"/>
355  <xsl:call-template name="href.target"/>
356</xsl:template>
357
358
359</xsl:stylesheet>
360