You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mm...@locus.apache.org on 2000/10/05 01:20:09 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/processor StylesheetHandler.java XSLTElementDef.java XSLTSchema.java

mmidy       00/10/04 16:20:09

  Modified:    java/src/org/apache/xalan/processor StylesheetHandler.java
                        XSLTElementDef.java XSLTSchema.java
  Log:
  Handle xsl elements from an unsupported XSL version.
  
  Revision  Changes    Path
  1.9       +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.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- StylesheetHandler.java	2000/08/08 00:27:22	1.8
  +++ StylesheetHandler.java	2000/10/04 23:20:08	1.9
  @@ -62,6 +62,7 @@
   import org.apache.xalan.templates.ElemTemplateElement;
   import org.apache.xalan.templates.StylesheetRoot;
   import org.apache.xalan.templates.Stylesheet;
  +import org.apache.xalan.templates.ElemUnknown;
   import org.apache.xalan.utils.NodeConsumer;
   import trax.ProcessorException;
   import trax.TemplatesBuilder;
  @@ -337,8 +338,12 @@
       XSLTElementDef def = currentProcessor.getElemDef();
       XSLTElementProcessor elemProcessor = def.getProcessorFor(uri, localName);
       
  +    if(null == elemProcessor && Double.valueOf(getStylesheet().getVersion()).doubleValue() > Constants.XSLTVERSUPPORTED)
  +    {
  +      elemProcessor = def.getProcessorForUnknown(uri, localName);
  +    }
       if(null == elemProcessor)
  -      error(rawName+" is not allowed in this position in the stylesheet!", null);
  +        error(rawName+" is not allowed in this position in the stylesheet!", null);     
       
       return elemProcessor;
     }
  
  
  
  1.5       +21 -0     xml-xalan/java/src/org/apache/xalan/processor/XSLTElementDef.java
  
  Index: XSLTElementDef.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/processor/XSLTElementDef.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XSLTElementDef.java	2000/08/29 18:14:00	1.4
  +++ XSLTElementDef.java	2000/10/04 23:20:08	1.5
  @@ -249,6 +249,27 @@
       }
       return lreDef;
     }
  +  
  +  /**
  +   * Given an unknown element , get the processor 
  +   * for the element
  +   */
  +  XSLTElementProcessor getProcessorForUnknown( String uri, String localName )
  +  {
  +    XSLTElementProcessor lreDef = null; // return value
  +    if(null == m_elements)
  +      return null;
  +    int n = m_elements.length;
  +    for(int i = 0; i < n; i++)
  +    {
  +      XSLTElementDef def = m_elements[i];
  +      if(def.m_name.equals("unknown"))
  +      {
  +        return def.m_elementProcessor;
  +      }
  +    }
  +    return null;
  +  }  
       
     /**
      * The allowed attributes for this type.
  
  
  
  1.10      +20 -7     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.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- XSLTSchema.java	2000/10/03 15:41:08	1.9
  +++ XSLTSchema.java	2000/10/04 23:20:08	1.10
  @@ -254,9 +254,9 @@
       XSLTAttributeDef xslResultAttr
         = new XSLTAttributeDef(Constants.S_XSLNAMESPACEURL, "*", XSLTAttributeDef.T_CDATA, false);
   
  -    XSLTElementDef[] templateElements = new XSLTElementDef[20];
  -    XSLTElementDef[] templateElementsAndParams = new XSLTElementDef[21];
  -    XSLTElementDef[] templateElementsAndSort = new XSLTElementDef[21];
  +    XSLTElementDef[] templateElements = new XSLTElementDef[21];
  +    XSLTElementDef[] templateElementsAndParams = new XSLTElementDef[22];
  +    XSLTElementDef[] templateElementsAndSort = new XSLTElementDef[22];
       XSLTElementDef[] charTemplateElements = new XSLTElementDef[15];
   
       XSLTElementDef resultElement
  @@ -270,6 +270,18 @@
                              xslVersionAttr, xslResultAttr, resultAttr}, 
                              new ProcessorLRE(), 
                              ElemLiteralResult.class /* class object */ );
  +    
  +    XSLTElementDef unknownElement
  +      = new XSLTElementDef(null, "unknown", 
  +                           null /*alias */, 
  +                           templateElementsAndParams /* elements */,
  +                           new XSLTAttributeDef[] {
  +                           xslExcludeResultPrefixesAttr, 
  +                           xslExtensionElementPrefixesAttr,
  +                           xslUseAttributeSetsAttr, 
  +                           xslVersionAttr, xslResultAttr, resultAttr}, 
  +                           new ProcessorUnknown(), 
  +                           ElemUnknown.class /* class object */ );
                              
       XSLTElementDef xslValueOf 
         = new XSLTElementDef(Constants.S_XSLNAMESPACEURL, "value-of", 
  @@ -487,6 +499,7 @@
       templateElements[i++] = xslElement;
       templateElements[i++] = xslAttribute;
       templateElements[i++] = resultElement;
  +    templateElements[i++] = unknownElement;
       
       int k;
       for(k = 0; k < i; k++)
  @@ -537,7 +550,7 @@
                  
       XSLTElementDef[] topLevelElements 
         = new XSLTElementDef[]
  -         {includeDef, importDef, resultElement, whiteSpaceOnly,
  +         {includeDef, importDef, resultElement, whiteSpaceOnly, unknownElement,
   
            new XSLTElementDef(Constants.S_XSLNAMESPACEURL, "strip-space", 
            null /*alias */, 
  @@ -672,15 +685,15 @@
                              );
   
       importDef.setElements(
  -      new XSLTElementDef[] {stylesheetElemDef, resultElement});
  +      new XSLTElementDef[] {stylesheetElemDef, resultElement, unknownElement});
       
       includeDef.setElements(
  -      new XSLTElementDef[] {stylesheetElemDef, resultElement});
  +      new XSLTElementDef[] {stylesheetElemDef, resultElement, unknownElement});
   
       build(null, 
             null, 
             null, 
  -          new XSLTElementDef[] {stylesheetElemDef, whiteSpaceOnly, resultElement},
  +          new XSLTElementDef[] {stylesheetElemDef, whiteSpaceOnly, resultElement, unknownElement},
             null, 
             new ProcessorStylesheetDoc(), /* ContentHandler */
             null /* class object */