dleslie 2002/06/05 09:01:33
Modified: java/src/org/apache/xalan/extensions Tag:
ExtensionEnhancements ExpressionContext.java
ExtensionsTable.java
java/src/org/apache/xalan/processor Tag:
ExtensionEnhancements StylesheetHandler.java
XSLTSchema.java
java/src/org/apache/xalan/templates Tag:
ExtensionEnhancements Constants.java
ElemExtensionCall.java ElemExtensionDecl.java
StylesheetRoot.java
java/src/org/apache/xalan/transformer Tag:
ExtensionEnhancements TransformerImpl.java
java/src/org/apache/xpath Tag: ExtensionEnhancements
XPathContext.java
java/src/org/apache/xpath/functions Tag:
ExtensionEnhancements FuncExtElementAvailable.java
FuncExtFunction.java FuncExtFunctionAvailable.java
Added: java/src/org/apache/xalan/extensions Tag:
ExtensionEnhancements ExpressionVisitor.java
ExtensionHandlerExsltFunction.java
ExtensionNamespaceSupport.java
ExtensionNamespacesManager.java
java/src/org/apache/xalan/processor Tag:
ExtensionEnhancements ProcessorExsltFuncResult.java
ProcessorExsltFunction.java
java/src/org/apache/xalan/templates Tag:
ExtensionEnhancements ElemExsltFuncResult.java
ElemExsltFunction.java
java/src/org/apache/xpath Tag: ExtensionEnhancements
ExtensionsProvider.java
Log:
Extension Enhancements, including EXSLT Function and Result.
Revision Changes Path
No revision
No revision
1.3.12.1 +12 -1
xml-xalan/java/src/org/apache/xalan/extensions/ExpressionContext.java
Index: ExpressionContext.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/ExpressionContext.java,v
retrieving revision 1.3
retrieving revision 1.3.12.1
diff -u -r1.3 -r1.3.12.1
--- ExpressionContext.java 10 Jul 2001 07:49:02 -0000 1.3
+++ ExpressionContext.java 5 Jun 2002 16:01:31 -0000 1.3.12.1
@@ -103,8 +103,19 @@
*
* @throws javax.xml.transform.TransformerException
*/
-
public XObject getVariableOrParam(org.apache.xml.utils.QName qname)
+ throws javax.xml.transform.TransformerException;
+
+ /**
+ * Get the XPathContext that owns this ExpressionContext.
+ *
+ * Note: exslt:function requires the XPathContext to access
+ * the variable stack and TransformerImpl.
+ *
+ * @return The current XPathContext.
+ * @throws javax.xml.transform.TransformerException
+ */
+ public org.apache.xpath.XPathContext getXPathContext()
throws javax.xml.transform.TransformerException;
}
1.18.4.1 +59 -154
xml-xalan/java/src/org/apache/xalan/extensions/ExtensionsTable.java
Index: ExtensionsTable.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/ExtensionsTable.java,v
retrieving revision 1.18
retrieving revision 1.18.4.1
diff -u -r1.18 -r1.18.4.1
--- ExtensionsTable.java 22 Mar 2002 14:50:49 -0000 1.18
+++ ExtensionsTable.java 5 Jun 2002 16:01:31 -0000 1.18.4.1
@@ -58,6 +58,7 @@
import java.util.Hashtable;
import java.util.Vector;
+import org.apache.xml.utils.StringVector;
import org.apache.xpath.objects.XNull;
import org.apache.xpath.XPathProcessorException;
@@ -65,13 +66,27 @@
import org.apache.xalan.res.XSLMessages;
import org.apache.xalan.res.XSLTErrorResources;
+import org.apache.xalan.transformer.TransformerImpl;
+
+import org.apache.xalan.templates.Constants;
+import org.apache.xalan.templates.ElemTemplateElement;
+import org.apache.xalan.templates.ElemTemplate;
+import org.apache.xalan.templates.StylesheetRoot;
+import org.apache.xalan.templates.TemplateList;
+
+import org.apache.xpath.XPathContext;
+
+import org.apache.xml.utils.QName;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
/**
* <meta name="usage" content="internal"/>
* Class holding a table registered extension namespace handlers
*/
public class ExtensionsTable
-{
-
+{
/**
* <meta name="usage" content="internal"/>
* Table of extensions that may be called from the expression language
@@ -79,50 +94,33 @@
* name.
*/
public Hashtable m_extensionFunctionNamespaces = new Hashtable();
-
+
/**
- * <meta name="usage" content="internal"/>
- * Primes the new ExtensionsTable object with built-in namespaces.
+ * The StylesheetRoot associated with this extensions table.
+ */
+ private StylesheetRoot m_sroot;
+
+ /**
+ * <meta name="usage" content="advanced"/>
+ * The constructor (called from TransformerImpl) registers the
+ * StylesheetRoot for the transformation and instantiates an
+ * ExtensionHandler for each extension namespace.
*/
- public ExtensionsTable()
+ public ExtensionsTable(StylesheetRoot sroot)
+ throws javax.xml.transform.TransformerException
{
-
- // register the java namespace as being implemented by the
- // xslt-javaclass engine. Note that there's no real code
- // per se for this extension as the functions carry the
- // object on which to call etc. and all the logic of breaking
- // that up is in the xslt-javaclass engine.
- String uri = "http://xml.apache.org/xslt/java";
- ExtensionHandler fh = new ExtensionHandlerJavaPackage(uri,
- "xslt-javaclass", "");
-
- addExtensionNamespace(uri, fh);
-
- uri = "http://xsl.lotus.com/java";
-
- addExtensionNamespace(uri, fh);
-
- uri = "http://xml.apache.org/xalan";
- fh = new ExtensionHandlerJavaClass(uri, "javaclass",
- "org.apache.xalan.lib.Extensions");
-
- addExtensionNamespace(uri, fh);
-
- //Add EXSLT namespaces and map to org.apache.xalan.lib.ExsltXxx.
- uri = "http://exslt.org/common";
- fh = new ExtensionHandlerJavaClass(uri, "javaclass",
- "org.apache.xalan.lib.ExsltCommon");
- addExtensionNamespace(uri, fh);
- uri = "http://exslt.org/math";
- fh = new ExtensionHandlerJavaClass(uri, "javaclass",
- "org.apache.xalan.lib.ExsltMath");
- addExtensionNamespace(uri, fh);
- uri = "http://exslt.org/sets";
- fh = new ExtensionHandlerJavaClass(uri, "javaclass",
- "org.apache.xalan.lib.ExsltSets");
- addExtensionNamespace(uri, fh);
- }
-
+ m_sroot = sroot;
+ Vector extensions = m_sroot.getExtensions();
+ for (int i = 0; i < extensions.size(); i++)
+ {
+ ExtensionNamespaceSupport extNamespaceSpt =
+ (ExtensionNamespaceSupport)extensions.elementAt(i);
+ ExtensionHandler extHandler = extNamespaceSpt.launch();
+ if (extHandler != null)
+ addExtensionNamespace(extNamespaceSpt.getNamespace(), extHandler);
+ }
+ }
+
/**
* Get an ExtensionHandler object that represents the
* given namespace.
@@ -162,71 +160,41 @@
public boolean functionAvailable(String ns, String funcName)
throws javax.xml.transform.TransformerException
{
-
boolean isAvailable = false;
-
+
if (null != ns)
{
- ExtensionHandler extNS =
- (ExtensionHandler) m_extensionFunctionNamespaces.get(ns);
-
- if (extNS == null)
- {
- extNS = makeJavaNamespace(ns);
-
- addExtensionNamespace(ns, extNS);
- }
-
+ ExtensionHandler extNS =
+ (ExtensionHandler) m_extensionFunctionNamespaces.get(ns);
if (extNS != null)
- {
isAvailable = extNS.isFunctionAvailable(funcName);
- }
}
-
- // System.err.println (">>> functionAvailable (ns=" + ns +
- // ", func=" + funcName + ") = " + isAvailable);
return isAvailable;
}
-
+
/**
* Execute the element-available() function.
* @param ns the URI of namespace in which the function is needed
- * @param funcName the function name being tested
* @param elemName name of element being tested
*
- * @return whether the given function is available or not.
+ * @return whether the given element is available or not.
*
* @throws javax.xml.transform.TransformerException
*/
public boolean elementAvailable(String ns, String elemName)
throws javax.xml.transform.TransformerException
{
-
boolean isAvailable = false;
-
if (null != ns)
{
- ExtensionHandler extNS =
- (ExtensionHandler) m_extensionFunctionNamespaces.get(ns);
-
- if (extNS == null)
- {
- extNS = makeJavaNamespace(ns);
-
- addExtensionNamespace(ns, extNS);
- }
-
- if (extNS != null)
- {
+ ExtensionHandler extNS =
+ (ExtensionHandler) m_extensionFunctionNamespaces.get(ns);
+ if (extNS != null) // defensive
isAvailable = extNS.isElementAvailable(elemName);
- }
- }
-
- // System.err.println (">>> elementAvailable (ns=" + ns +
- // ", elem=" + elemName + ") = " + isAvailable);
- return isAvailable;
- }
-
+ }
+ return isAvailable;
+ }
+
/**
* Handle an extension function.
* @param ns the URI of namespace in which the function is needed
@@ -242,28 +210,16 @@
*
* @throws javax.xml.transform.TransformerException
*/
- public Object extFunction(
- String ns, String funcName, Vector argVec, Object methodKey,
- ExpressionContext exprContext)
+ public Object extFunction(String ns, String funcName,
+ Vector argVec, Object methodKey,
+ ExpressionContext exprContext)
throws javax.xml.transform.TransformerException
{
-
Object result = null;
-
if (null != ns)
{
ExtensionHandler extNS =
(ExtensionHandler) m_extensionFunctionNamespaces.get(ns);
-
- // If the handler for this extension URI is not found try to auto
declare
- // this extension namespace:
- if (null == extNS)
- {
- extNS = makeJavaNamespace(ns);
-
- addExtensionNamespace(ns, extNS);
- }
-
if (null != extNS)
{
try
@@ -282,61 +238,10 @@
}
else
{
- throw new
XPathProcessorException(XSLMessages.createMessage(XSLTErrorResources.ER_EXTENSION_FUNC_UNKNOWN,
new Object[]{ns, funcName })); //"Extension function '" + ns + ":"
- // + funcName + "' is unknown");
+ throw new
XPathProcessorException(XSLMessages.createMessage(XSLTErrorResources.ER_EXTENSION_FUNC_UNKNOWN,
new Object[]{ns, funcName }));
+ //"Extension function '" + ns + ":" + funcName + "' is unknown");
}
}
-
- return result;
- }
-
- /**
- * Declare the appropriate java extension handler.
- * @param ns the URI of namespace in which the function is needed
- * @return an ExtensionHandler for this namespace, or null if
- * not found.
- *
- * @throws javax.xml.transform.TransformerException
- */
- public ExtensionHandler makeJavaNamespace(String ns)
- throws javax.xml.transform.TransformerException
- {
- if(null == ns || ns.trim().length() == 0) // defensive. I don't think
it's needed. -sb
- return null;
-
- // First, prepare the name of the actual class or package. We strip
- // out any leading "class:". Next, we see if there is a /. If so,
- // only look at anything to the right of the rightmost /.
- // In the documentation, we state that any classes or packages
- // declared using this technique must start with xalan://. However,
- // in this version, we don't enforce that.
- String className = ns;
-
- if (className.startsWith("class:"))
- {
- className = className.substring(6);
- }
-
- int lastSlash = className.lastIndexOf("/");
-
- if (-1 != lastSlash)
- className = className.substring(lastSlash + 1);
-
- // The className can be null here, and can cause an error in
getClassForName
- // in JDK 1.8.
- if(null == className || className.trim().length() == 0)
- return null;
-
- try
- {
- ExtensionHandler.getClassForName(className);
-
- return new ExtensionHandlerJavaClass(ns, "javaclass", className);
- }
- catch (ClassNotFoundException e)
- {
- return new ExtensionHandlerJavaPackage(ns, "javapackage",
- className + ".");
- }
+ return result;
}
}
No revision
No revision
1.1.2.1 +106 -0
xml-xalan/java/src/org/apache/xalan/extensions/Attic/ExpressionVisitor.java
1.1.2.1 +237 -0
xml-xalan/java/src/org/apache/xalan/extensions/Attic/ExtensionHandlerExsltFunction.java
1.1.2.1 +85 -0
xml-xalan/java/src/org/apache/xalan/extensions/Attic/ExtensionNamespaceSupport.java
1.1.2.1 +286 -0
xml-xalan/java/src/org/apache/xalan/extensions/Attic/ExtensionNamespacesManager.java
No revision
No revision
1.50.4.1 +6 -1
xml-xalan/java/src/org/apache/xalan/processor/StylesheetHandler.java
Index: StylesheetHandler.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/processor/StylesheetHandler.java,v
retrieving revision 1.50
retrieving revision 1.50.4.1
diff -u -r1.50 -r1.50.4.1
--- StylesheetHandler.java 28 Mar 2002 19:52:50 -0000 1.50
+++ StylesheetHandler.java 5 Jun 2002 16:01:32 -0000 1.50.4.1
@@ -85,6 +85,8 @@
import org.apache.xpath.XPathFactory;
import org.apache.xpath.XPath;
+import org.apache.xpath.functions.FuncExtFunction;
+import org.apache.xalan.extensions.ExpressionVisitor;
import org.w3c.dom.Node;
import org.xml.sax.Attributes;
@@ -194,7 +196,10 @@
throws javax.xml.transform.TransformerException
{
ErrorListener handler = m_stylesheetProcessor.getErrorListener();
- return new XPath(str, owningTemplate, this, XPath.SELECT, handler);
+ XPath xpath = new XPath(str, owningTemplate, this, XPath.SELECT,
handler);
+ // Visit the expression, registering namespaces for any extension
functions it includes.
+ xpath.callVisitors(xpath, new ExpressionVisitor(getStylesheetRoot()));
+ return xpath;
}
/**
1.23.12.1 +199 -163
xml-xalan/java/src/org/apache/xalan/processor/XSLTSchema.java
Index: XSLTSchema.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/processor/XSLTSchema.java,v
retrieving revision 1.23
retrieving revision 1.23.12.1
diff -u -r1.23 -r1.23.12.1
--- XSLTSchema.java 26 Sep 2001 15:13:15 -0000 1.23
+++ XSLTSchema.java 5 Jun 2002 16:01:32 -0000 1.23.12.1
@@ -267,9 +267,12 @@
XSLTAttributeDef xslResultAttr =
new XSLTAttributeDef(Constants.S_XSLNAMESPACEURL, "*",
XSLTAttributeDef.T_CDATA, false);
- XSLTElementDef[] templateElements = new XSLTElementDef[21];
- XSLTElementDef[] templateElementsAndParams = new XSLTElementDef[22];
- XSLTElementDef[] templateElementsAndSort = new XSLTElementDef[22];
+ XSLTElementDef[] templateElements = new XSLTElementDef[22];
+ XSLTElementDef[] templateElementsAndParams = new XSLTElementDef[23];
+ XSLTElementDef[] templateElementsAndSort = new XSLTElementDef[23];
+ //exslt
+ XSLTElementDef[] exsltFunctionElements = new XSLTElementDef[23];
+
XSLTElementDef[] charTemplateElements = new XSLTElementDef[15];
XSLTElementDef resultElement = new XSLTElementDef(this, null, "*",
null /*alias */,
@@ -293,8 +296,8 @@
xslVersionAttr,
xslResultAttr,
resultAttr },
-
new ProcessorUnknown(),
- ElemUnknown.class /* class object */, 20, true);
+ new ProcessorUnknown(),
+ ElemUnknown.class /* class
object */, 20, true);
XSLTElementDef xslValueOf = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL, "value-of",
null /*alias */, null /* elements */,
@@ -485,8 +488,27 @@
new XSLTAttributeDef[]{ spaceAttr },
new ProcessorTemplateElem(),
ElemFallback.class /* class object */,
20, true);
+ //exslt
+ XSLTElementDef exsltFunction =
+ new XSLTElementDef(this,
+ Constants.S_EXSLT_FUNCTIONS_URL,
+ "function",
+ null /*alias */,
+ exsltFunctionElements /* elements */,
+ new XSLTAttributeDef[]{ nameAttrRequired },
+ new ProcessorExsltFunction(),
+ ElemExsltFunction.class /* class object
*/);
+ XSLTElementDef exsltResult =
+ new XSLTElementDef(this,
+ Constants.S_EXSLT_FUNCTIONS_URL,
+ "result",
+ null /*alias */,
+ templateElements /* elements */,
+ new XSLTAttributeDef[]{ selectAttrOpt },
+ new ProcessorExsltFuncResult(),
+ ElemExsltFuncResult.class /* class object
*/);
+
int i = 0;
-
templateElements[i++] = charData; // #PCDATA
// char-instructions
@@ -512,22 +534,20 @@
templateElements[i++] = xslAttribute;
templateElements[i++] = resultElement;
templateElements[i++] = unknownElement;
+ templateElements[i++] = exsltResult;
int k;
for (k = 0; k < i; k++)
{
templateElementsAndParams[k] = templateElements[k];
- }
-
- templateElementsAndParams[k] = xslParam;
-
- for (k = 0; k < i; k++)
- {
templateElementsAndSort[k] = templateElements[k];
+ exsltFunctionElements[k] = templateElements[k];
}
-
+ templateElementsAndParams[k] = xslParam;
templateElementsAndSort[k] = xslSort;
+ exsltFunctionElements[k] = xslParam;
+
i = 0;
charTemplateElements[i++] = charData; // #PCDATA
@@ -561,156 +581,172 @@
new ProcessorInclude(),
null /* class object */,
20, true);
- XSLTElementDef[] topLevelElements = new XSLTElementDef[]{ includeDef,
- importDef,
- //
resultElement,
- whiteSpaceOnly,
- unknownElement,
- new
XSLTElementDef(
- this,
-
Constants.S_XSLNAMESPACEURL,
-
"strip-space",
- null /*alias
*/,
- null /*
elements */,
- new
XSLTAttributeDef[]{
- elementsAttr
},
- new
ProcessorStripSpace(),
- null /*
class object */, 20, true),
- new
XSLTElementDef(
- this,
-
Constants.S_XSLNAMESPACEURL,
-
"preserve-space",
- null /*alias
*/,
- null /*
elements */,
- new
XSLTAttributeDef[]{
- elementsAttr
},
- new
ProcessorPreserveSpace(),
- null /*
class object */, 20, true),
- new
XSLTElementDef(
- this,
-
Constants.S_XSLNAMESPACEURL,
- "output",
- null /*alias
*/,
- null /*
elements */,
- new
XSLTAttributeDef[]{
- methodAttr,
-
versionAttr,
-
encodingAttr,
-
omitXmlDeclarationAttr,
-
standaloneAttr,
-
doctypePublicAttr,
-
doctypeSystemAttr,
-
cdataSectionElementsAttr,
- indentAttr,
-
mediaTypeAttr,
-
XSLTAttributeDef.m_foreignAttr },
- new
ProcessorOutputElem(), null /* class object */, 20, true),
- new
XSLTElementDef(
- this,
-
Constants.S_XSLNAMESPACEURL,
- "key",
- null /*alias
*/,
- null /*
elements */, // EMPTY
- new
XSLTAttributeDef[]{ nameAttrRequired,
-
matchAttrRequired,
-
useAttr },
-
new ProcessorKey(), null /* class object */, 20, true),
- new
XSLTElementDef(
- this,
-
Constants.S_XSLNAMESPACEURL,
-
"decimal-format",
- null /*alias
*/,
- null /*
elements */, // EMPTY
-
new XSLTAttributeDef[]{
-
nameAttrOpt,
-
decimalSeparatorAttr,
-
groupingSeparatorAttr,
-
infinityAttr,
-
minusSignAttr,
-
NaNAttr,
-
percentAttr,
-
perMilleAttr,
-
zeroDigitAttr,
-
digitAttr,
-
patternSeparatorAttr },
-
new ProcessorDecimalFormat(),
- null /*
class object */, 20, true),
- new
XSLTElementDef(
- this,
-
Constants.S_XSLNAMESPACEURL,
-
"attribute-set",
- null /*alias
*/,
- new
XSLTElementDef[]{
- xslAttribute
} /* elements */,
- new
XSLTAttributeDef[]{
-
nameAttrRequired,
-
useAttributeSetsAttr }, new ProcessorAttributeSet(),
-
null /* class object */, 20, true),
- new
XSLTElementDef(
- this,
-
Constants.S_XSLNAMESPACEURL,
- "variable",
- null /*alias
*/,
-
templateElements /* elements */,
- new
XSLTAttributeDef[]{
-
nameAttrRequired,
-
selectAttrOpt }, new ProcessorGlobalVariableDecl(),
-
ElemVariable.class /* class object */, 20, true),
- new
XSLTElementDef(
- this,
-
Constants.S_XSLNAMESPACEURL,
- "param",
- null /*alias
*/,
-
templateElements /* elements */,
- new
XSLTAttributeDef[]{
-
nameAttrRequired,
-
selectAttrOpt }, new ProcessorGlobalParamDecl(),
-
ElemParam.class /* class object */, 20, true),
- new
XSLTElementDef(
- this,
-
Constants.S_XSLNAMESPACEURL,
- "template",
- null /*alias
*/,
-
templateElementsAndParams /* elements */,
- new
XSLTAttributeDef[]{
-
matchAttrOpt,
-
nameAttrOpt,
-
priorityAttr,
- modeAttr,
- spaceAttr
}, new ProcessorTemplate(), ElemTemplate.class /* class object */, true, 20,
true),
-
new XSLTElementDef(
- this,
-
Constants.S_XSLNAMESPACEURL,
-
"namespace-alias",
- null
/*alias */,
- null /*
elements */, // EMPTY
- new
XSLTAttributeDef[]{ stylesheetPrefixAttr,
-
resultPrefixAttr },
-
new ProcessorNamespaceAlias(), null /* class object */,
20, true),
- new
XSLTElementDef(
- this,
-
Constants.S_BUILTIN_EXTENSIONS_URL,
- "component",
- null /*alias
*/,
- new
XSLTElementDef[]{
- new
XSLTElementDef(
- this,
-
Constants.S_BUILTIN_EXTENSIONS_URL,
- "script",
- null
/*alias */,
- new
XSLTElementDef[]{ charData } /* elements */,
- new
XSLTAttributeDef[]{
- new
XSLTAttributeDef(
- null,
-
"lang",
-
XSLTAttributeDef.T_NMTOKEN,
-
true),
- new
XSLTAttributeDef(null, "src", XSLTAttributeDef.T_URL, false) },
-
new ProcessorLRE(),
-
ElemExtensionScript.class /* class object */, 20, true) }, // EMPTY
-
new XSLTAttributeDef[]{ new XSLTAttributeDef(null, "prefix",
XSLTAttributeDef.T_NMTOKEN, true),
-
new XSLTAttributeDef(null, "elements",
XSLTAttributeDef.T_STRINGLIST, false),
-
new XSLTAttributeDef(null,
"functions", XSLTAttributeDef.T_STRINGLIST, false) }, new ProcessorLRE(),
ElemExtensionDecl.class /* class object */) };
+
+ XSLTElementDef[] topLevelElements = new XSLTElementDef[]
+ {includeDef,
+ importDef,
+ // resultElement,
+ whiteSpaceOnly,
+ unknownElement,
+ new XSLTElementDef(
+ this,
+ Constants.S_XSLNAMESPACEURL,
+ "strip-space",
+ null /*alias */,
+ null /* elements */,
+ new XSLTAttributeDef[]{
+ elementsAttr },
+ new ProcessorStripSpace(),
+ null /* class object */, 20, true),
+ new XSLTElementDef(
+ this,
+ Constants.S_XSLNAMESPACEURL,
+ "preserve-space",
+ null /*alias */,
+ null /* elements */,
+ new XSLTAttributeDef[]{
+ elementsAttr },
+ new
ProcessorPreserveSpace(),
+ null /* class object */, 20, true),
+ new XSLTElementDef(
+ this,
+ Constants.S_XSLNAMESPACEURL,
+ "output",
+ null /*alias */,
+ null /* elements */,
+ new XSLTAttributeDef[]{
+ methodAttr,
+ versionAttr,
+ encodingAttr,
+ omitXmlDeclarationAttr,
+ standaloneAttr,
+ doctypePublicAttr,
+ doctypeSystemAttr,
+ cdataSectionElementsAttr,
+ indentAttr,
+ mediaTypeAttr,
+
XSLTAttributeDef.m_foreignAttr },
+ new ProcessorOutputElem(), null /*
class object */, 20, true),
+ new XSLTElementDef(
+ this,
+ Constants.S_XSLNAMESPACEURL,
+ "key",
+ null /*alias */,
+ null /* elements */, // EMPTY
+ new XSLTAttributeDef[]{
nameAttrRequired,
+ matchAttrRequired,
+ useAttr },
+ new ProcessorKey(), null /* class
object */, 20, true),
+ new XSLTElementDef(
+ this,
+ Constants.S_XSLNAMESPACEURL,
+ "decimal-format",
+ null /*alias */,
+ null /* elements */, // EMPTY
+ new XSLTAttributeDef[]{
+ nameAttrOpt,
+ decimalSeparatorAttr,
+ groupingSeparatorAttr,
+ infinityAttr,
+ minusSignAttr,
+ NaNAttr,
+ percentAttr,
+ perMilleAttr,
+ zeroDigitAttr,
+ digitAttr,
+ patternSeparatorAttr },
+ new ProcessorDecimalFormat(),
+ null /* class object */, 20,
true),
+ new XSLTElementDef(
+ this,
+ Constants.S_XSLNAMESPACEURL,
+ "attribute-set",
+ null /*alias */,
+ new XSLTElementDef[]{
+ xslAttribute } /*
elements */,
+ new XSLTAttributeDef[]{
+ nameAttrRequired,
+ useAttributeSetsAttr },
+ new ProcessorAttributeSet(),
+ null /* class object */, 20,
true),
+ new XSLTElementDef(
+ this,
+ Constants.S_XSLNAMESPACEURL,
+ "variable",
+ null /*alias */,
+ templateElements /* elements */,
+ new XSLTAttributeDef[]{
+ nameAttrRequired,
+ selectAttrOpt },
+ new ProcessorGlobalVariableDecl(),
+ ElemVariable.class /* class
object */, 20, true),
+ new XSLTElementDef(
+ this,
+ Constants.S_XSLNAMESPACEURL,
+ "param",
+ null /*alias */,
+ templateElements /* elements */,
+ new XSLTAttributeDef[]{
+ nameAttrRequired,
+ selectAttrOpt },
+ new ProcessorGlobalParamDecl(),
+ ElemParam.class /* class object
*/, 20, true),
+ new XSLTElementDef(
+ this,
+ Constants.S_XSLNAMESPACEURL,
+ "template",
+ null /*alias */,
+ templateElementsAndParams /*
elements */,
+ new XSLTAttributeDef[]{
+ matchAttrOpt,
+ nameAttrOpt,
+ priorityAttr,
+ modeAttr,
+ spaceAttr },
+ new ProcessorTemplate(),
ElemTemplate.class /* class object */, true, 20, true),
+ new XSLTElementDef(
+ this,
+ Constants.S_XSLNAMESPACEURL,
+ "namespace-alias",
+ null /*alias */,
+ null /* elements */, // EMPTY
+ new XSLTAttributeDef[]{
+ stylesheetPrefixAttr,
+ resultPrefixAttr },
+ new ProcessorNamespaceAlias(),
null /* class object */, 20, true),
+ new XSLTElementDef(
+ this,
+
Constants.S_BUILTIN_EXTENSIONS_URL,
+ "component",
+ null /*alias */,
+ new XSLTElementDef[]{
+ new XSLTElementDef(
+ this,
+
Constants.S_BUILTIN_EXTENSIONS_URL,
+ "script",
+ null /*alias */,
+ new XSLTElementDef[]{
+ charData } /*
elements */,
+ new
XSLTAttributeDef[]{
+ new
XSLTAttributeDef(
+ null,
+ "lang",
+
XSLTAttributeDef.T_NMTOKEN,
+ true),
+ new
XSLTAttributeDef(
+ null, "src",
XSLTAttributeDef.T_URL, false) },
+ new
ProcessorLRE(),
+
ElemExtensionScript.class /* class object */, 20, true) }, // EMPTY
+ new
XSLTAttributeDef[]{
+ new
XSLTAttributeDef(
+ null,
"prefix", XSLTAttributeDef.T_NMTOKEN, true),
+ new
XSLTAttributeDef(
+ null,
"elements", XSLTAttributeDef.T_STRINGLIST, false),
+ new
XSLTAttributeDef(
+ null,
"functions", XSLTAttributeDef.T_STRINGLIST, false) },
+ new ProcessorLRE(),
ElemExtensionDecl.class /* class object */),
+ exsltFunction}/* exslt */; //end of
topevelElements
+
XSLTAttributeDef excludeResultPrefixesAttr =
new XSLTAttributeDef(null, "exclude-result-prefixes",
XSLTAttributeDef.T_STRINGLIST, false);
No revision
No revision
1.1.2.1 +116 -0
xml-xalan/java/src/org/apache/xalan/processor/Attic/ProcessorExsltFuncResult.java
1.1.2.1 +212 -0
xml-xalan/java/src/org/apache/xalan/processor/Attic/ProcessorExsltFunction.java
No revision
No revision
1.12.18.1 +31 -1
xml-xalan/java/src/org/apache/xalan/templates/Constants.java
Index: Constants.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/templates/Constants.java,v
retrieving revision 1.12
retrieving revision 1.12.18.1
diff -u -r1.12 -r1.12.18.1
--- Constants.java 13 Dec 2000 19:47:20 -0000 1.12
+++ Constants.java 5 Jun 2002 16:01:32 -0000 1.12.18.1
@@ -110,6 +110,25 @@
S_BUILTIN_EXTENSIONS_URL = "http://xml.apache.org/xslt";
/**
+ * Xalan extension namespaces.
+ */
+ public static final String
+ S_EXTENSIONS_JAVA_URL = "http://xml.apache.org/xslt/java",
+ S_EXTENSIONS_LOTUSXSL_JAVA_URL = "http://xsl.lotus.com/java",
+ S_EXTENSIONS_XALANLIB_URL = "http://xml.apache.org/xalan";
+
+ /**
+ * EXSLT extension namespaces.
+ */
+ public static final String
+ S_EXSLT_COMMON_URL = "http://exslt.org/common",
+ S_EXSLT_MATH_URL = "http://exslt.org/math",
+ S_EXSLT_SETS_URL = "http://exslt.org/sets",
+ S_EXSLT_DATETIME_URL = "http://exslt.org/dates-and-times",
+ S_EXSLT_FUNCTIONS_URL = "http://exslt.org/functions";
+
+
+ /**
* The minimum version of XSLT supported by this processor.
*/
public static final double XSLTVERSUPPORTED = 1.0;
@@ -177,7 +196,7 @@
ELEMNAME_EXTENSIONSCRIPT = 86, ELEMNAME_OUTPUT = 80,
ELEMNAME_COMPONENT = 81, ELEMNAME_SCRIPT = 82;
- // Next free number: 87
+ // Next free number: 90 (88 and 89 used for EXSLT elements);
/**
* Literals for XSL element names. Note that there are more
@@ -251,6 +270,17 @@
ELEMNAME_VARIABLE_STRING = "variable",
ELEMNAME_WHEN_STRING = "when",
ELEMNAME_WITHPARAM_STRING = "with-param";
+
+ /**
+ * Literals for EXSLT function elements.
+ */
+ public static final String
+ EXSLT_ELEMNAME_FUNCTION_STRING = "function",
+ EXSLT_ELEMNAME_FUNCRESULT_STRING = "result";
+ public static final int
+ EXSLT_ELEMNAME_FUNCTION = 88,
+ EXSLT_ELEMNAME_FUNCRESULT = 89;
+
/**
* Literals for XSL attribute names. Note that there may be more
1.27.4.1 +10 -60
xml-xalan/java/src/org/apache/xalan/templates/ElemExtensionCall.java
Index: ElemExtensionCall.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/templates/ElemExtensionCall.java,v
retrieving revision 1.27
retrieving revision 1.27.4.1
diff -u -r1.27 -r1.27.4.1
--- ElemExtensionCall.java 22 Mar 2002 01:04:40 -0000 1.27
+++ ElemExtensionCall.java 5 Jun 2002 16:01:32 -0000 1.27.4.1
@@ -91,8 +91,6 @@
public class ElemExtensionCall extends ElemLiteralResult
{
- // ExtensionNSHandler nsh;
-
/** The Namespace URI for this extension call element.
* @serial */
String m_extns;
@@ -144,51 +142,15 @@
*/
public void compose(StylesheetRoot sroot) throws TransformerException
{
-
super.compose(sroot);
- m_extns = this.getNamespace();
-
- StylesheetRoot stylesheet = this.getStylesheetRoot();
-
- m_decl = getElemExtensionDecl(stylesheet, m_extns);
-
- if (null != m_decl)
- {
- for (ElemTemplateElement child = m_decl.getFirstChildElem();
- child != null; child = child.getNextSiblingElem())
- {
- if (Constants.ELEMNAME_EXTENSIONSCRIPT == child.getXSLToken())
- {
- ElemExtensionScript sdecl = (ElemExtensionScript) child;
-
- m_lang = sdecl.getLang();
- m_srcURL = sdecl.getSrc();
-
- ElemTemplateElement childOfSDecl = sdecl.getFirstChildElem();
-
- if (null != childOfSDecl)
- {
- if (Constants.ELEMNAME_TEXTLITERALRESULT
- == childOfSDecl.getXSLToken())
- {
- ElemTextLiteral tl = (ElemTextLiteral) childOfSDecl;
- char[] chars = tl.getChars();
-
- m_scriptSrc = new String(chars);
- }
- }
-
- break;
- }
- }
- }
- else
- {
-
- // stylesheet.error(xxx);
- }
+ m_extns = this.getNamespace();
+ m_decl = getElemExtensionDecl(sroot, m_extns);
+ // Register the extension namespace if the extension does not have
+ // an ElemExtensionDecl ("component").
+ if (m_decl == null)
+ sroot.getExtensionNamespacesManager().registerExtension(m_extns);
}
-
+
/**
* Return the ElemExtensionDecl for this extension element
*
@@ -281,25 +243,13 @@
{
transformer.getResultTreeHandler().flushPending();
- XPathContext liaison = ((XPathContext) transformer.getXPathContext());
- ExtensionsTable etable = liaison.getExtensionsTable();
+ ExtensionsTable etable = transformer.getExtensionsTable();
ExtensionHandler nsh = etable.get(m_extns);
- // We're seeing this extension namespace used for the first time. Try
to
- // autodeclare it as a java namespace.
-
if (null == nsh)
{
- nsh = etable.makeJavaNamespace(m_extns);
-
- if(null != nsh)
- etable.addExtensionNamespace(m_extns, nsh);
- else
- {
- executeFallbacks(transformer);
- return;
- }
-
+ executeFallbacks(transformer);
+ return;
}
try
1.16.12.1 +86 -12
xml-xalan/java/src/org/apache/xalan/templates/ElemExtensionDecl.java
Index: ElemExtensionDecl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/templates/ElemExtensionDecl.java,v
retrieving revision 1.16
retrieving revision 1.16.12.1
diff -u -r1.16 -r1.16.12.1
--- ElemExtensionDecl.java 31 Jul 2001 21:33:18 -0000 1.16
+++ ElemExtensionDecl.java 5 Jun 2002 16:01:32 -0000 1.16.12.1
@@ -73,6 +73,10 @@
import org.apache.xalan.res.XSLTErrorResources;
import org.apache.xalan.res.XSLMessages;
+// dml
+import org.apache.xalan.extensions.ExtensionNamespacesManager;
+import org.apache.xalan.extensions.ExtensionNamespaceSupport;
+
/**
* <meta name="usage" content="internal"/>
* Implement the declaration of an extension element
@@ -106,7 +110,7 @@
}
/**
- * Set the prefix for this extension element
+ * Get the prefix for this extension element
*
*
* @return Prefix for this extension element
@@ -238,7 +242,78 @@
{
return Constants.ELEMNAME_EXTENSIONDECL;
}
+
+ public void compose(StylesheetRoot sroot) throws TransformerException
+ {
+ super.compose(sroot);
+ String prefix = getPrefix();
+ String declNamespace = getNamespaceForPrefix(prefix);
+ String lang = null;
+ String srcURL = null;
+ String scriptSrc = null;
+ if (null == declNamespace)
+ throw new
TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_NO_NAMESPACE_DECL,
new Object[]{prefix}));
+ //"Prefix " + prefix does not have a corresponding namespace
declaration");
+ for (ElemTemplateElement child = getFirstChildElem(); child != null;
+ child = child.getNextSiblingElem())
+ {
+ if (Constants.ELEMNAME_EXTENSIONSCRIPT == child.getXSLToken())
+ {
+ ElemExtensionScript sdecl = (ElemExtensionScript) child;
+ lang = sdecl.getLang();
+ srcURL = sdecl.getSrc();
+ ElemTemplateElement childOfSDecl = sdecl.getFirstChildElem();
+ if (null != childOfSDecl)
+ {
+ if (Constants.ELEMNAME_TEXTLITERALRESULT
+ == childOfSDecl.getXSLToken())
+ {
+ ElemTextLiteral tl = (ElemTextLiteral) childOfSDecl;
+ char[] chars = tl.getChars();
+ scriptSrc = new String(chars);
+ if (scriptSrc.trim().length() == 0)
+ scriptSrc = null;
+ }
+ }
+ }
+ }
+ if (null == lang)
+ lang = "javaclass";
+ if (lang.equals("javaclass") && (scriptSrc != null))
+ throw new
TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_ELEM_CONTENT_NOT_ALLOWED,
new Object[]{scriptSrc}));
+ //"Element content not allowed for lang=javaclass " + scriptSrc);
+
+ // Register the extension namespace if it has not already been
registered.
+ ExtensionNamespaceSupport extNsSpt = null;
+ ExtensionNamespacesManager extNsMgr =
sroot.getExtensionNamespacesManager();
+ if (extNsMgr.namespaceIndex(declNamespace,
+ extNsMgr.getExtensions()) == -1)
+ {
+ if (lang.equals("javaclass"))
+ {
+ if (null == srcURL)
+ {
+ extNsSpt = extNsMgr.defineJavaNamespace(declNamespace);
+ }
+ else if (extNsMgr.namespaceIndex(srcURL,
+ extNsMgr.getExtensions()) == -1)
+ {
+ extNsSpt = extNsMgr.defineJavaNamespace(declNamespace, srcURL);
+ }
+ }
+ else // not java
+ {
+ String handler =
"org.apache.xalan.extensions.ExtensionHandlerGeneral";
+ Object [] args = {declNamespace, this.m_elements, this.m_functions,
+ lang, srcURL, scriptSrc, getSystemId()};
+ extNsSpt = new ExtensionNamespaceSupport(declNamespace, handler,
args);
+ }
+ }
+ if (extNsSpt != null)
+ extNsMgr.registerExtension(extNsSpt);
+ }
+
/**
* This function will be called on top-level elements
* only, just before the transform begins.
@@ -246,10 +321,10 @@
* @param transformer The XSLT TransformerFactory.
*
* @throws TransformerException
- */
+ */
public void runtimeInit(TransformerImpl transformer) throws
TransformerException
{
-
+/* //System.out.println("ElemExtensionDecl.runtimeInit()");
String lang = null;
String srcURL = null;
String scriptSrc = null;
@@ -257,9 +332,8 @@
String declNamespace = getNamespaceForPrefix(prefix);
if (null == declNamespace)
- throw new
TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_NO_NAMESPACE_DECL,
new Object[]{prefix})); //"Prefix " + prefix
- //+ " does not have a corresponding "
- //+ "namespace declaration");
+ throw new
TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_NO_NAMESPACE_DECL,
new Object[]{prefix}));
+ //"Prefix " + prefix does not have a corresponding namespace
declaration");
for (ElemTemplateElement child = getFirstChildElem(); child != null;
child = child.getNextSiblingElem())
@@ -294,11 +368,11 @@
lang = "javaclass";
if (lang.equals("javaclass") && (scriptSrc != null))
- throw new
TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_ELEM_CONTENT_NOT_ALLOWED,
new Object[]{scriptSrc})); //"Element content not allowed for lang=javaclass "
- //+ scriptSrc);
-
- XPathContext liaison = ((XPathContext) transformer.getXPathContext());
- ExtensionsTable etable = liaison.getExtensionsTable();
+ throw new
TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_ELEM_CONTENT_NOT_ALLOWED,
new Object[]{scriptSrc}));
+ //"Element content not allowed for lang=javaclass " + scriptSrc);
+
+ // Instantiate a handler for this extension namespace.
+ ExtensionsTable etable = transformer.getExtensionsTable();
ExtensionHandler nsh = etable.get(declNamespace);
// If we have no prior ExtensionHandler for this namespace, we need to
@@ -337,6 +411,6 @@
}
etable.addExtensionNamespace(declNamespace, nsh);
- }
+ }*/
}
}
1.46.10.1 +44 -8
xml-xalan/java/src/org/apache/xalan/templates/StylesheetRoot.java
Index: StylesheetRoot.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/templates/StylesheetRoot.java,v
retrieving revision 1.46
retrieving revision 1.46.10.1
diff -u -r1.46 -r1.46.10.1
--- StylesheetRoot.java 30 Jan 2002 19:08:01 -0000 1.46
+++ StylesheetRoot.java 5 Jun 2002 16:01:32 -0000 1.46.10.1
@@ -89,6 +89,11 @@
import javax.xml.transform.ErrorListener;
import org.apache.xml.dtm.ref.ExpandedNameTable;
+//dml
+import org.apache.xml.utils.StringVector;
+import org.apache.xalan.extensions.ExtensionNamespaceSupport;
+import org.apache.xalan.extensions.ExtensionHandler;
+import org.apache.xalan.extensions.ExtensionNamespacesManager;
/**
* <meta name="usage" content="general"/>
@@ -126,7 +131,7 @@
* @serial
*/
private Hashtable m_availElems;
-
+
/**
* Creates a StylesheetRoot and retains a pointer to the schema used to
create this
* StylesheetRoot. The schema may be needed later for an
element-available() function call.
@@ -139,7 +144,6 @@
this(listener);
m_availElems = schema.getElemsAvailable();
-
}
/**
@@ -162,6 +166,39 @@
{
return m_availElems;
}
+
+ private ExtensionNamespacesManager m_extNsMgr = null;
+
+ /**
+ * Only instantiate an ExtensionNamespacesManager if one is called for
+ * (i.e., if the stylesheet contains extension functions and/or elements).
+ */
+ public ExtensionNamespacesManager getExtensionNamespacesManager()
+ {
+ if (m_extNsMgr == null)
+ m_extNsMgr = new ExtensionNamespacesManager();
+ return m_extNsMgr;
+ }
+
+ /**
+ * Get the vector of extension namespaces. Used to provide
+ * the extensions table access to a list of extension
+ * namespaces encountered during composition of a stylesheet.
+ */
+ public Vector getExtensions()
+ {
+ return m_extNsMgr != null ? m_extNsMgr.getExtensions() : null;
+ }
+
+/*
+ public void runtimeInit(TransformerImpl transformer) throws
TransformerException
+ {
+ System.out.println("StylesheetRoot.runtimeInit()");
+
+ // try{throw new Exception("StylesheetRoot.runtimeInit()");}
catch(Exception e){e.printStackTrace();}
+
+ }
+*/
//============== Templates Interface ================
@@ -243,12 +280,8 @@
// Calculate the number of this import.
m_globalImportList[j--].recomposeImports();
}
- }
-
-
-
+ }
// Next, we walk the import tree and add all of the recomposable
elements to the vector.
-
int n = getGlobalImportCount();
for (int i = 0; i < n; i++)
@@ -303,7 +336,10 @@
composeTemplates(included);
}
}
-
+ // Attempt to register any remaining unregistered extension namespaces.
+ if (m_extNsMgr != null)
+ m_extNsMgr.registerUnregisteredNamespaces();
+
clearComposeState();
}
No revision
No revision
1.1.2.1 +93 -0
xml-xalan/java/src/org/apache/xalan/templates/Attic/ElemExsltFuncResult.java
1.1.2.1 +242 -0
xml-xalan/java/src/org/apache/xalan/templates/Attic/ElemExsltFunction.java
No revision
No revision
1.131.4.1 +73 -7
xml-xalan/java/src/org/apache/xalan/transformer/TransformerImpl.java
Index: TransformerImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/TransformerImpl.java,v
retrieving revision 1.131
retrieving revision 1.131.4.1
diff -u -r1.131 -r1.131.4.1
--- TransformerImpl.java 5 Apr 2002 19:59:12 -0000 1.131
+++ TransformerImpl.java 5 Jun 2002 16:01:32 -0000 1.131.4.1
@@ -130,6 +130,10 @@
import org.xml.sax.ext.DeclHandler;
import org.xml.sax.ext.LexicalHandler;
+//dml
+import org.apache.xpath.ExtensionsProvider;
+import org.apache.xalan.extensions.ExtensionsTable;
+
/**
* <meta name="usage" content="advanced"/>
* This class implements the
@@ -137,7 +141,7 @@
* representation of the transformation execution.</p>
*/
public class TransformerImpl extends Transformer
- implements Runnable, DTMWSFilter
+ implements Runnable, DTMWSFilter, ExtensionsProvider
{
// Synch object to gaurd against setting values from the TrAX interface
@@ -382,7 +386,7 @@
private Stack m_modes = new Stack();
//==========================================================
- // SECTION: Constructors
+ // SECTION: Constructor
//==========================================================
/**
@@ -391,12 +395,73 @@
* @param stylesheet The root of the stylesheet tree.
*/
public TransformerImpl(StylesheetRoot stylesheet)
+ // throws javax.xml.transform.TransformerException
{
-
setStylesheet(stylesheet);
setXPathContext(new XPathContext(this));
getXPathContext().setNamespaceContext(stylesheet);
}
+
+ // ================ ExtensionsTable ===================
+
+ /**
+ * The table of ExtensionHandlers.
+ */
+ private ExtensionsTable m_extensionsTable = null;
+
+ /**
+ * Get the extensions table object.
+ *
+ * @return The extensions table.
+ */
+ public ExtensionsTable getExtensionsTable()
+ {
+ return m_extensionsTable;
+ }
+
+ /**
+ * If the stylesheet contains extensions, set the extensions table object.
+ *
+ *
+ * @param sroot The stylesheet.
+ * @throws javax.xml.transform.TransformerException
+ */
+ void setExtensionsTable(StylesheetRoot sroot)
+ throws javax.xml.transform.TransformerException
+ {
+ try
+ {
+ if (sroot.getExtensions() != null)
+ m_extensionsTable = new ExtensionsTable(sroot);
+ }
+ catch (javax.xml.transform.TransformerException te)
+ {te.printStackTrace();}
+ }
+
+ //== Implementation of the XPath ExtensionsProvider interface.
+
+ public boolean functionAvailable(String ns, String funcName)
+ throws javax.xml.transform.TransformerException
+ {
+ return getExtensionsTable().functionAvailable(ns, funcName);
+ }
+
+ public boolean elementAvailable(String ns, String elemName)
+ throws javax.xml.transform.TransformerException
+ {
+ return getExtensionsTable().elementAvailable(ns, elemName);
+ }
+
+ public Object extFunction(String ns, String funcName,
+ Vector argVec, Object methodKey)
+ throws javax.xml.transform.TransformerException
+ {//System.out.println("TransImpl.extFunction() " + ns + " " + funcName +"
" + getExtensionsTable());
+ return getExtensionsTable().extFunction(ns, funcName,
+ argVec, methodKey,
+
getXPathContext().getExpressionContext());
+ }
+
+ //=========================
/**
* Reset the state. This needs to be called after a process() call
@@ -1068,6 +1133,7 @@
public void transformNode(int node, Result outputTarget)
throws TransformerException
{
+
ContentHandler handler = createResultContentHandler(outputTarget);
@@ -1089,7 +1155,8 @@
*/
public void transformNode(int node) throws TransformerException
{
-
+ //dml
+ setExtensionsTable(getStylesheet());
// Make sure we're not writing to the same output content handler.
synchronized (m_outputContentHandler)
{
@@ -1126,8 +1193,7 @@
}
}
}
-
- // ===========
+ // ===========
// System.out.println("Calling applyTemplateToNode -
"+Thread.currentThread().getName());
DTMIterator dtmIter = new
org.apache.xpath.axes.SelfIteratorNoPredicate();
dtmIter.setRoot(node, xctxt);
@@ -1589,7 +1655,7 @@
* <p>If we encounter a variable
* that is already defined in the variable stack, we ignore it. This
* is because the second variable definition will be at a lower import
- * precedence. Presumably, global variables at the same import precedence
+ * precedence. Presumably, global"variables at the same import precedence
* with the same name will have been caught during the recompose process.
* <p>However, if we encounter a parameter that is already defined in the
* variable stack, we need to see if this is a parameter whose value was
No revision
No revision
1.38.2.1 +0 -31 xml-xalan/java/src/org/apache/xpath/XPathContext.java
Index: XPathContext.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/XPathContext.java,v
retrieving revision 1.38
retrieving revision 1.38.2.1
diff -u -r1.38 -r1.38.2.1
--- XPathContext.java 9 May 2002 21:19:40 -0000 1.38
+++ XPathContext.java 5 Jun 2002 16:01:32 -0000 1.38.2.1
@@ -92,9 +92,6 @@
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.dom.DOMSource;
-// Temporary!!!
-import org.apache.xalan.extensions.ExtensionsTable;
-
import javax.xml.transform.SourceLocator;
import javax.xml.transform.Source;
import javax.xml.transform.ErrorListener;
@@ -462,34 +459,6 @@
public Object getOwnerObject()
{
return m_owner;
- }
-
- // ================ extensionsTable ===================
-
- /**
- * The table of Extension Handlers.
- */
- private ExtensionsTable m_extensionsTable = new ExtensionsTable();
-
- /**
- * Get the extensions table object.
- *
- * @return The extensions table.
- */
- public ExtensionsTable getExtensionsTable()
- {
- return m_extensionsTable;
- }
-
- /**
- * Set the extensions table object.
- *
- *
- * @param table The extensions table object.
- */
- void setExtensionsTable(ExtensionsTable table)
- {
- m_extensionsTable = table;
}
// ================ VarStack ===================
No revision
No revision
1.1.2.1 +87 -0
xml-xalan/java/src/org/apache/xpath/Attic/ExtensionsProvider.java
No revision
No revision
1.7.14.1 +4 -3
xml-xalan/java/src/org/apache/xpath/functions/FuncExtElementAvailable.java
Index: FuncExtElementAvailable.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xpath/functions/FuncExtElementAvailable.java,v
retrieving revision 1.7
retrieving revision 1.7.14.1
diff -u -r1.7 -r1.7.14.1
--- FuncExtElementAvailable.java 12 Jun 2001 19:16:33 -0000 1.7
+++ FuncExtElementAvailable.java 5 Jun 2002 16:01:33 -0000 1.7.14.1
@@ -68,6 +68,7 @@
import org.apache.xpath.XPathContext;
import org.apache.xpath.XPath;
+import org.apache.xpath.ExtensionsProvider;
import org.apache.xpath.objects.XObject;
import org.apache.xpath.objects.XBoolean;
@@ -128,9 +129,9 @@
}
else
{
- ExtensionsTable etable = xctxt.getExtensionsTable();
-
- return etable.elementAvailable(namespace, methName)
+ //dml
+ ExtensionsProvider extProvider =
(ExtensionsProvider)xctxt.getOwnerObject();
+ return extProvider.elementAvailable(namespace, methName)
? XBoolean.S_TRUE : XBoolean.S_FALSE;
}
}
1.14.4.1 +16 -6
xml-xalan/java/src/org/apache/xpath/functions/FuncExtFunction.java
Index: FuncExtFunction.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xpath/functions/FuncExtFunction.java,v
retrieving revision 1.14
retrieving revision 1.14.4.1
diff -u -r1.14 -r1.14.4.1
--- FuncExtFunction.java 22 Mar 2002 01:04:44 -0000 1.14
+++ FuncExtFunction.java 5 Jun 2002 16:01:33 -0000 1.14.4.1
@@ -60,7 +60,9 @@
import org.apache.xpath.Expression;
import org.apache.xpath.XPathContext;
+import org.apache.xpath.ExtensionsProvider;
import org.apache.xpath.objects.*;
+import org.apache.xalan.transformer.TransformerImpl;
import org.apache.xalan.extensions.ExtensionsTable;
import org.apache.xml.dtm.DTMIterator;
@@ -133,6 +135,15 @@
}
}
}
+ //called by StylesheetHandler.createXPath() -- dml
+ public String getNamespace()
+ {
+ return m_namespace;
+ }
+ public String getFunctionName()
+ {
+ return m_extensionName;
+ }
/**
* Create a new FuncExtFunction based on the qualified name of the
extension,
@@ -148,7 +159,7 @@
public FuncExtFunction(java.lang.String namespace,
java.lang.String extensionName, Object methodKey)
{
-
+ //try{throw new Exception("FuncExtFunction() " + namespace + " " +
extensionName);} catch (Exception e){e.printStackTrace();}
m_namespace = namespace;
m_extensionName = extensionName;
m_methodKey = methodKey;
@@ -178,11 +189,10 @@
argVec.addElement(xobj);
}
-
- ExtensionsTable etable = xctxt.getExtensionsTable();
- Object val = etable.extFunction(m_namespace, m_extensionName, argVec,
- m_methodKey,
- xctxt.getExpressionContext());
+ //dml
+ ExtensionsProvider extProvider =
(ExtensionsProvider)xctxt.getOwnerObject();
+ Object val = extProvider.extFunction(m_namespace, m_extensionName,
+ argVec, m_methodKey);
if (null != val)
{
1.6.14.1 +6 -4
xml-xalan/java/src/org/apache/xpath/functions/FuncExtFunctionAvailable.java
Index: FuncExtFunctionAvailable.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xpath/functions/FuncExtFunctionAvailable.java,v
retrieving revision 1.6
retrieving revision 1.6.14.1
diff -u -r1.6 -r1.6.14.1
--- FuncExtFunctionAvailable.java 12 Jun 2001 19:16:34 -0000 1.6
+++ FuncExtFunctionAvailable.java 5 Jun 2002 16:01:33 -0000 1.6.14.1
@@ -58,7 +58,8 @@
import org.apache.xml.utils.PrefixResolver;
import org.apache.xalan.templates.Constants;
-import org.apache.xalan.extensions.ExtensionsTable;
+//import org.apache.xalan.transformer.TransformerImpl;
+//import org.apache.xalan.extensions.ExtensionsTable;
//import org.w3c.dom.Node;
@@ -66,6 +67,7 @@
import org.apache.xpath.XPathContext;
import org.apache.xpath.XPath;
+import org.apache.xpath.ExtensionsProvider;
import org.apache.xpath.compiler.Keywords;
import org.apache.xpath.objects.XObject;
import org.apache.xpath.objects.XBoolean;
@@ -123,9 +125,9 @@
}
else
{
- ExtensionsTable etable = xctxt.getExtensionsTable();
-
- return etable.functionAvailable(namespace, methName)
+ //dml
+ ExtensionsProvider extProvider =
(ExtensionsProvider)xctxt.getOwnerObject();
+ return extProvider.functionAvailable(namespace, methName)
? XBoolean.S_TRUE : XBoolean.S_FALSE;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]