You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ga...@apache.org on 2003/08/20 22:49:31 UTC
cvs commit: xml-xerces/c/src/xercesc/util XMLUni.cpp XMLUni.hpp
gareth 2003/08/20 13:49:31
Modified: c/doc program-dom.xml
c/src/xercesc/parsers AbstractDOMParser.cpp
AbstractDOMParser.hpp DOMBuilderImpl.cpp
c/src/xercesc/util XMLUni.cpp XMLUni.hpp
Log:
Added a method for use in XercesDOMParser (and others derived from AbstractDOMParser) and a feature in DOMBuilder that allows the creation of the document during parse to be from an DOMImplementation other than the default. Updated documentation.
Revision Changes Path
1.36 +21 -0 xml-xerces/c/doc/program-dom.xml
Index: program-dom.xml
===================================================================
RCS file: /home/cvs/xml-xerces/c/doc/program-dom.xml,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- program-dom.xml 14 May 2003 17:11:55 -0000 1.35
+++ program-dom.xml 20 Aug 2003 20:49:30 -0000 1.36
@@ -624,6 +624,18 @@
for more programming details. </td></tr>
</table>
+
+ <p/>
+ <table>
+ <tr><th colspan="2"><em>void useImplementation(const XMLCh* const)</em></th></tr>
+ <tr><th><em>Description</em></th><td>This property allows the user to specify a set of features
+ which the parser will then use to acquire an implementation from which it will create
+ the DOMDocument to use when reading in an XML file.
+ <tr><th><em>Value Type</em></th><td> XMLCh* </td></tr>
+ </table>
+
+ <p/>
+
<p/>
<table>
<tr><th
@@ -1268,6 +1280,15 @@
<tr><th><em>Value Type</em></th><td> XMLCh* </td></tr>
<tr><th><em>note: </em></th><td> See <jump href="program-others.html#UseSpecificScanner">Use Specific Scanner</jump>
for more programming details. </td></tr>
+ </table>
+ <p/>
+ <table>
+ <tr><th colspan="2"><em>http://apache.org/xml/properties/parser-use-DOMDocument-from-Implemenation</em></th></tr>
+ <tr><th><em>Description</em></th><td>This property allows the user to specify a set of features
+ which the parser will then use to acquire an implementation from which it will create
+ the DOMDocument to use when reading in an XML file.
+ <tr><th><em>Value Type</em></th><td> XMLCh* </td></tr>
+
</table>
<p/>
<table>
1.48 +10 -3 xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.cpp
Index: AbstractDOMParser.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.cpp,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -r1.47 -r1.48
--- AbstractDOMParser.cpp 13 Aug 2003 22:46:20 -0000 1.47
+++ AbstractDOMParser.cpp 20 Aug 2003 20:49:30 -0000 1.48
@@ -77,6 +77,7 @@
#include <xercesc/framework/XMLValidator.hpp>
#include <xercesc/util/IOException.hpp>
#include <xercesc/dom/DOMImplementation.hpp>
+#include <xercesc/dom/DOMImplementationRegistry.hpp>
#include <xercesc/dom/DOMElement.hpp>
#include <xercesc/dom/impl/DOMAttrImpl.hpp>
#include <xercesc/dom/DOMCDATASection.hpp>
@@ -113,6 +114,7 @@
, fCreateCommentNodes(true)
, fDocumentAdoptedByUser(false)
, fScanner(0)
+, fImplementationFeatures(0)
, fCurrentParent(0)
, fCurrentNode(0)
, fCurrentEntity(0)
@@ -178,6 +180,8 @@
delete fGrammarResolver;
delete fURIStringPool;
+ delete[] fImplementationFeatures;
+
if (fValidator)
delete fValidator;
}
@@ -198,7 +202,6 @@
fDocument = 0;
resetDocType();
-
fCurrentParent = 0;
fCurrentNode = 0;
fCurrentEntity = 0;
@@ -753,7 +756,11 @@
void AbstractDOMParser::startDocument()
{
- fDocument = (DOMDocumentImpl *)DOMImplementation::getImplementation()->createDocument(fMemoryManager);
+ if(fImplementationFeatures == 0)
+ fDocument = (DOMDocumentImpl *)DOMImplementation::getImplementation()->createDocument(fMemoryManager);
+ else
+ fDocument = (DOMDocumentImpl *)DOMImplementationRegistry::getDOMImplementation(fImplementationFeatures)->createDocument(fMemoryManager);
+
// Just set the document as the current parent and current node
fCurrentParent = fDocument;
fCurrentNode = fDocument;
1.21 +22 -3 xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.hpp
Index: AbstractDOMParser.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.hpp,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- AbstractDOMParser.hpp 20 Jun 2003 18:55:54 -0000 1.20
+++ AbstractDOMParser.hpp 20 Aug 2003 20:49:30 -0000 1.21
@@ -72,7 +72,6 @@
#include <xercesc/validators/DTD/DTDElementDecl.hpp>
#include <xercesc/framework/XMLBufferMgr.hpp>
-
XERCES_CPP_NAMESPACE_BEGIN
class XMLPScanToken;
@@ -700,13 +699,22 @@
/** Set the scanner to use when scanning the XML document
*
- * This method allows users to set the the scanner to use
+ * This method allows users to set the scanner to use
* when scanning a given XML document.
*
* @param scannerName The name of the desired scanner
*/
void useScanner(const XMLCh* const scannerName);
+ /** Set the implementation to use when creating the document
+ *
+ * This method allows users to set the implementation to use
+ * to create the document when parseing.
+ *
+ * @param implementationFeatures The names of the desired features the implementation should have.
+ */
+ void useImplementation(const XMLCh* const implementationFeatures);
+
//@}
@@ -1442,6 +1450,11 @@
// The scanner used for this parser. This is created during the
// constructor.
//
+ // fImplementationFeatures
+ // The implementation features that we use to get an implementation
+ // for use in creating the DOMDocument used during parse. If this is
+ // null then the default DOMImplementation is used
+ //
// fNodeStack
// Used to track previous parent nodes during nested element events.
//
@@ -1486,6 +1499,7 @@
bool fCreateCommentNodes;
bool fDocumentAdoptedByUser;
XMLScanner* fScanner;
+ XMLCh* fImplementationFeatures;
DOMNode* fCurrentParent;
DOMNode* fCurrentNode;
DOMEntity* fCurrentEntity;
@@ -1564,6 +1578,11 @@
fCreateCommentNodes = create;
}
+inline void AbstractDOMParser::useImplementation(const XMLCh* const implementationFeatures)
+{
+ delete[] fImplementationFeatures;
+ fImplementationFeatures = XMLString::replicate(implementationFeatures);
+}
// ---------------------------------------------------------------------------
// AbstractDOMParser: Protected getter methods
1.29 +6 -1 xml-xerces/c/src/xercesc/parsers/DOMBuilderImpl.cpp
Index: DOMBuilderImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/DOMBuilderImpl.cpp,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- DOMBuilderImpl.cpp 19 Aug 2003 14:15:18 -0000 1.28
+++ DOMBuilderImpl.cpp 20 Aug 2003 20:49:31 -0000 1.29
@@ -402,6 +402,11 @@
{
AbstractDOMParser::useScanner((const XMLCh*) value);
}
+ else if (XMLString::equals(name, XMLUni::fgXercesParserUseDocumentFromImplementation))
+ {
+ useImplementation((const XMLCh*) value);
+ }
+
else
throw DOMException(DOMException::NOT_FOUND_ERR, 0);
}
1.32 +20 -1 xml-xerces/c/src/xercesc/util/XMLUni.cpp
Index: XMLUni.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLUni.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- XMLUni.cpp 20 Aug 2003 13:41:47 -0000 1.31
+++ XMLUni.cpp 20 Aug 2003 20:49:31 -0000 1.32
@@ -1129,6 +1129,25 @@
, chLatin_m, chLatin_e, chNull
};
+//Property
+//Xerces: http://apache.org/xml/properties/parser-use-DOMDocument-from-Implemenation
+const XMLCh XMLUni::fgXercesParserUseDocumentFromImplementation[] =
+{
+ chLatin_h, chLatin_t, chLatin_t, chLatin_p, chColon, chForwardSlash
+ , chForwardSlash, chLatin_a, chLatin_p, chLatin_a, chLatin_c, chLatin_h
+ , chLatin_e, chPeriod, chLatin_o, chLatin_r, chLatin_g, chForwardSlash
+ , chLatin_x, chLatin_m, chLatin_l, chForwardSlash, chLatin_p, chLatin_r
+ , chLatin_o, chLatin_p, chLatin_e, chLatin_r, chLatin_t, chLatin_i
+ , chLatin_e, chLatin_s, chForwardSlash, chLatin_f, chLatin_g, chLatin_X
+ , chLatin_e, chLatin_r, chLatin_c, chLatin_e, chLatin_s, chLatin_P, chLatin_a
+ , chLatin_r, chLatin_s, chLatin_e, chLatin_r, chLatin_U, chLatin_s, chLatin_e
+ , chLatin_D, chLatin_o, chLatin_c, chLatin_u, chLatin_m, chLatin_e, chLatin_n
+ , chLatin_t, chLatin_F, chLatin_r, chLatin_o, chLatin_m, chLatin_I, chLatin_m
+ , chLatin_p, chLatin_l, chLatin_e, chLatin_m, chLatin_e, chLatin_n, chLatin_t
+ , chLatin_a, chLatin_t, chLatin_i, chLatin_o, chLatin_n, chNull
+};
+
+
//Xerces: http://apache.org/xml/features/dom/user-adopts-DOMDocument
const XMLCh XMLUni::fgXercesUserAdoptsDOMDocument[] =
{
1.28 +2 -1 xml-xerces/c/src/xercesc/util/XMLUni.hpp
Index: XMLUni.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLUni.hpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- XMLUni.hpp 17 Apr 2003 21:58:50 -0000 1.27
+++ XMLUni.hpp 20 Aug 2003 20:49:31 -0000 1.28
@@ -250,6 +250,7 @@
static const XMLCh fgXercesCacheGrammarFromParse[];
static const XMLCh fgXercesUseCachedGrammarInParse[];
static const XMLCh fgXercesScannerName[];
+ static const XMLCh fgXercesParserUseDocumentFromImplementation[];
static const XMLCh fgXercesCalculateSrcOfs[];
static const XMLCh fgXercesStandardUriConformant[];
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org