1<?xml version='1.0'?> 2<!DOCTYPE xsl:stylesheet [ 3<!ENTITY % common.entities SYSTEM "../common/entities.ent"> 4%common.entities; 5]> 6<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 7 xmlns:xlink='http://www.w3.org/1999/xlink' 8 exclude-result-prefixes="xlink" 9 version='1.0'> 10 11<!-- ******************************************************************** 12 $Id: glossary.xsl 8421 2009-05-04 07:49:49Z bobstayton $ 13 ******************************************************************** 14 15 This file is part of the XSL DocBook Stylesheet distribution. 16 See ../README or http://docbook.sf.net/release/xsl/current/ for 17 copyright and other information. 18 19 ******************************************************************** --> 20 21<!-- ==================================================================== --> 22 23<xsl:template match="glossary"> 24 &setup-language-variable; 25 <xsl:call-template name="id.warning"/> 26 27 <div> 28 <xsl:apply-templates select="." mode="common.html.attributes"/> 29 <xsl:if test="$generate.id.attributes != 0"> 30 <xsl:attribute name="id"> 31 <xsl:call-template name="object.id"/> 32 </xsl:attribute> 33 </xsl:if> 34 35 <xsl:call-template name="glossary.titlepage"/> 36 37 <xsl:choose> 38 <xsl:when test="glossdiv"> 39 <xsl:apply-templates select="(glossdiv[1]/preceding-sibling::*)"/> 40 </xsl:when> 41 <xsl:when test="glossentry"> 42 <xsl:apply-templates select="(glossentry[1]/preceding-sibling::*)"/> 43 </xsl:when> 44 <xsl:otherwise> 45 <xsl:apply-templates/> 46 </xsl:otherwise> 47 </xsl:choose> 48 49 <xsl:choose> 50 <xsl:when test="glossdiv"> 51 <xsl:apply-templates select="glossdiv"/> 52 </xsl:when> 53 <xsl:when test="glossentry"> 54 <dl> 55 <xsl:choose> 56 <xsl:when test="$glossary.sort != 0"> 57 <xsl:apply-templates select="glossentry"> 58 <xsl:sort lang="{$language}" select="normalize-space(translate(concat(@sortas, glossterm[not(parent::glossentry/@sortas) or parent::glossentry/@sortas = '']), &lowercase;, &uppercase;))"/> 59 </xsl:apply-templates> 60 </xsl:when> 61 <xsl:otherwise> 62 <xsl:apply-templates select="glossentry"/> 63 </xsl:otherwise> 64 </xsl:choose> 65 </dl> 66 </xsl:when> 67 <xsl:otherwise> 68 <!-- empty glossary --> 69 </xsl:otherwise> 70 </xsl:choose> 71 72 <xsl:if test="not(parent::article)"> 73 <xsl:call-template name="process.footnotes"/> 74 </xsl:if> 75 </div> 76</xsl:template> 77 78<xsl:template match="glossary/glossaryinfo"></xsl:template> 79<xsl:template match="glossary/info"></xsl:template> 80<xsl:template match="glossary/title"></xsl:template> 81<xsl:template match="glossary/subtitle"></xsl:template> 82<xsl:template match="glossary/titleabbrev"></xsl:template> 83 84<!-- ==================================================================== --> 85 86<xsl:template match="glosslist"> 87 &setup-language-variable; 88 <div> 89 <xsl:apply-templates select="." mode="common.html.attributes"/> 90 <xsl:call-template name="anchor"/> 91 <xsl:if test="blockinfo/title|info/title|title"> 92 <xsl:call-template name="formal.object.heading"/> 93 </xsl:if> 94 <dl> 95 <xsl:choose> 96 <xsl:when test="$glossary.sort != 0"> 97 <xsl:apply-templates select="glossentry"> 98 <xsl:sort lang="{$language}" select="normalize-space(translate(concat(@sortas, glossterm[not(parent::glossentry/@sortas) or parent::glossentry/@sortas = '']), &lowercase;, &uppercase;))"/> 99 </xsl:apply-templates> 100 </xsl:when> 101 <xsl:otherwise> 102 <xsl:apply-templates select="glossentry"/> 103 </xsl:otherwise> 104 </xsl:choose> 105 </dl> 106 </div> 107</xsl:template> 108 109<!-- ==================================================================== --> 110 111<xsl:template match="glossdiv"> 112 &setup-language-variable; 113 <xsl:call-template name="id.warning"/> 114 115 <div> 116 <xsl:apply-templates select="." mode="common.html.attributes"/> 117 <xsl:apply-templates select="(glossentry[1]/preceding-sibling::*)"/> 118 119 <dl> 120 <xsl:choose> 121 <xsl:when test="$glossary.sort != 0"> 122 <xsl:apply-templates select="glossentry"> 123 <xsl:sort lang="{$language}" 124 select="translate(glossterm, $lowercase, 125 $uppercase)"/> 126 </xsl:apply-templates> 127 </xsl:when> 128 <xsl:otherwise> 129 <xsl:apply-templates select="glossentry"/> 130 </xsl:otherwise> 131 </xsl:choose> 132 </dl> 133 </div> 134</xsl:template> 135 136<xsl:template match="glossdiv/title"> 137 <h3> 138 <xsl:apply-templates select="." mode="common.html.attributes"/> 139 <xsl:apply-templates/> 140 </h3> 141</xsl:template> 142 143<!-- ==================================================================== --> 144 145<!-- 146GlossEntry ::= 147 GlossTerm, Acronym?, Abbrev?, 148 (IndexTerm)*, 149 RevHistory?, 150 (GlossSee | GlossDef+) 151--> 152 153<xsl:template match="glossentry"> 154 <xsl:choose> 155 <xsl:when test="$glossentry.show.acronym = 'primary'"> 156 <dt> 157 <xsl:call-template name="anchor"> 158 <xsl:with-param name="conditional"> 159 <xsl:choose> 160 <xsl:when test="$glossterm.auto.link != 0">0</xsl:when> 161 <xsl:otherwise>1</xsl:otherwise> 162 </xsl:choose> 163 </xsl:with-param> 164 </xsl:call-template> 165 166 <xsl:choose> 167 <xsl:when test="acronym|abbrev"> 168 <xsl:apply-templates select="acronym|abbrev"/> 169 <xsl:text> (</xsl:text> 170 <xsl:apply-templates select="glossterm"/> 171 <xsl:text>)</xsl:text> 172 </xsl:when> 173 <xsl:otherwise> 174 <xsl:apply-templates select="glossterm"/> 175 </xsl:otherwise> 176 </xsl:choose> 177 </dt> 178 </xsl:when> 179 <xsl:when test="$glossentry.show.acronym = 'yes'"> 180 <dt> 181 <xsl:call-template name="anchor"> 182 <xsl:with-param name="conditional"> 183 <xsl:choose> 184 <xsl:when test="$glossterm.auto.link != 0">0</xsl:when> 185 <xsl:otherwise>1</xsl:otherwise> 186 </xsl:choose> 187 </xsl:with-param> 188 </xsl:call-template> 189 190 <xsl:apply-templates select="glossterm"/> 191 192 <xsl:if test="acronym|abbrev"> 193 <xsl:text> (</xsl:text> 194 <xsl:apply-templates select="acronym|abbrev"/> 195 <xsl:text>)</xsl:text> 196 </xsl:if> 197 </dt> 198 </xsl:when> 199 <xsl:otherwise> 200 <dt> 201 <xsl:call-template name="anchor"> 202 <xsl:with-param name="conditional"> 203 <xsl:choose> 204 <xsl:when test="$glossterm.auto.link != 0">0</xsl:when> 205 <xsl:otherwise>1</xsl:otherwise> 206 </xsl:choose> 207 </xsl:with-param> 208 </xsl:call-template> 209 210 <xsl:apply-templates select="glossterm"/> 211 </dt> 212 </xsl:otherwise> 213 </xsl:choose> 214 215 <xsl:apply-templates select="indexterm|revhistory|glosssee|glossdef"/> 216</xsl:template> 217 218<xsl:template match="glossentry/glossterm"> 219 <xsl:apply-templates/> 220 <xsl:if test="following-sibling::glossterm">, </xsl:if> 221</xsl:template> 222 223<xsl:template match="glossentry/acronym"> 224 <xsl:apply-templates/> 225 <xsl:if test="following-sibling::acronym|following-sibling::abbrev">, </xsl:if> 226</xsl:template> 227 228<xsl:template match="glossentry/abbrev"> 229 <xsl:apply-templates/> 230 <xsl:if test="following-sibling::acronym|following-sibling::abbrev">, </xsl:if> 231</xsl:template> 232 233<xsl:template match="glossentry/revhistory"> 234</xsl:template> 235 236<xsl:template match="glossentry/glosssee"> 237 <xsl:variable name="otherterm" select="@otherterm"/> 238 <xsl:variable name="targets" select="key('id', $otherterm)"/> 239 <xsl:variable name="target" select="$targets[1]"/> 240 <xsl:variable name="xlink" select="@xlink:href"/> 241 242 <dd> 243 <p> 244 <xsl:variable name="template"> 245 <xsl:call-template name="gentext.template"> 246 <xsl:with-param name="context" select="'glossary'"/> 247 <xsl:with-param name="name" select="'see'"/> 248 </xsl:call-template> 249 </xsl:variable> 250 251 <xsl:variable name="title"> 252 <xsl:choose> 253 <xsl:when test="$target"> 254 <a> 255 <xsl:apply-templates select="." mode="common.html.attributes"/> 256 <xsl:attribute name="href"> 257 <xsl:call-template name="href.target"> 258 <xsl:with-param name="object" select="$target"/> 259 </xsl:call-template> 260 </xsl:attribute> 261 <xsl:apply-templates select="$target" mode="xref-to"/> 262 </a> 263 </xsl:when> 264 <xsl:when test="$xlink"> 265 <xsl:call-template name="simple.xlink"> 266 <xsl:with-param name="content"> 267 <xsl:apply-templates/> 268 </xsl:with-param> 269 </xsl:call-template> 270 </xsl:when> 271 <xsl:when test="$otherterm != '' and not($target)"> 272 <xsl:message> 273 <xsl:text>Warning: glosssee @otherterm reference not found: </xsl:text> 274 <xsl:value-of select="$otherterm"/> 275 </xsl:message> 276 <xsl:apply-templates/> 277 </xsl:when> 278 <xsl:otherwise> 279 <xsl:apply-templates/> 280 </xsl:otherwise> 281 </xsl:choose> 282 </xsl:variable> 283 284 <xsl:call-template name="substitute-markup"> 285 <xsl:with-param name="template" select="$template"/> 286 <xsl:with-param name="title" select="$title"/> 287 </xsl:call-template> 288 </p> 289 </dd> 290</xsl:template> 291 292<xsl:template match="glossentry/glossdef"> 293 <dd> 294 <xsl:apply-templates select="*[local-name(.) != 'glossseealso']"/> 295 <xsl:if test="glossseealso"> 296 <p> 297 <xsl:variable name="template"> 298 <xsl:call-template name="gentext.template"> 299 <xsl:with-param name="context" select="'glossary'"/> 300 <xsl:with-param name="name" select="'seealso'"/> 301 </xsl:call-template> 302 </xsl:variable> 303 <xsl:variable name="title"> 304 <xsl:apply-templates select="glossseealso"/> 305 </xsl:variable> 306 <xsl:call-template name="substitute-markup"> 307 <xsl:with-param name="template" select="$template"/> 308 <xsl:with-param name="title" select="$title"/> 309 </xsl:call-template> 310 </p> 311 </xsl:if> 312 </dd> 313</xsl:template> 314 315<xsl:template match="glossseealso"> 316 <xsl:variable name="otherterm" select="@otherterm"/> 317 <xsl:variable name="targets" select="key('id', $otherterm)"/> 318 <xsl:variable name="target" select="$targets[1]"/> 319 <xsl:variable name="xlink" select="@xlink:href"/> 320 321 <xsl:choose> 322 <xsl:when test="$target"> 323 <a> 324 <xsl:apply-templates select="." mode="common.html.attributes"/> 325 <xsl:attribute name="href"> 326 <xsl:call-template name="href.target"> 327 <xsl:with-param name="object" select="$target"/> 328 </xsl:call-template> 329 </xsl:attribute> 330 <xsl:apply-templates select="$target" mode="xref-to"/> 331 </a> 332 </xsl:when> 333 <xsl:when test="$xlink"> 334 <xsl:call-template name="simple.xlink"> 335 <xsl:with-param name="content"> 336 <xsl:apply-templates/> 337 </xsl:with-param> 338 </xsl:call-template> 339 </xsl:when> 340 <xsl:when test="$otherterm != '' and not($target)"> 341 <xsl:message> 342 <xsl:text>Warning: glossseealso @otherterm reference not found: </xsl:text> 343 <xsl:value-of select="$otherterm"/> 344 </xsl:message> 345 <xsl:apply-templates/> 346 </xsl:when> 347 <xsl:otherwise> 348 <xsl:apply-templates/> 349 </xsl:otherwise> 350 </xsl:choose> 351 352 <xsl:choose> 353 <xsl:when test="position() = last()"/> 354 <xsl:otherwise> 355 <xsl:call-template name="gentext.template"> 356 <xsl:with-param name="context" select="'glossary'"/> 357 <xsl:with-param name="name" select="'seealso-separator'"/> 358 </xsl:call-template> 359 </xsl:otherwise> 360 </xsl:choose> 361</xsl:template> 362 363<!-- ==================================================================== --> 364 365<!-- Glossary collection --> 366 367<xsl:template match="glossary[@role='auto']" priority="2"> 368 &setup-language-variable; 369 <xsl:variable name="terms" 370 select="//glossterm[not(parent::glossdef)]|//firstterm"/> 371 <xsl:variable name="collection" select="document($glossary.collection, .)"/> 372 373 <xsl:call-template name="id.warning"/> 374 375 <xsl:if test="$glossary.collection = ''"> 376 <xsl:message> 377 <xsl:text>Warning: processing automatic glossary </xsl:text> 378 <xsl:text>without a glossary.collection file.</xsl:text> 379 </xsl:message> 380 </xsl:if> 381 382 <xsl:if test="not($collection) and $glossary.collection != ''"> 383 <xsl:message> 384 <xsl:text>Warning: processing automatic glossary but unable to </xsl:text> 385 <xsl:text>open glossary.collection file '</xsl:text> 386 <xsl:value-of select="$glossary.collection"/> 387 <xsl:text>'</xsl:text> 388 </xsl:message> 389 </xsl:if> 390 391 <div> 392 <xsl:apply-templates select="." mode="common.html.attributes"/> 393 <xsl:if test="$generate.id.attributes != 0"> 394 <xsl:attribute name="id"> 395 <xsl:call-template name="object.id"/> 396 </xsl:attribute> 397 </xsl:if> 398 399 <xsl:call-template name="glossary.titlepage"/> 400 401 <xsl:choose> 402 <xsl:when test="glossdiv and $collection//glossdiv"> 403 <xsl:for-each select="$collection//glossdiv"> 404 <!-- first see if there are any in this div --> 405 <xsl:variable name="exist.test"> 406 <xsl:for-each select="glossentry"> 407 <xsl:variable name="cterm" select="glossterm"/> 408 <xsl:if test="$terms[@baseform = $cterm or . = $cterm]"> 409 <xsl:value-of select="glossterm"/> 410 </xsl:if> 411 </xsl:for-each> 412 </xsl:variable> 413 414 <xsl:if test="$exist.test != ''"> 415 <xsl:apply-templates select="." mode="auto-glossary"> 416 <xsl:with-param name="terms" select="$terms"/> 417 </xsl:apply-templates> 418 </xsl:if> 419 </xsl:for-each> 420 </xsl:when> 421 <xsl:otherwise> 422 <dl> 423 <xsl:choose> 424 <xsl:when test="$glossary.sort != 0"> 425 <xsl:for-each select="$collection//glossentry"> 426 <xsl:sort lang="{$language}" select="normalize-space(translate(concat(@sortas, glossterm[not(parent::glossentry/@sortas) or parent::glossentry/@sortas = '']), &lowercase;, &uppercase;))"/> 427 <xsl:variable name="cterm" select="glossterm"/> 428 <xsl:if test="$terms[@baseform = $cterm or . = $cterm]"> 429 <xsl:apply-templates select="." mode="auto-glossary"/> 430 </xsl:if> 431 </xsl:for-each> 432 </xsl:when> 433 <xsl:otherwise> 434 <xsl:for-each select="$collection//glossentry"> 435 <xsl:variable name="cterm" select="glossterm"/> 436 <xsl:if test="$terms[@baseform = $cterm or . = $cterm]"> 437 <xsl:apply-templates select="." mode="auto-glossary"/> 438 </xsl:if> 439 </xsl:for-each> 440 </xsl:otherwise> 441 </xsl:choose> 442 </dl> 443 </xsl:otherwise> 444 </xsl:choose> 445 446 <xsl:if test="not(parent::article)"> 447 <xsl:call-template name="process.footnotes"/> 448 </xsl:if> 449 </div> 450</xsl:template> 451 452<xsl:template match="*" mode="auto-glossary"> 453 <!-- pop back out to the default mode for most elements --> 454 <xsl:apply-templates select="."/> 455</xsl:template> 456 457<xsl:template match="glossdiv" mode="auto-glossary"> 458 <xsl:param name="terms" select="."/> 459 460 &setup-language-variable; 461 462 <div> 463 <xsl:apply-templates select="." mode="common.html.attributes"/> 464 <xsl:apply-templates select="(glossentry[1]/preceding-sibling::*)"/> 465 466 <dl> 467 <xsl:choose> 468 <xsl:when test="$glossary.sort != 0"> 469 <xsl:for-each select="glossentry"> 470 <xsl:sort lang="{$language}" select="normalize-space(translate(concat(@sortas, glossterm[not(parent::glossentry/@sortas) or parent::glossentry/@sortas = '']), &lowercase;, &uppercase;))"/>! 471 <xsl:variable name="cterm" select="glossterm"/> 472 <xsl:if test="$terms[@baseform = $cterm or . = $cterm]"> 473 <xsl:apply-templates select="." mode="auto-glossary"/> 474 </xsl:if> 475 </xsl:for-each> 476 </xsl:when> 477 <xsl:otherwise> 478 <xsl:for-each select="glossentry"> 479 <xsl:variable name="cterm" select="glossterm"/> 480 <xsl:if test="$terms[@baseform = $cterm or . = $cterm]"> 481 <xsl:apply-templates select="." mode="auto-glossary"/> 482 </xsl:if> 483 </xsl:for-each> 484 </xsl:otherwise> 485 </xsl:choose> 486 </dl> 487 </div> 488</xsl:template> 489 490<!-- ==================================================================== --> 491 492</xsl:stylesheet> 493