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...@locus.apache.org on 2000/04/11 16:38:43 UTC
cvs commit: xml-xalan/c/src/XercesParserLiaison XercesParserLiaison.cpp XercesParserLiaison.hpp
dbertoni 00/04/11 07:38:42
Modified: c/src/XercesParserLiaison XercesParserLiaison.cpp
XercesParserLiaison.hpp
Log:
Changes for new Xalan DOM.
Revision Changes Path
1.7 +70 -40 xml-xalan/c/src/XercesParserLiaison/XercesParserLiaison.cpp
Index: XercesParserLiaison.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XercesParserLiaison/XercesParserLiaison.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- XercesParserLiaison.cpp 2000/02/17 20:27:55 1.6
+++ XercesParserLiaison.cpp 2000/04/11 14:38:42 1.7
@@ -59,26 +59,38 @@
+#include <algorithm>
#include <memory>
#include <iostream>
+
+#include <framework/URLInputSource.hpp>
#include <parsers/DOMParser.hpp>
#include <parsers/SAXParser.hpp>
-#include <framework/URLInputSource.hpp>
-
#include <sax/SAXParseException.hpp>
+
+#include <PlatformSupport/STLHelper.hpp>
+
+
+
+#include "XercesDocumentBridge.hpp"
+
+
+
+static const XalanDOMString theParserName(XALAN_STATIC_UCODE_STRING("Xerces"));
+
-const char* const theParserName = "Xerces";
XercesParserLiaison::XercesParserLiaison(
DOMSupport& theSupport,
bool fUseValidatingParser) :
XMLParserLiaisonDefault(theSupport,
theParserName),
- m_fUseValidatingParser(fUseValidatingParser)
+ m_fUseValidatingParser(fUseValidatingParser),
+ m_documentMap()
{
}
@@ -86,10 +98,28 @@
XercesParserLiaison::~XercesParserLiaison()
{
+ reset();
}
+void
+XercesParserLiaison::reset()
+{
+#if !defined(XALAN_NO_NAMESPACES)
+ using std::for_each;
+#endif
+
+ // Delete any live documents.
+ for_each(m_documentMap.begin(),
+ m_documentMap.end(),
+ makeMapValueDeleteFunctor(m_documentMap));
+
+ m_documentMap.clear();
+}
+
+
+
bool
XercesParserLiaison::supportsSAX() const
{
@@ -120,26 +150,11 @@
-DOM_Document
-XercesParserLiaison::parseXMLStream(
- InputSource& reader,
- const DOMString& /* identifier */)
-{
- std::auto_ptr<DOMParser> theParser(CreateDOMParser(m_fUseValidatingParser));
-
- theParser->setErrorHandler(this);
- theParser->parse(reader);
-
- return theParser->getDocument();
-}
-
-
-
void
XercesParserLiaison::parseXMLStream(
- InputSource& urlInputSource,
- DocumentHandler& handler,
- const DOMString& /* identifier */)
+ InputSource& urlInputSource,
+ DocumentHandler& handler,
+ const XalanDOMString& /* identifier */)
{
std::auto_ptr<SAXParser> theParser(CreateSAXParser(m_fUseValidatingParser));
@@ -151,41 +166,56 @@
-DOM_Document
+XalanDocument*
XercesParserLiaison::parseXMLStream(
- URLInputSource& urlInputSource,
- const DOMString& /* identifier */)
+ InputSource& reader,
+ const XalanDOMString& /* identifier */)
{
std::auto_ptr<DOMParser> theParser(CreateDOMParser(m_fUseValidatingParser));
theParser->setErrorHandler(this);
- theParser->parse(urlInputSource);
+ theParser->parse(reader);
+
+ const DOM_Document theXercesDocument =
+ theParser->getDocument();
+
+ XercesDocumentBridge* theNewDocument = 0;
+
+ if (theXercesDocument.isNull() == false)
+ {
+ theNewDocument = new XercesDocumentBridge(theXercesDocument);
+
+ m_documentMap[theNewDocument] = theNewDocument;
+ }
- return theParser->getDocument();
+ return theNewDocument;
}
-void
-XercesParserLiaison::parseXMLStream(
- URLInputSource& urlInputSource,
- DocumentHandler& handler,
- const DOMString& /* identifier */)
+XalanDocument*
+XercesParserLiaison::createDocument()
{
- std::auto_ptr<SAXParser> theParser(CreateSAXParser(m_fUseValidatingParser));
-
- theParser->setErrorHandler(this);
- theParser->setDocumentHandler(&handler);
+ const DOM_Document theXercesDocument =
+ DOM_Document::createDocument();
- theParser->parse(urlInputSource);
+ XercesDocumentBridge* const theNewDocument =
+ new XercesDocumentBridge(theXercesDocument);
+
+ m_documentMap[theNewDocument] = theNewDocument;
+
+ return theNewDocument;
}
-DOM_Document
-XercesParserLiaison::createDocument()
+XercesDocumentBridge*
+XercesParserLiaison::mapXalanDocument(const XalanDocument* theDocument) const
{
- return DOM_Document::createDocument();
+ const DocumentMapType::const_iterator i =
+ m_documentMap.find(theDocument);
+
+ return i != m_documentMap.end() ? i->second : 0;
}
1.6 +24 -28 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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XercesParserLiaison.hpp 2000/03/06 17:17:55 1.5
+++ XercesParserLiaison.hpp 2000/04/11 14:38:42 1.6
@@ -64,18 +64,11 @@
// Standard Library header files.
-#include <string>
-#include <memory>
+#include <map>
// Xerces DOM header files
-#include <dom/DOM_Attr.hpp>
-#include <dom/DOM_Element.hpp>
-#include <dom/DOM_Node.hpp>
-#include <dom/DOM_Document.hpp>
-#include <dom/DOMString.hpp>
-
#include <sax/ErrorHandler.hpp>
@@ -86,7 +79,7 @@
class DOMSupport;
class InputSource;
-class URLInputSource;
+class XercesDocumentBridge;
class XSLProcessor;
@@ -110,34 +103,29 @@
// These interfaces are inherited from XMLParserLiaison...
+ virtual void
+ reset();
+
virtual bool
supportsSAX() const;
- virtual DOM_Document
+ virtual XalanDocument*
parseXMLStream(
- InputSource& reader,
- const DOMString& identifier = DOMString());
+ InputSource& reader,
+ const XalanDOMString& identifier = XalanDOMString());
- virtual DOM_Document
- parseXMLStream(
- URLInputSource& reader,
- const DOMString& identifier = DOMString());
-
virtual void
parseXMLStream(
- InputSource& urlInputSource,
- DocumentHandler& handler,
- const DOMString& identifier = DOMString());
+ InputSource& urlInputSource,
+ DocumentHandler& handler,
+ const XalanDOMString& identifier = XalanDOMString());
- virtual void
- parseXMLStream(
- URLInputSource& urlInputSource,
- DocumentHandler& handler,
- const DOMString& identifier = DOMString());
-
- virtual DOM_Document
+ virtual XalanDocument*
createDocument();
+ XercesDocumentBridge*
+ mapXalanDocument(const XalanDocument* theDocument) const;
+
// Implementations for SAX ErrorHandler
virtual void
@@ -153,8 +141,16 @@
resetErrors();
private:
+
+#if defined(XALAN_NO_NAMESPACES)
+ typedef map<const XalanDocument*, XercesDocumentBridge*> DocumentMapType;
+#else
+ typedef std::map<const XalanDocument*, XercesDocumentBridge*> DocumentMapType;
+#endif
+
+ const bool m_fUseValidatingParser;
- const bool m_fUseValidatingParser;
+ DocumentMapType m_documentMap;
};