summaryrefslogtreecommitdiff
path: root/libxsd/libxsd/cxx/xml/dom/parsing-source.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'libxsd/libxsd/cxx/xml/dom/parsing-source.hxx')
-rw-r--r--libxsd/libxsd/cxx/xml/dom/parsing-source.hxx152
1 files changed, 152 insertions, 0 deletions
diff --git a/libxsd/libxsd/cxx/xml/dom/parsing-source.hxx b/libxsd/libxsd/cxx/xml/dom/parsing-source.hxx
new file mode 100644
index 0000000..9016014
--- /dev/null
+++ b/libxsd/libxsd/cxx/xml/dom/parsing-source.hxx
@@ -0,0 +1,152 @@
+// file : libxsd/cxx/xml/dom/parsing-source.hxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef LIBXSD_CXX_XML_DOM_PARSING_SOURCE_HXX
+#define LIBXSD_CXX_XML_DOM_PARSING_SOURCE_HXX
+
+#include <string>
+
+#include <xercesc/dom/DOMNode.hpp>
+#include <xercesc/dom/DOMAttr.hpp>
+#include <xercesc/dom/DOMElement.hpp>
+#include <xercesc/dom/DOMDocument.hpp>
+#include <xercesc/dom/DOMNamedNodeMap.hpp>
+#include <xercesc/dom/DOMErrorHandler.hpp>
+
+#include <xercesc/sax/InputSource.hpp>
+
+#include <libxsd/cxx/xml/elements.hxx> // properies
+#include <libxsd/cxx/xml/error-handler.hxx>
+#include <libxsd/cxx/xml/dom/auto-ptr.hxx>
+#include <libxsd/cxx/xml/dom/elements.hxx> // name
+#include <libxsd/cxx/xml/dom/parsing-header.hxx>
+
+namespace xsd
+{
+ namespace cxx
+ {
+ namespace xml
+ {
+ namespace dom
+ {
+ // Parser state object. Can be used for parsing elements (and
+ // optionally text), attributes, or both.
+ //
+ template <typename C>
+ class parser
+ {
+ public:
+ parser (const xercesc::DOMElement& e, bool ep, bool tp, bool ap);
+
+ // Content parsing.
+ //
+ bool
+ more_content ()
+ {
+ return next_content_ != 0;
+ }
+
+ const xercesc::DOMElement&
+ cur_element ()
+ {
+ return *static_cast<const xercesc::DOMElement*> (next_content_);
+ }
+
+ const xercesc::DOMText&
+ cur_text ()
+ {
+ return *static_cast<const xercesc::DOMText*> (next_content_);
+ }
+
+ bool
+ cur_is_text ()
+ {
+ return next_content_->getNodeType () !=
+ xercesc::DOMNode::ELEMENT_NODE;
+ }
+
+ void
+ next_content (bool text);
+
+ // Attribute parsing.
+ //
+ bool
+ more_attributes ()
+ {
+ return as_ > ai_;
+ }
+
+ const xercesc::DOMAttr&
+ next_attribute ()
+ {
+ return *static_cast<const xercesc::DOMAttr*> (a_->item (ai_++));
+ }
+
+ void
+ reset_attributes ()
+ {
+ ai_ = 0;
+ }
+
+ const xercesc::DOMElement&
+ element () const
+ {
+ return element_;
+ }
+
+ private:
+ parser (const parser&);
+
+ parser&
+ operator= (const parser&);
+
+ private:
+ const xercesc::DOMElement& element_;
+ const xercesc::DOMNode* next_content_;
+
+ const xercesc::DOMNamedNodeMap* a_;
+ XMLSize_t ai_; // Index of the next DOMAttr.
+ XMLSize_t as_; // Cached size of a_.
+ };
+
+
+ // Parsing flags.
+ //
+ const unsigned long dont_validate = 0x00000400UL;
+ const unsigned long no_muliple_imports = 0x00000800UL;
+
+ template <typename C>
+ XSD_DOM_AUTO_PTR<xercesc::DOMDocument>
+ parse (xercesc::InputSource&,
+ error_handler<C>&,
+ const properties<C>&,
+ unsigned long flags);
+
+ template <typename C>
+ XSD_DOM_AUTO_PTR<xercesc::DOMDocument>
+ parse (xercesc::InputSource&,
+ xercesc::DOMErrorHandler&,
+ const properties<C>&,
+ unsigned long flags);
+
+ template <typename C>
+ XSD_DOM_AUTO_PTR<xercesc::DOMDocument>
+ parse (const std::basic_string<C>& uri,
+ error_handler<C>&,
+ const properties<C>&,
+ unsigned long flags);
+
+ template <typename C>
+ XSD_DOM_AUTO_PTR<xercesc::DOMDocument>
+ parse (const std::basic_string<C>& uri,
+ xercesc::DOMErrorHandler&,
+ const properties<C>&,
+ unsigned long flags);
+ }
+ }
+ }
+}
+
+#include <libxsd/cxx/xml/dom/parsing-source.txx>
+
+#endif // LIBXSD_CXX_XML_DOM_PARSING_SOURCE_HXX