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]

Reply via email to