sboag       00/12/05 21:28:13

  Modified:    java/src/org/apache/xalan/processor XSLTSchema.java
  Log:
  Add foregn attribute handling to xsl:output.
  
  Revision  Changes    Path
  1.14      +127 -103  
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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- XSLTSchema.java   2000/11/28 17:25:50     1.13
  +++ XSLTSchema.java   2000/12/06 05:28:12     1.14
  @@ -57,6 +57,7 @@
   package org.apache.xalan.processor;
   
   import java.util.Hashtable;
  +
   import org.apache.xalan.templates.*;
   import org.apache.xml.utils.QName;
   
  @@ -88,6 +89,8 @@
       XSLTAttributeDef elementsAttr = new XSLTAttributeDef(null, "elements",
                                         XSLTAttributeDef.T_SIMPLEPATTERNLIST,
                                         true);
  +    // XSLTAttributeDef anyNamespacedAttr = new XSLTAttributeDef("*", "*",
  +    //                                XSLTAttributeDef.T_CDATA, false);
       XSLTAttributeDef methodAttr = new XSLTAttributeDef(null, "method",
                                       XSLTAttributeDef.T_QNAME, false);
       XSLTAttributeDef versionAttr = new XSLTAttributeDef(null, "version",
  @@ -286,21 +289,21 @@
                                                    xslResultAttr,
                                                    resultAttr }, new 
ProcessorUnknown(),
                                                                  
