Project

General

Profile

1
<?xml version='1.0'?>
2
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3
                xmlns:suwl="http://nwalsh.com/xslt/ext/com.nwalsh.saxon.UnwrapLinks"
4
                xmlns:exsl="http://exslt.org/common"
5
                xmlns:xlink='http://www.w3.org/1999/xlink'
6
                exclude-result-prefixes="suwl exsl xlink"
7
                version='1.0'>
8

    
9
<!-- ********************************************************************
10
     $Id: xref.xsl 8421 2009-05-04 07:49:49Z bobstayton $
11
     ********************************************************************
12

    
13
     This file is part of the XSL DocBook Stylesheet distribution.
14
     See ../README or http://docbook.sf.net/release/xsl/current/ for
15
     copyright and other information.
16

    
17
     ******************************************************************** -->
18

    
19
<!-- Use internal variable for olink xlink role for consistency -->
20
<xsl:variable 
21
      name="xolink.role">http://docbook.org/xlink/role/olink</xsl:variable>
22

    
23
<!-- ==================================================================== -->
24

    
25
<xsl:template match="anchor">
26
  <xsl:call-template name="anchor"/>
27
</xsl:template>
28

    
29
<!-- ==================================================================== -->
30

    
31
<xsl:template match="xref" name="xref">
32
  <xsl:param name="xhref" select="@xlink:href"/>
33
  <!-- is the @xlink:href a local idref link? -->
34
  <xsl:param name="xlink.idref">
35
    <xsl:if test="starts-with($xhref,'#')
36
                  and (not(contains($xhref,'&#40;'))
37
                  or starts-with($xhref, '#xpointer&#40;id&#40;'))">
38
      <xsl:call-template name="xpointer.idref">
39
        <xsl:with-param name="xpointer" select="$xhref"/>
40
      </xsl:call-template>
41
   </xsl:if>
42
  </xsl:param>
43
  <xsl:param name="xlink.targets" select="key('id',$xlink.idref)"/>
44
  <xsl:param name="linkend.targets" select="key('id',@linkend)"/>
45
  <xsl:param name="target" select="($xlink.targets | $linkend.targets)[1]"/>
46

    
47
  <xsl:variable name="xrefstyle">
48
    <xsl:choose>
49
      <xsl:when test="@role and not(@xrefstyle) 
50
                      and $use.role.as.xrefstyle != 0">
51
        <xsl:value-of select="@role"/>
52
      </xsl:when>
53
      <xsl:otherwise>
54
        <xsl:value-of select="@xrefstyle"/>
55
      </xsl:otherwise>
56
    </xsl:choose>
57
  </xsl:variable>
58

    
59
  <xsl:call-template name="anchor"/>
60

    
61
  <xsl:variable name="content">
62
    <xsl:choose>
63
  
64
      <xsl:when test="@endterm">
65
        <xsl:variable name="etargets" select="key('id',@endterm)"/>
66
        <xsl:variable name="etarget" select="$etargets[1]"/>
67
        <xsl:choose>
68
          <xsl:when test="count($etarget) = 0">
69
            <xsl:message>
70
              <xsl:value-of select="count($etargets)"/>
71
              <xsl:text>Endterm points to nonexistent ID: </xsl:text>
72
              <xsl:value-of select="@endterm"/>
73
            </xsl:message>
74
            <xsl:text>???</xsl:text>
75
          </xsl:when>
76
          <xsl:otherwise>
77
            <xsl:apply-templates select="$etarget" mode="endterm"/>
78
          </xsl:otherwise>
79
        </xsl:choose>
80
      </xsl:when>
81
  
82
      <xsl:when test="$target/@xreflabel">
83
        <xsl:call-template name="xref.xreflabel">
84
          <xsl:with-param name="target" select="$target"/>
85
        </xsl:call-template>
86
      </xsl:when>
87
  
88
      <xsl:when test="$target">
89
        <xsl:if test="not(parent::citation)">
90
          <xsl:apply-templates select="$target" mode="xref-to-prefix"/>
91
        </xsl:if>
92
  
93
        <xsl:apply-templates select="$target" mode="xref-to">
94
          <xsl:with-param name="referrer" select="."/>
95
          <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
96
        </xsl:apply-templates>
97
  
98
        <xsl:if test="not(parent::citation)">
99
          <xsl:apply-templates select="$target" mode="xref-to-suffix"/>
100
        </xsl:if>
101
      </xsl:when>
102

    
103
      <xsl:otherwise>
104
        <xsl:message>
105
          <xsl:text>ERROR: xref linking to </xsl:text>
106
          <xsl:value-of select="@linkend|@xlink:href"/>
107
          <xsl:text> has no generated link text.</xsl:text>
108
        </xsl:message>
109
        <xsl:text>???</xsl:text>
110
      </xsl:otherwise>
111
    </xsl:choose>
112
  </xsl:variable>
113

    
114
  <xsl:call-template name="simple.xlink">
115
    <xsl:with-param name="content" select="$content"/>
116
  </xsl:call-template>
117

    
118
</xsl:template>
119

    
120
<!-- ==================================================================== -->
121

    
122
<!-- biblioref handled largely like an xref -->
123
<!-- To be done: add support for begin, end, and units attributes -->
124
<xsl:template match="biblioref">
125
  <xsl:variable name="targets" select="key('id',@linkend)"/>
126
  <xsl:variable name="target" select="$targets[1]"/>
127
  <xsl:variable name="refelem" select="local-name($target)"/>
128

    
129
  <xsl:call-template name="check.id.unique">
130
    <xsl:with-param name="linkend" select="@linkend"/>
131
  </xsl:call-template>
132

    
133
  <xsl:call-template name="anchor"/>
134

    
135
  <xsl:choose>
136
    <xsl:when test="count($target) = 0">
137
      <xsl:message>
138
        <xsl:text>XRef to nonexistent id: </xsl:text>
139
        <xsl:value-of select="@linkend"/>
140
      </xsl:message>
141
      <xsl:text>???</xsl:text>
142
    </xsl:when>
143

    
144
    <xsl:when test="@endterm">
145
      <xsl:variable name="href">
146
        <xsl:call-template name="href.target">
147
          <xsl:with-param name="object" select="$target"/>
148
        </xsl:call-template>
149
      </xsl:variable>
150

    
151
      <xsl:variable name="etargets" select="key('id',@endterm)"/>
152
      <xsl:variable name="etarget" select="$etargets[1]"/>
153
      <xsl:choose>
154
        <xsl:when test="count($etarget) = 0">
155
          <xsl:message>
156
            <xsl:value-of select="count($etargets)"/>
157
            <xsl:text>Endterm points to nonexistent ID: </xsl:text>
158
            <xsl:value-of select="@endterm"/>
159
          </xsl:message>
160
          <a href="{$href}">
161
            <xsl:apply-templates select="." mode="common.html.attributes"/>
162
            <xsl:text>???</xsl:text>
163
          </a>
164
        </xsl:when>
165
        <xsl:otherwise>
166
          <a href="{$href}">
167
            <xsl:apply-templates select="." mode="common.html.attributes"/>
168
            <xsl:apply-templates select="$etarget" mode="endterm"/>
169
          </a>
170
        </xsl:otherwise>
171
      </xsl:choose>
172
    </xsl:when>
173

    
174
    <xsl:when test="$target/@xreflabel">
175
      <a>
176
        <xsl:apply-templates select="." mode="common.html.attributes"/>
