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 2002/08/15 02:59:53 UTC

cvs commit: xml-xalan/c/src/XalanSourceTree XalanSourceTreeParserLiaison.cpp XalanSourceTreeParserLiaison.hpp

dbertoni    2002/08/14 17:59:53

  Modified:    c/src/XalanSourceTree XalanSourceTreeParserLiaison.cpp
                        XalanSourceTreeParserLiaison.hpp
  Log:
  New properties.
  
  Revision  Changes    Path
  1.30      +256 -120  xml-xalan/c/src/XalanSourceTree/XalanSourceTreeParserLiaison.cpp
  
  Index: XalanSourceTreeParserLiaison.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XalanSourceTree/XalanSourceTreeParserLiaison.cpp,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- XalanSourceTreeParserLiaison.cpp	10 Jul 2002 20:56:08 -0000	1.29
  +++ XalanSourceTreeParserLiaison.cpp	15 Aug 2002 00:59:53 -0000	1.30
  @@ -83,7 +83,7 @@
   
   
   // http://xml.org/sax/features/validation
  -const XalanDOMChar	XalanSourceTreeParserLiaison::validationString[] = {
  +const XalanDOMChar	XalanSourceTreeParserLiaison::s_validationString[] = {
   	XalanUnicode::charLetter_h,
   	XalanUnicode::charLetter_t,
   	XalanUnicode::charLetter_t,
  @@ -128,7 +128,7 @@
   
   
   // http://apache.org/xml/features/validation/dynamic
  -const XalanDOMChar	XalanSourceTreeParserLiaison::dynamicValidationString[] = {
  +const XalanDOMChar	XalanSourceTreeParserLiaison::s_dynamicValidationString[] = {
   	XalanUnicode::charLetter_h,
   	XalanUnicode::charLetter_t,
   	XalanUnicode::charLetter_t,
  @@ -184,7 +184,7 @@
   
   
   // http://xml.org/sax/features/namespaces
  -const XalanDOMChar	XalanSourceTreeParserLiaison::namespacesString[] = {
  +const XalanDOMChar	XalanSourceTreeParserLiaison::s_namespacesString[] = {
   	XalanUnicode::charLetter_h,
   	XalanUnicode::charLetter_t,
   	XalanUnicode::charLetter_t,
  @@ -229,7 +229,7 @@
   
   
   // http://xml.org/sax/features/namespace-prefixes
  -const XalanDOMChar	XalanSourceTreeParserLiaison::namespacePrefixesString[] = {
  +const XalanDOMChar	XalanSourceTreeParserLiaison::s_namespacePrefixesString[] = {
   	XalanUnicode::charLetter_h,
   	XalanUnicode::charLetter_t,
   	XalanUnicode::charLetter_t,
  @@ -281,7 +281,7 @@
   
   
   // http://apache.org/xml/features/validation/schema
  -const XalanDOMChar	XalanSourceTreeParserLiaison::schemaString[] =
  +const XalanDOMChar	XalanSourceTreeParserLiaison::s_schemaString[] =
   {
   	XalanUnicode::charLetter_h,
   	XalanUnicode::charLetter_t,
  @@ -336,12 +336,163 @@
   
   
   
  +// http://apache.org/xml/properties/schema/external-schemaLocation
  +const XalanDOMChar	XalanSourceTreeParserLiaison::s_externalSchemaLocationString[] =
  +{
  +	XalanUnicode::charLetter_h,
  +	XalanUnicode::charLetter_t,
  +	XalanUnicode::charLetter_t,
  +	XalanUnicode::charLetter_p,
  +	XalanUnicode::charColon,
  +	XalanUnicode::charSolidus,
  +	XalanUnicode::charSolidus,
  +	XalanUnicode::charLetter_a,
  +	XalanUnicode::charLetter_p,
  +	XalanUnicode::charLetter_a,
  +	XalanUnicode::charLetter_c,
  +	XalanUnicode::charLetter_h,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charFullStop,
  +	XalanUnicode::charLetter_o,
  +	XalanUnicode::charLetter_r,
  +	XalanUnicode::charLetter_g,
  +	XalanUnicode::charSolidus,
  +	XalanUnicode::charLetter_x,
  +	XalanUnicode::charLetter_m,
  +	XalanUnicode::charLetter_l,
  +	XalanUnicode::charSolidus,
  +	XalanUnicode::charLetter_p,
  +	XalanUnicode::charLetter_r,
  +	XalanUnicode::charLetter_o,
  +	XalanUnicode::charLetter_p,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charLetter_r,
  +	XalanUnicode::charLetter_t,
  +	XalanUnicode::charLetter_i,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charLetter_s,
  +	XalanUnicode::charSolidus,
  +	XalanUnicode::charLetter_s,
  +	XalanUnicode::charLetter_c,
  +	XalanUnicode::charLetter_h,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charLetter_m,
  +	XalanUnicode::charLetter_a,
  +	XalanUnicode::charSolidus,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charLetter_x,
  +	XalanUnicode::charLetter_t,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charLetter_r,
  +	XalanUnicode::charLetter_n,
  +	XalanUnicode::charLetter_a,
  +	XalanUnicode::charLetter_l,
  +	XalanUnicode::charHyphenMinus,
  +	XalanUnicode::charLetter_s,
  +	XalanUnicode::charLetter_c,
  +	XalanUnicode::charLetter_h,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charLetter_m,
  +	XalanUnicode::charLetter_a,
  +	XalanUnicode::charLetter_L,
  +	XalanUnicode::charLetter_o,
  +	XalanUnicode::charLetter_c,
  +	XalanUnicode::charLetter_a,
  +	XalanUnicode::charLetter_t,
  +	XalanUnicode::charLetter_i,
  +	XalanUnicode::charLetter_o,
  +	XalanUnicode::charLetter_n,
  +	0
  +};
  +
  +
  +
  +// http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation
  +const XalanDOMChar	XalanSourceTreeParserLiaison::s_externalNoNamespaceSchemaLocationString[] =
  +{
  +	XalanUnicode::charLetter_h,
  +	XalanUnicode::charLetter_t,
  +	XalanUnicode::charLetter_t,
  +	XalanUnicode::charLetter_p,
  +	XalanUnicode::charColon,
  +	XalanUnicode::charSolidus,
  +	XalanUnicode::charSolidus,
  +	XalanUnicode::charLetter_a,
  +	XalanUnicode::charLetter_p,
  +	XalanUnicode::charLetter_a,
  +	XalanUnicode::charLetter_c,
  +	XalanUnicode::charLetter_h,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charFullStop,
  +	XalanUnicode::charLetter_o,
  +	XalanUnicode::charLetter_r,
  +	XalanUnicode::charLetter_g,
  +	XalanUnicode::charSolidus,
  +	XalanUnicode::charLetter_x,
  +	XalanUnicode::charLetter_m,
  +	XalanUnicode::charLetter_l,
  +	XalanUnicode::charSolidus,
  +	XalanUnicode::charLetter_p,
  +	XalanUnicode::charLetter_r,
  +	XalanUnicode::charLetter_o,
  +	XalanUnicode::charLetter_p,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charLetter_r,
  +	XalanUnicode::charLetter_t,
  +	XalanUnicode::charLetter_i,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charLetter_s,
  +	XalanUnicode::charSolidus,
  +	XalanUnicode::charLetter_s,
  +	XalanUnicode::charLetter_c,
  +	XalanUnicode::charLetter_h,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charLetter_m,
  +	XalanUnicode::charLetter_a,
  +	XalanUnicode::charSolidus,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charLetter_x,
  +	XalanUnicode::charLetter_t,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charLetter_r,
  +	XalanUnicode::charLetter_n,
  +	XalanUnicode::charLetter_a,
  +	XalanUnicode::charLetter_l,
  +	XalanUnicode::charHyphenMinus,
  +	XalanUnicode::charLetter_n,
  +	XalanUnicode::charLetter_o,
  +	XalanUnicode::charLetter_N,
  +	XalanUnicode::charLetter_a,
  +	XalanUnicode::charLetter_m,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charLetter_s,
  +	XalanUnicode::charLetter_p,
  +	XalanUnicode::charLetter_a,
  +	XalanUnicode::charLetter_c,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charLetter_S,
  +	XalanUnicode::charLetter_c,
  +	XalanUnicode::charLetter_h,
  +	XalanUnicode::charLetter_e,
  +	XalanUnicode::charLetter_m,
  +	XalanUnicode::charLetter_a,
  +	XalanUnicode::charLetter_L,
  +	XalanUnicode::charLetter_o,
  +	XalanUnicode::charLetter_c,
  +	XalanUnicode::charLetter_a,
  +	XalanUnicode::charLetter_t,
  +	XalanUnicode::charLetter_i,
  +	XalanUnicode::charLetter_o,
  +	XalanUnicode::charLetter_n,
  +	0
  +};
  +
  +
   
   XalanSourceTreeParserLiaison::XalanSourceTreeParserLiaison(
   			XalanSourceTreeDOMSupport&	/* theSupport */) :
   	m_xercesParserLiaison(),
   	m_documentMap(),
  -	m_persistentDocumentMap(),
   	m_poolAllText(true)
   {
   }
  @@ -351,7 +502,6 @@
   XalanSourceTreeParserLiaison::XalanSourceTreeParserLiaison() :
   	m_xercesParserLiaison(),
   	m_documentMap(),
  -	m_persistentDocumentMap(),
   	m_poolAllText(true)
   {
   }
  @@ -365,13 +515,6 @@
   #if !defined(XALAN_NO_NAMESPACES)
   	using std::for_each;
   #endif
  -
  -	// Delete any persistent documents.
  -	for_each(m_persistentDocumentMap.begin(),
  -			 m_persistentDocumentMap.end(),
  -			 makeMapValueDeleteFunctor(m_persistentDocumentMap));
  -
  -	m_persistentDocumentMap.clear();
   }
   
   
  @@ -429,58 +572,14 @@
   {
   	XalanSourceTreeContentHandler	theContentHandler(createXalanSourceTreeDocument());
   
  -	XalanAutoPtr<SAX2XMLReader>		theReader(XMLReaderFactory::createXMLReader());
  -
  -	const bool	fValidate = m_xercesParserLiaison.getUseValidation();
  -
  -	if (fValidate == false)
  -	{
  -		theReader->setFeature(
  -			validationString,
  -			false);
  -
  -		theReader->setFeature(
  -			schemaString,
  -			false);
  -	}
  -	else
  -	{
  -		theReader->setFeature(
  -			dynamicValidationString,
  -			true);
  -
  -		theReader->setFeature(
  -			schemaString,
  -			true);
  -	}
  -
  -	theReader->setFeature(
  -		namespacesString,
  -		true);
  -
  -	theReader->setFeature(
  -		namespacePrefixesString,
  -		true);
  +	XalanAutoPtr<SAX2XMLReader>		theReader(createReader());
   
   	theReader->setContentHandler(&theContentHandler);
   
   	theReader->setDTDHandler(&theContentHandler);
   
  -	ErrorHandler* const		theHandler = getErrorHandler();
  -
  -	if (theHandler == 0)
  -	{
  -		theReader->setErrorHandler(&m_xercesParserLiaison);
  -	}
  -	else
  -	{
  -		theReader->setErrorHandler(theHandler);
  -	}
  -
   	theReader->setLexicalHandler(&theContentHandler);
   
  -	theReader->setEntityResolver(getEntityResolver());
  -
   	theReader->parse(inputSource);
   
   	return theContentHandler.getDocument();
  @@ -569,36 +668,14 @@
   			LexicalHandler*			theLexicalHandler,
   			const XalanDOMString&	/* theIdentifier */)
   {
  -	XalanAutoPtr<SAX2XMLReader>		theReader(XMLReaderFactory::createXMLReader());
  -
  -	theReader->setFeature(
  -		validationString,
  -		m_xercesParserLiaison.getUseValidation());
  +	XalanAutoPtr<SAX2XMLReader>		theReader(createReader());
   
   	theReader->setContentHandler(&theContentHandler);
   
   	theReader->setDTDHandler(theDTDHandler);
   
  -	ErrorHandler* const		theHandler = getErrorHandler();
  -
  -	if (theHandler == 0)
  -	{
  -		theReader->setErrorHandler(&m_xercesParserLiaison);
  -	}
  -	else
  -	{
  -		theReader->setErrorHandler(theHandler);
  -	}
  -
   	theReader->setLexicalHandler(theLexicalHandler);
   
  -	EntityResolver* const	theResolver = getEntityResolver();
  -
  -	if (theResolver != 0)
  -	{
  -		theReader->setEntityResolver(theResolver);
  -	}
  -
   	theReader->parse(theInputSource);
   }
   
  @@ -684,29 +761,45 @@
   
   
   
  +const XalanDOMChar*
  +XalanSourceTreeParserLiaison::getExternalSchemaLocation() const
  +{
  +	return m_xercesParserLiaison.getExternalSchemaLocation();
  +}
  +
  +
  +
  +void
  +XalanSourceTreeParserLiaison::setExternalSchemaLocation(const XalanDOMChar*		location)
  +{
  +	m_xercesParserLiaison.setExternalSchemaLocation(location);
  +}
  +
  +
  +
  +const XalanDOMChar*
  +XalanSourceTreeParserLiaison::getExternalNoNamespaceSchemaLocation() const
  +{
  +	return m_xercesParserLiaison.getExternalNoNamespaceSchemaLocation();
  +}
  +
  +
  +
  +void
  +XalanSourceTreeParserLiaison::setExternalNoNamespaceSchemaLocation(const XalanDOMChar*	location)
  +{
  +	m_xercesParserLiaison.setExternalNoNamespaceSchemaLocation(location);
  +}
  +
  +
  +
   XalanSourceTreeDocument*
   XalanSourceTreeParserLiaison::mapDocument(const XalanDocument*	theDocument) const
   {
   	DocumentMapType::const_iterator		i =
   		m_documentMap.find(theDocument);
   
  -	if (i != m_documentMap.end())
  -	{
  -		return (*i).second;
  -	}
  -	else
  -	{
  -		i =	m_persistentDocumentMap.find(theDocument);
  -
  -		if (i != m_persistentDocumentMap.end())
  -		{
  -			return (*i).second;
  -		}
  -		else
  -		{
  -			return 0;
  -		}
  -	}
  +	return i != m_documentMap.end() ? (*i).second : 0;
   }
   
   
  @@ -724,43 +817,86 @@
   
   
   
  -bool
  -XalanSourceTreeParserLiaison::setPersistent(XalanSourceTreeDocument*	theDocument)
  +SAX2XMLReader*
  +XalanSourceTreeParserLiaison::createReader()
   {
  -	const DocumentMapType::iterator		i =
  -		m_documentMap.find(theDocument);
  +	XalanAutoPtr<SAX2XMLReader>		theReader(XMLReaderFactory::createXMLReader());
  +
  +	const bool	fValidate = m_xercesParserLiaison.getUseValidation();
   
  -	if (i != m_documentMap.end())
  +	if (fValidate == false)
   	{
  -		return false;
  +		theReader->setFeature(
  +			s_validationString,
  +			false);
  +
  +		theReader->setFeature(
  +			s_schemaString,
  +			false);
   	}
   	else
   	{
  -		m_persistentDocumentMap[(*i).first] = (*i).second;
  -
  -		m_documentMap.erase(i);
  +		theReader->setFeature(
  +			s_dynamicValidationString,
  +			true);
   
  -		return true;
  +		theReader->setFeature(
  +			s_schemaString,
  +			true);
   	}
  -}
   
  +	theReader->setFeature(
  +		s_namespacesString,
  +		true);
   
  -bool
  -XalanSourceTreeParserLiaison::unsetPersistent(XalanSourceTreeDocument*	theDocument)
  -{
  -	const DocumentMapType::iterator		i =
  -		m_persistentDocumentMap.find(theDocument);
  +	theReader->setFeature(
  +		s_namespacePrefixesString,
  +		true);
  +
  +	ErrorHandler* const		theHandler = getErrorHandler();
   
  -	if (i != m_persistentDocumentMap.end())
  +	if (theHandler == 0)
   	{
  -		return false;
  +		theReader->setErrorHandler(&m_xercesParserLiaison);
   	}
   	else
   	{
  -		m_documentMap[(*i).first] = (*i).second;
  +		theReader->setErrorHandler(theHandler);
  +	}
   
  -		m_persistentDocumentMap.erase(i);
  +	theReader->setEntityResolver(getEntityResolver());
   
  -		return true;
  +	{
  +		const XalanDOMChar* const	theLocation =
  +			getExternalSchemaLocation();
  +
  +		if (theLocation != 0)
  +		{
  +			theReader->setProperty(
  +				s_externalSchemaLocationString,
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +				(void*)theLocation);
  +#else
  +				const_cast<XalanDOMChar*>(theLocation));
  +#endif
  +		}
   	}
  +
  +	{
  +		const XalanDOMChar* const	theLocation =
  +			getExternalNoNamespaceSchemaLocation();
  +
  +		if (theLocation != 0)
  +		{
  +			theReader->setProperty(
  +				s_externalNoNamespaceSchemaLocationString,
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +				(void*)theLocation);
  +#else
  +				const_cast<XalanDOMChar*>(theLocation));
  +#endif
  +		}
  +	}
  +
  +	return theReader.release();
   }
  
  
  
  1.20      +51 -13    xml-xalan/c/src/XalanSourceTree/XalanSourceTreeParserLiaison.hpp
  
  Index: XalanSourceTreeParserLiaison.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XalanSourceTree/XalanSourceTreeParserLiaison.hpp,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- XalanSourceTreeParserLiaison.hpp	10 Jul 2002 20:56:08 -0000	1.19
  +++ XalanSourceTreeParserLiaison.hpp	15 Aug 2002 00:59:53 -0000	1.20
  @@ -76,6 +76,7 @@
   class ContentHandler;
   class DTDHandler;
   class LexicalHandler;
  +class SAX2XMLReader;
   class XalanSourceTreeDOMSupport;
   class XalanSourceTreeDocument;
   
  @@ -315,6 +316,42 @@
   	virtual void
   	setExitOnFirstFatalError(bool	newState);
   
  +	/**
  +	  * This method returns the location for an external schema document
  +	  * for parsing.
  +	  *
  +	  * @return A string representing the location of the external schema document
  +	  */
  +	virtual const XalanDOMChar*
  +	getExternalSchemaLocation() const;
  +
  +	/**
  +	  * This method sets the location for an external schema document
  +	  * for parsing.
  +	  *
  +	  * @param location A string representing the location of the external schema document
  +	  */
  +	virtual void
  +	setExternalSchemaLocation(const XalanDOMChar*	location);
  +
  +	/**
  +	  * This method returns the location for an external schema document
  +	  * for parsing.
  +	  *
  +	  * @return A string representing the location of the external schema document
  +	  */
  +	virtual const XalanDOMChar*
  +	getExternalNoNamespaceSchemaLocation() const;
  +
  +	/**
  +	  * This method sets the location for an external schema document
  +	  * for parsing.
  +	  *
  +	  * @param location A string representing the location of the external schema document
  +	  */
  +	virtual void
  +	setExternalNoNamespaceSchemaLocation(const XalanDOMChar*	location);
  +
   	/** 
   	 * Map a pointer to a XalanDocument instance to its implementation
   	 * class pointer.  Normally, you should have no reason for doing
  @@ -335,12 +372,6 @@
   	XalanSourceTreeDocument*
   	createXalanSourceTreeDocument();
   
  -	bool
  -	setPersistent(XalanSourceTreeDocument*	theDocument);
  -
  -	bool
  -	unsetPersistent(XalanSourceTreeDocument*	theDocument);
  -
   #if defined(XALAN_NO_NAMESPACES)
   	typedef map<const XalanDocument*,
   				XalanSourceTreeDocument*,
  @@ -350,6 +381,11 @@
   					 XalanSourceTreeDocument*>	DocumentMapType;
   #endif
   
  +protected:
  +
  +	virtual SAX2XMLReader*
  +	createReader();
  +
   private:
   
   	// Not implemented...
  @@ -364,19 +400,21 @@
   
   	DocumentMapType 			m_documentMap;
   
  -	DocumentMapType 			m_persistentDocumentMap;
  -
   	bool						m_poolAllText;
   
  -	static const XalanDOMChar	validationString[];
  +	static const XalanDOMChar	s_validationString[];
  +
  +	static const XalanDOMChar	s_dynamicValidationString[];
  +
  +	static const XalanDOMChar	s_namespacesString[];
   
  -	static const XalanDOMChar	dynamicValidationString[];
  +	static const XalanDOMChar	s_namespacePrefixesString[];
   
  -	static const XalanDOMChar	namespacesString[];
  +	static const XalanDOMChar	s_schemaString[];
   
  -	static const XalanDOMChar	namespacePrefixesString[];
  +	static const XalanDOMChar	s_externalSchemaLocationString[];
   
  -	static const XalanDOMChar	schemaString[];
  +	static const XalanDOMChar	s_externalNoNamespaceSchemaLocationString[];
   };
   
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org