• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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="'&gt;&gt;= &lt;&lt;= -&gt;* ...'"/>
35  <xsl:variable name="operators2" select="'.* :: ## &lt;: :&gt; &lt;% %&gt; %: += -= *= /= %= ^= &amp;= |= &lt;&lt; &gt;&gt; == != &lt;= &gt;= &amp;&amp; || ++ -- -&gt;'"/>
36  <xsl:variable name="operators1" select="'. ? { } [ ] # ( ) ; : + - * / % ^ &amp; | ~ ! = &lt; &gt; ,'"/>
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) &gt;= 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) &gt;= 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) &gt;= 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) &gt;= 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(' &#x9;', 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(' &#xA;&#xD;&#x9;', 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) = '&#x22;'">
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="'&#x22;'"/>
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, '&#xA;')">
368            <xsl:call-template name="highlight-comment">
369              <xsl:with-param name="text" select="substring-before($text, '&#xA;')"/>
370            </xsl:call-template>
371            <xsl:call-template name="highlight-text-impl-root">
372              <xsl:with-param name="text" select="concat('&#xA;', substring-after($text, '&#xA;'))"/>
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('&#xA;&#xD;', 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(' &#x9;', 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="' ! != &amp; &amp;&amp; ( ) += : ; &lt; &lt;= = &gt; &gt;= ?= [ ] { | || } '"/>
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(' &#xA;&#xD;&#x9;', 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(' &#xA;&#xD;&#x9;', 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, '&#xA;')">
494            <xsl:call-template name="highlight-comment">
495              <xsl:with-param name="text" select="substring-before($text, '&#xA;')"/>
496            </xsl:call-template>
497            <xsl:call-template name="highlight-jam-text">
498              <xsl:with-param name="text" select="concat('&#xA;', substring-after($text, '&#xA;'))"/>
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