177
        <xsl:attribute name="href">
178
          <xsl:call-template name="href.target">
179
            <xsl:with-param name="object" select="$target"/>
180
          </xsl:call-template>
181
        </xsl:attribute>
182
        <xsl:call-template name="xref.xreflabel">
183
          <xsl:with-param name="target" select="$target"/>
184
        </xsl:call-template>
185
      </a>
186
    </xsl:when>
187

    
188
    <xsl:otherwise>
189
      <xsl:variable name="href">
190
        <xsl:call-template name="href.target">
191
          <xsl:with-param name="object" select="$target"/>
192
        </xsl:call-template>
193
      </xsl:variable>
194

    
195
      <xsl:if test="not(parent::citation)">
196
        <xsl:apply-templates select="$target" mode="xref-to-prefix"/>
197
      </xsl:if>
198

    
199
      <a href="{$href}">
200
        <xsl:apply-templates select="." mode="class.attribute"/>
201
        <xsl:if test="$target/title or $target/*/title">
202
          <xsl:attribute name="title">
203
            <xsl:apply-templates select="$target" mode="xref-title"/>
204
          </xsl:attribute>
205
        </xsl:if>
206
        <xsl:apply-templates select="$target" mode="xref-to">
207
          <xsl:with-param name="referrer" select="."/>
208
          <xsl:with-param name="xrefstyle">
209
            <xsl:choose>
210
              <xsl:when test="@role and not(@xrefstyle) and $use.role.as.xrefstyle != 0">
211
                <xsl:value-of select="@role"/>
212
              </xsl:when>
213
              <xsl:otherwise>
214
                <xsl:value-of select="@xrefstyle"/>
215
              </xsl:otherwise>
216
            </xsl:choose>
217
          </xsl:with-param>
218
        </xsl:apply-templates>
219
      </a>
220

    
221
      <xsl:if test="not(parent::citation)">
222
        <xsl:apply-templates select="$target" mode="xref-to-suffix"/>
223
      </xsl:if>
224
    </xsl:otherwise>
225
  </xsl:choose>
226
</xsl:template>
227

    
228
<!-- ==================================================================== -->
229

    
230
<xsl:template match="*" mode="endterm">
231
  <!-- Process the children of the endterm element -->
232
  <xsl:variable name="endterm">
233
    <xsl:apply-templates select="child::node()"/>
234
  </xsl:variable>
235

    
236
  <xsl:choose>
237
    <xsl:when test="$exsl.node.set.available != 0">
238
      <xsl:apply-templates select="exsl:node-set($endterm)" mode="remove-ids"/>
239
    </xsl:when>
240
    <xsl:otherwise>
241
      <xsl:copy-of select="$endterm"/>
242
    </xsl:otherwise>
243
  </xsl:choose>
244
</xsl:template>
245

    
246
<xsl:template match="*" mode="remove-ids">
247
  <xsl:choose>
248
    <!-- handle html or xhtml -->
249
    <xsl:when test="local-name(.) = 'a'
250
                    and (namespace-uri(.) = ''
251
                         or namespace-uri(.) = 'http://www.w3.org/1999/xhtml')">
252
      <xsl:choose>
253
        <xsl:when test="(@name and count(@*) = 1)
254
                        or (@id and count(@*) = 1)
255
                        or (@xml:id and count(@*) = 1)
256
                        or (@xml:id and @name and count(@*) = 2)
257
                        or (@id and @name and count(@*) = 2)">
258
          <xsl:message>suppress anchor</xsl:message>
259
          <!-- suppress the whole thing -->
260
        </xsl:when>
261
        <xsl:otherwise>
262
          <xsl:copy>
263
            <xsl:for-each select="@*">
264
              <xsl:choose>
265
                <xsl:when test="local-name(.) != 'name' and local-name(.) != 'id'">
266
                  <xsl:copy/>
267
                </xsl:when>
268
                <xsl:otherwise>
269
                  <xsl:message>removing <xsl:value-of 
270
                             select="local-name(.)"/></xsl:message>
271
                </xsl:otherwise>
272
              </xsl:choose>
273
            </xsl:for-each>
274
          </xsl:copy>
275
          <xsl:apply-templates mode="remove-ids"/>
276
        </xsl:otherwise>
277
      </xsl:choose>
278
    </xsl:when>
279
    <xsl:otherwise>
280
      <xsl:copy>
281
        <xsl:for-each select="@*">
282
          <xsl:choose>
283
            <xsl:when test="local-name(.) != 'id'">
284
              <xsl:copy/>
285
            </xsl:when>
286
            <xsl:otherwise>
287
              <xsl:message>removing <xsl:value-of 
288
                        select="local-name(.)"/></xsl:message>
289
            </xsl:otherwise>
290
          </xsl:choose>
291
        </xsl:for-each>
292
        <xsl:apply-templates mode="remove-ids"/>
293
      </xsl:copy>
294
    </xsl:otherwise>
295
  </xsl:choose>
296
</xsl:template>
297

    
298
<!-- ==================================================================== -->
299

    
300
<xsl:template match="*" mode="xref-to-prefix"/>
301
<xsl:template match="*" mode="xref-to-suffix"/>
302

    
303
<xsl:template match="*" mode="xref-to">
304
  <xsl:param name="referrer"/>
305
  <xsl:param name="xrefstyle"/>
306
  <xsl:param name="verbose" select="1"/>
307

    
308
  <xsl:if test="$verbose">
309
    <xsl:message>
310
      <xsl:text>Don't know what gentext to create for xref to: "</xsl:text>
311
      <xsl:value-of select="name(.)"/>
312
      <xsl:text>", ("</xsl:text>
313
      <xsl:value-of select="(@id|@xml:id)[1]"/>
314
      <xsl:text>")</xsl:text>
315
    </xsl:message>
316
  </xsl:if>
317
  <xsl:text>???</xsl:text>
318
</xsl:template>
319

    
320
<xsl:template match="title" mode="xref-to">
321
  <xsl:param name="referrer"/>
322
  <xsl:param name="xrefstyle"/>
323
  <xsl:param name="verbose" select="1"/>
324

    
325
  <!-- if you xref to a title, xref to the parent... -->
326
  <xsl:choose>
327
    <!-- FIXME: how reliable is this? -->
328
    <xsl:when test="contains(local-name(parent::*), 'info')">
329
      <xsl:apply-templates select="parent::*[2]" mode="xref-to">
330
        <xsl:with-param name="referrer" select="$referrer"/>
331
        <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
332
        <xsl:with-param name="verbose" select="$verbose"/>
333
      </xsl:apply-templates>
334
    </xsl:when>
335
    <xsl:otherwise>
336
      <xsl:apply-templates select="parent::*" mode="xref-to">
337
        <xsl:with-param name="referrer" select="$referrer"/>
338
        <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
339
        <xsl:with-param name="verbose" select="$verbose"/>
340
      </xsl:apply-templates>
341
    </xsl:otherwise>
342
  </xsl:choose>
343
</xsl:template>
344

    
345
<xsl:template match="abstract|authorblurb|personblurb|bibliodiv|bibliomset
346
                     |biblioset|blockquote|calloutlist|caution|colophon
347
                     |constraintdef|formalpara|glossdiv|important|indexdiv
348
                     |itemizedlist|legalnotice|lot|msg|msgexplan|msgmain
349
                     |msgrel|msgset|msgsub|note|orderedlist|partintro
350
                     |productionset|qandadiv|refsynopsisdiv|segmentedlist
