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;
   };