ElemUnknown.class /* class object */);
  -    XSLTElementDef xslValueOf =
  -      new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "value-of",
  -                         null /*alias */, null /* elements */,
  -                         new XSLTAttributeDef[]{ selectAttrRequired,
  -                                                 disableOutputEscapingAttr 
}, new ProcessorTemplateElem(),
  -                                                                             
 ElemValueOf.class /* class object */);
  -    XSLTElementDef xslCopyOf = new XSLTElementDef(this, 
Constants.S_XSLNAMESPACEURL,
  -                                 "copy-of", null /*alias */,
  -                                 null /* elements */,
  +    XSLTElementDef xslValueOf = new XSLTElementDef(this,
  +                                  Constants.S_XSLNAMESPACEURL, "value-of",
  +                                  null /*alias */, null /* elements */,
  +                                  new XSLTAttributeDef[]{ selectAttrRequired,
  +                                                          
disableOutputEscapingAttr }, new ProcessorTemplateElem(),
  +                                                                             
          ElemValueOf.class /* class object */);
  +    XSLTElementDef xslCopyOf = new XSLTElementDef(this,
  +                                 Constants.S_XSLNAMESPACEURL, "copy-of",
  +                                 null /*alias */, null /* elements */,
                                    new XSLTAttributeDef[]{ selectAttrRequired 
},
                                    new ProcessorTemplateElem(),
                                    ElemCopyOf.class /* class object */);
  -    XSLTElementDef xslNumber = new XSLTElementDef(this, 
Constants.S_XSLNAMESPACEURL,
  -                                 "number", null /*alias */,
  -                                 null /* elements */,
  +    XSLTElementDef xslNumber = new XSLTElementDef(this,
  +                                 Constants.S_XSLNAMESPACEURL, "number",
  +                                 null /*alias */, null /* elements */,
                                    new XSLTAttributeDef[]{ levelAttr,
                                                            countAttr,
                                                            fromAttr,
  @@ -314,7 +317,8 @@
   
       // <!-- xsl:sort cannot occur after any other elements or
       // any non-whitespace character -->
  -    XSLTElementDef xslSort = new XSLTElementDef(this, 
Constants.S_XSLNAMESPACEURL,
  +    XSLTElementDef xslSort = new XSLTElementDef(this,
  +                                                Constants.S_XSLNAMESPACEURL,
                                                   "sort", null /*alias */,
                                                   null /* elements */,
                                                   new XSLTAttributeDef[]{
  @@ -324,32 +328,35 @@
                                                     orderAttr,
                                                     caseOrderAttr }, new 
ProcessorTemplateElem(),
                                                                      
ElemSort.class /* class object */);
  -    XSLTElementDef xslWithParam =
  -      new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "with-param",
  -                         null /*alias */, templateElements /* elements */,  
// %template;>
  +    XSLTElementDef xslWithParam = new XSLTElementDef(this,
  +                                    Constants.S_XSLNAMESPACEURL,
  +                                    "with-param", null /*alias */,
  +                                    templateElements /* elements */,  // 
%template;>
                                       new XSLTAttributeDef[]{ nameAttrRequired,
                                                               selectAttrOpt }, 
new ProcessorTemplateElem(),
                                                                                
ElemWithParam.class /* class object */);
  -    XSLTElementDef xslApplyTemplates =
  -      new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, 
"apply-templates",
  -                         null /*alias */, new XSLTElementDef[]{ xslSort,
  -                                                                xslWithParam 
} /* elements */, new XSLTAttributeDef[]{
  -                                                                  
selectAttrDefNode,
  -                                                                  modeAttr 
}, new ProcessorTemplateElem(),
  -                                                                             
 ElemApplyTemplates.class /* class object */);
  +    XSLTElementDef xslApplyTemplates = new XSLTElementDef(this,
  +                                         Constants.S_XSLNAMESPACEURL,
  +                                         "apply-templates", null /*alias */,
  +                                         new XSLTElementDef[]{ xslSort,
  +                                                               xslWithParam 
} /* elements */, new XSLTAttributeDef[]{
  +                                                                 
selectAttrDefNode,
  +                                                                 modeAttr }, 
new ProcessorTemplateElem(),
  +                                                                             
ElemApplyTemplates.class /* class object */);
       XSLTElementDef xslApplyImports =
         new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "apply-imports",
                            null /*alias */, null /* elements */,
                            new XSLTAttributeDef[]{},
                            new ProcessorTemplateElem(),
                            ElemApplyImport.class /* class object */);
  -    XSLTElementDef xslForEach =
  -      new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "for-each",
  -                         null /*alias */, templateElementsAndSort,  // 
(#PCDATA %instructions; %result-elements; | xsl:sort)*
  +    XSLTElementDef xslForEach = new XSLTElementDef(this,
  +                                  Constants.S_XSLNAMESPACEURL, "for-each",
  +                                  null /*alias */, templateElementsAndSort,  
// (#PCDATA %instructions; %result-elements; | xsl:sort)*
                                     new XSLTAttributeDef[]{ selectAttrRequired,
                                                             spaceAttr }, new 
ProcessorTemplateElem(),
                                                                          
ElemForEach.class /* class object */);
  -    XSLTElementDef xslIf = new XSLTElementDef(this, 
Constants.S_XSLNAMESPACEURL,
  +    XSLTElementDef xslIf = new XSLTElementDef(this,
  +                                              Constants.S_XSLNAMESPACEURL,
                                                 "if", null /*alias */,
                                                 templateElements /* elements 
*/,  // %template;
                                                 new XSLTAttributeDef[]{
  @@ -363,21 +370,24 @@
                                                     testAttrRequired,
                                                     spaceAttr }, new 
ProcessorTemplateElem(),
                                                                  
ElemWhen.class /* class object */);
  -    XSLTElementDef xslOtherwise =
  -      new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "otherwise",
  -                         null /*alias */, templateElements /* elements */,  
// %template;>
  +    XSLTElementDef xslOtherwise = new XSLTElementDef(this,
  +                                    Constants.S_XSLNAMESPACEURL, "otherwise",
  +                                    null /*alias */,
  +                                    templateElements /* elements */,  // 
%template;>
                                       new XSLTAttributeDef[]{ spaceAttr },
                                       new ProcessorTemplateElem(),
                                       ElemOtherwise.class /* class object */);
  -    XSLTElementDef xslChoose = new XSLTElementDef(this, 
Constants.S_XSLNAMESPACEURL,
  -                                 "choose", null /*alias */,
  +    XSLTElementDef xslChoose = new XSLTElementDef(this,
  +                                 Constants.S_XSLNAMESPACEURL, "choose",
  +                                 null /*alias */,
                                    new XSLTElementDef[]{ xslWhen,
                                                          xslOtherwise } /* 
elements */, new XSLTAttributeDef[]{ spaceAttr },
                                                                                
         new ProcessorTemplateElem(),
                                                                                
         ElemChoose.class /* class object */);
  -    XSLTElementDef xslAttribute =
  -      new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "attribute",
  -                         null /*alias */, charTemplateElements /* elements 
*/,  // %char-template;>
  +    XSLTElementDef xslAttribute = new XSLTElementDef(this,
  +                                    Constants.S_XSLNAMESPACEURL, "attribute",
  +                                    null /*alias */,
  +                                    charTemplateElements /* elements */,  // 
%char-template;>
                                       new XSLTAttributeDef[]{ nameAVTRequired,
                                                               namespaceAVTOpt,
                                                               spaceAttr }, new 
ProcessorTemplateElem(),
  @@ -389,14 +399,16 @@
                            new XSLTAttributeDef[]{ nameAttrRequired },
                            new ProcessorTemplateElem(),
                            ElemCallTemplate.class /* class object */);
  -    XSLTElementDef xslVariable =
  -      new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "variable",
  -                         null /*alias */, templateElements /* elements */,  
// %template;>
  +    XSLTElementDef xslVariable = new XSLTElementDef(this,
  +                                   Constants.S_XSLNAMESPACEURL, "variable",
  +                                   null /*alias */,
  +                                   templateElements /* elements */,  // 
%template;>
                                      new XSLTAttributeDef[]{ nameAttrRequired,
                                                              selectAttrOpt }, 
new ProcessorTemplateElem(),
                                                                               
ElemVariable.class /* class object */);
  -    XSLTElementDef xslParam = new XSLTElementDef(this, 
Constants.S_XSLNAMESPACEURL,
  -                                "param", null /*alias */,
  +    XSLTElementDef xslParam = new XSLTElementDef(this,
  +                                Constants.S_XSLNAMESPACEURL, "param",
  +                                null /*alias */,
                                   templateElements /* elements */,  // 
%template;>
                                   new XSLTAttributeDef[]{ nameAttrRequired,
                                                           selectAttrOpt }, new 
ProcessorTemplateElem(),
  @@ -416,17 +428,19 @@
                                                     nameAVTRequired,
                                                     spaceAttr }, new 
ProcessorTemplateElem(),
                                                                  ElemPI.class 
/* class object */);
  -    XSLTElementDef xslElement =
  -      new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "element",
  -                         null /*alias */, templateElements /* elements */,  
// %template;
  +    XSLTElementDef xslElement = new XSLTElementDef(this,
  +                                  Constants.S_XSLNAMESPACEURL, "element",
  +                                  null /*alias */,
  +                                  templateElements /* elements */,  // 
%template;
                                     new XSLTAttributeDef[]{ nameAVTRequired,
                                                             namespaceAVTOpt,
                                                             
useAttributeSetsAttr,
                                                             spaceAttr }, new 
ProcessorTemplateElem(),
                                                                          
ElemElement.class /* class object */);
  -    XSLTElementDef xslComment =
  -      new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "comment",
  -                         null /*alias */, charTemplateElements /* elements 
*/,  // %char-template;>
  +    XSLTElementDef xslComment = new XSLTElementDef(this,
  +                                  Constants.S_XSLNAMESPACEURL, "comment",
  +                                  null /*alias */,
  +                                  charTemplateElements /* elements */,  // 
%char-template;>
                                     new XSLTAttributeDef[]{ spaceAttr },
                                     new ProcessorTemplateElem(),
                                     ElemComment.class /* class object */);
  @@ -437,15 +451,17 @@
                                                     spaceAttr,
                                                     useAttributeSetsAttr }, 
new ProcessorTemplateElem(),
                                                                             
ElemCopy.class /* class object */);
  -    XSLTElementDef xslMessage =
  -      new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "message",
  -                         null /*alias */, templateElements /* elements */,  
// %template;>
  -                                  new XSLTAttributeDef[]{terminateAttr},
  +    XSLTElementDef xslMessage = new XSLTElementDef(this,
  +                                  Constants.S_XSLNAMESPACEURL, "message",
  +                                  null /*alias */,
  +                                  templateElements /* elements */,  // 
%template;>
  +                                  new XSLTAttributeDef[]{ terminateAttr },
                                     new ProcessorTemplateElem(),
                                     ElemMessage.class /* class object */);
  -    XSLTElementDef xslFallback =
  -      new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "fallback",
  -                         null /*alias */, templateElements /* elements */,  
// %template;>
  +    XSLTElementDef xslFallback = new XSLTElementDef(this,
  +                                   Constants.S_XSLNAMESPACEURL, "fallback",
  +                                   null /*alias */,
  +                                   templateElements /* elements */,  // 
%template;>
                                      new XSLTAttributeDef[]{ spaceAttr },
                                      new ProcessorTemplateElem(),
                                      ElemFallback.class /* class object */);
  @@ -511,15 +527,15 @@
       charTemplateElements[i++] = xslMessage;
       charTemplateElements[i++] = xslFallback;
   
  -    XSLTElementDef importDef = new XSLTElementDef(this, 
Constants.S_XSLNAMESPACEURL,
  -                                 "import", null /*alias */,
  -                                 null /* elements */,
  +    XSLTElementDef importDef = new XSLTElementDef(this,
  +                                 Constants.S_XSLNAMESPACEURL, "import",
  +                                 null /*alias */, null /* elements */,
                                    new XSLTAttributeDef[]{ hrefAttr },  // 
EMPTY
                                    new ProcessorImport(),
                                    null /* class object */);
  -    XSLTElementDef includeDef =
  -      new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "include",
  -                         null /*alias */, null /* elements */,  // EMPTY
  +    XSLTElementDef includeDef = new XSLTElementDef(this,
  +                                  Constants.S_XSLNAMESPACEURL, "include",
  +                                  null /*alias */, null /* elements */,  // 
EMPTY
                                     new XSLTAttributeDef[]{ hrefAttr },
                                     new ProcessorInclude(),
                                     null /* class object */);
  @@ -533,44 +549,48 @@
                                                                   
Constants.S_XSLNAMESPACEURL,
                                                                   
"strip-space",
                                                                   null /*alias 
*/,
  -                                                                null /* 
elements */,  // EMPTY
  -                                                                             
                    new XSLTAttributeDef[]{ elementsAttr },
  -                                                                             
                    new ProcessorStripSpace(),
  -                                                                             
                    null /* class object */),
  +                                                                null /* 
elements */,
  +                                                                new 
XSLTAttributeDef[]{
  +                                                                elementsAttr 
},
  +                                                                new 
ProcessorStripSpace(),
  +                                                                null /* 
class object */),
                                                                 new 
XSLTElementDef(
                                                                   this,
                                                                   
Constants.S_XSLNAMESPACEURL,
                                                                   
"preserve-space",
                                                                   null /*alias 
*/,
  -                                                                null /* 
elements */,  // EMPTY
  -                                                                             
    new XSLTAttributeDef[]{ elementsAttr },
  -                                                                             
    new ProcessorPreserveSpace(),
  -                                                                             
    null /* class object */),
  +                                                                null /* 
elements */,
  +                                                                new 
XSLTAttributeDef[]{
  +                                                                elementsAttr 
},
  +                                                                new 
ProcessorPreserveSpace(),
  +                                                                null /* 
class object */),
                                                                 new 
XSLTElementDef(
                                                                   this,
                                                                   
Constants.S_XSLNAMESPACEURL,
                                                                   "output",
                                                                   null /*alias 
*/,
  -                                                                null /* 
elements */,  // EMPTY
  -                                                                             
    new XSLTAttributeDef[]{
  -                                                                             
      methodAttr,
  -                                                                             
      versionAttr,
  -                                                                             
      encodingAttr,
  -                                                                             
      omitXmlDeclarationAttr,
  -                                                                             
      standaloneAttr,
  -                                                                             
      doctypePublicAttr,
  -                                                                             
      doctypeSystemAttr,
  -                                                                             
      cdataSectionElementsAttr,
  -                                                                             
      indentAttr,
  -                                                                             
      mediaTypeAttr }, new ProcessorOutputElem(), null /* class object */), new 
XSLTElementDef(
  -                                                                             
        this,
  -                                                                             
        Constants.S_XSLNAMESPACEURL,
  -                                                                             
        "key",
  -                                                                             
        null /*alias */,
  -                                                                             
        null /* elements */,  // EMPTY
  -                                                                             
                                                                                
                                     new XSLTAttributeDef[]{ nameAttrRequired,
  -                                                                             
                                                                                
                                                             matchAttrRequired,
  -                                                                             
                                                                                
                                                             useAttr }, new 
ProcessorKey(), null /* class object */),
  +                                                                null /* 
elements */,
  +                                                                new 
XSLTAttributeDef[]{
  +                                                                  methodAttr,
  +                                                                  
versionAttr,
  +                                                                  
encodingAttr,
  +                                                                  
omitXmlDeclarationAttr,
  +                                                                  
standaloneAttr,
  +                                                                  
doctypePublicAttr,
  +                                                                  
doctypeSystemAttr,
  +                                                                  
cdataSectionElementsAttr,
  +                                                                  indentAttr,
  +                                                                  
mediaTypeAttr,
  +                                                                  
XSLTAttributeDef.m_foreignAttr }, 
  +                                                                  new 
ProcessorOutputElem(), null /* class object */), new XSLTElementDef(
  +                                                                    this,
  +                                                                    
Constants.S_XSLNAMESPACEURL,
  +                                                                    "key",
  +                                                                    null 
/*alias */,
  +                                                                    null /* 
elements */,  // EMPTY
  +                                                                             
                                                                                
                                                                                
                                        new XSLTAttributeDef[]{ 
nameAttrRequired,
  +                                                                             
                                                                                
                                                                                
                                                                
matchAttrRequired,
  +                                                                             
                                                                                
                                                                                
                                                                useAttr }, new 
ProcessorKey(), null /* class object */),
                                                                 new 
XSLTElementDef(
                                                                   this,
                                                                   
Constants.S_XSLNAMESPACEURL,
  @@ -638,8 +658,8 @@
                                                                       
"namespace-alias",
                                                                       null 
/*alias */,
                                                                       null /* 
elements */,  // EMPTY
  -                                                                             
                                                                                
                                                                                
                                                                 new 
XSLTAttributeDef[]{ stylesheetPrefixAttr,
  -                                                                             
                                                                                
                                                                                
                                                                                
         resultPrefixAttr }, new ProcessorNamespaceAlias(), null /* class 
object */),
  +                                                                             
                                                                                
                                                                                
                                                                       new 
XSLTAttributeDef[]{ stylesheetPrefixAttr,
  +                                                                             
                                                                                
                                                                                
                                                                                
               resultPrefixAttr }, new ProcessorNamespaceAlias(), null /* class 
object */),
                                                                 new 
