2 <!DOCTYPE xsl:stylesheet [
3 <!ENTITY nbsp SYSTEM "util/nbsp.xml">
5 <xsl:stylesheet version="1.0"
6 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
7 xmlns="http://www.w3.org/1999/xhtml">
10 <!-- Builds the moduleindex page -->
12 <xsl:template match="moduleindex">
13 <html xml:lang="{$messages/@lang}" lang="{$messages/@lang}">
14 <xsl:call-template name="head"/>
17 </xsl:text> <!-- insert line break -->
19 <body id="module-index">
20 <xsl:call-template name="top"/>
22 <div id="page-content">
25 <xsl:value-of select="title"/>
29 </xsl:text> <!-- insert line break -->
31 <xsl:apply-templates select="summary" />
36 </xsl:text> <!-- insert line break -->
38 <xsl:if test="not($is-chm) or seealso">
40 <xsl:if test="not($is-chm)">
44 </xsl:text> <!-- insert line break -->
47 <img src="{$path}/images/down.gif" alt="" />
48 <xsl:text> </xsl:text>
50 <xsl:value-of select="$messages/message[@name='corefeatures']"/>
55 <img src="{$path}/images/down.gif" alt="" />
56 <xsl:text> </xsl:text>
58 <xsl:value-of select="$messages/message[@name='othermodules']"/>
62 </xsl:if> <!-- chm -->
64 <xsl:if test="seealso">
66 <xsl:value-of select="$messages/message[@name='seealso']"/>
70 </xsl:text> <!-- insert line break -->
75 </xsl:text> <!-- insert line break -->
77 <xsl:for-each select="seealso">
79 <xsl:apply-templates/>
83 </xsl:text> <!-- insert line break -->
88 </div> <!-- /quickview -->
89 </xsl:if> <!-- chm foo -->
92 </xsl:text> <!-- insert line break -->
94 <xsl:call-template name="toplink"/>
97 </xsl:text> <!-- insert line break -->
101 <a name="core" id="core">
102 <xsl:value-of select="$messages/message[@name='corefeatures']"/>
107 </xsl:text> <!-- insert line break -->
110 <!-- put core and mpm_common on top -->
115 </xsl:text> <!-- insert line break -->
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"/>
123 <xsl:apply-templates select="document(modulefilelist/modulefile[starts-with(.,'core.xml')])/modulesynopsis/description"/>
127 </xsl:text> <!-- insert line break -->
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"/>
134 <dd class="separate">
135 <xsl:apply-templates select="document(modulefilelist/modulefile[starts-with(.,'mpm_common.xml')])/modulesynopsis/description"/>
137 <!-- /core, mpm_common -->
140 </xsl:text> <!-- insert line break -->
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"/>
149 <xsl:for-each select="$mpmmodules">
150 <xsl:sort select="substring-before(substring-after($translist, concat('- ', translate(normalize-space(name),$lowercase,$uppercase), ' ')), ' -')"/>
153 <a href="{name}.html">
154 <xsl:value-of select="name"/>
158 <xsl:apply-templates select="description"/>
162 </xsl:text> <!-- insert line break -->
168 <!-- /core section -->
171 </xsl:text> <!-- insert line break -->
173 <xsl:call-template name="toplink"/>
176 </xsl:text> <!-- insert line break -->
178 <div class="section">
180 <a name="other" id="other">
181 <xsl:value-of select="$messages/message[@name='othermodules']"/>
186 </xsl:text> <!-- insert line break -->
188 <xsl:variable name="modules" select="document(modulefilelist/modulefile)/modulesynopsis[status!='MPM' and status!='Core' and status!='Obsolete']"/>
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"/>
199 <xsl:call-template name="letter-bar">
200 <xsl:with-param name="letters" select="$start-letters"/>
201 <xsl:with-param name="first" select="true()"/>
204 <!-- /letter line -->
207 </xsl:text> <!-- insert line break -->
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"/>
216 <!-- /modules section -->
219 <!-- /page-content -->
222 </xsl:text> <!-- insert line break -->
224 <xsl:call-template name="bottom"/>
227 </xsl:text> <!-- insert line break -->
232 <!-- /moduleindex -->
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 -->
240 <xsl:template name="mindex-of-letter">
241 <xsl:param name="letters-todo"/>
242 <xsl:param name="modules"/>
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"/>
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), ' ')), ' -')"/>
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>
261 <xsl:value-of select="name"/>
265 <xsl:apply-templates select="description"/>
269 </xsl:text> <!-- insert a line break -->
271 </xsl:for-each> <!-- /directives -->
273 <!-- call next letter, if there is -->
274 <xsl:if test="string-length($letters-todo) > 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"/>
282 <!-- /mindex-of-letter -->
286 <!-- collect start letters of modules -->
288 <xsl:template name="module-startletters">
289 <xsl:param name="modules"/>
291 <xsl:variable name="translist">
292 <xsl:call-template name="module-translist">
293 <xsl:with-param name="modules" select="$modules"/>
297 <xsl:call-template name="_squeeze-letters">
298 <xsl:with-param name="lastletter" select="''"/>
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)"/>
309 <!-- /module-startletters -->
313 <!-- define module name translations for sorting -->
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) -->
320 <!-- So, the translation from modulename to sortname -->
321 <!-- can be done with the expression below: -->
324 substring-after($translist,
326 translate(modulename,
334 <xsl:template name="module-translist">
335 <xsl:param name="modules"/>
337 <xsl:text>-</xsl:text>
338 <xsl:for-each select="$modules">
339 <xsl:variable name="sname" select="translate(normalize-space(name),$lowercase,$uppercase)"/>
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"/>
347 <xsl:text> -</xsl:text>
351 <!-- /module-translist -->