1<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
2                xmlns:saxon="http://icl.com/saxon"
3                xmlns:lxslt="http://xml.apache.org/xslt"
4                xmlns:xalanredirect="org.apache.xalan.xslt.extensions.Redirect"
5                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
6		version="1.1"
7                exclude-result-prefixes="doc"
8                extension-element-prefixes="saxon xalanredirect lxslt">
9
10<!-- This stylesheet works with Saxon and Xalan; for XT use xtchunker.xsl -->
11
12<!-- ==================================================================== -->
13
14<xsl:template name="make-relative-filename">
15  <xsl:param name="base.dir" select="'./'"/>
16  <xsl:param name="base.name" select="''"/>
17
18  <xsl:variable name="vendor" select="system-property('xsl:vendor')"/>
19
20  <xsl:choose>
21    <xsl:when test="contains($vendor, 'SAXON')">
22      <!-- Saxon doesn't make the chunks relative -->
23      <xsl:value-of select="concat($base.dir,$base.name)"/>
24    </xsl:when>
25    <xsl:when test="contains($vendor, 'Apache')">
26      <!-- Xalan doesn't make the chunks relative -->
27      <xsl:value-of select="concat($base.dir,$base.name)"/>
28    </xsl:when>
29    <xsl:otherwise>
30      <xsl:message terminate="yes">
31        <xsl:text>Chunking isn't supported with </xsl:text>
32        <xsl:value-of select="$vendor"/>
33      </xsl:message>
34    </xsl:otherwise>
35  </xsl:choose>
36</xsl:template>
37
38<xsl:template name="write.chunk">
39  <xsl:param name="filename" select="''"/>
40  <xsl:param name="method" select="'html'"/>
41  <xsl:param name="encoding" select="$default.encoding"/>
42  <xsl:param name="indent" select="'no'"/>
43  <xsl:param name="content" select="''"/>
44
45  <xsl:message>
46    <xsl:text>Writing </xsl:text>
47    <xsl:value-of select="$filename"/>
48    <xsl:if test="name(.) != ''">
49      <xsl:text> for </xsl:text>
50      <xsl:value-of select="name(.)"/>
51      <xsl:if test="@id">
52        <xsl:text>(</xsl:text>
53        <xsl:value-of select="@id"/>
54        <xsl:text>)</xsl:text>
55      </xsl:if>
56    </xsl:if>
57  </xsl:message>
58
59  <xsl:variable name="vendor" select="system-property('xsl:vendor')"/>
60
61  <xsl:choose>
62    <xsl:when test="contains($vendor, 'SAXON 6.2')">
63      <!-- Saxon 6.2.x uses xsl:document -->
64      <xsl:document href="{$filename}"
65                    method="{$method}"
66                    encoding="{$encoding}"
67                    indent="{$indent}"
68                    saxon:character-representation="{$saxon.character.representation}">
69        <xsl:copy-of select="$content"/>
70      </xsl:document>
71    </xsl:when>
72    <xsl:when test="contains($vendor, 'SAXON')">
73      <!-- Saxon uses saxon:output -->
74      <saxon:output file="{$filename}"
75                    href="{$filename}"
76                    method="{$method}"
77                    encoding="{$encoding}"
78                    indent="{$indent}"
79                    saxon:character-representation="{$saxon.character.representation}">
80        <xsl:copy-of select="$content"/>
81      </saxon:output>
82    </xsl:when>
83    <xsl:when test="contains($vendor, 'Apache')">
84      <!-- Xalan uses xalanredirect -->
85      <xalanredirect:write file="{$filename}">
86        <xsl:copy-of select="$content"/>
87      </xalanredirect:write>
88    </xsl:when>
89    <xsl:otherwise>
90      <!-- it doesn't matter since we won't be making chunks... -->
91      <xsl:message terminate="yes">
92        <xsl:text>Can't make chunks with </xsl:text>
93        <xsl:value-of select="$vendor"/>
94        <xsl:text>'s processor.</xsl:text>
95      </xsl:message>
96    </xsl:otherwise>
97  </xsl:choose>
98</xsl:template>
99
100<xsl:template name="write.chunk.with.doctype">
101  <xsl:param name="filename" select="''"/>
102  <xsl:param name="method" select="'html'"/>
103  <xsl:param name="encoding" select="$default.encoding"/>
104  <xsl:param name="indent" select="'no'"/>
105  <xsl:param name="doctype-public" select="''"/>
106  <xsl:param name="doctype-system" select="''"/>
107  <xsl:param name="content" select="''"/>
108
109  <xsl:message>
110    <xsl:text>Writing </xsl:text>
111    <xsl:value-of select="$filename"/>
112    <xsl:if test="name(.) != ''">
113      <xsl:text> for </xsl:text>
114      <xsl:value-of select="name(.)"/>
115    </xsl:if>
116  </xsl:message>
117
118  <xsl:variable name="vendor" select="system-property('xsl:vendor')"/>
119
120  <xsl:choose>
121    <xsl:when test="contains($vendor, 'SAXON 6.2')">
122      <!-- Saxon 6.2.x uses xsl:document -->
123      <xsl:document href="{$filename}"
124                    method="{$method}"
125                    encoding="{$encoding}"
126                    indent="{$indent}"
127                    doctype-public="{$doctype-public}"
128                    doctype-system="{$doctype-system}"
129                    saxon:character-representation="{$saxon.character.representation}">
130        <xsl:copy-of select="$content"/>
131      </xsl:document>
132    </xsl:when>
133    <xsl:when test="contains($vendor, 'SAXON')">
134      <!-- Saxon uses saxon:output -->
135      <saxon:output file="{$filename}"
136                    href="{$filename}"
137                    method="{$method}"
138                    encoding="{$encoding}"
139                    indent="{$indent}"
140                    doctype-public="{$doctype-public}"
141                    doctype-system="{$doctype-system}"
142                    saxon:character-representation="{$saxon.character.representation}">
143        <xsl:copy-of select="$content"/>
144      </saxon:output>
145    </xsl:when>
146    <xsl:when test="contains($vendor, 'Apache')">
147      <!-- Xalan uses xalanredirect -->
148      <xalanredirect:write file="{$filename}">
149        <xsl:copy-of select="$content"/>
150      </xalanredirect:write>
151    </xsl:when>
152    <xsl:otherwise>
153      <!-- it doesn't matter since we won't be making chunks... -->
154      <xsl:message terminate="yes">
155        <xsl:text>Can't make chunks with </xsl:text>
156        <xsl:value-of select="$vendor"/>
157        <xsl:text>'s processor.</xsl:text>
158      </xsl:message>
159    </xsl:otherwise>
160  </xsl:choose>
161</xsl:template>
162
163</xsl:stylesheet>
164