XSLTElementDef(
                                                                   this,
                                                                   
Constants.S_BUILTIN_EXTENSIONS_URL,
  @@ -660,9 +680,9 @@
                                                                           
true),
                                                                         new 
XSLTAttributeDef(null, "src", XSLTAttributeDef.T_URL, false) }, new 
ProcessorLRE(),
                                                                                
                                                             
ElemExtensionScript.class /* class object */) },  // 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 */) };
  +                                                                             
                                                                                
                                                                                
                                                                                
                   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 */) };
       XSLTAttributeDef excludeResultPrefixesAttr =
         new XSLTAttributeDef(null, "exclude-result-prefixes",
                              XSLTAttributeDef.T_STRINGLIST, false);
  @@ -675,16 +695,18 @@
                                                "version",
                                                XSLTAttributeDef.T_NMTOKEN,
                                                true);
  -    XSLTElementDef stylesheetElemDef =
  -      new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "stylesheet",
  -                         "transform", topLevelElements,
  -                         new XSLTAttributeDef[]{ 
extensionElementPrefixesAttr,
  -                                                 excludeResultPrefixesAttr,
  -                                                 idAttr,
  -                                                 versionAttrRequired,
  -                                                 spaceAttr }, new 
ProcessorStylesheetElement(),  /* ContentHandler */
  -                                                                             
                                                                                
            null  /* class object */
  -                                                                             
                                                                                
              );
  +    XSLTElementDef stylesheetElemDef = new XSLTElementDef(this,
  +                                         Constants.S_XSLNAMESPACEURL,
  +                                         "stylesheet", "transform",
  +                                         topLevelElements,
  +                                         new XSLTAttributeDef[]{
  +                                           extensionElementPrefixesAttr,
  +                                           excludeResultPrefixesAttr,
  +                                           idAttr,
  +                                           versionAttrRequired,
  +                                           spaceAttr }, new 
ProcessorStylesheetElement(),  /* ContentHandler */
  +                                                                             
                                                                                
                  null  /* class object */
  +                                                                             
                                                                                
                    );
   
       importDef.setElements(new XSLTElementDef[]{ stylesheetElemDef,
                                                   resultElement,
  @@ -704,8 +726,8 @@
     /**
      * A hashtable of all available built-in elements for use by the 
element-available
      * function.
  +   * TODO:  When we convert to Java2, this should be a Set.
      */
  -  // TODO:  When we convert to Java2, this should be a Set.
     private Hashtable m_availElems = new Hashtable();
   
     /**
  @@ -720,6 +742,8 @@
     /**
      * Determines whether the passed element name is present in the list of 
available elements.
      * @param elemName The name of the element to look up.
  +   *
  +   * @return true if an element corresponding to elemName is available.
      */
     public boolean elementAvailable(QName elemName)
     {
  
  
  

Reply via email to