351
                     |set|setindex|sidebar|tip|toc|variablelist|warning"
352
              mode="xref-to">
353
  <xsl:param name="referrer"/>
354
  <xsl:param name="xrefstyle"/>
355
  <xsl:param name="verbose" select="1"/>
356

    
357
  <!-- catch-all for things with (possibly optional) titles -->
358
  <xsl:apply-templates select="." mode="object.xref.markup">
359
    <xsl:with-param name="purpose" select="'xref'"/>
360
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
361
    <xsl:with-param name="referrer" select="$referrer"/>
362
    <xsl:with-param name="verbose" select="$verbose"/>
363
  </xsl:apply-templates>
364
</xsl:template>
365

    
366
<xsl:template match="author|editor|othercredit|personname" mode="xref-to">
367
  <xsl:param name="referrer"/>
368
  <xsl:param name="xrefstyle"/>
369

    
370
  <xsl:call-template name="person.name"/>
371
</xsl:template>
372

    
373
<xsl:template match="authorgroup" mode="xref-to">
374
  <xsl:param name="referrer"/>
375
  <xsl:param name="xrefstyle"/>
376

    
377
  <xsl:call-template name="person.name.list"/>
378
</xsl:template>
379

    
380
<xsl:template match="figure|example|table|equation" mode="xref-to">
381
  <xsl:param name="referrer"/>
382
  <xsl:param name="xrefstyle"/>
383
  <xsl:param name="verbose" select="1"/>
384

    
385
  <xsl:apply-templates select="." mode="object.xref.markup">
386
    <xsl:with-param name="purpose" select="'xref'"/>
387
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
388
    <xsl:with-param name="referrer" select="$referrer"/>
389
    <xsl:with-param name="verbose" select="$verbose"/>
390
  </xsl:apply-templates>
391
</xsl:template>
392

    
393
<xsl:template match="procedure" mode="xref-to">
394
  <xsl:param name="referrer"/>
395
  <xsl:param name="xrefstyle"/>
396
  <xsl:param name="verbose"/>
397

    
398
  <xsl:apply-templates select="." mode="object.xref.markup">
399
    <xsl:with-param name="purpose" select="'xref'"/>
400
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
401
    <xsl:with-param name="referrer" select="$referrer"/>
402
    <xsl:with-param name="verbose" select="$verbose"/>
403
  </xsl:apply-templates>
404
</xsl:template>
405

    
406
<xsl:template match="task" mode="xref-to">
407
  <xsl:param name="referrer"/>
408
  <xsl:param name="xrefstyle"/>
409
  <xsl:param name="verbose"/>
410

    
411
  <xsl:apply-templates select="." mode="object.xref.markup">
412
    <xsl:with-param name="purpose" select="'xref'"/>
413
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
414
    <xsl:with-param name="referrer" select="$referrer"/>
415
    <xsl:with-param name="verbose" select="$verbose"/>
416
  </xsl:apply-templates>
417
</xsl:template>
418

    
419
<xsl:template match="cmdsynopsis" mode="xref-to">
420
  <xsl:apply-templates select="(.//command)[1]" mode="xref"/>
421
</xsl:template>
422

    
423
<xsl:template match="funcsynopsis" mode="xref-to">
424
  <xsl:apply-templates select="(.//function)[1]" mode="xref"/>
425
</xsl:template>
426

    
427
<xsl:template match="dedication|acknowledgements|preface|chapter|appendix|article" mode="xref-to">
428
  <xsl:param name="referrer"/>
429
  <xsl:param name="xrefstyle"/>
430
  <xsl:param name="verbose" select="1"/>
431

    
432
  <xsl:apply-templates select="." mode="object.xref.markup">
433
    <xsl:with-param name="purpose" select="'xref'"/>
434
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
435
    <xsl:with-param name="referrer" select="$referrer"/>
436
    <xsl:with-param name="verbose" select="$verbose"/>
437
  </xsl:apply-templates>
438
</xsl:template>
439

    
440
<xsl:template match="bibliography" mode="xref-to">
441
  <xsl:param name="referrer"/>
442
  <xsl:param name="xrefstyle"/>
443
  <xsl:param name="verbose" select="1"/>
444

    
445
  <xsl:apply-templates select="." mode="object.xref.markup">
446
    <xsl:with-param name="purpose" select="'xref'"/>
447
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
448
    <xsl:with-param name="referrer" select="$referrer"/>
449
    <xsl:with-param name="verbose" select="$verbose"/>
450
  </xsl:apply-templates>
451
</xsl:template>
452

    
453
<xsl:template match="biblioentry|bibliomixed" mode="xref-to-prefix">
454
  <xsl:text>[</xsl:text>
455
</xsl:template>
456

    
457
<xsl:template match="biblioentry|bibliomixed" mode="xref-to-suffix">
458
  <xsl:text>]</xsl:text>
459
</xsl:template>
460

    
461
<xsl:template match="biblioentry|bibliomixed" mode="xref-to">
462
  <xsl:param name="referrer"/>
463
  <xsl:param name="xrefstyle"/>
464
  <xsl:param name="verbose" select="1"/>
465

    
466
  <!-- handles both biblioentry and bibliomixed -->
467
  <xsl:choose>
468
    <xsl:when test="string(.) = ''">
469
      <xsl:variable name="bib" select="document($bibliography.collection,.)"/>
470
      <xsl:variable name="id" select="(@id|@xml:id)[1]"/>
471
      <xsl:variable name="entry" select="$bib/bibliography/
472
                                    *[@id=$id or @xml:id=$id][1]"/>
473
      <xsl:choose>
474
        <xsl:when test="$entry">
475
          <xsl:choose>
476
            <xsl:when test="$bibliography.numbered != 0">
477
              <xsl:number from="bibliography" count="biblioentry|bibliomixed"
478
                          level="any" format="1"/>
479
            </xsl:when>
480
            <xsl:when test="local-name($entry/*[1]) = 'abbrev'">
481
              <xsl:apply-templates select="$entry/*[1]"/>
482
            </xsl:when>
483
            <xsl:otherwise>
484
              <xsl:value-of select="(@id|@xml:id)[1]"/>
485
            </xsl:otherwise>
486
          </xsl:choose>
487
        </xsl:when>
488
        <xsl:otherwise>
489
          <xsl:message>
490
            <xsl:text>No bibliography entry: </xsl:text>
491
            <xsl:value-of select="$id"/>
492
            <xsl:text> found in </xsl:text>
493
            <xsl:value-of select="$bibliography.collection"/>
494
          </xsl:message>
495
          <xsl:value-of select="(@id|@xml:id)[1]"/>
496
        </xsl:otherwise>
497
      </xsl:choose>
498
    </xsl:when>
499
    <xsl:otherwise>
500
      <xsl:choose>
501
        <xsl:when test="$bibliography.numbered != 0">
502
          <xsl:number from="bibliography" count="biblioentry|bibliomixed"
503
                      level="any" format="1"/>
504
        </xsl:when>
505
        <xsl:when test="local-name(*[1]) = 'abbrev'">
506
          <xsl:apply-templates select="*[1]"/>
507
        </xsl:when>
508
        <xsl:otherwise>
509
          <xsl:value-of select="(@id|@xml:id)[1]"/>
510
        </xsl:otherwise>
511
      </xsl:choose>
512
    </xsl:otherwise>
513
  </xsl:choose>
