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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]