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]) > 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, '<')"> 114 <xsl:call-template name="make-id"> 115 <xsl:with-param name="name" 116 select="concat(substring-before($name, '<'), '_lt_', substring-after($name, '<'))"/> 117 </xsl:call-template> 118 </xsl:when> 119 <xsl:when test="contains($name, '>')"> 120 <xsl:call-template name="make-id"> 121 <xsl:with-param name="name" 122 select="concat(substring-before($name, '>'), '_gt_', substring-after($name, '>'))"/> 123 </xsl:call-template> 124 </xsl:when> 125 <xsl:when test="contains($name, '&')"> 126 <xsl:call-template name="make-id"> 127 <xsl:with-param name="name" 128 select="concat(substring-before($name, '&'), '_amp_', substring-after($name, '&'))"/> 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(.) > 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]) > 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]) > 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) > 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