514
</xsl:template>
515

    
516
<xsl:template match="glossary" mode="xref-to">
517
  <xsl:param name="referrer"/>
518
  <xsl:param name="xrefstyle"/>
519
  <xsl:param name="verbose" select="1"/>
520

    
521
  <xsl:apply-templates select="." mode="object.xref.markup">
522
    <xsl:with-param name="purpose" select="'xref'"/>
523
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
524
    <xsl:with-param name="referrer" select="$referrer"/>
525
    <xsl:with-param name="verbose" select="$verbose"/>
526
  </xsl:apply-templates>
527
</xsl:template>
528

    
529
<xsl:template match="glossentry" mode="xref-to">
530
  <xsl:param name="referrer"/>
531
  <xsl:param name="xrefstyle"/>
532
  <xsl:param name="verbose" select="1"/>
533
  <xsl:choose>
534
    <xsl:when test="$glossentry.show.acronym = 'primary'">
535
      <xsl:choose>
536
        <xsl:when test="acronym|abbrev">
537
          <xsl:apply-templates select="(acronym|abbrev)[1]"/>
538
        </xsl:when>
539
        <xsl:otherwise>
540
          <xsl:apply-templates select="glossterm[1]" mode="xref-to">
541
            <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
542
            <xsl:with-param name="referrer" select="$referrer"/>
543
            <xsl:with-param name="verbose" select="$verbose"/>
544
          </xsl:apply-templates>
545
        </xsl:otherwise>
546
      </xsl:choose>
547
    </xsl:when>
548
    <xsl:otherwise>
549
      <xsl:apply-templates select="glossterm[1]" mode="xref-to">
550
        <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
551
        <xsl:with-param name="referrer" select="$referrer"/>
552
        <xsl:with-param name="verbose" select="$verbose"/>
553
      </xsl:apply-templates>
554
    </xsl:otherwise>
555
  </xsl:choose>
556
</xsl:template>
557

    
558
<xsl:template match="glossterm|firstterm" mode="xref-to">
559
  <xsl:apply-templates/>
560
</xsl:template>
561

    
562
<xsl:template match="index" mode="xref-to">
563
  <xsl:param name="referrer"/>
564
  <xsl:param name="xrefstyle"/>
565
  <xsl:param name="verbose" select="1"/>
566

    
567
  <xsl:apply-templates select="." mode="object.xref.markup">
568
    <xsl:with-param name="purpose" select="'xref'"/>
569
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
570
    <xsl:with-param name="referrer" select="$referrer"/>
571
    <xsl:with-param name="verbose" select="$verbose"/>
572
  </xsl:apply-templates>
573
</xsl:template>
574

    
575
<xsl:template match="listitem" mode="xref-to">
576
  <xsl:param name="referrer"/>
577
  <xsl:param name="xrefstyle"/>
578
  <xsl:param name="verbose"/>
579

    
580
  <xsl:apply-templates select="." mode="object.xref.markup">
581
    <xsl:with-param name="purpose" select="'xref'"/>
582
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
583
    <xsl:with-param name="referrer" select="$referrer"/>
584
    <xsl:with-param name="verbose" select="$verbose"/>
585
  </xsl:apply-templates>
586
</xsl:template>
587

    
588
<xsl:template match="section|simplesect
589
                     |sect1|sect2|sect3|sect4|sect5
590
                     |refsect1|refsect2|refsect3|refsection" mode="xref-to">
591
  <xsl:param name="referrer"/>
592
  <xsl:param name="xrefstyle"/>
593
  <xsl:param name="verbose" select="1"/>
594

    
595
  <xsl:apply-templates select="." mode="object.xref.markup">
596
    <xsl:with-param name="purpose" select="'xref'"/>
597
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
598
    <xsl:with-param name="referrer" select="$referrer"/>
599
    <xsl:with-param name="verbose" select="$verbose"/>
600
  </xsl:apply-templates>
601
  <!-- FIXME: What about "in Chapter X"? -->
602
</xsl:template>
603

    
604
<xsl:template match="bridgehead" mode="xref-to">
605
  <xsl:param name="referrer"/>
606
  <xsl:param name="xrefstyle"/>
607
  <xsl:param name="verbose" select="1"/>
608

    
609
  <xsl:apply-templates select="." mode="object.xref.markup">
610
    <xsl:with-param name="purpose" select="'xref'"/>
611
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
612
    <xsl:with-param name="referrer" select="$referrer"/>
613
    <xsl:with-param name="verbose" select="$verbose"/>
614
  </xsl:apply-templates>
615
  <!-- FIXME: What about "in Chapter X"? -->
616
</xsl:template>
617

    
618
<xsl:template match="qandaset" mode="xref-to">
619
  <xsl:param name="referrer"/>
620
  <xsl:param name="xrefstyle"/>
621
  <xsl:param name="verbose" select="1"/>
622

    
623
  <xsl:apply-templates select="." mode="object.xref.markup">
624
    <xsl:with-param name="purpose" select="'xref'"/>
625
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
626
    <xsl:with-param name="referrer" select="$referrer"/>
627
    <xsl:with-param name="verbose" select="$verbose"/>
628
  </xsl:apply-templates>
629
</xsl:template>
630

    
631
<xsl:template match="qandadiv" mode="xref-to">
632
  <xsl:param name="referrer"/>
633
  <xsl:param name="xrefstyle"/>
634
  <xsl:param name="verbose" select="1"/>
635

    
636
  <xsl:apply-templates select="." mode="object.xref.markup">
637
    <xsl:with-param name="purpose" select="'xref'"/>
638
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
639
    <xsl:with-param name="referrer" select="$referrer"/>
640
    <xsl:with-param name="verbose" select="$verbose"/>
641
  </xsl:apply-templates>
642
</xsl:template>
643

    
644
<xsl:template match="qandaentry" mode="xref-to">
645
  <xsl:param name="referrer"/>
646
  <xsl:param name="xrefstyle"/>
647
  <xsl:param name="verbose" select="1"/>
648

    
649
  <xsl:apply-templates select="question[1]" mode="xref-to">
650
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
651
    <xsl:with-param name="referrer" select="$referrer"/>
652
    <xsl:with-param name="verbose" select="$verbose"/>
653
  </xsl:apply-templates>
654
</xsl:template>
655

    
656
<xsl:template match="question|answer" mode="xref-to">
657
  <xsl:param name="referrer"/>
658
  <xsl:param name="xrefstyle"/>
659
  <xsl:param name="verbose" select="1"/>
660

    
661
  <xsl:choose>
662
    <xsl:when test="string-length(label) != 0">
663
      <xsl:apply-templates select="." mode="label.markup"/>
664
    </xsl:when>
665
    <xsl:otherwise>
666
      <xsl:apply-templates select="." mode="object.xref.markup">
667
        <xsl:with-param name="purpose" select="'xref'"/>
668
        <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
669
        <xsl:with-param name="referrer" select="$referrer"/>
670
        <xsl:with-param name="verbose" select="$verbose"/>
671
      </xsl:apply-templates>
672
    </xsl:otherwise>
673
  </xsl:choose>
674
</xsl:template>
675

    
676
<xsl:template match="part|reference" mode="xref-to">
677
  <xsl:param name="referrer"/>
678
  <xsl:param name="xrefstyle"/>
679
  <xsl:param name="verbose" select="1"/>
680

    
681
  <xsl:apply-templates select="." mode="object.xref.markup">
682
    <xsl:with-param name="purpose" select="'xref'"/>
