• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?xml version="1.0" encoding="utf-8"?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
3
4<!--
5  Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6
7  Distributed under the Boost Software License, Version 1.0. (See accompanying
8  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9-->
10
11<xsl:output method="text"/>
12<xsl:strip-space elements="*"/>
13
14
15<xsl:variable name="newline">
16<xsl:text>
17</xsl:text>
18</xsl:variable>
19
20
21<xsl:template match="/doxygen">
22<xsl:text>[/
23 / Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
24 /
25 / Distributed under the Boost Software License, Version 1.0. (See accompanying
26 / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
27 /]
28
29[section:tutorial Tutorial]
30
31</xsl:text>
32
33  <xsl:for-each select="compounddef[@kind = 'page' and @id = 'indexpage']">
34    <xsl:apply-templates select="detaileddescription"/>
35  </xsl:for-each>
36
37  <xsl:for-each select="
38      compounddef[
39        @kind = 'page' and
40        @id != 'indexpage' and
41        not(contains(@id, 'src'))]">
42    <xsl:text>[section:</xsl:text>
43    <xsl:value-of select="concat(@id, ' ', title)"/>
44    <xsl:text>]</xsl:text>
45    <xsl:value-of select="$newline"/>
46    <xsl:value-of select="$newline"/>
47    <xsl:apply-templates select="detaileddescription"/>
48    <xsl:variable name="srcid" select="concat(@id, 'src')"/>
49    <xsl:if test="count(/doxygen/compounddef[@id = $srcid]) &gt; 0">
50      <xsl:value-of select="$newline"/>
51      <xsl:value-of select="$newline"/>
52      <xsl:text>[section:src </xsl:text>
53      <xsl:value-of select="/doxygen/compounddef[@id = $srcid]/title"/>
54      <xsl:text>]</xsl:text>
55      <xsl:value-of select="$newline"/>
56      <xsl:value-of select="$newline"/>
57      <xsl:apply-templates select="/doxygen/compounddef[@id = $srcid]/detaileddescription"/>
58      <xsl:text>[endsect]</xsl:text>
59      <xsl:value-of select="$newline"/>
60      <xsl:value-of select="$newline"/>
61    </xsl:if>
62    <xsl:text>[endsect]</xsl:text>
63    <xsl:value-of select="$newline"/>
64    <xsl:value-of select="$newline"/>
65  </xsl:for-each>
66
67  <xsl:value-of select="$newline"/>
68  <xsl:text>[endsect]</xsl:text>
69  <xsl:value-of select="$newline"/>
70
71</xsl:template>
72
73
74<!--========== Utilities ==========-->
75
76<xsl:template name="strip-asio-ns">
77  <xsl:param name="name"/>
78  <xsl:choose>
79    <xsl:when test="contains($name, 'boost::system::is_error_code_enum')">
80      <xsl:value-of select="$name"/>
81    </xsl:when>
82    <xsl:when test="contains($name, 'asio::')">
83      <xsl:value-of select="substring-after($name, 'asio::')"/>
84    </xsl:when>
85    <xsl:otherwise>
86      <xsl:value-of select="$name"/>
87    </xsl:otherwise>
88  </xsl:choose>
89</xsl:template>
90
91
92<xsl:template name="make-id">
93  <xsl:param name="name"/>
94  <xsl:choose>
95    <xsl:when test="contains($name, '::')">
96      <xsl:call-template name="make-id">
97        <xsl:with-param name="name"
98         select="concat(substring-before($name, '::'), '__', substring-after($name, '::'))"/>
99      </xsl:call-template>
100    </xsl:when>
101    <xsl:when test="contains($name, '=')">
102      <xsl:call-template name="make-id">
103        <xsl:with-param name="name"
104         select="concat(substring-before($name, '='), '_eq_', substring-after($name, '='))"/>
105      </xsl:call-template>
106    </xsl:when>
107    <xsl:when test="contains($name, '!')">
108      <xsl:call-template name="make-id">
109        <xsl:with-param name="name"
110         select="concat(substring-before($name, '!'), '_not_', substring-after($name, '!'))"/>
111      </xsl:call-template>
112    </xsl:when>
113    <xsl:when test="contains($name, '&lt;')">
114      <xsl:call-template name="make-id">
115        <xsl:with-param name="name"
116         select="concat(substring-before($name, '&lt;'), '_lt_', substring-after($name, '&lt;'))"/>
117      </xsl:call-template>
118    </xsl:when>
119    <xsl:when test="contains($name, '&gt;')">
120      <xsl:call-template name="make-id">
121        <xsl:with-param name="name"
122         select="concat(substring-before($name, '&gt;'), '_gt_', substring-after($name, '&gt;'))"/>
123      </xsl:call-template>
124    </xsl:when>
125    <xsl:when test="contains($name, '&amp;')">
126      <xsl:call-template name="make-id">
127        <xsl:with-param name="name"
128         select="concat(substring-before($name, '&amp;'), '_amp_', substring-after($name, '&amp;'))"/>
129      </xsl:call-template>
130    </xsl:when>
131    <xsl:when test="contains($name, '+')">
132      <xsl:call-template name="make-id">
133        <xsl:with-param name="name"
134         select="concat(substring-before($name, '+'), '_plus_', substring-after($name, '+'))"/>
135      </xsl:call-template>
136    </xsl:when>
137    <xsl:when test="contains($name, '~')">
138      <xsl:call-template name="make-id">
139        <xsl:with-param name="name"
140         select="concat(substring-before($name, '~'), '_', substring-after($name, '~'))"/>
141      </xsl:call-template>
142    </xsl:when>
143    <xsl:when test="contains($name, ' ')">
144      <xsl:call-template name="make-id">
145        <xsl:with-param name="name"
146         select="concat(substring-before($name, ' '), '_', substring-after($name, ' '))"/>
147      </xsl:call-template>
148    </xsl:when>
149    <xsl:when test="contains($name, 'boost__posix_time__ptime')">
150      <xsl:call-template name="make-id">
151        <xsl:with-param name="name"
152         select="concat(substring-before($name, 'boost__posix_time__ptime'), 'ptime', substring-after($name, 'boost__posix_time__ptime'))"/>
153      </xsl:call-template>
154    </xsl:when>
155    <xsl:otherwise>
156      <xsl:value-of select="$name"/>
157    </xsl:otherwise>
158  </xsl:choose>
159</xsl:template>
160
161
162<xsl:template name="replace-scope-marker">
163  <xsl:param name="text"/>
164  <xsl:choose>
165    <xsl:when test="contains($text, '_1_1')">
166      <xsl:call-template name="replace-scope-marker">
167        <xsl:with-param name="text"
168         select="concat(substring-before($text, '_1_1'), '::', substring-after($text, '_1_1'))"/>
169      </xsl:call-template>
170    </xsl:when>
171    <xsl:otherwise>
172      <xsl:value-of select="$text"/>
173    </xsl:otherwise>
174  </xsl:choose>
175</xsl:template>
176
177
178<xsl:template name="refid-to-anchor">
179  <xsl:param name="text"/>
180  <xsl:variable name="scoped-text">
181    <xsl:call-template name="replace-scope-marker">
182      <xsl:with-param name="text" select="$text"/>
183    </xsl:call-template>
184  </xsl:variable>
185  <xsl:value-of select="substring-after($scoped-text, '_1')"/>
186</xsl:template>
187
188
189<!--========== Markup ==========-->
190
191<xsl:template match="para">
192  <xsl:apply-templates/>
193  <xsl:value-of select="$newline"/>
194  <xsl:value-of select="$newline"/>
195</xsl:template>
196
197
198<xsl:template match="title">
199  <xsl:variable name="title">
200    <xsl:value-of select="."/>
201  </xsl:variable>
202  <xsl:if test="string-length($title) > 0">
203    <xsl:text>[heading </xsl:text>
204    <xsl:value-of select="."/>
205    <xsl:text>]</xsl:text>
206    <xsl:value-of select="$newline"/>
207    <xsl:value-of select="$newline"/>
208  </xsl:if>
209</xsl:template>
210
211
212<xsl:template match="programlisting">
213  <xsl:value-of select="$newline"/>
214  <xsl:apply-templates/>
215  <xsl:value-of select="$newline"/>
216</xsl:template>
217
218
219<xsl:template match="codeline">
220  <xsl:if test="string-length(.) &gt; 0">
221    <xsl:text>  ``''''''``</xsl:text>
222  </xsl:if>
223  <xsl:apply-templates mode="codeline"/>
224  <xsl:value-of select="$newline"/>
225</xsl:template>
226
227
228<xsl:template match="sp">
229  <xsl:text> </xsl:text>
230</xsl:template>
231
232
233<xsl:template match="sp" mode="codeline">
234  <xsl:text> </xsl:text>
235</xsl:template>
236
237
238<xsl:template match="linebreak">
239  <xsl:value-of select="$newline"/>
240  <xsl:value-of select="$newline"/>
241</xsl:template>
242
243
244<xsl:template match="listitem">
245  <xsl:text>* </xsl:text>
246  <xsl:apply-templates/>
247  <xsl:value-of select="$newline"/>
248</xsl:template>
249
250
251<xsl:template match="emphasis">
252  <xsl:text>[*</xsl:text>
253  <xsl:value-of select="."/>
254  <xsl:text>]</xsl:text>
255</xsl:template>
256
257
258<xsl:template match="computeroutput">
259  <xsl:text>`</xsl:text>
260  <xsl:value-of select="."/>
261  <xsl:text>`</xsl:text>
262</xsl:template>
263
264
265<xsl:template match="text()">
266  <xsl:variable name="text" select="."/>
267  <xsl:variable name="starts-with-whitespace" select="
268      starts-with($text, ' ') or starts-with($text, $newline)"/>
269  <xsl:variable name="preceding-node-name">
270    <xsl:for-each select="preceding-sibling::*">
271      <xsl:if test="position() = last()">
272        <xsl:value-of select="local-name()"/>
273      </xsl:if>
274    </xsl:for-each>
275  </xsl:variable>
276  <xsl:variable name="after-newline" select="
277      $preceding-node-name = 'programlisting' or
278      $preceding-node-name = 'linebreak'"/>
279  <xsl:choose>
280    <xsl:when test="$starts-with-whitespace and $after-newline">
281      <xsl:call-template name="escape-text">
282        <xsl:with-param name="text">
283          <xsl:call-template name="strip-leading-whitespace">
284            <xsl:with-param name="text" select="$text"/>
285          </xsl:call-template>
286        </xsl:with-param>
287      </xsl:call-template>
288    </xsl:when>
289    <xsl:otherwise>
290      <xsl:call-template name="escape-text">
291        <xsl:with-param name="text" select="$text"/>
292      </xsl:call-template>
293    </xsl:otherwise>
294  </xsl:choose>
295</xsl:template>
296
297
298<xsl:template name="strip-leading-whitespace">
299  <xsl:param name="text"/>
300  <xsl:choose>
301    <xsl:when test="starts-with($text, ' ')">
302      <xsl:call-template name="strip-leading-whitespace">
303        <xsl:with-param name="text" select="substring($text, 2)"/>
304      </xsl:call-template>
305    </xsl:when>
306    <xsl:when test="starts-with($text, $newline)">
307      <xsl:call-template name="strip-leading-whitespace">
308        <xsl:with-param name="text" select="substring($text, 2)"/>
309      </xsl:call-template>
310    </xsl:when>
311    <xsl:otherwise>
312      <xsl:value-of select="$text"/>
313    </xsl:otherwise>
314  </xsl:choose>
315</xsl:template>
316
317
318<xsl:template name="escape-text">
319  <xsl:param name="text"/>
320  <xsl:choose>
321    <xsl:when test="contains($text, '_')">
322      <xsl:value-of select="substring-before($text, '_')"/>
323      <xsl:text>\_</xsl:text>
324      <xsl:call-template name="escape-text">
325        <xsl:with-param name="text" select="substring-after($text, '_')"/>
326      </xsl:call-template>
327    </xsl:when>
328    <xsl:otherwise>
329      <xsl:value-of select="$text"/>
330    </xsl:otherwise>
331  </xsl:choose>
332</xsl:template>
333
334
335<xsl:template match="ref[@kindref='compound']">
336  <xsl:variable name="name">
337    <xsl:value-of select="."/>
338  </xsl:variable>
339  <xsl:variable name="refid">
340    <xsl:value-of select="@refid"/>
341  </xsl:variable>
342  <xsl:choose>
343    <xsl:when test="count(/doxygen/compounddef[@id=$refid]) &gt; 0">
344      <xsl:text>[link boost_asio.tutorial.</xsl:text>
345      <xsl:choose>
346        <xsl:when test="contains($refid, 'src')">
347          <xsl:value-of select="substring-before($refid, 'src')"/>
348          <xsl:text>.src</xsl:text>
349        </xsl:when>
350        <xsl:otherwise>
351          <xsl:value-of select="$refid"/>
352        </xsl:otherwise>
353      </xsl:choose>
354      <xsl:value-of select="concat(' ', .)"/>
355      <xsl:text>]</xsl:text>
356    </xsl:when>
357    <xsl:when test="contains($name, 'asio::')">
358      <xsl:variable name="ref-name">
359        <xsl:call-template name="strip-asio-ns">
360          <xsl:with-param name="name" select="$name"/>
361        </xsl:call-template>
362      </xsl:variable>
363      <xsl:variable name="ref-id">
364        <xsl:call-template name="make-id">
365          <xsl:with-param name="name" select="$ref-name"/>
366        </xsl:call-template>
367      </xsl:variable>
368[link boost_asio.reference.<xsl:value-of select="$ref-id"/><xsl:text> </xsl:text><xsl:value-of
369 select="$ref-name"/>]</xsl:when>
370    <xsl:otherwise>
371      <xsl:apply-templates/>
372    </xsl:otherwise>
373  </xsl:choose>
374</xsl:template>
375
376
377<xsl:template match="ref[@kindref='member']">
378  <xsl:variable name="refid">
379    <xsl:value-of select="@refid"/>
380  </xsl:variable>
381  <xsl:variable name="text">
382    <xsl:call-template name="strip-asio-ns">
383      <xsl:with-param name="name" select="."/>
384    </xsl:call-template>
385  </xsl:variable>
386  <xsl:choose>
387    <xsl:when test="$refid='index_1index'">
388      <xsl:text>[link boost_asio.tutorial </xsl:text>
389      <xsl:value-of select="$text"/>
390      <xsl:text>]</xsl:text>
391    </xsl:when>
392    <xsl:when test="@external='reference.tags'">
393      <xsl:variable name="anchor">
394        <xsl:call-template name="refid-to-anchor">
395          <xsl:with-param name="text" select="$refid"/>
396        </xsl:call-template>
397      </xsl:variable>
398      <xsl:choose>
399        <xsl:when test="count(document('reference.tags')/tagfile/compound[@kind='class']/member[anchor=$anchor]) &gt; 0">
400          <xsl:for-each select="document('reference.tags')/tagfile/compound[@kind='class']/member[anchor=$anchor]">
401            <xsl:variable name="scope">
402              <xsl:call-template name="make-id">
403                <xsl:with-param name="name">
404                  <xsl:call-template name="strip-asio-ns">
405                    <xsl:with-param name="name" select="../name"/>
406                  </xsl:call-template>
407                </xsl:with-param>
408              </xsl:call-template>
409            </xsl:variable>
410            <xsl:variable name="name">
411              <xsl:call-template name="make-id">
412                <xsl:with-param name="name" select="name"/>
413              </xsl:call-template>
414            </xsl:variable>
415            <xsl:text>[link boost_asio.reference.</xsl:text>
416            <xsl:if test="string-length($scope) &gt; 0">
417              <xsl:value-of select="$scope"/><xsl:text>.</xsl:text>
418            </xsl:if>
419            <xsl:value-of select="$name"/>
420            <xsl:text> </xsl:text><xsl:value-of select="$text"/><xsl:text>]</xsl:text>
421          </xsl:for-each>
422        </xsl:when>
423        <xsl:otherwise>
424          <xsl:apply-templates/>
425        </xsl:otherwise>
426      </xsl:choose>
427    </xsl:when>
428    <xsl:otherwise>
429      <xsl:apply-templates/>
430    </xsl:otherwise>
431  </xsl:choose>
432</xsl:template>
433
434
435<xsl:template match="ulink">
436  <xsl:text>[@</xsl:text>
437  <xsl:value-of select="@url"/>
438  <xsl:text> </xsl:text>
439  <xsl:value-of select="."/>
440  <xsl:text>]</xsl:text>
441</xsl:template>
442
443
444</xsl:stylesheet>
445