jdonohue 00/04/12 12:41:12
Modified: c/src/PlatformSupport NumberFormat.cpp
c/src/TestXSLT process.cpp
c/src/XMLSupport FormatterToHTML.cpp FormatterToHTML.hpp
FormatterToXML.cpp FormatterToXML.hpp
c/src/XPath FunctionContains.hpp FunctionString.hpp
XPath.cpp
c/src/XSLT Constants.cpp Constants.hpp
ElemApplyTemplates.cpp ElemCallTemplate.cpp
ElemCallTemplate.hpp ElemForEach.cpp ElemIf.cpp
ElemLiteralResult.cpp ElemLiteralResult.hpp
ElemNumber.cpp ElemTemplate.cpp
ElemTemplateElement.cpp ElemTemplateElement.hpp
ElemValueOf.cpp ElemVariable.cpp ElemWhen.cpp
FunctionDocument.cpp FunctionKey.cpp
FunctionKey.hpp NumeratorFormatter.cpp
Stylesheet.hpp StylesheetExecutionContext.hpp
StylesheetExecutionContextDefault.cpp
StylesheetExecutionContextDefault.hpp
StylesheetHandler.cpp StylesheetHandler.hpp
StylesheetRoot.cpp XSLTEngineImpl.cpp
XSLTEngineImpl.hpp
c/src/XercesParserLiaison XercesParserLiaison.hpp
Log:
no message
Revision Changes Path
1.4 +5 -12 xml-xalan/c/src/PlatformSupport/NumberFormat.cpp
Index: NumberFormat.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/PlatformSupport/NumberFormat.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- NumberFormat.cpp 2000/04/11 14:35:30 1.3
+++ NumberFormat.cpp 2000/04/12 19:40:45 1.4
@@ -117,18 +117,11 @@
* and separator; returns the converted string
*/
{
- if (!m_isGroupingUsed)
- {
- return value;
- }
-
- const unsigned int len = length(value);
-
- if (len == 0)
- {
- return value;
- }
-
+ if (!m_isGroupingUsed) return value;
+ if (m_groupingSize == 0) return value;
+ int len = value.length();
+ if (len == 0) return value;
+
const unsigned int bufsize = len + len/m_groupingSize + 1;
XalanDOMChar* const buffer = new XalanDOMChar[bufsize];
1.12 +8 -1 xml-xalan/c/src/TestXSLT/process.cpp
Index: process.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/TestXSLT/process.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- process.cpp 2000/04/11 21:38:43 1.11
+++ process.cpp 2000/04/12 19:40:46 1.12
@@ -541,7 +541,8 @@
xslFileName = params.xslFileName.c_str();
}
- stylesheet = processor.processStylesheet(xslFileName,
theConstructionContext);
+ if (! isEmpty(xslFileName))
+ stylesheet = processor.processStylesheet(xslFileName,
theConstructionContext);
const XalanDOMString
mimeEncoding(XALAN_STATIC_UCODE_STRING("UTF-8"));
const XalanDOMString encoding(XALAN_STATIC_UCODE_STRING("UTF-8"));
@@ -764,6 +765,10 @@
theResult = -1;
}
+ catch (...)
+ {
+ cout << "\nUnhandled Exception\n";
+ }
#if !defined(NDEBUG)
const unsigned long theInstanceCount =
@@ -806,11 +811,13 @@
<< endl;
}
+#if defined(INTERACTIVE)
cout << "Hit <Enter> to continue..."
<< endl
<< endl;
cin.get();
+#endif
}
#endif
1.11 +75 -32 xml-xalan/c/src/XMLSupport/FormatterToHTML.cpp
Index: FormatterToHTML.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToHTML.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- FormatterToHTML.cpp 2000/04/11 14:43:00 1.10
+++ FormatterToHTML.cpp 2000/04/12 19:40:49 1.11
@@ -55,7 +55,7 @@
* <http://www.apache.org/>.
*/
/**
- * $Id: FormatterToHTML.cpp,v 1.10 2000/04/11 14:43:00 dbertoni Exp $
+ * $Id: FormatterToHTML.cpp,v 1.11 2000/04/12 19:40:49 jdonohue Exp $
*
* $State: Exp $
*
@@ -105,27 +105,21 @@
FormatterToHTML::FormatterToHTML(
- Writer& writer,
- const XalanDOMString& version,
- bool doIndent,
- int indent,
- const XalanDOMString& encoding,
- const XalanDOMString& mediaType,
- const XalanDOMString& doctypeSystem,
- const XalanDOMString& doctypePublic,
- bool xmlDecl,
- const XalanDOMString& standalone) :
- FormatterToXML(writer,
- version,
- doIndent,
- indent,
- encoding,
- mediaType,
- doctypeSystem,
- doctypePublic,
- xmlDecl,
- standalone),
- m_currentElementName()
+ Writer& writer,
+ const XalanDOMString& version,
+ bool doIndent,
+ int indent,
+ const XalanDOMString& encoding,
+ const XalanDOMString& mediaType,
+ const XalanDOMString& doctypeSystem,
+ const XalanDOMString& doctypePublic,
+ bool xmlDecl,
+ const XalanDOMString& standalone) :
+ FormatterToXML( writer, version, doIndent, indent,
+ encoding, mediaType, doctypeSystem, doctypePublic,
+ xmlDecl, standalone),
+ m_currentElementName(),
+ m_inBlockElem(false)
{
}
@@ -176,7 +170,7 @@
{
try
{
- m_writer.write("\n");
+ m_writer.write(m_lineSep);
}
catch(...)
{
@@ -193,6 +187,7 @@
const XMLCh* const name,
AttributeList& attrs)
{
+ // @@ JMD: this block is not in the java version any more ...
XalanDOMString theName(name);
if(true == m_needToOutputDocTypeDecl)
{
@@ -228,28 +223,39 @@
}
}
m_needToOutputDocTypeDecl = false;
+
bool savedDoIndent = m_doIndent;
+ XalanDOMString nameUpper = toUpperCase(theName);
+
// If the previous element is a non-block element or the next
// element is a non-block element, then do not indent.
- m_doIndent =
- ((s_nonblockelems.end() != s_nonblockelems.find(toUpperCase(theName)))
||
+ bool isBlockElement =
+ ((s_nonblockelems.end() != s_nonblockelems.find(nameUpper)) ||
((! isEmpty(m_currentElementName) &&
(s_nonblockelems.end() !=
- s_nonblockelems.find(toUpperCase(m_currentElementName))))))
+ s_nonblockelems.find(m_currentElementName)))))
? false : true;
- m_currentElementName = name;
try
{
writeParentTagEnd();
- m_ispreserve = false;
- if (shouldIndent() && !m_elemStack.empty())
+ if (m_ispreserve)
+ m_ispreserve = false;
+ else if(m_doIndent
+ && (!isEmpty(m_currentElementName))
+ && (!m_inBlockElem || isBlockElement))
{
m_startNewLine = true;
indent(m_writer, m_currentIndent);
}
+ m_inBlockElem = !isBlockElement;
+
+ // @@@ JMD: need to provide equivalent functionality here ...
+ // m_isRawStack.push(elemDesc.is(ElemDesc.RAW));
+
+ m_currentElementName = nameUpper;
m_writer.write('<');
m_writer.write(name);
@@ -265,7 +271,6 @@
m_currentIndent += m_indent;
m_isprevtext = false;
}
- // java: catch(IOException ioe)
catch(...)
{
throw SAXException("IO error");
@@ -285,9 +290,29 @@
// name = name.toUpperCase();
const bool hasChildNodes = childNodesWereAdded();
+// @@ JMD: need to provide this ...
+// m_isRawStack.pop();
+
+ // @@ JMD: check that this doesn't change name ...
+ XalanDOMString nameUpper = toUpperCase(name);
+ bool isBlockElement = s_nonblockelems.end() ==
s_nonblockelems.find(nameUpper);
+
+ bool shouldIndent = false;
+ if(m_ispreserve)
+ {
+ m_ispreserve = false;
+ }
+ else if(m_doIndent && (!m_inBlockElem || isBlockElement))
+ {
+ m_startNewLine = true;
+ shouldIndent = true;
+ }
+
+ m_inBlockElem = !isBlockElement;
+
if (hasChildNodes == true)
{
- if (shouldIndent() == true)
+ if (shouldIndent == true)
indent(m_writer, m_currentIndent);
m_writer.write("</");
m_writer.write(name);
@@ -297,7 +322,10 @@
{
if(s_empties.find(toUpperCase(name)) == s_empties.end())
{
- m_writer.write("></");
+ m_writer.write(">");
+ if (shouldIndent)
+ indent(m_writer, m_currentIndent);
+ m_writer.write("</");
m_writer.write(name);
m_writer.write(">");
}
@@ -306,6 +334,12 @@
m_writer.write(">");
}
}
+/*
+ @@@ JMD: need to provide equivalent functionality here ...
+ if (elemDesc.is(ElemDesc.WHITESPACESENSITIVE))
+ m_ispreserve = true;
+*/
+
if (hasChildNodes == true)
{
m_ispreserve = m_preserves.top();
@@ -515,6 +549,14 @@
}
}
+void FormatterToHTML::processingInstruction(
+ const XMLCh* const target,
+ const XMLCh* const data)
+
+{
+ FormatterToXML::processingInstruction( target, data, true);
+}
+
void
FormatterToHTML::processAttribute(
@@ -681,6 +723,7 @@
theElems.insert(XALAN_STATIC_UCODE_STRING("IMG"));
theElems.insert(XALAN_STATIC_UCODE_STRING("B"));
theElems.insert(XALAN_STATIC_UCODE_STRING("I"));
+ theElems.insert(XALAN_STATIC_UCODE_STRING("Q"));
return theElems;
}
1.6 +9 -2 xml-xalan/c/src/XMLSupport/FormatterToHTML.hpp
Index: FormatterToHTML.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToHTML.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- FormatterToHTML.hpp 2000/04/11 14:43:01 1.5
+++ FormatterToHTML.hpp 2000/04/12 19:40:49 1.6
@@ -58,7 +58,7 @@
#define FORMATTERTOHTML_HEADER_GUARD_1357924680
/**
- * $Id: FormatterToHTML.hpp,v 1.5 2000/04/11 14:43:01 dbertoni Exp $
+ * $Id: FormatterToHTML.hpp,v 1.6 2000/04/12 19:40:49 jdonohue Exp $
*
* $State: Exp $
*
@@ -81,6 +81,7 @@
// Base class header file.
#include <XMLSupport/FormatterToXML.hpp>
+#include <XPath/QName.hpp>
/**
@@ -160,6 +161,11 @@
const XMLCh* const ch,
const unsigned int length);
+ virtual void
+ processingInstruction(
+ const XMLCh* const target,
+ const XMLCh* const data);
+
// These methods are new ...
@@ -265,7 +271,8 @@
static const AttributesMapType s_attruris;
static const StringSetType s_escapetb;
- XalanDOMString
m_currentElementName;
+ XalanDOMString
m_currentElementName;
+ bool m_inBlockElem;
};
1.14 +20 -6 xml-xalan/c/src/XMLSupport/FormatterToXML.cpp
Index: FormatterToXML.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToXML.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- FormatterToXML.cpp 2000/04/11 14:43:01 1.13
+++ FormatterToXML.cpp 2000/04/12 19:40:49 1.14
@@ -267,11 +267,11 @@
m_needToOutputDocTypeDecl = false;
writeParentTagEnd();
m_ispreserve = false;
- if (shouldIndent() && !m_elemStack.empty())
+ if (shouldIndent() && m_startNewLine)
{
- m_startNewLine = true;
indent(m_writer, m_currentIndent);
}
+ m_startNewLine = true;
m_writer.write('<');
m_writer.write(name);
@@ -602,13 +602,20 @@
characters(chars, length);
}
-
-
void
FormatterToXML::processingInstruction(
const XMLCh* const target,
const XMLCh* const data)
{
+ processingInstruction( target, data, false);
+}
+
+void
+FormatterToXML::processingInstruction(
+ const XMLCh* const target,
+ const XMLCh* const data,
+ bool isHTML)
+{
// @@ Need to add this --
// if(m_inEntityRef)
// return;
@@ -640,7 +647,10 @@
}
m_writer.write(data);
- m_writer.write(XALAN_STATIC_UCODE_STRING("?>"));
+ if (isHTML)
+ m_writer.write(XALAN_STATIC_UCODE_STRING(">"));
+ else
+ m_writer.write(XALAN_STATIC_UCODE_STRING("?>"));
m_startNewLine = true;
}
@@ -749,6 +759,7 @@
if(false == m_elemStack.top())
{
m_writer.write(XALAN_STATIC_UCODE_STRING(">"));
+ m_isprevtext = false;
m_elemStack.pop();
m_elemStack.push(true);
@@ -841,7 +852,10 @@
{
vec.push_back('&');
vec.push_back('#');
- vec.push_back(ch);
+ DOMString ds = LongToDOMString(ch);
+ const XMLCh* pb = c_wstr(ds);
+ for(int k = 0; k < ds.length(); k++)
+ vec.push_back(*pb++);
vec.push_back(';');
}
else if (0xd800 <= chNum && chNum < 0xdc00)
1.8 +11 -0 xml-xalan/c/src/XMLSupport/FormatterToXML.hpp
Index: FormatterToXML.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XMLSupport/FormatterToXML.hpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- FormatterToXML.hpp 2000/04/11 14:43:01 1.7
+++ FormatterToXML.hpp 2000/04/12 19:40:50 1.8
@@ -374,6 +374,10 @@
bool m_ispreserve;
BoolStackType m_preserves;
+ /**
+ * State flag that tells if the previous node processed
+ * was text, so we can tell if we should preserve whitespace.
+ */
bool m_isprevtext;
bool m_doIndent;
int m_currentIndent;
@@ -381,6 +385,7 @@
XalanDOMString m_doctypeSystem;
XalanDOMString m_doctypePublic;
bool m_startNewLine;
+
/**
* Assume java encoding names are the same as the ISO encoding names if
this is true.
*/
@@ -412,6 +417,12 @@
int& pos,
// Index in m_charBuf
int length
// Length of 'chars' string
);
+
+ void FormatterToXML::processingInstruction(
+ const XMLCh* const target,
+ const XMLCh* const data,
+ bool isHTML);
+
private:
1.5 +7 -2 xml-xalan/c/src/XPath/FunctionContains.hpp
Index: FunctionContains.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionContains.hpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- FunctionContains.hpp 2000/04/11 14:46:04 1.4
+++ FunctionContains.hpp 2000/04/12 19:40:53 1.5
@@ -112,9 +112,14 @@
const XalanDOMString arg1 = args[0]->str();
const XalanDOMString arg2 = args[1]->str();
- const unsigned int theIndex = indexOf(arg1, arg2);
+ // This is rather a moot point but conformance test str62
indicates the
+ // answer should be true
+ if (isEmpty(arg1) && isEmpty(arg2))
+ return
executionContext.getXObjectFactory().createBoolean(true);
- return
executionContext.getXObjectFactory().createBoolean(theIndex < length(arg1) ?
true : false);
+ const int theIndex = indexOf(arg1, arg2);
+
+ return
executionContext.getXObjectFactory().createBoolean(theIndex >= 0 ? true :
false);
}
#if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
1.5 +4 -2 xml-xalan/c/src/XPath/FunctionString.hpp
Index: FunctionString.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionString.hpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- FunctionString.hpp 2000/04/11 14:46:08 1.4
+++ FunctionString.hpp 2000/04/12 19:40:53 1.5
@@ -103,11 +103,13 @@
int
/* opPos */,
const XObjectArgVectorType& args)
{
- if(args.size() != 1)
+ if(args.size() > 1)
{
- executionContext.error("The string() function takes one
argument!",
+ executionContext.error("The string() function takes
zero or one argument!",
context);
}
+ if(args.size() == 0)
+ return
executionContext.getXObjectFactory().createNodeSet(*context);
return
executionContext.getXObjectFactory().createString(args[0]->str());
}
1.9 +2 -1 xml-xalan/c/src/XPath/XPath.cpp
Index: XPath.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPath.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- XPath.cpp 2000/04/11 14:46:16 1.8
+++ XPath.cpp 2000/04/12 19:40:53 1.9
@@ -1475,7 +1475,8 @@
{
assert(m_expression.getToken(funcID) != 0);
- const XalanDOMString
theFunctionName(m_expression.getToken(funcID)->str());
+ const XalanDOMString
theFunctionName(m_expression.getToken(funcID)->str());
+ assert(theFunctionName != 0);
assert(!isEmpty(theFunctionName));
return s_functions[theFunctionName].execute(executionContext, context,
opPos, argVec);
1.4 +116 -126 xml-xalan/c/src/XSLT/Constants.cpp
Index: Constants.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/Constants.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Constants.cpp 2000/04/11 15:09:21 1.3
+++ Constants.cpp 2000/04/12 19:40:55 1.4
@@ -62,98 +62,30 @@
#include <PlatformSupport/DOMStringHelper.hpp>
-
-const XalanDOMString
Constants::ELEMNAME_ANCHOR_STRING(XALAN_STATIC_UCODE_STRING("anchor"));
-const XalanDOMString
Constants::ELEMNAME_ANY_STRING(XALAN_STATIC_UCODE_STRING("any"));
-const XalanDOMString
Constants::ELEMNAME_APPLY_IMPORTS_STRING(XALAN_STATIC_UCODE_STRING("apply-imports"));
-const XalanDOMString
Constants::ELEMNAME_APPLY_TEMPLATES_STRING(XALAN_STATIC_UCODE_STRING("apply-templates"));
-const XalanDOMString
Constants::ELEMNAME_ARG_STRING(XALAN_STATIC_UCODE_STRING("arg"));
-const XalanDOMString
Constants::ELEMNAME_ATTRIBUTESET_STRING(XALAN_STATIC_UCODE_STRING("attribute-set"));
-const XalanDOMString
Constants::ELEMNAME_ATTRIBUTE_STRING(XALAN_STATIC_UCODE_STRING("attribute"));
-const XalanDOMString
Constants::ELEMNAME_CALLTEMPLATEARG_STRING(XALAN_STATIC_UCODE_STRING("invoke-arg"));
-const XalanDOMString
Constants::ELEMNAME_CALLTEMPLATE_STRING(XALAN_STATIC_UCODE_STRING("call-template"));
-const XalanDOMString
Constants::ELEMNAME_CALL_STRING(XALAN_STATIC_UCODE_STRING("call"));
-const XalanDOMString
Constants::ELEMNAME_CHILDREN_STRING(XALAN_STATIC_UCODE_STRING("children"));
-const XalanDOMString
Constants::ELEMNAME_CHOOSE_STRING(XALAN_STATIC_UCODE_STRING("choose"));
-const XalanDOMString
Constants::ELEMNAME_COMMENT_STRING(XALAN_STATIC_UCODE_STRING("comment"));
-const XalanDOMString
Constants::ELEMNAME_CONSTRUCT_STRING(XALAN_STATIC_UCODE_STRING("construct"));
-const XalanDOMString
Constants::ELEMNAME_CONTENTS_STRING(XALAN_STATIC_UCODE_STRING("contents"));
-const XalanDOMString
Constants::ELEMNAME_COPY_OF_STRING(XALAN_STATIC_UCODE_STRING("copy-of"));
-const XalanDOMString
Constants::ELEMNAME_COPY_STRING(XALAN_STATIC_UCODE_STRING("copy"));
-const XalanDOMString
Constants::ELEMNAME_COUNTERINCREMENT_STRING(XALAN_STATIC_UCODE_STRING("counter-increment"));
-const XalanDOMString
Constants::ELEMNAME_COUNTERRESET_STRING(XALAN_STATIC_UCODE_STRING("counter-reset"));
-const XalanDOMString
Constants::ELEMNAME_COUNTERSCOPE_STRING(XALAN_STATIC_UCODE_STRING("counter-scope"));
-const XalanDOMString
Constants::ELEMNAME_COUNTERS_STRING(XALAN_STATIC_UCODE_STRING("counters"));
-const XalanDOMString
Constants::ELEMNAME_COUNTER_STRING(XALAN_STATIC_UCODE_STRING("counter"));
-const XalanDOMString
Constants::ELEMNAME_DECIMALFORMAT_STRING(XALAN_STATIC_UCODE_STRING("decimal-format"));
-const XalanDOMString
Constants::ELEMNAME_DISPLAYIF_STRING(XALAN_STATIC_UCODE_STRING("display-if"));
-const XalanDOMString
Constants::ELEMNAME_ELEMENT_STRING(XALAN_STATIC_UCODE_STRING("element"));
-const XalanDOMString
Constants::ELEMNAME_EMPTY_STRING(XALAN_STATIC_UCODE_STRING("empty"));
-const XalanDOMString
Constants::ELEMNAME_EVAL_STRING(XALAN_STATIC_UCODE_STRING("eval"));
-const XalanDOMString
Constants::ELEMNAME_EXPECTEDCHILDREN_STRING(XALAN_STATIC_UCODE_STRING("expectedchildren"));
-const XalanDOMString
Constants::ELEMNAME_EXTENSIONHANDLER_STRING(XALAN_STATIC_UCODE_STRING("code-dispatcher"));
-const XalanDOMString
Constants::ELEMNAME_EXTENSION_STRING(XALAN_STATIC_UCODE_STRING("functions"));
-const XalanDOMString
Constants::ELEMNAME_FALLBACK_STRING(XALAN_STATIC_UCODE_STRING("fallback"));
-const XalanDOMString
Constants::ELEMNAME_FOREACH_STRING(XALAN_STATIC_UCODE_STRING("for-each"));
-const XalanDOMString
Constants::ELEMNAME_IF_STRING(XALAN_STATIC_UCODE_STRING("if"));
-const XalanDOMString
Constants::ELEMNAME_IMPORT_STRING(XALAN_STATIC_UCODE_STRING("import"));
-const XalanDOMString
Constants::ELEMNAME_INCLUDE_STRING(XALAN_STATIC_UCODE_STRING("include"));
-const XalanDOMString
Constants::ELEMNAME_KEY_STRING(XALAN_STATIC_UCODE_STRING("key"));
-const XalanDOMString
Constants::ELEMNAME_LOCALE_STRING(XALAN_STATIC_UCODE_STRING("locale"));
-const XalanDOMString
Constants::ELEMNAME_MESSAGE_STRING(XALAN_STATIC_UCODE_STRING("message"));
-const XalanDOMString
Constants::ELEMNAME_NSALIAS_STRING(XALAN_STATIC_UCODE_STRING("namespace-alias"));
-
-const XalanDOMString
Constants::ELEMNAME_NUMBER_STRING(XALAN_STATIC_UCODE_STRING("number"));
-const XalanDOMString
Constants::ELEMNAME_OTHERWISE_STRING(XALAN_STATIC_UCODE_STRING("otherwise"));
-const XalanDOMString
Constants::ELEMNAME_PARAM_STRING(XALAN_STATIC_UCODE_STRING("param"));
-const XalanDOMString
Constants::ELEMNAME_PRESERVESPACE_STRING(XALAN_STATIC_UCODE_STRING("preserve-space"));
-const XalanDOMString
Constants::ELEMNAME_ROOT_STRING(XALAN_STATIC_UCODE_STRING("root"));
-const XalanDOMString
Constants::ELEMNAME_SORT_STRING(XALAN_STATIC_UCODE_STRING("sort"));
-const XalanDOMString
Constants::ELEMNAME_STRIPSPACE_STRING(XALAN_STATIC_UCODE_STRING("strip-space"));
-const XalanDOMString
Constants::ELEMNAME_STYLESHEET_STRING(XALAN_STATIC_UCODE_STRING("stylesheet"));
-const XalanDOMString
Constants::ELEMNAME_TARGETATTRIBUTE_STRING(XALAN_STATIC_UCODE_STRING("target-attribute"));
-const XalanDOMString
Constants::ELEMNAME_TARGETCOMMENT_STRING(XALAN_STATIC_UCODE_STRING("target-comment"));
-const XalanDOMString
Constants::ELEMNAME_TARGETELEMENT_STRING(XALAN_STATIC_UCODE_STRING("target-element"));
-const XalanDOMString
Constants::ELEMNAME_TARGETPI_STRING(XALAN_STATIC_UCODE_STRING("target-pi"));
-const XalanDOMString
Constants::ELEMNAME_TARGETTEXT_STRING(XALAN_STATIC_UCODE_STRING("target-text"));
-const XalanDOMString
Constants::ELEMNAME_TEMPLATE_STRING(XALAN_STATIC_UCODE_STRING("template"));
-const XalanDOMString
Constants::ELEMNAME_TEXT_STRING(XALAN_STATIC_UCODE_STRING("text"));
-const XalanDOMString
Constants::ELEMNAME_TRANSFORM_STRING(XALAN_STATIC_UCODE_STRING("transform"));
-const XalanDOMString
Constants::ELEMNAME_URL_STRING(XALAN_STATIC_UCODE_STRING("uri"));
-const XalanDOMString
Constants::ELEMNAME_USE_STRING(XALAN_STATIC_UCODE_STRING("use"));
-const XalanDOMString
Constants::ELEMNAME_VALUEOF_STRING(XALAN_STATIC_UCODE_STRING("value-of"));
-const XalanDOMString
Constants::ELEMNAME_VARIABLE_STRING(XALAN_STATIC_UCODE_STRING("variable"));
-const XalanDOMString
Constants::ELEMNAME_WHEN_STRING(XALAN_STATIC_UCODE_STRING("when"));
-const XalanDOMString
Constants::ELEMNAME_COMPONENT_STRING(XALAN_STATIC_UCODE_STRING("component"));
-const XalanDOMString
Constants::ELEMNAME_CSSSTYLECONVERSION_STRING(XALAN_STATIC_UCODE_STRING("css-style-conversion"));
-const XalanDOMString
Constants::ELEMNAME_OUTPUT_STRING(XALAN_STATIC_UCODE_STRING("output"));
-const XalanDOMString
Constants::ELEMNAME_PARAMVARIABLE_OLD_STRING(XALAN_STATIC_UCODE_STRING("param-variable"));
-const XalanDOMString
Constants::ELEMNAME_PARAMVARIABLE_STRING(XALAN_STATIC_UCODE_STRING("param"));
-const XalanDOMString
Constants::ELEMNAME_PI_OLD_STRING(XALAN_STATIC_UCODE_STRING("pi"));
-const XalanDOMString
Constants::ELEMNAME_PI_STRING(XALAN_STATIC_UCODE_STRING("processing-instruction"));
-const XalanDOMString
Constants::ELEMNAME_SCRIPT_STRING(XALAN_STATIC_UCODE_STRING("script"));
-const XalanDOMString
Constants::ELEMNAME_WITHPARAM_STRING(XALAN_STATIC_UCODE_STRING("with-param"));
-
-
-
-const XalanDOMString
Constants::ATTRNAME_CLASS(XALAN_STATIC_UCODE_STRING("class"));
-const XalanDOMString
Constants::ATTRNAME_ATTRIBUTE(XALAN_STATIC_UCODE_STRING("attribute"));
-const XalanDOMString
Constants::ATTRNAME_ATTRIBUTE_SET(XALAN_STATIC_UCODE_STRING("attribute-set"));
const XalanDOMString
Constants::ATTRNAME_AMOUNT(XALAN_STATIC_UCODE_STRING("amount"));
const XalanDOMString
Constants::ATTRNAME_ANCESTOR(XALAN_STATIC_UCODE_STRING("ancestor"));
+const XalanDOMString
Constants::ATTRNAME_ARCHIVE(XALAN_STATIC_UCODE_STRING("archive"));
+const XalanDOMString
Constants::ATTRNAME_ATTRIBUTE(XALAN_STATIC_UCODE_STRING("attribute"));
+const XalanDOMString
Constants::ATTRNAME_ATTRIBUTE_SET(XALAN_STATIC_UCODE_STRING("attribute-set"));
const XalanDOMString
Constants::ATTRNAME_CASEORDER(XALAN_STATIC_UCODE_STRING("case-order"));
+const XalanDOMString
Constants::ATTRNAME_CLASS(XALAN_STATIC_UCODE_STRING("class"));
+const XalanDOMString
Constants::ATTRNAME_CLASSID(XALAN_STATIC_UCODE_STRING("classid"));
+const XalanDOMString
Constants::ATTRNAME_CODEBASE(XALAN_STATIC_UCODE_STRING("codebase"));
+const XalanDOMString
Constants::ATTRNAME_CODETYPE(XALAN_STATIC_UCODE_STRING("type"));
const XalanDOMString
Constants::ATTRNAME_CONDITION(XALAN_STATIC_UCODE_STRING("condition"));
const XalanDOMString
Constants::ATTRNAME_COPYTYPE(XALAN_STATIC_UCODE_STRING("copy-type"));
const XalanDOMString
Constants::ATTRNAME_COUNT(XALAN_STATIC_UCODE_STRING("count"));
const XalanDOMString
Constants::ATTRNAME_DATATYPE(XALAN_STATIC_UCODE_STRING("data-type"));
const XalanDOMString
Constants::ATTRNAME_DECIMALSEPARATOR(XALAN_STATIC_UCODE_STRING("decimal-separator"));
-const XalanDOMString
Constants::ATTRNAME_DEFAULTSPACE(XALAN_STATIC_UCODE_STRING("default-space"));
const XalanDOMString
Constants::ATTRNAME_DEFAULT(XALAN_STATIC_UCODE_STRING("default"));
+const XalanDOMString
Constants::ATTRNAME_DEFAULTSPACE(XALAN_STATIC_UCODE_STRING("default-space"));
const XalanDOMString
Constants::ATTRNAME_DEPTH(XALAN_STATIC_UCODE_STRING("with-children"));
const XalanDOMString
Constants::ATTRNAME_DIGIT(XALAN_STATIC_UCODE_STRING("digit"));
const XalanDOMString
Constants::ATTRNAME_DIGITGROUPSEP(XALAN_STATIC_UCODE_STRING("digit-group-sep"));
+const XalanDOMString Constants::ATTRNAME_DISABLE_OUTPUT_ESCAPING
(XALAN_STATIC_UCODE_STRING("disable-output-escaping"));
const XalanDOMString
Constants::ATTRNAME_ELEMENT(XALAN_STATIC_UCODE_STRING("element"));
const XalanDOMString
Constants::ATTRNAME_ELEMENTS(XALAN_STATIC_UCODE_STRING("elements"));
+const XalanDOMString
Constants::ATTRNAME_EXCLUDE_RESULT_PREFIXES(XALAN_STATIC_UCODE_STRING("exclude-result-prefixes"));
const XalanDOMString
Constants::ATTRNAME_EXPR(XALAN_STATIC_UCODE_STRING("expr"));
const XalanDOMString
Constants::ATTRNAME_EXTENSIONELEMENTPREFIXES(XALAN_STATIC_UCODE_STRING("extension-element-prefixes"));
const XalanDOMString
Constants::ATTRNAME_FORMAT(XALAN_STATIC_UCODE_STRING("format"));
@@ -165,19 +97,30 @@
const XalanDOMString
Constants::ATTRNAME_IMPORTANCE(XALAN_STATIC_UCODE_STRING("importance"));
const XalanDOMString
Constants::ATTRNAME_INDENTRESULT(XALAN_STATIC_UCODE_STRING("indent-result"));
const XalanDOMString
Constants::ATTRNAME_INFINITY(XALAN_STATIC_UCODE_STRING("infinity"));
+const XalanDOMString
Constants::ATTRNAME_LANG(XALAN_STATIC_UCODE_STRING("lang"));
const XalanDOMString
Constants::ATTRNAME_LETTERVALUE(XALAN_STATIC_UCODE_STRING("letter-value"));
const XalanDOMString
Constants::ATTRNAME_LEVEL(XALAN_STATIC_UCODE_STRING("level"));
-const XalanDOMString
Constants::ATTRNAME_LANG(XALAN_STATIC_UCODE_STRING("lang"));
-//const XalanDOMString
Constants::ATTRNAME_MACRO(XALAN_STATIC_UCODE_STRING("macro"));
const XalanDOMString
Constants::ATTRNAME_MATCH(XALAN_STATIC_UCODE_STRING("match"));
+const XalanDOMString
Constants::ATTRNAME_METHOD(XALAN_STATIC_UCODE_STRING("calls"));
const XalanDOMString
Constants::ATTRNAME_MINUSSIGN(XALAN_STATIC_UCODE_STRING("minus-sign"));
const XalanDOMString
Constants::ATTRNAME_MODE(XALAN_STATIC_UCODE_STRING("mode"));
const XalanDOMString
Constants::ATTRNAME_NAME(XALAN_STATIC_UCODE_STRING("name"));
const XalanDOMString
Constants::ATTRNAME_NAMESPACE(XALAN_STATIC_UCODE_STRING("namespace"));
const XalanDOMString
Constants::ATTRNAME_NAN(XALAN_STATIC_UCODE_STRING("NaN"));
const XalanDOMString
Constants::ATTRNAME_NDIGITSPERGROUP(XALAN_STATIC_UCODE_STRING("n-digits-per-group"));
+const XalanDOMString
Constants::ATTRNAME_NS(XALAN_STATIC_UCODE_STRING("ns"));
const XalanDOMString
Constants::ATTRNAME_ONLY(XALAN_STATIC_UCODE_STRING("only"));
const XalanDOMString
Constants::ATTRNAME_ORDER(XALAN_STATIC_UCODE_STRING("order"));
+const XalanDOMString
Constants::ATTRNAME_OUTPUT_CDATA_SECTION_ELEMENTS
(XALAN_STATIC_UCODE_STRING("cdata-section-elements"));
+const XalanDOMString
Constants::ATTRNAME_OUTPUT_DOCTYPE_PUBLIC(XALAN_STATIC_UCODE_STRING("doctype-public"));
+const XalanDOMString
Constants::ATTRNAME_OUTPUT_DOCTYPE_SYSTEM(XALAN_STATIC_UCODE_STRING("doctype-system"));
+const XalanDOMString
Constants::ATTRNAME_OUTPUT_ENCODING(XALAN_STATIC_UCODE_STRING("encoding"));
+const XalanDOMString
Constants::ATTRNAME_OUTPUT_INDENT(XALAN_STATIC_UCODE_STRING("indent"));
+const XalanDOMString
Constants::ATTRNAME_OUTPUT_MEDIATYPE(XALAN_STATIC_UCODE_STRING("media-type"));
+const XalanDOMString
Constants::ATTRNAME_OUTPUT_METHOD(XALAN_STATIC_UCODE_STRING("method"));
+const XalanDOMString
Constants::ATTRNAME_OUTPUT_OMITXMLDECL(XALAN_STATIC_UCODE_STRING("omit-xml-declaration"));
+const XalanDOMString Constants::ATTRNAME_OUTPUT_STANDALONE
(XALAN_STATIC_UCODE_STRING("standalone"));
+const XalanDOMString
Constants::ATTRNAME_OUTPUT_VERSION(XALAN_STATIC_UCODE_STRING("version"));
const XalanDOMString
Constants::ATTRNAME_PATTERNSEPARATOR(XALAN_STATIC_UCODE_STRING("pattern-separator"));
const XalanDOMString
Constants::ATTRNAME_PERCENT(XALAN_STATIC_UCODE_STRING("percent"));
const XalanDOMString
Constants::ATTRNAME_PERMILLE(XALAN_STATIC_UCODE_STRING("per-mille"));
@@ -195,61 +138,108 @@
const XalanDOMString
Constants::ATTRNAME_USE(XALAN_STATIC_UCODE_STRING("use"));
const XalanDOMString
Constants::ATTRNAME_USEATTRIBUTESETS(XALAN_STATIC_UCODE_STRING("use-attribute-sets"));
const XalanDOMString
Constants::ATTRNAME_VALUE(XALAN_STATIC_UCODE_STRING("value"));
-const XalanDOMString
Constants::ATTRNAME_XMLNSDEF(XALAN_STATIC_UCODE_STRING("xmlns"));
const XalanDOMString
Constants::ATTRNAME_XMLNS(XALAN_STATIC_UCODE_STRING("xmlns:"));
+const XalanDOMString
Constants::ATTRNAME_XMLNSDEF(XALAN_STATIC_UCODE_STRING("xmlns"));
const XalanDOMString
Constants::ATTRNAME_XMLSPACE(XALAN_STATIC_UCODE_STRING("xml:space"));
-const XalanDOMString
Constants::ATTRNAME_NS(XALAN_STATIC_UCODE_STRING("ns"));
-const XalanDOMString
Constants::ATTRNAME_CLASSID(XALAN_STATIC_UCODE_STRING("classid"));
-const XalanDOMString
Constants::ATTRNAME_ARCHIVE(XALAN_STATIC_UCODE_STRING("archive"));
-const XalanDOMString
Constants::ATTRNAME_CODETYPE(XALAN_STATIC_UCODE_STRING("type"));
-const XalanDOMString
Constants::ATTRNAME_CODEBASE(XALAN_STATIC_UCODE_STRING("codebase"));
-const XalanDOMString
Constants::ATTRNAME_METHOD(XALAN_STATIC_UCODE_STRING("calls"));
-const XalanDOMString
Constants::ATTRVAL_PRESERVE(XALAN_STATIC_UCODE_STRING("preserve"));
-const XalanDOMString
Constants::ATTRVAL_STRIP(XALAN_STATIC_UCODE_STRING("strip"));
-const XalanDOMString
Constants::ATTRVAL_YES(XALAN_STATIC_UCODE_STRING("yes"));
-const XalanDOMString
Constants::ATTRVAL_NO(XALAN_STATIC_UCODE_STRING("no"));
-const XalanDOMString
Constants::ATTRVAL_ALPHABETIC(XALAN_STATIC_UCODE_STRING("alphabetic"));
-const XalanDOMString
Constants::ATTRVAL_OTHER(XALAN_STATIC_UCODE_STRING("other"));
-const XalanDOMString
Constants::ATTRVAL_SINGLE(XALAN_STATIC_UCODE_STRING("single"));
-const XalanDOMString
Constants::ATTRVAL_MULTI(XALAN_STATIC_UCODE_STRING("multiple"));
-const XalanDOMString
Constants::ATTRVAL_ANY(XALAN_STATIC_UCODE_STRING("any"));
-const XalanDOMString
Constants::ATTRNAME_OUTPUT_METHOD(XALAN_STATIC_UCODE_STRING("method"));
-const XalanDOMString Constants::ATTRNAME_DISABLE_OUTPUT_ESCAPING
(XALAN_STATIC_UCODE_STRING("disable-output-escaping"));
-const XalanDOMString
Constants::ATTRNAME_OUTPUT_CDATA_SECTION_ELEMENTS
(XALAN_STATIC_UCODE_STRING("cdata-section-elements"));
-const XalanDOMString
Constants::ATTRNAME_OUTPUT_DOCTYPE_PUBLIC(XALAN_STATIC_UCODE_STRING("doctype-public"));
-const XalanDOMString
Constants::ATTRNAME_OUTPUT_DOCTYPE_SYSTEM(XALAN_STATIC_UCODE_STRING("doctype-system"));
-const XalanDOMString
Constants::ATTRNAME_OUTPUT_ENCODING(XALAN_STATIC_UCODE_STRING("encoding"));
-const XalanDOMString
Constants::ATTRNAME_OUTPUT_INDENT(XALAN_STATIC_UCODE_STRING("indent"));
-const XalanDOMString
Constants::ATTRNAME_OUTPUT_MEDIATYPE(XALAN_STATIC_UCODE_STRING("media-type"));
-const XalanDOMString Constants::ATTRNAME_OUTPUT_STANDALONE
(XALAN_STATIC_UCODE_STRING("standalone"));
-const XalanDOMString
Constants::ATTRNAME_OUTPUT_VERSION(XALAN_STATIC_UCODE_STRING("version"));
-//const XalanDOMString
Constants::ATTRNAME_OUTPUT_XMLDECL(XALAN_STATIC_UCODE_STRING("xml-declaration"));
-const XalanDOMString
Constants::ATTRNAME_OUTPUT_OMITXMLDECL(XALAN_STATIC_UCODE_STRING("omit-xml-declaration"));
const XalanDOMString
Constants::ATTRNAME_ZERODIGIT(XALAN_STATIC_UCODE_STRING("zero-digit"));
-
-const XalanDOMString
Constants::ATTRVAL_OUTPUT_METHOD_HTML(XALAN_STATIC_UCODE_STRING("html"));
-const XalanDOMString
Constants::ATTRVAL_OUTPUT_METHOD_XML(XALAN_STATIC_UCODE_STRING("xml"));
-const XalanDOMString
Constants::ATTRVAL_OUTPUT_METHOD_TEXT(XALAN_STATIC_UCODE_STRING("text"));
-const XalanDOMString
Constants::ATTRVAL_THIS(XALAN_STATIC_UCODE_STRING("."));
-const XalanDOMString
Constants::ATTRVAL_PARENT(XALAN_STATIC_UCODE_STRING(".."));
+const XalanDOMString
Constants::ATTRVAL_ALPHABETIC(XALAN_STATIC_UCODE_STRING("alphabetic"));
const XalanDOMString
Constants::ATTRVAL_ANCESTOR(XALAN_STATIC_UCODE_STRING("ancestor"));
-const XalanDOMString
Constants::ATTRVAL_ID(XALAN_STATIC_UCODE_STRING("id"));
-const XalanDOMString
Constants::ATTRVAL_DATATYPE_TEXT(XALAN_STATIC_UCODE_STRING("text"));
-const XalanDOMString
Constants::ATTRVAL_DATATYPE_NUMBER(XALAN_STATIC_UCODE_STRING("number"));
-const XalanDOMString
Constants::ATTRVAL_ORDER_ASCENDING(XALAN_STATIC_UCODE_STRING("ascending"));
-const XalanDOMString
Constants::ATTRVAL_ORDER_DESCENDING(XALAN_STATIC_UCODE_STRING("descending"));
-const XalanDOMString
Constants::ATTRVAL_CASEORDER_UPPER(XALAN_STATIC_UCODE_STRING("upper-first"));
+const XalanDOMString
Constants::ATTRVAL_ANY(XALAN_STATIC_UCODE_STRING("any"));
const XalanDOMString
Constants::ATTRVAL_CASEORDER_LOWER(XALAN_STATIC_UCODE_STRING("lower-first"));
+const XalanDOMString
Constants::ATTRVAL_CASEORDER_UPPER(XALAN_STATIC_UCODE_STRING("upper-first"));
+const XalanDOMString
Constants::ATTRVAL_DATATYPE_NUMBER(XALAN_STATIC_UCODE_STRING("number"));
+const XalanDOMString
Constants::ATTRVAL_DATATYPE_TEXT(XALAN_STATIC_UCODE_STRING("text"));
const XalanDOMString
Constants::ATTRVAL_DEFAULT_PREFIX(XALAN_STATIC_UCODE_STRING("#default"));
-
+const XalanDOMString
Constants::ATTRVAL_ID(XALAN_STATIC_UCODE_STRING("id"));
const XalanDOMString
Constants::ATTRVAL_INFINITY(XALAN_STATIC_UCODE_STRING("Infinity"));
+const XalanDOMString
Constants::ATTRVAL_MULTI(XALAN_STATIC_UCODE_STRING("multiple"));
const XalanDOMString
Constants::ATTRVAL_NAN(XALAN_STATIC_UCODE_STRING("NaN"));
-
+const XalanDOMString
Constants::ATTRVAL_NO(XALAN_STATIC_UCODE_STRING("no"));
+const XalanDOMString
Constants::ATTRVAL_ORDER_ASCENDING(XALAN_STATIC_UCODE_STRING("ascending"));
+const XalanDOMString
Constants::ATTRVAL_ORDER_DESCENDING(XALAN_STATIC_UCODE_STRING("descending"));
+const XalanDOMString
Constants::ATTRVAL_OTHER(XALAN_STATIC_UCODE_STRING("other"));
+const XalanDOMString
Constants::ATTRVAL_OUTPUT_METHOD_HTML(XALAN_STATIC_UCODE_STRING("html"));
+const XalanDOMString
Constants::ATTRVAL_OUTPUT_METHOD_TEXT(XALAN_STATIC_UCODE_STRING("text"));
+const XalanDOMString
Constants::ATTRVAL_OUTPUT_METHOD_XML(XALAN_STATIC_UCODE_STRING("xml"));
+const XalanDOMString
Constants::ATTRVAL_PARENT(XALAN_STATIC_UCODE_STRING(".."));
+const XalanDOMString
Constants::ATTRVAL_PRESERVE(XALAN_STATIC_UCODE_STRING("preserve"));
+const XalanDOMString
Constants::ATTRVAL_SINGLE(XALAN_STATIC_UCODE_STRING("single"));
+const XalanDOMString
Constants::ATTRVAL_STRIP(XALAN_STATIC_UCODE_STRING("strip"));
+const XalanDOMString
Constants::ATTRVAL_THIS(XALAN_STATIC_UCODE_STRING("."));
+const XalanDOMString
Constants::ATTRVAL_YES(XALAN_STATIC_UCODE_STRING("yes"));
const XalanDOMString
Constants::DEFAULT_DECIMAL_FORMAT(XALAN_STATIC_UCODE_STRING("#default"));
-
+const XalanDOMString
Constants::ELEMNAME_ANCHOR_STRING(XALAN_STATIC_UCODE_STRING("anchor"));
+const XalanDOMString
Constants::ELEMNAME_ANY_STRING(XALAN_STATIC_UCODE_STRING("any"));
+const XalanDOMString
Constants::ELEMNAME_APPLY_IMPORTS_STRING(XALAN_STATIC_UCODE_STRING("apply-imports"));
+const XalanDOMString
Constants::ELEMNAME_APPLY_TEMPLATES_STRING(XALAN_STATIC_UCODE_STRING("apply-templates"));
+const XalanDOMString
Constants::ELEMNAME_ARG_STRING(XALAN_STATIC_UCODE_STRING("arg"));
+const XalanDOMString
Constants::ELEMNAME_ATTRIBUTESET_STRING(XALAN_STATIC_UCODE_STRING("attribute-set"));
+const XalanDOMString
Constants::ELEMNAME_ATTRIBUTE_STRING(XALAN_STATIC_UCODE_STRING("attribute"));
+const XalanDOMString
Constants::ELEMNAME_CALLTEMPLATEARG_STRING(XALAN_STATIC_UCODE_STRING("invoke-arg"));
+const XalanDOMString
Constants::ELEMNAME_CALLTEMPLATE_STRING(XALAN_STATIC_UCODE_STRING("call-template"));
+const XalanDOMString
Constants::ELEMNAME_CALL_STRING(XALAN_STATIC_UCODE_STRING("call"));
+const XalanDOMString
Constants::ELEMNAME_CHILDREN_STRING(XALAN_STATIC_UCODE_STRING("children"));
+const XalanDOMString
Constants::ELEMNAME_CHOOSE_STRING(XALAN_STATIC_UCODE_STRING("choose"));
+const XalanDOMString
Constants::ELEMNAME_COMMENT_STRING(XALAN_STATIC_UCODE_STRING("comment"));
+const XalanDOMString
Constants::ELEMNAME_COMPONENT_STRING(XALAN_STATIC_UCODE_STRING("component"));
+const XalanDOMString
Constants::ELEMNAME_CONSTRUCT_STRING(XALAN_STATIC_UCODE_STRING("construct"));
+const XalanDOMString
Constants::ELEMNAME_CONTENTS_STRING(XALAN_STATIC_UCODE_STRING("contents"));
+const XalanDOMString
Constants::ELEMNAME_COPY_OF_STRING(XALAN_STATIC_UCODE_STRING("copy-of"));
+const XalanDOMString
Constants::ELEMNAME_COPY_STRING(XALAN_STATIC_UCODE_STRING("copy"));
+const XalanDOMString
Constants::ELEMNAME_COUNTERINCREMENT_STRING(XALAN_STATIC_UCODE_STRING("counter-increment"));
+const XalanDOMString
Constants::ELEMNAME_COUNTERRESET_STRING(XALAN_STATIC_UCODE_STRING("counter-reset"));
+const XalanDOMString
Constants::ELEMNAME_COUNTERSCOPE_STRING(XALAN_STATIC_UCODE_STRING("counter-scope"));
+const XalanDOMString
Constants::ELEMNAME_COUNTERS_STRING(XALAN_STATIC_UCODE_STRING("counters"));
+const XalanDOMString
Constants::ELEMNAME_COUNTER_STRING(XALAN_STATIC_UCODE_STRING("counter"));
+const XalanDOMString
Constants::ELEMNAME_CSSSTYLECONVERSION_STRING(XALAN_STATIC_UCODE_STRING("css-style-conversion"));
+const XalanDOMString
Constants::ELEMNAME_DECIMALFORMAT_STRING(XALAN_STATIC_UCODE_STRING("decimal-format"));
+const XalanDOMString
Constants::ELEMNAME_DISPLAYIF_STRING(XALAN_STATIC_UCODE_STRING("display-if"));
+const XalanDOMString
Constants::ELEMNAME_ELEMENT_STRING(XALAN_STATIC_UCODE_STRING("element"));
+const XalanDOMString
Constants::ELEMNAME_EMPTY_STRING(XALAN_STATIC_UCODE_STRING("empty"));
+const XalanDOMString
Constants::ELEMNAME_EVAL_STRING(XALAN_STATIC_UCODE_STRING("eval"));
+const XalanDOMString
Constants::ELEMNAME_EXPECTEDCHILDREN_STRING(XALAN_STATIC_UCODE_STRING("expectedchildren"));
+const XalanDOMString
Constants::ELEMNAME_EXTENSIONHANDLER_STRING(XALAN_STATIC_UCODE_STRING("code-dispatcher"));
+const XalanDOMString
Constants::ELEMNAME_EXTENSION_STRING(XALAN_STATIC_UCODE_STRING("functions"));
+const XalanDOMString
Constants::ELEMNAME_FALLBACK_STRING(XALAN_STATIC_UCODE_STRING("fallback"));
+const XalanDOMString
Constants::ELEMNAME_FOREACH_STRING(XALAN_STATIC_UCODE_STRING("for-each"));
+const XalanDOMString
Constants::ELEMNAME_IF_STRING(XALAN_STATIC_UCODE_STRING("if"));
+const XalanDOMString
Constants::ELEMNAME_IMPORT_STRING(XALAN_STATIC_UCODE_STRING("import"));
+const XalanDOMString
Constants::ELEMNAME_INCLUDE_STRING(XALAN_STATIC_UCODE_STRING("include"));
+const XalanDOMString
Constants::ELEMNAME_KEY_STRING(XALAN_STATIC_UCODE_STRING("key"));
+const XalanDOMString
Constants::ELEMNAME_LOCALE_STRING(XALAN_STATIC_UCODE_STRING("locale"));
+const XalanDOMString
Constants::ELEMNAME_MESSAGE_STRING(XALAN_STATIC_UCODE_STRING("message"));
+const XalanDOMString
Constants::ELEMNAME_NSALIAS_STRING(XALAN_STATIC_UCODE_STRING("namespace-alias"));
+const XalanDOMString
Constants::ELEMNAME_NUMBER_STRING(XALAN_STATIC_UCODE_STRING("number"));
+const XalanDOMString
Constants::ELEMNAME_OTHERWISE_STRING(XALAN_STATIC_UCODE_STRING("otherwise"));
+const XalanDOMString
Constants::ELEMNAME_OUTPUT_STRING(XALAN_STATIC_UCODE_STRING("output"));
+const XalanDOMString
Constants::ELEMNAME_PARAMVARIABLE_OLD_STRING(XALAN_STATIC_UCODE_STRING("param-variable"));
+const XalanDOMString
Constants::ELEMNAME_PARAMVARIABLE_STRING(XALAN_STATIC_UCODE_STRING("param"));
+const XalanDOMString
Constants::ELEMNAME_PARAM_STRING(XALAN_STATIC_UCODE_STRING("param"));
+const XalanDOMString
Constants::ELEMNAME_PI_OLD_STRING(XALAN_STATIC_UCODE_STRING("pi"));
+const XalanDOMString
Constants::ELEMNAME_PI_STRING(XALAN_STATIC_UCODE_STRING("processing-instruction"));
+const XalanDOMString
Constants::ELEMNAME_PRESERVESPACE_STRING(XALAN_STATIC_UCODE_STRING("preserve-space"));
+const XalanDOMString
Constants::ELEMNAME_ROOT_STRING(XALAN_STATIC_UCODE_STRING("root"));
+const XalanDOMString
Constants::ELEMNAME_SCRIPT_STRING(XALAN_STATIC_UCODE_STRING("script"));
+const XalanDOMString
Constants::ELEMNAME_SORT_STRING(XALAN_STATIC_UCODE_STRING("sort"));
+const XalanDOMString
Constants::ELEMNAME_STRIPSPACE_STRING(XALAN_STATIC_UCODE_STRING("strip-space"));
+const XalanDOMString
Constants::ELEMNAME_STYLESHEET_STRING(XALAN_STATIC_UCODE_STRING("stylesheet"));
+const XalanDOMString
Constants::ELEMNAME_TARGETATTRIBUTE_STRING(XALAN_STATIC_UCODE_STRING("target-attribute"));
+const XalanDOMString
Constants::ELEMNAME_TARGETCOMMENT_STRING(XALAN_STATIC_UCODE_STRING("target-comment"));
+const XalanDOMString
Constants::ELEMNAME_TARGETELEMENT_STRING(XALAN_STATIC_UCODE_STRING("target-element"));
+const XalanDOMString
Constants::ELEMNAME_TARGETPI_STRING(XALAN_STATIC_UCODE_STRING("target-pi"));
+const XalanDOMString
Constants::ELEMNAME_TARGETTEXT_STRING(XALAN_STATIC_UCODE_STRING("target-text"));
+const XalanDOMString
Constants::ELEMNAME_TEMPLATE_STRING(XALAN_STATIC_UCODE_STRING("template"));
+const XalanDOMString
Constants::ELEMNAME_TEXT_STRING(XALAN_STATIC_UCODE_STRING("text"));
+const XalanDOMString
Constants::ELEMNAME_TRANSFORM_STRING(XALAN_STATIC_UCODE_STRING("transform"));
+const XalanDOMString
Constants::ELEMNAME_URL_STRING(XALAN_STATIC_UCODE_STRING("uri"));
+const XalanDOMString
Constants::ELEMNAME_USE_STRING(XALAN_STATIC_UCODE_STRING("use"));
+const XalanDOMString
Constants::ELEMNAME_VALUEOF_STRING(XALAN_STATIC_UCODE_STRING("value-of"));
+const XalanDOMString
Constants::ELEMNAME_VARIABLE_STRING(XALAN_STATIC_UCODE_STRING("variable"));
+const XalanDOMString
Constants::ELEMNAME_WHEN_STRING(XALAN_STATIC_UCODE_STRING("when"));
+const XalanDOMString
Constants::ELEMNAME_WITHPARAM_STRING(XALAN_STATIC_UCODE_STRING("with-param"));
const XalanDOMString
Constants::PSEUDONAME_ANY(XALAN_STATIC_UCODE_STRING("*"));
-const XalanDOMString
Constants::PSEUDONAME_ROOT(XALAN_STATIC_UCODE_STRING("/"));
-const XalanDOMString
Constants::PSEUDONAME_TEXT(XALAN_STATIC_UCODE_STRING("#text"));
const XalanDOMString
Constants::PSEUDONAME_COMMENT(XALAN_STATIC_UCODE_STRING("#comment"));
-const XalanDOMString
Constants::PSEUDONAME_PI(XALAN_STATIC_UCODE_STRING("#pi"));
const XalanDOMString
Constants::PSEUDONAME_OTHER(XALAN_STATIC_UCODE_STRING("*"));
+const XalanDOMString
Constants::PSEUDONAME_PI(XALAN_STATIC_UCODE_STRING("#pi"));
+const XalanDOMString
Constants::PSEUDONAME_ROOT(XALAN_STATIC_UCODE_STRING("/"));
+const XalanDOMString
Constants::PSEUDONAME_TEXT(XALAN_STATIC_UCODE_STRING("#text"));
1.6 +11 -10 xml-xalan/c/src/XSLT/Constants.hpp
Index: Constants.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/Constants.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- Constants.hpp 2000/04/11 15:09:21 1.5
+++ Constants.hpp 2000/04/12 19:40:56 1.6
@@ -249,24 +249,25 @@
/*---------------------------------------------
* Literals for XSL attribute names.
*/
- static const XalanDOMString ATTRNAME_CLASS;
- static const XalanDOMString ATTRNAME_ATTRIBUTE;
- static const XalanDOMString ATTRNAME_ATTRIBUTE_SET;
static const XalanDOMString ATTRNAME_AMOUNT;
static const XalanDOMString ATTRNAME_ANCESTOR;
+ static const XalanDOMString ATTRNAME_ATTRIBUTE;
+ static const XalanDOMString ATTRNAME_ATTRIBUTE_SET;
static const XalanDOMString ATTRNAME_CASEORDER;
+ static const XalanDOMString ATTRNAME_CLASS;
static const XalanDOMString ATTRNAME_CONDITION;
static const XalanDOMString ATTRNAME_COPYTYPE;
static const XalanDOMString ATTRNAME_COUNT;
static const XalanDOMString ATTRNAME_DATATYPE;
static const XalanDOMString ATTRNAME_DECIMALSEPARATOR;
- static const XalanDOMString ATTRNAME_DEFAULTSPACE;
static const XalanDOMString ATTRNAME_DEFAULT;
+ static const XalanDOMString ATTRNAME_DEFAULTSPACE;
static const XalanDOMString ATTRNAME_DEPTH;
static const XalanDOMString ATTRNAME_DIGIT;
static const XalanDOMString ATTRNAME_DIGITGROUPSEP;
static const XalanDOMString ATTRNAME_ELEMENT;
static const XalanDOMString ATTRNAME_ELEMENTS;
+ static const XalanDOMString ATTRNAME_EXCLUDE_RESULT_PREFIXES;
static const XalanDOMString ATTRNAME_EXPR;
static const XalanDOMString ATTRNAME_EXTENSIONELEMENTPREFIXES;
static const XalanDOMString ATTRNAME_FORMAT;
@@ -278,16 +279,15 @@
static const XalanDOMString ATTRNAME_IMPORTANCE;
static const XalanDOMString ATTRNAME_INDENTRESULT;
static const XalanDOMString ATTRNAME_INFINITY;
+ static const XalanDOMString ATTRNAME_LANG;
static const XalanDOMString ATTRNAME_LETTERVALUE;
static const XalanDOMString ATTRNAME_LEVEL;
- static const XalanDOMString ATTRNAME_LANG;
- // static const XalanDOMString ATTRNAME_MACRO;
static const XalanDOMString ATTRNAME_MATCH;
static const XalanDOMString ATTRNAME_MINUSSIGN;
static const XalanDOMString ATTRNAME_MODE;
static const XalanDOMString ATTRNAME_NAME;
- static const XalanDOMString ATTRNAME_NAN;
static const XalanDOMString ATTRNAME_NAMESPACE;
+ static const XalanDOMString ATTRNAME_NAN;
static const XalanDOMString ATTRNAME_NDIGITSPERGROUP;
static const XalanDOMString ATTRNAME_ONLY;
static const XalanDOMString ATTRNAME_ORDER;
@@ -301,17 +301,17 @@
static const XalanDOMString ATTRNAME_SELECT;
static const XalanDOMString ATTRNAME_SEQUENCESRC;
static const XalanDOMString ATTRNAME_STYLE;
- static const XalanDOMString ATTRNAME_STYLESHEET_PREFIX;
static const XalanDOMString ATTRNAME_TEST;
static const XalanDOMString ATTRNAME_TOSTRING;
static const XalanDOMString ATTRNAME_TYPE;
static const XalanDOMString ATTRNAME_USE;
static const XalanDOMString ATTRNAME_USEATTRIBUTESETS;
static const XalanDOMString ATTRNAME_VALUE;
- static const XalanDOMString ATTRNAME_XMLNSDEF;
static const XalanDOMString ATTRNAME_XMLNS;
+ static const XalanDOMString ATTRNAME_XMLNSDEF;
static const XalanDOMString ATTRNAME_XMLSPACE;
static const XalanDOMString ATTRNAME_ZERODIGIT;
+ static const XalanDOMString ATTRNAME_STYLESHEET_PREFIX;
// Atributes on the functions element
static const XalanDOMString ATTRNAME_NS;
@@ -463,7 +463,8 @@
TATTRNAME_VALUE = 65,
TATTRNAME_XMLNSDEF = 66,
TATTRNAME_XMLNS = 67,
- TATTRNAME_XMLSPACE = 68
+ TATTRNAME_XMLSPACE = 68,
+ TATTRNAME_EXCLUDE_RESULT_PREFIXES = 69
};
// These are used mainly for keys in the pattern lookup table,
1.5 +24 -4 xml-xalan/c/src/XSLT/ElemApplyTemplates.cpp
Index: ElemApplyTemplates.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemApplyTemplates.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ElemApplyTemplates.cpp 2000/04/11 15:09:22 1.4
+++ ElemApplyTemplates.cpp 2000/04/12 19:40:56 1.5
@@ -108,7 +108,7 @@
break;
default:
- if(!isAttrOK(tok, aname, atts, i))
+ if(!isAttrOK(aname, atts, i, constructionContext))
{
constructionContext.error(XalanDOMString(name)
+ " has an illegal attribute: " + aname);
}
@@ -142,9 +142,24 @@
getStylesheet().getStylesheetRoot().fireTraceEvent(TracerEvent(
executionContext, sourceTree, sourceNode, mode, *this));
}
-
if (0 != sourceNode)
{
+ ElemTemplateElement* const theTemplate =
+ const_cast<ElemTemplateElement* const>
+ (static_cast<const ElemTemplateElement*
const>(this));
+
+ // Dragons here. Push the params & stack frame, but then
execute the
+ // select statement inside transformSelectedChildren, which
must be
+ // executed in the stack frame before the new stack frame.
Because of
+ // depth-first searching, this gets worse.
+ int selectStackFrameIndex =
executionContext.getCurrentStackFrameIndex();
+ executionContext.pushContextMarker(theTemplate,
+ sourceNode);
+
executionContext.setCurrentStackFrameIndex(selectStackFrameIndex);
+ executionContext.pushParams(*this, sourceTree, sourceNode, mode,
+ theTemplate);
+
+ executionContext.setCurrentStackFrameIndex();
transformSelectedChildren(
executionContext,
getStylesheet(),
@@ -154,7 +169,12 @@
sourceNode,
m_isDefaultTemplate == false ? m_mode : mode,
m_pSelectPattern,
- Constants::ELEMNAME_APPLY_TEMPLATES);
+ Constants::ELEMNAME_APPLY_TEMPLATES,
+ selectStackFrameIndex);
+
+ executionContext.popCurrentContext();
+
executionContext.setCurrentStackFrameIndex(selectStackFrameIndex);
+
}
else
{
@@ -173,7 +193,7 @@
{
// char-instructions
case Constants::ELEMNAME_SORT:
- case Constants::ELEMNAME_PARAM:
+ case Constants::ELEMNAME_WITHPARAM:
fResult = true;
break;
1.4 +21 -16 xml-xalan/c/src/XSLT/ElemCallTemplate.cpp
Index: ElemCallTemplate.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemCallTemplate.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ElemCallTemplate.cpp 2000/04/11 15:09:23 1.3
+++ ElemCallTemplate.cpp 2000/04/12 19:40:56 1.4
@@ -88,7 +88,7 @@
lineNumber,
columnNumber,
Constants::ELEMNAME_CALLTEMPLATE),
- m_pNameAVT(0)
+ m_templateName(0)
{
const unsigned int nAttrs = atts.getLength();
@@ -98,8 +98,12 @@
if(equals(aname, Constants::ATTRNAME_NAME))
{
+ m_templateName = new QName(atts.getValue(i),
getStylesheet().getNamespaces());
+
+/*
m_pNameAVT = new AVT(aname, atts.getType(i),
atts.getValue(i),
*this, constructionContext);
+*/
}
else if(!isAttrOK(aname, atts, i, constructionContext))
{
@@ -112,7 +116,7 @@
ElemCallTemplate::~ElemCallTemplate()
{
- delete m_pNameAVT;
+ delete m_templateName;
}
@@ -125,37 +129,38 @@
const QName& mode)
const
{
ElemTemplateElement::execute(executionContext, sourceTree, sourceNode,
mode);
-
- assert(m_pNameAVT != 0);
-
- XalanDOMString templateName;
-
- m_pNameAVT->evaluate(templateName, sourceNode, *this,
executionContext.getXPathExecutionContext());
- if(!isEmpty(templateName))
+ if(!isEmpty(m_templateName->getLocalPart()))
{
ElemTemplateElement* const theTemplate =
-
getStylesheet().getStylesheetRoot().findNamedTemplate(templateName,
executionContext);
+
getStylesheet().getStylesheetRoot().findNamedTemplate(*m_templateName,
+ executionContext);
if(0 != theTemplate)
{
- executionContext.pushContextMarker(theTemplate,
sourceNode);
-
- executionContext.pushParams(*this,
- sourceTree, sourceNode, mode, theTemplate);
+ int selectStackFrameIndex =
executionContext.getCurrentStackFrameIndex();
+ executionContext.pushContextMarker(theTemplate,
+ sourceNode);
+
executionContext.setCurrentStackFrameIndex(selectStackFrameIndex);
+ executionContext.pushParams(*this, sourceTree,
sourceNode, mode,
+ theTemplate);
+ executionContext.markGlobalStackFrame();
+ executionContext.setCurrentStackFrameIndex();
theTemplate->execute(executionContext, sourceTree,
sourceNode, mode);
executionContext.popCurrentContext();
+
executionContext.setCurrentStackFrameIndex(selectStackFrameIndex);
}
else
{
- executionContext.error("Could not find template named:
'" + templateName + "'");
+ executionContext.error("Could not find template named:
'" +
+ m_templateName->getLocalPart() + "'");
}
}
else
{
- executionContext.error("Could not resolve name AVT in
xsl:call-template.");
+ executionContext.error("Could not resolve name in
xsl:call-template.");
}
}
1.5 +2 -2 xml-xalan/c/src/XSLT/ElemCallTemplate.hpp
Index: ElemCallTemplate.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemCallTemplate.hpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ElemCallTemplate.hpp 2000/04/11 15:09:23 1.4
+++ ElemCallTemplate.hpp 2000/04/12 19:40:57 1.5
@@ -58,7 +58,7 @@
#define XALAN_ELEMCALLTEMPLATE_HEADER_GUARD
/**
- * $Id: ElemCallTemplate.hpp,v 1.4 2000/04/11 15:09:23 dbertoni Exp $
+ * $Id: ElemCallTemplate.hpp,v 1.5 2000/04/12 19:40:57 jdonohue Exp $
*
*
* $State: Exp $
@@ -128,7 +128,7 @@
operator=(const ElemCallTemplate &);
// Data members...
- const AVT* m_pNameAVT;
+ const QName* m_templateName;
};
1.4 +4 -5 xml-xalan/c/src/XSLT/ElemForEach.cpp
Index: ElemForEach.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemForEach.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ElemForEach.cpp 2000/04/11 15:09:24 1.3
+++ ElemForEach.cpp 2000/04/12 19:40:58 1.4
@@ -146,11 +146,10 @@
assert(m_pSelectPattern != 0);
transformSelectedChildren(executionContext, getStylesheet(),
- *this,
- this,
-
sourceTree,sourceNode,mode,
-
m_pSelectPattern,
-
Constants::ELEMNAME_FOREACH);
+ *this,this,sourceTree,sourceNode,mode,
+ m_pSelectPattern, Constants::ELEMNAME_FOREACH,
+ executionContext.getCurrentStackFrameIndex()
+ );
}
else
{
1.4 +1 -1 xml-xalan/c/src/XSLT/ElemIf.cpp
Index: ElemIf.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemIf.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ElemIf.cpp 2000/04/11 15:09:24 1.3
+++ ElemIf.cpp 2000/04/12 19:40:58 1.4
@@ -114,7 +114,7 @@
break;
default:
- if(!isAttrOK(tok, aname, atts, i))
+ if(!isAttrOK(aname, atts, i, constructionContext))
{
constructionContext.error(name + " has an
illegal attribute: " + aname);
}
1.8 +62 -32 xml-xalan/c/src/XSLT/ElemLiteralResult.cpp
Index: ElemLiteralResult.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemLiteralResult.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ElemLiteralResult.cpp 2000/04/11 15:09:24 1.7
+++ ElemLiteralResult.cpp 2000/04/12 19:40:58 1.8
@@ -70,6 +70,7 @@
#include <PlatformSupport/STLHelper.hpp>
+#include <sax/SAXException.hpp>
#include "AVT.hpp"
#include "Constants.hpp"
@@ -77,6 +78,9 @@
#include "StylesheetConstructionContext.hpp"
#include "StylesheetExecutionContext.hpp"
+#if !defined(XALAN_NO_NAMESPACES)
+ using std::make_pair;
+#endif
ElemLiteralResult::ElemLiteralResult(
@@ -116,27 +120,15 @@
if(startsWith(ns,
constructionContext.getXSLNameSpaceURLPre()))
{
- const XalanDOMString localName =
substring(aname, indexOfNSSep + 1);
-
- if(equals(localName,
Constants::ATTRNAME_EXTENSIONELEMENTPREFIXES))
- {
+ const XalanDOMString localName =
substring(aname,indexOfNSSep + 1);
+ processPrefixControl(localName, atts.getValue(i));
+ if(0 != m_excludeResultPrefixes.size())
needToProcess = false;
-
- const XalanDOMString qnames =
atts.getValue(i);
-
- StringTokenizer
tokenizer(qnames,
-
XALAN_STATIC_UCODE_STRING(" \t\n\r"),
-
false);
-
-
m_extensionElementPrefixes.reserve(tokenizer.countTokens());
-
- while(tokenizer.hasMoreTokens())
- {
-
m_extensionElementPrefixes.push_back(tokenizer.nextToken());
- }
- }
}
}
+ else
+ // don't process namespace decls
+ needToProcess = false;
}
if(needToProcess == true)
@@ -152,6 +144,7 @@
*this,
constructionContext));
}
}
+ removeExcludedPrefixes(m_excludeResultPrefixes);
}
}
@@ -202,6 +195,10 @@
}
}
+ // @@@ JMD:
+ // This logic has been eliminated in the java version and replaced by a
+ // method 'processResultNS' in the base class ElemTemplateElement
+ // This also requires implementation of namespace alias logic
const ElemTemplateElement* elem = this;
const NamespaceVectorType* nsVector = &elem->getNameSpace();
@@ -230,22 +227,10 @@
|| 0 !=
getStylesheet().lookupExtensionNSHandler(srcURI)
||
equalsIgnoreCase(srcURI,executionContext.getXalanXSLNameSpaceURL());
- if(!isXSLNS)
+ if(!isXSLNS &&
!equalsIgnoreCase(srcURI,desturi)) // TODO: Check for extension namespaces
{
- if(startsWith(srcURI,
XALAN_STATIC_UCODE_STRING("quote:")))
- {
- srcURI = substring(srcURI, 6);
- }
-
- if(!equalsIgnoreCase(srcURI,desturi))
// TODO: Check for extension namespaces
- {
-
executionContext.addResultAttribute(attrName, srcURI);
- }
+
executionContext.addResultAttribute(attrName, srcURI);
}
- else
- {
- ns.setResultCandidate(false);
- }
}
}
@@ -273,8 +258,53 @@
else
more = false;
}
+/*
+ java:
+ // Handle namespaces(including those on the ancestor chain
+ // and stylesheet root declarations).
+ processResultNS(processor);
+*/
executeChildren(executionContext, sourceTree, sourceNode, mode);
executionContext.endElement(toCharArray(m_QName));
}
+
+/**
+ * Process the exclude-result-prefixes or the extension-element-prefixes
+ * attributes, for the purpose of prefix exclusion.
+ */
+void ElemLiteralResult::processPrefixControl(const DOMString& localName,
+ const DOMString& attrValue)
+{
+/*
+ OLD:
+ if(equals(localName, Constants::ATTRNAME_EXTENSIONELEMENTPREFIXES))
+ {
+ needToProcess = false;
+ const DOMString qnames = attrValue;
+ StringTokenizer tokenizer(qnames, " \t\n\r", false);
+ m_extensionElementPrefixes.reserve(tokenizer.countTokens());
+ while(tokenizer.hasMoreTokens())
+ {
+
m_extensionElementPrefixes.push_back(tokenizer.nextToken());
+ }
+ }
+*/
+ if(equals(localName, Constants::ATTRNAME_EXTENSIONELEMENTPREFIXES) ||
+ equals(localName,
Constants::ATTRNAME_EXCLUDE_RESULT_PREFIXES))
+ {
+ const DOMString qnames = attrValue;
+ StringTokenizer tokenizer(qnames, " \t\n\r", false);
+ while(tokenizer.hasMoreTokens())
+ {
+ DOMString prefix = tokenizer.nextToken();
+ if(equalsIgnoreCase(prefix, "#default")) prefix="";
+ DOMString ns =
getStylesheet().getNamespaceForPrefixFromStack(prefix);
+ if(isEmpty(ns))
+ throw SAXException("Invalid prefix in
exclude-result-prefixes");
+ m_excludeResultPrefixes.insert(make_pair(prefix, ns));
+ }
+ }
+}
+
1.6 +21 -4 xml-xalan/c/src/XSLT/ElemLiteralResult.hpp
Index: ElemLiteralResult.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemLiteralResult.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- ElemLiteralResult.hpp 2000/04/11 15:09:24 1.5
+++ ElemLiteralResult.hpp 2000/04/12 19:40:59 1.6
@@ -118,21 +118,38 @@
#if defined(XALAN_NO_NAMESPACES)
typedef vector<const AVT*> AVTVectorType;
- typedef vector<XalanDOMString>
ExtensionElementPrefixesVectoryType;
+ typedef vector<XalanDOMString>
ExtensionElementPrefixesVectorType;
+ typedef map<DOMString, DOMString> String2StringMapType;
#else
typedef std::vector<const AVT*> AVTVectorType;
- typedef std::vector<XalanDOMString>
ExtensionElementPrefixesVectoryType;
+ typedef std::vector<XalanDOMString>
ExtensionElementPrefixesVectorType;
+ typedef std::map<DOMString, DOMString> String2StringMapType;
#endif
-
/**
* A stack to keep track of the attribute elements.
*/
AVTVectorType m_avts;
XalanDOMString m_QName;
+
+
+ ExtensionElementPrefixesVectorType
m_extensionElementPrefixes;
+
+ /**
+ * This is in support of the exclude-result-prefixes attribute. It is
+ * really needed only at construction time, and so should probably go
+ * somewhere else.
+ */
+ String2StringMapType m_excludeResultPrefixes;
- ExtensionElementPrefixesVectoryType
m_extensionElementPrefixes;
+/**
+ * Process the exclude-result-prefixes or the extension-element-prefixes
+ * attributes, for the purpose of prefix exclusion.
+ */
+void ElemLiteralResult::processPrefixControl(const DOMString& localName,
+ const DOMString& attrValue);
+
};
1.9 +23 -10 xml-xalan/c/src/XSLT/ElemNumber.cpp
Index: ElemNumber.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemNumber.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ElemNumber.cpp 2000/04/11 20:05:07 1.8
+++ ElemNumber.cpp 2000/04/12 19:40:59 1.9
@@ -208,6 +208,7 @@
+
XalanNode*
ElemNumber::findAncestor(
StylesheetExecutionContext&
executionContext,
@@ -265,8 +266,8 @@
if(0 != fromMatchPattern)
{
if(fromMatchPattern->getMatchScore(contextCopy,
-
*this,
-
executionContext.getXPathExecutionContext()) !=
XPath::s_MatchScoreNone)
+ *this,
+
executionContext.getXPathExecutionContext()) != XPath::s_MatchScoreNone)
{
contextCopy = 0;
break;
@@ -383,6 +384,7 @@
if((Constants::NUMBERLEVEL_ANY == m_level) ||
(Constants::NUMBERLEVEL_SINGLE == m_level))
{
+ int numberFound;
if(Constants::NUMBERLEVEL_SINGLE == m_level)
{
XalanNode* target =
@@ -397,7 +399,9 @@
if(target != 0)
{
-
numberList.push_back(getSiblingNumber(executionContext, countMatchPattern,
target));
+ numberFound =
getSiblingNumber(executionContext, countMatchPattern, target);
+ if (numberFound > 0)
+
numberList.push_back(numberFound);
}
else
{
@@ -413,10 +417,6 @@
if(0 != m_fromMatchPattern)
{
-// @@ JMD: was as below, which looked wrong to me based on java code and the
-// meaning of the arguments. The sad fact is that the number of tests we
-// passed went DOWN after this change
-// from =
findPrecedingOrAncestorOrSelf(executionContext, 0, m_fromMatchPattern,
from =
findPrecedingOrAncestorOrSelf(executionContext, m_fromMatchPattern,
countMatchPattern,
sourceNode, this);
@@ -432,7 +432,10 @@
XalanNode* const fromPos = (from !=
sourceNode) ? getNextInTree(from, from) : from;
-
numberList.push_back(getNumberInTree(executionContext.getXPathExecutionContext(),
countMatchPattern, fromPos, from, sourceNode, 0));
+ numberFound =
getNumberInTree(executionContext.getXPathExecutionContext(),
+ countMatchPattern, fromPos,
from, sourceNode, 0);
+ if (numberFound > 0)
+ numberList.push_back(numberFound);
}
}
else // if NUMBERLEVEL_MULTI
@@ -716,6 +719,10 @@
XalanDOMString sepString(XALAN_STATIC_UCODE_STRING("."));
XalanDOMString lastSepString;
+ // Pathological cases
+ if (nNumbers == 0) return formattedNumber;
+ if (contextNode == 0) return formattedNumber;
+
XalanDOMString formatValue = !isEmpty(m_format_avt)
? executionContext.evaluateAttrVal(contextNode,
*this,
@@ -751,7 +758,7 @@
leaderStr = *it;
tokenVector.erase(it);
}
- it += tokenVector.size()-1;
+ it = tokenVector.end()-1;
if(! isLetterOrDigit(charAt((*it), 0)))
{
trailerStr = *it;
@@ -939,12 +946,18 @@
long val,
bool prefixesAreOK)
{
- if(val <= 0)
+ if(val < 0)
{
return XalanDOMString(XALAN_STATIC_UCODE_STRING("#E(") +
LongToDOMString(val) +
XALAN_STATIC_UCODE_STRING(")"));
}
+ // Make this match the conformance test
+ else if(val == 0)
+ {
+ return XalanDOMString("0");
+ }
+
XalanDOMString roman;
1.5 +1 -1 xml-xalan/c/src/XSLT/ElemTemplate.cpp
Index: ElemTemplate.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemTemplate.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ElemTemplate.cpp 2000/04/11 15:09:26 1.4
+++ ElemTemplate.cpp 2000/04/12 19:40:59 1.5
@@ -126,7 +126,7 @@
break;
default:
- if(isAttrOK(tok, aname, atts, i)== false)
+ if(!isAttrOK(aname, atts, i, constructionContext))
{
constructionContext.error(name + " has an
illegal attribute: " + aname);
}
1.13 +117 -3 xml-xalan/c/src/XSLT/ElemTemplateElement.cpp
Index: ElemTemplateElement.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemTemplateElement.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- ElemTemplateElement.cpp 2000/04/12 17:12:43 1.12
+++ ElemTemplateElement.cpp 2000/04/12 19:40:59 1.13
@@ -99,6 +99,10 @@
#include "SelectionEvent.hpp"
#include "TracerEvent.hpp"
+#if !defined(XALAN_NO_NAMESPACES)
+ using std::make_pair;
+#endif
+
/**
* @param processor The XSLT Processor.
@@ -123,7 +127,7 @@
m_columnNumber(columnNumber),
m_defaultSpace(true),
m_finishedConstruction(false),
- m_namespaces(m_stylesheet.getCurrentNamespace()),
+ m_namespaces(),
m_elemName(name),
m_xslToken(xslToken),
m_parentNode(0),
@@ -132,6 +136,30 @@
m_firstChild(0),
m_surrogateChildren(*this)
{
+ /*
+ * Copy the stylesheet namespaces to the element namespace vector
+ */
+ const Stylesheet::NamespacesStackType& stylesheetNamespaces =
+ m_stylesheet.getNamespaces();
+ int n = stylesheetNamespaces.size();
+ for(int i = (n-1); i >= 0; i--)
+ {
+ const Stylesheet::NamespaceVectorType& nsVector =
stylesheetNamespaces[i];
+ for(int j = 0; j < nsVector.size(); j++)
+ {
+ NameSpace ns = nsVector[j];
+ if(isEmpty(ns.getURI()))
+ continue;
+ if(!shouldExcludeResultNamespaceNode(ns.getPrefix(),
ns.getURI()))
+ {
+ m_namespaces.push_back(ns);
+ }
+ else
+ {
+
m_excludedNamespaces.insert(make_pair(ns.getPrefix(), ns.getURI()));
+ }
+ }
+ }
}
@@ -577,13 +605,15 @@
XalanNode*
sourceNodeContext,
const QName& mode,
const XPath*
selectPattern,
- int
xslToken) const
+ int
xslToken,
+ int selectStackFrameIndex) const
{
// Sort the nodes according to the xsl:sort method
const int tok = xslInstruction.getXSLToken();
NodeSorter::NodeSortKeyVectorType keys;
+ // @@ JMD: Now in method processSortKeys in java ...
if((Constants::ELEMNAME_APPLY_TEMPLATES == tok) ||
(Constants::ELEMNAME_FOREACH == tok))
{
@@ -622,11 +652,37 @@
keys.push_back(key);
}
}
+ // @@ JMD: Now in method processSortKeys in java ...
MutableNodeRefList sourceNodes;
+/*
+ @@@ JMD: This is newer java code that is not implemented in C++; so, the
+ manipulation of the current stack frame index really does nothing now,
it's
+ just a placeholder for future implementation
+
+ // We can only do callbacks if the node list isn't sorted.
+ NodeCallback callback = (null == keys) ? this : null;
+*/
+
+ int savedCurrentStackFrameIndex =
executionContext.getCurrentStackFrameIndex();
if (0 != selectPattern)
{
+
executionContext.setCurrentStackFrameIndex(selectStackFrameIndex);
+/*
+ @@@ JMD: This is newer java code that is not implemented in C++; the
+ callback mechanism may affect the correct positioning of the stack
frame and
+ may be why the parameters aren't working right
+
+ // Optimization note: is there a way we can keep from creating
+ // a new callback context every time?
+ TemplateElementContext callbackContext
+ = (null != callback)
+ ? new TemplateElementContext(stylesheetTree,
xslInstruction,
+ template, sourceNodeContext, mode,
xslToken, tcontext,
+ savedCurrentStackFrameIndex) : null;
+*/
+
XObject* const result = selectPattern->execute(
sourceNodeContext,
xslInstruction,
@@ -644,6 +700,7 @@
*selectPattern,
result));
}
+
executionContext.setCurrentStackFrameIndex(savedCurrentStackFrameIndex);
}
else if (keys.size() > 0)
{
@@ -658,7 +715,9 @@
{
NodeSorter
sorter(executionContext.getXPathExecutionContext());
+
executionContext.setCurrentStackFrameIndex(selectStackFrameIndex);
sorter.sort(sourceNodes, keys);
+
executionContext.setCurrentStackFrameIndex(savedCurrentStackFrameIndex);
}
const MutableNodeRefList
savedContextNodeList(executionContext.getContextNodeList());
@@ -1068,6 +1127,11 @@
}
+/**
+ * Throw a template element error.
+ *
+ * @param msg Description of the error that occured.
+ */
XalanNode*
ElemTemplateElement::appendChild(XalanNode* oldChild)
@@ -1088,7 +1152,6 @@
}
-
void
ElemTemplateElement::setNodeValue(const XalanDOMString& /*
nodeValue */)
{
@@ -1169,6 +1232,57 @@
return 0;
}
+
+void ElemTemplateElement::removeExcludedPrefixes(
+ const String2StringMapType& excludeResultPrefixes)
+{
+ if(0 !=excludeResultPrefixes.size() && 0 != m_namespaces.size())
+ {
+ for( NamespaceVectorType::iterator it = m_namespaces.begin();
+ it != m_namespaces.end(); )
+ {
+ NameSpace ns = *it;
+ DOMString p = ns.getPrefix();
+ String2StringMapType::const_iterator it2 =
excludeResultPrefixes.find(p);
+ if(it2 != excludeResultPrefixes.end())
+ {
+ m_excludedNamespaces.insert(make_pair(p,
ns.getURI()));
+ it = m_namespaces.erase(it);
+ }
+ else
+ it++;
+ }
+ }
+}
+
+bool ElemTemplateElement::shouldExcludeResultNamespaceNode(
+ const DOMString& prefix, const DOMString& uri)
+{
+/*
+ @@ JMD: Need to implement this ---
+
+ if(uri.equals(m_stylesheet.m_XSLNameSpaceURL)
+ || (null != m_stylesheet.lookupExtensionNSHandler(uri))
+ || uri.equals("http://xml.apache.org/xslt")
+ || uri.equals("http://xsl.lotus.com/")
+ || uri.equals("http://xsl.lotus.com"))
+ return true;
+ ElemTemplateElement elem = this;
+ while(0 != elem)
+ {
+ elem = elem.m_parentNode;
+ if(0 == elem)
+ {
+ if(0 != m_stylesheet.m_excludeResultPrefixes)
+ {
+
if(m_stylesheet.m_excludeResultPrefixes.contains(prefix))
+ return true;
+ }
+ }
+ }
+*/
+ return false;
+}
XalanNodeList*
1.9 +49 -3 xml-xalan/c/src/XSLT/ElemTemplateElement.hpp
Index: ElemTemplateElement.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemTemplateElement.hpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ElemTemplateElement.hpp 2000/04/11 15:09:26 1.8
+++ ElemTemplateElement.hpp 2000/04/12 19:40:59 1.9
@@ -65,6 +65,7 @@
#include <vector>
+#include <map>
@@ -144,7 +145,7 @@
* @param atts attribute list where the element comes from (not used
at
* this time)
* @param which index into the attribute list (not used at this time)
- * @return true if this attribute should not be flagged as an
error
+ * @return true if this is a namespace name
*/
bool
isAttrOK(
@@ -306,8 +307,11 @@
#if defined(XALAN_NO_NAMESPACES)
typedef vector<NameSpace> NamespaceVectorType;
+ typedef map<XalanDOMString, XalanDOMString> String2StringMapType;
#else
- typedef std::vector<NameSpace> NamespaceVectorType;
+ typedef std::vector<NameSpace> NamespaceVectorType;
+ typedef std::map<XalanDOMString, XalanDOMString>
String2StringMapType;
+
#endif
/**
@@ -343,7 +347,14 @@
m_finishedConstruction = bFinished;
}
+ /**
+ * Remove any excluded prefixes from the current namespaces.
+ *
+ * @param map of prefixes and associated namespaces to be excluded
+ */
+ void removeExcludedPrefixes(const String2StringMapType&
excludeResultPrefixes);
+
// Type-safe getters/setters...
/**
@@ -436,6 +447,8 @@
virtual ElemTemplateElement*
appendChildElem(ElemTemplateElement* newChild);
+ // Type-safe getters...
+
/**
* Append a child.
*
@@ -517,6 +530,12 @@
virtual XalanNode*
removeChild(XalanNode* oldChild);
+ /**
+ * Add a child to the child list.
+ *
+ * @exception DOMException
+ * @param newChild child node to add
+ */
virtual XalanNode*
appendChild(XalanNode* newChild);
@@ -627,6 +646,8 @@
* @param selectPattern The XPath with which to perform the selection.
* @param xslToken The current XSLT instruction (deprecated -- I do not
* think we want this).
+ * @param selectStackFrameIndex stack frame context for executing the
+ * select statement
*/
void
transformSelectedChildren(
@@ -638,7 +659,32 @@
XalanNode*
sourceNodeContext,
const QName& mode,
const XPath*
selectPattern,
- int
xslToken) const;
+ int xslToken,
+ int selectStackFrameIndex) const;
+
+ /**
+ * Tell if the result namespace decl should be excluded. Should be called
before
+ * namespace aliasing (I think).
+ * TODO: I believe this contains a bug, in that included elements will
check with with
+ * their including stylesheet, since in this implementation right now the
included
+ * templates are merged with the including stylesheet. The XSLT
Recommendation says: "The
+ * designation of a namespace as an excluded namespace is effective within
+ * the subtree of the stylesheet rooted at the element bearing the
+ * <code>exclude-result-prefixes</code> or
<code>xsl:exclude-result-prefixes</code>
+ * attribute; a subtree rooted at an <code>xsl:stylesheet</code> element
+ * does not include any stylesheets imported or included by children
+ * of that <code>xsl:stylesheet</code> element."
+ */
+ bool shouldExcludeResultNamespaceNode(
+ const XalanDOMString& prefix, const XalanDOMString& uri);
+
+ /**
+ * The table of namespaces that are excluded from being
+ * used in the result tree but which need to be used
+ * in to resolve prefixes.
+ * @serial
+ */
+ String2StringMapType m_excludedNamespaces;
/**
* Given an element and mode, find the corresponding
1.4 +1 -1 xml-xalan/c/src/XSLT/ElemValueOf.cpp
Index: ElemValueOf.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemValueOf.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ElemValueOf.cpp 2000/04/11 15:09:26 1.3
+++ ElemValueOf.cpp 2000/04/12 19:41:00 1.4
@@ -121,7 +121,7 @@
break;
default:
- if(!isAttrOK(tok, aname, atts, i))
+ if(!isAttrOK(aname, atts, i, constructionContext))
{
constructionContext.error(name + " has an
illegal attribute: " + aname);
}
1.4 +1 -1 xml-xalan/c/src/XSLT/ElemVariable.cpp
Index: ElemVariable.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemVariable.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ElemVariable.cpp 2000/04/11 15:09:27 1.3
+++ ElemVariable.cpp 2000/04/12 19:41:00 1.4
@@ -125,7 +125,7 @@
break;
default:
- if(!isAttrOK(tok, aname, atts, i))
+ if(!isAttrOK(aname, atts, i, constructionContext))
{
constructionContext.error(name + " has an
illegal attribute: " + aname);
}
1.4 +1 -1 xml-xalan/c/src/XSLT/ElemWhen.cpp
Index: ElemWhen.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemWhen.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ElemWhen.cpp 2000/04/11 15:09:27 1.3
+++ ElemWhen.cpp 2000/04/12 19:41:00 1.4
@@ -106,7 +106,7 @@
break;
default:
- if(!isAttrOK(tok, aname, atts, i))
+ if(!isAttrOK(aname, atts, i, constructionContext))
{
constructionContext.error(name + " has an
illegal attribute: " + aname);
}
1.6 +1 -1 xml-xalan/c/src/XSLT/FunctionDocument.cpp
Index: FunctionDocument.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionDocument.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- FunctionDocument.cpp 2000/04/11 15:09:27 1.5
+++ FunctionDocument.cpp 2000/04/12 19:41:00 1.6
@@ -234,7 +234,7 @@
executionContext.getNodeData(*arg->nodeset().item(i)) :
arg->str();
- if(length(ref) > 0)
+ if(! isEmpty(ref))
{
if(docContext == 0)
{
1.5 +3 -0 xml-xalan/c/src/XSLT/FunctionKey.cpp
Index: FunctionKey.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionKey.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- FunctionKey.cpp 2000/04/11 15:09:27 1.4
+++ FunctionKey.cpp 2000/04/12 19:41:00 1.5
@@ -79,6 +79,9 @@
#include <XPath/XPathExecutionContext.hpp>
+#if !defined(XALAN_NO_NAMESPACES)
+ using std::set;
+#endif
1.4 +6 -0 xml-xalan/c/src/XSLT/FunctionKey.hpp
Index: FunctionKey.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/FunctionKey.hpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FunctionKey.hpp 2000/04/11 15:09:27 1.3
+++ FunctionKey.hpp 2000/04/12 19:41:00 1.4
@@ -84,6 +84,12 @@
{
public:
+#if defined(XALAN_NO_NAMESPACES)
+ typedef vector<XObject*> XObjectPtrVectorType;
+#else
+ typedef std::vector<XObject*> XObjectPtrVectorType;
+#endif
+
FunctionKey();
virtual
1.7 +6 -1 xml-xalan/c/src/XSLT/NumeratorFormatter.cpp
Index: NumeratorFormatter.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/NumeratorFormatter.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- NumeratorFormatter.cpp 2000/04/11 15:09:28 1.6
+++ NumeratorFormatter.cpp 2000/04/12 19:41:01 1.7
@@ -484,9 +484,14 @@
{
XalanDOMString roman;
- if(val <= 0)
+ if(val < 0)
{
roman = XalanDOMString(XALAN_STATIC_UCODE_STRING("#E(")) +
XalanDOMString(val) + XalanDOMString(XALAN_STATIC_UCODE_STRING(")"));
+ }
+ // Make this match the conformance test
+ else if(val == 0)
+ {
+ roman = DOMString(XALAN_STATIC_UCODE_STRING("0"));
}
else
{
1.9 +4 -7 xml-xalan/c/src/XSLT/Stylesheet.hpp
Index: Stylesheet.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/Stylesheet.hpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- Stylesheet.hpp 2000/04/11 15:09:29 1.8
+++ Stylesheet.hpp 2000/04/12 19:41:01 1.9
@@ -599,13 +599,10 @@
* XSL document, according to the rules specified in the xsl draft.
*
* @param executionContext current execution context
- * @param sourceTree where the targetElem is to be found
- * @param targetElem element that needs a rule
- * @param mode string indicating the display
mode
- * @param useImports means that this is an xsl:apply-imports
commend
- * @param foundStylesheet if non-null, the Stylesheet that the
found
- * template
belongs to will be returned in the
- *
foundStylesheet[0]
+ * @param sourceTree where the targetElem is to be found
+ * @param targetElem element that needs a rule
+ * @param mode string indicating the display mode
+ * @param useImports means that this is an xsl:apply-imports
commend
* @return pointer to rule that best matches targetElem
*/
virtual
1.6 +21 -0 xml-xalan/c/src/XSLT/StylesheetExecutionContext.hpp
Index: StylesheetExecutionContext.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetExecutionContext.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- StylesheetExecutionContext.hpp 2000/04/11 15:09:29 1.5
+++ StylesheetExecutionContext.hpp 2000/04/12 19:41:01 1.6
@@ -480,6 +480,27 @@
getParamVariable(const QName& theName) const = 0;
/**
+ * Get the top of the stack frame from where a search
+ * for a variable or param should take place.
+ *
+ * @return current value of index
+ */
+ virtual int getCurrentStackFrameIndex() const = 0;
+
+ /**
+ * Set the top of the stack frame from where a search
+ * for a variable or param should take place.
+ *
+ * @param currentStackFrameIndex new value of index
+ */
+ virtual void setCurrentStackFrameIndex(int currentStackFrameIndex = -1)
= 0;
+
+ /**
+ * Mark the top of the global stack where global searches should start.
+ */
+ virtual void markGlobalStackFrame() = 0;
+
+ /**
* Receive notification of the beginning of a document.
*
* <p>The SAX parser will invoke this method only once, before any
1.5 +17 -1
xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.cpp
Index: StylesheetExecutionContextDefault.cpp
===================================================================
RCS file:
/home/cvs/xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- StylesheetExecutionContextDefault.cpp 2000/04/11 15:09:30 1.4
+++ StylesheetExecutionContextDefault.cpp 2000/04/12 19:41:01 1.5
@@ -290,7 +290,7 @@
AttributeListImpl
thePendingAttributes(m_xsltProcessor.getPendingAttributes());
// Remove the old attribute, then add the new one...
- thePendingAttributes.removeAttribute(theName);
+ // thePendingAttributes.removeAttribute(theName);
thePendingAttributes.addAttribute(theName, theNewType, theNewValue);
// Set the new pending attributes...
@@ -497,6 +497,22 @@
return m_xsltProcessor.getParamVariable(theName);
}
+int StylesheetExecutionContextDefault::getCurrentStackFrameIndex() const
+{
+ return m_xsltProcessor.getVariableStacks().getCurrentStackFrameIndex();
+}
+
+void StylesheetExecutionContextDefault::setCurrentStackFrameIndex(int
+ currentStackFrameIndex)
+{
+
m_xsltProcessor.getVariableStacks().setCurrentStackFrameIndex(currentStackFrameIndex);
+}
+
+void StylesheetExecutionContextDefault::markGlobalStackFrame()
+{
+ m_xsltProcessor.getVariableStacks().markGlobalStackFrame();
+}
+
void
1.6 +6 -0
xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.hpp
Index: StylesheetExecutionContextDefault.hpp
===================================================================
RCS file:
/home/cvs/xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- StylesheetExecutionContextDefault.hpp 2000/04/11 15:09:30 1.5
+++ StylesheetExecutionContextDefault.hpp 2000/04/12 19:41:01 1.6
@@ -241,6 +241,12 @@
virtual XObject*
getParamVariable(const QName& theName) const;
+ virtual int getCurrentStackFrameIndex() const;
+
+ virtual void setCurrentStackFrameIndex(int currentStackFrameIndex = -1);
+
+ virtual void markGlobalStackFrame();
+
virtual void
startDocument();
1.16 +36 -16 xml-xalan/c/src/XSLT/StylesheetHandler.cpp
Index: StylesheetHandler.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetHandler.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- StylesheetHandler.cpp 2000/04/11 15:09:30 1.15
+++ StylesheetHandler.cpp 2000/04/12 19:41:02 1.16
@@ -125,7 +125,7 @@
m_constructionContext(constructionContext),
m_includeBase(stylesheetTree.getBaseIdentifier()),
m_pTemplate(0),
- m_pLastPopped(0),
+ m_lastPopped(0),
m_inTemplate(false),
m_foundStylesheet(false),
m_foundNotImport(false),
@@ -518,6 +518,21 @@
{
throw
SAXException("default-space no longer supported! Use xsl:strip-space or
xsl:preserve-space instead.");
}
+ else if(equals(aname,
Constants::ATTRNAME_EXCLUDE_RESULT_PREFIXES))
+ {
+
m_constructionContext.warn(Constants::ATTRNAME_EXCLUDE_RESULT_PREFIXES
+ + " not
supported yet!");
+
+ /*
+ @@ TODO: implement this
---
+ StringToStringTable
excluded =
+
m_stylesheet.getExcludeResultPrefixes();
+ excluded =
+
m_stylesheet.processExcludeResultPrefixes(atts.getValue(i),
+
excluded);
+
m_stylesheet.setExcludeResultPrefixes(excluded);
+ */
+ }
else if(equals(aname,
Constants::ATTRNAME_EXTENSIONELEMENTPREFIXES))
{
// BEGIN SANJIVA CODE
@@ -1153,8 +1168,10 @@
{
foundIt = true;
- PushPopIncludeState theStateHandler(*this);
+// ?? PushPopIncludeState
theStateHandler(*this);
+ ElemTemplateElement* saved_pLastPopped = m_lastPopped;
+ m_lastPopped = 0;
const XalanDOMString href = atts.getValue(i);
assert(m_stylesheet.getIncludeStack().back() != 0);
@@ -1173,6 +1190,7 @@
m_stylesheet.getIncludeStack().pop_back();
+ m_lastPopped = saved_pLastPopped;
}
else if(!isAttrOK(aname, atts, i))
{
@@ -1198,11 +1216,11 @@
m_stylesheet.popNamespaces();
- m_pLastPopped = m_elemStack.back();
+ m_lastPopped = m_elemStack.back();
m_elemStack.pop_back();
- m_pLastPopped->setFinishedConstruction(true);
+ m_lastPopped->setFinishedConstruction(true);
- const int tok = m_pLastPopped->getXSLToken();
+ const int tok = m_lastPopped->getXSLToken();
if(Constants::ELEMNAME_TEMPLATE == tok)
{
@@ -1211,7 +1229,7 @@
else if((Constants::ELEMNAME_PARAMVARIABLE == tok) ||
Constants::ELEMNAME_VARIABLE == tok)
{
- ElemVariable* const var =
static_cast<ElemVariable*>(m_pLastPopped);
+ ElemVariable* const var =
static_cast<ElemVariable*>(m_lastPopped);
if(var->isTopLevel())
{
@@ -1227,7 +1245,7 @@
tok == Constants::ELEMNAME_TEXT)
{
// These are stray elements, so delete them...
- delete m_pLastPopped;
+ delete m_lastPopped;
}
// BEGIN SANJIVA CODE
@@ -1314,8 +1332,14 @@
if(0 != last)
{
- if(Constants::ELEMNAME_TEXTLITERALRESULT ==
last->getXSLToken() &&
-
static_cast<ElemTextLiteral*>(last)->isPreserveSpace() == false)
+ ElemTemplateElement* lastElem =
dynamic_cast<ElemTemplateElement*>(last);
+ // If it was surrounded by xsl:text, it will
count as an element.
+ bool isPrevCharData =
+ Constants::ELEMNAME_TEXTLITERALRESULT
== lastElem->getXSLToken();
+ bool isLastPoppedXSLText = (m_lastPopped != 0)
&&
+ (Constants::ELEMNAME_TEXT ==
m_lastPopped->getXSLToken());
+
+ if(isPrevCharData && ! isLastPoppedXSLText)
{
parent->appendChildElem(elem);
@@ -1324,11 +1348,7 @@
}
if(shouldPush)
- {
m_whiteSpaceElems.push_back(elem);
-
- elem = 0;
- }
}
}
// BEGIN SANJIVA CODE
@@ -1483,7 +1503,7 @@
m_handler(theHandler),
m_elemStack(theHandler.m_elemStack),
m_pTemplate(theHandler.m_pTemplate),
- m_pLastPopped(theHandler.m_pLastPopped),
+ m_lastPopped(theHandler.m_lastPopped),
m_inTemplate(theHandler.m_inTemplate),
m_foundStylesheet(theHandler.m_foundStylesheet),
m_XSLNameSpaceURL(theHandler.m_processor.getXSLNameSpaceURL()),
@@ -1491,7 +1511,7 @@
{
m_handler.m_elemStack.clear();
m_handler.m_pTemplate = 0;
- m_handler.m_pLastPopped = 0;
+ m_handler.m_lastPopped = 0;
m_handler.m_inTemplate = false;
m_handler.m_foundStylesheet = false;
m_handler.m_foundNotImport = false;
@@ -1513,7 +1533,7 @@
m_handler.m_elemStack = m_elemStack;
m_handler.m_pTemplate = m_pTemplate;
- m_handler.m_pLastPopped = m_pLastPopped;
+ m_handler.m_lastPopped = m_lastPopped;
m_handler.m_inTemplate = m_inTemplate;
m_handler.m_foundStylesheet = m_foundStylesheet;
m_handler.m_processor.setXSLNameSpaceURL(m_XSLNameSpaceURL);
1.10 +2 -2 xml-xalan/c/src/XSLT/StylesheetHandler.hpp
Index: StylesheetHandler.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetHandler.hpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- StylesheetHandler.hpp 2000/04/11 15:09:30 1.9
+++ StylesheetHandler.hpp 2000/04/12 19:41:02 1.10
@@ -439,7 +439,7 @@
* The last element popped from the stack. I'm not totally clear
* anymore as to why this is needed.
*/
- ElemTemplateElement* m_pLastPopped;
+ ElemTemplateElement* m_lastPopped;
/**
* True if the process is in a template context.
@@ -491,7 +491,7 @@
ElemTemplate* const m_pTemplate;
- ElemTemplateElement* const m_pLastPopped;
+ ElemTemplateElement* const m_lastPopped;
const bool m_inTemplate;
1.9 +2 -7 xml-xalan/c/src/XSLT/StylesheetRoot.cpp
Index: StylesheetRoot.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetRoot.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- StylesheetRoot.cpp 2000/04/11 15:09:30 1.8
+++ StylesheetRoot.cpp 2000/04/12 19:41:02 1.9
@@ -200,9 +200,7 @@
FormatterListener* flistener = 0;
bool newListener = false;
-
- // $$$ ToDo: Why is this Xerces-specific?
- XercesDOMPrintWriter* pw = 0;
+ Writer* pw = 0;
bool newPW = false;
/*
@@ -224,10 +222,7 @@
if(0 != outputTarget.getCharacterStream())
{
- // @@ JMD: is this right ??
- // java: pw = new
PrintWriter(outputTarget.getCharacterStream());
- pw = static_cast<XercesDOMPrintWriter*>
- (outputTarget.getCharacterStream());
+ pw = outputTarget.getCharacterStream();
}
else
{
1.23 +86 -83 xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp
Index: XSLTEngineImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTEngineImpl.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- XSLTEngineImpl.cpp 2000/04/12 17:13:36 1.22
+++ XSLTEngineImpl.cpp 2000/04/12 19:41:02 1.23
@@ -144,6 +144,31 @@
#include "XSLTInputSource.hpp"
#include "XSLTProcessorException.hpp"
+ // @@@@
+#include <iostream>
+void dumpStack(XSLTEngineImpl::VariableStackStackType& m_stack)
+{
+ int size = m_stack.size();
+ assert (size < 100);
+ for(int i = 0; i < size; i++)
+ {
+ const StackEntry* const theEntry = m_stack[i];
+ if(theEntry->getType() == StackEntry::eArgument)
+ {
+ const Arg* const theArg =
+ dynamic_cast<const Arg*>(theEntry);
+ std::cout << i << ": " <<
theArg->getName().getLocalPart() << "\n";
+ }
+ else if(theEntry->getType() == StackEntry::eContextMarker)
+ std::cout << i << " Context marker" << "\n";
+ else if(theEntry->getType() == StackEntry::eElementMarker)
+ std::cout << i << " Element marker" << "\n";
+ else
+ std::cout << "??" << "\n";
+ }
+// std::cout << m_globalStackFrameIndex << ": global stack frame index"
<< "\n";
+// std::cout << m_currentStackFrameIndex << ": current stack frame index"
<< "\n";
+}
const double XSLTEngineImpl::s_XSLTVerSupported(1.0);
@@ -2310,7 +2335,7 @@
void
XSLTEngineImpl::copyNamespaceAttributes(
const XalanNode& src,
- bool srcIsStylesheetTree)
+ bool /* srcIsStylesheetTree
*/)
{
int type;
@@ -2341,7 +2366,8 @@
const XalanDOMString prefix =
isPrefix ? substring(aname, 6) : XalanDOMString();
const XalanDOMString desturi =
getResultNamespaceForPrefix(prefix);
XalanDOMString srcURI
= attr->getNodeValue();
-
+ /*
+ @@ JMD: Not used anymore in java ...
const bool isXSLNS
=
srcIsStylesheetTree &&
equalsIgnoreCase(srcURI, m_XSLNameSpaceURL)
|| 0 !=
m_stylesheetRoot->lookupExtensionNSHandler(srcURI)
@@ -2353,6 +2379,8 @@
}
if(!equalsIgnoreCase(srcURI, desturi)
&& !isXSLNS)
+ */
+ if(!equalsIgnoreCase(srcURI, desturi))
{
addResultAttribute(m_pendingAttributes, aname, srcURI);
}
@@ -3559,6 +3587,8 @@
XSLTEngineImpl::resolveTopLevelParams(StylesheetExecutionContext&
executionContext)
{
m_stylesheetRoot->pushTopLevelVariables(executionContext,
m_topLevelParams);
+ getVariableStacks().markGlobalStackFrame();
+ getVariableStacks().pushContextMarker(0, 0);
}
@@ -3585,7 +3615,7 @@
const XalanDOMString& /* codetype */)
{
#if 1
- error("XSL4C does not support extensions at this time!");
+ error("Xalan does not support extensions at this time!");
#else
try
{
@@ -3631,7 +3661,7 @@
DispatcherFactory* /* factory */)
{
#if 1
- error("XSL4C does not support extensions at this time!");
+ error("Xalan does not support extensions at this time!");
#else
if(0 != m_diagnosticsPrintWriter)
{
@@ -3958,7 +3988,9 @@
XSLTEngineImpl::VariableStack::VariableStack(XSLTEngineImpl& theProcessor) :
m_caller(),
m_stack(),
- m_processor(theProcessor)
+ m_processor(theProcessor),
+ m_globalStackFrameIndex(-1),
+ m_currentStackFrameIndex(0)
{
pushContextMarker(0, 0);
}
@@ -3990,7 +4022,7 @@
void
XSLTEngineImpl::VariableStack::pushElementMarker(const XalanNode* elem)
{
- m_stack.push_back(new ElementMarker(elem));
+ push(new ElementMarker(elem), true);
}
@@ -4012,15 +4044,14 @@
if(theEntry->getType() == StackEntry::eElementMarker)
{
- m_stack.pop_back();
+ pop();
fFound = true;
}
else
{
- m_stack.pop_back();
+ pop();
}
- delete theEntry;
}
}
}
@@ -4059,7 +4090,7 @@
const XalanNode* caller,
const XalanNode* sourceNode)
{
- m_stack.push_back(new ContextMarker(caller, sourceNode));
+ push(new ContextMarker(caller, sourceNode), true);
}
@@ -4075,10 +4106,11 @@
const StackEntry* const theEntry = m_stack[i];
assert(theEntry != 0);
int type = theEntry->getType();
+ if (type >3 || type < 0)
+ dumpStack(m_stack);
assert(type <4 && type >= 0);
fFound = (type == StackEntry::eContextMarker);
- m_stack.pop_back();
- delete theEntry;
+ pop();
}
}
@@ -4115,65 +4147,70 @@
{
try
{
- m_stack.pop_back();
-
+ // If we do a pop, the current stack index may point to
the last
+ // element, in which case it will be changed when the
push happens, so
+ // we need to preserve the current index
const ElemTemplateElement* child =
xslCallTemplateElement.getFirstChildElem();
-
- while(0 != child)
+ if (0 != child)
{
- if(Constants::ELEMNAME_WITHPARAM ==
child->getXSLToken())
+ pop();
+
+ while(0 != child)
{
- const ElemWithParam* const
xslParamElement =
+ if(Constants::ELEMNAME_WITHPARAM ==
child->getXSLToken())
+ {
+ const ElemWithParam* const
xslParamElement =
#if defined(XALAN_OLD_STYLE_CASTS)
- (ElemWithParam*)child;
+ (ElemWithParam*)child;
#else
static_cast<const
ElemWithParam*>(child);
#endif
- Arg* theArg = 0;
+ Arg* theArg = 0;
- const XPath* const pxpath =
xslParamElement->getSelectPattern();
+ const XPath* const pxpath
= xslParamElement->getSelectPattern();
- if(0 != pxpath)
- {
- XObject* const theXObject =
+ if(0 != pxpath)
+ {
+ XObject* const
theXObject =
pxpath->execute(sourceNode,
-
*xslParamElement,
-
executionContext.getXPathExecutionContext());
+
*xslParamElement,
+
executionContext.getXPathExecutionContext());
- theArg = new
Arg(xslParamElement->getQName(), theXObject, true);
- }
- else
- {
- ResultTreeFragBase* const
theDocFragment =
-
m_processor.createResultTreeFrag(executionContext,
-
*xslParamElement,
-
sourceTree,
-
sourceNode,
- mode);
- assert(theDocFragment != 0);
+ theArg = new
Arg(xslParamElement->getQName(), theXObject, true);
+ }
+ else
+ {
+ ResultTreeFragBase*
const theDocFragment =
+
m_processor.createResultTreeFrag(executionContext,
+
*xslParamElement,
+
sourceTree,
+
sourceNode,
+
mode);
+ assert(theDocFragment
!= 0);
- XObject* var =
m_processor.createXResultTreeFrag(*theDocFragment);
+ XObject* var =
m_processor.createXResultTreeFrag(*theDocFragment);
- theArg = new
Arg(xslParamElement->getQName(), var, true);
+ theArg = new
Arg(xslParamElement->getQName(), var, true);
+ }
+ assert(theArg != 0);
+
+ tempStack.push_back(theArg);
}
- assert(theArg != 0);
- tempStack.push_back(theArg);
+ child = child->getNextSiblingElem();
}
-
- child = child->getNextSiblingElem();
}
}
catch(...)
{
- m_stack.push_back(cm);
+ push(cm);
throw;
}
- m_stack.push_back(cm);
+ push(cm);
try
{
@@ -4181,7 +4218,7 @@
const int nParams = tempStack.size();
for(int i = 0; i < nParams; i++)
{
- m_stack.push_back(tempStack.back());
+ push(tempStack.back());
tempStack.pop_back();
}
}
@@ -4205,39 +4242,6 @@
}
-
-bool
-XSLTEngineImpl::VariableStack::hasParamVariable(const QName& qname) const
-{
- bool hasit = false;
-
- const int nElems = m_stack.size();
-
- // Sub 1 extra for the context marker.
- for(int i = (nElems - 1); i >= 0; i--)
- {
- const StackEntry* const theEntry = m_stack[i];
- assert(theEntry != 0);
- if(theEntry->getType() == StackEntry::eArgument)
- {
- const Arg* const theArg = static_cast<const
Arg*>(theEntry);
-
- if(theArg->getName().equals(qname))
- {
- hasit = true;
- break;
- }
- }
- else if(theEntry->getType() == StackEntry::eContextMarker)
- {
- break;
- }
- }
-
- return hasit;
-}
-
-
void
XSLTEngineImpl::VariableStack::pushVariable(
const QName& name,
@@ -4249,7 +4253,7 @@
pushElementMarker(e);
}
- m_stack.push_back(new Arg(name, val, false));
+ push(new Arg(name, val, false), true);
}
@@ -4286,7 +4290,7 @@
{
const Arg* theResult = 0;
- const int nElems = m_stack.size();
+ const int nElems = getCurrentStackFrameIndex();
// Sub 1 extra for the context marker.
for(int i = (nElems - 1); i >= 0; i--)
@@ -4315,7 +4319,7 @@
if(0 == theResult && true == fSearchGlobalSpace)
{
// Look in the global space
- for(int i = 2; i < (nElems - 1); i++)
+ for(int i = (m_globalStackFrameIndex-1); i >= 2; i--)
{
const StackEntry* const theEntry = m_stack[i];
assert(theEntry != 0);
@@ -4346,7 +4350,6 @@
XSLTEngineImpl::InstallFunctions()
{
XPath::installFunction(XALAN_STATIC_UCODE_STRING("current"),
FunctionCurrent());
- XPath::installFunction(XALAN_STATIC_UCODE_STRING("current"),
FunctionDocument());
XPath::installFunction(XALAN_STATIC_UCODE_STRING("format-number"),
FunctionFormatNumber());
XPath::installFunction(XALAN_STATIC_UCODE_STRING("key"), FunctionKey());
XPath::installFunction(XALAN_STATIC_UCODE_STRING("unparsed-entity-uri"),
FunctionUnparsedEntityURI());
1.22 +83 -10 xml-xalan/c/src/XSLT/XSLTEngineImpl.hpp
Index: XSLTEngineImpl.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/XSLTEngineImpl.hpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- XSLTEngineImpl.hpp 2000/04/11 15:09:30 1.21
+++ XSLTEngineImpl.hpp 2000/04/12 19:41:03 1.22
@@ -69,6 +69,7 @@
+
// Standard library headers
#include <cassert>
#include <ctime>
@@ -1619,15 +1620,6 @@
}
/**
- * Tell if there is a param variable on the stack.
- *
- * @param qname name of variable
- * @return true if variable is on stack
- */
- bool
- hasParamVariable(const QName& qname) const;
-
- /**
* Given a name, find the corresponding XObject.
*
* @param qname name of variable
@@ -1654,6 +1646,76 @@
XObject* val,
const XalanNode* e);
+ /**
+ * Mark the top of the global stack frame.
+ */
+ void markGlobalStackFrame()
+ {
+ m_globalStackFrameIndex = m_stack.size();
+ }
+
+ /**
+ * Set the top of the stack frame from where a search for a
variable or
+ * param should take place. Calling with no parameter will
cause the
+ * index to be set to the size of the stack.
+ *
+ * @param currentStackFrameIndex new value of index
+ */
+ void setCurrentStackFrameIndex(int currentStackFrameIndex = -1)
+ {
+ if (currentStackFrameIndex == -1)
+ m_currentStackFrameIndex = m_stack.size();
+ else
+ m_currentStackFrameIndex =
currentStackFrameIndex;
+ }
+
+ /**
+ * Get the top of the stack frame from where a search
+ * for a variable or param should take place.
+ *
+ * @return current value of index
+ */
+ int getCurrentStackFrameIndex() const
+ {
+ return m_currentStackFrameIndex;
+ }
+
+ /**
+ * Override the push in order to track the
+ * m_currentStackFrameIndex correctly.
+ *
+ * @param stack entry to push
+ * @param isNew true if object was created on the heap
+ */
+ void push(StackEntry* theEntry, bool isNew = false)
+ {
+ int type = theEntry->getType();
+ assert(type <4 && type >= 0);
+ if(m_currentStackFrameIndex == m_stack.size())
+ m_currentStackFrameIndex+=1;
+ m_stack.push_back(theEntry);
+ m_isNew.push_back(isNew);
+ }
+
+ /**
+ * Override the pop in order to track the
+ * m_currentStackFrameIndex correctly.
+ *
+ * @return stack entry popped
+ */
+ void pop()
+ {
+ assert (! m_stack.empty());
+ if(m_currentStackFrameIndex == m_stack.size())
+ m_currentStackFrameIndex-=1;
+ StackEntry* theEntry = m_stack.back();
+ m_stack.pop_back();
+ if (m_isNew.back() == true)
+ delete theEntry;
+ m_isNew.pop_back();
+ }
+
+
private:
XObject*
@@ -1675,8 +1737,19 @@
VariableStackStackType m_stack;
+ BoolVectorType m_isNew;
- XSLTEngineImpl& m_processor;
+ XSLTEngineImpl& m_processor;
+
+ int m_globalStackFrameIndex;
+
+ /**
+ * This is the top of the stack frame from where a search
+ * for a variable or param should take place. It may not
+ * be the real stack top.
+ */
+ unsigned int m_currentStackFrameIndex;
+
}; // end VariableStack
// Give VariableStack access to stuff.
1.7 +1 -0
xml-xalan/c/src/XercesParserLiaison/XercesParserLiaison.hpp
Index: XercesParserLiaison.hpp
===================================================================
RCS file:
/home/cvs/xml-xalan/c/src/XercesParserLiaison/XercesParserLiaison.hpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- XercesParserLiaison.hpp 2000/04/11 14:38:42 1.6
+++ XercesParserLiaison.hpp 2000/04/12 19:41:11 1.7
@@ -69,6 +69,7 @@
// Xerces DOM header files
+#include <util/XercesDefs.hpp>
#include <sax/ErrorHandler.hpp>