683
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
684
    <xsl:with-param name="referrer" select="$referrer"/>
685
    <xsl:with-param name="verbose" select="$verbose"/>
686
  </xsl:apply-templates>
687
</xsl:template>
688

    
689
<xsl:template match="refentry" mode="xref-to">
690
  <xsl:param name="referrer"/>
691
  <xsl:param name="xrefstyle"/>
692

    
693
  <xsl:choose>
694
    <xsl:when test="refmeta/refentrytitle">
695
      <xsl:apply-templates select="refmeta/refentrytitle"/>
696
    </xsl:when>
697
    <xsl:otherwise>
698
      <xsl:apply-templates select="refnamediv/refname[1]"/>
699
    </xsl:otherwise>
700
  </xsl:choose>
701
  <xsl:apply-templates select="refmeta/manvolnum"/>
702
</xsl:template>
703

    
704
<xsl:template match="refnamediv" mode="xref-to">
705
  <xsl:param name="referrer"/>
706
  <xsl:param name="xrefstyle"/>
707
  <xsl:param name="verbose" select="1"/>
708

    
709
  <xsl:apply-templates select="refname[1]" mode="xref-to">
710
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
711
    <xsl:with-param name="referrer" select="$referrer"/>
712
    <xsl:with-param name="verbose" select="$verbose"/>
713
  </xsl:apply-templates>
714
</xsl:template>
715

    
716
<xsl:template match="refname" mode="xref-to">
717
  <xsl:param name="referrer"/>
718
  <xsl:param name="xrefstyle"/>
719
  <xsl:param name="verbose" select="1"/>
720

    
721
  <xsl:apply-templates mode="xref-to"/>
722
</xsl:template>
723

    
724
<xsl:template match="step" mode="xref-to">
725
  <xsl:param name="referrer"/>
726
  <xsl:param name="xrefstyle"/>
727

    
728
  <xsl:call-template name="gentext">
729
    <xsl:with-param name="key" select="'Step'"/>
730
  </xsl:call-template>
731
  <xsl:text> </xsl:text>
732
  <xsl:apply-templates select="." mode="number"/>
733
</xsl:template>
734

    
735
<xsl:template match="varlistentry" mode="xref-to">
736
  <xsl:param name="referrer"/>
737
  <xsl:param name="xrefstyle"/>
738
  <xsl:param name="verbose" select="1"/>
739

    
740
  <xsl:apply-templates select="term[1]" mode="xref-to">
741
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
742
    <xsl:with-param name="referrer" select="$referrer"/>
743
    <xsl:with-param name="verbose" select="$verbose"/>
744
  </xsl:apply-templates>
745
</xsl:template>
746

    
747
<xsl:template match="primary|secondary|tertiary" mode="xref-to">
748
  <xsl:value-of select="."/>
749
</xsl:template>
750

    
751
<xsl:template match="indexterm" mode="xref-to">
752
  <xsl:value-of select="primary"/>
753
</xsl:template>
754

    
755
<xsl:template match="varlistentry/term" mode="xref-to">
756
  <xsl:param name="referrer"/>
757
  <xsl:param name="xrefstyle"/>
758

    
759
  <!-- to avoid the comma that will be generated if there are several terms -->
760
  <xsl:apply-templates/>
761
</xsl:template>
762

    
763
<xsl:template match="co" mode="xref-to">
764
  <xsl:param name="referrer"/>
765
  <xsl:param name="xrefstyle"/>
766

    
767
  <xsl:apply-templates select="." mode="callout-bug"/>
768
</xsl:template>
769

    
770
<xsl:template match="area|areaset" mode="xref-to">
771
  <xsl:param name="referrer"/>
772
  <xsl:param name="xrefstyle"/>
773

    
774
  <xsl:call-template name="callout-bug">
775
    <xsl:with-param name="conum">
776
      <xsl:apply-templates select="." mode="conumber"/>
777
    </xsl:with-param>
778
  </xsl:call-template>
779
</xsl:template>
780

    
781
<xsl:template match="book" mode="xref-to">
782
  <xsl:param name="referrer"/>
783
  <xsl:param name="xrefstyle"/>
784
  <xsl:param name="verbose" select="1"/>
785

    
786
  <xsl:apply-templates select="." mode="object.xref.markup">
787
    <xsl:with-param name="purpose" select="'xref'"/>
788
    <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
789
    <xsl:with-param name="referrer" select="$referrer"/>
790
    <xsl:with-param name="verbose" select="$verbose"/>
791
  </xsl:apply-templates>
792
</xsl:template>
793

    
794
<!-- These are elements for which no link text exists, so an xref to one
795
     uses the xrefstyle attribute if specified, or if not it falls back
796
     to the container element's link text -->
797
<xsl:template match="para|phrase|simpara|anchor|quote" mode="xref-to">
798
  <xsl:param name="referrer"/>
799
  <xsl:param name="xrefstyle"/>
800
  <xsl:param name="verbose" select="1"/>
801

    
802
  <xsl:variable name="context" select="(ancestor::simplesect
803
                                       |ancestor::section
804
                                       |ancestor::sect1
805
                                       |ancestor::sect2
806
                                       |ancestor::sect3
807
                                       |ancestor::sect4
808
                                       |ancestor::sect5
809
                                       |ancestor::refsection
810
                                       |ancestor::refsect1
811
                                       |ancestor::refsect2
812
                                       |ancestor::refsect3
813
                                       |ancestor::chapter
814
                                       |ancestor::appendix
815
                                       |ancestor::preface
816
                                       |ancestor::partintro
817
                                       |ancestor::dedication
818
                                       |ancestor::acknowledgements
819
                                       |ancestor::colophon
820
                                       |ancestor::bibliography
821
                                       |ancestor::index
822
                                       |ancestor::glossary
823
                                       |ancestor::glossentry
824
                                       |ancestor::listitem
825
                                       |ancestor::varlistentry)[last()]"/>
826

    
827
  <xsl:choose>
828
    <xsl:when test="$xrefstyle != ''">
829
      <xsl:apply-templates select="." mode="object.xref.markup">
830
        <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
831
        <xsl:with-param name="referrer" select="$referrer"/>
832
        <xsl:with-param name="verbose" select="$verbose"/>
833
      </xsl:apply-templates>
834
    </xsl:when>
835
    <xsl:otherwise>
836
      <xsl:apply-templates select="$context" mode="xref-to">
837
        <xsl:with-param name="purpose" select="'xref'"/>
838
        <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
839
        <xsl:with-param name="referrer" select="$referrer"/>
840
        <xsl:with-param name="verbose" select="$verbose"/>
841
      </xsl:apply-templates>
842
    </xsl:otherwise>
843
  </xsl:choose>
844
</xsl:template>
845

    
846
<!-- ==================================================================== -->
847

    
848
<xsl:template match="*" mode="xref-title">
849
  <xsl:variable name="title">
850
    <xsl:apply-templates select="." mode="object.title.markup"/>
851
  </xsl:variable>
852

    
853
  <xsl:value-of select="$title"/>
854
</xsl:template>
855

    
856
<xsl:template match="author" mode="xref-title">
857
  <xsl:variable name="title">
858
    <xsl:call-template name="person.name"/>
859
  </xsl:variable>
860

    
861
  <xsl:value-of select="$title"/>
862
</xsl:template>
863

    
864
<xsl:template match="authorgroup" mode="xref-title">
865
  <xsl:variable name="title">
