From 2615896faa646e5830abf2c269150e1165c66515 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Fri, 18 Dec 2020 18:48:46 +0300 Subject: Switch to build2 --- libxsd/libxsd/cxx/xml/dom/parsing-source.hxx | 152 +++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 libxsd/libxsd/cxx/xml/dom/parsing-source.hxx (limited to 'libxsd/libxsd/cxx/xml/dom/parsing-source.hxx') 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 + +#include +#include +#include +#include +#include +#include + +#include + +#include // properies +#include +#include +#include // name +#include + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + // Parser state object. Can be used for parsing elements (and + // optionally text), attributes, or both. + // + template + 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 (next_content_); + } + + const xercesc::DOMText& + cur_text () + { + return *static_cast (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 (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 + XSD_DOM_AUTO_PTR + parse (xercesc::InputSource&, + error_handler&, + const properties&, + unsigned long flags); + + template + XSD_DOM_AUTO_PTR + parse (xercesc::InputSource&, + xercesc::DOMErrorHandler&, + const properties&, + unsigned long flags); + + template + XSD_DOM_AUTO_PTR + parse (const std::basic_string& uri, + error_handler&, + const properties&, + unsigned long flags); + + template + XSD_DOM_AUTO_PTR + parse (const std::basic_string& uri, + xercesc::DOMErrorHandler&, + const properties&, + unsigned long flags); + } + } + } +} + +#include + +#endif // LIBXSD_CXX_XML_DOM_PARSING_SOURCE_HXX -- cgit v1.1