]> granicus.if.org Git - docbook-dsssl/commitdiff
Use element-available function not vendor to find chunking elements
authorNorman Walsh <ndw@nwalsh.com>
Sun, 8 Jul 2001 17:52:10 +0000 (17:52 +0000)
committerNorman Walsh <ndw@nwalsh.com>
Sun, 8 Jul 2001 17:52:10 +0000 (17:52 +0000)
xsl/html/chunker.xsl

index 02577cf1f851030ea35b543cb54eea28fe8be03f..9a55f1d60c3f87a49f51e63ad3e03baef420680f 100644 (file)
@@ -2,12 +2,16 @@
                 xmlns:saxon="http://icl.com/saxon"
                 xmlns:lxslt="http://xml.apache.org/xslt"
                 xmlns:xalanredirect="org.apache.xalan.xslt.extensions.Redirect"
+                xmlns:exsl="http://exslt.org/elements/document"
                 xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
                version="1.1"
                 exclude-result-prefixes="doc"
-                extension-element-prefixes="saxon xalanredirect lxslt">
+                extension-element-prefixes="saxon xalanredirect lxslt exsl">
 
 <!-- This stylesheet works with Saxon and Xalan; for XT use xtchunker.xsl -->
+<!-- Note: Only Saxon 6.4.2 or later is supported. -->
+
+<!-- Note: I don't think the exsl namespace name is right! -->
 
 <!-- ==================================================================== -->
 
   <xsl:param name="base.dir" select="'./'"/>
   <xsl:param name="base.name" select="''"/>
 
-  <xsl:variable name="vendor" select="system-property('xsl:vendor')"/>
-
   <xsl:choose>
-    <xsl:when test="contains($vendor, 'SAXON')">
+    <xsl:when test="element-available('saxon:output')">
       <!-- Saxon doesn't make the chunks relative -->
       <xsl:value-of select="concat($base.dir,$base.name)"/>
     </xsl:when>
-    <xsl:when test="contains($vendor, 'Apache')">
+    <xsl:when test="element-available('xalanredirect:write')">
       <!-- Xalan doesn't make the chunks relative -->
       <xsl:value-of select="concat($base.dir,$base.name)"/>
     </xsl:when>
+    <xsl:when test="element-available('exsl:document')">
+      <!-- EXSL document does make the chunks relative, I think -->
+      <xsl:choose>
+        <xsl:when test="count(parent::*) = 0">
+          <xsl:value-of select="concat($base.dir,$base.name)"/>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:value-of select="$base.name"/>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:when>
     <xsl:otherwise>
       <xsl:message terminate="yes">
-        <xsl:text>Chunking isn't supported with </xsl:text>
-        <xsl:value-of select="$vendor"/>
+        <xsl:text>Don't know how to chunk with </xsl:text>
+        <xsl:value-of select="system-property('xsl:vendor')"/>
       </xsl:message>
     </xsl:otherwise>
   </xsl:choose>
     </xsl:if>
   </xsl:message>
 
-  <xsl:variable name="vendor" select="system-property('xsl:vendor')"/>
-
   <xsl:choose>
-    <xsl:when test="contains($vendor, 'SAXON 6.2')">
-      <!-- Saxon 6.2.x uses xsl:document -->
-      <xsl:document href="{$filename}"
-                    method="{$method}"
-                    encoding="{$encoding}"
-                    indent="{$indent}"
-                    saxon:character-representation="{$saxon.character.representation}">
-        <xsl:copy-of select="$content"/>
-      </xsl:document>
-    </xsl:when>
-    <xsl:when test="contains($vendor, 'SAXON')">
-      <!-- Saxon uses saxon:output -->
-      <saxon:output file="{$filename}"
-                    href="{$filename}"
+    <xsl:when test="element-available('saxon:output')">
+      <saxon:output href="{$filename}"
                     method="{$method}"
                     encoding="{$encoding}"
                     indent="{$indent}"
         <xsl:copy-of select="$content"/>
       </saxon:output>
     </xsl:when>
-    <xsl:when test="contains($vendor, 'Apache')">
+    <xsl:when test="element-available('xalanredirect:write')">
       <!-- Xalan uses xalanredirect -->
       <xalanredirect:write file="{$filename}">
         <xsl:copy-of select="$content"/>
       </xalanredirect:write>
     </xsl:when>
+    <xsl:when test="element-available('exsl:document')">
+      <exsl:document href="{$filename}"
+                     method="{$method}"
+                     encoding="{$encoding}"
+                     indent="{$indent}">
+        <xsl:copy-of select="$content"/>
+      </exsl:document>
+    </xsl:when>
     <xsl:otherwise>
       <!-- it doesn't matter since we won't be making chunks... -->
       <xsl:message terminate="yes">
         <xsl:text>Can't make chunks with </xsl:text>
-        <xsl:value-of select="$vendor"/>
+        <xsl:value-of select="system-property('xsl:vendor')"/>
         <xsl:text>'s processor.</xsl:text>
       </xsl:message>
     </xsl:otherwise>
     </xsl:if>
   </xsl:message>
 
-  <xsl:variable name="vendor" select="system-property('xsl:vendor')"/>
 
   <xsl:choose>
-    <xsl:when test="contains($vendor, 'SAXON 6.2')">
-      <!-- Saxon 6.2.x uses xsl:document -->
-      <xsl:document href="{$filename}"
-                    method="{$method}"
-                    encoding="{$encoding}"
-                    indent="{$indent}"
-                    doctype-public="{$doctype-public}"
-                    doctype-system="{$doctype-system}"
-                    saxon:character-representation="{$saxon.character.representation}">
-        <xsl:copy-of select="$content"/>
-      </xsl:document>
-    </xsl:when>
-    <xsl:when test="contains($vendor, 'SAXON')">
+    <xsl:when test="element-available('saxon:output')">
       <!-- Saxon uses saxon:output -->
-      <saxon:output file="{$filename}"
-                    href="{$filename}"
+      <saxon:output href="{$filename}"
                     method="{$method}"
                     encoding="{$encoding}"
                     indent="{$indent}"
         <xsl:copy-of select="$content"/>
       </saxon:output>
     </xsl:when>
-    <xsl:when test="contains($vendor, 'Apache')">
+    <xsl:when test="element-available('xalanredirect:write')">
       <!-- Xalan uses xalanredirect -->
       <xalanredirect:write file="{$filename}">
         <xsl:copy-of select="$content"/>
       </xalanredirect:write>
     </xsl:when>
+    <xsl:when test="element-available('exsl:document')">
+      <exsl:document href="{$filename}"
+                     method="{$method}"
+                     encoding="{$encoding}"
+                     indent="{$indent}"
+                     doctype-public="{$doctype-public}"
+                     doctype-system="{$doctype-system}">
+        <xsl:copy-of select="$content"/>
+      </exsl:document>
+    </xsl:when>
     <xsl:otherwise>
       <!-- it doesn't matter since we won't be making chunks... -->
       <xsl:message terminate="yes">
         <xsl:text>Can't make chunks with </xsl:text>
-        <xsl:value-of select="$vendor"/>
+        <xsl:value-of select="system-property('xsl:vendor')"/>
         <xsl:text>'s processor.</xsl:text>
       </xsl:message>
     </xsl:otherwise>