866
    <xsl:call-template name="person.name.list"/>
867
  </xsl:variable>
868

    
869
  <xsl:value-of select="$title"/>
870
</xsl:template>
871

    
872
<xsl:template match="cmdsynopsis" mode="xref-title">
873
  <xsl:variable name="title">
874
    <xsl:apply-templates select="(.//command)[1]" mode="xref"/>
875
  </xsl:variable>
876

    
877
  <xsl:value-of select="$title"/>
878
</xsl:template>
879

    
880
<xsl:template match="funcsynopsis" mode="xref-title">
881
  <xsl:variable name="title">
882
    <xsl:apply-templates select="(.//function)[1]" mode="xref"/>
883
  </xsl:variable>
884

    
885
  <xsl:value-of select="$title"/>
886
</xsl:template>
887

    
888
<xsl:template match="biblioentry|bibliomixed" mode="xref-title">
889
  <!-- handles both biblioentry and bibliomixed -->
890
  <xsl:variable name="title">
891
    <xsl:text>[</xsl:text>
892
    <xsl:choose>
893
      <xsl:when test="local-name(*[1]) = 'abbrev'">
894
        <xsl:apply-templates select="*[1]"/>
895
      </xsl:when>
896
      <xsl:otherwise>
897
        <xsl:value-of select="(@id|@xml:id)[1]"/>
898
      </xsl:otherwise>
899
    </xsl:choose>
900
    <xsl:text>]</xsl:text>
901
  </xsl:variable>
902

    
903
  <xsl:value-of select="$title"/>
904
</xsl:template>
905

    
906
<xsl:template match="step" mode="xref-title">
907
  <xsl:call-template name="gentext">
908
    <xsl:with-param name="key" select="'Step'"/>
909
  </xsl:call-template>
910
  <xsl:text> </xsl:text>
911
  <xsl:apply-templates select="." mode="number"/>
912
</xsl:template>
913

    
914
<xsl:template match="step[not(./title)]" mode="title.markup">
915
  <xsl:call-template name="gentext">
916
    <xsl:with-param name="key" select="'Step'"/>
917
  </xsl:call-template>
918
  <xsl:text> </xsl:text>
919
  <xsl:apply-templates select="." mode="number"/>
920
</xsl:template>
921

    
922
<xsl:template match="co" mode="xref-title">
923
  <xsl:variable name="title">
924
    <xsl:apply-templates select="." mode="callout-bug"/>
925
  </xsl:variable>
926

    
927
  <xsl:value-of select="$title"/>
928
</xsl:template>
929

    
930
<!-- ==================================================================== -->
931

    
932
<xsl:template match="link" name="link">
933
  <xsl:param name="linkend" select="@linkend"/>
934
  <xsl:param name="a.target"/>
935
  <xsl:param name="xhref" select="@xlink:href"/>
936

    
937
  <xsl:variable name="content">
938
    <xsl:call-template name="anchor"/>
939
    <xsl:choose>
940
      <xsl:when test="count(child::node()) &gt; 0">
941
        <!-- If it has content, use it -->
942
        <xsl:apply-templates/>
943
      </xsl:when>
944
      <!-- else look for an endterm -->
945
      <xsl:when test="@endterm">
946
        <xsl:variable name="etargets" select="key('id',@endterm)"/>
947
        <xsl:variable name="etarget" select="$etargets[1]"/>
948
        <xsl:choose>
949
          <xsl:when test="count($etarget) = 0">
950
            <xsl:message>
951
              <xsl:value-of select="count($etargets)"/>
952
              <xsl:text>Endterm points to nonexistent ID: </xsl:text>
953
              <xsl:value-of select="@endterm"/>
954
            </xsl:message>
955
            <xsl:text>???</xsl:text>
956
          </xsl:when>
957
          <xsl:otherwise>
958
              <xsl:apply-templates select="$etarget" mode="endterm"/>
959
          </xsl:otherwise>
960
        </xsl:choose>
961
      </xsl:when>
962
      <!-- Use the xlink:href if no other text -->
963
      <xsl:when test="@xlink:href">
964
        <xsl:value-of select="@xlink:href"/>
965
      </xsl:when>
966
      <xsl:otherwise>
967
        <xsl:message>
968
          <xsl:text>Link element has no content and no Endterm. </xsl:text>
969
          <xsl:text>Nothing to show in the link to </xsl:text>
970
          <xsl:value-of select="(@xlink:href|@linkend)[1]"/>
971
        </xsl:message>
972
        <xsl:text>???</xsl:text>
973
      </xsl:otherwise>
974
    </xsl:choose>
975
  </xsl:variable>
976

    
977
  <xsl:call-template name="simple.xlink">
978
    <xsl:with-param name="node" select="."/>
979
    <xsl:with-param name="linkend" select="$linkend"/>
980
    <xsl:with-param name="content" select="$content"/>
981
    <xsl:with-param name="a.target" select="$a.target"/>
982
    <xsl:with-param name="xhref" select="$xhref"/>
983
  </xsl:call-template>
984

    
985
</xsl:template>
986

    
987
<xsl:template match="ulink" name="ulink">
988
  <xsl:param name="url" select="@url"/>
989
  <xsl:variable name="link">
990
    <a>
991
      <xsl:apply-templates select="." mode="common.html.attributes"/>
992
      <xsl:if test="@id or @xml:id">
993
        <xsl:attribute name="name">
994
          <xsl:value-of select="(@id|@xml:id)[1]"/>
995
        </xsl:attribute>
996
      </xsl:if>
997
      <xsl:attribute name="href"><xsl:value-of select="$url"/></xsl:attribute>
998
      <xsl:if test="$ulink.target != ''">
999
        <xsl:attribute name="target">
1000
          <xsl:value-of select="$ulink.target"/>
1001
        </xsl:attribute>
1002
      </xsl:if>
1003
      <xsl:choose>
1004
        <xsl:when test="count(child::node())=0">
1005
          <xsl:value-of select="$url"/>
1006
        </xsl:when>
1007
        <xsl:otherwise>
1008
          <xsl:apply-templates/>
1009
        </xsl:otherwise>
1010
      </xsl:choose>
1011
    </a>
1012
  </xsl:variable>
1013

    
1014
  <xsl:choose>
1015
    <xsl:when test="function-available('suwl:unwrapLinks')">
1016
      <xsl:copy-of select="suwl:unwrapLinks($link)"/>
1017
    </xsl:when>
1018
    <xsl:otherwise>
1019
      <xsl:copy-of select="$link"/>
1020
    </xsl:otherwise>
1021
  </xsl:choose>
1022
</xsl:template>
1023

    
1024
<xsl:template match="olink" name="olink">
1025
  <!-- olink content may be passed in from xlink olink -->
1026
  <xsl:param name="content" select="NOTANELEMENT"/>
1027

    
1028
  <xsl:call-template name="anchor"/>
1029

    
1030
  <xsl:variable name="localinfo" select="@localinfo"/>
1031

    
1032
  <xsl:choose>
1033
    <!-- olinks resolved by stylesheet and target database -->
1034
    <xsl:when test="@targetdoc or @targetptr or
1035
                    (@xlink:role=$xolink.role and
1036
                     contains(@xlink:href, '#') )" >
1037

    
1038
      <xsl:variable name="targetdoc.att">
1039
        <xsl:choose>
1040
          <xsl:when test="@targetdoc != ''">
1041
            <xsl:value-of select="@targetdoc"/>
1042
          </xsl:when>
