source: stylesheets/lfs-xsl/docbook-xsl-1.78.1/common/olink.xsl@ 15c7d39

10.0 10.0-rc1 10.1 10.1-rc1 11.0 11.0-rc1 11.0-rc2 11.0-rc3 11.1 11.1-rc1 11.2 11.2-rc1 11.3 11.3-rc1 12.0 12.0-rc1 12.1 12.1-rc1 7.5 7.6 7.7 7.8 7.9 8.0 8.1 8.2 8.3 8.4 9.0 9.1 arm bdubbs/gcc13 ml-11.0 multilib renodr/libudev-from-systemd s6-init trunk xry111/arm64 xry111/arm64-12.0 xry111/clfs-ng xry111/lfs-next xry111/loongarch xry111/loongarch-12.0 xry111/loongarch-12.1 xry111/mips64el xry111/pip3 xry111/rust-wip-20221008 xry111/update-glibc
Last change on this file since 15c7d39 was 15c7d39, checked in by Matthew Burgess <matthew@…>, 11 years ago

Update stylesheets to docbook-xsl-1.78.1.

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@10355 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

  • Property mode set to 100644
File size: 48.8 KB
Line 
1<?xml version="1.0"?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3 version="1.0">
4
5<!-- ********************************************************************
6 $Id: olink.xsl 9650 2012-10-26 18:24:02Z bobstayton $
7 ********************************************************************
8
9 This file is part of the DocBook XSL Stylesheet distribution.
10 See ../README or http://docbook.sf.net/ for copyright
11 copyright and other information.
12
13 ******************************************************************** -->
14
15<!-- Create keys for quickly looking up olink targets -->
16<xsl:key name="targetdoc-key" match="document" use="@targetdoc" />
17<xsl:key name="targetptr-key" match="div|obj"
18 use="concat(ancestor::document/@targetdoc, '/',
19 @targetptr, '/', ancestor::document/@lang)" />
20
21<!-- Return filename of database -->
22<xsl:template name="select.target.database">
23 <xsl:param name="targetdoc.att" select="''"/>
24 <xsl:param name="targetptr.att" select="''"/>
25 <xsl:param name="olink.lang" select="''"/>
26
27 <!-- use root's xml:base if exists -->
28 <xsl:variable name="xml.base" select="/*/@xml:base"/>
29
30 <!-- This selection can be customized if needed -->
31 <xsl:variable name="target.database.filename">
32 <xsl:choose>
33 <xsl:when test="$xml.base != '' and
34 not(starts-with($target.database.document, 'file:/')) and
35 not(starts-with($target.database.document, '/'))">
36 <xsl:call-template name="systemIdToBaseURI">
37 <xsl:with-param name="systemId" select="$xml.base"/>
38 </xsl:call-template>
39 <xsl:value-of select="$target.database.document"/>
40 </xsl:when>
41 <xsl:otherwise>
42 <xsl:value-of select="$target.database.document"/>
43 </xsl:otherwise>
44 </xsl:choose>
45 </xsl:variable>
46
47 <xsl:variable name="target.database"
48 select="document($target.database.filename,/)"/>
49
50 <xsl:choose>
51 <!-- Was the database document parameter not set? -->
52 <xsl:when test="$target.database.document = ''">
53 <xsl:message>
54 <xsl:text>Olinks not processed: must specify a </xsl:text>
55 <xsl:text>$target.database.document parameter&#10;</xsl:text>
56 <xsl:text>when using olinks with targetdoc </xsl:text>
57 <xsl:text>and targetptr attributes.</xsl:text>
58 </xsl:message>
59 </xsl:when>
60 <xsl:when test="namespace-uri($target.database/*) != ''">
61 <xsl:message>
62 <xsl:text>Olink error: the targetset element and children in '</xsl:text>
63 <xsl:value-of select="$target.database.document"/>
64 <xsl:text>' should not be in any namespace.</xsl:text>
65 </xsl:message>
66 </xsl:when>
67 <!-- Did it not open? Should be a targetset element -->
68 <xsl:when test="not($target.database/*)">
69 <xsl:message>
70 <xsl:text>Olink error: could not open target database '</xsl:text>
71 <xsl:value-of select="$target.database.filename"/>
72 <xsl:text>'.</xsl:text>
73 </xsl:message>
74 </xsl:when>
75 <xsl:otherwise>
76 <xsl:value-of select="$target.database.filename"/>
77 </xsl:otherwise>
78 </xsl:choose>
79</xsl:template>
80
81<xsl:template name="select.olink.key">
82 <xsl:param name="targetdoc.att" select="''"/>
83 <xsl:param name="targetptr.att" select="''"/>
84 <xsl:param name="olink.lang" select="''"/>
85 <xsl:param name="target.database"/>
86
87 <xsl:if test="$target.database/*">
88 <xsl:variable name="olink.fallback.sequence">
89 <xsl:call-template name="select.olink.lang.fallback">
90 <xsl:with-param name="olink.lang" select="$olink.lang"/>
91 </xsl:call-template>
92 </xsl:variable>
93
94 <!-- Recurse through the languages until you find a match -->
95 <xsl:call-template name="select.olink.key.in.lang">
96 <xsl:with-param name="targetdoc.att" select="$targetdoc.att"/>
97 <xsl:with-param name="targetptr.att" select="$targetptr.att"/>
98 <xsl:with-param name="olink.lang" select="$olink.lang"/>
99 <xsl:with-param name="target.database" select="$target.database"/>
100 <xsl:with-param name="fallback.index" select="1"/>
101 <xsl:with-param name="olink.fallback.sequence"
102 select="$olink.fallback.sequence"/>
103 </xsl:call-template>
104 </xsl:if>
105
106</xsl:template>
107
108<!-- Locate olink key in a particular language -->
109<xsl:template name="select.olink.key.in.lang">
110 <xsl:param name="targetdoc.att" select="''"/>
111 <xsl:param name="targetptr.att" select="''"/>
112 <xsl:param name="olink.lang" select="''"/>
113 <xsl:param name="target.database"/>
114 <xsl:param name="fallback.index" select="1"/>
115 <xsl:param name="olink.fallback.sequence" select="''"/>
116
117 <xsl:variable name="target.lang">
118 <xsl:call-template name="select.target.lang">
119 <xsl:with-param name="fallback.index" select="$fallback.index"/>
120 <xsl:with-param name="olink.fallback.sequence"
121 select="$olink.fallback.sequence"/>
122 </xsl:call-template>
123 </xsl:variable>
124
125 <xsl:if test="$olink.debug != 0">
126 <xsl:message><xsl:text>Olink debug: cases for targetdoc='</xsl:text>
127 <xsl:value-of select="$targetdoc.att"/>
128 <xsl:text>' and targetptr='</xsl:text>
129 <xsl:value-of select="$targetptr.att"/>
130 <xsl:text>' in language '</xsl:text>
131 <xsl:value-of select="$target.lang"/>
132 <xsl:text>'.</xsl:text>
133 </xsl:message>
134 </xsl:if>
135
136 <!-- Customize these cases if you want different selection logic -->
137 <xsl:variable name="CaseA">
138 <!-- targetdoc.att = not blank
139 targetptr.att = not blank
140 -->
141 <xsl:if test="$targetdoc.att != '' and
142 $targetptr.att != ''">
143 <xsl:for-each select="$target.database">
144 <xsl:variable name="key"
145 select="concat($targetdoc.att, '/',
146 $targetptr.att, '/',
147 $target.lang)"/>
148 <xsl:choose>
149 <xsl:when test="key('targetptr-key', $key)[1]/@href != ''">
150 <xsl:value-of select="$key"/>
151 <xsl:if test="$olink.debug != 0">
152 <xsl:message>Olink debug: CaseA matched.</xsl:message>
153 </xsl:if>
154 </xsl:when>
155 <xsl:when test="$olink.debug != 0">
156 <xsl:message>Olink debug: CaseA NOT matched</xsl:message>
157 </xsl:when>
158 </xsl:choose>
159 </xsl:for-each>
160 </xsl:if>
161 </xsl:variable>
162
163 <xsl:variable name="CaseB">
164 <!-- targetdoc.att = not blank
165 targetptr.att = not blank
166 prefer.internal.olink = not zero
167 current.docid = not blank
168 -->
169 <xsl:if test="$targetdoc.att != '' and
170 $targetptr.att != '' and
171 $current.docid != '' and
172 $prefer.internal.olink != 0">
173 <xsl:for-each select="$target.database">
174 <xsl:variable name="key"
175 select="concat($current.docid, '/',
176 $targetptr.att, '/',
177 $target.lang)"/>
178 <xsl:choose>
179 <xsl:when test="key('targetptr-key', $key)[1]/@href != ''">
180 <xsl:value-of select="$key"/>
181 <xsl:if test="$olink.debug != 0">
182 <xsl:message>Olink debug: CaseB matched.</xsl:message>
183 </xsl:if>
184 </xsl:when>
185 <xsl:when test="$olink.debug != 0">
186 <xsl:message>Olink debug: CaseB NOT matched</xsl:message>
187 </xsl:when>
188 </xsl:choose>
189 </xsl:for-each>
190 </xsl:if>
191 </xsl:variable>
192
193 <xsl:variable name="CaseC">
194 <!-- targetdoc.att = blank
195 targetptr.att = not blank
196 current.docid = not blank
197 -->
198 <xsl:if test="string-length($targetdoc.att) = 0 and
199 $targetptr.att != '' and
200 $current.docid != ''">
201 <!-- Must use a for-each to change context for keys to work -->
202 <xsl:for-each select="$target.database">
203 <xsl:variable name="key"
204 select="concat($current.docid, '/',
205 $targetptr.att, '/',
206 $target.lang)"/>
207 <xsl:choose>
208 <xsl:when test="key('targetptr-key', $key)[1]/@href != ''">
209 <xsl:value-of select="$key"/>
210 <xsl:if test="$olink.debug != 0">
211 <xsl:message>Olink debug: CaseC matched.</xsl:message>
212 </xsl:if>
213 </xsl:when>
214 <xsl:when test="$olink.debug != 0">
215 <xsl:message>Olink debug: CaseC NOT matched.</xsl:message>
216 </xsl:when>
217 </xsl:choose>
218 </xsl:for-each>
219 </xsl:if>
220 </xsl:variable>
221
222 <xsl:variable name="CaseD">
223 <!-- targetdoc.att = blank
224 targetptr.att = not blank
225 current.docid = blank
226 -->
227 <!-- This is possible if only one document in the database -->
228 <xsl:if test="string-length($targetdoc.att) = 0 and
229 $targetptr.att != '' and
230 string-length($current.docid) = 0 and
231 count($target.database//document) = 1">
232 <xsl:for-each select="$target.database">
233 <xsl:variable name="key"
234 select="concat(.//document/@targetdoc, '/',
235 $targetptr.att, '/',
236 $target.lang)"/>
237 <xsl:choose>
238 <xsl:when test="key('targetptr-key', $key)[1]/@href != ''">
239 <xsl:value-of select="$key"/>
240 <xsl:if test="$olink.debug != 0">
241 <xsl:message>Olink debug: CaseD matched.</xsl:message>
242 </xsl:if>
243 </xsl:when>
244 <xsl:when test="$olink.debug != 0">
245 <xsl:message>Olink debug: CaseD NOT matched</xsl:message>
246 </xsl:when>
247 </xsl:choose>
248 </xsl:for-each>
249 </xsl:if>
250 </xsl:variable>
251
252 <xsl:variable name="CaseE">
253 <!-- targetdoc.att = not blank
254 targetptr.att = blank
255 -->
256 <xsl:if test="$targetdoc.att != '' and
257 string-length($targetptr.att) = 0">
258
259 <!-- Try the document's root element id -->
260 <xsl:variable name="rootid">
261 <xsl:choose>
262 <xsl:when test="$target.lang != ''">
263 <xsl:value-of select="$target.database//document[@targetdoc = $targetdoc.att and @lang = $target.lang]/*[1]/@targetptr"/>
264 </xsl:when>
265 <xsl:otherwise>
266 <xsl:value-of select="$target.database//document[@targetdoc = $targetdoc.att and not(@lang)]/*[1]/@targetptr"/>
267 </xsl:otherwise>
268 </xsl:choose>
269 </xsl:variable>
270
271 <xsl:for-each select="$target.database">
272 <xsl:variable name="key"
273 select="concat($targetdoc.att, '/',
274 $rootid, '/',
275 $target.lang)"/>
276 <xsl:choose>
277 <xsl:when test="key('targetptr-key', $key)[1]/@href != ''">
278 <xsl:value-of select="$key"/>
279 <xsl:if test="$olink.debug != 0">
280 <xsl:message>Olink debug: CaseE matched.</xsl:message>
281 </xsl:if>
282 </xsl:when>
283 <xsl:when test="$olink.debug != 0">
284 <xsl:message>Olink debug: CaseE NOT matched.</xsl:message>
285 </xsl:when>
286 </xsl:choose>
287 </xsl:for-each>
288 </xsl:if>
289 </xsl:variable>
290
291 <xsl:variable name="CaseF">
292 <!-- targetdoc.att = not blank
293 targetptr.att = blank
294 prefer.internal.olink = not zero
295 current.docid = not blank
296 -->
297 <xsl:if test="$targetdoc.att != '' and
298 string-length($targetptr.att) = 0 and
299 $current.docid != '' and
300 $prefer.internal.olink != 0">
301 <!-- Try the document's root element id -->
302 <xsl:variable name="rootid">
303 <xsl:choose>
304 <xsl:when test="$target.lang != ''">
305 <xsl:value-of select="$target.database//document[@targetdoc = $current.docid and @lang = $target.lang]/*[1]/@targetptr"/>
306 </xsl:when>
307 <xsl:otherwise>
308 <xsl:value-of select="$target.database//document[@targetdoc = $current.docid and not(@lang)]/*[1]/@targetptr"/>
309 </xsl:otherwise>
310 </xsl:choose>
311 </xsl:variable>
312
313 <xsl:for-each select="$target.database">
314 <xsl:variable name="key"
315 select="concat($current.docid, '/',
316 $rootid, '/',
317 $target.lang)"/>
318 <xsl:choose>
319 <xsl:when test="key('targetptr-key', $key)[1]/@href != ''">
320 <xsl:value-of select="$key"/>
321 <xsl:if test="$olink.debug != 0">
322 <xsl:message>Olink debug: CaseF matched.</xsl:message>
323 </xsl:if>
324 </xsl:when>
325 <xsl:when test="$olink.debug != 0">
326 <xsl:message>Olink debug: CaseF NOT matched.</xsl:message>
327 </xsl:when>
328 </xsl:choose>
329 </xsl:for-each>
330 </xsl:if>
331 </xsl:variable>
332
333 <!-- Now select the best match. Customize the order if needed -->
334 <xsl:variable name="selected.key">
335 <xsl:choose>
336 <xsl:when test="$CaseB != ''">
337 <xsl:value-of select="$CaseB"/>
338 <xsl:if test="$olink.debug != 0">
339 <xsl:message>
340 <xsl:text>Olink debug: CaseB key is the final selection: </xsl:text>
341 <xsl:value-of select="$CaseB"/>
342 </xsl:message>
343 </xsl:if>
344 </xsl:when>
345 <xsl:when test="$CaseA != ''">
346 <xsl:value-of select="$CaseA"/>
347 <xsl:if test="$olink.debug != 0">
348 <xsl:message>
349 <xsl:text>Olink debug: CaseA key is the final selection: </xsl:text>
350 <xsl:value-of select="$CaseA"/>
351 </xsl:message>
352 </xsl:if>
353 </xsl:when>
354 <xsl:when test="$CaseC != ''">
355 <xsl:value-of select="$CaseC"/>
356 <xsl:if test="$olink.debug != 0">
357 <xsl:message>
358 <xsl:text>Olink debug: CaseC key is the final selection: </xsl:text>
359 <xsl:value-of select="$CaseC"/>
360 </xsl:message>
361 </xsl:if>
362 </xsl:when>
363 <xsl:when test="$CaseD != ''">
364 <xsl:value-of select="$CaseD"/>
365 <xsl:if test="$olink.debug != 0">
366 <xsl:message>
367 <xsl:text>Olink debug: CaseD key is the final selection: </xsl:text>
368 <xsl:value-of select="$CaseD"/>
369 </xsl:message>
370 </xsl:if>
371 </xsl:when>
372 <xsl:when test="$CaseF != ''">
373 <xsl:value-of select="$CaseF"/>
374 <xsl:if test="$olink.debug != 0">
375 <xsl:message>
376 <xsl:text>Olink debug: CaseF key is the final selection: </xsl:text>
377 <xsl:value-of select="$CaseF"/>
378 </xsl:message>
379 </xsl:if>
380 </xsl:when>
381 <xsl:when test="$CaseE != ''">
382 <xsl:value-of select="$CaseE"/>
383 <xsl:if test="$olink.debug != 0">
384 <xsl:message>
385 <xsl:text>Olink debug: CaseE key is the final selection: </xsl:text>
386 <xsl:value-of select="$CaseE"/>
387 </xsl:message>
388 </xsl:if>
389 </xsl:when>
390 <xsl:otherwise>
391 <xsl:if test="$olink.debug != 0">
392 <xsl:message>
393 <xsl:text>Olink debug: No case matched for lang '</xsl:text>
394 <xsl:value-of select="$target.lang"/>
395 <xsl:text>'.</xsl:text>
396 </xsl:message>
397 </xsl:if>
398 </xsl:otherwise>
399 </xsl:choose>
400 </xsl:variable>
401
402 <xsl:choose>
403 <xsl:when test="$selected.key != ''">
404 <xsl:value-of select="$selected.key"/>
405 </xsl:when>
406 <xsl:when test="string-length($selected.key) = 0 and
407 string-length($target.lang) = 0">
408 <!-- No match on last try, and we are done -->
409 </xsl:when>
410 <xsl:otherwise>
411 <!-- Recurse through next language -->
412 <xsl:call-template name="select.olink.key.in.lang">
413 <xsl:with-param name="targetdoc.att" select="$targetdoc.att"/>
414 <xsl:with-param name="targetptr.att" select="$targetptr.att"/>
415 <xsl:with-param name="olink.lang" select="$olink.lang"/>
416 <xsl:with-param name="target.database" select="$target.database"/>
417 <xsl:with-param name="fallback.index" select="$fallback.index + 1"/>
418 <xsl:with-param name="olink.fallback.sequence"
419 select="$olink.fallback.sequence"/>
420 </xsl:call-template>
421 </xsl:otherwise>
422 </xsl:choose>
423
424</xsl:template>
425
426<xsl:template name="select.target.lang">
427 <xsl:param name="fallback.index" select="1"/>
428 <xsl:param name="olink.fallback.sequence" select="''"/>
429
430 <!-- recurse backwards to find the lang matching the index -->
431 <xsl:variable name="firstlang"
432 select="substring-before($olink.fallback.sequence, ' ')"/>
433 <xsl:variable name="rest"
434 select="substring-after($olink.fallback.sequence, ' ')"/>
435 <xsl:choose>
436 <xsl:when test="$fallback.index = 1">
437 <xsl:value-of select="$firstlang"/>
438 </xsl:when>
439 <xsl:when test="$fallback.index &gt; 1">
440 <xsl:call-template name="select.target.lang">
441 <xsl:with-param name="fallback.index" select="$fallback.index - 1"/>
442 <xsl:with-param name="olink.fallback.sequence"
443 select="$rest"/>
444 </xsl:call-template>
445 </xsl:when>
446 <xsl:otherwise>
447 </xsl:otherwise>
448 </xsl:choose>
449</xsl:template>
450
451<xsl:template name="select.olink.lang.fallback">
452 <xsl:param name="olink.lang" select="''"/>
453
454 <!-- Prefer language of the olink element -->
455 <xsl:value-of select="concat(normalize-space(concat($olink.lang, ' ',
456 $olink.lang.fallback.sequence)), ' ')"/>
457</xsl:template>
458
459<!-- Returns the complete olink href value if found -->
460<xsl:template name="make.olink.href">
461 <xsl:param name="olink.key" select="''"/>
462 <xsl:param name="target.database"/>
463
464 <xsl:if test="$olink.key != ''">
465 <xsl:variable name="target.href" >
466 <xsl:for-each select="$target.database" >
467 <xsl:value-of select="key('targetptr-key', $olink.key)[1]/@href" />
468 </xsl:for-each>
469 </xsl:variable>
470
471 <xsl:variable name="targetdoc">
472 <xsl:value-of select="substring-before($olink.key, '/')"/>
473 </xsl:variable>
474
475 <!-- Does the target database use a sitemap? -->
476 <xsl:variable name="use.sitemap">
477 <xsl:choose>
478 <xsl:when test="$target.database//sitemap">1</xsl:when>
479 <xsl:otherwise>0</xsl:otherwise>
480 </xsl:choose>
481 </xsl:variable>
482
483
484 <!-- Get the baseuri for this targetptr -->
485 <xsl:variable name="baseuri" >
486 <xsl:choose>
487 <!-- Does the database use a sitemap? -->
488 <xsl:when test="$use.sitemap != 0" >
489 <xsl:choose>
490 <!-- Was current.docid parameter set? -->
491 <xsl:when test="$current.docid != ''">
492 <!-- Was it found in the database? -->
493 <xsl:variable name="currentdoc.key" >
494 <xsl:for-each select="$target.database" >
495 <xsl:value-of select="key('targetdoc-key',
496 $current.docid)[1]/@targetdoc" />
497 </xsl:for-each>
498 </xsl:variable>
499 <xsl:choose>
500 <xsl:when test="$currentdoc.key != ''">
501 <xsl:for-each select="$target.database" >
502 <xsl:call-template name="targetpath" >
503 <xsl:with-param name="dirnode"
504 select="key('targetdoc-key', $current.docid)[1]/parent::dir"/>
505 <xsl:with-param name="targetdoc" select="$targetdoc"/>
506 </xsl:call-template>
507 </xsl:for-each >
508 </xsl:when>
509 <xsl:otherwise>
510 <xsl:message>
511 <xsl:text>Olink error: cannot compute relative </xsl:text>
512 <xsl:text>sitemap path because $current.docid '</xsl:text>
513 <xsl:value-of select="$current.docid"/>
514 <xsl:text>' not found in target database.</xsl:text>
515 </xsl:message>
516 </xsl:otherwise>
517 </xsl:choose>
518 </xsl:when>
519 <xsl:otherwise>
520 <xsl:message>
521 <xsl:text>Olink warning: cannot compute relative </xsl:text>
522 <xsl:text>sitemap path without $current.docid parameter</xsl:text>
523 </xsl:message>
524 </xsl:otherwise>
525 </xsl:choose>
526 <!-- In either case, add baseuri from its document entry-->
527 <xsl:variable name="docbaseuri">
528 <xsl:for-each select="$target.database" >
529 <xsl:value-of select="key('targetdoc-key', $targetdoc)[1]/@baseuri" />
530 </xsl:for-each>
531 </xsl:variable>
532 <xsl:if test="$docbaseuri != ''" >
533 <xsl:value-of select="$docbaseuri"/>
534 </xsl:if>
535 </xsl:when>
536 <!-- No database sitemap in use -->
537 <xsl:otherwise>
538 <!-- Just use any baseuri from its document entry -->
539 <xsl:variable name="docbaseuri">
540 <xsl:for-each select="$target.database" >
541 <xsl:value-of select="key('targetdoc-key', $targetdoc)[1]/@baseuri" />
542 </xsl:for-each>
543 </xsl:variable>
544 <xsl:if test="$docbaseuri != ''" >
545 <xsl:value-of select="$docbaseuri"/>
546 </xsl:if>
547 </xsl:otherwise>
548 </xsl:choose>
549 </xsl:variable>
550
551 <!-- Is this olink to be active? -->
552 <xsl:variable name="active.olink">
553 <xsl:choose>
554 <xsl:when test="$activate.external.olinks = 0">
555 <xsl:choose>
556 <xsl:when test="$current.docid = ''">1</xsl:when>
557 <xsl:when test="$targetdoc = ''">1</xsl:when>
558 <xsl:when test="$targetdoc = $current.docid">1</xsl:when>
559 <xsl:otherwise>0</xsl:otherwise>
560 </xsl:choose>
561 </xsl:when>
562 <xsl:otherwise>1</xsl:otherwise>
563 </xsl:choose>
564 </xsl:variable>
565
566 <!-- Form the href information -->
567 <xsl:if test="$active.olink != 0">
568 <xsl:if test="$baseuri != ''">
569 <xsl:value-of select="$baseuri"/>
570 <xsl:if test="substring($target.href,1,1) != '#'">
571 <!--xsl:text>/</xsl:text-->
572 </xsl:if>
573 </xsl:if>
574 <!-- optionally turn off frag for PDF references -->
575 <xsl:if test="not($insert.olink.pdf.frag = 0 and
576 translate(substring($baseuri, string-length($baseuri) - 3),
577 'PDF', 'pdf') = '.pdf'
578 and starts-with($target.href, '#') )">
579 <xsl:value-of select="$target.href"/>
580 </xsl:if>
581 </xsl:if>
582 </xsl:if>
583</xsl:template>
584
585<!-- Computes the href of the object containing the olink element -->
586<xsl:template name="olink.from.uri">
587 <xsl:param name="target.database"/>
588 <xsl:param name="object" select="NotAnElement"/>
589 <xsl:param name="object.targetdoc" select="$current.docid"/>
590 <xsl:param name="object.lang"
591 select="concat($object/ancestor::*[last()]/@lang,
592 $object/ancestor::*[last()]/@xml:lang)"/>
593
594 <xsl:variable name="parent.id">
595 <xsl:call-template name="object.id">
596 <xsl:with-param name="object" select="$object"/>
597 </xsl:call-template>
598 </xsl:variable>
599
600 <!-- Get the olink key for the parent of olink element -->
601 <xsl:variable name="from.key">
602 <xsl:call-template name="select.olink.key">
603 <xsl:with-param name="targetdoc.att" select="$object.targetdoc"/>
604 <xsl:with-param name="targetptr.att" select="$parent.id"/>
605 <xsl:with-param name="olink.lang" select="$object.lang"/>
606 <xsl:with-param name="target.database" select="$target.database"/>
607 </xsl:call-template>
608 </xsl:variable>
609
610 <xsl:variable name="from.olink.href">
611 <xsl:for-each select="$target.database" >
612 <xsl:value-of select="key('targetptr-key', $from.key)[1]/@href" />
613 </xsl:for-each>
614 </xsl:variable>
615
616 <xsl:choose>
617 <!-- we found the olink object -->
618 <xsl:when test="$from.olink.href != ''">
619 <xsl:value-of select="$from.olink.href"/>
620 </xsl:when>
621 <xsl:when test="not($object/parent::*)">
622 <xsl:value-of select="$from.olink.href"/>
623 </xsl:when>
624 <xsl:otherwise>
625 <!-- recurse upward in current document -->
626 <xsl:call-template name="olink.from.uri">
627 <xsl:with-param name="target.database" select="$target.database"/>
628 <xsl:with-param name="object" select="$object/parent::*"/>
629 <xsl:with-param name="object.targetdoc" select="$object.targetdoc"/>
630 <xsl:with-param name="object.lang" select="$object.lang"/>
631 </xsl:call-template>
632 </xsl:otherwise>
633 </xsl:choose>
634
635</xsl:template>
636
637<xsl:template name="olink.hottext">
638 <xsl:param name="target.database"/>
639 <xsl:param name="olink.lang" select="''"/>
640 <xsl:param name="olink.key" select="''"/>
641 <xsl:param name="referrer" select="."/>
642 <xsl:param name="xrefstyle">
643 <xsl:choose>
644 <xsl:when test="@role and not(@xrefstyle)
645 and $use.role.as.xrefstyle != 0">
646 <xsl:value-of select="@role"/>
647 </xsl:when>
648 <xsl:otherwise>
649 <xsl:value-of select="@xrefstyle"/>
650 </xsl:otherwise>
651 </xsl:choose>
652 </xsl:param>
653
654 <xsl:choose>
655 <!-- If it has elements or text (not just PI or comment) -->
656 <xsl:when test="child::text() or child::*">
657 <xsl:apply-templates/>
658 </xsl:when>
659 <xsl:when test="$olink.key != ''">
660 <!-- Get the xref text for this record -->
661 <xsl:variable name="xref.text" >
662 <xsl:for-each select="$target.database" >
663 <xsl:call-template name="insert.targetdb.data">
664 <xsl:with-param name="data"
665 select="key('targetptr-key', $olink.key)[1]/xreftext/node()" />
666 </xsl:call-template>
667 </xsl:for-each>
668 </xsl:variable>
669
670 <xsl:variable name="xref.number" >
671 <xsl:for-each select="$target.database" >
672 <xsl:value-of select="key('targetptr-key', $olink.key)[1]/@number" />
673 </xsl:for-each>
674 </xsl:variable>
675
676 <xsl:variable name="target.elem" >
677 <xsl:for-each select="$target.database" >
678 <xsl:value-of select="key('targetptr-key', $olink.key)[1]/@element" />
679 </xsl:for-each>
680 </xsl:variable>
681
682 <xsl:variable name="lang">
683 <xsl:variable name="candidate">
684 <xsl:for-each select="$target.database" >
685 <xsl:value-of
686 select="key('targetptr-key', $olink.key)[1]/@lang" />
687 </xsl:for-each>
688 </xsl:variable>
689 <xsl:choose>
690 <xsl:when test="$candidate != ''">
691 <xsl:value-of select="$candidate"/>
692 </xsl:when>
693 <xsl:otherwise>
694 <xsl:value-of select="$olink.lang"/>
695 </xsl:otherwise>
696 </xsl:choose>
697 </xsl:variable>
698
699 <xsl:variable name="targetdoc">
700 <xsl:value-of select="substring-before($olink.key, '/')"/>
701 </xsl:variable>
702
703 <xsl:choose>
704 <xsl:when test="$xrefstyle != '' and
705 starts-with(normalize-space($xrefstyle), 'select:') and
706 (contains($xrefstyle, 'nodocname') or
707 contains($xrefstyle, 'nopage')) and
708 not(contains($xrefstyle, 'title')) and
709 not(contains($xrefstyle, 'label'))">
710 <xsl:copy-of select="$xref.text"/>
711 </xsl:when>
712 <xsl:when test="$xrefstyle != ''">
713 <xsl:if test="$olink.debug != 0">
714 <xsl:message>
715 <xsl:text>xrefstyle is '</xsl:text>
716 <xsl:value-of select="$xrefstyle"/>
717 <xsl:text>'.</xsl:text>
718 </xsl:message>
719 </xsl:if>
720 <xsl:variable name="template">
721 <xsl:choose>
722 <xsl:when test="starts-with(normalize-space($xrefstyle),
723 'select:')">
724 <xsl:call-template name="make.gentext.template">
725 <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
726 <xsl:with-param name="purpose" select="'olink'"/>
727 <xsl:with-param name="referrer" select="."/>
728 <xsl:with-param name="target.elem" select="$target.elem"/>
729 </xsl:call-template>
730 </xsl:when>
731 <xsl:when test="starts-with(normalize-space($xrefstyle),
732 'template:')">
733 <xsl:value-of select="substring-after(
734 normalize-space($xrefstyle), 'template:')"/>
735 </xsl:when>
736 <xsl:otherwise>
737 <!-- Look for Gentext template with @style attribute -->
738 <!-- Must compare to no style value because gentext.template
739 falls back to no style -->
740
741 <xsl:variable name="xref-context">
742 <xsl:call-template name="gentext.template">
743 <xsl:with-param name="context" select="'xref'"/>
744 <xsl:with-param name="name" select="$target.elem"/>
745 <xsl:with-param name="lang" select="$lang"/>
746 </xsl:call-template>
747 </xsl:variable>
748
749 <xsl:variable name="styled-xref-context">
750 <xsl:call-template name="gentext.template">
751 <xsl:with-param name="context" select="'xref'"/>
752 <xsl:with-param name="name" select="$target.elem"/>
753 <xsl:with-param name="lang" select="$lang"/>
754 <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
755 </xsl:call-template>
756 </xsl:variable>
757
758 <xsl:variable name="xref-number-context">
759 <xsl:call-template name="gentext.template">
760 <xsl:with-param name="context" select="'xref-number'"/>
761 <xsl:with-param name="name" select="$target.elem"/>
762 <xsl:with-param name="lang" select="$lang"/>
763 </xsl:call-template>
764 </xsl:variable>
765
766 <xsl:variable name="styled-xref-number-context">
767 <xsl:call-template name="gentext.template">
768 <xsl:with-param name="context" select="'xref-number'"/>
769 <xsl:with-param name="name" select="$target.elem"/>
770 <xsl:with-param name="lang" select="$lang"/>
771 <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
772 </xsl:call-template>
773 </xsl:variable>
774
775 <xsl:variable name="xref-number-and-title-context">
776 <xsl:call-template name="gentext.template">
777 <xsl:with-param name="context"
778 select="'xref-number-and-title'"/>
779 <xsl:with-param name="name" select="$target.elem"/>
780 <xsl:with-param name="lang" select="$lang"/>
781 </xsl:call-template>
782 </xsl:variable>
783
784 <xsl:variable name="styled-xref-number-and-title-context">
785 <xsl:call-template name="gentext.template">
786 <xsl:with-param name="context"
787 select="'xref-number-and-title'"/>
788 <xsl:with-param name="name" select="$target.elem"/>
789 <xsl:with-param name="lang" select="$lang"/>
790 <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
791 </xsl:call-template>
792 </xsl:variable>
793
794 <xsl:choose>
795 <xsl:when test="$xref-number-and-title-context !=
796 $styled-xref-number-and-title-context and
797 $xref.number != '' and
798 $xref.with.number.and.title != 0">
799 <xsl:value-of
800 select="$styled-xref-number-and-title-context"/>
801 </xsl:when>
802 <xsl:when test="$xref-number-context !=
803 $styled-xref-number-context and
804 $xref.number != ''">
805 <xsl:value-of select="$styled-xref-number-context"/>
806 </xsl:when>
807 <xsl:when test="$xref-context != $styled-xref-context">
808 <xsl:value-of select="$styled-xref-context"/>
809 </xsl:when>
810 <xsl:when test="$xref-number-and-title-context != '' and
811 $xref.number != '' and
812 $xref.with.number.and.title != 0">
813 <xsl:value-of
814 select="$xref-number-and-title-context"/>
815 <xsl:if test="$olink.debug">
816 <xsl:message>
817 <xsl:text>Olink error: no gentext template</xsl:text>
818 <xsl:text> exists for xrefstyle '</xsl:text>
819 <xsl:value-of select="$xrefstyle"/>
820 <xsl:text>' for element '</xsl:text>
821 <xsl:value-of select="$target.elem"/>
822 <xsl:text>' in language '</xsl:text>
823 <xsl:value-of select="$lang"/>
824 <xsl:text>' in context 'xref-number-and-title</xsl:text>
825 <xsl:text>'. Using template without @style.</xsl:text>
826 </xsl:message>
827 </xsl:if>
828 </xsl:when>
829 <xsl:when test="$xref-number-context != '' and
830 $xref.number != ''">
831 <xsl:value-of select="$xref-number-context"/>
832 <xsl:if test="$olink.debug">
833 <xsl:message>
834 <xsl:text>Olink error: no gentext template</xsl:text>
835 <xsl:text> exists for xrefstyle '</xsl:text>
836 <xsl:value-of select="$xrefstyle"/>
837 <xsl:text>' for element '</xsl:text>
838 <xsl:value-of select="$target.elem"/>
839 <xsl:text>' in language '</xsl:text>
840 <xsl:value-of select="$lang"/>
841 <xsl:text>' in context 'xref-number</xsl:text>
842 <xsl:text>'. Using template without @style.</xsl:text>
843 </xsl:message>
844 </xsl:if>
845 </xsl:when>
846 <xsl:when test="$xref-context != ''">
847 <xsl:value-of select="$xref-context"/>
848 <xsl:if test="$olink.debug">
849 <xsl:message>
850 <xsl:text>Olink error: no gentext template</xsl:text>
851 <xsl:text> exists for xrefstyle '</xsl:text>
852 <xsl:value-of select="$xrefstyle"/>
853 <xsl:text>' for element '</xsl:text>
854 <xsl:value-of select="$target.elem"/>
855 <xsl:text>' in language '</xsl:text>
856 <xsl:value-of select="$lang"/>
857 <xsl:text>' in context 'xref</xsl:text>
858 <xsl:text>'. Using template without @style.</xsl:text>
859 </xsl:message>
860 </xsl:if>
861 </xsl:when>
862 <xsl:otherwise>
863 <xsl:message>
864 <xsl:text>Olink error: no gentext template</xsl:text>
865 <xsl:text> exists for xrefstyle '</xsl:text>
866 <xsl:value-of select="$xrefstyle"/>
867 <xsl:text>' for element '</xsl:text>
868 <xsl:value-of select="$target.elem"/>
869 <xsl:text>' in language '</xsl:text>
870 <xsl:value-of select="$lang"/>
871 <xsl:text>'. Trying '%t'.</xsl:text>
872 </xsl:message>
873 <xsl:value-of select="'%t'"/>
874 </xsl:otherwise>
875 </xsl:choose>
876 </xsl:otherwise>
877 </xsl:choose>
878 </xsl:variable>
879
880 <xsl:if test="$olink.debug != 0">
881 <xsl:message>
882 <xsl:text>Olink debug: xrefstyle template is '</xsl:text>
883 <xsl:value-of select="$template"/>
884 <xsl:text>'.</xsl:text>
885 </xsl:message>
886 </xsl:if>
887
888 <xsl:call-template name="substitute-markup">
889 <xsl:with-param name="template" select="$template"/>
890 <xsl:with-param name="title">
891 <xsl:for-each select="$target.database" >
892 <xsl:call-template name="insert.targetdb.data">
893 <xsl:with-param name="data"
894 select="key('targetptr-key', $olink.key)/ttl/node()"/>
895 </xsl:call-template>
896 </xsl:for-each>
897 </xsl:with-param>
898 <xsl:with-param name="label">
899 <xsl:for-each select="$target.database" >
900 <xsl:value-of
901 select="key('targetptr-key', $olink.key)[1]/@number" />
902 </xsl:for-each>
903 </xsl:with-param>
904 <xsl:with-param name="pagenumber">
905 <xsl:for-each select="$target.database" >
906 <xsl:value-of
907 select="key('targetptr-key', $olink.key)[1]/@page" />
908 </xsl:for-each>
909 </xsl:with-param>
910 <xsl:with-param name="docname">
911 <xsl:for-each select="$target.database" >
912 <xsl:call-template name="insert.targetdb.data">
913 <xsl:with-param name="data"
914 select="key('targetdoc-key', $targetdoc)[1]/div[1]/ttl/node()" />
915 </xsl:call-template>
916 </xsl:for-each>
917 </xsl:with-param>
918 </xsl:call-template>
919 </xsl:when>
920
921 <xsl:when test="$use.local.olink.style != 0">
922
923 <!-- Is autonumbering on? -->
924 <xsl:variable name="target.number">
925 <xsl:for-each select="$target.database" >
926 <xsl:value-of
927 select="key('targetptr-key', $olink.key)[1]/@number" />
928 </xsl:for-each>
929 </xsl:variable>
930
931 <xsl:variable name="autonumber">
932 <xsl:choose>
933 <xsl:when test="$target.number != ''">1</xsl:when>
934 <xsl:otherwise>0</xsl:otherwise>
935 </xsl:choose>
936 </xsl:variable>
937
938 <xsl:variable name="number-and-title-template">
939 <xsl:call-template name="gentext.template.exists">
940 <xsl:with-param name="context" select="'xref-number-and-title'"/>
941 <xsl:with-param name="name" select="$target.elem"/>
942 </xsl:call-template>
943 </xsl:variable>
944
945 <xsl:variable name="number-template">
946 <xsl:call-template name="gentext.template.exists">
947 <xsl:with-param name="context" select="'xref-number'"/>
948 <xsl:with-param name="name" select="$target.elem"/>
949 </xsl:call-template>
950 </xsl:variable>
951
952 <xsl:variable name="context">
953 <xsl:choose>
954 <xsl:when test="string($autonumber) != 0
955 and $number-and-title-template != 0
956 and $xref.with.number.and.title != 0">
957 <xsl:value-of select="'xref-number-and-title'"/>
958 </xsl:when>
959 <xsl:when test="string($autonumber) != 0
960 and $number-template != 0">
961 <xsl:value-of select="'xref-number'"/>
962 </xsl:when>
963 <xsl:otherwise>
964 <xsl:value-of select="'xref'"/>
965 </xsl:otherwise>
966 </xsl:choose>
967 </xsl:variable>
968
969 <xsl:variable name="template">
970 <xsl:call-template name="gentext.template">
971 <xsl:with-param name="context" select="$context"/>
972 <xsl:with-param name="name" select="$target.elem"/>
973 <xsl:with-param name="lang" select="$lang"/>
974 </xsl:call-template>
975 </xsl:variable>
976
977 <xsl:call-template name="substitute-markup">
978 <xsl:with-param name="template" select="$template"/>
979 <xsl:with-param name="title">
980 <xsl:for-each select="$target.database" >
981 <xsl:call-template name="insert.targetdb.data">
982 <xsl:with-param name="data"
983 select="key('targetptr-key', $olink.key)[1]/ttl/node()" />
984 </xsl:call-template>
985 </xsl:for-each>
986 </xsl:with-param>
987 <xsl:with-param name="label">
988 <xsl:for-each select="$target.database" >
989 <xsl:call-template name="insert.targetdb.data">
990 <xsl:with-param name="data"
991 select="key('targetptr-key', $olink.key)[1]/@number" />
992 </xsl:call-template>
993 </xsl:for-each>
994 </xsl:with-param>
995 </xsl:call-template>
996 </xsl:when>
997 <xsl:when test="$xref.text !=''">
998 <xsl:copy-of select="$xref.text"/>
999 </xsl:when>
1000 <xsl:otherwise>
1001 <xsl:message>
1002 <xsl:text>Olink error: no generated text for </xsl:text>
1003 <xsl:text>targetdoc/targetptr/lang = '</xsl:text>
1004 <xsl:value-of select="$olink.key"/>
1005 <xsl:text>'.</xsl:text>
1006 </xsl:message>
1007 <xsl:text>????</xsl:text>
1008 </xsl:otherwise>
1009 </xsl:choose>
1010 </xsl:when>
1011 <xsl:otherwise>
1012 <xsl:if test="$olink.key != ''">
1013 <xsl:message>
1014 <xsl:text>Olink error: no generated text for </xsl:text>
1015 <xsl:text>targetdoc/targetptr/lang = '</xsl:text>
1016 <xsl:value-of select="$olink.key"/>
1017 <xsl:text>'.</xsl:text>
1018 </xsl:message>
1019 </xsl:if>
1020 <xsl:text>????</xsl:text>
1021 </xsl:otherwise>
1022 </xsl:choose>
1023</xsl:template>
1024
1025<xsl:template name="insert.targetdb.data">
1026 <xsl:param name="data"/>
1027 <!-- Customize this to massage data further -->
1028 <xsl:copy-of select="$data"/>
1029</xsl:template>
1030
1031<xsl:template match="*" mode="olink.docname.markup">
1032 <!-- No-op for now -->
1033</xsl:template>
1034
1035<xsl:template name="targetpath">
1036 <xsl:param name="dirnode" />
1037 <xsl:param name="targetdoc" select="''"/>
1038
1039<!--
1040<xsl:message>dirnode is <xsl:value-of select="$dirnode/@name"/></xsl:message>
1041<xsl:message>targetdoc is <xsl:value-of select="$targetdoc"/></xsl:message>
1042-->
1043 <!-- recursive template generates path to olink target directory -->
1044 <xsl:choose>
1045 <!-- Have we arrived at the final path step? -->
1046 <xsl:when test="$dirnode/child::document[@targetdoc = $targetdoc]">
1047 <!-- We are done -->
1048 </xsl:when>
1049 <!-- Have we reached the top without a match? -->
1050 <xsl:when test="local-name($dirnode) != 'dir'" >
1051 <xsl:message>Olink error: cannot locate targetdoc <xsl:value-of select="$targetdoc"/> in sitemap</xsl:message>
1052 </xsl:when>
1053 <!-- Is the target in a descendant? -->
1054 <xsl:when test="$dirnode/descendant::document/@targetdoc = $targetdoc">
1055 <xsl:variable name="step" select="$dirnode/child::dir[descendant::document/@targetdoc = $targetdoc]"/>
1056 <xsl:if test = "$step">
1057 <xsl:value-of select="$step/@name"/>
1058 <xsl:text>/</xsl:text>
1059 </xsl:if>
1060 <!-- Now recurse with the child -->
1061 <xsl:call-template name="targetpath" >
1062 <xsl:with-param name="dirnode" select="$step"/>
1063 <xsl:with-param name="targetdoc" select="$targetdoc"/>
1064 </xsl:call-template>
1065 </xsl:when>
1066 <!-- Otherwise we need to move up a step -->
1067 <xsl:otherwise>
1068 <xsl:if test="$dirnode/parent::dir">
1069 <xsl:text>../</xsl:text>
1070 </xsl:if>
1071 <xsl:call-template name="targetpath" >
1072 <xsl:with-param name="dirnode" select="$dirnode/parent::*"/>
1073 <xsl:with-param name="targetdoc" select="$targetdoc"/>
1074 </xsl:call-template>
1075 </xsl:otherwise>
1076 </xsl:choose>
1077</xsl:template>
1078
1079<xsl:template name="olink.page.citation">
1080 <xsl:param name="olink.key" select="''"/>
1081 <xsl:param name="olink.lang" select="'en'"/>
1082 <xsl:param name="target.database"/>
1083 <xsl:param name="linkend" select="''"/>
1084 <xsl:param name="xrefstyle">
1085 <xsl:choose>
1086 <xsl:when test="@role and not(@xrefstyle)
1087 and $use.role.as.xrefstyle != 0">
1088 <xsl:value-of select="@role"/>
1089 </xsl:when>
1090 <xsl:otherwise>
1091 <xsl:value-of select="@xrefstyle"/>
1092 </xsl:otherwise>
1093 </xsl:choose>
1094 </xsl:param>
1095
1096 <xsl:variable name="targetdoc">
1097 <xsl:value-of select="substring-before($olink.key, '/')"/>
1098 </xsl:variable>
1099
1100 <xsl:choose>
1101 <xsl:when test="$linkend != ''">
1102 <xsl:call-template name="xref.page.citation">
1103 <xsl:with-param name="linkend" select="$linkend"/>
1104 <xsl:with-param name="target" select="key('id', $linkend)"/>
1105 <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
1106 </xsl:call-template>
1107 </xsl:when>
1108 <xsl:when test="not(starts-with(normalize-space($xrefstyle),
1109 'select:')
1110 and (contains($xrefstyle, 'page')
1111 or contains($xrefstyle, 'Page')))
1112 and $current.docid != ''
1113 and $current.docid != $targetdoc
1114 and $insert.olink.page.number = 'yes' ">
1115
1116 <xsl:variable name="page-number">
1117 <xsl:for-each select="$target.database" >
1118 <xsl:value-of
1119 select="key('targetptr-key', $olink.key)[1]/@page" />
1120 </xsl:for-each>
1121 </xsl:variable>
1122
1123 <xsl:if test="$page-number != ''">
1124 <xsl:call-template name="substitute-markup">
1125 <xsl:with-param name="template">
1126 <xsl:call-template name="gentext.template">
1127 <xsl:with-param name="name" select="'olink.page.citation'"/>
1128 <xsl:with-param name="context" select="'xref'"/>
1129 <xsl:with-param name="lang" select="$olink.lang"/>
1130 </xsl:call-template>
1131 </xsl:with-param>
1132 <xsl:with-param name="pagenumber" select="$page-number"/>
1133 </xsl:call-template>
1134 </xsl:if>
1135
1136 </xsl:when>
1137 </xsl:choose>
1138</xsl:template>
1139
1140<xsl:template name="olink.document.citation">
1141 <xsl:param name="olink.key" select="''"/>
1142 <xsl:param name="olink.lang" select="'en'"/>
1143 <xsl:param name="target.database"/>
1144 <xsl:param name="xrefstyle">
1145 <xsl:choose>
1146 <xsl:when test="@role and not(@xrefstyle)
1147 and $use.role.as.xrefstyle != 0">
1148 <xsl:value-of select="@role"/>
1149 </xsl:when>
1150 <xsl:otherwise>
1151 <xsl:value-of select="@xrefstyle"/>
1152 </xsl:otherwise>
1153 </xsl:choose>
1154 </xsl:param>
1155
1156 <xsl:variable name="page">
1157 <xsl:for-each select="$target.database" >
1158 <xsl:value-of
1159 select="key('targetptr-key', $olink.key)[1]/@page" />
1160 </xsl:for-each>
1161 </xsl:variable>
1162
1163 <xsl:variable name="targetdoc">
1164 <xsl:value-of select="substring-before($olink.key, '/')"/>
1165 </xsl:variable>
1166
1167 <xsl:variable name="targetptr">
1168 <xsl:value-of
1169 select="substring-before(substring-after($olink.key, '/'), '/')"/>
1170 </xsl:variable>
1171
1172 <!-- Don't add docname if pointing to root element -->
1173 <xsl:variable name="rootptr">
1174 <xsl:for-each select="$target.database" >
1175 <xsl:value-of
1176 select="key('targetdoc-key', $targetdoc)[1]/div[1]/@targetptr" />
1177 </xsl:for-each>
1178 </xsl:variable>
1179
1180 <xsl:variable name="docname">
1181 <xsl:for-each select="$target.database" >
1182 <xsl:call-template name="insert.targetdb.data">
1183 <xsl:with-param name="data"
1184 select="key('targetdoc-key', $targetdoc)[1]/div[1]/ttl/node()" />
1185 </xsl:call-template>
1186 </xsl:for-each>
1187 </xsl:variable>
1188
1189 <xsl:if test="not(starts-with(normalize-space($xrefstyle), 'select:')
1190 and (contains($xrefstyle, 'docname')))
1191 and ($olink.doctitle = 'yes' or $olink.doctitle = '1')
1192 and $current.docid != ''
1193 and $rootptr != $targetptr
1194 and $current.docid != $targetdoc
1195 and $docname != ''">
1196 <xsl:call-template name="substitute-markup">
1197 <xsl:with-param name="template">
1198 <xsl:call-template name="gentext.template">
1199 <xsl:with-param name="name" select="'olink.document.citation'"/>
1200 <xsl:with-param name="context" select="'xref'"/>
1201 <xsl:with-param name="lang" select="$olink.lang"/>
1202 </xsl:call-template>
1203 </xsl:with-param>
1204 <xsl:with-param name="docname" select="$docname"/>
1205 <xsl:with-param name="pagenumber" select="$page"/>
1206 </xsl:call-template>
1207 </xsl:if>
1208</xsl:template>
1209
1210<xsl:template name="xref.page.citation">
1211 <!-- Determine if this xref should have a page citation.
1212 Context node is the xref or local olink element -->
1213 <xsl:param name="linkend" select="@linkend"/>
1214 <xsl:param name="target" select="key('id', $linkend)"/>
1215 <xsl:param name="xrefstyle">
1216 <xsl:choose>
1217 <xsl:when test="@role and not(@xrefstyle)
1218 and $use.role.as.xrefstyle != 0">
1219 <xsl:value-of select="@role"/>
1220 </xsl:when>
1221 <xsl:otherwise>
1222 <xsl:value-of select="@xrefstyle"/>
1223 </xsl:otherwise>
1224 </xsl:choose>
1225 </xsl:param>
1226
1227 <xsl:if test="not(starts-with(normalize-space($xrefstyle),'select:')
1228 and (contains($xrefstyle, 'page')
1229 or contains($xrefstyle, 'Page')))
1230 and ( $insert.xref.page.number = 'yes'
1231 or $insert.xref.page.number = '1')
1232 or local-name($target) = 'para'">
1233 <xsl:apply-templates select="$target" mode="page.citation">
1234 <xsl:with-param name="id" select="$linkend"/>
1235 </xsl:apply-templates>
1236 </xsl:if>
1237</xsl:template>
1238
1239</xsl:stylesheet>
1240
Note: See TracBrowser for help on using the repository browser.