mmidy 01/03/29 14:39:34
Modified: java/src/org/apache/xalan/processor
ProcessorStylesheetElement.java
ProcessorTemplateElem.java StylesheetHandler.java
XSLTElementDef.java XSLTElementProcessor.java
XSLTSchema.java
Log:
Try to catch element order and required element errors during stylesheet
object creation. This new code adds an order and a required field to
XSLElementDef objects where it is applicable.
Revision Changes Path
1.9 +2 -0
xml-xalan/java/src/org/apache/xalan/processor/ProcessorStylesheetElement.java
Index: ProcessorStylesheetElement.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/processor/ProcessorStylesheetElement.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ProcessorStylesheetElement.java 2001/01/07 06:24:39 1.8
+++ ProcessorStylesheetElement.java 2001/03/29 22:39:32 1.9
@@ -94,6 +94,7 @@
throws org.xml.sax.SAXException
{
+ super.startElement(handler, uri, localName, rawName,
attributes);
try
{
int stylesheetType = handler.getStylesheetType();
@@ -159,6 +160,7 @@
StylesheetHandler handler, String uri, String localName, String
rawName)
throws org.xml.sax.SAXException
{
+ super.endElement(handler, uri, localName, rawName);
handler.popElemTemplateElement();
handler.popStylesheet();
}
1.7 +2 -0
xml-xalan/java/src/org/apache/xalan/processor/ProcessorTemplateElem.java
Index: ProcessorTemplateElem.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/processor/ProcessorTemplateElem.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ProcessorTemplateElem.java 2000/11/22 23:25:57 1.6
+++ ProcessorTemplateElem.java 2001/03/29 22:39:33 1.7
@@ -93,6 +93,7 @@
throws org.xml.sax.SAXException
{
+ super.startElement(handler, uri, localName, rawName,
attributes);
try
{
// ElemTemplateElement parent = handler.getElemTemplateElement();
@@ -163,6 +164,7 @@
StylesheetHandler handler, String uri, String localName, String
rawName)
throws org.xml.sax.SAXException
{
+ super.endElement(handler, uri, localName, rawName);
handler.popElemTemplateElement();
}
}
1.39 +11 -15
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.38
retrieving revision 1.39
diff -u -r1.38 -r1.39
--- StylesheetHandler.java 2001/03/18 09:26:57 1.38
+++ StylesheetHandler.java 2001/03/29 22:39:33 1.39
@@ -404,7 +404,8 @@
&& ((null == getStylesheet()
|| Double.valueOf(getStylesheet().getVersion()).doubleValue()
> Constants.XSLTVERSUPPORTED) ||
- currentProcessor instanceof ProcessorStylesheetElement))
+
(!uri.equals(Constants.S_XSLNAMESPACEURL) &&
+ currentProcessor instanceof ProcessorStylesheetElement)))
{
elemProcessor = def.getProcessorForUnknown(uri, localName);
}
@@ -412,7 +413,7 @@
if (null == elemProcessor)
error(rawName + " is not allowed in this position in the stylesheet!",
null);
-
+
return elemProcessor;
}
@@ -493,7 +494,7 @@
if (null != getStylesheetRoot())
{
if (0 == m_stylesheetLevel)
- getStylesheetRoot().recompose();
+ getStylesheetRoot().recompose();
}
else
throw new TransformerException("Did not find the stylesheet root!");
@@ -503,7 +504,7 @@
if (null != elemProcessor)
elemProcessor.startNonText(this);
- m_stylesheetLevel--;
+ m_stylesheetLevel--;
popSpaceHandling();
@@ -599,7 +600,7 @@
String uri, String localName, String rawName, Attributes
attributes)
throws org.xml.sax.SAXException
{
- NamespaceSupport nssupport = this.getNamespaceSupport();
+ NamespaceSupport nssupport = this.getNamespaceSupport();
nssupport.pushContext();
int n = m_prefixMappings.size();
@@ -612,7 +613,7 @@
//m_prefixMappings.clear(); // JDK 1.2+ only -sc
m_prefixMappings.removeAllElements(); // JDK 1.1.x compat -sc
- m_elementID++;
+ m_elementID++;
checkForFragmentID(attributes);
@@ -628,6 +629,7 @@
this.pushProcessor(elemProcessor);
elemProcessor.startElement(this, uri, localName, rawName, attributes);
+
}
/**
@@ -1138,8 +1140,8 @@
/** The root stylesheet of the stylesheets tree. */
StylesheetRoot m_stylesheetRoot;
-
- /** The last stylesheet that was popped off the stylesheets stack. */
+
+ /** The last stylesheet that was popped off the stylesheets stack. */
Stylesheet m_lastPoppedStylesheet;
/**
@@ -1294,14 +1296,8 @@
{
return (ElemTemplateElement) m_elems.pop();
}
-
- /**
- * Flag to let us know when we've found an element inside the
- * stylesheet that is not an xsl:import, so we can restrict imports
- * to being the first elements.
- */
- private boolean m_foundNotImport = false;
+
/**
* A XSLMessages instance capable of producing user messages.
*/
1.13 +385 -10
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.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- XSLTElementDef.java 2001/01/26 18:04:13 1.12
+++ XSLTElementDef.java 2001/03/29 22:39:33 1.13
@@ -60,7 +60,12 @@
import org.apache.xalan.templates.Constants;
import org.apache.xml.utils.QName;
+import org.apache.xalan.res.XSLMessages;
+import org.apache.xalan.res.XSLTErrorResources;
+import java.util.Hashtable;
+import java.util.Enumeration;
+
/**
* This class defines the allowed structure for an element in a XSLT
stylesheet,
* is meant to reflect the structure defined in
http://www.w3.org/TR/xslt#dtd, and the
@@ -102,6 +107,168 @@
schema.addAvailableElement(new QName(namespace, nameAlias));
}
}
+
+ /**
+ * Construct an instance of XSLTElementDef.
+ *
+ * @param namespace The Namespace URI, "*", or null.
+ * @param name The local name (without prefix), "*", or null.
+ * @param nameAlias A potential alias for the name, or null.
+ * @param elements An array of allowed child element defs, or null.
+ * @param attributes An array of allowed attribute defs, or null.
+ * @param contentHandler The element processor for this element.
+ * @param classObject The class of the object that this element def should
produce.
+ * @param has_required true if this element has required elements by the
XSLT specification.
+ */
+ XSLTElementDef(XSLTSchema schema, String namespace, String name, String
nameAlias,
+ XSLTElementDef[] elements, XSLTAttributeDef[] attributes,
+ XSLTElementProcessor contentHandler, Class classObject,
boolean has_required)
+ {
+ this.m_has_required = has_required;
+ build(namespace, name, nameAlias, elements, attributes, contentHandler,
+ classObject);
+ if ( (null != namespace)
+ && (namespace.equals(Constants.S_XSLNAMESPACEURL)
+ || namespace.equals(Constants.S_BUILTIN_EXTENSIONS_URL)) )
+ {
+ schema.addAvailableElement(new QName(namespace, name));
+ if(null != nameAlias)
+ schema.addAvailableElement(new QName(namespace, nameAlias));
+ }
+
+ }
+
+ /**
+ * Construct an instance of XSLTElementDef.
+ *
+ * @param namespace The Namespace URI, "*", or null.
+ * @param name The local name (without prefix), "*", or null.
+ * @param nameAlias A potential alias for the name, or null.
+ * @param elements An array of allowed child element defs, or null.
+ * @param attributes An array of allowed attribute defs, or null.
+ * @param contentHandler The element processor for this element.
+ * @param classObject The class of the object that this element def should
produce.
+ * @param has_required true if this element has required elements by the
XSLT specification.
+ * @param required true if this element is required by the XSLT
specification.
+ */
+ XSLTElementDef(XSLTSchema schema, String namespace, String name, String
nameAlias,
+ XSLTElementDef[] elements, XSLTAttributeDef[] attributes,
+ XSLTElementProcessor contentHandler, Class classObject,
+ boolean
has_required, boolean required)
+ {
+ this(schema, namespace, name, nameAlias,
+ elements, attributes,
+ contentHandler, classObject, has_required);
+ this.m_required = required;
+ }
+
+ /**
+ * Construct an instance of XSLTElementDef.
+ *
+ * @param namespace The Namespace URI, "*", or null.
+ * @param name The local name (without prefix), "*", or null.
+ * @param nameAlias A potential alias for the name, or null.
+ * @param elements An array of allowed child element defs, or null.
+ * @param attributes An array of allowed attribute defs, or null.
+ * @param contentHandler The element processor for this element.
+ * @param classObject The class of the object that this element def should
produce.
+ * @param has_required true if this element has required elements by the
XSLT specification.
+ * @param required true if this element is required by the XSLT
specification.
+ * @param order the order this element should appear according to the XSLT
specification.
+ * @param multiAllowed whether this element is allowed more than once
+ */
+ XSLTElementDef(XSLTSchema schema, String namespace, String name, String
nameAlias,
+ XSLTElementDef[] elements, XSLTAttributeDef[] attributes,
+ XSLTElementProcessor contentHandler, Class classObject,
+ boolean
has_required, boolean required, int order,
+ boolean
multiAllowed)
+ {
+ this(schema, namespace, name, nameAlias,
+ elements, attributes,
+ contentHandler, classObject, has_required, required);
+ this.m_order = order;
+ this.m_multiAllowed = multiAllowed;
+ }
+
+ /**
+ * Construct an instance of XSLTElementDef.
+ *
+ * @param namespace The Namespace URI, "*", or null.
+ * @param name The local name (without prefix), "*", or null.
+ * @param nameAlias A potential alias for the name, or null.
+ * @param elements An array of allowed child element defs, or null.
+ * @param attributes An array of allowed attribute defs, or null.
+ * @param contentHandler The element processor for this element.
+ * @param classObject The class of the object that this element def should
produce.
+ * @param has_required true if this element has required elements by the
XSLT specification.
+ * @param required true if this element is required by the XSLT
specification.
+ * @param has_order whether this element has ordered child elements
+ * @param order the order this element should appear according to the XSLT
specification.
+ * @param multiAllowed whether this element is allowed more than once
+ */
+ XSLTElementDef(XSLTSchema schema, String namespace, String name, String
nameAlias,
+ XSLTElementDef[] elements, XSLTAttributeDef[] attributes,
+ XSLTElementProcessor contentHandler, Class classObject,
+ boolean
has_required, boolean required, boolean has_order, int order,
+ boolean
multiAllowed)
+ {
+ this(schema, namespace, name, nameAlias,
+ elements, attributes,
+ contentHandler, classObject, has_required, required);
+ this.m_order = order;
+ this.m_multiAllowed = multiAllowed;
+ this.m_isOrdered = has_order;
+ }
+
+ /**
+ * Construct an instance of XSLTElementDef.
+ *
+ * @param namespace The Namespace URI, "*", or null.
+ * @param name The local name (without prefix), "*", or null.
+ * @param nameAlias A potential alias for the name, or null.
+ * @param elements An array of allowed child element defs, or null.
+ * @param attributes An array of allowed attribute defs, or null.
+ * @param contentHandler The element processor for this element.
+ * @param classObject The class of the object that this element def should
produce.
+ * @param has_order whether this element has ordered child elements
+ * @param order the order this element should appear according to the XSLT
specification.
+ * @param multiAllowed whether this element is allowed more than once
+ */
+ XSLTElementDef(XSLTSchema schema, String namespace, String name, String
nameAlias,
+ XSLTElementDef[] elements, XSLTAttributeDef[] attributes,
+ XSLTElementProcessor contentHandler, Class classObject,
+ boolean
has_order, int order, boolean multiAllowed)
+ {
+ this(schema, namespace, name, nameAlias,
+ elements, attributes,
+ contentHandler, classObject,
+ order,
multiAllowed);
+ this.m_isOrdered = has_order;
+ }
+
+ /**
+ * Construct an instance of XSLTElementDef.
+ *
+ * @param namespace The Namespace URI, "*", or null.
+ * @param name The local name (without prefix), "*", or null.
+ * @param nameAlias A potential alias for the name, or null.
+ * @param elements An array of allowed child element defs, or null.
+ * @param attributes An array of allowed attribute defs, or null.
+ * @param contentHandler The element processor for this element.
+ * @param classObject The class of the object that this element def should
produce.
+ * @param order the order this element should appear according to the XSLT
specification.
+ * @param multiAllowed whether this element is allowed more than once
+ */
+ XSLTElementDef(XSLTSchema schema, String namespace, String name, String
nameAlias,
+ XSLTElementDef[] elements, XSLTAttributeDef[] attributes,
+ XSLTElementProcessor contentHandler, Class classObject,
+ int order,
boolean multiAllowed)
+ {
+ this(schema, namespace, name, nameAlias, elements, attributes,
contentHandler,
+ classObject);
+ this.m_order = order;
+ this.m_multiAllowed = multiAllowed;
+ }
/**
* Construct an instance of XSLTElementDef that represents text.
@@ -145,6 +312,22 @@
setElementProcessor(contentHandler);
this.m_classObject = classObject;
+
+ if (hasRequired() && m_elements != null)
+ {
+ int n = m_elements.length;
+ for (int i = 0; i < n; i++)
+ {
+ XSLTElementDef def = m_elements[i];
+
+ if (def != null && def.getRequired())
+ {
+ if (m_requiredFound == null)
+ m_requiredFound = new
Hashtable();
+ m_requiredFound.put(def.getName(),
"xsl:" +def.getName());
+ }
+ }
+ }
}
/**
@@ -311,16 +494,17 @@
*
* @return The element processor that matches the arguments, or null.
*/
- XSLTElementProcessor getProcessorFor(String uri, String localName)
- {
+ XSLTElementProcessor getProcessorFor(String uri, String localName)
+ {
- XSLTElementProcessor lreDef = null; // return value
+ XSLTElementProcessor elemDef = null; // return value
if (null == m_elements)
return null;
int n = m_elements.length;
-
+ int order = -1;
+ boolean multiAllowed = true;
for (int i = 0; i < n; i++)
{
XSLTElementDef def = m_elements[i];
@@ -330,16 +514,42 @@
// see if anything else matches.
if (def.m_name.equals("*"))
{
-
+
// Don't allow xsl elements
if (!equalsMayBeNullOrZeroLen(uri, Constants.S_XSLNAMESPACEURL))
- lreDef = def.m_elementProcessor;
+ {
+ elemDef = def.m_elementProcessor;
+ order = def.getOrder();
+ multiAllowed = def.getMultiAllowed();
+ }
}
- else if (def.QNameEquals(uri, localName))
- return def.m_elementProcessor;
- }
+ else if (def.QNameEquals(uri, localName))
+ {
+ if (def.getRequired())
+ this.setRequiredFound(def.getName(),
true);
+ order = def.getOrder();
+ multiAllowed = def.getMultiAllowed();
+ elemDef = def.m_elementProcessor;
+ break;
+ }
+ }
+
+ if (elemDef != null && this.isOrdered())
+ {
+ int lastOrder = getLastOrder();
+ if (order > lastOrder)
+ setLastOrder(order);
+ else if (order == lastOrder && !multiAllowed)
+ {
+ return null;
+ }
+ else if (order < lastOrder && order > 0)
+ {
+ return null;
+ }
+ }
- return lreDef;
+ return elemDef;
}
/**
@@ -487,5 +697,170 @@
Class getClassObject()
{
return m_classObject;
+ }
+
+ /**
+ * If true, this has a required element.
+ */
+ private boolean m_has_required = false;
+
+ /**
+ * Get whether or not this has a required element.
+ *
+ * @return true if this this has a required element.
+ */
+ boolean hasRequired()
+ {
+ return m_has_required;
+ }
+
+ /**
+ * If true, this is a required element.
+ */
+ private boolean m_required = false;
+
+ /**
+ * Get whether or not this is a required element.
+ *
+ * @return true if this is a required element.
+ */
+ boolean getRequired()
+ {
+ return m_required;
+ }
+
+ Hashtable m_requiredFound;
+
+ /**
+ * Set this required element found.
+ *
+ */
+ void setRequiredFound(String elem, boolean found)
+ {
+ if (m_requiredFound.get(elem) != null)
+ m_requiredFound.remove(elem);
+ }
+
+ /**
+ * Get whether all required elements were found.
+ *
+ * @return true if all required elements were found.
+ */
+ boolean getRequiredFound()
+ {
+ if (m_requiredFound == null)
+ return true;
+ return m_requiredFound.isEmpty();
+ }
+
+ /**
+ * Get required elements that were not found.
+ *
+ * @return required elements that were not found.
+ */
+ String getRequiredElem()
+ {
+ if (m_requiredFound == null)
+ return null;
+ Enumeration elems = m_requiredFound.elements();
+ String s = "";
+ boolean first = true;
+ while (elems.hasMoreElements())
+ {
+ if (first)
+ first = false;
+ else
+ s = s + ", ";
+ s = s + (String)elems.nextElement();
+ }
+ return s;
+ }
+
+ boolean m_isOrdered = false;
+
+ /**
+ * Get whether this element requires ordered children.
+ *
+ * @return true if this element requires ordered children.
+ */
+ boolean isOrdered()
+ {
+ /*if (!m_CheckedOrdered)
+ {
+ m_CheckedOrdered = true;
+ m_isOrdered = false;
+ if (null == m_elements)
+ return false;
+
+ int n = m_elements.length;
+
+ for (int i = 0; i < n; i++)
+ {
+ if (m_elements[i].getOrder() > 0)
+ {
+ m_isOrdered = true;
+ return true;
+ }
+ }
+ return false;
+ }
+ else*/
+ return m_isOrdered;
+ }
+
+ /**
+ * the order that this element should appear, or -1 if not ordered
+ */
+ private int m_order = -1;
+
+ /**
+ * Get the order that this element should appear .
+ *
+ * @return the order that this element should appear.
+ */
+ int getOrder()
+ {
+ return m_order;
+ }
+
+ /**
+ * the highest order of child elements have appeared so far,
+ * or -1 if not ordered
+ */
+ private int m_lastOrder = -1;
+
+ /**
+ * Get the highest order of child elements have appeared so far .
+ *
+ * @return the highest order of child elements have appeared so far.
+ */
+ int getLastOrder()
+ {
+ return m_lastOrder;
+ }
+
+ /**
+ * Set the highest order of child elements have appeared so far .
+ *
+ * @param order the highest order of child elements have appeared so far.
+ */
+ void setLastOrder(int order)
+ {
+ m_lastOrder = order ;
+ }
+
+ /**
+ * True if this element can appear multiple times
+ */
+ private boolean m_multiAllowed = true;
+
+ /**
+ * Get whether this element can appear multiple times
+ *
+ * @return true if this element can appear multiple times
+ */
+ boolean getMultiAllowed()
+ {
+ return m_multiAllowed;
}
}
1.10 +11 -3
xml-xalan/java/src/org/apache/xalan/processor/XSLTElementProcessor.java
Index: XSLTElementProcessor.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/processor/XSLTElementProcessor.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- XSLTElementProcessor.java 2001/01/26 23:42:54 1.9
+++ XSLTElementProcessor.java 2001/03/29 22:39:33 1.10
@@ -64,6 +64,9 @@
import org.apache.xalan.res.XSLMessages;
import org.apache.xalan.res.XSLTErrorResources;
+import org.apache.xalan.templates.ElemTemplateElement;
+import org.apache.xalan.templates.Constants;
+import org.apache.xml.utils.IntStack;
import org.xml.sax.helpers.AttributesImpl;
import javax.xml.transform.ErrorListener;
@@ -84,6 +87,8 @@
* @see <a href="http://www.w3.org/TR/xslt#dtd">XSLT DTD</a>
*/
XSLTElementProcessor(){}
+
+ private IntStack m_savedLastOrder;
/**
* The element definition that this processor conforms to.
@@ -195,7 +200,10 @@
throws org.xml.sax.SAXException
{
- // no op
+ if (m_savedLastOrder == null)
+ m_savedLastOrder = new IntStack();
+ m_savedLastOrder.push(getElemDef().getLastOrder());
+ getElemDef().setLastOrder(-1);
}
/**
@@ -213,8 +221,8 @@
StylesheetHandler handler, String uri, String localName, String
rawName)
throws org.xml.sax.SAXException
{
-
- // no op
+ if (m_savedLastOrder != null && !m_savedLastOrder.empty())
+ getElemDef().setLastOrder(m_savedLastOrder.pop());
}
/**
1.19 +85 -62
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.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- XSLTSchema.java 2001/03/28 04:40:59 1.18
+++ XSLTSchema.java 2001/03/29 22:39:33 1.19
@@ -273,7 +273,7 @@
XSLTElementDef[] charTemplateElements = new XSLTElementDef[15];
XSLTElementDef resultElement = new XSLTElementDef(this, null, "*",
null /*alias */,
- templateElementsAndParams /* elements
*/,
+ templateElements /* elements */,
new XSLTAttributeDef[]{
spaceAttrLiteral, // special
xslExcludeResultPrefixesAttr,
@@ -281,8 +281,9 @@
xslUseAttributeSetsAttr,
xslVersionAttr,
xslResultAttr,
- resultAttr }, new ProcessorLRE(),
- ElemLiteralResult.class
/* class object */);
+ resultAttr },
+
new
ProcessorLRE(),
+ ElemLiteralResult.class /* class object
*/, 20, true);
XSLTElementDef unknownElement =
new XSLTElementDef(this, "*", "unknown", null /*alias */,
templateElementsAndParams /* elements */,
@@ -291,20 +292,22 @@
xslUseAttributeSetsAttr,
xslVersionAttr,
xslResultAttr,
- resultAttr }, new
ProcessorUnknown(),
-
ElemUnknown.class /* class object */);
+ resultAttr },
+
new ProcessorUnknown(),
+ ElemUnknown.class /* class object */, 20, true);
XSLTElementDef xslValueOf = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL, "value-of",
null /*alias */, null /* elements */,
new XSLTAttributeDef[]{ selectAttrRequired,
-
disableOutputEscapingAttr }, new ProcessorTemplateElem(),
-
ElemValueOf.class /* class object */);
+
disableOutputEscapingAttr },
+
new
ProcessorTemplateElem(),
+ ElemValueOf.class /* class object */, 20,
true);
XSLTElementDef xslCopyOf = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL, "copy-of",
null /*alias */, null /* elements */,
new XSLTAttributeDef[]{ selectAttrRequired
},
new ProcessorTemplateElem(),
- ElemCopyOf.class /* class object */);
+ ElemCopyOf.class /* class object */, 20,
true);
XSLTElementDef xslNumber = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL, "number",
null /*alias */, null /* elements */,
@@ -316,8 +319,9 @@
langAttr,
letterValueAttr,
groupingSeparatorAVT,
- groupingSizeAttr },
new ProcessorTemplateElem(),
-
ElemNumber.class /* class object */);
+ groupingSizeAttr },
+
new ProcessorTemplateElem(),
+ ElemNumber.class /* class object */, 20,
true);
// <!-- xsl:sort cannot occur after any other elements or
// any non-whitespace character -->
@@ -330,8 +334,9 @@
langAttr,
dataTypeAttr,
orderAttr,
- caseOrderAttr }, new
ProcessorTemplateElem(),
-
ElemSort.class /* class object */);
+ caseOrderAttr },
+
new ProcessorTemplateElem(),
+ ElemSort.class/* class
object */, 19, true );
XSLTElementDef xslWithParam = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL,
"with-param", null /*alias */,
@@ -345,8 +350,9 @@
new XSLTElementDef[]{ xslSort,
xslWithParam
} /* elements */, new XSLTAttributeDef[]{
selectAttrDefNode,
- modeAttr },
new ProcessorTemplateElem(),
-
ElemApplyTemplates.class /* class object */);
+ modeAttr },
+
new ProcessorTemplateElem(),
+ ElemApplyTemplates.class /* class
object */, 20, true);
XSLTElementDef xslApplyImports =
new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "apply-imports",
null /*alias */, null /* elements */,
@@ -357,8 +363,9 @@
Constants.S_XSLNAMESPACEURL, "for-each",
null /*alias */, templateElementsAndSort,
// (#PCDATA %instructions; %result-elements; | xsl:sort)*
new XSLTAttributeDef[]{ selectAttrRequired,
- spaceAttr }, new
ProcessorTemplateElem(),
-
ElemForEach.class /* class object */);
+ spaceAttr },
+
new
ProcessorTemplateElem(),
+ ElemForEach.class /* class object */,
true, false, true, 20, true);
XSLTElementDef xslIf = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL,
"if", null /*alias */,
@@ -366,73 +373,79 @@
new XSLTAttributeDef[]{
testAttrRequired,
spaceAttr }, new
ProcessorTemplateElem(),
- ElemIf.class /*
class object */);
+ ElemIf.class /*
class object */, 20, true);
XSLTElementDef xslWhen =
new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "when",
null /*alias */, templateElements /* elements */,
// %template;>
new XSLTAttributeDef[]{
testAttrRequired,
spaceAttr }, new
ProcessorTemplateElem(),
-
ElemWhen.class /* class object */);
+
ElemWhen.class /* class object */,
+
false, true, 1, true);
XSLTElementDef xslOtherwise = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL, "otherwise",
null /*alias */,
templateElements /* elements */, //
%template;>
new XSLTAttributeDef[]{ spaceAttr },
new ProcessorTemplateElem(),
- ElemOtherwise.class /* class object */);
+ ElemOtherwise.class /* class object */,
+
false, false,
2, false);
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 */);
+ xslOtherwise } /*
elements */,
+
new XSLTAttributeDef[]{
spaceAttr },
+ new ProcessorTemplateElem(),
+ ElemChoose.class /* class object */, true,
false, true, 20, true);
XSLTElementDef xslAttribute = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL, "attribute",
null /*alias */,
charTemplateElements /* elements */, //
%char-template;>
new XSLTAttributeDef[]{ nameAVTRequired,
namespaceAVTOpt,
- spaceAttr }, new
ProcessorTemplateElem(),
-
ElemAttribute.class /* class object */);
+ spaceAttr },
+
new
ProcessorTemplateElem(),
+ ElemAttribute.class /* class object */,
20, true);
XSLTElementDef xslCallTemplate =
new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "call-template",
null /*alias */,
new XSLTElementDef[]{ xslWithParam } /* elements */,
new XSLTAttributeDef[]{ nameAttrRequired },
new ProcessorTemplateElem(),
- ElemCallTemplate.class /* class object */);
+ ElemCallTemplate.class /* class object */, 20,
true);
XSLTElementDef xslVariable = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL, "variable",
null /*alias */,
templateElements /* elements */, //
%template;>
new XSLTAttributeDef[]{ nameAttrRequired,
- selectAttrOpt },
new ProcessorTemplateElem(),
-
ElemVariable.class /* class object */);
+ selectAttrOpt },
+
new
ProcessorTemplateElem(),
+ ElemVariable.class /* class object */,
20, true);
XSLTElementDef xslParam = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL, "param",
null /*alias */,
templateElements /* elements */, //
%template;>
new XSLTAttributeDef[]{ nameAttrRequired,
- selectAttrOpt }, new
ProcessorTemplateElem(),
-
ElemParam.class /* class object */);
+ selectAttrOpt },
+
new ProcessorTemplateElem(),
+ ElemParam.class /* class object */, 19,
true);
XSLTElementDef xslText =
new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "text",
null /*alias */,
new XSLTElementDef[]{ charData } /* elements */,
new XSLTAttributeDef[]{ disableOutputEscapingAttr },
new ProcessorText(),
- ElemText.class /* class object */);
+ ElemText.class /* class object */, 20, true);
XSLTElementDef xslProcessingInstruction =
new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL,
"processing-instruction", null /*alias */,
charTemplateElements /* elements */, //
%char-template;>
- new XSLTAttributeDef[]{
+ new XSLTAttributeDef[]{
nameAVTRequired,
- spaceAttr }, new
ProcessorTemplateElem(),
- ElemPI.class
/* class object */);
+ spaceAttr },
+
new ProcessorTemplateElem(),
+ ElemPI.class /* class object */, 20, true);
XSLTElementDef xslElement = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL, "element",
null /*alias */,
@@ -440,36 +453,38 @@
new XSLTAttributeDef[]{ nameAVTRequired,
namespaceAVTOpt,
useAttributeSetsAttr,
- spaceAttr }, new
ProcessorTemplateElem(),
-
ElemElement.class /* class object */);
+ spaceAttr },
+
new
ProcessorTemplateElem(),
+ ElemElement.class /* class object */, 20,
true);
XSLTElementDef xslComment = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL, "comment",
null /*alias */,
charTemplateElements /* elements */, //
%char-template;>
new XSLTAttributeDef[]{ spaceAttr },
new ProcessorTemplateElem(),
- ElemComment.class /* class object */);
+ ElemComment.class /* class object */, 20,
true);
XSLTElementDef xslCopy =
new XSLTElementDef(this, Constants.S_XSLNAMESPACEURL, "copy",
null /*alias */, templateElements /* elements */,
// %template;>
- new XSLTAttributeDef[]{
+ new XSLTAttributeDef[]{
spaceAttr,
- useAttributeSetsAttr },
new ProcessorTemplateElem(),
-
ElemCopy.class /* class object */);
+ useAttributeSetsAttr },
+
new ProcessorTemplateElem(),
+ ElemCopy.class /* class object */, 20, true);
XSLTElementDef xslMessage = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL, "message",
null /*alias */,
templateElements /* elements */, //
%template;>
new XSLTAttributeDef[]{ terminateAttr },
new ProcessorTemplateElem(),
- ElemMessage.class /* class object */);
+ ElemMessage.class /* class object */, 20,
true);
XSLTElementDef xslFallback = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL, "fallback",
null /*alias */,
templateElements /* elements */, //
%template;>
new XSLTAttributeDef[]{ spaceAttr },
new ProcessorTemplateElem(),
- ElemFallback.class /* class object */);
+ ElemFallback.class /* class object */,
20, true);
int i = 0;
templateElements[i++] = charData; // #PCDATA
@@ -537,13 +552,15 @@
null /*alias */, null /* elements */,
new XSLTAttributeDef[]{ hrefAttr }, //
EMPTY
new ProcessorImport(),
- null /* class object */);
+ null /* class object */,
+
1, true);
XSLTElementDef includeDef = new XSLTElementDef(this,
Constants.S_XSLNAMESPACEURL, "include",
null /*alias */, null /* elements */, //
EMPTY
new XSLTAttributeDef[]{ hrefAttr },
new ProcessorInclude(),
- null /* class object */);
+ null /* class object */,
+
2, true);
XSLTElementDef[] topLevelElements = new XSLTElementDef[]{ includeDef,
importDef,
//
resultElement,
@@ -558,7 +575,7 @@
new
XSLTAttributeDef[]{
elementsAttr
},
new
ProcessorStripSpace(),
- null /*
class object */),
+ null /*
class object */, 20, true),
new
XSLTElementDef(
this,
Constants.S_XSLNAMESPACEURL,
@@ -568,7 +585,7 @@
new
XSLTAttributeDef[]{
elementsAttr
},
new
ProcessorPreserveSpace(),
- null /*
class object */),
+ null /*
class object */, 20, true),
new
XSLTElementDef(
this,
Constants.S_XSLNAMESPACEURL,
@@ -587,15 +604,17 @@
indentAttr,
mediaTypeAttr,
XSLTAttributeDef.m_foreignAttr },
- new
ProcessorOutputElem(), null /* class object */), new XSLTElementDef(
+ 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 */),
+ new
XSLTAttributeDef[]{ nameAttrRequired,
+
matchAttrRequired,
+
useAttr },
+
new ProcessorKey(), null /* class object */, 20, true),
new
XSLTElementDef(
this,
Constants.S_XSLNAMESPACEURL,
@@ -613,8 +632,9 @@
perMilleAttr,
zeroDigitAttr,
digitAttr,
-
patternSeparatorAttr }, new ProcessorDecimalFormat(),
-
null /* class object */),
+
patternSeparatorAttr },
+
new ProcessorDecimalFormat(),
+ null /*
class object */, 20, true),
new
XSLTElementDef(
this,
Constants.S_XSLNAMESPACEURL,
@@ -625,7 +645,7 @@
new
XSLTAttributeDef[]{
nameAttrRequired,
useAttributeSetsAttr }, new ProcessorAttributeSet(),
-
null /* class object */),
+
null /* class object */, 20, true),
new
XSLTElementDef(
this,
Constants.S_XSLNAMESPACEURL,
@@ -635,7 +655,7 @@
new
XSLTAttributeDef[]{
nameAttrRequired,
selectAttrOpt }, new ProcessorGlobalVariableDecl(),
-
ElemVariable.class /* class object */),
+
ElemVariable.class /* class object */, 20, true),
new
XSLTElementDef(
this,
Constants.S_XSLNAMESPACEURL,
@@ -645,7 +665,7 @@
new
XSLTAttributeDef[]{
nameAttrRequired,
selectAttrOpt }, new ProcessorGlobalParamDecl(),
-
ElemParam.class /* class object */),
+
ElemParam.class /* class object */, 20, true),
new
XSLTElementDef(
this,
Constants.S_XSLNAMESPACEURL,
@@ -657,14 +677,16 @@
nameAttrOpt,
priorityAttr,
modeAttr,
- spaceAttr
}, new ProcessorTemplate(), ElemTemplate.class /* class object */), new
XSLTElementDef(
+ spaceAttr
}, new ProcessorTemplate(), ElemTemplate.class /* class object */, 20, true),
+
new XSLTElementDef(
this,
Constants.S_XSLNAMESPACEURL,
"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
*/, 20, true),
new
XSLTElementDef(
this,
Constants.S_BUILTIN_EXTENSIONS_URL,
@@ -683,8 +705,9 @@
"lang",
XSLTAttributeDef.T_NMTOKEN,
true),
- new
XSLTAttributeDef(null, "src", XSLTAttributeDef.T_URL, false) }, new
ProcessorLRE(),
-
ElemExtensionScript.class /* class object */) }, // EMPTY
+ 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 */) };
@@ -710,8 +733,8 @@
idAttr,
versionAttrRequired,
spaceAttr }, new
ProcessorStylesheetElement(), /* ContentHandler */
-
null /* class object */
-
);
+ null /* class object */,
+ true, -1, false);
importDef.setElements(new XSLTElementDef[]{ stylesheetElemDef,
resultElement,
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]