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