aboutsummaryrefslogtreecommitdiffstats
path: root/stylesheets/lfs-pdf.xsl
blob: 568f7f2293c06d398dbd2fd2147cfd32f3ffa7a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                xmlns="http://www.w3.org/1999/xhtml"
                version="1.0">

  <!-- We use FO and FOP as the processor -->
  <xsl:import href="http://docbook.sourceforge.net/release/xsl/1.65.1/fo/docbook.xsl"/>
  <xsl:param name="fop.extensions" select="1"/>
  <xsl:param name="draft.mode" select="'no'"/>
  <!-- Probably want to make the paper size configurable -->
  <xsl:param name="paper.type" select="'A4'"/>

  <!-- Include our customised templates -->
  <xsl:include href="pdf/lfs-index.xsl"/>

  <!-- Font size -->
  <xsl:param name="body.font.master">8</xsl:param>
  <xsl:param name="body.font.size">10pt</xsl:param>

  <!-- Margins -->
  <xsl:param name="page.margin.inner">1in</xsl:param>
  <xsl:param name="page.margin.outer">0.5in</xsl:param>
  <xsl:param name="title.margin.left">-1pc</xsl:param>

  <!-- TOC stuff -->
  <xsl:param name="generate.toc">
    book      toc
    part      nop
  </xsl:param>
  <xsl:param name="toc.section.depth">1</xsl:param>
  <xsl:param name="generate.section.toc.level" select="-1"></xsl:param>
  <xsl:param name="toc.indent.width" select="18"></xsl:param>

  <!-- Force section1's onto a new page -->
  <xsl:attribute-set name="section.level1.properties">
    <xsl:attribute name="break-after">page</xsl:attribute>
  </xsl:attribute-set>

  <!-- Columns in appendix -->
  <xsl:param name="column.count.back" select="2"/>

  <!-- Don't hyphenate -->
  <xsl:param name="hyphenate">false</xsl:param>
  <xsl:param name="alignment">left</xsl:param>

  <!-- Page number in Xref-->
  <xsl:param name="insert.xref.page.number">yes</xsl:param>
  <xsl:template match="xref" name="xref">
    <xsl:variable name="targets" select="key('id',@linkend)"/>
    <xsl:variable name="target" select="$targets[1]"/>
    <xsl:variable name="refelem" select="local-name($target)"/>
    <xsl:call-template name="check.id.unique">
      <xsl:with-param name="linkend" select="@linkend"/>
    </xsl:call-template>
    <xsl:choose>
      <xsl:when test="$refelem=''">
        <xsl:message>
          <xsl:text>XRef to nonexistent id: </xsl:text>
          <xsl:value-of select="@linkend"/>
        </xsl:message>
        <xsl:text>???</xsl:text>
      </xsl:when>
      <xsl:when test="@endterm">
        <fo:basic-link internal-destination="{@linkend}"
                       xsl:use-attribute-sets="xref.properties">
          <xsl:variable name="etargets" select="key('id',@endterm)"/>
          <xsl:variable name="etarget" select="$etargets[1]"/>
          <xsl:choose>
            <xsl:when test="count($etarget) = 0">
              <xsl:message>
                <xsl:value-of select="count($etargets)"/>
                <xsl:text>Endterm points to nonexistent ID: </xsl:text>
                <xsl:value-of select="@endterm"/>
              </xsl:message>
              <xsl:text>???</xsl:text>
            </xsl:when>
            <xsl:otherwise>
              <xsl:apply-templates select="$etarget" mode="endterm"/>
            </xsl:otherwise>
          </xsl:choose>
        </fo:basic-link>
      </xsl:when>
      <xsl:when test="$target/@xreflabel">
        <fo:basic-link internal-destination="{@linkend}"
                       xsl:use-attribute-sets="xref.properties">
          <xsl:call-template name="xref.xreflabel">
            <xsl:with-param name="target" select="$target"/>
          </xsl:call-template>
        </fo:basic-link>
      </xsl:when>
      <xsl:otherwise>
        <fo:basic-link internal-destination="{@linkend}"
                       xsl:use-attribute-sets="xref.properties">
          <xsl:apply-templates select="$target" mode="xref-to">
            <xsl:with-param name="referrer" select="."/>
            <xsl:with-param name="xrefstyle">
              <xsl:choose>
                <xsl:when test="@role and not(@xrefstyle) and $use.role.as.xrefstyle != 0">
                  <xsl:value-of select="@role"/>
                </xsl:when>
                <xsl:otherwise>
                  <xsl:value-of select="@xrefstyle"/>
                </xsl:otherwise>
              </xsl:choose>
            </xsl:with-param>
          </xsl:apply-templates>
        </fo:basic-link>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="not(starts-with(normalize-space(@xrefstyle), 'select:') != ''
                  and (contains(@xrefstyle, 'page')
                   or contains(@xrefstyle, 'Page')))
                  and ( $insert.xref.page.number = 'yes'
                   or $insert.xref.page.number = '1')
                   or local-name($target) = 'para'">
      <fo:basic-link internal-destination="{@linkend}"
                     xsl:use-attribute-sets="xref.properties">
      	<xsl:text>, p. </xsl:text>
        <xsl:apply-templates select="$target" mode="page.citation">
          <xsl:with-param name="id" select="@linkend"/>
        </xsl:apply-templates>
      </fo:basic-link>
    </xsl:if>
  </xsl:template>

  <!-- Prevent duplicate e-mails in the Acknowledgments pages-->
  <xsl:param name="ulink.show" select="0"/>

</xsl:stylesheet>