You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@apache.org on 2006/12/07 17:53:05 UTC
svn commit: r483545 [3/5] - in /xalan/c/trunk: Projects/Win32/VC6/AllInOne/
Projects/Win32/VC7.1/ Projects/Win32/VC7.1/AllInOne/
Projects/Win32/VC7/AllInOne/ Projects/Win32/VC8/AllInOne/
src/xalanc/Include/ src/xalanc/PlatformSupport/ src/xalanc/XPath/...
Modified: xalan/c/trunk/src/xalanc/XSLT/XSLTEngineImpl.hpp
URL: http://svn.apache.org/viewvc/xalan/c/trunk/src/xalanc/XSLT/XSLTEngineImpl.hpp?view=diff&rev=483545&r1=483544&r2=483545
==============================================================================
--- xalan/c/trunk/src/xalanc/XSLT/XSLTEngineImpl.hpp (original)
+++ xalan/c/trunk/src/xalanc/XSLT/XSLTEngineImpl.hpp Thu Dec 7 08:53:03 2006
@@ -74,6 +74,7 @@
#include "ResultNamespacesStack.hpp"
#include "StylesheetExecutionContext.hpp"
#include "XSLTProcessorException.hpp"
+#include "XalanParamHolder.hpp"
@@ -86,8 +87,8 @@
-typedef XERCES_CPP_NAMESPACE_QUALIFIER InputSource InputSourceType;
-typedef XERCES_CPP_NAMESPACE_QUALIFIER DocumentHandler DocumentHandlerType;
+typedef XERCES_CPP_NAMESPACE_QUALIFIER InputSource InputSourceType;
+typedef XERCES_CPP_NAMESPACE_QUALIFIER DocumentHandler DocumentHandlerType;
@@ -113,7 +114,7 @@
* It's the responsibility of the XSLTEngineImpl class, collaborating with the
* XML parser liaison, the DOM, and the XPath engine, to transform a source
* tree of nodes into a result tree according to instructions and templates
- * specified by a stylesheet tree. The process method is the primary
+ * specified by a stylesheet tree. The process method is the primary
* public entry points.
*
*
@@ -125,85 +126,87 @@
{
public:
- struct LessXalanDOMStringPointers
- {
- bool
- operator()(
- const XalanDOMString* theLHS,
- const XalanDOMString* theRHS) const
- {
- if (theLHS == 0 && theRHS != 0)
- {
- return true;
- }
- else if (theRHS == 0)
- {
- return false;
- }
- else
- {
- return theLHS->compare(*theRHS) < 0 ? true : false;
- }
- }
- };
-
- typedef XalanVector<const LocatorType*> LocatorStack;
- typedef XalanVector<TraceListener*> TraceListenerVectorType;
- typedef XalanVector<const XalanDOMString*> XalanDOMStringPointerVectorType;
-
- typedef XalanVector<bool> BoolVectorType;
-
- struct FindStringPointerFunctor
- {
- FindStringPointerFunctor(const XalanDOMString& theString) :
- m_string(theString)
- {
- }
-
- bool
- operator()(const XalanDOMString* theString) const
- {
- assert(theString != 0);
-
- return *theString == m_string;
- }
-
- private:
-
- const XalanDOMString& m_string;
- };
-
- typedef XalanMemMgrAutoPtr<XPathProcessor, true> XPathProcessorPtrType;
- typedef Function::XObjectArgVectorType XObjectArgVectorType;
- typedef StylesheetExecutionContext::ParamVectorType ParamVectorType;
+ struct LessXalanDOMStringPointers
+ {
+ bool
+ operator()(
+ const XalanDOMString* theLHS,
+ const XalanDOMString* theRHS) const
+ {
+ if (theLHS == 0 && theRHS != 0)
+ {
+ return true;
+ }
+ else if (theRHS == 0)
+ {
+ return false;
+ }
+ else
+ {
+ return theLHS->compare(*theRHS) < 0 ? true : false;
+ }
+ }
+ };
+
+ typedef XalanVector<const LocatorType*> LocatorStack;
+ typedef XalanVector<TraceListener*> TraceListenerVectorType;
+ typedef XalanVector<const XalanDOMString*> XalanDOMStringPointerVectorType;
+
+ typedef XalanVector<bool> BoolVectorType;
+
+ struct FindStringPointerFunctor
+ {
+ FindStringPointerFunctor(const XalanDOMString& theString) :
+ m_string(theString)
+ {
+ }
+
+ bool
+ operator()(const XalanDOMString* theString) const
+ {
+ assert(theString != 0);
+
+ return *theString == m_string;
+ }
+
+ private:
+
+ const XalanDOMString& m_string;
+ };
+
+ typedef XalanMemMgrAutoPtr<XPathProcessor, true> XPathProcessorPtrType;
+ typedef Function::XObjectArgVectorType XObjectArgVectorType;
+ typedef StylesheetExecutionContext::ParamVectorType ParamVectorType;
typedef XPathConstructionContext::GetAndReleaseCachedString CCGetAndReleaseCachedString;
typedef XPathExecutionContext::GetAndReleaseCachedString ECGetAndReleaseCachedString;
- // Public members
- //---------------------------------------------------------------------
+ typedef XalanMap<XalanDOMString, XalanParamHolder> ParamMapType;
+
+ // Public members
+ //---------------------------------------------------------------------
- /**
- * Construct an XSL processor that can call back to a XML processor, so it
- * can handle included files, and the like. You must create a new instance
- * of the XSLTEngineImpl class each time you run a transformation.
- *
- * @param XMLParserLiaison liaison to an object that can help with a
- * specific parser implementation
- * @param xpathEnvSupport An XPathEnvSupport instance
- * @param domSupport A DOMSupport instance for the DOM being used
- * @param xobjectFactory object responsible for XObject objects
- * @param xpathFactory object responsible for XPath objects
- */
- XSLTEngineImpl(
+ /**
+ * Construct an XSL processor that can call back to a XML processor, so it
+ * can handle included files, and the like. You must create a new instance
+ * of the XSLTEngineImpl class each time you run a transformation.
+ *
+ * @param XMLParserLiaison liaison to an object that can help with a
+ * specific parser implementation
+ * @param xpathEnvSupport An XPathEnvSupport instance
+ * @param domSupport A DOMSupport instance for the DOM being used
+ * @param xobjectFactory object responsible for XObject objects
+ * @param xpathFactory object responsible for XPath objects
+ */
+ XSLTEngineImpl(
MemoryManagerType& theManager,
- XMLParserLiaison& parserLiaison,
- XPathEnvSupport& xpathEnvSupport,
- DOMSupport& domSupport,
- XObjectFactory& xobjectFactory,
- XPathFactory& xpathFactory);
+ XMLParserLiaison& parserLiaison,
+ XPathEnvSupport& xpathEnvSupport,
+ DOMSupport& domSupport,
+ XObjectFactory& xobjectFactory,
+ XPathFactory& xpathFactory);
- virtual
- ~XSLTEngineImpl();
+ virtual
+ ~XSLTEngineImpl();
MemoryManager&
getMemoryManager()
@@ -211,1465 +214,1470 @@
return m_xpathConstructionContext.getMemoryManager();
}
- /**
- * Perform initialization of statics -- must be called before any
- * processing occurs. See class XSLTInit.
- */
- static void
- initialize(MemoryManagerType& theManager);
-
- /**
- * Perform termination of statics. See class XSLTInit.
- */
- static void
- terminate();
-
- // These methods are inherited from XSLTProcessor ...
-
- virtual void
- process(
- const XSLTInputSource& inputSource,
- const XSLTInputSource& stylesheetSource,
- XSLTResultTarget& outputTarget,
- StylesheetConstructionContext& constructionContext,
- StylesheetExecutionContext& executionContext);
-
- virtual void
- process(
- const XSLTInputSource& inputSource,
- XSLTResultTarget& outputTarget,
- StylesheetExecutionContext& executionContext);
-
- virtual StylesheetRoot*
- processStylesheet(
- const XSLTInputSource& stylesheetSource,
- StylesheetConstructionContext& constructionContext);
-
- virtual StylesheetRoot*
- processStylesheet(
- const XalanDOMString& xsldocURLString,
- StylesheetConstructionContext& constructionContext);
-
- virtual XalanNode*
- getSourceTreeFromInput(const XSLTInputSource& inputSource);
-
- virtual void
- resolveTopLevelParams(StylesheetExecutionContext& executionContext);
-
- virtual XMLParserLiaison&
- getXMLParserLiaison() const;
-
- virtual void
- getUniqueNamespaceValue(XalanDOMString& theValue);
-
- virtual void
- setStylesheetParam(
- const XalanDOMString& key,
- const XalanDOMString& expression);
-
- virtual void
- setStylesheetParam(
- const XalanDOMString& key,
- XObjectPtr value);
-
- virtual FormatterListener*
- getFormatterListener() const;
-
- virtual void
- setFormatterListener(FormatterListener* flistener);
-
- // Trace-related functions...
-
- virtual size_type
- getTraceListeners() const;
-
- virtual void
- addTraceListener(TraceListener* tl);
-
- virtual void
- removeTraceListener(TraceListener* tl);
-
- virtual void
- fireGenerateEvent(const GenerateEvent& ge);
-
- virtual void
- fireTraceEvent(const TracerEvent& te);
-
- virtual void
- fireSelectEvent(const SelectionEvent& se);
-
- virtual bool
- getTraceSelects() const;
-
- virtual void
- setTraceSelects(bool b);
-
- void
- traceSelect(
- StylesheetExecutionContext& executionContext,
- const ElemTemplateElement& theTemplate,
- const NodeRefListBase& nl,
- const XPath* xpath) const;
-
- virtual void
- setQuietConflictWarnings(bool b);
-
- virtual void
- setDiagnosticsOutput(PrintWriter* pw);
-
-
- // Inherited from PrefixResolver...
-
- /**
- * Retrieve a namespace corresponding to a prefix. This assumes that
- * the PrevixResolver hold's its own namespace context, or is a namespace
- * context itself.
- *
- * @param prefix Prefix to resolve
- * @return namespace that prefix resolves to, or null if prefix is not found
- */
- virtual const XalanDOMString*
- getNamespaceForPrefix(const XalanDOMString& prefix) const;
-
- /**
- * Retrieve the base URI for the resolver.
- *
- * @return URI string
- */
- virtual const XalanDOMString&
- getURI() const;
-
- /**
- * Read in the XML file, either producing a Document or calling SAX events,
- * and register the document in a table. If the document has already been
- * read in, it will not be reparsed.
- *
- * @param urlString location of the XML
- * @param docHandler pointer to SAX event handler
- * @param docToRegister if using a SAX event handler, the object to register in the source docs table.
- * @return document object, which represents the parsed XML
- * @exception SAXException
- */
- XalanDocument*
- parseXML(
- const XalanDOMString& urlString,
- DocumentHandlerType* docHandler,
- XalanDocument* docToRegister);
-
- /**
- * Read in the XML file, either producing a Document or calling SAX events,
- * and register the document in a table. If the document has already been
- * read in, it will not be reparsed.
- *
- * @param inputSource location of the XML
- * @param docHandler pointer to SAX event handler
- * @param docToRegister if using a SAX event handler, the object to register in the source docs table.
- * @return document object, which represents the parsed XML
- * @exception SAXException
- */
- XalanDocument*
- parseXML(
- const InputSourceType& inputSource,
- DocumentHandlerType* docHandler,
- XalanDocument* docToRegister);
-
- /**
- * Reset the state of the XSL processor by reading in a new XSL stylesheet
- * from a processing instruction.
- *
- * @param xslURLString valid URI to an XSL stylesheet
- * @param fragBase base of tree if URI represents document
- * fragment
- * @param xmlBaseIdent base identifier for stylesheet URI
- * @param isRoot true if stylesheet is root of tree
- * @param constructionContext context for construction of object
- * @return pointer to stylesheet
- */
- Stylesheet*
- getStylesheetFromPIURL(
- const XalanDOMString& xslURLString,
- XalanNode& fragBase,
- const XalanDOMString& xmlBaseIdent,
- bool isRoot,
- StylesheetConstructionContext& constructionContext);
-
- /**
- * Flush the pending element.
- */
- void
- flushPending();
-
- /**
- * Add a namespace declaration to the namespace stack
- *
- * @param prefix namespace prefix
- * @param namespaceVal value of namespace
- */
- void
- addResultNamespaceDecl(
- const XalanDOMString& prefix,
- const XalanDOMString& namespaceVal)
- {
- addResultNamespaceDecl(
- prefix,
- namespaceVal.c_str(),
- namespaceVal.length());
- }
-
- /**
- * Add a namespace declaration to the namespace stack
- *
- * @param prefix namespace prefix
- * @param namespaceVal value of namespace
- * @param len length of namespace
- */
- void
- addResultNamespaceDecl(
- const XalanDOMString& prefix,
- const XalanDOMChar* namespaceVal,
- XalanDOMString::size_type len)
- {
- m_resultNamespacesStack.addDeclaration(
- prefix,
- namespaceVal,
- len);
- }
-
- /**
- * Add attribute to attribute list, and if it is a namespace, add it to the
- * namespaces stack.
- *
- * @param attList attribute list added to
- * @param aname name of attribute
- * @param value value of attribute
+ /**
+ * Perform initialization of statics -- must be called before any
+ * processing occurs. See class XSLTInit.
+ */
+ static void
+ initialize(MemoryManagerType& theManager);
+
+ /**
+ * Perform termination of statics. See class XSLTInit.
+ */
+ static void
+ terminate();
+
+ // These methods are inherited from XSLTProcessor ...
+
+ virtual void
+ process(
+ const XSLTInputSource& inputSource,
+ const XSLTInputSource& stylesheetSource,
+ XSLTResultTarget& outputTarget,
+ StylesheetConstructionContext& constructionContext,
+ StylesheetExecutionContext& executionContext);
+
+ virtual void
+ process(
+ const XSLTInputSource& inputSource,
+ XSLTResultTarget& outputTarget,
+ StylesheetExecutionContext& executionContext);
+
+ virtual StylesheetRoot*
+ processStylesheet(
+ const XSLTInputSource& stylesheetSource,
+ StylesheetConstructionContext& constructionContext);
+
+ virtual StylesheetRoot*
+ processStylesheet(
+ const XalanDOMString& xsldocURLString,
+ StylesheetConstructionContext& constructionContext);
+
+ virtual XalanNode*
+ getSourceTreeFromInput(const XSLTInputSource& inputSource);
+
+ virtual void
+ resolveTopLevelParams(StylesheetExecutionContext& executionContext);
+
+ virtual XMLParserLiaison&
+ getXMLParserLiaison() const;
+
+ virtual void
+ getUniqueNamespaceValue(XalanDOMString& theValue);
+
+ virtual void
+ setStylesheetParam(
+ const XalanDOMString& key,
+ const XalanDOMString& expression);
+
+ virtual void
+ setStylesheetParam(
+ const XalanDOMString& key,
+ XObjectPtr value);
+
+ virtual void
+ clearStylesheetParams();
+
+ virtual FormatterListener*
+ getFormatterListener() const;
+
+ virtual void
+ setFormatterListener(FormatterListener* flistener);
+
+ // Trace-related functions...
+
+ virtual size_type
+ getTraceListeners() const;
+
+ virtual void
+ addTraceListener(TraceListener* tl);
+
+ virtual void
+ removeTraceListener(TraceListener* tl);
+
+ virtual void
+ fireGenerateEvent(const GenerateEvent& ge);
+
+ virtual void
+ fireTraceEvent(const TracerEvent& te);
+
+ virtual void
+ fireSelectEvent(const SelectionEvent& se);
+
+ virtual bool
+ getTraceSelects() const;
+
+ virtual void
+ setTraceSelects(bool b);
+
+ void
+ traceSelect(
+ StylesheetExecutionContext& executionContext,
+ const ElemTemplateElement& theTemplate,
+ const NodeRefListBase& nl,
+ const XPath* xpath) const;
+
+ virtual void
+ setQuietConflictWarnings(bool b);
+
+ virtual void
+ setDiagnosticsOutput(PrintWriter* pw);
+
+
+ // Inherited from PrefixResolver...
+
+ /**
+ * Retrieve a namespace corresponding to a prefix. This assumes that
+ * the PrevixResolver hold's its own namespace context, or is a namespace
+ * context itself.
+ *
+ * @param prefix Prefix to resolve
+ * @return namespace that prefix resolves to, or null if prefix is not found
+ */
+ virtual const XalanDOMString*
+ getNamespaceForPrefix(const XalanDOMString& prefix) const;
+
+ /**
+ * Retrieve the base URI for the resolver.
+ *
+ * @return URI string
+ */
+ virtual const XalanDOMString&
+ getURI() const;
+
+ /**
+ * Read in the XML file, either producing a Document or calling SAX events,
+ * and register the document in a table. If the document has already been
+ * read in, it will not be reparsed.
+ *
+ * @param urlString location of the XML
+ * @param docHandler pointer to SAX event handler
+ * @param docToRegister if using a SAX event handler, the object to register in the source docs table.
+ * @return document object, which represents the parsed XML
+ * @exception SAXException
+ */
+ XalanDocument*
+ parseXML(
+ const XalanDOMString& urlString,
+ DocumentHandlerType* docHandler,
+ XalanDocument* docToRegister);
+
+ /**
+ * Read in the XML file, either producing a Document or calling SAX events,
+ * and register the document in a table. If the document has already been
+ * read in, it will not be reparsed.
+ *
+ * @param inputSource location of the XML
+ * @param docHandler pointer to SAX event handler
+ * @param docToRegister if using a SAX event handler, the object to register in the source docs table.
+ * @return document object, which represents the parsed XML
+ * @exception SAXException
+ */
+ XalanDocument*
+ parseXML(
+ const InputSourceType& inputSource,
+ DocumentHandlerType* docHandler,
+ XalanDocument* docToRegister);
+
+ /**
+ * Reset the state of the XSL processor by reading in a new XSL stylesheet
+ * from a processing instruction.
+ *
+ * @param xslURLString valid URI to an XSL stylesheet
+ * @param fragBase base of tree if URI represents document
+ * fragment
+ * @param xmlBaseIdent base identifier for stylesheet URI
+ * @param isRoot true if stylesheet is root of tree
+ * @param constructionContext context for construction of object
+ * @return pointer to stylesheet
+ */
+ Stylesheet*
+ getStylesheetFromPIURL(
+ const XalanDOMString& xslURLString,
+ XalanNode& fragBase,
+ const XalanDOMString& xmlBaseIdent,
+ bool isRoot,
+ StylesheetConstructionContext& constructionContext);
+
+ /**
+ * Flush the pending element.
+ */
+ void
+ flushPending();
+
+ /**
+ * Add a namespace declaration to the namespace stack
+ *
+ * @param prefix namespace prefix
+ * @param namespaceVal value of namespace
+ */
+ void
+ addResultNamespaceDecl(
+ const XalanDOMString& prefix,
+ const XalanDOMString& namespaceVal)
+ {
+ addResultNamespaceDecl(
+ prefix,
+ namespaceVal.c_str(),
+ namespaceVal.length());
+ }
+
+ /**
+ * Add a namespace declaration to the namespace stack
+ *
+ * @param prefix namespace prefix
+ * @param namespaceVal value of namespace
+ * @param len length of namespace
+ */
+ void
+ addResultNamespaceDecl(
+ const XalanDOMString& prefix,
+ const XalanDOMChar* namespaceVal,
+ XalanDOMString::size_type len)
+ {
+ m_resultNamespacesStack.addDeclaration(
+ prefix,
+ namespaceVal,
+ len);
+ }
+
+ /**
+ * Add attribute to attribute list, and if it is a namespace, add it to the
+ * namespaces stack.
+ *
+ * @param attList attribute list added to
+ * @param aname name of attribute
+ * @param value value of attribute
* @param fromCopy true if the attribute is being copied from the source tree
* @param locator The Locator for reporting errors.
- */
- void
- addResultAttribute(
- AttributeListImpl& attList,
- const XalanDOMString& aname,
- const XalanDOMString& value,
+ */
+ void
+ addResultAttribute(
+ AttributeListImpl& attList,
+ const XalanDOMString& aname,
+ const XalanDOMString& value,
bool fromCopy = false,
- const LocatorType* locator = 0)
- {
- addResultAttribute(
- attList,
- aname,
- value.c_str(),
+ const LocatorType* locator = 0)
+ {
+ addResultAttribute(
+ attList,
+ aname,
+ value.c_str(),
fromCopy,
locator);
- }
+ }
- /**
- * Add attribute to attribute list, and if it is a namespace, add it to the
- * namespaces stack.
- *
- * @param attList attribute list added to
- * @param aname name of attribute
- * @param value value of attribute
+ /**
+ * Add attribute to attribute list, and if it is a namespace, add it to the
+ * namespaces stack.
+ *
+ * @param attList attribute list added to
+ * @param aname name of attribute
+ * @param value value of attribute
* @param fromCopy true if the attribute is being copied from the source tree
* @param locator The Locator for reporting errors.
- */
- void
- addResultAttribute(
- AttributeListImpl& attList,
- const XalanDOMString& aname,
- const XalanDOMChar* value,
+ */
+ void
+ addResultAttribute(
+ AttributeListImpl& attList,
+ const XalanDOMString& aname,
+ const XalanDOMChar* value,
bool fromCopy = false,
- const LocatorType* locator = 0)
+ const LocatorType* locator = 0)
{
- addResultAttribute(
- attList,
- aname,
+ addResultAttribute(
+ attList,
+ aname,
value,
length(value),
fromCopy,
locator);
}
- /**
- * Add attribute to attribute list, and if it is a namespace, add it to the
- * namespaces stack.
- *
- * @param attList attribute list added to
- * @param aname name of attribute
- * @param value value of attribute
+ /**
+ * Add attribute to attribute list, and if it is a namespace, add it to the
+ * namespaces stack.
+ *
+ * @param attList attribute list added to
+ * @param aname name of attribute
+ * @param value value of attribute
* @param theLength The length of the value
* @param fromCopy true if the attribute is being copied from the source tree
* @param locator The Locator for reporting errors.
- */
- void
- addResultAttribute(
- AttributeListImpl& attList,
- const XalanDOMString& aname,
- const XalanDOMChar* value,
+ */
+ void
+ addResultAttribute(
+ AttributeListImpl& attList,
+ const XalanDOMString& aname,
+ const XalanDOMChar* value,
XalanDOMString::size_type theLength,
bool fromCopy = false,
- const LocatorType* locator = 0);
+ const LocatorType* locator = 0);
- /**
- * Add attribute to pending attributes list, and if it is a namespace, add
- * it to the namespaces stack.
- *
- * @param aname name of attribute
- * @param value value of attribute
+ /**
+ * Add attribute to pending attributes list, and if it is a namespace, add
+ * it to the namespaces stack.
+ *
+ * @param aname name of attribute
+ * @param value value of attribute
* @param fromCopy true if the attribute is being copied from the source tree
* @param locator The Locator for reporting errors.
- */
- void
- addResultAttribute(
- const XalanDOMString& aname,
- const XalanDOMChar* value,
+ */
+ void
+ addResultAttribute(
+ const XalanDOMString& aname,
+ const XalanDOMChar* value,
bool fromCopy = false,
- const LocatorType* locator = 0)
- {
- assert(m_outputContextStack.empty() == false);
-
- addResultAttribute(
- getPendingAttributesImpl(),
- aname,
- value,
+ const LocatorType* locator = 0)
+ {
+ assert(m_outputContextStack.empty() == false);
+
+ addResultAttribute(
+ getPendingAttributesImpl(),
+ aname,
+ value,
fromCopy,
locator);
- }
+ }
- /**
- * Add attribute to pending attributes list, and if it is a namespace, add
- * it to the namespaces stack.
- *
- * @param aname name of attribute
- * @param value value of attribute
+ /**
+ * Add attribute to pending attributes list, and if it is a namespace, add
+ * it to the namespaces stack.
+ *
+ * @param aname name of attribute
+ * @param value value of attribute
* @param fromCopy true if the attribute is being copied from the source tree
* @param locator The Locator for reporting errors.
- */
- void
- addResultAttribute(
- const XalanDOMString& aname,
- const XalanDOMString& value,
+ */
+ void
+ addResultAttribute(
+ const XalanDOMString& aname,
+ const XalanDOMString& value,
bool fromCopy = false,
- const LocatorType* locator = 0)
- {
- assert(m_outputContextStack.empty() == false);
-
- addResultAttribute(
- getPendingAttributesImpl(),
- aname,
- value,
+ const LocatorType* locator = 0)
+ {
+ assert(m_outputContextStack.empty() == false);
+
+ addResultAttribute(
+ getPendingAttributesImpl(),
+ aname,
+ value,
fromCopy,
locator);
- }
+ }
- /**
- * Report an error copying a duplicate namespace node.
- *
- * @param theName The name of the node.
- */
+ /**
+ * Report an error copying a duplicate namespace node.
+ *
+ * @param theName The name of the node.
+ */
void
reportDuplicateNamespaceNodeError(
const XalanDOMString& theName,
- const LocatorType* locator);
+ const LocatorType* locator);
+
+ void
+ setDocumentLocator(const LocatorType* locator);
+
+ void
+ startDocument();
+
+ void
+ endDocument();
+
+ void
+ startElement(
+ const XalanDOMChar* name,
+ AttributeListType& atts);
+
+ void
+ endElement(const XalanDOMChar* name);
+
+ void
+ characters (
+ const XalanDOMChar* ch,
+ XalanDOMString::size_type length);
+
+ void
+ ignorableWhitespace(
+ const XalanDOMChar* ch,
+ XalanDOMString::size_type length);
+
+ void
+ processingInstruction(
+ const XalanDOMChar* target,
+ const XalanDOMChar* data);
+
+ void
+ resetDocument();
+
+ /**
+ * Receive notification of character data.
+ *
+ * @param ch pointer to characters from the XML document
+ * @param start startng offset in 'ch' array
+ * @param length number of characters to read from the array
+ */
+ void
+ characters(
+ const XalanDOMChar* ch,
+ XalanDOMString::size_type start,
+ XalanDOMString::size_type length);
+
+ /**
+ * Send character data from the node to the result tree.
+ *
+ * @param node The node to send.
+ */
+ void
+ characters(const XalanNode& node);
- void
- setDocumentLocator(const LocatorType* locator);
+ /**
+ * Send character data from an XObject to the result tree.
+ *
+ * @param node The xobject to send.
+ */
+ void
+ characters(const XObjectPtr& xobject);
- void
- startDocument();
+ /**
+ * Receive notification of the beginning of an element with an empty
+ * attribute list
+ *
+ * @param name element type name
+ */
+ void
+ startElement(const XalanDOMChar* name);
- void
- endDocument();
-
- void
- startElement(
- const XalanDOMChar* name,
- AttributeListType& atts);
-
- void
- endElement(const XalanDOMChar* name);
-
- void
- characters (
- const XalanDOMChar* ch,
- XalanDOMString::size_type length);
-
- void
- ignorableWhitespace(
- const XalanDOMChar* ch,
- XalanDOMString::size_type length);
-
- void
- processingInstruction(
- const XalanDOMChar* target,
- const XalanDOMChar* data);
-
- void
- resetDocument();
-
- /**
- * Receive notification of character data.
- *
- * @param ch pointer to characters from the XML document
- * @param start startng offset in 'ch' array
- * @param length number of characters to read from the array
- */
- void
- characters(
- const XalanDOMChar* ch,
- XalanDOMString::size_type start,
- XalanDOMString::size_type length);
-
- /**
- * Send character data from the node to the result tree.
- *
- * @param node The node to send.
- */
- void
- characters(const XalanNode& node);
-
- /**
- * Send character data from an XObject to the result tree.
- *
- * @param node The xobject to send.
- */
- void
- characters(const XObjectPtr& xobject);
-
- /**
- * Receive notification of the beginning of an element with an empty
- * attribute list
- *
- * @param name element type name
- */
- void
- startElement(const XalanDOMChar* name);
-
- /**
- * Receive notification of character data. If available, when the
- * disable-output-escaping attribute is used, output raw text without
- * escaping.
- *
- * @param ch pointer to characters from the XML document
- * @param start start position in the array
- * @param length number of characters to read from the array
- */
- void
- charactersRaw(
- const XalanDOMChar* ch,
- XalanDOMString::size_type start,
- XalanDOMString::size_type length);
-
- /**
- * Send raw character data from the node to the result tree.
- *
- * @param node The node to send.
- */
- void
- charactersRaw(const XalanNode& node);
-
- /**
- * Send raw character data from an XObject to the result tree.
- *
- * @param node The xobject to send.
- */
- void
- charactersRaw(const XObjectPtr& xobject);
-
- /**
- * Called when a Comment is to be constructed.
- *
- * @param data pointer to comment data
- */
- void
- comment(const XalanDOMChar* data);
-
- /**
- * Receive notification of a entityReference.
- *
- * @param data pointer to characters from the XML document
- * @exception SAXException
- */
- void
- entityReference(const XalanDOMChar* data);
-
- /**
- * Receive notification of cdata.
- *
- * @param ch pointer to characters from the XML document
- * @param start start position in the array
- * @param length number of characters to read from the array
- */
- void
- cdata(
- const XalanDOMChar* ch,
- XalanDOMString::size_type start,
- XalanDOMString::size_type length);
-
- /**
- * Clone a node to the result tree
- *
- * @param node node to clone
- * @param cloneTextNodesOnly if true, only text nodes will be cloned
- * @param locator the Locator for the event, if any.
- */
- void
- cloneToResultTree(
- const XalanNode& node,
- bool cloneTextNodesOnly,
- const LocatorType* locator);
-
- /**
- * Clone a node to the result tree
- *
- * @param node node to clone
- * @param nodeType the type of the node
- * @param overrideStrip false if white space stripping should be done
- * @param shouldCloneAttributes true if attributes should be cloned
- * @param cloneTextNodesOnly if true, only text nodes will be cloned
- * @param locator the Locator for the event, if any.
- */
- void
- cloneToResultTree(
- const XalanNode& node,
- XalanNode::NodeType nodeType,
- bool overrideStrip,
- bool shouldCloneAttributes,
- bool cloneTextNodesOnly,
- const LocatorType* locator);
+ /**
+ * Receive notification of character data. If available, when the
+ * disable-output-escaping attribute is used, output raw text without
+ * escaping.
+ *
+ * @param ch pointer to characters from the XML document
+ * @param start start position in the array
+ * @param length number of characters to read from the array
+ */
+ void
+ charactersRaw(
+ const XalanDOMChar* ch,
+ XalanDOMString::size_type start,
+ XalanDOMString::size_type length);
+
+ /**
+ * Send raw character data from the node to the result tree.
+ *
+ * @param node The node to send.
+ */
+ void
+ charactersRaw(const XalanNode& node);
+
+ /**
+ * Send raw character data from an XObject to the result tree.
+ *
+ * @param node The xobject to send.
+ */
+ void
+ charactersRaw(const XObjectPtr& xobject);
+
+ /**
+ * Called when a Comment is to be constructed.
+ *
+ * @param data pointer to comment data
+ */
+ void
+ comment(const XalanDOMChar* data);
+
+ /**
+ * Receive notification of a entityReference.
+ *
+ * @param data pointer to characters from the XML document
+ * @exception SAXException
+ */
+ void
+ entityReference(const XalanDOMChar* data);
+
+ /**
+ * Receive notification of cdata.
+ *
+ * @param ch pointer to characters from the XML document
+ * @param start start position in the array
+ * @param length number of characters to read from the array
+ */
+ void
+ cdata(
+ const XalanDOMChar* ch,
+ XalanDOMString::size_type start,
+ XalanDOMString::size_type length);
+
+ /**
+ * Clone a node to the result tree
+ *
+ * @param node node to clone
+ * @param cloneTextNodesOnly if true, only text nodes will be cloned
+ * @param locator the Locator for the event, if any.
+ */
+ void
+ cloneToResultTree(
+ const XalanNode& node,
+ bool cloneTextNodesOnly,
+ const LocatorType* locator);
+
+ /**
+ * Clone a node to the result tree
+ *
+ * @param node node to clone
+ * @param nodeType the type of the node
+ * @param overrideStrip false if white space stripping should be done
+ * @param shouldCloneAttributes true if attributes should be cloned
+ * @param cloneTextNodesOnly if true, only text nodes will be cloned
+ * @param locator the Locator for the event, if any.
+ */
+ void
+ cloneToResultTree(
+ const XalanNode& node,
+ XalanNode::NodeType nodeType,
+ bool overrideStrip,
+ bool shouldCloneAttributes,
+ bool cloneTextNodesOnly,
+ const LocatorType* locator);
/**
- * Output an object to the result tree by doing the right conversions.
- *
- * @param value the XObject to output
- * @param outputTextNodesOnly if true, only text nodes will be copied
- * @param locator the Locator for the event, if any.
- */
- void
- outputToResultTree(
- const XObject& value,
- bool outputTextNodesOnly,
- const LocatorType* locator);
-
- /**
- * Given a result tree fragment, walk the tree and output it to the result
- * stream.
- *
- * @param theTree result tree fragment
- * @param outputTextNodesOnly if true, only text nodes will be copied
- * @param locator the Locator for the event, if any.
- */
- void
- outputResultTreeFragment(
- const XObject& theTree,
- bool outputTextNodesOnly,
- const LocatorType* locator)
- {
- outputResultTreeFragment(theTree.rtree(), outputTextNodesOnly, locator);
- }
-
- /**
- * Given a result tree fragment, walk the tree and output it to the result
- * stream.
- *
- * @param theTree result tree fragment
- * @param outputTextNodesOnly if true, only text nodes will be copied
- * @param locator the Locator for the event, if any.
- */
- void
- outputResultTreeFragment(
- const XalanDocumentFragment& theTree,
- bool outputTextNodesOnly,
- const LocatorType* locator);
-
- /**
- * Retrieve the root stylesheet.
- *
- * @return pointer to root stylesheet
- */
- virtual const StylesheetRoot*
- getStylesheetRoot() const;
-
- /**
- * Set the root stylesheet.
- *
- * @param theStylesheet pointer to new root stylesheet
- */
- virtual void
- setStylesheetRoot(const StylesheetRoot* theStylesheet);
-
- /**
- * Set the execution context.
- *
- * @param theExecutionContext pointer to new execution context.
- */
- virtual void
- setExecutionContext(StylesheetExecutionContext* theExecutionContext);
-
- /**
- * Retrieve the URI for the current XSL namespace, for example,
- * "http://www.w3.org/1999/XSL/Transform"
- *
- * @return URI string
- */
- static const XalanDOMString&
- getXSLNameSpaceURL()
- {
- return s_XSLNameSpaceURL;
- }
-
- /**
- * Special Xalan namespace for built-in extensions.
- *
- * @return Xalan namespace for extensions
- */
- static const XalanDOMString&
- getXalanXSLNameSpaceURL()
- {
- return s_XalanNamespaceURL;
- }
-
- /**
- * Whether to warn about pattern match conflicts.
- *
- * @return true to not warn about pattern match conflicts
- */
- bool
- getQuietConflictWarnings() const
- {
- return m_quietConflictWarnings;
- }
-
- virtual void
- message(
- const XalanDOMString& msg,
- const XalanNode* sourceNode = 0,
- const ElemTemplateElement* styleNode = 0) const;
-
- virtual void
- message(
- const XalanDOMString& msg,
- const LocatorType& locator,
- const XalanNode* sourceNode = 0) const;
-
- virtual void
- warn(
- const XalanDOMString& msg,
- const XalanNode* sourceNode = 0,
- const ElemTemplateElement* styleNode = 0) const;
-
-
- virtual void
- warn(
- const XalanDOMString& msg,
- const LocatorType& locator,
- const XalanNode* sourceNode = 0) const;
-
- virtual void
- error(
- const XalanDOMString& msg,
- const XalanNode* sourceNode = 0,
- const ElemTemplateElement* styleNode = 0) const;
-
- virtual void
- error(
- const XalanDOMString& msg,
- const LocatorType& locator,
- const XalanNode* sourceNode = 0) const;
+ * Output an object to the result tree by doing the right conversions.
+ *
+ * @param value the XObject to output
+ * @param outputTextNodesOnly if true, only text nodes will be copied
+ * @param locator the Locator for the event, if any.
+ */
+ void
+ outputToResultTree(
+ const XObject& value,
+ bool outputTextNodesOnly,
+ const LocatorType* locator);
+
+ /**
+ * Given a result tree fragment, walk the tree and output it to the result
+ * stream.
+ *
+ * @param theTree result tree fragment
+ * @param outputTextNodesOnly if true, only text nodes will be copied
+ * @param locator the Locator for the event, if any.
+ */
+ void
+ outputResultTreeFragment(
+ const XObject& theTree,
+ bool outputTextNodesOnly,
+ const LocatorType* locator)
+ {
+ outputResultTreeFragment(theTree.rtree(), outputTextNodesOnly, locator);
+ }
+
+ /**
+ * Given a result tree fragment, walk the tree and output it to the result
+ * stream.
+ *
+ * @param theTree result tree fragment
+ * @param outputTextNodesOnly if true, only text nodes will be copied
+ * @param locator the Locator for the event, if any.
+ */
+ void
+ outputResultTreeFragment(
+ const XalanDocumentFragment& theTree,
+ bool outputTextNodesOnly,
+ const LocatorType* locator);
+
+ /**
+ * Retrieve the root stylesheet.
+ *
+ * @return pointer to root stylesheet
+ */
+ virtual const StylesheetRoot*
+ getStylesheetRoot() const;
+
+ /**
+ * Set the root stylesheet.
+ *
+ * @param theStylesheet pointer to new root stylesheet
+ */
+ virtual void
+ setStylesheetRoot(const StylesheetRoot* theStylesheet);
+
+ /**
+ * Set the execution context.
+ *
+ * @param theExecutionContext pointer to new execution context.
+ */
+ virtual void
+ setExecutionContext(StylesheetExecutionContext* theExecutionContext);
+
+ /**
+ * Retrieve the URI for the current XSL namespace, for example,
+ * "http://www.w3.org/1999/XSL/Transform"
+ *
+ * @return URI string
+ */
+ static const XalanDOMString&
+ getXSLNameSpaceURL()
+ {
+ return s_XSLNameSpaceURL;
+ }
+
+ /**
+ * Special Xalan namespace for built-in extensions.
+ *
+ * @return Xalan namespace for extensions
+ */
+ static const XalanDOMString&
+ getXalanXSLNameSpaceURL()
+ {
+ return s_XalanNamespaceURL;
+ }
+
+ /**
+ * Whether to warn about pattern match conflicts.
+ *
+ * @return true to not warn about pattern match conflicts
+ */
+ bool
+ getQuietConflictWarnings() const
+ {
+ return m_quietConflictWarnings;
+ }
+
+ virtual void
+ message(
+ const XalanDOMString& msg,
+ const XalanNode* sourceNode = 0,
+ const ElemTemplateElement* styleNode = 0) const;
+
+ virtual void
+ message(
+ const XalanDOMString& msg,
+ const LocatorType& locator,
+ const XalanNode* sourceNode = 0) const;
+
+ virtual void
+ warn(
+ const XalanDOMString& msg,
+ const XalanNode* sourceNode = 0,
+ const ElemTemplateElement* styleNode = 0) const;
+
+
+ virtual void
+ warn(
+ const XalanDOMString& msg,
+ const LocatorType& locator,
+ const XalanNode* sourceNode = 0) const;
+
+ virtual void
+ error(
+ const XalanDOMString& msg,
+ const XalanNode* sourceNode = 0,
+ const ElemTemplateElement* styleNode = 0) const;
+
+ virtual void
+ error(
+ const XalanDOMString& msg,
+ const LocatorType& locator,
+ const XalanNode* sourceNode = 0) const;
public:
- /**
- * Retrieve the result namespace corresponding to a prefix.
- *
- * @param prefix prefix for namespace
- * @return string for namespace URI
- */
- const XalanDOMString*
- getResultNamespaceForPrefix(const XalanDOMString& prefix) const;
-
- /**
- * Retrieve the result prefix corresponding to a namespace.
- *
- * @param theNamespace namespace for prefix
- * @return string for namespace prefix
- */
- const XalanDOMString*
- getResultPrefixForNamespace(const XalanDOMString& theNamespace) const;
-
- /**
- * Determine whether or not a prefix is in use on the pending element or
- * the pending attributes.
- *
- * @param thePrefix prefix for namespace
- *
- * @return true if the prefix is in use, false if not.
- */
- bool
- isPendingResultPrefix(const XalanDOMString& thePrefix) const;
-
- /**
- * Evaluate an xpath string and return the result as a numberic score.
- *
- * @param str string to evaluate
- * @param context context node
- * @param executionContext current execution context
- * @return score number, higher representing better match
- */
- double
- evalMatchPatternStr(
- const XalanDOMString& str,
- XalanNode* context,
- XPathExecutionContext& executionContext);
-
- /**
- * Create and initialize an xpath and return it.
- *
- * @param str string for XPath
- * @param resolver resolver for namespace resolution
- * @return pointer to XPath created
- */
- const XPath*
- createMatchPattern(
- const XalanDOMString& str,
- const PrefixResolver& resolver);
-
- /**
- * Return the xpath created by createXPath() or
- * createMatchPattern().
- *
- * @param xpath The XPath to return.
- */
- void
- returnXPath(const XPath* xpath);
-
- /**
- * Copy XMLNS: attributes in if not already in scope.
- *
- * @param src source node
- */
- void
- copyNamespaceAttributes(const XalanNode& src);
-
- /**
- * Evaluate an xpath string and return the result.
- *
- * @param str string to evaluate
- * @param executionContext current execution context
- * @return pointer to XObject result
- */
- const XObjectPtr
- evalXPathStr(
- const XalanDOMString& str,
- XPathExecutionContext& executionContext);
-
- /**
- * Evaluate an xpath string and return the result.
- *
- * @param str string to evaluate
- * @param contextNode context node
- * @param prefixResolver prefix resolver to use
- * @param executionContext current execution context
- * @return pointer to XObject result
- */
- const XObjectPtr
- evalXPathStr(
- const XalanDOMString& str,
- XalanNode* contextNode,
- const PrefixResolver& prefixResolver,
- XPathExecutionContext& executionContext);
-
- /**
- * Evaluate an xpath string and return the result.
- *
- * @param str string to evaluate
- * @param contextNode context node
- * @param prefixResolver prefix resolver to use
- * @param executionContext current execution context
- * @return pointer to XObject result
- */
- const XObjectPtr
- evalXPathStr(
- const XalanDOMString& str,
- XalanNode* contextNode,
- const XalanElement& prefixResolver,
- XPathExecutionContext& executionContext);
-
- /**
- * Copy an attribute to an AttributeListImpl.
- *
- * @param attrName The name of the attribute
- * @param attrValue The value of the attribute
- * @param attrList The attribute list added to
- */
- void
- copyAttributeToTarget(
- const XalanDOMString& attrName,
- const XalanDOMString& attrValue,
- AttributeListImpl& attrList);
-
- /**
- * Get the factory for making xpaths.
- *
- * @return XPath factory object
- */
- XPathFactory&
- getXPathFactory()
- {
- return m_xpathFactory;
- }
-
- /**
- * Get the XPath processor object.
- *
- * @return XPathProcessor interface being used
- */
- XPathProcessor&
- getXPathProcessor()
- {
- return *m_xpathProcessor.get();
- }
-
- /**
- * Reset the state. This needs to be called after a process() call
- * is invoked, if the processor is to be used again.
- */
- virtual void
- reset();
-
- /**
- * Retrieve the XPath environment support object
- *
- * @return XPath environment support object
- */
- XPathEnvSupport&
- getXPathEnvSupport()
- {
- return m_xpathEnvSupport;
- }
-
- /**
- * Set the problem listener property. The XSL class can have a single
- * listener that can be informed of errors and warnings, and can normally
- * control if an exception is thrown or not (or the problem listeners can
- * throw their own RuntimeExceptions).
- *
- * @param l pointer to ProblemListener interface
- */
- void
- setProblemListener(ProblemListener* l)
- {
- m_problemListener = l;
- }
-
- /**
- * Get the problem listener property. The XSL class can have a single
- * listener that can be informed of errors and warnings, and can normally
- * control if an exception is thrown or not (or the problem listeners can
- * throw their own RuntimeExceptions).
- *
- * @return pointer to ProblemListener interface
- */
- ProblemListener*
- getProblemListener() const
- {
- return m_problemListener;
- }
-
- /*
- * Push a new output context using the provided FormatterListener.
- *
- * @param A pointer to the FormatterListener instance for the new context.
- */
- void
- pushOutputContext(FormatterListener* theListener)
- {
- m_outputContextStack.pushContext(theListener);
- }
-
- /*
- * Pop the current output context.
- */
- void
- popOutputContext()
- {
- m_outputContextStack.popContext();
- }
-
- /*
- * See if there is a pending start document event waiting.
- * @return true if there is a start document event waiting.
- */
- bool
- getHasPendingStartDocument() const
- {
- return getHasPendingStartDocumentImpl();
- }
-
- /*
- * Set the pending start document event state.
- * @param the new value
- */
- void
- setHasPendingStartDocument(bool b)
- {
- setHasPendingStartDocumentImpl(b);
- }
-
- /*
- * See if a pending start document event must be flushed.
- * @return true if the event must be flushed.
- */
- bool
- getMustFlushPendingStartDocument() const
- {
- return getMustFlushPendingStartDocumentImpl();
- }
-
- /*
- * Set the pending start document event flush state.
- * @param the new value
- */
- void
- setMustFlushPendingStartDocument(bool b)
- {
- setMustFlushPendingStartDocumentImpl(b);
- }
-
- /**
- * Get the list of attributes yet to be processed
- *
- * @return attribute list
- */
- const AttributeListType&
- getPendingAttributes() const
- {
- return getPendingAttributesImpl();
- }
-
- /**
- * Set the list of attributes yet to be processed
- *
- * @param pendingAttributes The attribute list
- */
- void
- setPendingAttributes(const AttributeListType& pendingAttributes)
- {
- getPendingAttributesImpl() = pendingAttributes;
- }
-
- /**
- * Replace the contents of a pending attribute.
- *
- * @param theName name of attribute
- * @param theNewType type of attribute
- * @param theNewValue new value of attribute
- */
- void
- replacePendingAttribute(
- const XalanDOMChar* theName,
- const XalanDOMChar* theNewType,
- const XalanDOMChar* theNewValue)
- {
- // Remove the old attribute, then add the new one. AttributeListImpl::addAttribute()
- // does this for us.
- getPendingAttributesImpl().addAttribute(theName, theNewType, theNewValue);
- }
-
- bool
- isElementPending() const
- {
- return length(getPendingElementNameImpl()) != 0 ? true : false;
- }
-
- /**
- * Retrieve name of the pending element currently being processed.
- *
- * @return element name
- */
- const XalanDOMString&
- getPendingElementName() const
- {
- return getPendingElementNameImpl();
- }
-
- /**
- * Changes the currently pending element name.
- *
- * @param elementName new name of element
- */
- void
- setPendingElementName(const XalanDOMString& elementName)
- {
- setPendingElementNameImpl(elementName);
- }
-
- void
- setPendingElementName(const XalanDOMChar* elementName)
- {
- setPendingElementNameImpl(elementName);
- }
-
- /**
- * Get the locator from the top of the locator stack.
- *
- * @return A pointer to the Locator, or 0 if there is nothing on the stack.
- */
- const LocatorType*
- getLocatorFromStack() const
- {
- return m_stylesheetLocatorStack.empty() == true ? 0 : m_stylesheetLocatorStack.back();
- }
-
- /**
- * Push a locator on to the locator stack.
- *
- * @param A pointer to the Locator to push.
- */
- void
- pushLocatorOnStack(const LocatorType* locator)
- {
- m_stylesheetLocatorStack.push_back(locator);
- }
-
- /**
- * Pop the locator from the top of the locator stack.
- */
- void
- popLocatorStack()
- {
- if (m_stylesheetLocatorStack.empty() == false)
- {
- m_stylesheetLocatorStack.pop_back();
- }
- }
+ /**
+ * Retrieve the result namespace corresponding to a prefix.
+ *
+ * @param prefix prefix for namespace
+ * @return string for namespace URI
+ */
+ const XalanDOMString*
+ getResultNamespaceForPrefix(const XalanDOMString& prefix) const;
+
+ /**
+ * Retrieve the result prefix corresponding to a namespace.
+ *
+ * @param theNamespace namespace for prefix
+ * @return string for namespace prefix
+ */
+ const XalanDOMString*
+ getResultPrefixForNamespace(const XalanDOMString& theNamespace) const;
+
+ /**
+ * Determine whether or not a prefix is in use on the pending element or
+ * the pending attributes.
+ *
+ * @param thePrefix prefix for namespace
+ *
+ * @return true if the prefix is in use, false if not.
+ */
+ bool
+ isPendingResultPrefix(const XalanDOMString& thePrefix) const;
+
+ /**
+ * Evaluate an xpath string and return the result as a numberic score.
+ *
+ * @param str string to evaluate
+ * @param context context node
+ * @param executionContext current execution context
+ * @return score number, higher representing better match
+ */
+ double
+ evalMatchPatternStr(
+ const XalanDOMString& str,
+ XalanNode* context,
+ XPathExecutionContext& executionContext);
+
+ /**
+ * Create and initialize an xpath and return it.
+ *
+ * @param str string for XPath
+ * @param resolver resolver for namespace resolution
+ * @return pointer to XPath created
+ */
+ const XPath*
+ createMatchPattern(
+ const XalanDOMString& str,
+ const PrefixResolver& resolver);
+
+ /**
+ * Return the xpath created by createXPath() or
+ * createMatchPattern().
+ *
+ * @param xpath The XPath to return.
+ */
+ void
+ returnXPath(const XPath* xpath);
+
+ /**
+ * Copy XMLNS: attributes in if not already in scope.
+ *
+ * @param src source node
+ */
+ void
+ copyNamespaceAttributes(const XalanNode& src);
+
+ /**
+ * Evaluate an xpath string and return the result.
+ *
+ * @param str string to evaluate
+ * @param executionContext current execution context
+ * @return pointer to XObject result
+ */
+ const XObjectPtr
+ evalXPathStr(
+ const XalanDOMString& str,
+ XPathExecutionContext& executionContext);
+
+ /**
+ * Evaluate an xpath string and return the result.
+ *
+ * @param str string to evaluate
+ * @param contextNode context node
+ * @param prefixResolver prefix resolver to use
+ * @param executionContext current execution context
+ * @return pointer to XObject result
+ */
+ const XObjectPtr
+ evalXPathStr(
+ const XalanDOMString& str,
+ XalanNode* contextNode,
+ const PrefixResolver& prefixResolver,
+ XPathExecutionContext& executionContext);
+
+ /**
+ * Evaluate an xpath string and return the result.
+ *
+ * @param str string to evaluate
+ * @param contextNode context node
+ * @param prefixResolver prefix resolver to use
+ * @param executionContext current execution context
+ * @return pointer to XObject result
+ */
+ const XObjectPtr
+ evalXPathStr(
+ const XalanDOMString& str,
+ XalanNode* contextNode,
+ const XalanElement& prefixResolver,
+ XPathExecutionContext& executionContext);
+
+ /**
+ * Copy an attribute to an AttributeListImpl.
+ *
+ * @param attrName The name of the attribute
+ * @param attrValue The value of the attribute
+ * @param attrList The attribute list added to
+ */
+ void
+ copyAttributeToTarget(
+ const XalanDOMString& attrName,
+ const XalanDOMString& attrValue,
+ AttributeListImpl& attrList);
+
+ /**
+ * Get the factory for making xpaths.
+ *
+ * @return XPath factory object
+ */
+ XPathFactory&
+ getXPathFactory()
+ {
+ return m_xpathFactory;
+ }
+
+ /**
+ * Get the XPath processor object.
+ *
+ * @return XPathProcessor interface being used
+ */
+ XPathProcessor&
+ getXPathProcessor()
+ {
+ return *m_xpathProcessor.get();
+ }
+
+ /**
+ * Reset the state. This needs to be called after a process() call
+ * is invoked, if the processor is to be used again.
+ */
+ virtual void
+ reset();
+
+ /**
+ * Retrieve the XPath environment support object
+ *
+ * @return XPath environment support object
+ */
+ XPathEnvSupport&
+ getXPathEnvSupport()
+ {
+ return m_xpathEnvSupport;
+ }
+
+ /**
+ * Set the problem listener property. The XSL class can have a single
+ * listener that can be informed of errors and warnings, and can normally
+ * control if an exception is thrown or not (or the problem listeners can
+ * throw their own RuntimeExceptions).
+ *
+ * @param l pointer to ProblemListener interface
+ */
+ void
+ setProblemListener(ProblemListener* l)
+ {
+ m_problemListener = l;
+ }
+
+ /**
+ * Get the problem listener property. The XSL class can have a single
+ * listener that can be informed of errors and warnings, and can normally
+ * control if an exception is thrown or not (or the problem listeners can
+ * throw their own RuntimeExceptions).
+ *
+ * @return pointer to ProblemListener interface
+ */
+ ProblemListener*
+ getProblemListener() const
+ {
+ return m_problemListener;
+ }
+
+ /*
+ * Push a new output context using the provided FormatterListener.
+ *
+ * @param A pointer to the FormatterListener instance for the new context.
+ */
+ void
+ pushOutputContext(FormatterListener* theListener)
+ {
+ m_outputContextStack.pushContext(theListener);
+ }
+
+ /*
+ * Pop the current output context.
+ */
+ void
+ popOutputContext()
+ {
+ m_outputContextStack.popContext();
+ }
+
+ /*
+ * See if there is a pending start document event waiting.
+ * @return true if there is a start document event waiting.
+ */
+ bool
+ getHasPendingStartDocument() const
+ {
+ return getHasPendingStartDocumentImpl();
+ }
+
+ /*
+ * Set the pending start document event state.
+ * @param the new value
+ */
+ void
+ setHasPendingStartDocument(bool b)
+ {
+ setHasPendingStartDocumentImpl(b);
+ }
+
+ /*
+ * See if a pending start document event must be flushed.
+ * @return true if the event must be flushed.
+ */
+ bool
+ getMustFlushPendingStartDocument() const
+ {
+ return getMustFlushPendingStartDocumentImpl();
+ }
+
+ /*
+ * Set the pending start document event flush state.
+ * @param the new value
+ */
+ void
+ setMustFlushPendingStartDocument(bool b)
+ {
+ setMustFlushPendingStartDocumentImpl(b);
+ }
+
+ /**
+ * Get the list of attributes yet to be processed
+ *
+ * @return attribute list
+ */
+ const AttributeListType&
+ getPendingAttributes() const
+ {
+ return getPendingAttributesImpl();
+ }
+
+ /**
+ * Set the list of attributes yet to be processed
+ *
+ * @param pendingAttributes The attribute list
+ */
+ void
+ setPendingAttributes(const AttributeListType& pendingAttributes)
+ {
+ getPendingAttributesImpl() = pendingAttributes;
+ }
+
+ /**
+ * Replace the contents of a pending attribute.
+ *
+ * @param theName name of attribute
+ * @param theNewType type of attribute
+ * @param theNewValue new value of attribute
+ */
+ void
+ replacePendingAttribute(
+ const XalanDOMChar* theName,
+ const XalanDOMChar* theNewType,
+ const XalanDOMChar* theNewValue)
+ {
+ // Remove the old attribute, then add the new one. AttributeListImpl::addAttribute()
+ // does this for us.
+ getPendingAttributesImpl().addAttribute(theName, theNewType, theNewValue);
+ }
+
+ bool
+ isElementPending() const
+ {
+ return length(getPendingElementNameImpl()) != 0 ? true : false;
+ }
+
+ /**
+ * Retrieve name of the pending element currently being processed.
+ *
+ * @return element name
+ */
+ const XalanDOMString&
+ getPendingElementName() const
+ {
+ return getPendingElementNameImpl();
+ }
+
+ /**
+ * Changes the currently pending element name.
+ *
+ * @param elementName new name of element
+ */
+ void
+ setPendingElementName(const XalanDOMString& elementName)
+ {
+ setPendingElementNameImpl(elementName);
+ }
+
+ void
+ setPendingElementName(const XalanDOMChar* elementName)
+ {
+ setPendingElementNameImpl(elementName);
+ }
+
+ /**
+ * Get the locator from the top of the locator stack.
+ *
+ * @return A pointer to the Locator, or 0 if there is nothing on the stack.
+ */
+ const LocatorType*
+ getLocatorFromStack() const
+ {
+ return m_stylesheetLocatorStack.empty() == true ? 0 : m_stylesheetLocatorStack.back();
+ }
+
+ /**
+ * Push a locator on to the locator stack.
+ *
+ * @param A pointer to the Locator to push.
+ */
+ void
+ pushLocatorOnStack(const LocatorType* locator)
+ {
+ m_stylesheetLocatorStack.push_back(locator);
+ }
+
+ /**
+ * Pop the locator from the top of the locator stack.
+ */
+ void
+ popLocatorStack()
+ {
+ if (m_stylesheetLocatorStack.empty() == false)
+ {
+ m_stylesheetLocatorStack.pop_back();
+ }
+ }
protected:
- /**
- * Get the list of attributes yet to be processed
- *
- * @return attribute list
- */
- const AttributeListImpl&
- getPendingAttributesImpl() const
- {
- return m_outputContextStack.getPendingAttributes();
- }
-
- /**
- * Get the list of attributes yet to be processed
- *
- * @return attribute list
- */
- AttributeListImpl&
- getPendingAttributesImpl()
- {
- return m_outputContextStack.getPendingAttributes();
- }
-
- /**
- * Set the list of attributes yet to be processed
- *
- * @param pendingAttributes The attribute list
- */
- void
- setPendingAttributesImpl(const AttributeListType& pendingAttributes)
- {
- getPendingAttributesImpl() = pendingAttributes;
- }
-
- /**
- * Retrieve name of the pending element currently being processed.
- *
- * @return element name
- */
- const XalanDOMString&
- getPendingElementNameImpl() const
- {
- return m_outputContextStack.getPendingElementName();
- }
-
- /**
- * Retrieve name of the pending element currently being processed.
- *
- * @return element name
- */
- XalanDOMString&
- getPendingElementNameImpl()
- {
- return m_outputContextStack.getPendingElementName();
- }
-
- /**
- * Changes the currently pending element name.
- *
- * @param elementName new name of element
- */
- void
- setPendingElementNameImpl(const XalanDOMString& elementName)
- {
- m_outputContextStack.getPendingElementName() = elementName;
- }
-
- /**
- * Changes the currently pending element name.
- *
- * @param elementName new name of element
- */
- void
- setPendingElementNameImpl(const XalanDOMChar* elementName)
- {
- assert(elementName != 0);
-
- m_outputContextStack.getPendingElementName() = elementName;
- }
-
- /*
- * See if there is a pending start document event waiting.
- * @return true if there is a start document event waiting.
- */
- bool
- getHasPendingStartDocumentImpl() const
- {
- return m_outputContextStack.getHasPendingStartDocument();
- }
-
- /*
- * Set the pending start document event state.
- * @param the new value
- */
- void
- setHasPendingStartDocumentImpl(bool b)
- {
- m_outputContextStack.getHasPendingStartDocument() = b;
- }
-
- /*
- * See if a pending start document event must be flushed.
- * @return true if the event must be flushed.
- */
- bool
- getMustFlushPendingStartDocumentImpl() const
- {
- return m_outputContextStack.getMustFlushPendingStartDocument();
- }
-
- /*
- * Set the pending start document event flush state.
- * @param the new value
- */
- void
- setMustFlushPendingStartDocumentImpl(bool b)
- {
- m_outputContextStack.getMustFlushPendingStartDocument() = b;
- }
-
- FormatterListener*
- getFormatterListenerImpl() const
- {
- return m_outputContextStack.getFormatterListener();
- }
-
- void
- setFormatterListenerImpl(FormatterListener* flistener)
- {
- m_outputContextStack.getFormatterListener() = flistener;
- }
-
- /**
- * The namespace that the result tree conforms to. A null value
- * indicates that result-ns is not used and there is no checking.
- * A empty string indicates that the result tree conforms to the
- * default namespace.
- */
- XalanDOMString m_resultNameSpacePrefix;
-
- /**
- * The URL that belongs to the result namespace.
- */
- XalanDOMString m_resultNameSpaceURL;
-
-
- /**
- * Copy the attributes from the XSL element to the created
- * output element.
- */
- void
- copyAttributesToAttList(
- const XalanNode& node,
- AttributeListImpl& attList);
-
- // Factory for creating xpaths.
- XPathFactory& m_xpathFactory;
-
- // Factory for creating xobjects
- XObjectFactory& m_xobjectFactory;
-
- // The query/pattern-matcher object.
- const XPathProcessorPtrType m_xpathProcessor;
-
- /**
- * Stack of Booleans to keep track of if we should be outputting
- * cdata instead of escaped text.
- */
- BoolVectorType m_cdataStack;
+ /**
+ * Get the list of attributes yet to be processed
+ *
+ * @return attribute list
+ */
+ const AttributeListImpl&
+ getPendingAttributesImpl() const
+ {
+ return m_outputContextStack.getPendingAttributes();
+ }
+
+ /**
+ * Get the list of attributes yet to be processed
+ *
+ * @return attribute list
+ */
+ AttributeListImpl&
+ getPendingAttributesImpl()
+ {
+ return m_outputContextStack.getPendingAttributes();
+ }
+
+ /**
+ * Set the list of attributes yet to be processed
+ *
+ * @param pendingAttributes The attribute list
+ */
+ void
+ setPendingAttributesImpl(const AttributeListType& pendingAttributes)
+ {
+ getPendingAttributesImpl() = pendingAttributes;
+ }
+
+ /**
+ * Retrieve name of the pending element currently being processed.
+ *
+ * @return element name
+ */
+ const XalanDOMString&
+ getPendingElementNameImpl() const
+ {
+ return m_outputContextStack.getPendingElementName();
+ }
+
+ /**
+ * Retrieve name of the pending element currently being processed.
+ *
+ * @return element name
+ */
+ XalanDOMString&
+ getPendingElementNameImpl()
+ {
+ return m_outputContextStack.getPendingElementName();
+ }
+
+ /**
+ * Changes the currently pending element name.
+ *
+ * @param elementName new name of element
+ */
+ void
+ setPendingElementNameImpl(const XalanDOMString& elementName)
+ {
+ m_outputContextStack.getPendingElementName() = elementName;
+ }
+
+ /**
+ * Changes the currently pending element name.
+ *
+ * @param elementName new name of element
+ */
+ void
+ setPendingElementNameImpl(const XalanDOMChar* elementName)
+ {
+ assert(elementName != 0);
+
+ m_outputContextStack.getPendingElementName() = elementName;
+ }
+
+ /*
+ * See if there is a pending start document event waiting.
+ * @return true if there is a start document event waiting.
+ */
+ bool
+ getHasPendingStartDocumentImpl() const
+ {
+ return m_outputContextStack.getHasPendingStartDocument();
+ }
+
+ /*
+ * Set the pending start document event state.
+ * @param the new value
+ */
+ void
+ setHasPendingStartDocumentImpl(bool b)
+ {
+ m_outputContextStack.getHasPendingStartDocument() = b;
+ }
+
+ /*
+ * See if a pending start document event must be flushed.
+ * @return true if the event must be flushed.
+ */
+ bool
+ getMustFlushPendingStartDocumentImpl() const
+ {
+ return m_outputContextStack.getMustFlushPendingStartDocument();
+ }
+
+ /*
+ * Set the pending start document event flush state.
+ * @param the new value
+ */
+ void
+ setMustFlushPendingStartDocumentImpl(bool b)
+ {
+ m_outputContextStack.getMustFlushPendingStartDocument() = b;
+ }
+
+ FormatterListener*
+ getFormatterListenerImpl() const
+ {
+ return m_outputContextStack.getFormatterListener();
+ }
+
+ void
+ setFormatterListenerImpl(FormatterListener* flistener)
+ {
+ m_outputContextStack.getFormatterListener() = flistener;
+ }
+
+ /**
+ * The namespace that the result tree conforms to. A null value
+ * indicates that result-ns is not used and there is no checking.
+ * A empty string indicates that the result tree conforms to the
+ * default namespace.
+ */
+ XalanDOMString m_resultNameSpacePrefix;
+
+ /**
+ * The URL that belongs to the result namespace.
+ */
+ XalanDOMString m_resultNameSpaceURL;
+
+
+ /**
+ * Copy the attributes from the XSL element to the created
+ * output element.
+ */
+ void
+ copyAttributesToAttList(
+ const XalanNode& node,
+ AttributeListImpl& attList);
+
+ // Factory for creating xpaths.
+ XPathFactory& m_xpathFactory;
+
+ // Factory for creating xobjects
+ XObjectFactory& m_xobjectFactory;
+
+ // The query/pattern-matcher object.
+ const XPathProcessorPtrType m_xpathProcessor;
+
+ /**
+ * Stack of Booleans to keep track of if we should be outputting
+ * cdata instead of escaped text.
+ */
+ BoolVectorType m_cdataStack;
private:
- /**
- * Issue a warning that only text nodes can be copied.
- *
- * @param sourceNode node in source where error occurred
- * @param locator The Locator to use, if any.
- */
- void
- warnCopyTextNodesOnly(
- const XalanNode* sourceNode,
- const LocatorType* locator);
-
- /**
- * Clone a text node to the result tree
- *
- * @param node node to clone
- * @param overrideStrip false if white space stripping should be done
- */
- void
- cloneToResultTree(
- const XalanText& node,
- bool overrideStrip);
-
- /**
- * Determine if any pending attributes is a default
- * namespace.
- */
- bool
- pendingAttributesHasDefaultNS() const;
-
- void
- addResultNamespace(
- const XalanDOMString& thePrefix,
- const XalanDOMString& theName,
- const XalanNode& theNode,
- AttributeListImpl& thePendingAttributes,
- bool fOnlyIfPrefixNotPresent);
-
- void
- addResultNamespace(
- const XalanNode& theNode,
- AttributeListImpl& thePendingAttributes,
- bool fOnlyIfPrefixNotPresent = false);
+ /**
+ * Issue a warning that only text nodes can be copied.
+ *
+ * @param sourceNode node in source where error occurred
+ * @param locator The Locator to use, if any.
+ */
+ void
+ warnCopyTextNodesOnly(
+ const XalanNode* sourceNode,
+ const LocatorType* locator);
+
+ /**
+ * Clone a text node to the result tree
+ *
+ * @param node node to clone
+ * @param overrideStrip false if white space stripping should be done
+ */
+ void
+ cloneToResultTree(
+ const XalanText& node,
+ bool overrideStrip);
+
+ /**
+ * Determine if any pending attributes is a default
+ * namespace.
+ */
+ bool
+ pendingAttributesHasDefaultNS() const;
+
+ void
+ addResultNamespace(
+ const XalanDOMString& thePrefix,
+ const XalanDOMString& theName,
+ const XalanNode& theNode,
+ AttributeListImpl& thePendingAttributes,
+ bool fOnlyIfPrefixNotPresent);
+
+ void
+ addResultNamespace(
+ const XalanNode& theNode,
+ AttributeListImpl& thePendingAttributes,
+ bool fOnlyIfPrefixNotPresent = false);
/**
* The top of this stack should contain the currently processed
* stylesheet SAX locator object.
*/
- LocatorStack m_stylesheetLocatorStack;
+ LocatorStack m_stylesheetLocatorStack;
- /**
- * The XSL class can have a single listener that can be informed
- * of errors and warnings, and can normally control if an exception
- * is thrown or not (or the problem listeners can throw their
- * own RuntimeExceptions).
- */
- ProblemListenerDefault m_defaultProblemListener;
-
- ProblemListener* m_problemListener;
-
- /**
- * The root of a linked set of stylesheets.
- */
- const StylesheetRoot* m_stylesheetRoot;
-
- /**
- * The namespace that we must match as a minimum for XSLT.
- */
- static const XalanDOMString& s_XSLNameSpaceURL; //"http://www.w3.org/1999/XSL/Transform"
-
- /**
- * Special Xalan namespace for built-in extensions.
- */
- static const XalanDOMString& s_XalanNamespaceURL; // "http://xml.apache.org/xalan"
-
- /**
- * Prefix to use when generating unique namespaces.
- */
- static const XalanDOMString& s_uniqueNamespacePrefix;
-
- /**
- * If this is set to true, selects will be traced
- */
- bool m_traceSelects;
-
- /**
- * If this is set to true, do not warn about pattern
- * match conflicts.
- */
- bool m_quietConflictWarnings;
-
- /*
- * A stream to print diagnostics to.
- */
- PrintWriter* m_diagnosticsPrintWriter;
-
- /**
- * List of listeners who are interested in tracing what's
- * being generated.
- */
- TraceListenerVectorType m_traceListeners;
-
- void
- problem(
- const XalanDOMString& msg,
- ProblemListener::eClassification classification,
- const XalanNode* sourceNode,
- const ElemTemplateElement* styleNode) const;
-
- void
- problem(
- const XalanDOMString& msg,
- ProblemListener::eClassification classification,
- const LocatorType& locator,
- const XalanNode* sourceNode) const;
+ /**
+ * The XSL class can have a single listener that can be informed
+ * of errors and warnings, and can normally control if an exception
+ * is thrown or not (or the problem listeners can throw their
+ * own RuntimeExceptions).
+ */
+ ProblemListenerDefault m_defaultProblemListener;
+
+ ProblemListener* m_problemListener;
+
+ /**
+ * The root of a linked set of stylesheets.
+ */
+ const StylesheetRoot* m_stylesheetRoot;
+
+ /**
+ * The namespace that we must match as a minimum for XSLT.
+ */
+ static const XalanDOMString& s_XSLNameSpaceURL; //"http://www.w3.org/1999/XSL/Transform"
+
+ /**
+ * Special Xalan namespace for built-in extensions.
+ */
+ static const XalanDOMString& s_XalanNamespaceURL; // "http://xml.apache.org/xalan"
+
+ /**
+ * Prefix to use when generating unique namespaces.
+ */
+ static const XalanDOMString& s_uniqueNamespacePrefix;
+
+ /**
+ * If this is set to true, selects will be traced
+ */
+ bool m_traceSelects;
+
+ /**
+ * If this is set to true, do not warn about pattern
+ * match conflicts.
+ */
+ bool m_quietConflictWarnings;
+
+ /*
+ * A stream to print diagnostics to.
+ */
+ PrintWriter* m_diagnosticsPrintWriter;
+
+ /**
+ * List of listeners who are interested in tracing what's
+ * being generated.
+ */
+ TraceListenerVectorType m_traceListeners;
+
+ void
+ problem(
+ const XalanDOMString& msg,
+ ProblemListener::eClassification classification,
+ const XalanNode* sourceNode,
+ const ElemTemplateElement* styleNode) const;
+
+ void
+ problem(
+ const XalanDOMString& msg,
+ ProblemListener::eClassification classification,
+ const LocatorType& locator,
+ const XalanNode* sourceNode) const;
//==========================================================
// SECTION: Function to do with attribute handling
//==========================================================
- /**
- * This is used whenever a unique namespace is needed.
- */
- unsigned long m_uniqueNSValue;
+ /**
+ * This is used whenever a unique namespace is needed.
+ */
+ unsigned long m_uniqueNSValue;
- ParamVectorType m_topLevelParams;
+ ParamVectorType m_topLevelParams;
public:
- /**
- * Reset the vector of top level parameters
- */
- void
- clearTopLevelParams()
- {
- m_topLevelParams.clear();
- }
+ /**
+ * Reset the vector of top level parameters
+ */
+ void
+ clearTopLevelParams()
+ {
+ m_topLevelParams.clear();
+ }
private:
- bool
- generateCDATASection() const
- {
- if (m_hasCDATASectionElements == false)
- {
- return false;
- }
- else
- {
- assert(m_cdataStack.empty() == false);
-
- return m_cdataStack.back();
- }
- }
-
- void
- doFlushPending()
- {
- setMustFlushPendingStartDocument(true);
-
- flushPending();
- }
-
- /**
- * Tell if a given element name should output its text
- * as cdata.
- *
- * @param elementName name of element
- * @return true if it should output as cdata
- */
- bool
- isCDataResultElem(const XalanDOMString& elementName) const;
-
- void
- fireCharacterGenerateEvent(
- const XalanNode& theNode,
- bool isCDATA);
-
- void
- fireCharacterGenerateEvent(
- const XObjectPtr& theXObject,
- bool isCDATA);
-
- void
- fireCharacterGenerateEvent(
- const XalanDOMString& theString,
- bool isCDATA);
-
- void
- fireCharacterGenerateEvent(
- const XalanDOMChar* ch,
- XalanDOMString::size_type start,
- XalanDOMString::size_type length,
- bool isCDATA);
-
- void
- checkDefaultNamespace(
- const XalanDOMString& theElementName,
- const XalanDOMString& theElementNamespaceURI);
-
-
-
- // Data members...
- XMLParserLiaison& m_parserLiaison;
-
- XPathEnvSupport& m_xpathEnvSupport;
-
- DOMSupport& m_domSupport;
-
- /**
- * Current execution context...
- */
- StylesheetExecutionContext* m_executionContext;
-
- /*
- * Stack of current output contexts...
- */
- OutputContextStack m_outputContextStack;
-
- /*
- * Stack of current result namespaces...
- */
- XalanNamespacesStack m_resultNamespacesStack;
-
- /*
- * Dummy AttributeListImpl
- */
- AttributeListImpl m_dummyAttributesList;
-
- XalanDOMString m_scratchString;
-
- XalanDOMStringPointerVectorType m_attributeNamesVisited;
-
- bool m_hasCDATASectionElements;
-
- XPathConstructionContextDefault m_xpathConstructionContext;
-
- static void
- installFunctions(MemoryManagerType& theManager);
-
- static void
- uninstallFunctions();
-
-
- static const XalanDOMString s_emptyString;
-
- static const XalanDOMString& s_stylesheetNodeName;
- static const XalanDOMString& s_typeString;
- static const XalanDOMString& s_hrefString;
- static const XalanDOMString& s_piTokenizerString;
- static const XalanDOMString& s_typeValueString1;
- static const XalanDOMString& s_typeValueString2;
- static const XalanDOMString& s_typeValueString3;
- static const XalanDOMString& s_typeValueString4;
+ bool
+ generateCDATASection() const
+ {
+ if (m_hasCDATASectionElements == false)
+ {
+ return false;
+ }
+ else
+ {
+ assert(m_cdataStack.empty() == false);
+
+ return m_cdataStack.back();
+ }
+ }
+
+ void
+ doFlushPending()
+ {
+ setMustFlushPendingStartDocument(true);
+
+ flushPending();
+ }
+
+ /**
+ * Tell if a given element name should output its text
+ * as cdata.
+ *
+ * @param elementName name of element
+ * @return true if it should output as cdata
+ */
+ bool
+ isCDataResultElem(const XalanDOMString& elementName) const;
+
+ void
+ fireCharacterGenerateEvent(
+ const XalanNode& theNode,
+ bool isCDATA);
+
+ void
+ fireCharacterGenerateEvent(
+ const XObjectPtr& theXObject,
+ bool isCDATA);
+
+ void
+ fireCharacterGenerateEvent(
+ const XalanDOMString& theString,
+ bool isCDATA);
+
+ void
+ fireCharacterGenerateEvent(
+ const XalanDOMChar* ch,
+ XalanDOMString::size_type start,
+ XalanDOMString::size_type length,
+ bool isCDATA);
+
+ void
+ checkDefaultNamespace(
+ const XalanDOMString& theElementName,
+ const XalanDOMString& theElementNamespaceURI);
+
+
+
+ // Data members...
+ XMLParserLiaison& m_parserLiaison;
+
+ XPathEnvSupport& m_xpathEnvSupport;
+
+ DOMSupport& m_domSupport;
+
+ /**
+ * Current execution context...
+ */
+ StylesheetExecutionContext* m_executionContext;
+
+ /*
+ * Stack of current output contexts...
+ */
+ OutputContextStack m_outputContextStack;
+
+ /*
+ * Stack of current result namespaces...
+ */
+ XalanNamespacesStack m_resultNamespacesStack;
+
+ /*
+ * Dummy AttributeListImpl
+ */
+ AttributeListImpl m_dummyAttributesList;
+
+ XalanDOMString m_scratchString;
+
+ XalanDOMStringPointerVectorType m_attributeNamesVisited;
+
+ bool m_hasCDATASectionElements;
+
+ XPathConstructionContextDefault m_xpathConstructionContext;
+
+ ParamMapType m_stylesheetParams;
+
+ static void
+ installFunctions(MemoryManagerType& theManager);
+
+ static void
+ uninstallFunctions();
+
+
+ static const XalanDOMString s_emptyString;
+
+ static const XalanDOMString& s_stylesheetNodeName;
+ static const XalanDOMString& s_typeString;
+ static const XalanDOMString& s_hrefString;
+ static const XalanDOMString& s_piTokenizerString;
+ static const XalanDOMString& s_typeValueString1;
+ static const XalanDOMString& s_typeValueString2;
+ static const XalanDOMString& s_typeValueString3;
+ static const XalanDOMString& s_typeValueString4;
- // Not implemented...
+ // Not implemented...
XSLTEngineImpl(const XSLTEngineImpl&);
XSLTEngineImpl&
@@ -1685,4 +1693,4 @@
-#endif // XALAN_XSLTENGINEIMPL_HEADER_GUARD
+#endif // XALAN_XSLTENGINEIMPL_HEADER_GUARD
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org