You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mu...@apache.org on 2026/04/15 16:50:16 UTC
(xalan-java) branch xalan-j_xslt3.0_mvn updated: committing xalan-j xslt3.0 implementation improvements for stylesheet invocation using an initial xsl stylesheet function
This is an automated email from the ASF dual-hosted git repository.
mukulg pushed a commit to branch xalan-j_xslt3.0_mvn
in repository https://gitbox.apache.org/repos/asf/xalan-java.git
The following commit(s) were added to refs/heads/xalan-j_xslt3.0_mvn by this push:
new adc8b688f committing xalan-j xslt3.0 implementation improvements for stylesheet invocation using an initial xsl stylesheet function
adc8b688f is described below
commit adc8b688f6fe7c81616cbf4c94df9e1a158e3d74
Author: Mukul Gandhi <ga...@gmail.com>
AuthorDate: Wed Apr 15 22:20:02 2026 +0530
committing xalan-j xslt3.0 implementation improvements for stylesheet invocation using an initial xsl stylesheet function
---
README | 6 +-
.../org/apache/xalan/res/XSLTErrorResources.java | 3 +-
.../apache/xalan/transformer/TransformerImpl.java | 31 +++++++---
src/main/java/org/apache/xalan/xslt/Process.java | 1 +
.../xalan/tests/xslt3/XslInitialFunctionTests.java | 68 ++++++++++++++++++++++
.../resources/xsl_initial_function/gold/test10.out | 1 +
.../resources/xsl_initial_function/gold/test6.out | 1 +
.../resources/xsl_initial_function/gold/test7.out | 1 +
.../resources/xsl_initial_function/gold/test8.out | 1 +
.../resources/xsl_initial_function/gold/test9.out | 1 +
src/test/resources/xsl_initial_function/test1.xml | 4 ++
src/test/resources/xsl_initial_function/test10.xsl | 43 ++++++++++++++
src/test/resources/xsl_initial_function/test6.xsl | 37 ++++++++++++
src/test/resources/xsl_initial_function/test7.xsl | 37 ++++++++++++
src/test/resources/xsl_initial_function/test8.xsl | 37 ++++++++++++
src/test/resources/xsl_initial_function/test9.xsl | 43 ++++++++++++++
16 files changed, 302 insertions(+), 13 deletions(-)
diff --git a/README b/README
index df268005f..a549225b7 100644
--- a/README
+++ b/README
@@ -98,16 +98,16 @@ When this Maven build command is run, results like following shall be produced:
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.apache.xalan.tests.main.XalanXsl3TestSuite2
-[INFO] Tests run: 531, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 17.777 s - in org.apache.xalan.tests.main.XalanXsl3TestSuite2
+[INFO] Tests run: 536, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 18.796 s - in org.apache.xalan.tests.main.XalanXsl3TestSuite2
[INFO]
[INFO] Results:
[INFO]
-[INFO] Tests run: 531, Failures: 0, Errors: 0, Skipped: 0
+[INFO] Tests run: 536, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 47.006 s
+[INFO] Total time: 51.827 s
4) This code base repos branch also has Xalan Java's XSLT 3.0 test drivers for W3C XSLT 3.0 test suite (located at,
https://github.com/w3c/xslt30-test).
diff --git a/src/main/java/org/apache/xalan/res/XSLTErrorResources.java b/src/main/java/org/apache/xalan/res/XSLTErrorResources.java
index d2104b71f..e99af641a 100644
--- a/src/main/java/org/apache/xalan/res/XSLTErrorResources.java
+++ b/src/main/java/org/apache/xalan/res/XSLTErrorResources.java
@@ -1379,9 +1379,10 @@ public class XSLTErrorResources extends ListResourceBundle
{ "optionXSL", " [-XSL XSLTransformationURL]"},
{ "optionXSVAL", " [-XSVAL (Request XML Schema validation of XML input document)]"},
{ "optionXSL_EVALUATE", " [-XSL_EVALUATE (Request xsl:evaluate instruction to be enabled)]"},
- { "optionINIT_TEMPLATE", " [-INIT_TEMPLATE (Specify an XSL template's name to select an initial template for transformation)]"},
+ { "optionINIT_TEMPLATE", " [-INIT_TEMPLATE (Specify an XSL template's name to select an initial template for stylesheet transformation)]"},
{ "optionINIT_MODE", " [-INIT_MODE (Specify an XSL transformation's initial mode name)]"},
{ "optionENABLE_ASSERT", " [-ENABLE_ASSERT value (Specify whether XSL assert is enabled. Value \"true\", \"yes\", \"1\" means enabled otherwise disabled)]"},
+ { "optionINIT_FUNCTION", " [-INIT_FUNCTION (Specify an XSL function's name to select an initial function for stylesheet transformation)]"},
{ "optionENCODING", " [-ENCODING (Specify value of encoding to be used for XML input and stylesheet documents. Use format utf_8 (default), iso_8859_1 etc.)]"},
{ "optionOUT", " [-OUT outputFileName]"},
{ "optionLXCIN", " [-LXCIN compiledStylesheetFileNameIn]"},
diff --git a/src/main/java/org/apache/xalan/transformer/TransformerImpl.java b/src/main/java/org/apache/xalan/transformer/TransformerImpl.java
index 490842d4a..3528398a7 100644
--- a/src/main/java/org/apache/xalan/transformer/TransformerImpl.java
+++ b/src/main/java/org/apache/xalan/transformer/TransformerImpl.java
@@ -474,6 +474,12 @@ public class TransformerImpl extends Transformer implements Runnable, DTMWSFilte
private List<String> m_enabledPropertyList = new ArrayList<String>();
private List<ElemWithParam> m_xslWithParamList = new ArrayList<ElemWithParam>();
+
+ /**
+ * Initial context node handle for XSL transformation, when
+ * XSL transformation is initiated via an XSL stylesheet function.
+ */
+ private int m_docNode = DTM.NULL;
/**
* NEEDSDOC Method setShouldReset
@@ -899,11 +905,13 @@ public class TransformerImpl extends Transformer implements Runnable, DTMWSFilte
}
}
- DTM dtm = null;
+ DTM dtm = null;
if (source != null) {
dtm = mgr.getDTM(source, false, this, true, true);
dtm.setDocumentBaseURI(base);
+
+ m_docNode = dtm.getDocument();
}
boolean hardDelete = true; // %REVIEW% I have to think about this. -sb
@@ -2527,7 +2535,7 @@ public class TransformerImpl extends Transformer implements Runnable, DTMWSFilte
public boolean applyTemplateToNode(ElemTemplateElement xslInstruction, // xsl:apply-templates or xsl:for-each
ElemTemplate template, int child)
throws TransformerException
- {
+ {
DTM dtm = m_xcontext.getDTM(child);
short nodeType = DTM.ROOT_NODE;
@@ -2678,14 +2686,16 @@ public class TransformerImpl extends Transformer implements Runnable, DTMWSFilte
}
}
else if (initFunctionName != null) {
- ElemFunction elemFunction = m_stylesheetRoot.getXslFunction(initFunctionName, 0);
- ResultSequence argSequence = new ResultSequence();
- XObject funcResult = elemFunction.evaluateXslFunction(this, argSequence);
- ResultSequence seqForResult = new ResultSequence();
- seqForResult.add(funcResult);
try {
- ElemCopyOf.copyOfActionOnResultSequence(seqForResult, this, m_serializationHandler, xctxt, false, template);
- }
+ xctxt.pushCurrentNode(m_docNode);
+
+ ElemFunction elemFunction = m_stylesheetRoot.getXslFunction(initFunctionName, 0); // assuming function arity is 0 for now
+ ResultSequence argSequence = new ResultSequence();
+ XObject funcResult = elemFunction.evaluateXslFunction(this, argSequence);
+ ResultSequence seqForResult = new ResultSequence();
+ seqForResult.add(funcResult);
+ ElemCopyOf.copyOfActionOnResultSequence(seqForResult, this, m_serializationHandler, xctxt, false, template);
+ }
catch (TransformerException ex) {
throw ex;
}
@@ -2694,6 +2704,9 @@ public class TransformerImpl extends Transformer implements Runnable, DTMWSFilte
SourceLocator srcLocator = xctxt.getSAXLocator();
throw new TransformerException(errMesg, srcLocator);
}
+ finally {
+ xctxt.popCurrentNode();
+ }
return true;
}
diff --git a/src/main/java/org/apache/xalan/xslt/Process.java b/src/main/java/org/apache/xalan/xslt/Process.java
index 6908dc783..ef6d37696 100644
--- a/src/main/java/org/apache/xalan/xslt/Process.java
+++ b/src/main/java/org/apache/xalan/xslt/Process.java
@@ -94,6 +94,7 @@ public class Process
System.out.println(resbundle.getString("optionINIT_TEMPLATE")); //" [-INIT_TEMPLATE (Specify an XSL template's name to select an initial template for transformation)]");
System.out.println(resbundle.getString("optionINIT_MODE")); //" [-INIT_MODE (Specify an XSL transformation's initial mode name)]");
System.out.println(resbundle.getString("optionENABLE_ASSERT")); //" [-ENABLE_ASSERT (Specify whether XSL assert is enabled)]");
+ System.out.println(resbundle.getString("optionINIT_FUNCTION")); //" [-INIT_FUNCTION (Specify an XSL template's name to select an initial template for transformation)]");
System.out.println(resbundle.getString("optionENCODING")); //" [-ENCODING (Specify value of encoding to be used for XML input and stylesheet documents. Use format utf_8 (default), iso_8859_1 etc.)]");
System.out.println(resbundle.getString("optionOUT")); //" [-OUT outputFileName]");
diff --git a/src/test/java/org/apache/xalan/tests/xslt3/XslInitialFunctionTests.java b/src/test/java/org/apache/xalan/tests/xslt3/XslInitialFunctionTests.java
index 59709919a..ef532d3f4 100644
--- a/src/test/java/org/apache/xalan/tests/xslt3/XslInitialFunctionTests.java
+++ b/src/test/java/org/apache/xalan/tests/xslt3/XslInitialFunctionTests.java
@@ -109,5 +109,73 @@ public class XslInitialFunctionTests extends XslTransformTestsUtil {
runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
}
+
+ @Test
+ public void xslInitialFunctionTest6() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test1.xml";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test6.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test6.out";
+
+ m_fileComparisonType = XSLTestConstants.TEXT;
+
+ m_initFunctionName = "{http://fn0}func1";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
+
+ @Test
+ public void xslInitialFunctionTest7() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test1.xml";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test7.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test7.out";
+
+ m_fileComparisonType = XSLTestConstants.TEXT;
+
+ m_initFunctionName = "{http://fn0}func1";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
+
+ @Test
+ public void xslInitialFunctionTest8() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test1.xml";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test8.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test8.out";
+
+ m_fileComparisonType = XSLTestConstants.TEXT;
+
+ m_initFunctionName = "{http://fn0}func1";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
+
+ @Test
+ public void xslInitialFunctionTest9() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test1.xml";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test9.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test9.out";
+
+ m_fileComparisonType = XSLTestConstants.TEXT;
+
+ m_initFunctionName = "{http://fn0}func1";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
+
+ @Test
+ public void xslInitialFunctionTest10() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test1.xml";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test10.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test10.out";
+
+ m_initFunctionName = "{http://fn0}func1";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
}
diff --git a/src/test/resources/xsl_initial_function/gold/test10.out b/src/test/resources/xsl_initial_function/gold/test10.out
new file mode 100644
index 000000000..7e9121772
--- /dev/null
+++ b/src/test/resources/xsl_initial_function/gold/test10.out
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><result>1.414</result>
diff --git a/src/test/resources/xsl_initial_function/gold/test6.out b/src/test/resources/xsl_initial_function/gold/test6.out
new file mode 100644
index 000000000..b6fc4c620
--- /dev/null
+++ b/src/test/resources/xsl_initial_function/gold/test6.out
@@ -0,0 +1 @@
+hello
\ No newline at end of file
diff --git a/src/test/resources/xsl_initial_function/gold/test7.out b/src/test/resources/xsl_initial_function/gold/test7.out
new file mode 100644
index 000000000..95d09f2b1
--- /dev/null
+++ b/src/test/resources/xsl_initial_function/gold/test7.out
@@ -0,0 +1 @@
+hello world
\ No newline at end of file
diff --git a/src/test/resources/xsl_initial_function/gold/test8.out b/src/test/resources/xsl_initial_function/gold/test8.out
new file mode 100644
index 000000000..95d09f2b1
--- /dev/null
+++ b/src/test/resources/xsl_initial_function/gold/test8.out
@@ -0,0 +1 @@
+hello world
\ No newline at end of file
diff --git a/src/test/resources/xsl_initial_function/gold/test9.out b/src/test/resources/xsl_initial_function/gold/test9.out
new file mode 100644
index 000000000..0e03f6f24
--- /dev/null
+++ b/src/test/resources/xsl_initial_function/gold/test9.out
@@ -0,0 +1 @@
+hello 5
\ No newline at end of file
diff --git a/src/test/resources/xsl_initial_function/test1.xml b/src/test/resources/xsl_initial_function/test1.xml
new file mode 100644
index 000000000..3c59442ee
--- /dev/null
+++ b/src/test/resources/xsl_initial_function/test1.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<test1>
+ <message>hello</message>
+</test1>
\ No newline at end of file
diff --git a/src/test/resources/xsl_initial_function/test10.xsl b/src/test/resources/xsl_initial_function/test10.xsl
new file mode 100644
index 000000000..44a5dfdb1
--- /dev/null
+++ b/src/test/resources/xsl_initial_function/test10.xsl
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:math="http://www.w3.org/2005/xpath-functions/math"
+ xmlns:fn0="http://fn0"
+ exclude-result-prefixes="#all"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- An XSL 3 stylesheet test case, to test XSL transformation with
+ an initial named function. -->
+
+ <xsl:output method="xml" indent="yes"/>
+
+ <xsl:variable name="doc1" select="/"/>
+
+ <xsl:function name="fn0:func1">
+ <xsl:sequence>
+ <result>
+ <xsl:value-of select="round(math:sqrt(2), 3)"/>
+ </result>
+ </xsl:sequence>
+ </xsl:function>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/src/test/resources/xsl_initial_function/test6.xsl b/src/test/resources/xsl_initial_function/test6.xsl
new file mode 100644
index 000000000..e81386b96
--- /dev/null
+++ b/src/test/resources/xsl_initial_function/test6.xsl
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:fn0="http://fn0"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- An XSL 3 stylesheet test case, to test XSL transformation with
+ an initial named function. -->
+
+ <xsl:output method="text"/>
+
+ <xsl:variable name="doc1" select="/"/>
+
+ <xsl:function name="fn0:func1">
+ <xsl:sequence select="$doc1/test1/message"/>
+ </xsl:function>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/src/test/resources/xsl_initial_function/test7.xsl b/src/test/resources/xsl_initial_function/test7.xsl
new file mode 100644
index 000000000..282fca87f
--- /dev/null
+++ b/src/test/resources/xsl_initial_function/test7.xsl
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:fn0="http://fn0"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- An XSL 3 stylesheet test case, to test XSL transformation with
+ an initial named function. -->
+
+ <xsl:output method="text"/>
+
+ <xsl:variable name="doc1" select="/"/>
+
+ <xsl:function name="fn0:func1">
+ <xsl:sequence select="$doc1/test1/message || ' world'"/>
+ </xsl:function>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/src/test/resources/xsl_initial_function/test8.xsl b/src/test/resources/xsl_initial_function/test8.xsl
new file mode 100644
index 000000000..446de68df
--- /dev/null
+++ b/src/test/resources/xsl_initial_function/test8.xsl
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:fn0="http://fn0"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- An XSL 3 stylesheet test case, to test XSL transformation with
+ an initial named function. -->
+
+ <xsl:output method="text"/>
+
+ <xsl:variable name="doc1" select="/"/>
+
+ <xsl:function name="fn0:func1">
+ <xsl:sequence select="concat($doc1/test1/message, ' world')"/>
+ </xsl:function>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/src/test/resources/xsl_initial_function/test9.xsl b/src/test/resources/xsl_initial_function/test9.xsl
new file mode 100644
index 000000000..40753af5d
--- /dev/null
+++ b/src/test/resources/xsl_initial_function/test9.xsl
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:fn0="http://fn0"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- An XSL 3 stylesheet test case, to test XSL transformation with
+ an initial named function. -->
+
+ <xsl:output method="text"/>
+
+ <xsl:variable name="doc1" select="/"/>
+
+ <xsl:function name="fn0:func1">
+ <xsl:sequence select="concat($doc1/test1/message, ' ', fn0:length($doc1/test1/message))"/>
+ </xsl:function>
+
+ <xsl:function name="fn0:length" as="xs:integer">
+ <xsl:param name="str" as="xs:string"/>
+ <xsl:sequence select="string-length($str)"/>
+ </xsl:function>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xalan.apache.org
For additional commands, e-mail: commits-help@xalan.apache.org