VirtualBox

source: vbox/trunk/doc/manual/docbook2latex.xsl

Last change on this file was 99118, checked in by vboxsync, 13 months ago

manual: Revised r156481 a bit, since nested args are used in different ways, so must require role=compact for complicated arguments.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 50.3 KB
Line 
1<?xml version="1.0"?>
2
3<!--
4 docbook2latex.xslt:
5 translates a DocBook XML source into a LaTeX source file,
6 which can be processed with pdflatex to produce a
7 pretty PDF file.
8
9 Note: In the LaTeX output, this XSLT encodes all quotes
10 with \QUOTE{} commands, which are not defined in this
11 file. This is because XSLT does not support regular
12 expressions natively and therefore it is rather difficult
13 to implement proper "pretty quotes" (different glyphs for
14 opening and closing quotes) in XSLT. The doc/manual/
15 makefile solves this by running sed over the LaTeX source
16 once more, replacing all \QUOTE{} commands with
17 \OQ{} and \CQ{} commands, which _are_ defined to the
18 pretty quotes for English in the LaTeX output generated
19 by this XSLT (see below).
20-->
21<!--
22 Copyright (C) 2006-2023 Oracle and/or its affiliates.
23
24 This file is part of VirtualBox base platform packages, as
25 available from https://www.virtualbox.org.
26
27 This program is free software; you can redistribute it and/or
28 modify it under the terms of the GNU General Public License
29 as published by the Free Software Foundation, in version 3 of the
30 License.
31
32 This program is distributed in the hope that it will be useful, but
33 WITHOUT ANY WARRANTY; without even the implied warranty of
34 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
35 General Public License for more details.
36
37 You should have received a copy of the GNU General Public License
38 along with this program; if not, see <https://www.gnu.org/licenses>.
39
40 SPDX-License-Identifier: GPL-3.0-only
41-->
42
43<xsl:stylesheet
44 version="1.0"
45 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
46 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
47 xmlns:str="http://xsltsl.org/string"
48>
49
50 <xsl:import href="string.xsl"/>
51 <xsl:import href="common-formatcfg.xsl"/>
52
53 <xsl:variable name="g_nlsChapter">
54 <xsl:choose>
55 <xsl:when test="$TARGETLANG='de_DE'">Kapitel</xsl:when>
56 <xsl:when test="$TARGETLANG='fr_FR'">chapitre</xsl:when>
57 <xsl:when test="$TARGETLANG='en_US'">chapter</xsl:when>
58 <xsl:otherwise>
59 <xsl:message terminate="yes"><xsl:value-of select="concat('Invalid language ', $TARGETLANG)" /></xsl:message>
60 </xsl:otherwise>
61 </xsl:choose>
62 </xsl:variable>
63
64 <xsl:variable name="g_nlsPage">
65 <xsl:choose>
66 <xsl:when test="$TARGETLANG='de_DE'">auf Seite</xsl:when>
67 <xsl:when test="$TARGETLANG='fr_FR'">page</xsl:when>
68 <xsl:when test="$TARGETLANG='en_US'">page</xsl:when>
69 <xsl:otherwise>
70 <xsl:message terminate="yes"><xsl:value-of select="concat('Invalid language ', $TARGETLANG)" /></xsl:message>
71 </xsl:otherwise>
72 </xsl:choose>
73 </xsl:variable>
74
75 <xsl:variable name="g_nlsNote">
76 <xsl:choose>
77 <xsl:when test="$TARGETLANG='de_DE'">Hinweis</xsl:when>
78 <xsl:when test="$TARGETLANG='fr_FR'">Note</xsl:when>
79 <xsl:when test="$TARGETLANG='en_US'">Note</xsl:when>
80 <xsl:otherwise>
81 <xsl:message terminate="yes"><xsl:value-of select="concat('Invalid language ', $TARGETLANG)" /></xsl:message>
82 </xsl:otherwise>
83 </xsl:choose>
84 </xsl:variable>
85
86 <xsl:variable name="g_nlsWarning">
87 <xsl:choose>
88 <xsl:when test="$TARGETLANG='de_DE'">Warnung</xsl:when>
89 <xsl:when test="$TARGETLANG='fr_FR'">Avertissement</xsl:when>
90 <xsl:when test="$TARGETLANG='en_US'">Warning</xsl:when>
91 <xsl:otherwise>
92 <xsl:message terminate="yes"><xsl:value-of select="concat('Invalid language ', $TARGETLANG)" /></xsl:message>
93 </xsl:otherwise>
94 </xsl:choose>
95 </xsl:variable>
96
97 <!-- command synopsis -->
98 <xsl:variable name="arg.rep.repeat.str.tex">\ldots{}</xsl:variable>
99 <xsl:variable name="arg.or.sep.compact.tex">|</xsl:variable>
100 <xsl:variable name="arg.or.sep.tex"> |~</xsl:variable>
101
102 <xsl:output method="text"/>
103
104 <xsl:strip-space elements="*"/>
105 <xsl:preserve-space elements="para"/>
106
107 <xsl:template match="/book">
108 <xsl:text>
109\documentclass[oneside,a4paper,10pt,DIV10]{scrbook}
110\usepackage{geometry}
111\geometry{top=3cm,bottom=4cm}
112\usepackage[T1]{fontenc}
113\usepackage{tabulary}
114\usepackage[pdftex,
115 a4paper,
116 colorlinks=true,
117 linkcolor=blue,
118 urlcolor=darkgreen,
119 bookmarksnumbered,
120 bookmarksopen=true,
121 bookmarksopenlevel=0,
122 hyperfootnotes=false,
123 plainpages=false,
124 pdfpagelabels
125 ]{hyperref}
126
127\usepackage{nameref}
128\usepackage{graphicx}
129\usepackage{hyperref}
130\usepackage{fancybox}
131\usepackage{alltt}
132\usepackage{color}
133\usepackage{scrextend}
134\definecolor{darkgreen}{rgb}{0,0.6,0}
135\tymin=21pt
136
137</xsl:text>
138 <xsl:if test="$TARGETLANG='de_DE'">\usepackage[ngerman]{babel}&#10;\PrerenderUnicode{ü}</xsl:if>
139<!-- <xsl:if test="$TARGETLANG='fr_FR'">\usepackage[french]{babel}&#10;\FrenchItemizeSpacingfalse&#10;\renewcommand{\FrenchLabelItem}{\textbullet}</xsl:if>
140 this command is no longer understood by TexLive2008
141 -->
142 <xsl:text>
143
144% use Palatino as serif font:
145% \usepackage{mathpazo}
146\usepackage{charter}
147% use Helvetica as sans-serif font:
148\usepackage{helvet}
149
150% use Bera Mono (a variant of Bitstream Vera Mono) as typewriter font
151% (requires texlive-fontsextra)
152\usepackage[scaled]{beramono}
153% previously: use Courier as typewriter font:
154% \usepackage{courier}
155
156\definecolor{colNote}{rgb}{0,0,0}
157\definecolor{colWarning}{rgb}{0,0,0}
158\definecolor{colScreenFrame}{rgb}{0,0,0}
159\definecolor{colScreenText}{rgb}{0,0,0}
160
161% number headings down to this level
162\setcounter{secnumdepth}{3}
163% more space for the section numbers
164\makeatletter
165\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.9em}}
166\renewcommand*\l@subsection{\@dottedtocline{2}{4.4em}{3.8em}}
167\renewcommand*\l@subsubsection{\@dottedtocline{3}{8.2em}{3.8em}}
168\renewcommand*\@pnumwidth{1.7em}
169\renewcommand*\@tocrmarg{5.0em}
170\makeatother
171
172% more tolerance at 2nd wrap stage:
173\tolerance = 1000
174% allow 3rd wrap stage:
175\emergencystretch = 10pt
176% no Schusterjungen:
177\clubpenalty = 10000
178% no Hurenkinder:
179\widowpenalty = 10000
180\displaywidowpenalty = 10000
181% max pdf compression:
182\pdfcompresslevel9
183
184% opening and closing quotes: the OQ and CQ macros define this (and the makefile employs some sed magic also)
185</xsl:text>
186 <xsl:choose>
187 <xsl:when test="$TARGETLANG='de_DE'">
188 <xsl:text>\newcommand\OQ{\texorpdfstring{\glqq}{"}}&#10;\newcommand\CQ{\texorpdfstring{\grqq}{"}}&#10;</xsl:text>
189 </xsl:when>
190 <xsl:when test="$TARGETLANG='fr_FR'">
191 <xsl:text>\newcommand\OQ{\texorpdfstring{``}{"}}&#10;\newcommand\CQ{\texorpdfstring{''}{"}}&#10;</xsl:text>
192 </xsl:when>
193 <xsl:when test="$TARGETLANG='en_US'">
194 <xsl:text>\newcommand\OQ{\texorpdfstring{``}{"}}&#10;\newcommand\CQ{\texorpdfstring{''}{"}}&#10;</xsl:text>
195 </xsl:when>
196 <xsl:otherwise>
197 <xsl:message terminate="yes"><xsl:value-of select="concat('Invalid language ', $TARGETLANG)" /></xsl:message>
198 </xsl:otherwise>
199 </xsl:choose>
200
201 <xsl:apply-templates />
202
203 <xsl:text>
204\end{sloppypar}
205\end{document}
206 </xsl:text>
207
208 </xsl:template>
209
210 <xsl:template match="bookinfo">
211 <xsl:apply-templates />
212 <xsl:text>&#x0a;\newcommand\docbookbookinfocopyright{Copyright \copyright{} \docbookbookinfocopyrightyear{} \docbookbookinfocopyrightholder{}}&#x0a;
213\author{ \docbooktitleedition \\ %
214\\ %
215</xsl:text>
216 <xsl:if test="//bookinfo/address">
217 <xsl:text>\docbookbookinfoaddress \\ %
218\\ %
219</xsl:text>
220 </xsl:if>
221 <xsl:text>\docbookbookinfocopyright \\ %
222}
223
224\title{\docbooktitle \\
225\docbooksubtitle}
226% \subtitle{\docbooksubtitle}
227\hypersetup{pdfauthor=\docbookcorpauthor}
228\hypersetup{pdftitle=\docbooktitle{} \docbooksubtitle{}}
229
230\hyphenation{da-ta-ba-ses}
231\hyphenation{deb-conf}
232\hyphenation{VirtualBox}
233
234\begin{document}
235\frontmatter
236% bird/2018-05-14: Use sloppypar so we don't push path names and other long words
237% thru the right margin. TODO: Find better solution? microtype?
238\begin{sloppypar}
239% \maketitle
240%\begin{titlepage}
241\thispagestyle{empty}
242\begin{minipage}{\textwidth}
243\begin{center}
244\includegraphics[width=4cm]{images/vboxlogo.png}
245\end{center}%
246\vspace{10mm}
247
248{\fontsize{40pt}{40pt}\selectfont\rmfamily\bfseries%
249\begin{center}
250\docbooktitle
251\end{center}%
252\vspace{10mm}
253}
254
255{\fontsize{30pt}{30pt}\selectfont\rmfamily\bfseries%
256\begin{center}
257\docbooksubtitle
258\end{center}%
259\vspace{10mm}
260}
261
262{\fontsize{16pt}{20pt}\selectfont\rmfamily%
263\begin{center}
264</xsl:text>
265 <xsl:if test="//bookinfo/othercredit">
266 <xsl:text>\docbookbookinfoothercreditcontrib{}: \docbookbookinfoothercreditfirstname{} \docbookbookinfoothercreditsurname
267
268\vspace{8mm}
269</xsl:text>
270 </xsl:if>
271 <xsl:text>\docbooktitleedition
272
273\vspace{2mm}
274
275\docbookbookinfocopyright
276
277\vspace{2mm}
278
279\docbookbookinfoaddress
280\end{center}%
281}
282
283%\end{titlepage}
284\end{minipage}
285
286\tableofcontents
287 </xsl:text>
288 </xsl:template>
289
290 <xsl:template match="subtitle">
291 <xsl:choose>
292 <xsl:when test="name(..)='bookinfo'">
293 <xsl:text>\newcommand\docbooksubtitle{</xsl:text>
294 <xsl:apply-templates />
295 <xsl:text>}</xsl:text>
296 </xsl:when>
297 </xsl:choose>
298 </xsl:template>
299
300 <!-- Determins the section depth, returning a number 1,2,3,4,5,6,7,... -->
301 <xsl:template name="get-section-level">
302 <xsl:param name="a_Node" select=".."/>
303 <xsl:for-each select="$a_Node"> <!-- makes it current -->
304 <xsl:choose>
305 <xsl:when test="self::sect1"><xsl:text>1</xsl:text></xsl:when>
306 <xsl:when test="self::sect2"><xsl:text>2</xsl:text></xsl:when>
307 <xsl:when test="self::sect3"><xsl:text>3</xsl:text></xsl:when>
308 <xsl:when test="self::sect4"><xsl:text>4</xsl:text></xsl:when>
309 <xsl:when test="self::sect5"><xsl:text>5</xsl:text></xsl:when>
310 <xsl:when test="self::section">
311 <xsl:value-of select="count(ancestor::section) + 1"/>
312 </xsl:when>
313 <xsl:when test="self::simplesect">
314 <xsl:variable name="tmp">
315 <xsl:call-template name="get-section-level">
316 <xsl:with-param name="a_Node" select="parent::*"/>
317 </xsl:call-template>
318 </xsl:variable>
319 <xsl:value-of select="$tmp + 1"/>
320 </xsl:when>
321 <xsl:when test="self::preface"><xsl:text>0</xsl:text></xsl:when>
322 <xsl:when test="self::chapter"><xsl:text>0</xsl:text></xsl:when>
323 <xsl:when test="self::appendix"><xsl:text>0</xsl:text></xsl:when>
324 <xsl:when test="self::article"><xsl:text>0</xsl:text></xsl:when>
325 <xsl:otherwise>
326 <xsl:message terminate="yes">get-section-level was called on non-section element: <xsl:value-of select="."/> </xsl:message>
327 </xsl:otherwise>
328 </xsl:choose>
329 </xsl:for-each>
330 </xsl:template>
331
332 <!--
333 Inserts \hypertarget{@id} that can be referenced via the /A "nameddest=@id"
334 command line or #nameddest=@id URL parameter.
335
336 TODO: The placement of the target could be improved on. The raisebox
337 stuff is a crude hack to make it a little more acceptable. -->
338 <xsl:template name="title-wrapper">
339 <xsl:param name="texcmd" select="concat('\',name(..))"/>
340 <xsl:param name="refid" select="../@id"/>
341 <xsl:param name="role" select="../@role"/>
342
343 <xsl:call-template name="xsltprocNewlineOutputHack"/>
344 <xsl:if test="$texcmd='\chapter' and (name(../preceding-sibling::*[1])='preface' or name(../preceding-sibling::*[1])='bookinfo')">
345 <xsl:text>\mainmatter&#x0a;</xsl:text>
346 </xsl:if>
347 <xsl:choose>
348 <xsl:when test="$refid">
349 <xsl:text>&#x0a;</xsl:text>
350 <xsl:value-of select="$texcmd"/>
351 <xsl:if test="not(contains($texcmd, '*'))">
352 <xsl:text>[</xsl:text> <!-- for toc -->
353 <xsl:apply-templates />
354 <xsl:text>]</xsl:text>
355 </xsl:if>
356 <xsl:text>{</xsl:text> <!-- for doc -->
357 <xsl:text>\raisebox{\ht\strutbox}{\hypertarget{</xsl:text>
358 <xsl:value-of select="$refid"/>
359 <xsl:text>}{}}</xsl:text>
360 <xsl:apply-templates />
361 <xsl:text>}</xsl:text>
362 </xsl:when>
363 <xsl:otherwise>
364 <xsl:text>&#x0a;</xsl:text><xsl:value-of select="$texcmd"/><xsl:text>{</xsl:text>
365 <xsl:apply-templates />
366 <xsl:text>}</xsl:text>
367 </xsl:otherwise>
368 </xsl:choose>
369 </xsl:template>
370
371 <xsl:template match="title">
372 <xsl:variable name="refid" select="../@id" />
373 <xsl:choose>
374 <xsl:when test="name(..)='bookinfo'">
375 <xsl:text>\newcommand\docbooktitle{</xsl:text>
376 <xsl:apply-templates />
377 <xsl:text>}</xsl:text>
378 </xsl:when>
379 <xsl:when test="name(..)='chapter'">
380 <xsl:call-template name="title-wrapper"/>
381 </xsl:when>
382 <xsl:when test="name(..)='preface'">
383 <xsl:call-template name="title-wrapper">
384 <xsl:with-param name="texcmd">\chapter</xsl:with-param>
385 </xsl:call-template>
386 </xsl:when>
387 <xsl:when test="name(..)='sect1'">
388 <xsl:call-template name="title-wrapper">
389 <xsl:with-param name="texcmd">\section</xsl:with-param>
390 </xsl:call-template>
391 </xsl:when>
392 <xsl:when test="parent::sect2[@role='not-in-toc'] or parent::refsect1 or (parent::section and count(ancestor::section) = 2)">
393 <xsl:call-template name="title-wrapper">
394 <xsl:with-param name="texcmd">\subsection*</xsl:with-param>
395 </xsl:call-template>
396 </xsl:when>
397 <xsl:when test="name(..)='sect2'">
398 <xsl:call-template name="title-wrapper">
399 <xsl:with-param name="texcmd">\subsection</xsl:with-param>
400 </xsl:call-template>
401 </xsl:when>
402 <xsl:when test="parent::sect3[@role='not-in-toc'] or parent::refsect2 or (parent::section and count(ancestor::section) = 3)">
403 <xsl:call-template name="title-wrapper">
404 <xsl:with-param name="texcmd">\subsubsection*</xsl:with-param>
405 </xsl:call-template>
406 </xsl:when>
407 <xsl:when test="name(..)='sect3'">
408 <xsl:call-template name="title-wrapper">
409 <xsl:with-param name="texcmd">\subsubsection</xsl:with-param>
410 </xsl:call-template>
411 </xsl:when>
412 <xsl:when test="parent::sect4[@role='not-in-toc'] or parent::refsect3 or (parent::section and count(ancestor::section) = 4)">
413 <xsl:call-template name="title-wrapper">
414 <xsl:with-param name="texcmd">\paragraph*</xsl:with-param>
415 </xsl:call-template>
416 </xsl:when>
417 <xsl:when test="name(..)='sect4'">
418 <xsl:call-template name="title-wrapper">
419 <xsl:with-param name="texcmd">\paragraph</xsl:with-param>
420 </xsl:call-template>
421 </xsl:when>
422 <xsl:when test="parent::sect5[@role='not-in-toc'] or parent::refsect4 or (parent::section and count(ancestor::section) = 5)">
423 <xsl:call-template name="title-wrapper">
424 <xsl:with-param name="texcmd">\subparagraph*</xsl:with-param>
425 </xsl:call-template>
426 </xsl:when>
427 <xsl:when test="name(..)='sect5'">
428 <xsl:call-template name="title-wrapper">
429 <xsl:with-param name="texcmd">\subparagraph</xsl:with-param>
430 </xsl:call-template>
431 </xsl:when>
432 <xsl:when test="name(..)='appendix'">
433 <xsl:call-template name="title-wrapper">
434 <xsl:with-param name="texcmd">\chapter</xsl:with-param>
435 </xsl:call-template>
436 </xsl:when>
437 <xsl:when test="name(..)='glossdiv'">
438 <xsl:call-template name="title-wrapper">
439 <xsl:with-param name="texcmd">\section*</xsl:with-param>
440 </xsl:call-template>
441 </xsl:when>
442
443 <xsl:when test="parent::simplesect">
444 <xsl:if test="../@role">
445 <xsl:message terminate="yes">Role not allowed with simplesect: <xsl:value-of select="../@role"/></xsl:message>
446 </xsl:if>
447 <xsl:variable name="level">
448 <xsl:call-template name="get-section-level">
449 <xsl:with-param name="a_Node" select=".."/>
450 </xsl:call-template>
451 </xsl:variable>
452 <xsl:choose>
453 <xsl:when test="$level = 1">
454 <xsl:call-template name="title-wrapper"><xsl:with-param name="texcmd">\section*</xsl:with-param></xsl:call-template>
455 </xsl:when>
456 <xsl:when test="$level = 2">
457 <xsl:call-template name="title-wrapper"><xsl:with-param name="texcmd">\subsection*</xsl:with-param></xsl:call-template>
458 </xsl:when>
459 <xsl:when test="$level = 3">
460 <xsl:call-template name="title-wrapper"><xsl:with-param name="texcmd">\subsubsection*</xsl:with-param></xsl:call-template>
461 </xsl:when>
462 <xsl:when test="$level = 4">
463 <xsl:call-template name="title-wrapper"><xsl:with-param name="texcmd">\paragraph*</xsl:with-param></xsl:call-template>
464 </xsl:when>
465 <xsl:when test="$level = 5">
466 <xsl:call-template name="title-wrapper"><xsl:with-param name="texcmd">\subparagraph*</xsl:with-param></xsl:call-template>
467 </xsl:when>
468 <xsl:otherwise>
469 <xsl:message terminate="yes">Unsupported simplesect/title depth: <xsl:value-of select="$level"/></xsl:message>
470 </xsl:otherwise>
471 </xsl:choose>
472 </xsl:when>
473
474 </xsl:choose>
475 <xsl:if test="$refid">
476 <xsl:value-of select="concat('&#x0a;\label{', $refid, '}')" />
477 </xsl:if>
478 <xsl:text>&#x0a;</xsl:text>
479 </xsl:template>
480
481 <xsl:template match="edition">
482 <xsl:choose>
483 <xsl:when test="name(..)='bookinfo'">
484 <xsl:text>\newcommand\docbooktitleedition{</xsl:text>
485 <xsl:apply-templates />
486 <xsl:text>}&#x0a;</xsl:text>
487 </xsl:when>
488 </xsl:choose>
489 </xsl:template>
490
491 <xsl:template match="corpauthor">
492 <xsl:choose>
493 <xsl:when test="name(..)='bookinfo'">
494 <xsl:text>\newcommand\docbookcorpauthor{</xsl:text>
495 <xsl:apply-templates />
496 <xsl:text>}&#x0a;</xsl:text>
497 </xsl:when>
498 </xsl:choose>
499 </xsl:template>
500
501 <xsl:template match="address">
502 <xsl:choose>
503 <xsl:when test="name(..)='bookinfo'">
504 <xsl:text>\newcommand\docbookbookinfoaddress{</xsl:text>
505 <xsl:apply-templates />
506 <xsl:text>}&#x0a;</xsl:text>
507 </xsl:when>
508 </xsl:choose>
509 </xsl:template>
510
511 <xsl:template match="year">
512 <xsl:choose>
513 <xsl:when test="name(..)='copyright'">
514 <xsl:text>\newcommand\docbookbookinfocopyrightyear{</xsl:text>
515 <xsl:apply-templates />
516 <xsl:text>}&#x0a;</xsl:text>
517 </xsl:when>
518 </xsl:choose>
519 </xsl:template>
520
521 <xsl:template match="holder">
522 <xsl:choose>
523 <xsl:when test="name(..)='copyright'">
524 <xsl:text>\newcommand\docbookbookinfocopyrightholder{</xsl:text>
525 <xsl:apply-templates />
526 <xsl:text>}&#x0a;</xsl:text>
527 </xsl:when>
528 </xsl:choose>
529 </xsl:template>
530
531 <xsl:template match="firstname">
532 <xsl:choose>
533 <xsl:when test="name(..)='othercredit'">
534 <xsl:text>\newcommand\docbookbookinfoothercreditfirstname{</xsl:text>
535 <xsl:apply-templates />
536 <xsl:text>}&#x0a;</xsl:text>
537 </xsl:when>
538 </xsl:choose>
539 </xsl:template>
540
541 <xsl:template match="surname">
542 <xsl:choose>
543 <xsl:when test="name(..)='othercredit'">
544 <xsl:text>\newcommand\docbookbookinfoothercreditsurname{</xsl:text>
545 <xsl:apply-templates />
546 <xsl:text>}&#x0a;</xsl:text>
547 </xsl:when>
548 </xsl:choose>
549 </xsl:template>
550
551 <xsl:template match="contrib">
552 <xsl:choose>
553 <xsl:when test="name(..)='othercredit'">
554 <xsl:text>\newcommand\docbookbookinfoothercreditcontrib{</xsl:text>
555 <xsl:apply-templates />
556 <xsl:text>}&#x0a;</xsl:text>
557 </xsl:when>
558 </xsl:choose>
559 </xsl:template>
560
561 <xsl:template match="glossary">
562 <xsl:text>&#x0a;&#x0a;\backmatter&#x0a;\chapter{Glossary}&#x0a;</xsl:text>
563 <xsl:apply-templates />
564 </xsl:template>
565
566 <xsl:template match="para">
567 <xsl:if test="not(name(..)='footnote' or name(..)='note' or name(..)='warning' or name(..)='entry' or (name(../..)='varlistentry' and position()=1))">
568 <xsl:text>&#x0a;&#x0a;</xsl:text>
569 </xsl:if>
570 <xsl:apply-templates />
571 </xsl:template>
572
573 <xsl:template match="note">
574 <xsl:value-of select="concat('&#x0a;&#x0a;\vspace{.2cm}&#x0a;&#x0a;\begin{center}\fbox{\begin{minipage}[c]{0.9\textwidth}\color{colNote}\textbf{', $g_nlsNote, ':} ')" />
575 <xsl:apply-templates />
576 <xsl:text>\end{minipage}}\end{center}&#x0a;&#x0a;\vspace{.2cm}&#x0a;&#x0a;</xsl:text>
577 </xsl:template>
578
579 <xsl:template match="warning">
580 <xsl:value-of select="concat('&#x0a;&#x0a;\vspace{.2cm}&#x0a;&#x0a;\begin{center}\fbox{\begin{minipage}[c]{0.9\textwidth}\color{colWarning}\textbf{', $g_nlsWarning, ':} ')" />
581 <xsl:apply-templates />
582 <xsl:text>\end{minipage}}\end{center}&#x0a;&#x0a;\vspace{.2cm}&#x0a;&#x0a;</xsl:text>
583 </xsl:template>
584
585 <xsl:template match="screen">
586 <xsl:text>&#x0a;&#x0a;{\footnotesize\begin{alltt}&#x0a;</xsl:text>
587 <xsl:apply-templates />
588 <xsl:text>&#x0a;\end{alltt}}&#x0a;</xsl:text>
589 </xsl:template>
590
591 <xsl:template match="programlisting">
592 <xsl:text>&#x0a;&#x0a;{\small\begin{alltt}&#x0a;</xsl:text>
593 <xsl:apply-templates />
594 <xsl:text>&#x0a;\end{alltt}}&#x0a;</xsl:text>
595 </xsl:template>
596
597 <xsl:template match="footnote">
598 <xsl:text>\footnote{</xsl:text>
599 <xsl:apply-templates />
600 <xsl:text>}</xsl:text>
601 </xsl:template>
602
603 <xsl:template match="tgroup">
604 <xsl:choose>
605 <xsl:when test="@style='verywide'">
606 <xsl:text>&#x0a;&#x0a;{\small\begin{center}&#x0a;\begin{tabulary}{1.1\textwidth}[]</xsl:text>
607 </xsl:when>
608 <xsl:otherwise>
609 <xsl:text>&#x0a;&#x0a;{\small\begin{center}&#x0a;\begin{tabulary}{.9\textwidth}[]</xsl:text>
610 </xsl:otherwise>
611 </xsl:choose>
612 <xsl:text>{</xsl:text>
613 <xsl:choose>
614 <xsl:when test="@cols='1'">
615 <xsl:text>|L|</xsl:text>
616 </xsl:when>
617 <xsl:when test="@cols='2'">
618 <xsl:text>|L|L|</xsl:text>
619 </xsl:when>
620 <xsl:when test="@cols='3'">
621 <xsl:text>|L|L|L|</xsl:text>
622 </xsl:when>
623 <xsl:when test="@cols='4'">
624 <xsl:text>|L|L|L|L|</xsl:text>
625 </xsl:when>
626 <xsl:when test="@cols='5'">
627 <xsl:text>|L|L|L|L|L|</xsl:text>
628 </xsl:when>
629 <xsl:when test="@cols='6'">
630 <xsl:text>|L|L|L|L|L|L|</xsl:text>
631 </xsl:when>
632 <xsl:otherwise>
633 <xsl:message terminate="yes">Unsupported number of columns (<xsl:value-of select="@cols"/>), fix document or converter</xsl:message>
634 </xsl:otherwise>
635 </xsl:choose>
636 <xsl:text>}&#x0a;\hline&#x0a;</xsl:text>
637 <xsl:apply-templates />
638 <xsl:text>&#x0a;\end{tabulary}&#x0a;\end{center}}&#x0a;</xsl:text>
639 </xsl:template>
640
641 <xsl:template match="row">
642 <xsl:apply-templates />
643 <xsl:text>&#x0a;\\ \hline&#x0a;</xsl:text>
644 </xsl:template>
645
646 <xsl:template match="entry">
647 <xsl:if test="not(position()=1)">
648 <xsl:text> &amp; </xsl:text>
649 </xsl:if>
650 <xsl:apply-templates />
651 </xsl:template>
652
653 <xsl:template match="itemizedlist">
654 <xsl:call-template name="xsltprocNewlineOutputHack"/>
655 <xsl:text>&#x0a;\begin{itemize}&#x0a;</xsl:text>
656 <xsl:if test="@spacing = 'compact'">
657 <xsl:text> \setlength{\parskip}{0pt}&#x0a;</xsl:text>
658 <xsl:text> \setlength{\itemsep}{0pt}&#x0a;</xsl:text>
659 <xsl:text> \setlength{\topsep}{0pt}&#x0a;</xsl:text>
660 <xsl:text> \setlength{\parsep}{0pt}&#x0a;</xsl:text>
661 <xsl:text> \setlength{\partopsep}{0pt}&#x0a;</xsl:text>
662 </xsl:if>
663 <xsl:apply-templates />
664 <xsl:text>&#x0a;\end{itemize}&#x0a;</xsl:text>
665 </xsl:template>
666
667 <xsl:template match="orderedlist">
668 <xsl:call-template name="xsltprocNewlineOutputHack"/>
669 <xsl:text>&#x0a;\begin{enumerate}&#x0a;</xsl:text>
670 <xsl:if test="@spacing = 'compact'">
671 <xsl:text> \setlength{\parskip}{0pt}&#x0a;</xsl:text>
672 <xsl:text> \setlength{\itemsep}{0pt}&#x0a;</xsl:text>
673 <xsl:text> \setlength{\topsep}{0pt}&#x0a;</xsl:text>
674 <xsl:text> \setlength{\parsep}{0pt}&#x0a;</xsl:text>
675 <xsl:text> \setlength{\partopsep}{0pt}&#x0a;</xsl:text>
676 </xsl:if>
677 <xsl:apply-templates />
678 <xsl:text>&#x0a;\end{enumerate}&#x0a;</xsl:text>
679 </xsl:template>
680
681 <xsl:template match="variablelist">
682 <xsl:call-template name="xsltprocNewlineOutputHack"/>
683 <xsl:text>&#x0a;\begin{description}&#x0a;</xsl:text>
684 <xsl:if test="@spacing = 'compact'">
685 <xsl:text> \setlength{\parskip}{0pt}&#x0a;</xsl:text>
686 <xsl:text> \setlength{\itemsep}{0pt}&#x0a;</xsl:text>
687 <xsl:text> \setlength{\topsep}{0pt}&#x0a;</xsl:text>
688 <xsl:text> \setlength{\parsep}{0pt}&#x0a;</xsl:text>
689 <xsl:text> \setlength{\partopsep}{0pt}&#x0a;</xsl:text>
690 </xsl:if>
691 <xsl:apply-templates />
692 <xsl:text>&#x0a;\end{description}&#x0a;</xsl:text>
693 </xsl:template>
694
695 <xsl:template match="varlistentry">
696 <xsl:if test="not(./term) or not(./listitem) or count(./listitem) != 1">
697 <xsl:message terminate="yes">Expected at least one term and one listitem element in the varlistentry.</xsl:message>
698 </xsl:if>
699 <xsl:text>&#x0a;&#x0a;\item[{\parbox[t]{\linewidth}{\raggedright </xsl:text>
700 <xsl:apply-templates select="./term[1]"/>
701 <xsl:for-each select="./term[position() > 1]">
702 <xsl:text>\\&#x0a; </xsl:text>
703 <xsl:apply-templates select="."/>
704 </xsl:for-each>
705 <xsl:text>}}]\hfill\\</xsl:text>
706 <xsl:apply-templates select="listitem/*"/>
707 </xsl:template>
708
709 <xsl:template match="listitem">
710 <xsl:text>&#x0a;&#x0a;\item </xsl:text>
711 <xsl:apply-templates />
712 <xsl:text>&#x0a;</xsl:text>
713 </xsl:template>
714
715 <xsl:template match="glossterm">
716 <xsl:variable name="refid" select="(@id)" />
717 <xsl:if test="$refid">
718 <xsl:value-of select="concat('&#x0a;\label{', $refid, '}')" />
719 </xsl:if>
720 <xsl:text>&#x0a;&#x0a;\item[</xsl:text>
721 <xsl:apply-templates />
722 <xsl:text>]</xsl:text>
723 </xsl:template>
724
725 <xsl:template match="glosslist | glossdiv">
726 <xsl:text>&#x0a;&#x0a;\begin{description}&#x0a;</xsl:text>
727 <xsl:apply-templates />
728 <xsl:text>&#x0a;\end{description}&#x0a;</xsl:text>
729 </xsl:template>
730
731 <xsl:template match="superscript">
732 <xsl:variable name="contents">
733 <xsl:apply-templates />
734 </xsl:variable>
735 <xsl:value-of select="concat('\texorpdfstring{\textsuperscript{', $contents, '}}{', $contents, '}')" />
736 </xsl:template>
737
738 <xsl:template match="emphasis">
739 <xsl:choose>
740 <xsl:when test="@role='bold'">
741 <xsl:text>\textbf{</xsl:text>
742 </xsl:when>
743 <xsl:otherwise>
744 <xsl:text>\textit{</xsl:text>
745 </xsl:otherwise>
746 </xsl:choose>
747 <xsl:apply-templates />
748 <xsl:text>}</xsl:text>
749 </xsl:template>
750
751 <xsl:template match="computeroutput | code">
752 <xsl:text>\texttt{</xsl:text>
753 <xsl:apply-templates />
754 <xsl:text>}</xsl:text>
755 </xsl:template>
756
757 <xsl:template match="literal | filename">
758 <xsl:text>\texttt{</xsl:text>
759 <xsl:apply-templates />
760 <xsl:text>}</xsl:text>
761 </xsl:template>
762
763 <xsl:template match="citetitle">
764 <xsl:text>\textit{</xsl:text>
765 <xsl:apply-templates />
766 <xsl:text>}</xsl:text>
767 </xsl:template>
768
769 <xsl:template match="lineannotation">
770 <xsl:text>\textit{</xsl:text>
771 <xsl:apply-templates />
772 <xsl:text>}</xsl:text>
773 </xsl:template>
774
775 <xsl:template match="ulink[@url!='' and not(text())]">
776 <xsl:text>\url{</xsl:text>
777 <xsl:value-of select="@url"/>
778 <xsl:text>}</xsl:text>
779 </xsl:template>
780
781 <xsl:template match="ulink[@url!='' and text()]">
782 <xsl:text>\href{</xsl:text>
783 <xsl:value-of select="@url"/>
784 <xsl:text>}{</xsl:text>
785 <xsl:apply-templates />
786 <xsl:text>}</xsl:text>
787 </xsl:template>
788
789 <xsl:template match="ulink[(@url='' or not(@url)) and text()]">
790 <xsl:text>\url{</xsl:text>
791 <xsl:apply-templates />
792 <xsl:text>}</xsl:text>
793 </xsl:template>
794
795 <xsl:template match="xref">
796 <xsl:choose>
797 <xsl:when test="@endterm">
798 <xsl:value-of select="concat('\hyperref[', @linkend, ']{\mbox{', @endterm, '}}')" />
799 </xsl:when>
800 <xsl:otherwise>
801 <xsl:value-of select="concat($g_nlsChapter, ' \ref{', @linkend, '}, \textit{\nameref{', @linkend, '}}, ', $g_nlsPage, ' \pageref{', @linkend, '}')" />
802 </xsl:otherwise>
803 </xsl:choose>
804 </xsl:template>
805
806 <xsl:template match="link">
807 <xsl:choose>
808 <xsl:when test="@endterm">
809 <xsl:value-of select="concat('\hyperref[', @linkend, ']{\mbox{', @endterm, '}}')" />
810 </xsl:when>
811 <xsl:when test="./text()">
812 <xsl:value-of select="concat('\hyperref[', @linkend, ']{\mbox{')" />
813 <xsl:apply-templates select="./text()"/>
814 <xsl:value-of select="'}}'" />
815 </xsl:when>
816 <xsl:otherwise>
817 <xsl:value-of select="concat($g_nlsChapter, ' \ref{', @linkend, '}, \textit{\nameref{', @linkend, '}}, ', $g_nlsPage, ' \pageref{', @linkend, '}')" />
818 </xsl:otherwise>
819 </xsl:choose>
820 </xsl:template>
821
822 <xsl:template match="trademark">
823 <xsl:apply-templates />
824 <xsl:text>\textsuperscript{\textregistered}</xsl:text>
825 </xsl:template>
826
827 <!-- for some reason, DocBook insists of having image data nested this way always:
828 mediaobject -> imageobject -> imagedata
829 but only imagedata is interesting -->
830 <xsl:template match="imagedata">
831 <xsl:if test="@align='center'">
832 <xsl:text>\begin{center}</xsl:text>
833 </xsl:if>
834 <xsl:value-of select="concat('&#x0a;\includegraphics[width=', @width, ']{', @fileref, '}&#x0a;')" />
835 <xsl:apply-templates />
836 <xsl:if test="@align='center'">
837 <xsl:text>\end{center}</xsl:text>
838 </xsl:if>
839 </xsl:template>
840
841 <!--
842 Turn the refsynopsisdiv part of a manpage into a named & indented paragraph.
843 -->
844 <xsl:template match="refsynopsisdiv">
845 <xsl:if test="name(*[1]) != 'cmdsynopsis'"><xsl:message terminate="yes">Expected refsynopsisdiv to start with cmdsynopsis</xsl:message></xsl:if>
846 <xsl:if test="title"><xsl:message terminate="yes">No title element supported in refsynopsisdiv</xsl:message></xsl:if>
847 <xsl:call-template name="xsltprocNewlineOutputHack"/>
848 <xsl:text>&#x0a;\subsection*{Synopsis}&#x0a;</xsl:text>
849 <xsl:apply-templates />
850 </xsl:template>
851
852 <!--
853 The refsect1 is used for 'Description' and such. Do same as with refsynopsisdiv
854 and turn it into a named & indented paragraph.
855 -->
856 <xsl:template match="refsect1">
857 <xsl:if test="name(*[1]) != 'title' or count(title) != 1">
858 <xsl:message terminate="yes">Expected exactly one title as the first refsect1 element (remarks goes after title!).</xsl:message>
859 </xsl:if>
860 <xsl:apply-templates/>
861 </xsl:template>
862
863 <!--
864 The refsect2 element will be turned into a subparagraph if it has a title,
865 however, that didn't work out when it didn't have a title and started with
866 a cmdsynopsis instead (subcommand docs). So, we're doing some trickery
867 here (HACK ALERT) for the non-title case to feign a paragraph.
868 -->
869 <xsl:template match="refsect2">
870 <xsl:if test="name(*[1]) != 'title' or count(title) != 1">
871 <xsl:message terminate="yes">Expected exactly one title as the first refsect2 element (remarks goes after title!).</xsl:message>
872 </xsl:if>
873 <xsl:apply-templates/>
874 <xsl:text>&#x0a;</xsl:text>
875 </xsl:template>
876
877
878 <!--
879 Command Synopsis elements.
880
881 We treat each command element inside a cmdsynopsis as the start of
882 a new paragraph. The DocBook HTML converter does so too, but the
883 manpage one doesn't.
884
885 sbr and linebreaks made by latex should be indented from the base
886 command level. This is done by the \hangindent3em\hangafter1 bits.
887
888 We exploit the default paragraph indentation to get each command
889 indented from the left margin. This, unfortunately, doesn't work
890 if we're the first paragraph in a (sub*)section. \noindent cannot
891 counter this due to when latex enforces first paragraph stuff. Since
892 it's tedious to figure out when we're in the first paragraph and when
893 not, we just do \noindent\hspace{1em} everywhere.
894 -->
895 <xsl:template match="sbr">
896 <xsl:if test="not(ancestor::cmdsynopsis)">
897 <xsl:message terminate="yes">sbr only supported inside cmdsynopsis (because of hangindent)</xsl:message>
898 </xsl:if>
899 <xsl:text>\newline</xsl:text>
900 </xsl:template>
901
902 <xsl:template match="refentry|refnamediv|refentryinfo|refmeta|refsect3|refsect4|refsect5|synopfragment|synopfragmentref|cmdsynopsis/info">
903 <xsl:message terminate="yes"><xsl:value-of select="name()"/> is not supported</xsl:message>
904 </xsl:template>
905
906 <xsl:template match="cmdsynopsis">
907 <xsl:if test="preceding-sibling::cmdsynopsis">
908 <xsl:text>%cmdsynopsis</xsl:text>
909 </xsl:if>
910 <xsl:text>&#x0a;</xsl:text>
911 <xsl:text>\begin{flushleft}</xsl:text>
912 <xsl:if test="parent::remark[@role='VBoxManage-overview']">
913 <!-- Overview fontsize trick -->
914 <xsl:text>{\footnotesize</xsl:text>
915 </xsl:if>
916 <xsl:text>\noindent\hspace{1em}</xsl:text>
917 <xsl:text>\hangindent3em\hangafter1\texttt{</xsl:text>
918 <xsl:apply-templates />
919 <xsl:text>}</xsl:text>
920 <xsl:if test="following-sibling::*">
921 </xsl:if>
922
923 <!-- For refsect2 subcommand descriptions. -->
924 <xsl:if test="not(following-sibling::cmdsynopsis) and position() != last()">
925 <xsl:text>\linebreak</xsl:text>
926 </xsl:if>
927 <!-- Special overview trick for the current VBoxManage command overview. -->
928 <xsl:if test="parent::remark[@role='VBoxManage-overview']">
929 <xsl:text>\par}</xsl:text>
930 </xsl:if>
931 <xsl:text>\end{flushleft}</xsl:text>
932 </xsl:template>
933
934 <xsl:template match="command">
935 <xsl:choose>
936 <xsl:when test="ancestor::cmdsynopsis">
937 <!-- Trigger a line break if this isn't the first command in a synopsis -->
938 <xsl:if test="preceding-sibling::command">
939 <xsl:text>}\par%command&#x0a;</xsl:text>
940 <xsl:text>\noindent\hspace{1em}</xsl:text>
941 <xsl:text>\hangindent3em\hangafter1\texttt{</xsl:text>
942 </xsl:if>
943 <xsl:apply-templates />
944 </xsl:when>
945 <xsl:otherwise>
946 <xsl:text>\texttt{</xsl:text>
947 <xsl:apply-templates />
948 <xsl:text>}</xsl:text>
949 </xsl:otherwise>
950 </xsl:choose>
951 </xsl:template>
952
953 <xsl:template match="option">
954 <xsl:choose>
955 <xsl:when test="ancestor::cmdsynopsis">
956 <xsl:apply-templates />
957 </xsl:when>
958 <xsl:otherwise>
959 <xsl:text>\texttt{</xsl:text>
960 <xsl:apply-templates />
961 <xsl:text>}</xsl:text>
962 </xsl:otherwise>
963 </xsl:choose>
964 </xsl:template>
965
966 <!-- duplicated in docbook-refentry-to-C-help.xsl -->
967 <xsl:template match="arg|group">
968 <!-- separator char if we're not the first child -->
969 <xsl:if test="position() > 1">
970 <xsl:choose>
971 <xsl:when test="parent::group and ancestor::*[@role='compact']"><xsl:text>\textrm{</xsl:text><xsl:value-of select="$arg.or.sep.compact.tex"/><xsl:text>}</xsl:text></xsl:when>
972 <xsl:when test="parent::group"><xsl:text>\textrm{</xsl:text><xsl:value-of select="$arg.or.sep.tex"/><xsl:text>}</xsl:text></xsl:when>
973 <xsl:when test="ancestor::*[@role='compact']"></xsl:when>
974 <xsl:when test="ancestor::*/@sepchar"><xsl:value-of select="ancestor::*/@sepchar"/></xsl:when>
975 <xsl:otherwise><xsl:text> </xsl:text></xsl:otherwise>
976 </xsl:choose>
977 </xsl:if>
978
979 <!-- open wrapping -->
980 <xsl:choose>
981 <xsl:when test="not(@choice) or @choice = ''"> <xsl:text>\textrm{</xsl:text><xsl:value-of select="$arg.choice.def.open.str"/><xsl:text>}</xsl:text></xsl:when>
982 <xsl:when test="@choice = 'opt'"> <xsl:text>\textrm{</xsl:text><xsl:value-of select="$arg.choice.opt.open.str"/><xsl:text>}</xsl:text></xsl:when>
983 <xsl:when test="@choice = 'req'"> <xsl:text>\textrm{</xsl:text><xsl:value-of select="$arg.choice.req.open.str"/><xsl:text>}</xsl:text></xsl:when>
984 <xsl:when test="@choice = 'plain'"/>
985 <xsl:otherwise><xsl:message terminate="yes"><xsl:call-template name="error-prefix"/>Invalid arg choice: "<xsl:value-of select="@choice"/>"</xsl:message></xsl:otherwise>
986 </xsl:choose>
987
988 <xsl:apply-templates />
989
990 <!-- repeat indication -->
991 <xsl:choose>
992 <xsl:when test="@rep = 'norepeat' or not(@rep) or @rep = ''"/>
993 <xsl:when test="@rep = 'repeat'">
994 <!-- add space padding if we're in a repeating group -->
995 <xsl:if test="self::group">
996 <xsl:text> </xsl:text>
997 </xsl:if>
998 <xsl:text>\textrm{</xsl:text><xsl:value-of select="$arg.rep.repeat.str.tex"/><xsl:text>}</xsl:text>
999 </xsl:when>
1000 <xsl:otherwise><xsl:message terminate="yes"><xsl:call-template name="error-prefix"/>Invalid rep choice: "<xsl:value-of select="@rep"/>"</xsl:message></xsl:otherwise>
1001 </xsl:choose>
1002
1003 <!-- close wrapping -->
1004 <xsl:choose>
1005 <xsl:when test="not(@choice) or @choice = ''"> <xsl:text>\textrm{</xsl:text><xsl:value-of select="$arg.choice.def.close.str"/><xsl:text>}</xsl:text></xsl:when>
1006 <xsl:when test="@choice = 'opt'"> <xsl:text>\textrm{</xsl:text><xsl:value-of select="$arg.choice.opt.close.str"/><xsl:text>}</xsl:text></xsl:when>
1007 <xsl:when test="@choice = 'req'"> <xsl:text>\textrm{</xsl:text><xsl:value-of select="$arg.choice.req.close.str"/><xsl:text>}</xsl:text></xsl:when>
1008 </xsl:choose>
1009
1010 <!-- add space padding if we're the last element in a nested arg -->
1011 <!-- 2023-03-22 bird: This is incorrectly written. Fix as needed...
1012 <xsl:if test="(parent::arg or parent::group) and not(following-sibling) and not(ancestor::*[@role='compact'])">
1013 <xsl:text> </xsl:text>
1014 </xsl:if> -->
1015 </xsl:template>
1016
1017 <xsl:template match="replaceable">
1018 <xsl:choose>
1019 <xsl:when test="(not(ancestor::cmdsynopsis) and not(ancestor::option) and not(ancestor::screen)) or ancestor::arg">
1020 <xsl:text>\texttt{\textit{</xsl:text>
1021 <xsl:apply-templates />
1022 <xsl:text>}}</xsl:text>
1023 </xsl:when>
1024 <xsl:otherwise>
1025 <xsl:text>\textit{&lt;</xsl:text>
1026 <xsl:apply-templates />
1027 <xsl:text>&gt;}</xsl:text>
1028 </xsl:otherwise>
1029 </xsl:choose>
1030 </xsl:template>
1031
1032
1033 <!--
1034 Generic element text magic.
1035 -->
1036 <xsl:template match="//text()">
1037
1038 <!-- Do the translation of \ into \textbackslash{} in two steps, to avoid
1039 running into replacing {} as well which would be very wrong. -->
1040 <xsl:variable name="subst1">
1041 <xsl:call-template name="str:subst">
1042 <xsl:with-param name="text" select="." />
1043 <xsl:with-param name="replace" select="'\'" />
1044 <xsl:with-param name="with" select="'\textbackslash'" />
1045 <xsl:with-param name="disable-output-escaping" select="no" />
1046 </xsl:call-template>
1047 </xsl:variable>
1048 <xsl:variable name="subst2">
1049 <xsl:call-template name="str:subst">
1050 <xsl:with-param name="text" select="$subst1" />
1051 <xsl:with-param name="replace" select="'{'" />
1052 <xsl:with-param name="with" select="'\{'" />
1053 <xsl:with-param name="disable-output-escaping" select="no" />
1054 </xsl:call-template>
1055 </xsl:variable>
1056 <xsl:variable name="subst3">
1057 <xsl:call-template name="str:subst">
1058 <xsl:with-param name="text" select="$subst2" />
1059 <xsl:with-param name="replace" select="'}'" />
1060 <xsl:with-param name="with" select="'\}'" />
1061 <xsl:with-param name="disable-output-escaping" select="no" />
1062 </xsl:call-template>
1063 </xsl:variable>
1064 <xsl:variable name="subst4">
1065 <xsl:call-template name="str:subst">
1066 <xsl:with-param name="text" select="$subst3" />
1067 <xsl:with-param name="replace" select="'\textbackslash'" />
1068 <xsl:with-param name="with" select="'\textbackslash{}'" />
1069 <xsl:with-param name="disable-output-escaping" select="no" />
1070 </xsl:call-template>
1071 </xsl:variable>
1072
1073 <xsl:choose>
1074 <xsl:when test="(name(..) = 'computeroutput') or (name(../..) = 'computeroutput')
1075 or (name(..) = 'code') or (name(../..) = 'code')
1076 or (name(..) = 'arg') or (name(../..) = 'arg')
1077 or (name(..) = 'option') or (name(../..) = 'option')
1078 or (name(..) = 'command') or (name(../..) = 'command')
1079 or (name(..) = 'cmdsynopsis') or (name(../..) = 'cmdsynopsis')
1080 or (name(..) = 'replaceable') or (name(../..) = 'replaceable')
1081 or (name(..) = 'entry') or (name(../..) = 'entry')
1082 ">
1083 <xsl:variable name="subst5">
1084 <xsl:call-template name="str:subst">
1085 <xsl:with-param name="text" select="translate(normalize-space(concat('&#x7f;',$subst4,'&#x7f;')),'&#x7f;','')" />
1086 <xsl:with-param name="replace" select="'--'" />
1087 <xsl:with-param name="with" select="'-{}-'" />
1088 <xsl:with-param name="disable-output-escaping" select="no" />
1089 </xsl:call-template>
1090 </xsl:variable>
1091 <xsl:variable name="subst6">
1092 <xsl:call-template name="str:subst">
1093 <xsl:with-param name="text" select="$subst5" />
1094 <xsl:with-param name="replace" select="'_'" />
1095 <xsl:with-param name="with" select="'\_'" />
1096 <xsl:with-param name="disable-output-escaping" select="no" />
1097 </xsl:call-template>
1098 </xsl:variable>
1099 <xsl:variable name="subst7">
1100 <xsl:call-template name="str:subst">
1101 <xsl:with-param name="text" select="$subst6" />
1102 <xsl:with-param name="replace" select="'$'" />
1103 <xsl:with-param name="with" select="'\$'" />
1104 <xsl:with-param name="disable-output-escaping" select="no" />
1105 </xsl:call-template>
1106 </xsl:variable>
1107 <xsl:variable name="subst8">
1108 <xsl:call-template name="str:subst">
1109 <xsl:with-param name="text" select="$subst7" />
1110 <xsl:with-param name="replace" select="'%'" />
1111 <xsl:with-param name="with" select="'\%'" />
1112 <xsl:with-param name="disable-output-escaping" select="no" />
1113 </xsl:call-template>
1114 </xsl:variable>
1115 <xsl:variable name="subst9">
1116 <xsl:call-template name="str:subst">
1117 <xsl:with-param name="text" select="$subst8" />
1118 <xsl:with-param name="replace" select="'#'" />
1119 <xsl:with-param name="with" select="'\#'" />
1120 <xsl:with-param name="disable-output-escaping" select="no" />
1121 </xsl:call-template>
1122 </xsl:variable>
1123 <xsl:variable name="subst10">
1124 <xsl:call-template name="str:subst">
1125 <xsl:with-param name="text" select="$subst9" />
1126 <xsl:with-param name="replace" select="'~'" />
1127 <xsl:with-param name="with" select="'\textasciitilde{}'" />
1128 <xsl:with-param name="disable-output-escaping" select="no" />
1129 </xsl:call-template>
1130 </xsl:variable>
1131 <xsl:variable name="subst11">
1132 <xsl:call-template name="str:subst">
1133 <xsl:with-param name="text" select="$subst10" />
1134 <xsl:with-param name="replace" select="'&amp;'" />
1135 <xsl:with-param name="with" select="'\&amp;'" />
1136 <xsl:with-param name="disable-output-escaping" select="no" />
1137 </xsl:call-template>
1138 </xsl:variable>
1139 <xsl:choose>
1140 <xsl:when test="parent::arg or parent::command">
1141 <xsl:variable name="subst12">
1142 <xsl:call-template name="str:subst">
1143 <xsl:with-param name="text" select="$subst10" />
1144 <xsl:with-param name="replace" select="' '" />
1145 <xsl:with-param name="with" select="'~'" />
1146 <xsl:with-param name="disable-output-escaping" select="no" />
1147 </xsl:call-template>
1148 </xsl:variable>
1149 <xsl:value-of select="$subst12" />
1150 </xsl:when>
1151 <xsl:otherwise>
1152 <xsl:value-of select="$subst11" />
1153 </xsl:otherwise>
1154 </xsl:choose>
1155 </xsl:when>
1156
1157 <xsl:when test="(name(..)='address') or (name(../..)='address')">
1158 <xsl:variable name="subst5">
1159 <xsl:call-template name="str:subst">
1160 <xsl:with-param name="text" select="$subst4" />
1161 <xsl:with-param name="replace" select="'&#x0a;'" />
1162 <xsl:with-param name="with" select="' \\'" />
1163 <xsl:with-param name="disable-output-escaping" select="no" />
1164 </xsl:call-template>
1165 </xsl:variable>
1166 <xsl:value-of select="$subst5" />
1167 </xsl:when>
1168
1169 <!-- <screen> and <programlisting>, which work with alltt environment. -->
1170 <xsl:otherwise>
1171 <xsl:variable name="subst5">
1172 <xsl:call-template name="str:subst">
1173 <xsl:with-param name="text" select="$subst4" />
1174 <xsl:with-param name="replace" select="'_'" />
1175 <xsl:with-param name="with" select="'\_'" />
1176 <xsl:with-param name="disable-output-escaping" select="no" />
1177 </xsl:call-template>
1178 </xsl:variable>
1179 <xsl:variable name="subst6">
1180 <xsl:call-template name="str:subst">
1181 <xsl:with-param name="text" select="$subst5" />
1182 <xsl:with-param name="replace" select="'$'" />
1183 <xsl:with-param name="with" select="'\$'" />
1184 <xsl:with-param name="disable-output-escaping" select="no" />
1185 </xsl:call-template>
1186 </xsl:variable>
1187 <xsl:variable name="subst7">
1188 <xsl:call-template name="str:subst">
1189 <xsl:with-param name="text" select="$subst6" />
1190 <xsl:with-param name="replace" select="'%'" />
1191 <xsl:with-param name="with" select="'\%'" />
1192 <xsl:with-param name="disable-output-escaping" select="no" />
1193 </xsl:call-template>
1194 </xsl:variable>
1195 <xsl:variable name="subst8">
1196 <xsl:call-template name="str:subst">
1197 <xsl:with-param name="text" select="$subst7" />
1198 <xsl:with-param name="replace" select="'#'" />
1199 <xsl:with-param name="with" select="'\#'" />
1200 <xsl:with-param name="disable-output-escaping" select="no" />
1201 </xsl:call-template>
1202 </xsl:variable>
1203 <xsl:variable name="subst9">
1204 <xsl:call-template name="str:subst">
1205 <xsl:with-param name="text" select="$subst8" />
1206 <xsl:with-param name="replace" select="'µ'" />
1207 <xsl:with-param name="with" select="'$\mu$'" />
1208 <xsl:with-param name="disable-output-escaping" select="no" />
1209 </xsl:call-template>
1210 </xsl:variable>
1211 <xsl:variable name="subst10">
1212 <xsl:call-template name="str:subst">
1213 <xsl:with-param name="text" select="$subst9" />
1214 <xsl:with-param name="replace" select="'®'" />
1215 <xsl:with-param name="with" select="'\texorpdfstring{\textregistered}{}'" />
1216 <xsl:with-param name="disable-output-escaping" select="no" />
1217 </xsl:call-template>
1218 </xsl:variable>
1219 <xsl:variable name="quote">"</xsl:variable>
1220 <!-- preparation for pretty quotes: replace all double quotes _outside_ screen
1221 sections with "\QUOTE{}" strings, which the makefile will then replace
1222 with pretty quotes by invoking sed a few times. Unfortunately there are
1223 no regular expressions in XSLT so there's no other way. -->
1224 <xsl:variable name="subst11">
1225 <xsl:choose>
1226 <xsl:when test="(name(..)='screen') or (name(../..)='screen')
1227 or (name(..)='programlisting') or (name(../..)='programlisting')
1228 or (name(..)='literal') or (name(../..)='literal')
1229 ">
1230 <xsl:value-of select="$subst10" />
1231 </xsl:when>
1232 <xsl:otherwise>
1233 <xsl:call-template name="str:subst">
1234 <xsl:with-param name="text" select="$subst10" />
1235 <xsl:with-param name="replace" select="$quote" />
1236 <xsl:with-param name="with" select="'\QUOTE{}'" />
1237 <xsl:with-param name="disable-output-escaping" select="no" />
1238 </xsl:call-template>
1239 </xsl:otherwise>
1240 </xsl:choose>
1241 </xsl:variable>
1242 <xsl:variable name="subst12">
1243 <xsl:call-template name="str:subst">
1244 <xsl:with-param name="text" select="$subst11" />
1245 <xsl:with-param name="replace" select="'~'" />
1246 <xsl:with-param name="with" select="'\textasciitilde{}'" />
1247 <xsl:with-param name="disable-output-escaping" select="no" />
1248 </xsl:call-template>
1249 </xsl:variable>
1250 <xsl:variable name="subst13">
1251 <xsl:call-template name="str:subst">
1252 <xsl:with-param name="text" select="$subst12" />
1253 <xsl:with-param name="replace" select="'&amp;'" />
1254 <xsl:with-param name="with" select="'\&amp;'" />
1255 <xsl:with-param name="disable-output-escaping" select="no" />
1256 </xsl:call-template>
1257 </xsl:variable>
1258 <xsl:variable name="subst14">
1259 <xsl:call-template name="str:subst">
1260 <xsl:with-param name="text" select="$subst13" />
1261 <xsl:with-param name="replace" select="'→'" />
1262 <xsl:with-param name="with" select="'\ensuremath{\rightarrow}'" />
1263 <xsl:with-param name="disable-output-escaping" select="no" />
1264 </xsl:call-template>
1265 </xsl:variable>
1266 <xsl:variable name="subst15">
1267 <xsl:call-template name="str:subst">
1268 <xsl:with-param name="text" select="$subst14" />
1269 <xsl:with-param name="replace" select="'←'" />
1270 <xsl:with-param name="with" select="'\ensuremath{\leftarrow}'" />
1271 <xsl:with-param name="disable-output-escaping" select="no" />
1272 </xsl:call-template>
1273 </xsl:variable>
1274 <xsl:variable name="subst16">
1275 <xsl:call-template name="str:subst">
1276 <xsl:with-param name="text" select="$subst15" />
1277 <xsl:with-param name="replace" select="'↔'" />
1278 <xsl:with-param name="with" select="'\ensuremath{\leftrightarrow}'" />
1279 <xsl:with-param name="disable-output-escaping" select="no" />
1280 </xsl:call-template>
1281 </xsl:variable>
1282 <xsl:value-of select="$subst16" />
1283 </xsl:otherwise>
1284 </xsl:choose>
1285 </xsl:template>
1286
1287 <!--
1288 xsltprocNewlineOutputHack - emits a single new line.
1289
1290 Hack Alert! This template helps xsltproc split up the output text elements
1291 and avoid reallocating them into the MB range. Calls to this
1292 template is made occationally while generating larger output
1293 file. It's not necessary for small stuff like header.
1294
1295 The trick we're playing on xsltproc has to do with CDATA
1296 and/or the escape setting of the xsl:text element. It forces
1297 xsltproc to allocate a new output element, thus preventing
1298 things from growing out of proportions and slowing us down.
1299
1300 This was successfully employed to reduce a 18+ seconds run to
1301 around one second (possibly less due to kmk overhead).
1302 -->
1303 <xsl:template name="xsltprocNewlineOutputHack">
1304 <xsl:text disable-output-escaping="yes"><![CDATA[
1305]]></xsl:text>
1306 </xsl:template>
1307
1308</xsl:stylesheet>
1309
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use