Utils: Add some type traits in type_traits.hh
[senf.git] / doclib / html-munge.xsl
1 <?xml version="1.0" encoding="utf-8"?>\r
2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  version="1.0">\r
3 \r
4   <xsl:output \r
5     method="html" \r
6     encoding="html" \r
7     doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"\r
8     doctype-system="http://www.w3.org/TR/html4/loose.dtd"/>\r
9 \r
10   <xsl:param name="topdir" select="''"/>\r
11   \r
12   <xsl:template match="*" name="copy">\r
13     <xsl:copy>\r
14       <xsl:call-template name="copy-attributes"/>\r
15       <xsl:apply-templates/>\r
16     </xsl:copy>\r
17   </xsl:template>\r
18 \r
19   <xsl:template name="copy-attributes">\r
20     <xsl:for-each select="@*">\r
21       <xsl:attribute name="{name(current())}">\r
22         <xsl:choose>\r
23           <xsl:when test="contains(current(),'@TOPDIR@')">\r
24             <xsl:value-of select="substring-before(current(),'@TOPDIR@')"/>\r
25             <xsl:value-of select="$topdir"/>\r
26             <xsl:value-of select="substring-after(current(),'@TOPDIR@')"/>\r
27           </xsl:when>\r
28           <xsl:otherwise>\r
29             <xsl:value-of select="current()"/>\r
30           </xsl:otherwise>\r
31         </xsl:choose>\r
32       </xsl:attribute>\r
33     </xsl:for-each>\r
34   </xsl:template>\r
35 \r
36   <!-- Replace @TOPDIR@ with relative top directory path -->\r
37 \r
38   <xsl:template match="@*[contains(current(),'@TOPDIR@')]">\r
39     <xsl:value-of select="substring-before(current(),'@TOPDIR@')"/>\r
40     <xsl:value-of select="$topdir"/>\r
41     <xsl:value-of select="substring-after(current(),'@TOPDIR@')"/>\r
42   </xsl:template>\r
43   \r
44   <!-- Add 'class' attribute to some special paragraphs/lists -->\r
45   \r
46   <xsl:template name="add-class">\r
47     <xsl:param name="class"/>\r
48     <xsl:copy>\r
49       <xsl:call-template name="copy-attributes"/>\r
50       <xsl:attribute name="class"><xsl:value-of select="$class"/></xsl:attribute>\r
51       <xsl:apply-templates/>\r
52     </xsl:copy>\r
53   </xsl:template>\r
54 \r
55   <!-- Add '<br/>' tag after every ', ' -->\r
56   <!-- This code is not very robust, it works with the doxygen output though -->\r
57 \r
58   <xsl:template name="break-comma">\r
59     <xsl:copy>\r
60       <xsl:call-template name="copy-attributes"/>\r
61       <xsl:attribute name="class">commalist</xsl:attribute>\r
62       <xsl:apply-templates mode="break-comma"/>\r
63     </xsl:copy>\r
64   </xsl:template>\r
65  \r
66   <xsl:template match="text()[1]" mode="break-comma">\r
67     <xsl:value-of select="current()"/><br/>\r
68   </xsl:template>\r
69 \r
70   <xsl:template match="*" mode="break-comma">\r
71     <xsl:call-template name="copy"/>\r
72   </xsl:template>\r
73 \r
74   <xsl:template match="text()[contains(current(),' and') or contains(current(),'and ')]" mode="break-comma" priority="1">\r
75     <xsl:value-of select="substring-before(current(),'and')"/>\r
76     <br/>\r
77     <xsl:value-of select="substring-after(current(),'and')"/>\r
78   </xsl:template>\r
79 \r
80   <xsl:template match="text()[contains(current(),',')]" mode="break-comma">\r
81     <xsl:value-of select="substring-before(current(),',')"/>\r
82     <xsl:text>,</xsl:text><br/>\r
83     <xsl:value-of select="substring-after(current(),',')"/>\r
84   </xsl:template>\r
85 \r
86   <!-- ====================================================================== -->\r
87 \r
88   <!-- Hack Glossary menu highlight -->\r
89 \r
90   <xsl:template match="div[@class='tabs menu']/ul[1]">\r
91     <xsl:choose>\r
92       <xsl:when test="//h1[.//text()='Glossary']">\r
93         <xsl:call-template name="add-class">\r
94           <xsl:with-param name="class">glossary</xsl:with-param>\r
95         </xsl:call-template>\r
96       </xsl:when>\r
97       <xsl:otherwise>\r
98         <xsl:copy>\r
99           <xsl:call-template name="copy-attributes"/>\r
100           <xsl:apply-templates/>\r
101         </xsl:copy>\r
102       </xsl:otherwise>\r
103     </xsl:choose>\r
104   </xsl:template>\r
105 \r
106   <!-- Autogenerate table-of-contents for a page -->\r
107 \r
108   <xsl:template match="div[@id='autotoc']">\r
109     <xsl:copy>\r
110       <xsl:call-template name="copy-attributes"/>\r
111       <h1>Contents</h1>\r
112       <ul>\r
113         <xsl:for-each select="following::h2|following::h3|following::h4">\r
114           <xsl:element name="li">\r
115             <xsl:attribute name="class">\r
116               <xsl:value-of select="concat('level_',local-name())"/>\r
117             </xsl:attribute>\r
118             <b><xsl:call-template name="section-number"/><xsl:text> </xsl:text></b>\r
119             <xsl:element name="a">\r
120               <xsl:choose>\r
121                 <xsl:when test="a/@name">\r
122                   <xsl:attribute name="href">\r
123                     <xsl:value-of select="concat('#',a/@name)"/>\r
124                   </xsl:attribute>\r
125                 </xsl:when>\r
126                 <xsl:otherwise>\r
127                   <xsl:attribute name="href">\r
128                     <xsl:text>#autotoc-</xsl:text>\r
129                     <xsl:call-template name="section-number"/>\r
130                   </xsl:attribute>\r
131                 </xsl:otherwise>\r
132               </xsl:choose>\r
133               <xsl:value-of select="string(current())"/>\r
134             </xsl:element>\r
135           </xsl:element>\r
136         </xsl:for-each>\r
137       </ul>\r
138     </xsl:copy>\r
139   </xsl:template>\r
140 \r
141   <xsl:template name="section-number">\r
142     <xsl:number level="any" from="div[@id='autotoc']" count="h2"/>\r
143     <xsl:text>.</xsl:text>\r
144     <xsl:if test="self::h3|self::h4">\r
145       <xsl:number level="any" from="h2" count="h3"/>\r
146       <xsl:text>.</xsl:text>\r
147     </xsl:if>\r
148     <xsl:if test="self::h4">\r
149       <xsl:number level="any" from="h3" count="h4"/>\r
150       <xsl:text>.</xsl:text>\r
151     </xsl:if>\r
152   </xsl:template>\r
153   \r
154   <xsl:template match="h2|h3|h4">\r
155     <xsl:copy>\r
156       <xsl:call-template name="copy-attributes"/>\r
157       <xsl:choose>\r
158         <xsl:when test="preceding::div[@id='autotoc']">\r
159           <xsl:call-template name="section-number"/>\r
160           <xsl:text> </xsl:text>\r
161           <xsl:choose>\r
162             <xsl:when test="a">\r
163               <xsl:apply-templates/>\r
164             </xsl:when>\r
165             <xsl:otherwise>\r
166               <xsl:element name="a">\r
167                 <xsl:attribute name="class"><xsl:text>anchor</xsl:text></xsl:attribute>\r
168                 <xsl:attribute name="name">\r
169                   <xsl:text>autotoc-</xsl:text>\r
170                   <xsl:call-template name="section-number"/>\r
171                 </xsl:attribute>\r
172                 <xsl:apply-templates/>\r
173               </xsl:element>\r
174             </xsl:otherwise>\r
175           </xsl:choose>\r
176         </xsl:when>\r
177         <xsl:otherwise>\r
178           <xsl:apply-templates/>\r
179         </xsl:otherwise>\r
180       </xsl:choose>\r
181     </xsl:copy>\r
182   </xsl:template>\r
183 \r
184   <!-- Build dia image-map from special div/span elements -->\r
185   <xsl:template match="div[@class='diamap']">\r
186     <xsl:element name="map">\r
187       <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>\r
188       <xsl:for-each select="span">\r
189         <xsl:if test="a">\r
190           <xsl:variable name="name" select="string(a[1])"/>\r
191           <xsl:element name="area">\r
192             <xsl:attribute name="shape">rect</xsl:attribute>\r
193             <xsl:attribute name="alt"><xsl:value-of select="$name"/></xsl:attribute>\r
194             <xsl:attribute name="title"><xsl:value-of select="$name"/></xsl:attribute>\r
195             <xsl:attribute name="href"><xsl:value-of select="a[1]/@href"/></xsl:attribute>\r
196             <xsl:attribute name="coords"><xsl:value-of select="@coords"/></xsl:attribute>\r
197           </xsl:element>\r
198         </xsl:if>\r
199       </xsl:for-each>\r
200     </xsl:element>\r
201   </xsl:template>\r
202 \r
203   <!-- Remove the automatically inserted search form (we build our own) -->\r
204   <xsl:template match="li[form]"> \r
205   </xsl:template>\r
206 \r
207   <xsl:template match="table[preceding-sibling::*[1][self::div][@class='qindex']]">\r
208     <xsl:call-template name="add-class">\r
209       <xsl:with-param name="class">qindextable</xsl:with-param>\r
210     </xsl:call-template>\r
211   </xsl:template>\r
212   \r
213   <xsl:template match="dl[dt/b/a/text()='Bug:']">\r
214     <xsl:call-template name="add-class">\r
215       <xsl:with-param name="class">xref-bug</xsl:with-param>\r
216     </xsl:call-template>\r
217   </xsl:template>\r
218 \r
219   <xsl:template match="dl[dt/b/a/text()='Fix:']">\r
220     <xsl:call-template name="add-class">\r
221       <xsl:with-param name="class">xref-fix</xsl:with-param>\r
222     </xsl:call-template>\r
223   </xsl:template>\r
224 \r
225   <xsl:template match="dl[dt/b/a/text()='Todo:']">\r
226     <xsl:call-template name="add-class">\r
227       <xsl:with-param name="class">xref-todo</xsl:with-param>\r
228     </xsl:call-template>\r
229   </xsl:template>\r
230 \r
231   <xsl:template match="dl[dt/b/a/text()='Idea:']">\r
232     <xsl:call-template name="add-class">\r
233       <xsl:with-param name="class">xref-idea</xsl:with-param>\r
234     </xsl:call-template>\r
235   </xsl:template>\r
236 \r
237   <xsl:template match="dl[dt/b/text()='Parameters:']|dl[dt/b/text()='Template Parameters:']">\r
238     <xsl:call-template name="add-class">\r
239       <xsl:with-param name="class">parameters</xsl:with-param>\r
240     </xsl:call-template>\r
241   </xsl:template>\r
242 \r
243   <xsl:template match="dl[dt/b/text()='Implementation note:']">\r
244     <xsl:call-template name="add-class">\r
245       <xsl:with-param name="class">implementation</xsl:with-param>\r
246     </xsl:call-template>\r
247   </xsl:template>\r
248 \r
249   <xsl:template match="table[descendant::td[@class='memItemLeft']]">\r
250     <xsl:call-template name="add-class">\r
251       <xsl:with-param name="class">members</xsl:with-param>\r
252     </xsl:call-template>\r
253   </xsl:template>\r
254 \r
255   <xsl:template match="a[@href=string(current())]" priority="1">\r
256     <xsl:call-template name="add-class">\r
257       <xsl:with-param name="class">literal</xsl:with-param>\r
258     </xsl:call-template>\r
259   </xsl:template>\r
260 \r
261   <xsl:template match="a[contains(@href,'http://')]">\r
262     <xsl:call-template name="add-class">\r
263       <xsl:with-param name="class">ext</xsl:with-param>\r
264     </xsl:call-template>\r
265   </xsl:template>\r
266 \r
267   <xsl:template match="a[not(@href)]">\r
268     <xsl:call-template name="add-class">\r
269       <xsl:with-param name="class">anchor</xsl:with-param>\r
270     </xsl:call-template>\r
271   </xsl:template>\r
272 \r
273   <xsl:template match="div[@class='memdoc']/p[1]">\r
274     <xsl:call-template name="add-class">\r
275       <xsl:with-param name="class">memtitle</xsl:with-param>\r
276     </xsl:call-template>\r
277   </xsl:template>\r
278 \r
279   <xsl:template match="p[starts-with(text(),'Definition at line ')]">\r
280     <xsl:call-template name="add-class">\r
281       <xsl:with-param name="class">sourceline</xsl:with-param>\r
282     </xsl:call-template>\r
283   </xsl:template>\r
284 \r
285   <xsl:template match="div[@class='memdoc']/p[starts-with(text(),'References ')]">\r
286     <xsl:call-template name="add-class">\r
287       <xsl:with-param name="class">references</xsl:with-param>\r
288     </xsl:call-template>\r
289   </xsl:template>\r
290 \r
291   <xsl:template match="div[@class='memdoc']/p[starts-with(text(),'Referenced by ')]">\r
292     <xsl:call-template name="add-class">\r
293       <xsl:with-param name="class">referencedby</xsl:with-param>\r
294     </xsl:call-template>\r
295   </xsl:template>\r
296 \r
297   <xsl:template match="div[@class='memdoc']/p[starts-with(text(),'Reimplemented from ')]">\r
298     <xsl:call-template name="add-class">\r
299       <xsl:with-param name="class">reimplementedfrom</xsl:with-param>\r
300     </xsl:call-template>\r
301   </xsl:template>\r
302 \r
303   <xsl:template match="div[@class='memdoc']/p[starts-with(text(),'Reimplemented in ')]">\r
304     <xsl:call-template name="add-class">\r
305       <xsl:with-param name="class">reimplementedin</xsl:with-param>\r
306     </xsl:call-template>\r
307   </xsl:template>\r
308 \r
309   <xsl:template match="div[@class='memdoc']/p[starts-with(text(),'Implemented in ')]">\r
310     <xsl:call-template name="add-class">\r
311       <xsl:with-param name="class">implementedin</xsl:with-param>\r
312     </xsl:call-template>\r
313   </xsl:template>\r
314 \r
315   <xsl:template match="p[starts-with(text(),'Inherited by ')]">\r
316     <xsl:call-template name="break-comma"/>\r
317   </xsl:template>\r
318 \r
319   <xsl:template match="p[starts-with(text(),'Inherits ')]">\r
320     <xsl:call-template name="break-comma"/>\r
321   </xsl:template>\r
322 \r
323   <!-- Remove external items from the namespace index -->\r
324   <xsl:template match="div[@id='content2']/table[contains(preceding-sibling::h1/text(),'Namespace Reference')]/tr[td[@class='memItemRight']/a[1][@class='elRef'][@doxygen]]">\r
325   </xsl:template>\r
326   \r
327   <!-- Remove [external] references from the modules page -->\r
328   <xsl:template match="div[@id='content2']/ul/li[a/@class='elRef'][a/@doxygen][code/text()='[external]'][not(ul)]">\r
329   </xsl:template>\r
330 \r
331   <!-- Insert 'senf/'  into include paths -->\r
332   <xsl:template match="code[starts-with(text(),'#include &lt;')]/a">\r
333     <xsl:copy>\r
334       <xsl:call-template name="copy-attributes"/>\r
335       <xsl:text>senf/</xsl:text>\r
336       <xsl:apply-templates/>\r
337     </xsl:copy>\r
338   </xsl:template>\r
339 \r
340 </xsl:stylesheet>\r