1043
          <xsl:when test="@xlink:role=$xolink.role and
1044
                       contains(@xlink:href, '#')" >
1045
            <xsl:value-of select="substring-before(@xlink:href, '#')"/>
1046
          </xsl:when>
1047
        </xsl:choose>
1048
      </xsl:variable>
1049

    
1050
      <xsl:variable name="targetptr.att">
1051
        <xsl:choose>
1052
          <xsl:when test="@targetptr != ''">
1053
            <xsl:value-of select="@targetptr"/>
1054
          </xsl:when>
1055
          <xsl:when test="@xlink:role=$xolink.role and
1056
                       contains(@xlink:href, '#')" >
1057
            <xsl:value-of select="substring-after(@xlink:href, '#')"/>
1058
          </xsl:when>
1059
        </xsl:choose>
1060
      </xsl:variable>
1061

    
1062
      <xsl:variable name="olink.lang">
1063
        <xsl:call-template name="l10n.language">
1064
          <xsl:with-param name="xref-context" select="true()"/>
1065
        </xsl:call-template>
1066
      </xsl:variable>
1067
    
1068
      <xsl:variable name="target.database.filename">
1069
        <xsl:call-template name="select.target.database">
1070
          <xsl:with-param name="targetdoc.att" select="$targetdoc.att"/>
1071
          <xsl:with-param name="targetptr.att" select="$targetptr.att"/>
1072
          <xsl:with-param name="olink.lang" select="$olink.lang"/>
1073
        </xsl:call-template>
1074
      </xsl:variable>
1075
    
1076
      <xsl:variable name="target.database" 
1077
          select="document($target.database.filename,/)"/>
1078
    
1079
      <xsl:if test="$olink.debug != 0">
1080
        <xsl:message>
1081
          <xsl:text>Olink debug: root element of target.database '</xsl:text>
1082
          <xsl:value-of select="$target.database.filename"/>
1083
          <xsl:text>' is '</xsl:text>
1084
          <xsl:value-of select="local-name($target.database/*[1])"/>
1085
          <xsl:text>'.</xsl:text>
1086
        </xsl:message>
1087
      </xsl:if>
1088
    
1089
      <xsl:variable name="olink.key">
1090
        <xsl:call-template name="select.olink.key">
1091
          <xsl:with-param name="targetdoc.att" select="$targetdoc.att"/>
1092
          <xsl:with-param name="targetptr.att" select="$targetptr.att"/>
1093
          <xsl:with-param name="olink.lang" select="$olink.lang"/>
1094
          <xsl:with-param name="target.database" select="$target.database"/>
1095
        </xsl:call-template>
1096
      </xsl:variable>
1097
    
1098
      <xsl:if test="string-length($olink.key) = 0">
1099
        <xsl:message>
1100
          <xsl:text>Error: unresolved olink: </xsl:text>
1101
          <xsl:text>targetdoc/targetptr = '</xsl:text>
1102
          <xsl:value-of select="$targetdoc.att"/>
1103
          <xsl:text>/</xsl:text>
1104
          <xsl:value-of select="$targetptr.att"/>
1105
          <xsl:text>'.</xsl:text>
1106
        </xsl:message>
1107
      </xsl:if>
1108

    
1109
      <xsl:variable name="href">
1110
        <xsl:call-template name="make.olink.href">
1111
          <xsl:with-param name="olink.key" select="$olink.key"/>
1112
          <xsl:with-param name="target.database" select="$target.database"/>
1113
        </xsl:call-template>
1114
      </xsl:variable>
1115

    
1116
      <xsl:variable name="hottext">
1117
        <xsl:choose>
1118
          <xsl:when test="string-length($content) != 0">
1119
            <xsl:copy-of select="$content"/>
1120
          </xsl:when>
1121
          <xsl:otherwise>
1122
            <xsl:call-template name="olink.hottext">
1123
              <xsl:with-param name="olink.key" select="$olink.key"/>
1124
              <xsl:with-param name="olink.lang" select="$olink.lang"/>
1125
              <xsl:with-param name="target.database" select="$target.database"/>
1126
            </xsl:call-template>
1127
          </xsl:otherwise>
1128
        </xsl:choose>
1129
      </xsl:variable>
1130

    
1131
      <xsl:variable name="olink.docname.citation">
1132
        <xsl:call-template name="olink.document.citation">
1133
          <xsl:with-param name="olink.key" select="$olink.key"/>
1134
          <xsl:with-param name="target.database" select="$target.database"/>
1135
          <xsl:with-param name="olink.lang" select="$olink.lang"/>
1136
        </xsl:call-template>
1137
      </xsl:variable>
1138

    
1139
      <xsl:variable name="olink.page.citation">
1140
        <xsl:call-template name="olink.page.citation">
1141
          <xsl:with-param name="olink.key" select="$olink.key"/>
1142
          <xsl:with-param name="target.database" select="$target.database"/>
1143
          <xsl:with-param name="olink.lang" select="$olink.lang"/>
1144
        </xsl:call-template>
1145
      </xsl:variable>
1146

    
1147
      <xsl:choose>
1148
        <xsl:when test="$href != ''">
1149
          <a href="{$href}">
1150
            <xsl:apply-templates select="." mode="common.html.attributes"/>
1151
            <xsl:copy-of select="$hottext"/>
1152
          </a>
1153
          <xsl:copy-of select="$olink.page.citation"/>
1154
          <xsl:copy-of select="$olink.docname.citation"/>
1155
        </xsl:when>
1156
        <xsl:otherwise>
1157
          <span class="olink"><xsl:copy-of select="$hottext"/></span>
1158
          <xsl:copy-of select="$olink.page.citation"/>
1159
          <xsl:copy-of select="$olink.docname.citation"/>
1160
        </xsl:otherwise>
1161
      </xsl:choose>
1162

    
1163
    </xsl:when>
1164

    
1165
    <!-- Or use old olink mechanism -->
1166
    <xsl:otherwise>
1167
      <xsl:variable name="href">
1168
        <xsl:choose>
1169
          <xsl:when test="@linkmode">
1170
            <!-- use the linkmode to get the base URI, use localinfo as fragid -->
1171
            <xsl:variable name="modespec" select="key('id',@linkmode)"/>
1172
            <xsl:if test="count($modespec) != 1
1173
                          or local-name($modespec) != 'modespec'">
1174
              <xsl:message>Warning: olink linkmode pointer is wrong.</xsl:message>
1175
            </xsl:if>
1176
            <xsl:value-of select="$modespec"/>
1177
            <xsl:if test="@localinfo">
1178
              <xsl:text>#</xsl:text>
1179
              <xsl:value-of select="@localinfo"/>
1180
            </xsl:if>
1181
          </xsl:when>
1182
          <xsl:when test="@type = 'href'">
1183
            <xsl:call-template name="olink.outline">
1184
              <xsl:with-param name="outline.base.uri"
1185
                              select="unparsed-entity-uri(@targetdocent)"/>
1186
              <xsl:with-param name="localinfo" select="@localinfo"/>
1187
              <xsl:with-param name="return" select="'href'"/>
1188
            </xsl:call-template>
1189
          </xsl:when>
1190
          <xsl:otherwise>
1191
            <xsl:value-of select="$olink.resolver"/>
1192
            <xsl:text>?</xsl:text>
1193
            <xsl:value-of select="$olink.sysid"/>
1194
            <xsl:value-of select="unparsed-entity-uri(@targetdocent)"/>
