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