xref: /aosp_15_r20/external/bzip2/bz-fo.xsl (revision 0ac9a9daea5cce2e775d5da949508593e2ee9206)
1*0ac9a9daSXin Li<?xml version="1.0" encoding="UTF-8"?> <!-- -*- sgml -*- -->
2*0ac9a9daSXin Li<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3*0ac9a9daSXin Li     xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
4*0ac9a9daSXin Li
5*0ac9a9daSXin Li<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl"/>
6*0ac9a9daSXin Li<xsl:import href="bz-common.xsl"/>
7*0ac9a9daSXin Li
8*0ac9a9daSXin Li<!-- set indent = yes while debugging, then change to NO -->
9*0ac9a9daSXin Li<xsl:output method="xml" indent="yes"/>
10*0ac9a9daSXin Li
11*0ac9a9daSXin Li<!-- ensure only passivetex extensions are on -->
12*0ac9a9daSXin Li<xsl:param name="stylesheet.result.type" select="'fo'"/>
13*0ac9a9daSXin Li<!-- fo extensions: PDF bookmarks and index terms -->
14*0ac9a9daSXin Li<xsl:param name="use.extensions" select="'1'"/>
15*0ac9a9daSXin Li<xsl:param name="xep.extensions" select="0"/>
16*0ac9a9daSXin Li<xsl:param name="fop.extensions" select="0"/>
17*0ac9a9daSXin Li<xsl:param name="saxon.extensions" select="0"/>
18*0ac9a9daSXin Li<xsl:param name="passivetex.extensions" select="1"/>
19*0ac9a9daSXin Li<xsl:param name="tablecolumns.extension" select="'1'"/>
20*0ac9a9daSXin Li
21*0ac9a9daSXin Li<!-- ensure we are using single sided -->
22*0ac9a9daSXin Li<xsl:param name="double.sided" select="'0'"/>
23*0ac9a9daSXin Li
24*0ac9a9daSXin Li<!-- insert cross references to page numbers -->
25*0ac9a9daSXin Li<xsl:param name="insert.xref.page.number" select="1"/>
26*0ac9a9daSXin Li
27*0ac9a9daSXin Li<!-- <?custom-pagebreak?> inserts a page break at this point -->
28*0ac9a9daSXin Li<xsl:template match="processing-instruction('custom-pagebreak')">
29*0ac9a9daSXin Li  <fo:block break-before='page'/>
30*0ac9a9daSXin Li</xsl:template>
31*0ac9a9daSXin Li
32*0ac9a9daSXin Li<!-- show links in color -->
33*0ac9a9daSXin Li<xsl:attribute-set name="xref.properties">
34*0ac9a9daSXin Li  <xsl:attribute name="color">blue</xsl:attribute>
35*0ac9a9daSXin Li</xsl:attribute-set>
36*0ac9a9daSXin Li
37*0ac9a9daSXin Li<!-- make pre listings indented a bit + a bg colour -->
38*0ac9a9daSXin Li<xsl:template match="programlisting | screen">
39*0ac9a9daSXin Li  <fo:block start-indent="0.25in" wrap-option="no-wrap"
40*0ac9a9daSXin Li            white-space-collapse="false" text-align="start"
41*0ac9a9daSXin Li            font-family="monospace" background-color="#f2f2f9"
42*0ac9a9daSXin Li            linefeed-treatment="preserve"
43*0ac9a9daSXin Li            xsl:use-attribute-sets="normal.para.spacing">
44*0ac9a9daSXin Li    <xsl:apply-templates/>
45*0ac9a9daSXin Li  </fo:block>
46*0ac9a9daSXin Li</xsl:template>
47*0ac9a9daSXin Li<!-- make verbatim output prettier -->
48*0ac9a9daSXin Li<xsl:template match="literallayout">
49*0ac9a9daSXin Li  <fo:block start-indent="0.25in" wrap-option="no-wrap"
50*0ac9a9daSXin Li            white-space-collapse="false" text-align="start"
51*0ac9a9daSXin Li            font-family="monospace" background-color="#edf7f4"
52*0ac9a9daSXin Li            linefeed-treatment="preserve"
53*0ac9a9daSXin Li            space-before="0em" space-after="0em">
54*0ac9a9daSXin Li    <xsl:apply-templates/>
55*0ac9a9daSXin Li  </fo:block>
56*0ac9a9daSXin Li</xsl:template>
57*0ac9a9daSXin Li
58*0ac9a9daSXin Li<!-- workaround bug in passivetex fo output for itemizedlist -->
59*0ac9a9daSXin Li<xsl:template match="itemizedlist/listitem">
60*0ac9a9daSXin Li  <xsl:variable name="id">
61*0ac9a9daSXin Li  <xsl:call-template name="object.id"/></xsl:variable>
62*0ac9a9daSXin Li  <xsl:variable name="itemsymbol">
63*0ac9a9daSXin Li    <xsl:call-template name="list.itemsymbol">
64*0ac9a9daSXin Li      <xsl:with-param name="node" select="parent::itemizedlist"/>
65*0ac9a9daSXin Li    </xsl:call-template>
66*0ac9a9daSXin Li  </xsl:variable>
67*0ac9a9daSXin Li  <xsl:variable name="item.contents">
68*0ac9a9daSXin Li    <fo:list-item-label end-indent="label-end()">
69*0ac9a9daSXin Li      <fo:block>
70*0ac9a9daSXin Li        <xsl:choose>
71*0ac9a9daSXin Li          <xsl:when test="$itemsymbol='disc'">&#x2022;</xsl:when>
72*0ac9a9daSXin Li          <xsl:when test="$itemsymbol='bullet'">&#x2022;</xsl:when>
73*0ac9a9daSXin Li          <xsl:otherwise>&#x2022;</xsl:otherwise>
74*0ac9a9daSXin Li        </xsl:choose>
75*0ac9a9daSXin Li      </fo:block>
76*0ac9a9daSXin Li    </fo:list-item-label>
77*0ac9a9daSXin Li    <fo:list-item-body start-indent="body-start()">
78*0ac9a9daSXin Li      <xsl:apply-templates/>    <!-- removed extra block wrapper -->
79*0ac9a9daSXin Li    </fo:list-item-body>
80*0ac9a9daSXin Li  </xsl:variable>
81*0ac9a9daSXin Li  <xsl:choose>
82*0ac9a9daSXin Li    <xsl:when test="parent::*/@spacing = 'compact'">
83*0ac9a9daSXin Li      <fo:list-item id="{$id}"
84*0ac9a9daSXin Li          xsl:use-attribute-sets="compact.list.item.spacing">
85*0ac9a9daSXin Li        <xsl:copy-of select="$item.contents"/>
86*0ac9a9daSXin Li      </fo:list-item>
87*0ac9a9daSXin Li    </xsl:when>
88*0ac9a9daSXin Li    <xsl:otherwise>
89*0ac9a9daSXin Li      <fo:list-item id="{$id}" xsl:use-attribute-sets="list.item.spacing">
90*0ac9a9daSXin Li        <xsl:copy-of select="$item.contents"/>
91*0ac9a9daSXin Li      </fo:list-item>
92*0ac9a9daSXin Li    </xsl:otherwise>
93*0ac9a9daSXin Li  </xsl:choose>
94*0ac9a9daSXin Li</xsl:template>
95*0ac9a9daSXin Li
96*0ac9a9daSXin Li<!-- workaround bug in passivetex fo output for orderedlist -->
97*0ac9a9daSXin Li<xsl:template match="orderedlist/listitem">
98*0ac9a9daSXin Li  <xsl:variable name="id">
99*0ac9a9daSXin Li  <xsl:call-template name="object.id"/></xsl:variable>
100*0ac9a9daSXin Li  <xsl:variable name="item.contents">
101*0ac9a9daSXin Li    <fo:list-item-label end-indent="label-end()">
102*0ac9a9daSXin Li      <fo:block>
103*0ac9a9daSXin Li        <xsl:apply-templates select="." mode="item-number"/>
104*0ac9a9daSXin Li      </fo:block>
105*0ac9a9daSXin Li    </fo:list-item-label>
106*0ac9a9daSXin Li    <fo:list-item-body start-indent="body-start()">
107*0ac9a9daSXin Li      <xsl:apply-templates/>    <!-- removed extra block wrapper -->
108*0ac9a9daSXin Li    </fo:list-item-body>
109*0ac9a9daSXin Li  </xsl:variable>
110*0ac9a9daSXin Li  <xsl:choose>
111*0ac9a9daSXin Li    <xsl:when test="parent::*/@spacing = 'compact'">
112*0ac9a9daSXin Li      <fo:list-item id="{$id}"
113*0ac9a9daSXin Li          xsl:use-attribute-sets="compact.list.item.spacing">
114*0ac9a9daSXin Li        <xsl:copy-of select="$item.contents"/>
115*0ac9a9daSXin Li      </fo:list-item>
116*0ac9a9daSXin Li    </xsl:when>
117*0ac9a9daSXin Li    <xsl:otherwise>
118*0ac9a9daSXin Li      <fo:list-item id="{$id}" xsl:use-attribute-sets="list.item.spacing">
119*0ac9a9daSXin Li        <xsl:copy-of select="$item.contents"/>
120*0ac9a9daSXin Li      </fo:list-item>
121*0ac9a9daSXin Li    </xsl:otherwise>
122*0ac9a9daSXin Li  </xsl:choose>
123*0ac9a9daSXin Li</xsl:template>
124*0ac9a9daSXin Li
125*0ac9a9daSXin Li<!-- workaround bug in passivetex fo output for variablelist -->
126*0ac9a9daSXin Li<xsl:param name="variablelist.as.blocks" select="1"/>
127*0ac9a9daSXin Li<xsl:template match="varlistentry" mode="vl.as.blocks">
128*0ac9a9daSXin Li  <xsl:variable name="id">
129*0ac9a9daSXin Li    <xsl:call-template name="object.id"/></xsl:variable>
130*0ac9a9daSXin Li  <fo:block id="{$id}" xsl:use-attribute-sets="list.item.spacing"
131*0ac9a9daSXin Li      keep-together.within-column="always"
132*0ac9a9daSXin Li      keep-with-next.within-column="always">
133*0ac9a9daSXin Li    <xsl:apply-templates select="term"/>
134*0ac9a9daSXin Li  </fo:block>
135*0ac9a9daSXin Li  <fo:block start-indent="0.5in" end-indent="0in"
136*0ac9a9daSXin Li            space-after.minimum="0.2em"
137*0ac9a9daSXin Li            space-after.optimum="0.4em"
138*0ac9a9daSXin Li            space-after.maximum="0.6em">
139*0ac9a9daSXin Li    <fo:block>
140*0ac9a9daSXin Li      <xsl:apply-templates select="listitem"/>
141*0ac9a9daSXin Li    </fo:block>
142*0ac9a9daSXin Li  </fo:block>
143*0ac9a9daSXin Li</xsl:template>
144*0ac9a9daSXin Li
145*0ac9a9daSXin Li
146*0ac9a9daSXin Li<!-- workaround bug in footers: force right-align w/two 80|30 cols -->
147*0ac9a9daSXin Li<xsl:template name="footer.table">
148*0ac9a9daSXin Li  <xsl:param name="pageclass" select="''"/>
149*0ac9a9daSXin Li  <xsl:param name="sequence" select="''"/>
150*0ac9a9daSXin Li  <xsl:param name="gentext-key" select="''"/>
151*0ac9a9daSXin Li  <xsl:choose>
152*0ac9a9daSXin Li    <xsl:when test="$pageclass = 'index'">
153*0ac9a9daSXin Li      <xsl:attribute name="margin-left">0pt</xsl:attribute>
154*0ac9a9daSXin Li    </xsl:when>
155*0ac9a9daSXin Li  </xsl:choose>
156*0ac9a9daSXin Li  <xsl:variable name="candidate">
157*0ac9a9daSXin Li    <fo:table table-layout="fixed" width="100%">
158*0ac9a9daSXin Li      <fo:table-column column-number="1" column-width="80%"/>
159*0ac9a9daSXin Li      <fo:table-column column-number="2" column-width="20%"/>
160*0ac9a9daSXin Li      <fo:table-body>
161*0ac9a9daSXin Li        <fo:table-row height="14pt">
162*0ac9a9daSXin Li          <fo:table-cell text-align="left" display-align="after">
163*0ac9a9daSXin Li            <xsl:attribute name="relative-align">baseline</xsl:attribute>
164*0ac9a9daSXin Li            <fo:block>
165*0ac9a9daSXin Li              <fo:block> </fo:block><!-- empty cell -->
166*0ac9a9daSXin Li            </fo:block>
167*0ac9a9daSXin Li          </fo:table-cell>
168*0ac9a9daSXin Li          <fo:table-cell text-align="center" display-align="after">
169*0ac9a9daSXin Li            <xsl:attribute name="relative-align">baseline</xsl:attribute>
170*0ac9a9daSXin Li            <fo:block>
171*0ac9a9daSXin Li              <xsl:call-template name="footer.content">
172*0ac9a9daSXin Li                <xsl:with-param name="pageclass" select="$pageclass"/>
173*0ac9a9daSXin Li                <xsl:with-param name="sequence" select="$sequence"/>
174*0ac9a9daSXin Li                <xsl:with-param name="position" select="'center'"/>
175*0ac9a9daSXin Li                <xsl:with-param name="gentext-key" select="$gentext-key"/>
176*0ac9a9daSXin Li              </xsl:call-template>
177*0ac9a9daSXin Li            </fo:block>
178*0ac9a9daSXin Li          </fo:table-cell>
179*0ac9a9daSXin Li        </fo:table-row>
180*0ac9a9daSXin Li      </fo:table-body>
181*0ac9a9daSXin Li    </fo:table>
182*0ac9a9daSXin Li  </xsl:variable>
183*0ac9a9daSXin Li  <!-- Really output a footer? -->
184*0ac9a9daSXin Li  <xsl:choose>
185*0ac9a9daSXin Li    <xsl:when test="$pageclass='titlepage' and $gentext-key='book'
186*0ac9a9daSXin Li                    and $sequence='first'">
187*0ac9a9daSXin Li      <!-- no, book titlepages have no footers at all -->
188*0ac9a9daSXin Li    </xsl:when>
189*0ac9a9daSXin Li    <xsl:when test="$sequence = 'blank' and $footers.on.blank.pages = 0">
190*0ac9a9daSXin Li      <!-- no output -->
191*0ac9a9daSXin Li    </xsl:when>
192*0ac9a9daSXin Li    <xsl:otherwise>
193*0ac9a9daSXin Li      <xsl:copy-of select="$candidate"/>
194*0ac9a9daSXin Li    </xsl:otherwise>
195*0ac9a9daSXin Li  </xsl:choose>
196*0ac9a9daSXin Li</xsl:template>
197*0ac9a9daSXin Li
198*0ac9a9daSXin Li
199*0ac9a9daSXin Li<!-- fix bug in headers: force right-align w/two 40|60 cols -->
200*0ac9a9daSXin Li<xsl:template name="header.table">
201*0ac9a9daSXin Li  <xsl:param name="pageclass" select="''"/>
202*0ac9a9daSXin Li  <xsl:param name="sequence" select="''"/>
203*0ac9a9daSXin Li  <xsl:param name="gentext-key" select="''"/>
204*0ac9a9daSXin Li  <xsl:choose>
205*0ac9a9daSXin Li    <xsl:when test="$pageclass = 'index'">
206*0ac9a9daSXin Li      <xsl:attribute name="margin-left">0pt</xsl:attribute>
207*0ac9a9daSXin Li    </xsl:when>
208*0ac9a9daSXin Li  </xsl:choose>
209*0ac9a9daSXin Li  <xsl:variable name="candidate">
210*0ac9a9daSXin Li    <fo:table table-layout="fixed" width="100%">
211*0ac9a9daSXin Li      <xsl:call-template name="head.sep.rule">
212*0ac9a9daSXin Li        <xsl:with-param name="pageclass" select="$pageclass"/>
213*0ac9a9daSXin Li        <xsl:with-param name="sequence" select="$sequence"/>
214*0ac9a9daSXin Li        <xsl:with-param name="gentext-key" select="$gentext-key"/>
215*0ac9a9daSXin Li      </xsl:call-template>
216*0ac9a9daSXin Li      <fo:table-column column-number="1" column-width="40%"/>
217*0ac9a9daSXin Li      <fo:table-column column-number="2" column-width="60%"/>
218*0ac9a9daSXin Li      <fo:table-body>
219*0ac9a9daSXin Li        <fo:table-row height="14pt">
220*0ac9a9daSXin Li          <fo:table-cell text-align="left" display-align="before">
221*0ac9a9daSXin Li            <xsl:attribute name="relative-align">baseline</xsl:attribute>
222*0ac9a9daSXin Li            <fo:block>
223*0ac9a9daSXin Li              <fo:block> </fo:block><!-- empty cell -->
224*0ac9a9daSXin Li            </fo:block>
225*0ac9a9daSXin Li          </fo:table-cell>
226*0ac9a9daSXin Li          <fo:table-cell text-align="center" display-align="before">
227*0ac9a9daSXin Li            <xsl:attribute name="relative-align">baseline</xsl:attribute>
228*0ac9a9daSXin Li            <fo:block>
229*0ac9a9daSXin Li              <xsl:call-template name="header.content">
230*0ac9a9daSXin Li                <xsl:with-param name="pageclass" select="$pageclass"/>
231*0ac9a9daSXin Li                <xsl:with-param name="sequence" select="$sequence"/>
232*0ac9a9daSXin Li                <xsl:with-param name="position" select="'center'"/>
233*0ac9a9daSXin Li                <xsl:with-param name="gentext-key" select="$gentext-key"/>
234*0ac9a9daSXin Li              </xsl:call-template>
235*0ac9a9daSXin Li            </fo:block>
236*0ac9a9daSXin Li          </fo:table-cell>
237*0ac9a9daSXin Li        </fo:table-row>
238*0ac9a9daSXin Li      </fo:table-body>
239*0ac9a9daSXin Li    </fo:table>
240*0ac9a9daSXin Li  </xsl:variable>
241*0ac9a9daSXin Li  <!-- Really output a header? -->
242*0ac9a9daSXin Li  <xsl:choose>
243*0ac9a9daSXin Li    <xsl:when test="$pageclass = 'titlepage' and $gentext-key = 'book'
244*0ac9a9daSXin Li                    and $sequence='first'">
245*0ac9a9daSXin Li      <!-- no, book titlepages have no headers at all -->
246*0ac9a9daSXin Li    </xsl:when>
247*0ac9a9daSXin Li    <xsl:when test="$sequence = 'blank' and $headers.on.blank.pages = 0">
248*0ac9a9daSXin Li      <!-- no output -->
249*0ac9a9daSXin Li    </xsl:when>
250*0ac9a9daSXin Li    <xsl:otherwise>
251*0ac9a9daSXin Li      <xsl:copy-of select="$candidate"/>
252*0ac9a9daSXin Li    </xsl:otherwise>
253*0ac9a9daSXin Li  </xsl:choose>
254*0ac9a9daSXin Li</xsl:template>
255*0ac9a9daSXin Li
256*0ac9a9daSXin Li
257*0ac9a9daSXin Li<!-- Bug-fix for Suse 10 PassiveTex version -->
258*0ac9a9daSXin Li<!-- Precompute attribute values 'cos PassiveTex is too stupid: -->
259*0ac9a9daSXin Li<xsl:attribute-set name="component.title.properties">
260*0ac9a9daSXin Li  <xsl:attribute name="keep-with-next.within-column">always</xsl:attribute>
261*0ac9a9daSXin Li  <xsl:attribute name="space-before.optimum">
262*0ac9a9daSXin Li    <xsl:value-of select="concat($body.font.master, 'pt')"/>
263*0ac9a9daSXin Li  </xsl:attribute>
264*0ac9a9daSXin Li  <xsl:attribute name="space-before.minimum">
265*0ac9a9daSXin Li    <xsl:value-of select="$body.font.master * 0.8"/>
266*0ac9a9daSXin Li    <xsl:text>pt</xsl:text>
267*0ac9a9daSXin Li  </xsl:attribute>
268*0ac9a9daSXin Li  <xsl:attribute name="space-before.maximum">
269*0ac9a9daSXin Li    <xsl:value-of select="$body.font.master * 1.2"/>
270*0ac9a9daSXin Li    <xsl:text>pt</xsl:text>
271*0ac9a9daSXin Li  </xsl:attribute>
272*0ac9a9daSXin Li  <xsl:attribute name="hyphenate">false</xsl:attribute>
273*0ac9a9daSXin Li</xsl:attribute-set>
274*0ac9a9daSXin Li
275*0ac9a9daSXin Li
276*0ac9a9daSXin Li</xsl:stylesheet>
277