1<?xml version="1.0" encoding="utf-8"?> 2<!-- 3 Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com> 4 5 Distributed under the Boost Software License, Version 1.0. 6 (See accompanying file LICENSE_1_0.txt or copy at 7 http://www.boost.org/LICENSE_1_0.txt) 8 --> 9<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 10 version="1.0"> 11 <xsl:param name="boost.syntax.highlight">1</xsl:param> 12 13 <xsl:template name="source-highlight"> 14 <xsl:param name="text" select="."/> 15 <xsl:choose> 16 <xsl:when test="$boost.syntax.highlight='1'"> 17 <xsl:call-template name="highlight-text"> 18 <xsl:with-param name="text" select="$text"/> 19 </xsl:call-template> 20 </xsl:when> 21 <xsl:otherwise> 22 <xsl:value-of select="$text"/> 23 </xsl:otherwise> 24 </xsl:choose> 25 </xsl:template> 26 27 <xsl:variable name="id-start-chars" select="'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_'"/> 28 <xsl:variable name="id-chars" select="'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_'"/> 29 <xsl:variable name="digits" select="'1234567890'"/> 30 <xsl:variable name="number-chars" select="'1234567890abcdefABCDEFxX.'"/> 31 <xsl:variable name="keywords" 32 select="' alignas ailgnof asm auto bool break case catch char char16_t char32_t class const const_cast constexpr continue decltype default delete do double dynamic_cast else enum explicit export extern false float for friend goto if inline int long mutable namespace new noexcept nullptr operator private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template this thread_local throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while '"/> 33 <xsl:variable name="operators4" select="'%:%:'"/> 34 <xsl:variable name="operators3" select="'>>= <<= ->* ...'"/> 35 <xsl:variable name="operators2" select="'.* :: ## <: :> <% %> %: += -= *= /= %= ^= &= |= << >> == != <= >= && || ++ -- ->'"/> 36 <xsl:variable name="operators1" select="'. ? { } [ ] # ( ) ; : + - * / % ^ & | ~ ! = < > ,'"/> 37 <xsl:variable name="single-quote">'</xsl:variable> 38 39 <!-- Syntax highlighting --> 40 <xsl:template name="highlight-keyword"> 41 <xsl:param name="keyword"/> 42 <xsl:choose> 43 <xsl:when test="$boost.syntax.highlight='1'"> 44 <phrase role="keyword"> 45 <xsl:value-of select="$keyword"/> 46 </phrase> 47 </xsl:when> 48 <xsl:otherwise> 49 <xsl:value-of select="$keyword"/> 50 </xsl:otherwise> 51 </xsl:choose> 52 </xsl:template> 53 54 <xsl:template name="highlight-identifier"> 55 <xsl:param name="identifier"/> 56 <xsl:choose> 57 <xsl:when test="contains($keywords, concat(' ', $identifier, ' '))"> 58 <xsl:call-template name="highlight-keyword"> 59 <xsl:with-param name="keyword" select="$identifier"/> 60 </xsl:call-template> 61 </xsl:when> 62 <xsl:when test="$boost.syntax.highlight='1'"> 63 <phrase role="identifier"> 64 <xsl:value-of select="$identifier"/> 65 </phrase> 66 </xsl:when> 67 <xsl:otherwise> 68 <xsl:value-of select="$identifier"/> 69 </xsl:otherwise> 70 </xsl:choose> 71 </xsl:template> 72 73 <xsl:template name="highlight-comment"> 74 <xsl:param name="text"/> 75 <xsl:choose> 76 <xsl:when test="$boost.syntax.highlight='1'"> 77 <phrase role="comment"> 78 <xsl:copy-of select="$text"/> 79 </phrase> 80 </xsl:when> 81 <xsl:otherwise> 82 <xsl:copy-of select="$text"/> 83 </xsl:otherwise> 84 </xsl:choose> 85 </xsl:template> 86 87 <xsl:template name="highlight-special"> 88 <xsl:param name="text"/> 89 <xsl:choose> 90 <xsl:when test="$boost.syntax.highlight='1'"> 91 <phrase role="special"> 92 <xsl:value-of select="$text"/> 93 </phrase> 94 </xsl:when> 95 <xsl:otherwise> 96 <xsl:value-of select="$text"/> 97 </xsl:otherwise> 98 </xsl:choose> 99 </xsl:template> 100 101 <xsl:template name="highlight-number"> 102 <xsl:param name="text"/> 103 <xsl:choose> 104 <xsl:when test="$boost.syntax.highlight='1'"> 105 <phrase role="number"> 106 <xsl:value-of select="$text"/> 107 </phrase> 108 </xsl:when> 109 <xsl:otherwise> 110 <xsl:value-of select="$text"/> 111 </xsl:otherwise> 112 </xsl:choose> 113 </xsl:template> 114 115 <xsl:template name="highlight-string"> 116 <xsl:param name="text"/> 117 <xsl:choose> 118 <xsl:when test="$boost.syntax.highlight='1'"> 119 <phrase role="string"> 120 <xsl:value-of select="$text"/> 121 </phrase> 122 </xsl:when> 123 <xsl:otherwise> 124 <xsl:value-of select="$text"/> 125 </xsl:otherwise> 126 </xsl:choose> 127 </xsl:template> 128 129 <xsl:template name="highlight-char"> 130 <xsl:param name="text"/> 131 <xsl:choose> 132 <xsl:when test="$boost.syntax.highlight='1'"> 133 <phrase role="char"> 134 <xsl:value-of select="$text"/> 135 </phrase> 136 </xsl:when> 137 <xsl:otherwise> 138 <xsl:value-of select="$text"/> 139 </xsl:otherwise> 140 </xsl:choose> 141 </xsl:template> 142 143 <xsl:template name="highlight-pp-directive"> 144 <xsl:param name="text"/> 145 <xsl:choose> 146 <xsl:when test="$boost.syntax.highlight='1'"> 147 <phrase role="preprocessor"> 148 <xsl:value-of select="$text"/> 149 </phrase> 150 </xsl:when> 151 <xsl:otherwise> 152 <xsl:value-of select="$text"/> 153 </xsl:otherwise> 154 </xsl:choose> 155 </xsl:template> 156 157 <xsl:template name="highlight-text-ident-length"> 158 <xsl:param name="text"/> 159 <xsl:param name="pos" select="1"/> 160 <xsl:choose> 161 <xsl:when test="string-length($text) + 1 = $pos"> 162 <xsl:value-of select="$pos - 1"/> 163 </xsl:when> 164 <xsl:when test="contains($id-chars, substring($text, $pos, 1))"> 165 <xsl:call-template name ="highlight-text-ident-length"> 166 <xsl:with-param name="text" select="$text"/> 167 <xsl:with-param name="pos" select="$pos + 1"/> 168 </xsl:call-template> 169 </xsl:when> 170 <xsl:otherwise> 171 <xsl:value-of select="$pos - 1"/> 172 </xsl:otherwise> 173 </xsl:choose> 174 </xsl:template> 175 176 <xsl:template name="highlight-text-number-length"> 177 <xsl:param name="text"/> 178 <xsl:param name="pos" select="1"/> 179 <xsl:choose> 180 <xsl:when test="string-length($text) + 1 = $pos"> 181 <xsl:value-of select="$pos - 1"/> 182 </xsl:when> 183 <xsl:when test="contains($number-chars, substring($text, $pos, 1))"> 184 <xsl:call-template name ="highlight-text-ident-length"> 185 <xsl:with-param name="text" select="$text"/> 186 <xsl:with-param name="pos" select="$pos + 1"/> 187 </xsl:call-template> 188 </xsl:when> 189 <xsl:otherwise> 190 <xsl:value-of select="$pos - 1"/> 191 </xsl:otherwise> 192 </xsl:choose> 193 </xsl:template> 194 195 <xsl:template name="highlight-text-string-length"> 196 <xsl:param name="text"/> 197 <xsl:param name="terminator"/> 198 <xsl:param name="pos" select="2"/> 199 <xsl:choose> 200 <xsl:when test="string-length($text) + 1 = $pos"> 201 <xsl:value-of select="$pos - 1"/> 202 </xsl:when> 203 <xsl:when test="substring($text, $pos, 1) = $terminator"> 204 <xsl:value-of select="$pos"/> 205 </xsl:when> 206 <xsl:when test="substring($text, $pos, 1) = '\' and 207 string-length($text) != $pos"> 208 <xsl:call-template name="highlight-text-string-length"> 209 <xsl:with-param name="text" select="$text"/> 210 <xsl:with-param name="terminator" select="$terminator"/> 211 <xsl:with-param name="pos" select="$pos + 2"/> 212 </xsl:call-template> 213 </xsl:when> 214 <xsl:otherwise> 215 <xsl:call-template name="highlight-text-string-length"> 216 <xsl:with-param name="text" select="$text"/> 217 <xsl:with-param name="terminator" select="$terminator"/> 218 <xsl:with-param name="pos" select="$pos + 1"/> 219 </xsl:call-template> 220 </xsl:otherwise> 221 </xsl:choose> 222 </xsl:template> 223 224 <xsl:template name="highlight-text-operator-length"> 225 <xsl:param name="text"/> 226 <xsl:choose> 227 <xsl:when test="string-length($text) >= 4 and 228 not(contains(substring($text, 1, 4), ' ')) and 229 contains($operators4, substring($text, 1, 4))"> 230 <xsl:value-of select="4"/> 231 </xsl:when> 232 <xsl:when test="string-length($text) >= 3 and 233 not(contains(substring($text, 1, 3), ' ')) and 234 contains($operators3, substring($text, 1, 3))"> 235 <xsl:value-of select="3"/> 236 </xsl:when> 237 <xsl:when test="string-length($text) >= 2 and 238 not(contains(substring($text, 1, 2), ' ')) and 239 contains($operators2, substring($text, 1, 2))"> 240 <xsl:value-of select="2"/> 241 </xsl:when> 242 <xsl:when test="string-length($text) >= 1 and 243 not(contains(substring($text, 1, 1), ' ')) and 244 contains($operators1, substring($text, 1, 1))"> 245 <xsl:value-of select="1"/> 246 </xsl:when> 247 <xsl:otherwise> 248 <xsl:value-of select="0"/> 249 </xsl:otherwise> 250 </xsl:choose> 251 </xsl:template> 252 253 <xsl:template name="highlight-text-pp-directive-length"> 254 <xsl:param name="text"/> 255 <!-- Assume that the first character is a # --> 256 <xsl:param name="pos" select="2"/> 257 <xsl:choose> 258 <xsl:when test="contains($id-chars, substring($text, $pos, 1))"> 259 <xsl:call-template name="highlight-text-ident-length"> 260 <xsl:with-param name="text" select="$text"/> 261 <xsl:with-param name="pos" select="$pos + 1"/> 262 </xsl:call-template> 263 </xsl:when> 264 <xsl:when test="contains(' 	', substring($text, $pos, 1))"> 265 <xsl:call-template name="highlight-text-pp-directive-length"> 266 <xsl:with-param name="text" select="$text"/> 267 <xsl:with-param name="pos" select="$pos + 1"/> 268 </xsl:call-template> 269 </xsl:when> 270 <xsl:otherwise> 271 <xsl:value-of select="$pos - 1"/> 272 </xsl:otherwise> 273 </xsl:choose> 274 </xsl:template> 275 276 <xsl:template name="highlight-text-impl-leading-whitespace"> 277 <xsl:param name="text"/> 278 <xsl:choose> 279 <xsl:when test="string-length($text) = 0"/> 280 <xsl:when test="contains(' 

	', substring($text, 1, 1))"> 281 <xsl:value-of select="substring($text, 1, 1)"/> 282 <xsl:call-template name="highlight-text-impl-leading-whitespace"> 283 <xsl:with-param name="text" select="substring($text, 2)"/> 284 </xsl:call-template> 285 </xsl:when> 286 <xsl:when test="'#' = substring($text, 1, 1)"> 287 <xsl:variable name="pp-length"> 288 <xsl:call-template name="highlight-text-pp-directive-length"> 289 <xsl:with-param name="text" select="$text"/> 290 </xsl:call-template> 291 </xsl:variable> 292 <xsl:call-template name="highlight-pp-directive"> 293 <xsl:with-param name="text" select="substring($text, 1, $pp-length)"/> 294 </xsl:call-template> 295 <xsl:call-template name="highlight-text-impl-root"> 296 <xsl:with-param name="text" select="substring($text, $pp-length + 1)"/> 297 </xsl:call-template> 298 </xsl:when> 299 <xsl:otherwise> 300 <xsl:call-template name="highlight-text-impl-root"> 301 <xsl:with-param name="text" select="$text"/> 302 </xsl:call-template> 303 </xsl:otherwise> 304 </xsl:choose> 305 </xsl:template> 306 307 <xsl:template name="highlight-text-impl-root"> 308 <xsl:param name="text"/> 309 <xsl:choose> 310 <xsl:when test="string-length($text) = 0"/> 311 <xsl:when test="contains($id-start-chars, substring($text, 1, 1))"> 312 <xsl:variable name="ident-length"> 313 <xsl:call-template name="highlight-text-ident-length"> 314 <xsl:with-param name="text" select="$text"/> 315 </xsl:call-template> 316 </xsl:variable> 317 <xsl:call-template name="highlight-identifier"> 318 <xsl:with-param name="identifier" select="substring($text, 1, $ident-length)"/> 319 </xsl:call-template> 320 <xsl:call-template name="highlight-text-impl-root"> 321 <xsl:with-param name="text" select="substring($text, $ident-length + 1)"/> 322 </xsl:call-template> 323 </xsl:when> 324 <xsl:when test="contains($digits, substring($text, 1, 1))"> 325 <xsl:variable name="number-length"> 326 <xsl:call-template name="highlight-text-number-length"> 327 <xsl:with-param name="text" select="$text"/> 328 </xsl:call-template> 329 </xsl:variable> 330 <xsl:call-template name="highlight-number"> 331 <xsl:with-param name="text" select="substring($text, 1, $number-length)"/> 332 </xsl:call-template> 333 <xsl:call-template name="highlight-text-impl-root"> 334 <xsl:with-param name="text" select="substring($text, $number-length + 1)"/> 335 </xsl:call-template> 336 </xsl:when> 337 <xsl:when test="substring($text, 1, 1) = '"'"> 338 <xsl:variable name="string-length"> 339 <xsl:call-template name="highlight-text-string-length"> 340 <xsl:with-param name="text" select="$text"/> 341 <xsl:with-param name="terminator" select="'"'"/> 342 </xsl:call-template> 343 </xsl:variable> 344 <xsl:call-template name="highlight-string"> 345 <xsl:with-param name="text" select="substring($text, 1, $string-length)"/> 346 </xsl:call-template> 347 <xsl:call-template name="highlight-text-impl-root"> 348 <xsl:with-param name="text" select="substring($text, $string-length + 1)"/> 349 </xsl:call-template> 350 </xsl:when> 351 <xsl:when test="substring($text, 1, 1) = $single-quote"> 352 <xsl:variable name="char-length"> 353 <xsl:call-template name="highlight-text-string-length"> 354 <xsl:with-param name="text" select="$text"/> 355 <xsl:with-param name="terminator" select="$single-quote"/> 356 </xsl:call-template> 357 </xsl:variable> 358 <xsl:call-template name="highlight-char"> 359 <xsl:with-param name="text" select="substring($text, 1, $char-length)"/> 360 </xsl:call-template> 361 <xsl:call-template name="highlight-text-impl-root"> 362 <xsl:with-param name="text" select="substring($text, $char-length + 1)"/> 363 </xsl:call-template> 364 </xsl:when> 365 <xsl:when test="substring($text, 1, 2) = '//'"> 366 <xsl:choose> 367 <xsl:when test="contains($text, '
')"> 368 <xsl:call-template name="highlight-comment"> 369 <xsl:with-param name="text" select="substring-before($text, '
')"/> 370 </xsl:call-template> 371 <xsl:call-template name="highlight-text-impl-root"> 372 <xsl:with-param name="text" select="concat('
', substring-after($text, '
'))"/> 373 </xsl:call-template> 374 </xsl:when> 375 <xsl:otherwise> 376 <xsl:call-template name="highlight-comment"> 377 <xsl:with-param name="text" select="$text"/> 378 </xsl:call-template> 379 </xsl:otherwise> 380 </xsl:choose> 381 </xsl:when> 382 <xsl:when test="substring($text, 1, 2) = '/*'"> 383 <xsl:variable name="after-start" select="substring($text, 3)" /> 384 <xsl:choose> 385 <xsl:when test="contains($after-start, '*/')"> 386 <xsl:call-template name="highlight-comment"> 387 <xsl:with-param name="text" select="concat('/*', substring-before($after-start, '*/'), '*/')"/> 388 </xsl:call-template> 389 <xsl:call-template name="highlight-text-impl-root"> 390 <xsl:with-param name="text" select="substring-after($after-start, '*/')"/> 391 </xsl:call-template> 392 </xsl:when> 393 <xsl:otherwise> 394 <xsl:call-template name="highlight-comment"> 395 <xsl:with-param name="text" select="$text"/> 396 </xsl:call-template> 397 </xsl:otherwise> 398 </xsl:choose> 399 </xsl:when> 400 <xsl:when test="contains('

', substring($text, 1, 1))"> 401 <xsl:value-of select="substring($text, 1, 1)"/> 402 <xsl:call-template name="highlight-text-impl-leading-whitespace"> 403 <xsl:with-param name="text" select="substring($text, 2)"/> 404 </xsl:call-template> 405 </xsl:when> 406 <xsl:when test="contains(' 	', substring($text, 1, 1))"> 407 <xsl:value-of select="substring($text, 1, 1)"/> 408 <xsl:call-template name="highlight-text-impl-root"> 409 <xsl:with-param name="text" select="substring($text, 2)"/> 410 </xsl:call-template> 411 </xsl:when> 412 <xsl:otherwise> 413 <xsl:variable name="operator-length"> 414 <xsl:call-template name="highlight-text-operator-length"> 415 <xsl:with-param name="text" select="$text"/> 416 </xsl:call-template> 417 </xsl:variable> 418 <xsl:choose> 419 <xsl:when test="$operator-length = 0"> 420 <xsl:value-of select="substring($text, 1, 1)"/> 421 <xsl:call-template name="highlight-text-impl-root"> 422 <xsl:with-param name="text" select="substring($text, 2)"/> 423 </xsl:call-template> 424 </xsl:when> 425 <xsl:otherwise> 426 <xsl:call-template name="highlight-special"> 427 <xsl:with-param name="text" select="substring($text, 1, $operator-length)"/> 428 </xsl:call-template> 429 <xsl:call-template name="highlight-text-impl-root"> 430 <xsl:with-param name="text" select="substring($text, $operator-length + 1)"/> 431 </xsl:call-template> 432 </xsl:otherwise> 433 </xsl:choose> 434 </xsl:otherwise> 435 </xsl:choose> 436 </xsl:template> 437 438 <!-- Jam syntax highlighting --> 439 440 <xsl:variable name="jam-keywords" select="' actions bind case class default else for if ignore in include local module on piecemeal quietly return rule switch together updated while '"/> 441 <xsl:variable name="jam-operators" select="' ! != & && ( ) += : ; < <= = > >= ?= [ ] { | || } '"/> 442 443 <xsl:template name="highlight-jam-word"> 444 <xsl:param name="text"/> 445 <xsl:choose> 446 <xsl:when test="contains($jam-keywords, concat(' ', $text, ' '))"> 447 <xsl:call-template name="highlight-keyword"> 448 <xsl:with-param name="keyword" select="$text"/> 449 </xsl:call-template> 450 </xsl:when> 451 <xsl:when test="contains($jam-operators, concat(' ', $text, ' '))"> 452 <xsl:call-template name="highlight-special"> 453 <xsl:with-param name="text" select="$text"/> 454 </xsl:call-template> 455 </xsl:when> 456 <xsl:otherwise> 457 <xsl:value-of select="$text"/> 458 </xsl:otherwise> 459 </xsl:choose> 460 </xsl:template> 461 462 <xsl:template name="jam-word-length"> 463 <xsl:param name="text"/> 464 <xsl:param name="pos" select="1"/> 465 <xsl:choose> 466 <xsl:when test="string-length($text) + 1= $pos"> 467 <xsl:value-of select="$pos - 1"/> 468 </xsl:when> 469 <xsl:when test="contains(' 

	', substring($text, $pos, 1))"> 470 <xsl:value-of select="$pos - 1"/> 471 </xsl:when> 472 <xsl:otherwise> 473 <xsl:call-template name="jam-word-length"> 474 <xsl:with-param name="text" select="$text"/> 475 <xsl:with-param name="pos" select="$pos + 1"/> 476 </xsl:call-template> 477 </xsl:otherwise> 478 </xsl:choose> 479 </xsl:template> 480 481 <xsl:template name="highlight-jam-text"> 482 <xsl:param name="text"/> 483 <xsl:choose> 484 <xsl:when test="string-length($text) = 0"/> 485 <xsl:when test="contains(' 

	', substring($text, 1, 1))"> 486 <xsl:value-of select="substring($text, 1, 1)"/> 487 <xsl:call-template name="highlight-jam-text"> 488 <xsl:with-param name="text" select="substring($text, 2)"/> 489 </xsl:call-template> 490 </xsl:when> 491 <xsl:when test="substring($text, 1, 1) = '#'"> 492 <xsl:choose> 493 <xsl:when test="contains($text, '
')"> 494 <xsl:call-template name="highlight-comment"> 495 <xsl:with-param name="text" select="substring-before($text, '
')"/> 496 </xsl:call-template> 497 <xsl:call-template name="highlight-jam-text"> 498 <xsl:with-param name="text" select="concat('
', substring-after($text, '
'))"/> 499 </xsl:call-template> 500 </xsl:when> 501 <xsl:otherwise> 502 <xsl:call-template name="highlight-comment"> 503 <xsl:with-param name="text" select="$text"/> 504 </xsl:call-template> 505 </xsl:otherwise> 506 </xsl:choose> 507 </xsl:when> 508 <xsl:otherwise> 509 <xsl:variable name="length"> 510 <xsl:call-template name="jam-word-length"> 511 <xsl:with-param name="text" select="$text"/> 512 </xsl:call-template> 513 </xsl:variable> 514 <xsl:call-template name="highlight-jam-word"> 515 <xsl:with-param name="text" select="substring($text, 1, $length)"/> 516 </xsl:call-template> 517 <xsl:call-template name="highlight-jam-text"> 518 <xsl:with-param name="text" select="substring($text, $length + 1)"/> 519 </xsl:call-template> 520 </xsl:otherwise> 521 </xsl:choose> 522 </xsl:template> 523 524 <!-- Perform C++ syntax highlighting on the given text --> 525 <xsl:template name="highlight-text"> 526 <xsl:param name="text" select="."/> 527 <xsl:call-template name="highlight-text-impl-leading-whitespace"> 528 <xsl:with-param name="text" select="$text"/> 529 </xsl:call-template> 530 </xsl:template> 531 532 <xsl:template match="*" mode="highlight"> 533 <xsl:element name="{name(.)}"> 534 <xsl:for-each select="./@*"> 535 <xsl:choose> 536 <xsl:when test="local-name(.)='last-revision'"> 537 <xsl:attribute 538 name="rev:last-revision" 539 namespace="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" 540> 541 <xsl:value-of select="."/> 542 </xsl:attribute> 543 </xsl:when> 544 <xsl:otherwise> 545 <xsl:copy-of select="."/> 546 </xsl:otherwise> 547 </xsl:choose> 548 </xsl:for-each> 549 <xsl:apply-templates mode="highlight"/> 550 </xsl:element> 551 </xsl:template> 552 553 <xsl:template match="text()" mode="highlight"> 554 <xsl:call-template name="source-highlight"> 555 <xsl:with-param name="text" select="."/> 556 </xsl:call-template> 557 </xsl:template> 558 559 <xsl:template match="classname|methodname|functionname|libraryname|enumname| 560 conceptname|macroname|globalname" mode="highlight"> 561 <xsl:apply-templates select="." mode="annotation"/> 562 </xsl:template> 563 564 <xsl:template match="type" mode="highlight"> 565 <xsl:apply-templates mode="highlight"/> 566 </xsl:template> 567 568 <xsl:template match="*" mode="highlight-jam"> 569 <xsl:apply-templates select="." mode="annotation"/> 570 </xsl:template> 571 572 <xsl:template match="text()" mode="highlight-jam"> 573 <xsl:call-template name="highlight-jam-text"> 574 <xsl:with-param name="text" select="."/> 575 </xsl:call-template> 576 </xsl:template> 577 578</xsl:stylesheet> 579