1195
            <!-- XSL gives no access to the public identifier (grumble...) -->
1196
            <xsl:if test="@localinfo">
1197
              <xsl:text>&amp;</xsl:text>
1198
              <xsl:value-of select="$olink.fragid"/>
1199
              <xsl:value-of select="@localinfo"/>
1200
            </xsl:if>
1201
          </xsl:otherwise>
1202
        </xsl:choose>
1203
      </xsl:variable>
1204
    
1205
      <xsl:choose>
1206
        <xsl:when test="$href != ''">
1207
          <a href="{$href}">
1208
            <xsl:apply-templates select="." mode="common.html.attributes"/>
1209
            <xsl:call-template name="olink.hottext"/>
1210
          </a>
1211
        </xsl:when>
1212
        <xsl:otherwise>
1213
          <xsl:call-template name="olink.hottext"/>
1214
        </xsl:otherwise>
1215
      </xsl:choose>
1216
    </xsl:otherwise>
1217
  </xsl:choose>
1218
</xsl:template>
1219

    
1220
<xsl:template match="*" mode="pagenumber.markup">
1221
  <!-- no-op in HTML -->
1222
</xsl:template>
1223

    
1224

    
1225
<xsl:template name="olink.outline">
1226
  <xsl:param name="outline.base.uri"/>
1227
  <xsl:param name="localinfo"/>
1228
  <xsl:param name="return" select="href"/>
1229

    
1230
  <xsl:variable name="outline-file"
1231
                select="concat($outline.base.uri,
1232
                               $olink.outline.ext)"/>
1233

    
1234
  <xsl:variable name="outline" select="document($outline-file,.)/div"/>
1235

    
1236
  <xsl:variable name="node-href">
1237
    <xsl:choose>
1238
      <xsl:when test="$localinfo != ''">
1239
        <xsl:variable name="node" select="$outline//
1240
                                   *[@id=$localinfo or @xml:id=$localinfo]"/>
1241
        <xsl:value-of select="$node/@href"/>
1242
      </xsl:when>
1243
      <xsl:otherwise>
1244
        <xsl:value-of select="$outline/@href"/>
1245
      </xsl:otherwise>
1246
    </xsl:choose>
1247
  </xsl:variable>
1248

    
1249
  <xsl:variable name="node-xref">
1250
    <xsl:choose>
1251
      <xsl:when test="$localinfo != ''">
1252
        <xsl:variable name="node" select="$outline//
1253
                               *[@id=$localinfo or @xml:id=$localinfo]"/>
1254
        <xsl:copy-of select="$node/xref"/>
1255
      </xsl:when>
1256
      <xsl:otherwise>
1257
        <xsl:value-of select="$outline/xref"/>
1258
      </xsl:otherwise>
1259
    </xsl:choose>
1260
  </xsl:variable>
1261

    
1262
  <xsl:choose>
1263
    <xsl:when test="$return = 'href'">
1264
      <xsl:value-of select="$node-href"/>
1265
    </xsl:when>
1266
    <xsl:when test="$return = 'xref'">
1267
      <xsl:value-of select="$node-xref"/>
1268
    </xsl:when>
1269
    <xsl:otherwise>
1270
      <xsl:copy-of select="$node-xref"/>
1271
    </xsl:otherwise>
1272
  </xsl:choose>
1273
</xsl:template>
1274

    
1275
<!-- ==================================================================== -->
1276

    
1277
<xsl:template name="xref.xreflabel">
1278
  <!-- called to process an xreflabel...you might use this to make  -->
1279
  <!-- xreflabels come out in the right font for different targets, -->
1280
  <!-- for example. -->
1281
  <xsl:param name="target" select="."/>
1282
  <xsl:value-of select="$target/@xreflabel"/>
1283
</xsl:template>
1284

    
1285
<!-- ==================================================================== -->
1286

    
1287
<xsl:template match="title" mode="xref">
1288
  <xsl:apply-templates/>
1289
</xsl:template>
1290

    
1291
<xsl:template match="command" mode="xref">
1292
  <xsl:call-template name="inline.boldseq"/>
1293
</xsl:template>
1294

    
1295
<xsl:template match="function" mode="xref">
1296
  <xsl:call-template name="inline.monoseq"/>
1297
</xsl:template>
1298

    
1299
<!-- ==================================================================== -->
1300

    
1301
<xsl:template match="*" mode="insert.title.markup">
1302
  <xsl:param name="purpose"/>
1303
  <xsl:param name="xrefstyle"/>
1304
  <xsl:param name="title"/>
1305

    
1306
  <xsl:choose>
1307
    <!-- FIXME: what about the case where titleabbrev is inside the info? -->
1308
    <xsl:when test="$purpose = 'xref' and titleabbrev">
1309
      <xsl:apply-templates select="." mode="titleabbrev.markup"/>
1310
    </xsl:when>
1311
    <xsl:otherwise>
1312
      <xsl:copy-of select="$title"/>
1313
    </xsl:otherwise>
1314
  </xsl:choose>
1315
</xsl:template>
1316

    
1317
<xsl:template match="chapter|appendix" mode="insert.title.markup">
1318
  <xsl:param name="purpose"/>
1319
  <xsl:param name="xrefstyle"/>
1320
  <xsl:param name="title"/>
1321

    
1322
  <xsl:choose>
1323
    <xsl:when test="$purpose = 'xref'">
1324
      <i>
1325
        <xsl:copy-of select="$title"/>
1326
      </i>
1327
    </xsl:when>
1328
    <xsl:otherwise>
1329
      <xsl:copy-of select="$title"/>
1330
    </xsl:otherwise>
1331
  </xsl:choose>
1332
</xsl:template>
1333

    
1334
<xsl:template match="*" mode="insert.subtitle.markup">
1335
  <xsl:param name="purpose"/>
1336
  <xsl:param name="xrefstyle"/>
1337
  <xsl:param name="subtitle"/>
1338

    
1339
  <xsl:copy-of select="$subtitle"/>
1340
</xsl:template>
1341

    
1342
<xsl:template match="*" mode="insert.label.markup">
1343
  <xsl:param name="purpose"/>
1344
  <xsl:param name="xrefstyle"/>
1345
  <xsl:param name="label"/>
1346

    
1347
  <xsl:copy-of select="$label"/>
1348
</xsl:template>
1349

    
1350
<xsl:template match="*" mode="insert.pagenumber.markup">
1351
  <xsl:param name="purpose"/>
1352
  <xsl:param name="xrefstyle"/>
1353
  <xsl:param name="pagenumber"/>
1354

    
1355
  <xsl:copy-of select="$pagenumber"/>
1356
</xsl:template>
1357

    
1358
<xsl:template match="*" mode="insert.direction.markup">
1359
  <xsl:param name="purpose"/>
1360
  <xsl:param name="xrefstyle"/>
1361
  <xsl:param name="direction"/>
1362

    
1363
  <xsl:copy-of select="$direction"/>
1364
</xsl:template>
1365

    
1366
<xsl:template match="*" mode="insert.olink.docname.markup">
1367
  <xsl:param name="purpose"/>
1368
  <xsl:param name="xrefstyle"/>
1369
  <xsl:param name="docname"/>
1370

    
1371
  <span class="olinkdocname">
1372
    <xsl:copy-of select="$docname"/>
1373
  </span>
1374

    
1375
</xsl:template>
1376

    
1377
</xsl:stylesheet>
(39-39/39)