]> granicus.if.org Git - apache/blob - docs/manual/style/xsl/moduleindex.xsl
the html files used for chm compiling differ in detail from our normal
[apache] / docs / manual / style / xsl / moduleindex.xsl
1 <?xml version="1.0"?>
2 <!DOCTYPE xsl:stylesheet [
3     <!ENTITY nbsp SYSTEM "util/nbsp.xml">
4 ]>
5 <xsl:stylesheet version="1.0"
6               xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
7                   xmlns="http://www.w3.org/1999/xhtml">
8
9   <!--                              -->
10   <!-- Builds the moduleindex page  -->
11   <!--                              -->
12   <xsl:template match="moduleindex">
13     <html xml:lang="{$messages/@lang}" lang="{$messages/@lang}">
14       <xsl:call-template name="head"/>
15
16 <xsl:text>
17 </xsl:text> <!-- insert line break -->
18
19       <body id="module-index">
20         <xsl:call-template name="top"/>  
21
22         <div id="page-content">
23         <div id="preamble">
24           <h1>
25             <xsl:value-of select="title"/>
26           </h1>
27           
28 <xsl:text>
29 </xsl:text> <!-- insert line break -->
30
31           <xsl:apply-templates select="summary" />
32         </div>
33         <!-- /preamble -->
34
35 <xsl:text>
36 </xsl:text> <!-- insert line break -->
37
38         <xsl:if test="not($is-chm) or seealso">
39         <div id="quickview">
40           <xsl:if test="not($is-chm)">
41           <ul id="toc">
42
43 <xsl:text>
44 </xsl:text> <!-- insert line break -->
45
46             <li>
47               <img src="{$path}/images/down.gif" alt="" />
48               <xsl:text> </xsl:text>
49               <a href="#core">
50                 <xsl:value-of select="$messages/message[@name='corefeatures']"/>
51               </a>
52             </li>
53
54             <li>
55               <img src="{$path}/images/down.gif" alt="" />
56               <xsl:text> </xsl:text>
57               <a href="#other">
58                 <xsl:value-of select="$messages/message[@name='othermodules']"/>
59               </a>
60             </li>
61           </ul>
62           </xsl:if> <!-- chm -->
63
64           <xsl:if test="seealso">
65             <h3>
66               <xsl:value-of select="$messages/message[@name='seealso']"/>
67             </h3>
68             
69 <xsl:text>
70 </xsl:text> <!-- insert line break -->
71
72             <ul class="seealso">
73
74 <xsl:text>
75 </xsl:text> <!-- insert line break -->
76
77               <xsl:for-each select="seealso">
78                 <li>
79                   <xsl:apply-templates/>
80                 </li>
81
82 <xsl:text>
83 </xsl:text> <!-- insert line break -->
84
85               </xsl:for-each>
86             </ul>
87           </xsl:if>
88         </div> <!-- /quickview -->
89         </xsl:if> <!-- chm foo -->
90
91 <xsl:text>
92 </xsl:text> <!-- insert line break -->
93
94         <xsl:call-template name="toplink"/>
95
96 <xsl:text>
97 </xsl:text> <!-- insert line break -->
98
99         <div class="section">
100           <h2>
101             <a name="core" id="core">
102               <xsl:value-of select="$messages/message[@name='corefeatures']"/>
103             </a>
104           </h2>
105
106 <xsl:text>
107 </xsl:text> <!-- insert line break -->
108
109           <!--                                -->
110           <!-- put core and mpm_common on top -->
111           <!--                                -->
112           <dl>
113
114 <xsl:text>
115 </xsl:text> <!-- insert line break -->
116
117             <dt>
118               <a href="{document(modulefilelist/modulefile[starts-with(.,'core.xml')])/modulesynopsis/name}.html">
119                 <xsl:value-of select="document(modulefilelist/modulefile[starts-with(.,'core.xml')])/modulesynopsis/name"/>
120               </a>
121             </dt>
122             <dd>
123               <xsl:apply-templates select="document(modulefilelist/modulefile[starts-with(.,'core.xml')])/modulesynopsis/description"/>
124             </dd>
125
126 <xsl:text>
127 </xsl:text> <!-- insert line break -->
128
129             <dt>
130               <a href="{document(modulefilelist/modulefile[starts-with(.,'mpm_common.xml')])/modulesynopsis/name}.html">
131                 <xsl:value-of select="document(modulefilelist/modulefile[starts-with(.,'mpm_common.xml')])/modulesynopsis/name"/>
132               </a>
133             </dt>
134             <dd class="separate">
135               <xsl:apply-templates select="document(modulefilelist/modulefile[starts-with(.,'mpm_common.xml')])/modulesynopsis/description"/>
136             </dd>
137           <!-- /core, mpm_common -->
138
139 <xsl:text>
140 </xsl:text> <!-- insert line break -->
141
142             <xsl:variable name="mpmmodules" select="document(modulefilelist/modulefile)/modulesynopsis[status='MPM' and name != 'mpm_common']"/>
143             <xsl:variable name="translist">
144               <xsl:call-template name="module-translist">
145                 <xsl:with-param name="modules" select="$mpmmodules"/>
146               </xsl:call-template>
147             </xsl:variable>
148
149             <xsl:for-each select="$mpmmodules">
150             <xsl:sort select="substring-before(substring-after($translist, concat('- ', translate(normalize-space(name),$lowercase,$uppercase), ' ')), ' -')"/>
151
152               <dt>
153                 <a href="{name}.html">
154                   <xsl:value-of select="name"/>
155                 </a>
156               </dt>
157               <dd>
158                 <xsl:apply-templates select="description"/>
159               </dd>
160
161 <xsl:text>
162 </xsl:text> <!-- insert line break -->
163
164             </xsl:for-each>
165             <!-- /mpm -->
166           </dl>
167         </div>
168         <!-- /core section -->
169
170 <xsl:text>
171 </xsl:text> <!-- insert line break -->
172
173         <xsl:call-template name="toplink"/>
174
175 <xsl:text>
176 </xsl:text> <!-- insert line break -->
177
178         <div class="section">
179           <h2>
180             <a name="other" id="other">
181               <xsl:value-of select="$messages/message[@name='othermodules']"/>
182             </a>
183           </h2>
184             
185 <xsl:text>
186 </xsl:text> <!-- insert line break -->
187
188           <xsl:variable name="modules" select="document(modulefilelist/modulefile)/modulesynopsis[status!='MPM' and status!='Core' and status!='Obsolete']"/>
189
190           <!-- collect the start letters -->
191           <xsl:variable name="start-letters">
192             <xsl:call-template name="module-startletters">
193               <xsl:with-param name="modules" select="$modules"/>
194             </xsl:call-template>
195           </xsl:variable>
196
197           <!-- letter line -->
198           <p class="letters">
199             <xsl:call-template name="letter-bar">
200               <xsl:with-param name="letters" select="$start-letters"/>
201               <xsl:with-param name="first" select="true()"/>
202             </xsl:call-template>
203           </p>
204           <!-- /letter line -->
205
206 <xsl:text>
207 </xsl:text> <!-- insert line break -->
208
209           <dl>
210             <xsl:call-template name="mindex-of-letter">
211               <xsl:with-param name="letters-todo" select="$start-letters"/>
212               <xsl:with-param name="modules" select="$modules"/>
213             </xsl:call-template>
214           </dl>
215         </div>
216         <!-- /modules section -->
217         
218         </div>
219         <!-- /page-content -->
220
221 <xsl:text>
222 </xsl:text> <!-- insert line break -->
223
224         <xsl:call-template name="bottom"/>
225
226 <xsl:text>
227 </xsl:text> <!-- insert line break -->
228
229       </body>
230     </html>
231   </xsl:template> 
232   <!-- /moduleindex -->
233
234
235   <!--                                                     -->
236   <!-- the working horse. builds list items of all         -->
237   <!-- modules starting with one letter                    -->
238   <!-- when done, it calls itself to catch the next letter -->
239   <!--                                                     -->
240   <xsl:template name="mindex-of-letter">
241   <xsl:param name="letters-todo"/>
242   <xsl:param name="modules"/>
243
244     <xsl:variable name="letter" select="substring($letters-todo,1,1)"/>
245     <xsl:variable name="translist">
246       <xsl:call-template name="module-translist">
247         <xsl:with-param name="modules" select="$modules"/>
248       </xsl:call-template>
249     </xsl:variable>
250
251     <xsl:for-each select="$modules[$letter=substring(substring-before(substring-after($translist, concat('- ', translate(normalize-space(name),$lowercase,$uppercase), ' ')), ' -'), 1, 1)]">
252     <xsl:sort select="substring-before(substring-after($translist, concat('- ', translate(normalize-space(name),$lowercase,$uppercase), ' ')), ' -')"/>
253
254       <dt>
255         <a href="{name}.html">
256           <xsl:if test="position()=1">
257             <xsl:attribute name="id"><xsl:value-of select="$letter"/></xsl:attribute>
258             <xsl:attribute name="name"><xsl:value-of select="$letter"/></xsl:attribute>
259           </xsl:if>
260
261           <xsl:value-of select="name"/>
262         </a>
263       </dt>
264       <dd>
265         <xsl:apply-templates select="description"/>
266       </dd>
267
268 <xsl:text>
269 </xsl:text> <!-- insert a line break -->
270
271     </xsl:for-each> <!-- /directives -->
272
273     <!-- call next letter, if there is -->
274     <xsl:if test="string-length($letters-todo) &gt; 1">
275       <xsl:call-template name="mindex-of-letter">
276         <xsl:with-param name="letters-todo" select="substring($letters-todo,2)"/>
277         <xsl:with-param name="modules" select="$modules"/>
278       </xsl:call-template>
279     </xsl:if>
280
281   </xsl:template>
282   <!-- /mindex-of-letter -->
283
284
285   <!--                                                    -->
286   <!-- collect start letters of modules                   -->
287   <!--                                                    -->
288   <xsl:template name="module-startletters">
289   <xsl:param name="modules"/>
290
291     <xsl:variable name="translist">
292       <xsl:call-template name="module-translist">
293         <xsl:with-param name="modules" select="$modules"/>
294       </xsl:call-template>
295     </xsl:variable>
296
297     <xsl:call-template name="_squeeze-letters">
298       <xsl:with-param name="lastletter" select="''"/>
299
300       <xsl:with-param name="letters">
301         <xsl:for-each select="$modules">
302         <xsl:sort select="substring-before(substring-after($translist, concat('- ', translate(normalize-space(name),$lowercase,$uppercase), ' ')), ' -')"/>
303           <xsl:value-of select="substring(substring-before(substring-after($translist, concat('- ', translate(normalize-space(name),$lowercase,$uppercase), ' ')), ' -'), 1, 1)"/>
304         </xsl:for-each>
305       </xsl:with-param>
306     </xsl:call-template>
307
308   </xsl:template>
309   <!-- /module-startletters -->
310
311
312   <!--                                                     -->
313   <!-- define module name translations for sorting         -->
314   <!--                                                     -->
315   <!-- it's a kind of a hack...                            -->
316   <!-- we build a string that contains the following data: -->
317   <!-- "- modulename sortname - modulename sortname - ..." -->
318   <!-- (with all data in uppercase)                        -->
319   <!--                                                     -->
320   <!-- So, the translation from modulename to sortname     -->
321   <!-- can be done with the expression below:              -->
322   <!--
323        substring-before(
324            substring-after($translist, 
325                            concat('- ',
326                                   translate(modulename,
327                                             $lowercase,
328                                             $uppercase),
329                                   ' ')
330                            ),
331            ' -')
332                                                            -->
333   <!--                                                     -->
334   <xsl:template name="module-translist">
335   <xsl:param name="modules"/>
336
337     <xsl:text>-</xsl:text>
338     <xsl:for-each select="$modules">
339       <xsl:variable name="sname" select="translate(normalize-space(name),$lowercase,$uppercase)"/>
340
341       <xsl:text> </xsl:text>
342       <xsl:value-of select="$sname"/>
343       <xsl:text> </xsl:text>
344       <xsl:call-template name="module-translatename">
345         <xsl:with-param name="name" select="$sname"/>
346       </xsl:call-template>
347       <xsl:text> -</xsl:text>
348     </xsl:for-each>
349
350   </xsl:template>
351   <!-- /module-translist -->
352
353   </xsl:stylesheet>