diff options
Diffstat (limited to 'libxsd/xsd/cxx/parser')
45 files changed, 0 insertions, 19746 deletions
diff --git a/libxsd/xsd/cxx/parser/document.hxx b/libxsd/xsd/cxx/parser/document.hxx deleted file mode 100644 index 7c136c0..0000000 --- a/libxsd/xsd/cxx/parser/document.hxx +++ /dev/null @@ -1,88 +0,0 @@ -// file : xsd/cxx/parser/document.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_DOCUMENT_HXX -#define XSD_CXX_PARSER_DOCUMENT_HXX - -#include <string> -#include <cstddef> // std::size_t - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/parser/elements.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // If you want to use a different underlying XML parser, all you - // need to do is to route events to this interface. - // - template <typename C> - class document - { - public: - virtual - ~document (); - - document (parser_base<C>& root, - const std::basic_string<C>& ns, - const std::basic_string<C>& name); - - public: - // The type argument is a type name and namespace from the - // xsi:type attribute in the form "<name> <namespace>" with - // the space and namespace part absent if the type does not - // have a namespace or 0 if xsi:type is not present. - // - void - start_element (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type); - - void - end_element (const ro_string<C>& ns, const ro_string<C>& name); - - void - attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value); - - void - characters (const ro_string<C>&); - - protected: - document (); - - // This function is called to obtain the root element type parser. - // If the returned pointed is 0 then the whole document content - // is ignored. - // - virtual parser_base<C>* - start_root_element (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type); - - // This function is called to indicate the completion of document - // parsing. The parser argument contains the pointer returned by - // start_root_element. - // - virtual void - end_root_element (const ro_string<C>& ns, - const ro_string<C>& name, - parser_base<C>* parser); - - private: - parser_base<C>* root_; - std::basic_string<C> ns_; - std::basic_string<C> name_; - std::size_t depth_; - }; - } - } -} - -#include <xsd/cxx/parser/document.txx> - -#endif // XSD_CXX_PARSER_DOCUMENT_HXX diff --git a/libxsd/xsd/cxx/parser/document.txx b/libxsd/xsd/cxx/parser/document.txx deleted file mode 100644 index cee73b1..0000000 --- a/libxsd/xsd/cxx/parser/document.txx +++ /dev/null @@ -1,127 +0,0 @@ -// file : xsd/cxx/parser/document.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <cassert> - -#include <xsd/cxx/parser/schema-exceptions.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // document - // - template <typename C> - document<C>:: - ~document () - { - } - - template <typename C> - document<C>:: - document (parser_base<C>& root, - const std::basic_string<C>& ns, - const std::basic_string<C>& name) - : root_ (&root), ns_ (ns), name_ (name), depth_ (0) - { - } - - template <typename C> - document<C>:: - document () - : root_ (0), depth_ (0) - { - } - - template <typename C> - void document<C>:: - start_element (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type) - { - if (depth_++ > 0) - { - if (root_) - root_->_start_element (ns, name, type); - } - else - { - root_ = start_root_element (ns, name, type); - - if (root_) - { - // pre () is called by the user. - // - root_->_pre_impl (); - } - } - } - - template <typename C> - void document<C>:: - end_element (const ro_string<C>& ns, const ro_string<C>& name) - { - assert (depth_ > 0); - - if (--depth_ > 0) - { - if (root_) - root_->_end_element (ns, name); - } - else - { - if (root_) - { - root_->_post_impl (); - // - // post() is called by the user. - } - - end_root_element (ns, name, root_); - } - } - - template <typename C> - void document<C>:: - attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value) - { - if (root_) - root_->_attribute (ns, name, value); - } - - template <typename C> - void document<C>:: - characters (const ro_string<C>& s) - { - if (root_) - root_->_characters (s); - } - - template <typename C> - parser_base<C>* document<C>:: - start_root_element (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>*) - { - if (name_ == name && ns_ == ns) - { - return root_; - } - else - throw expected_element<C> (ns_, name_, ns, name); - } - - template <typename C> - void document<C>:: - end_root_element (const ro_string<C>&, - const ro_string<C>&, - parser_base<C>*) - { - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/elements.hxx b/libxsd/xsd/cxx/parser/elements.hxx deleted file mode 100644 index baf180f..0000000 --- a/libxsd/xsd/cxx/parser/elements.hxx +++ /dev/null @@ -1,93 +0,0 @@ -// file : xsd/cxx/parser/elements.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_ELEMENTS_HXX -#define XSD_CXX_PARSER_ELEMENTS_HXX - -#include <xsd/cxx/ro-string.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // pre() and post() are overridable pre/post callbacks, i.e., the - // derived parser can override them without calling the base version. - // _pre() and _post() are not overridable pre/post callbacks in the - // sense that the derived parser may override them but has to call - // the base version. The call sequence is as shown below: - // - // pre () - // _pre () - // _post () - // post () - // - template <typename C> - class parser_base - { - public: - virtual - ~parser_base (); - - virtual void - pre (); - - virtual void - _pre (); - - // The type argument is a type name and namespace from the - // xsi:type attribute in the form "<name> <namespace>" with - // the space and namespace part absent if the type does not - // have a namespace or 0 if xsi:type is not present. - // - virtual void - _start_element (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type) = 0; - - virtual void - _end_element (const ro_string<C>& ns, - const ro_string<C>& name) = 0; - - virtual void - _attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value) = 0; - - virtual void - _characters (const ro_string<C>&) = 0; - - virtual void - _post (); - - // The post() signature varies depending on the parser return - // type. - // - - // Implementation callbacks for _pre and _post. The _pre and _post - // callbacks should never be called directly. Instead, the *_impl - // versions should be used. By default _pre_impl and _post_impl - // simply call _pre and _post respectively. - // - virtual void - _pre_impl (); - - virtual void - _post_impl (); - - public: - // Dynamic type in the form "<name> <namespace>" with - // the space and namespace part absent if the type does - // not have a namespace. Used in polymorphism-aware code. - // - virtual const C* - _dynamic_type () const; - }; - } - } -} - -#include <xsd/cxx/parser/elements.txx> - -#endif // XSD_CXX_PARSER_ELEMENTS_HXX diff --git a/libxsd/xsd/cxx/parser/elements.txx b/libxsd/xsd/cxx/parser/elements.txx deleted file mode 100644 index aa0b979..0000000 --- a/libxsd/xsd/cxx/parser/elements.txx +++ /dev/null @@ -1,58 +0,0 @@ -// file : xsd/cxx/parser/elements.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // parser_base - // - template <typename C> - parser_base<C>:: - ~parser_base () - { - } - - template <typename C> - void parser_base<C>:: - pre () - { - } - - template <typename C> - void parser_base<C>:: - _pre () - { - } - - template <typename C> - void parser_base<C>:: - _post () - { - } - - template <typename C> - void parser_base<C>:: - _pre_impl () - { - _pre (); - } - - template <typename C> - void parser_base<C>:: - _post_impl () - { - _post (); - } - - template <typename C> - const C* parser_base<C>:: - _dynamic_type () const - { - return 0; - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/error-handler.hxx b/libxsd/xsd/cxx/parser/error-handler.hxx deleted file mode 100644 index b0a04ff..0000000 --- a/libxsd/xsd/cxx/parser/error-handler.hxx +++ /dev/null @@ -1,55 +0,0 @@ -// file : xsd/cxx/parser/error-handler.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_ERROR_HANDLER_HXX -#define XSD_CXX_PARSER_ERROR_HANDLER_HXX - -#include <xsd/cxx/xml/error-handler.hxx> - -#include <xsd/cxx/parser/exceptions.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - template <typename C> - class error_handler: public xml::error_handler<C> - { - public: - typedef typename xml::error_handler<C>::severity severity; - - error_handler () - : failed_ (false) - { - } - - virtual bool - handle (const std::basic_string<C>& id, - unsigned long line, - unsigned long column, - severity s, - const std::basic_string<C>& message); - - void - throw_if_failed () const; - - void - reset () - { - failed_ = false; - diagnostics_.clear (); - } - - private: - bool failed_; - diagnostics<C> diagnostics_; - }; - } - } -} - -#include <xsd/cxx/parser/error-handler.txx> - -#endif // XSD_CXX_PARSER_ERROR_HANDLER_HXX diff --git a/libxsd/xsd/cxx/parser/error-handler.txx b/libxsd/xsd/cxx/parser/error-handler.txx deleted file mode 100644 index 5d3e50f..0000000 --- a/libxsd/xsd/cxx/parser/error-handler.txx +++ /dev/null @@ -1,39 +0,0 @@ -// file : xsd/cxx/parser/error-handler.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace parser - { - template <typename C> - bool error_handler<C>:: - handle (const std::basic_string<C>& id, - unsigned long line, - unsigned long column, - severity s, - const std::basic_string<C>& message) - { - diagnostics_.push_back ( - error<C> (s == severity::warning - ? cxx::parser::severity::warning - : cxx::parser::severity::error, - id, line, column, message)); - - if (!failed_ && s != severity::warning) - failed_ = true; - - return true; - } - - template <typename C> - void error_handler<C>:: - throw_if_failed () const - { - if (failed_) - throw parsing<C> (diagnostics_); - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/exceptions.hxx b/libxsd/xsd/cxx/parser/exceptions.hxx deleted file mode 100644 index acb613f..0000000 --- a/libxsd/xsd/cxx/parser/exceptions.hxx +++ /dev/null @@ -1,151 +0,0 @@ -// file : xsd/cxx/parser/exceptions.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_EXCEPTIONS_HXX -#define XSD_CXX_PARSER_EXCEPTIONS_HXX - -#include <string> -#include <vector> -#include <ostream> - -#include <xsd/cxx/exceptions.hxx> // xsd::cxx::exception -#include <xsd/cxx/ro-string.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // - // - template <typename C> - struct exception: xsd::cxx::exception - { - friend - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const exception& e) - { - e.print (os); - return os; - } - - protected: - virtual void - print (std::basic_ostream<C>&) const = 0; - }; - - - // - // - struct severity - { - enum value - { - warning, - error - }; - - severity (value v) : v_ (v) {} - operator value () const { return v_; } - - private: - value v_; - }; - - template <typename C> - struct error - { - error (cxx::parser::severity, - const std::basic_string<C>& id, - unsigned long line, - unsigned long column, - const std::basic_string<C>& message); - - cxx::parser::severity - severity () const - { - return severity_; - } - - const std::basic_string<C>& - id () const - { - return id_; - } - - unsigned long - line () const - { - return line_; - } - - unsigned long - column () const - { - return column_; - } - - const std::basic_string<C>& - message () const - { - return message_; - } - - private: - cxx::parser::severity severity_; - std::basic_string<C> id_; - unsigned long line_; - unsigned long column_; - std::basic_string<C> message_; - }; - - // See exceptions.ixx for operator<< (error). - - - // - // - template <typename C> - struct diagnostics: std::vector<error<C> > - { - }; - - // See exceptions.ixx for operator<< (diagnostics). - - // - // - template <typename C> - struct parsing: exception<C> - { - virtual - ~parsing () throw (); - - parsing (); - - parsing (const cxx::parser::diagnostics<C>&); - - const cxx::parser::diagnostics<C>& - diagnostics () const - { - return diagnostics_; - } - - virtual const char* - what () const throw (); - - protected: - virtual void - print (std::basic_ostream<C>&) const; - - private: - cxx::parser::diagnostics<C> diagnostics_; - }; - } - } -} - -#include <xsd/cxx/parser/exceptions.txx> - -#endif // XSD_CXX_PARSER_EXCEPTIONS_HXX - -#include <xsd/cxx/parser/exceptions.ixx> diff --git a/libxsd/xsd/cxx/parser/exceptions.ixx b/libxsd/xsd/cxx/parser/exceptions.ixx deleted file mode 100644 index 08859b1..0000000 --- a/libxsd/xsd/cxx/parser/exceptions.ixx +++ /dev/null @@ -1,127 +0,0 @@ -// file : xsd/cxx/parser/exceptions.ixx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) - -#ifndef XSD_CXX_PARSER_EXCEPTIONS_IXX_CHAR -#define XSD_CXX_PARSER_EXCEPTIONS_IXX_CHAR - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // error - // - inline - std::basic_ostream<char>& - operator<< (std::basic_ostream<char>& os, const error<char>& e) - { - return os << e.id () << ':' << e.line () << ':' << e.column () - << (e.severity () == severity::error - ? " error: " - : " warning: ") << e.message (); - } - - - // diagnostics - // - inline - std::basic_ostream<char>& - operator<< (std::basic_ostream<char>& os, const diagnostics<char>& d) - { - for (diagnostics<char>::const_iterator b (d.begin ()), i (b); - i != d.end (); - ++i) - { - if (i != b) - os << "\n"; - - os << *i; - } - - return os; - } - - // parsing - // - template<> - inline - void parsing<char>:: - print (std::basic_ostream<char>& os) const - { - if (diagnostics_.empty ()) - os << "instance document parsing failed"; - else - os << diagnostics_; - } - } - } -} - -#endif // XSD_CXX_PARSER_EXCEPTIONS_IXX_CHAR -#endif // XSD_CXX_PARSER_USE_CHAR - - -#if defined(XSD_CXX_PARSER_USE_WCHAR) || !defined(XSD_CXX_PARSER_USE_CHAR) - -#ifndef XSD_CXX_PARSER_EXCEPTIONS_IXX_WCHAR -#define XSD_CXX_PARSER_EXCEPTIONS_IXX_WCHAR - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // error - // - inline - std::basic_ostream<wchar_t>& - operator<< (std::basic_ostream<wchar_t>& os, const error<wchar_t>& e) - { - return os << e.id () << L':' << e.line () << L':' << e.column () - << (e.severity () == severity::error - ? L" error: " - : L" warning: ") << e.message (); - } - - // diagnostics - // - inline - std::basic_ostream<wchar_t>& - operator<< (std::basic_ostream<wchar_t>& os, - const diagnostics<wchar_t>& d) - { - for (diagnostics<wchar_t>::const_iterator b (d.begin ()), i (b); - i != d.end (); - ++i) - { - if (i != b) - os << L"\n"; - - os << *i; - } - - return os; - } - - // parsing - // - template<> - inline - void parsing<wchar_t>:: - print (std::basic_ostream<wchar_t>& os) const - { - if (diagnostics_.empty ()) - os << L"instance document parsing failed"; - else - os << diagnostics_; - } - } - } -} - -#endif // XSD_CXX_PARSER_EXCEPTIONS_IXX_WCHAR -#endif // XSD_CXX_PARSER_USE_WCHAR diff --git a/libxsd/xsd/cxx/parser/exceptions.txx b/libxsd/xsd/cxx/parser/exceptions.txx deleted file mode 100644 index 5d94f95..0000000 --- a/libxsd/xsd/cxx/parser/exceptions.txx +++ /dev/null @@ -1,57 +0,0 @@ -// file : xsd/cxx/parser/exceptions.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // error - // - template <typename C> - error<C>:: - error (cxx::parser::severity s, - const std::basic_string<C>& id, - unsigned long line, - unsigned long column, - const std::basic_string<C>& message) - : severity_ (s), - id_ (id), - line_ (line), - column_ (column), - message_ (message) - { - } - - - // parsing - // - template <typename C> - parsing<C>:: - ~parsing () throw () - { - } - - template <typename C> - parsing<C>:: - parsing () - { - } - - template <typename C> - parsing<C>:: - parsing (const cxx::parser::diagnostics<C>& diagnostics) - : diagnostics_ (diagnostics) - { - } - - template <typename C> - const char* parsing<C>:: - what () const throw () - { - return "instance document parsing failed"; - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/expat/elements.hxx b/libxsd/xsd/cxx/parser/expat/elements.hxx deleted file mode 100644 index 5ed41f3..0000000 --- a/libxsd/xsd/cxx/parser/expat/elements.hxx +++ /dev/null @@ -1,363 +0,0 @@ -// file : xsd/cxx/parser/expat/elements.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_EXPAT_ELEMENTS_HXX -#define XSD_CXX_PARSER_EXPAT_ELEMENTS_HXX - -#include <xsd/cxx/config.hxx> // XSD_CXX11 - -#include <string> -#include <iosfwd> -#include <cstddef> // std::size_t -#include <vector> - -#ifdef XSD_CXX11 -# include <memory> // std::unique_ptr -#endif - -#include <expat.h> - -// We only support UTF-8 expat for now. -// -#ifdef XML_UNICODE -#error UTF-16 expat (XML_UNICODE defined) is not supported -#endif - -#include <xsd/cxx/xml/error-handler.hxx> - -#include <xsd/cxx/parser/exceptions.hxx> -#include <xsd/cxx/parser/elements.hxx> -#include <xsd/cxx/parser/document.hxx> -#include <xsd/cxx/parser/error-handler.hxx> -#include <xsd/cxx/parser/schema-exceptions.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace expat - { -#ifdef XSD_CXX11 - struct parser_deleter - { - void - operator() (XML_Parser p) const - { - if (p != 0) - XML_ParserFree (p); - } - }; - - typedef - std::unique_ptr<XML_ParserStruct, parser_deleter> - parser_auto_ptr; -#else - // Simple auto pointer for Expat's XML_Parser object. - // - struct parser_auto_ptr - { - ~parser_auto_ptr () - { - if (parser_ != 0) - XML_ParserFree (parser_); - } - - explicit - parser_auto_ptr (XML_Parser parser = 0) - : parser_ (parser) - { - } - - parser_auto_ptr& - operator= (XML_Parser parser) - { - if (parser_ != 0) - XML_ParserFree (parser_); - - parser_ = parser; - return *this; - } - - XML_Parser - get () const - { - return parser_; - } - - private: - parser_auto_ptr (const parser_auto_ptr&); - - parser_auto_ptr& - operator= (const parser_auto_ptr&); - - private: - XML_Parser parser_; - }; -#endif // XSD_CXX11 - - // - // - template <typename C> - struct document: cxx::parser::document<C> // VC likes it qualified - { - public: - document (parser_base<C>&, - const C* root_element_name, - bool polymorphic = false); - - document (parser_base<C>&, - const std::basic_string<C>& root_element_name, - bool polymorphic = false); - - document (parser_base<C>&, - const C* root_element_namespace, - const C* root_element_name, - bool polymorphic = false); - - document (parser_base<C>&, - const std::basic_string<C>& root_element_namespace, - const std::basic_string<C>& root_element_name, - bool polymorphic = false); - - protected: - document (bool polymorphic = false); - - public: - // Parse a local file. The file is accessed with std::ifstream - // in binary mode. The std::ios_base::failure exception is used - // to report io errors (badbit and failbit). - void - parse (const std::basic_string<C>& file); - - // Parse a local file with a user-provided error_handler - // object. The file is accessed with std::ifstream in binary - // mode. The std::ios_base::failure exception is used to report - // io errors (badbit and failbit). - // - void - parse (const std::basic_string<C>& file, xml::error_handler<C>&); - - public: - // System id is a "system" identifier of the resources (e.g., - // URI or a full file path). Public id is a "public" identifier - // of the resource (e.g., application-specific name or relative - // file path). System id is used to resolve relative paths. - // In diagnostics messages system id is used if public id is - // not available. Otherwise public id is used. - // - - // Parse std::istream. - // - void - parse (std::istream&); - - // Parse std::istream with a user-provided error_handler object. - // - void - parse (std::istream&, xml::error_handler<C>&); - - // Parse std::istream with a system id. - // - void - parse (std::istream&, const std::basic_string<C>& system_id); - - // Parse std::istream with a system id and a user-provided - // error_handler object. - // - void - parse (std::istream&, - const std::basic_string<C>& system_id, - xml::error_handler<C>&); - - // Parse std::istream with system and public ids. - // - void - parse (std::istream&, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id); - - // Parse std::istream with system and public ids and a user-provided - // error_handler object. - // - void - parse (std::istream&, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id, - xml::error_handler<C>&); - - public: - // Parse a chunk of input. You can call these functions multiple - // times with the last call having the last argument true. - // - void - parse (const void* data, std::size_t size, bool last); - - void - parse (const void* data, std::size_t size, bool last, - xml::error_handler<C>&); - - void - parse (const void* data, std::size_t size, bool last, - const std::basic_string<C>& system_id); - - void - parse (const void* data, std::size_t size, bool last, - const std::basic_string<C>& system_id, - xml::error_handler<C>&); - - void - parse (const void* data, std::size_t size, bool last, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id); - - void - parse (const void* data, std::size_t size, bool last, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id, - xml::error_handler<C>&); - - public: - // Low-level Expat-specific parsing API. A typical use case - // would look like this (pseudo-code): - // - // xxx_pimpl root; - // document doc (root, "root"); - // - // root.pre (); - // doc.parse_begin (xml_parser, "file.xml"); - // - // while (more_stuff_to_parse &&) - // { - // // Call XML_Parse or XML_ParseBuffer. - // - // if (status == XML_STATUS_ERROR) - // break; - // } - // - // // Call parse_end even in case of an error to translate - // // XML and Schema errors to exceptions or error_handler - // // calls. - // // - // doc.parse_end (); - // result_type result (root.post_xxx ()); - // - // Notes: - // - // 1. If your XML instances use XML namespaces, the - // XML_ParserCreateNS functions should be used to create the - // XML parser. Space (XML_Char (' ')) should be used as a - // separator (the second argument to XML_ParserCreateNS). - // - void - parse_begin (XML_Parser); - - void - parse_begin (XML_Parser, const std::basic_string<C>& public_id); - - void - parse_begin (XML_Parser, xml::error_handler<C>&); - - void - parse_begin (XML_Parser, - const std::basic_string<C>& public_id, - xml::error_handler<C>&); - void - parse_end (); - - // Event routing. - // - public: - static void XMLCALL - start_element_thunk_ (void*, const XML_Char*, const XML_Char**); - - static void XMLCALL - end_element_thunk_ (void*, const XML_Char*); - - static void XMLCALL - characters_thunk_ (void*, const XML_Char*, int); - - static void XMLCALL - start_namespace_decl_thunk_ ( - void*, const XML_Char*, const XML_Char*); - - static void XMLCALL - end_namespace_decl_thunk_ (void*, const XML_Char*); - - protected: - void - start_element_ (const XML_Char* ns_name, const XML_Char** atts); - - void - end_element_ (const XML_Char* ns_name); - - void - characters_ (const XML_Char* s, std::size_t n); - - void - start_namespace_decl_ (const XML_Char* prefix, const XML_Char* ns); - - void - end_namespace_decl_ (const XML_Char* prefix); - - protected: - void - set (); - - void - clear (); - - bool - parse (std::istream&, - const std::basic_string<C>* system_id, - const std::basic_string<C>* public_id, - xml::error_handler<C>&); - - bool - parse (const void* data, std::size_t size, bool last, - const std::basic_string<C>* system_id, - const std::basic_string<C>* public_id, - xml::error_handler<C>&); - - - void - translate_schema_exception (const schema_exception<C>& e); - - protected: - XML_Parser xml_parser_; - parser_auto_ptr auto_xml_parser_; - - xml::error_handler<C>* eh_; - error_handler<C> default_eh_; - std::basic_string<C> public_id_; - - bool polymorphic_; - - // Namespace-prefix mapping. Only maintained in the polymorphic - // case. - // - struct ns_decl - { - ns_decl (const std::basic_string<C>& p, - const std::basic_string<C>& n) - : prefix (p), ns (n) - { - } - - std::basic_string<C> prefix; - std::basic_string<C> ns; - }; - - typedef std::vector<ns_decl> ns_decls; - - ns_decls ns_decls_; - }; - } - } - } -} - -#include <xsd/cxx/parser/expat/elements.txx> - -#endif // XSD_CXX_PARSER_EXPAT_ELEMENTS_HXX diff --git a/libxsd/xsd/cxx/parser/expat/elements.txx b/libxsd/xsd/cxx/parser/expat/elements.txx deleted file mode 100644 index a1b1beb..0000000 --- a/libxsd/xsd/cxx/parser/expat/elements.txx +++ /dev/null @@ -1,823 +0,0 @@ -// file : xsd/cxx/parser/expat/elements.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <new> // std::bad_alloc -#include <istream> -#include <fstream> -#include <cstring> // std::strchr -#include <cassert> - -#include <xsd/cxx/xml/bits/literals.hxx> // xml::bits::{xml_prefix, etc} - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace expat - { - - // document - // - - template <typename C> - document<C>:: - document (parser_base<C>& p, - const std::basic_string<C>& name, - bool polymorphic) - : cxx::parser::document<C> (p, std::basic_string<C> (), name), - xml_parser_ (0), - eh_ (0), - polymorphic_ (polymorphic) - { - } - - template <typename C> - document<C>:: - document (parser_base<C>& p, - const C* name, - bool polymorphic) - : cxx::parser::document<C> (p, std::basic_string<C> (), name), - xml_parser_ (0), - eh_ (0), - polymorphic_ (polymorphic) - { - } - - template <typename C> - document<C>:: - document (parser_base<C>& p, - const C* ns, - const C* name, - bool polymorphic) - : cxx::parser::document<C> (p, ns, name), - xml_parser_ (0), - eh_ (0), - polymorphic_ (polymorphic) - { - } - - template <typename C> - document<C>:: - document (parser_base<C>& p, - const std::basic_string<C>& ns, - const std::basic_string<C>& name, - bool polymorphic) - : cxx::parser::document<C> (p, ns, name), - xml_parser_ (0), - eh_ (0), - polymorphic_ (polymorphic) - { - } - - template <typename C> - document<C>:: - document (bool polymorphic) - : xml_parser_ (0), - eh_ (0), - polymorphic_ (polymorphic) - { - } - - // file - // - - template <typename C> - void document<C>:: - parse (const std::basic_string<C>& file) - { - std::ifstream ifs; - ifs.exceptions (std::ios_base::badbit | std::ios_base::failbit); - ifs.open (file.c_str (), std::ios_base::in | std::ios_base::binary); - - parse (ifs, file); - } - - template <typename C> - void document<C>:: - parse (const std::basic_string<C>& file, xml::error_handler<C>& eh) - { - std::ifstream ifs; - ifs.exceptions (std::ios_base::badbit | std::ios_base::failbit); - ifs.open (file.c_str (), std::ios_base::in | std::ios_base::binary); - - parse (ifs, file, eh); - } - - - // istream - // - - template <typename C> - void document<C>:: - parse (std::istream& is) - { - parse (is, 0, 0, default_eh_); - } - - template <typename C> - void document<C>:: - parse (std::istream& is, xml::error_handler<C>& eh) - { - if (!parse (is, 0, 0, eh)) - throw parsing<C> (); - } - - template <typename C> - void document<C>:: - parse (std::istream& is, const std::basic_string<C>& system_id) - { - default_eh_.reset (); - parse (is, &system_id, 0, default_eh_); - } - - template <typename C> - void document<C>:: - parse (std::istream& is, - const std::basic_string<C>& system_id, - xml::error_handler<C>& eh) - { - if (!parse (is, &system_id, 0, eh)) - throw parsing<C> (); - } - - template <typename C> - void document<C>:: - parse (std::istream& is, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id) - { - default_eh_.reset (); - parse (is, &system_id, &public_id, default_eh_); - } - - template <typename C> - void document<C>:: - parse (std::istream& is, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id, - xml::error_handler<C>& eh) - { - if (!parse (is, &system_id, &public_id, eh)) - throw parsing<C> (); - } - - // data - // - - template <typename C> - void document<C>:: - parse (const void* data, std::size_t size, bool last) - { - default_eh_.reset (); - parse (data, size, last, 0, 0, default_eh_); - } - - template <typename C> - void document<C>:: - parse (const void* data, std::size_t size, bool last, - xml::error_handler<C>& eh) - { - if (!parse (data, size, last, 0, 0, eh)) - throw parsing<C> (); - } - - template <typename C> - void document<C>:: - parse (const void* data, std::size_t size, bool last, - const std::basic_string<C>& system_id) - { - default_eh_.reset (); - parse (data, size, last, &system_id, 0, default_eh_); - } - - template <typename C> - void document<C>:: - parse (const void* data, std::size_t size, bool last, - const std::basic_string<C>& system_id, - xml::error_handler<C>& eh) - { - if (!parse (data, size, last, &system_id, 0, eh)) - throw parsing<C> (); - } - - template <typename C> - void document<C>:: - parse (const void* data, std::size_t size, bool last, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id) - { - default_eh_.reset (); - parse (data, size, last, &system_id, &public_id, default_eh_); - } - - template <typename C> - void document<C>:: - parse (const void* data, std::size_t size, bool last, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id, - xml::error_handler<C>& eh) - { - if (!parse (data, size, last, &system_id, &public_id, eh)) - throw parsing<C> (); - } - - // Implementation details. - // - - namespace bits - { - struct stream_exception_controller - { - ~stream_exception_controller () - { - std::ios_base::iostate s = is_.rdstate (); - s &= ~std::ios_base::failbit; - - // If our error state (sans failbit) intersects with the - // exception state then that means we have an active - // exception and changing error/exception state will - // cause another to be thrown. - // - if (!(old_state_ & s)) - { - // Clear failbit if it was caused by eof. - // - if (is_.fail () && is_.eof ()) - is_.clear (s); - - is_.exceptions (old_state_); - } - } - - stream_exception_controller (std::istream& is) - : is_ (is), old_state_ (is_.exceptions ()) - { - is_.exceptions (old_state_ & ~std::ios_base::failbit); - } - - private: - stream_exception_controller (const stream_exception_controller&); - - stream_exception_controller& - operator= (const stream_exception_controller&); - - private: - std::istream& is_; - std::ios_base::iostate old_state_; - }; - }; - - template <typename C> - bool document<C>:: - parse (std::istream& is, - const std::basic_string<C>* system_id, - const std::basic_string<C>* public_id, - xml::error_handler<C>& eh) - { - parser_auto_ptr parser (XML_ParserCreateNS (0, XML_Char (' '))); - - if (parser.get () == 0) - throw std::bad_alloc (); - - if (system_id || public_id) - parse_begin ( - parser.get (), system_id ? *system_id : *public_id, eh); - else - parse_begin (parser.get (), eh); - - // Temporarily unset the exception failbit. Also clear the - // fail bit when we reset the old state if it was caused - // by eof. - // - bits::stream_exception_controller sec (is); - - char buf[16384]; // 4 x page size. - - bool r (true); - - do - { - is.read (buf, sizeof (buf)); - - if (is.bad () || (is.fail () && !is.eof ())) - { - // If the stream is not using exceptions then the user - // will have to test for stream failures before calling - // post. - // - break; - } - - if (XML_Parse (parser.get (), - buf, - is.gcount (), - is.eof ()) == XML_STATUS_ERROR) - { - r = false; - break; - } - } while (!is.eof ()); - - parse_end (); - return r; - } - - template <typename C> - bool document<C>:: - parse (const void* data, - std::size_t size, - bool last, - const std::basic_string<C>* system_id, - const std::basic_string<C>* public_id, - xml::error_handler<C>& eh) - { - // First call. - // - if (auto_xml_parser_.get () == 0) - { - auto_xml_parser_ = XML_ParserCreateNS (0, XML_Char (' ')); - - if (auto_xml_parser_.get () == 0) - throw std::bad_alloc (); - - if (system_id || public_id) - parse_begin (auto_xml_parser_.get (), - system_id ? *system_id : *public_id, eh); - else - parse_begin (auto_xml_parser_.get (), eh); - } - - bool r (XML_Parse (xml_parser_, - static_cast<const char*> (data), - static_cast<int> (size), - last) != XML_STATUS_ERROR); - parse_end (); - return r; - } - - // XML_Parser - // - - template <typename C> - void document<C>:: - parse_begin (XML_Parser parser) - { - xml_parser_ = parser; - eh_ = &default_eh_; - public_id_.clear (); - set (); - } - - template <typename C> - void document<C>:: - parse_begin (XML_Parser parser, - const std::basic_string<C>& public_id) - { - xml_parser_ = parser; - eh_ = &default_eh_; - public_id_ = public_id; - set (); - } - - template <typename C> - void document<C>:: - parse_begin (XML_Parser parser, xml::error_handler<C>& eh) - { - xml_parser_ = parser; - eh_ = &eh; - public_id_.clear (); - set (); - } - - template <typename C> - void document<C>:: - parse_begin (XML_Parser parser, - const std::basic_string<C>& public_id, - xml::error_handler<C>& eh) - { - xml_parser_ = parser; - eh_ = &eh; - public_id_ = public_id; - set (); - } - - template <typename C> - void document<C>:: - parse_end () - { - XML_Error e (XML_GetErrorCode (xml_parser_)); - - if (e == XML_ERROR_NONE || e == XML_ERROR_ABORTED) - { - clear (); - xml_parser_ = 0; - auto_xml_parser_ = 0; - } - else - { - unsigned long l = XML_GetCurrentLineNumber (xml_parser_); - unsigned long c = XML_GetCurrentColumnNumber (xml_parser_); - std::basic_string<C> message (XML_ErrorString (e)); - - eh_->handle (public_id_, - l, c, - xml::error_handler<C>::severity::fatal, - message); - - clear (); - xml_parser_ = 0; - auto_xml_parser_ = 0; - - // We don't want to throw an empty parsing exception here - // since the user probably already knows about the error. - } - - if (eh_ == &default_eh_) - default_eh_.throw_if_failed (); - } - - // - // - template <typename C> - void document<C>:: - set () - { - assert (xml_parser_ != 0); - - XML_SetUserData(xml_parser_, this); - - XML_SetStartElementHandler (xml_parser_, start_element_thunk_); - XML_SetEndElementHandler (xml_parser_, end_element_thunk_); - XML_SetCharacterDataHandler (xml_parser_, characters_thunk_); - - if (polymorphic_) - { - XML_SetNamespaceDeclHandler (xml_parser_, - start_namespace_decl_thunk_, - end_namespace_decl_thunk_); - } - } - - template <typename C> - void document<C>:: - clear () - { - assert (xml_parser_ != 0); - - XML_SetUserData (xml_parser_, 0); - XML_SetStartElementHandler (xml_parser_, 0); - XML_SetEndElementHandler (xml_parser_, 0); - XML_SetCharacterDataHandler (xml_parser_, 0); - - if (polymorphic_) - XML_SetNamespaceDeclHandler (xml_parser_, 0, 0); - } - - template <typename C> - void document<C>:: - translate_schema_exception (const schema_exception<C>& e) - { - unsigned long l = XML_GetCurrentLineNumber (xml_parser_); - unsigned long c = XML_GetCurrentColumnNumber (xml_parser_); - - eh_->handle (public_id_, - l, c, - xml::error_handler<C>::severity::fatal, - e.message ()); - - XML_StopParser (xml_parser_, false); - } - - // Event routing. - // - - // Expat thunks. - // - template <typename C> - void XMLCALL document<C>:: - start_element_thunk_ (void* data, - const XML_Char* ns_name, - const XML_Char** atts) - { - document& d (*reinterpret_cast<document*> (data)); - d.start_element_ (ns_name, atts); - } - - template <typename C> - void XMLCALL document<C>:: - end_element_thunk_ (void* data, const XML_Char* ns_name) - { - document& d (*reinterpret_cast<document*> (data)); - d.end_element_ (ns_name); - } - - template <typename C> - void XMLCALL document<C>:: - characters_thunk_ (void* data, const XML_Char* s, int n) - { - document& d (*reinterpret_cast<document*> (data)); - d.characters_ (s, static_cast<std::size_t> (n)); - } - - template <typename C> - void XMLCALL document<C>:: - start_namespace_decl_thunk_ (void* data, - const XML_Char* prefix, - const XML_Char* ns) - { - document& d (*reinterpret_cast<document*> (data)); - d.start_namespace_decl_ (prefix, ns); - } - - template <typename C> - void XMLCALL document<C>:: - end_namespace_decl_thunk_ (void* data, const XML_Char* prefix) - { - document& d (*reinterpret_cast<document*> (data)); - d.end_namespace_decl_ (prefix); - } - - namespace bits - { - inline void - split_name (const XML_Char* s, - const char*& ns, std::size_t& ns_s, - const char*& name, std::size_t& name_s) - { - const char* p (std::strchr (s, ' ')); - - if (p) - { - ns = s; - ns_s = p - s; - name = p + 1; - } - else - { - ns = s; - ns_s = 0; - name = s; - } - - name_s = std::char_traits<char>::length (name); - } - } - - template <typename C> - void document<C>:: - start_element_ (const XML_Char* ns_name, const XML_Char** atts) - { - // Current Expat (2.0.0) has a (mis)-feature of a possibility of - // calling callbacks even after the non-resumable XML_StopParser - // call. The following code accounts for this. - // - { - XML_ParsingStatus s; - XML_GetParsingStatus (xml_parser_, &s); - if (s.parsing == XML_FINISHED) - return; - } - - typedef std::basic_string<C> string; - - const char* ns_p; - const char* name_p; - size_t ns_s, name_s; - - bits::split_name (ns_name, ns_p, ns_s, name_p, name_s); - - { - const ro_string<C> ns (ns_p, ns_s), name (name_p, name_s); - - if (!polymorphic_) - { - try - { - this->start_element (ns, name, 0); - } - catch (const schema_exception<C>& e) - { - translate_schema_exception (e); - return; - } - } - else - { - // Search for the xsi:type attribute. - // - const XML_Char** p = atts; // VC8 can't handle p (atts) - for (; *p != 0; p += 2) - { - bits::split_name (*p, ns_p, ns_s, name_p, name_s); - const ro_string<C> ns (ns_p, ns_s), name (name_p, name_s); - - if (name == xml::bits::type<C> () && - ns == xml::bits::xsi_namespace<C> ()) - break; - } - - if (*p == 0) - { - try - { - this->start_element (ns, name, 0); - } - catch (const schema_exception<C>& e) - { - translate_schema_exception (e); - return; - } - } - else - { - // @@ Need proper QName validation. - // - // Get the qualified type name and try to resolve it. - // - ro_string<C> qn (*(p + 1)); - - ro_string<C> tp, tn; - typename ro_string<C>::size_type pos (qn.find (C (':'))); - - try - { - if (pos != ro_string<C>::npos) - { - tp.assign (qn.data (), pos); - tn.assign (qn.data () + pos + 1); - - if (tp.empty ()) - throw dynamic_type<C> (qn); - } - else - tn.assign (qn.data (), qn.size ()); - - if (tn.empty ()) - throw dynamic_type<C> (qn); - - // Search our namespace declaration stack. Note that - // we need to do this even if prefix is empty. Sun CC - // 5.7 blows if we use const_reverse_iterator. - // - ro_string<C> tns; - for (typename ns_decls::reverse_iterator - it (ns_decls_.rbegin ()), e (ns_decls_.rend ()); - it != e; ++it) - { - if (it->prefix == tp) - { - tns.assign (it->ns); - break; - } - } - - if (!tp.empty () && tns.empty ()) - { - // The 'xml' prefix requires special handling. - // - if (tp == xml::bits::xml_prefix<C> ()) - tns.assign (xml::bits::xml_namespace<C> ()); - else - throw dynamic_type<C> (qn); - } - - // Construct the compound type id. - // - string id (tn.data (), tn.size ()); - - if (!tns.empty ()) - { - id += C (' '); - id.append (tns.data (), tns.size ()); - } - - ro_string<C> ro_id (id); - this->start_element (ns, name, &ro_id); - } - catch (const schema_exception<C>& e) - { - translate_schema_exception (e); - return; - } - } - } - } - - for (; *atts != 0; atts += 2) - { - bits::split_name (*atts, ns_p, ns_s, name_p, name_s); - - const ro_string<C> ns (ns_p, ns_s), name (name_p, name_s); - const ro_string<C> value (*(atts + 1)); - - try - { - this->attribute (ns, name, value); - } - catch (const schema_exception<C>& e) - { - translate_schema_exception (e); - break; - } - } - } - - template <typename C> - void document<C>:: - end_element_ (const XML_Char* ns_name) - { - // Current Expat (2.0.0) has a (mis)-feature of a possibility of - // calling callbacks even after the non-resumable XML_StopParser - // call. The following code accounts for this. - // - { - XML_ParsingStatus s; - XML_GetParsingStatus (xml_parser_, &s); - if (s.parsing == XML_FINISHED) - return; - } - - const char* ns_p; - const char* name_p; - size_t ns_s, name_s; - - bits::split_name (ns_name, ns_p, ns_s, name_p, name_s); - - const ro_string<C> ns (ns_p, ns_s), name (name_p, name_s); - - try - { - this->end_element (ns, name); - } - catch (const schema_exception<C>& e) - { - translate_schema_exception (e); - } - } - - template <typename C> - void document<C>:: - characters_ (const XML_Char* s, std::size_t n) - { - // Current Expat (2.0.0) has a (mis)-feature of a possibility of - // calling callbacks even after the non-resumable XML_StopParser - // call. The following code accounts for this. - // - { - XML_ParsingStatus s; - XML_GetParsingStatus (xml_parser_, &s); - if (s.parsing == XML_FINISHED) - return; - } - - if (n != 0) - { - const ro_string<C> str (s, n); - - try - { - this->characters (str); - } - catch (const schema_exception<C>& e) - { - translate_schema_exception (e); - } - } - } - - template <typename C> - void document<C>:: - start_namespace_decl_ (const XML_Char* p, const XML_Char* ns) - { - // prefix is 0 for default namespace - // namespace is 0 when unsetting default namespace - // - if (polymorphic_) - ns_decls_.push_back (ns_decl ((p ? p : ""), (ns ? ns : ""))); - } - - template <typename C> - void document<C>:: - end_namespace_decl_ (const XML_Char* p) - { - // prefix is 0 for default namespace - // - if (polymorphic_) - { - // Here we assume the prefixes are removed in the reverse - // order of them being added. This appears to how every - // sensible implementation works. - // - assert (p - ? ns_decls_.back ().prefix == p - : ns_decls_.back ().prefix.empty ()); - - ns_decls_.pop_back (); - } - } - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/map.hxx b/libxsd/xsd/cxx/parser/map.hxx deleted file mode 100644 index 3394c40..0000000 --- a/libxsd/xsd/cxx/parser/map.hxx +++ /dev/null @@ -1,77 +0,0 @@ -// file : xsd/cxx/parser/map.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_MAP_HXX -#define XSD_CXX_PARSER_MAP_HXX - -#include <map> -#include <string> - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/parser/elements.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // Parser map. Used in the polymorphic document parsing. - // - template <typename C> - struct parser_map - { - virtual - ~parser_map (); - - // The type argument is the type name and namespace from the - // xsi:type attribute or substitution group map in the form - // "<name> <namespace>" with the space and namespace part - // absent if the type does not have a namespace. - // - virtual parser_base<C>* - find (const ro_string<C>& type) const = 0; - }; - - - // Parser map implementation. - // - template <typename C> - struct parser_map_impl: parser_map<C> - { - parser_map_impl (); - - void - insert (parser_base<C>&); - - virtual parser_base<C>* - find (const ro_string<C>& type) const; - - private: - parser_map_impl (const parser_map_impl&); - - parser_map_impl& - operator= (const parser_map_impl&); - - private: - struct string_comparison - { - bool - operator() (const C* x, const C* y) const - { - ro_string<C> s (x); - return s.compare (y) < 0; - } - }; - - typedef std::map<const C*, parser_base<C>*, string_comparison> map; - map map_; - }; - } - } -} - -#include <xsd/cxx/parser/map.ixx> -#include <xsd/cxx/parser/map.txx> - -#endif // XSD_CXX_PARSER_MAP_HXX diff --git a/libxsd/xsd/cxx/parser/map.ixx b/libxsd/xsd/cxx/parser/map.ixx deleted file mode 100644 index c885be0..0000000 --- a/libxsd/xsd/cxx/parser/map.ixx +++ /dev/null @@ -1,25 +0,0 @@ -// file : xsd/cxx/parser/map.ixx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // parser_map_impl - // - template <typename C> - inline parser_map_impl<C>::parser_map_impl () - { - } - - template <typename C> - inline void parser_map_impl<C>:: - insert (parser_base<C>& parser) - { - map_[parser._dynamic_type ()] = &parser; - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/map.txx b/libxsd/xsd/cxx/parser/map.txx deleted file mode 100644 index 3c1433e..0000000 --- a/libxsd/xsd/cxx/parser/map.txx +++ /dev/null @@ -1,29 +0,0 @@ -// file : xsd/cxx/parser/map.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // parser_map - // - template <typename C> - parser_map<C>:: - ~parser_map () - { - } - - // parser_map_impl - // - template <typename C> - parser_base<C>* parser_map_impl<C>:: - find (const ro_string<C>& type) const - { - typename map::const_iterator i (map_.find (type.data ())); - return i != map_.end () ? i->second : 0; - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/non-validating/parser.hxx b/libxsd/xsd/cxx/parser/non-validating/parser.hxx deleted file mode 100644 index 79b11d9..0000000 --- a/libxsd/xsd/cxx/parser/non-validating/parser.hxx +++ /dev/null @@ -1,246 +0,0 @@ -// file : xsd/cxx/parser/non-validating/parser.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_NON_VALIDATING_PARSER_HXX -#define XSD_CXX_PARSER_NON_VALIDATING_PARSER_HXX - -#include <stack> -#include <string> -#include <cstddef> // std::size_t - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/parser/elements.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace non_validating - { - // - // - template <typename C> - struct empty_content: parser_base<C> - { - // The _*_any_* functions are called when wildcard content - // is encountered. Use them to handle mixed content models, - // any/anyAttribute, and anyType/anySimpleType. By default - // these functions do nothing. - // - - // The type argument is a type name and namespace from the - // xsi:type attribute in the form "<name> <namespace>" with - // the space and namespace part absent if the type does not - // have a namespace or 0 if xsi:type is not present. - // - virtual void - _start_any_element (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type); - - virtual void - _end_any_element (const ro_string<C>& ns, - const ro_string<C>& name); - - virtual void - _any_attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value); - - virtual void - _any_characters (const ro_string<C>&); - - - // - // - virtual bool - _start_element_impl (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>*); - - virtual bool - _end_element_impl (const ro_string<C>&, - const ro_string<C>&); - - virtual bool - _attribute_impl (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&); - - virtual bool - _characters_impl (const ro_string<C>&); - - - // - // - virtual void - _start_element (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type); - - virtual void - _end_element (const ro_string<C>& ns, - const ro_string<C>& name); - - virtual void - _attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value); - - virtual void - _characters (const ro_string<C>& s); - }; - - - // - // - template <typename C> - struct simple_content: empty_content<C> - { - // - // - virtual void - _attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value); - - virtual void - _characters (const ro_string<C>&); - }; - - - // - // - template <typename C> - struct complex_content: empty_content<C> - { - // - // - virtual void - _start_element (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type); - - virtual void - _end_element (const ro_string<C>& ns, - const ro_string<C>& name); - - virtual void - _attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value); - - virtual void - _characters (const ro_string<C>&); - - - // - // - virtual void - _pre_impl (); - - virtual void - _post_impl (); - - protected: - struct state - { - state () - : any_ (false), depth_ (0), parser_ (0) - { - } - - bool any_; - std::size_t depth_; - parser_base<C>* parser_; - }; - - // Optimized state stack for non-recursive case (one element). - // - struct state_stack - { - state_stack () - : size_ (0) - { - } - - void - push (const state& s) - { - if (size_ > 0) - rest_.push (top_); - - top_ = s; - ++size_; - } - - void - pop () - { - if (size_ > 1) - { - top_ = rest_.top (); - rest_.pop (); - } - - --size_; - } - - const state& - top () const - { - return top_; - } - - state& - top () - { - return top_; - } - - state& - under_top () - { - return rest_.top (); - } - - private: - state top_; - std::stack<state> rest_; - std::size_t size_; - }; - - state_stack context_; - }; - - - // Base for xsd:list. - // - template <typename C> - struct list_base: simple_content<C> - { - virtual void - _xsd_parse_item (const ro_string<C>&) = 0; - - virtual void - _pre_impl (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post_impl (); - - protected: - std::basic_string<C> buf_; - }; - } - } - } -} - -#include <xsd/cxx/parser/non-validating/parser.txx> - -#endif // XSD_CXX_PARSER_NON_VALIDATING_PARSER_HXX diff --git a/libxsd/xsd/cxx/parser/non-validating/parser.txx b/libxsd/xsd/cxx/parser/non-validating/parser.txx deleted file mode 100644 index eed2756..0000000 --- a/libxsd/xsd/cxx/parser/non-validating/parser.txx +++ /dev/null @@ -1,462 +0,0 @@ -// file : xsd/cxx/parser/non-validating/parser.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <cassert> - -#include <xsd/cxx/xml/bits/literals.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace non_validating - { - - // empty_content - // - - template <typename C> - void empty_content<C>:: - _start_any_element (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>*) - { - } - - template <typename C> - void empty_content<C>:: - _end_any_element (const ro_string<C>&, - const ro_string<C>&) - { - } - - template <typename C> - void empty_content<C>:: - _any_attribute (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&) - { - } - - template <typename C> - void empty_content<C>:: - _any_characters (const ro_string<C>&) - { - } - - // - // - template <typename C> - bool empty_content<C>:: - _start_element_impl (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>*) - { - return false; - } - - template <typename C> - bool empty_content<C>:: - _end_element_impl (const ro_string<C>&, - const ro_string<C>&) - { - return false; - } - - template <typename C> - bool empty_content<C>:: - _attribute_impl (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&) - { - return false; - } - - template <typename C> - bool empty_content<C>:: - _characters_impl (const ro_string<C>&) - { - return false; - } - - template <typename C> - void empty_content<C>:: - _start_element (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type) - { - if (!_start_element_impl (ns, name, type)) - _start_any_element (ns, name, type); - } - - template <typename C> - void empty_content<C>:: - _end_element (const ro_string<C>& ns, - const ro_string<C>& name) - { - if (!_end_element_impl (ns, name)) - _end_any_element (ns, name); - } - - template <typename C> - void empty_content<C>:: - _attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value) - { - // Weed out special attributes: xsi:type, xsi:nil, - // xsi:schemaLocation and noNamespaceSchemaLocation. - // See section 3.2.7 in Structures for details. - // - if (ns == xml::bits::xsi_namespace<C> () && - (name == xml::bits::type<C> () || - name == xml::bits::nil_lit<C> () || - name == xml::bits::schema_location<C> () || - name == xml::bits::no_namespace_schema_location<C> ())) - return; - - // Also some parsers (notably Xerces-C++) supplies us with - // namespace-prefix mapping attributes. - // - if (ns == xml::bits::xmlns_namespace<C> ()) - return; - - if (!_attribute_impl (ns, name, value)) - _any_attribute (ns, name, value); - } - - template <typename C> - void empty_content<C>:: - _characters (const ro_string<C>& s) - { - if (!_characters_impl (s)) - _any_characters (s); - } - - - // simple_content - // - - template <typename C> - void simple_content<C>:: - _attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value) - { - // Weed out special attributes: xsi:type, xsi:nil, - // xsi:schemaLocation and xsi:noNamespaceSchemaLocation. - // See section 3.2.7 in Structures for details. - // - if (ns == xml::bits::xsi_namespace<C> () && - (name == xml::bits::type<C> () || - name == xml::bits::nil_lit<C> () || - name == xml::bits::schema_location<C> () || - name == xml::bits::no_namespace_schema_location<C> ())) - return; - - // Also some parsers (notably Xerces-C++) supplies us with - // namespace-prefix mapping attributes. - // - if (ns == xml::bits::xmlns_namespace<C> ()) - return; - - if (!this->_attribute_impl (ns, name, value)) - this->_any_attribute (ns, name, value); - } - - template <typename C> - void simple_content<C>:: - _characters (const ro_string<C>& str) - { - this->_characters_impl (str); - } - - - // complex_content - // - - template <typename C> - void complex_content<C>:: - _start_element (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type) - { - state& s (context_.top ()); - - if (s.depth_++ > 0) - { - if (s.any_) - this->_start_any_element (ns, name, type); - else if (s.parser_) - s.parser_->_start_element (ns, name, type); - } - else - { - if (!this->_start_element_impl (ns, name, type)) - { - this->_start_any_element (ns, name, type); - s.any_ = true; - } - else if (s.parser_ != 0) - s.parser_->_pre_impl (); - } - } - - template <typename C> - void complex_content<C>:: - _end_element (const ro_string<C>& ns, - const ro_string<C>& name) - { - // To understand what's going on here it is helpful to think of - // a "total depth" as being the sum of individual depths over - // all elements. - // - - if (context_.top ().depth_ == 0) - { - state& s (context_.under_top ()); // One before last. - - if (--s.depth_ > 0) - { - // Indirect recursion. - // - if (s.parser_) - s.parser_->_end_element (ns, name); - } - else - { - // Direct recursion. - // - assert (this == s.parser_); - - this->_post_impl (); - - if (!this->_end_element_impl (ns, name)) - assert (false); - } - } - else - { - state& s (context_.top ()); - - if (--s.depth_ > 0) - { - if (s.any_) - this->_end_any_element (ns, name); - else if (s.parser_) - s.parser_->_end_element (ns, name); - } - else - { - if (s.parser_ != 0 && !s.any_) - s.parser_->_post_impl (); - - if (!this->_end_element_impl (ns, name)) - { - s.any_ = false; - this->_end_any_element (ns, name); - } - } - } - } - - template <typename C> - void complex_content<C>:: - _attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value) - { - // Weed out special attributes: xsi:type, xsi:nil, - // xsi:schemaLocation and xsi:noNamespaceSchemaLocation. - // See section 3.2.7 in Structures for details. - // - if (ns == xml::bits::xsi_namespace<C> () && - (name == xml::bits::type<C> () || - name == xml::bits::nil_lit<C> () || - name == xml::bits::schema_location<C> () || - name == xml::bits::no_namespace_schema_location<C> ())) - return; - - // Also some parsers (notably Xerces-C++) supplies us with - // namespace-prefix mapping attributes. - // - if (ns == xml::bits::xmlns_namespace<C> ()) - return; - - state& s (context_.top ()); - - if (s.depth_ > 0) - { - if (s.any_) - this->_any_attribute (ns, name, value); - else if (s.parser_) - s.parser_->_attribute (ns, name, value); - } - else - { - if (!this->_attribute_impl (ns, name, value)) - this->_any_attribute (ns, name, value); - } - } - - template <typename C> - void complex_content<C>:: - _characters (const ro_string<C>& str) - { - state& s (context_.top ()); - - if (s.depth_ > 0) - { - if (s.any_) - this->_any_characters (str); - else if (s.parser_) - s.parser_->_characters (str); - } - else - { - if (!this->_characters_impl (str)) - this->_any_characters (str); - } - } - - template <typename C> - void complex_content<C>:: - _pre_impl () - { - context_.push (state ()); - this->_pre (); - } - - template <typename C> - void complex_content<C>:: - _post_impl () - { - this->_post (); - context_.pop (); - } - - // list_base - // - namespace bits - { - // Find first non-space character. - // - template <typename C> - typename ro_string<C>::size_type - find_ns (const C* s, - typename ro_string<C>::size_type size, - typename ro_string<C>::size_type pos) - { - while (pos < size && - (s[pos] == C (0x20) || s[pos] == C (0x0A) || - s[pos] == C (0x0D) || s[pos] == C (0x09))) - ++pos; - - return pos < size ? pos : ro_string<C>::npos; - } - - // Find first space character. - // - template <typename C> - typename ro_string<C>::size_type - find_s (const C* s, - typename ro_string<C>::size_type size, - typename ro_string<C>::size_type pos) - { - while (pos < size && - s[pos] != C (0x20) && s[pos] != C (0x0A) && - s[pos] != C (0x0D) && s[pos] != C (0x09)) - ++pos; - - return pos < size ? pos : ro_string<C>::npos; - } - } - - // Relevant XML Schema Part 2: Datatypes sections: 4.2.1.2, 4.3.6. - // - - template <typename C> - void list_base<C>:: - _pre_impl () - { - simple_content<C>::_pre_impl (); - buf_.clear (); - } - - template <typename C> - void list_base<C>:: - _characters (const ro_string<C>& s) - { - typedef typename ro_string<C>::size_type size_type; - - const C* data (s.data ()); - size_type size (s.size ()); - - // Handle the previous chunk if we start with a ws. - // - if (!buf_.empty () && - (data[0] == C (0x20) || data[0] == C (0x0A) || - data[0] == C (0x0D) || data[0] == C (0x09))) - { - ro_string<C> tmp (buf_); // Private copy ctor. - _xsd_parse_item (tmp); - buf_.clear (); - } - - // Traverse the data while logically collapsing spaces. - // - for (size_type i (bits::find_ns (data, size, 0)); - i != ro_string<C>::npos;) - { - size_type j (bits::find_s (data, size, i)); - - if (j != ro_string<C>::npos) - { - if (buf_.empty ()) - { - ro_string<C> tmp (data + i, j - i); // Private copy ctor. - _xsd_parse_item (tmp); - } - else - { - // Assemble the first item in str from buf_ and s. - // - std::basic_string<C> str; - str.swap (buf_); - str.append (data + i, j - i); - ro_string<C> tmp (str); // Private copy ctor. - _xsd_parse_item (tmp); - } - - i = bits::find_ns (data, size, j); - } - else - { - // Last fragment, append it to the buf_. - // - buf_.append (data + i, size - i); - break; - } - } - } - - template <typename C> - void list_base<C>:: - _post_impl () - { - // Handle the last item. - // - if (!buf_.empty ()) - { - ro_string<C> tmp (buf_); // Private copy ctor. - _xsd_parse_item (tmp); - } - - simple_content<C>::_post_impl (); - } - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx b/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx deleted file mode 100644 index 0ce04cc..0000000 --- a/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx +++ /dev/null @@ -1,791 +0,0 @@ -// file : xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_HXX -#define XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_HXX - -#include <string> - -#include <xsd/cxx/config.hxx> // XSD_AUTO_PTR - -#include <xsd/cxx/parser/non-validating/xml-schema-pskel.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace non_validating - { - // any_type - // - template <typename C> - struct any_type_pimpl: virtual any_type_pskel<C> - { - virtual void - post_any_type (); - }; - - // any_simple_type - // - template <typename C> - struct any_simple_type_pimpl: virtual any_simple_type_pskel<C> - { - virtual void - post_any_simple_type (); - }; - - // boolean - // - template <typename C> - struct boolean_pimpl: virtual boolean_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual bool - post_boolean (); - - protected: - std::basic_string<C> str_; - }; - - - // 8-bit - // - template <typename C> - struct byte_pimpl: virtual byte_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual signed char - post_byte (); - - protected: - std::basic_string<C> str_; - }; - - - template <typename C> - struct unsigned_byte_pimpl: virtual unsigned_byte_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual unsigned char - post_unsigned_byte (); - - protected: - std::basic_string<C> str_; - }; - - - // 16-bit - // - template <typename C> - struct short_pimpl: virtual short_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual short - post_short (); - - protected: - std::basic_string<C> str_; - }; - - - template <typename C> - struct unsigned_short_pimpl: virtual unsigned_short_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual unsigned short - post_unsigned_short (); - - protected: - std::basic_string<C> str_; - }; - - - // 32-bit - // - template <typename C> - struct int_pimpl: virtual int_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual int - post_int (); - - protected: - std::basic_string<C> str_; - }; - - - template <typename C> - struct unsigned_int_pimpl: virtual unsigned_int_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual unsigned int - post_unsigned_int (); - - protected: - std::basic_string<C> str_; - }; - - - // 64-bit - // - template <typename C> - struct long_pimpl: virtual long_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual long long - post_long (); - - protected: - std::basic_string<C> str_; - }; - - - template <typename C> - struct unsigned_long_pimpl: virtual unsigned_long_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual unsigned long long - post_unsigned_long (); - - protected: - std::basic_string<C> str_; - }; - - - // Arbitrary-length integers. - // - template <typename C> - struct integer_pimpl: virtual integer_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual long long - post_integer (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct negative_integer_pimpl: virtual negative_integer_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual long long - post_negative_integer (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct non_positive_integer_pimpl: virtual non_positive_integer_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual long long - post_non_positive_integer (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct positive_integer_pimpl: virtual positive_integer_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual unsigned long long - post_positive_integer (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct non_negative_integer_pimpl: virtual non_negative_integer_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual unsigned long long - post_non_negative_integer (); - - protected: - std::basic_string<C> str_; - }; - - - // Floats. - // - template <typename C> - struct float_pimpl: virtual float_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual float - post_float (); - - protected: - std::basic_string<C> str_; - }; - - - template <typename C> - struct double_pimpl: virtual double_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual double - post_double (); - - protected: - std::basic_string<C> str_; - }; - - - template <typename C> - struct decimal_pimpl: virtual decimal_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual double - post_decimal (); - - protected: - std::basic_string<C> str_; - }; - - - // Strings. - // - template <typename C> - struct string_pimpl: virtual string_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual std::basic_string<C> - post_string (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct normalized_string_pimpl: virtual normalized_string_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual std::basic_string<C> - post_normalized_string (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct token_pimpl: virtual token_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual std::basic_string<C> - post_token (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct name_pimpl: virtual name_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual std::basic_string<C> - post_name (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct nmtoken_pimpl: virtual nmtoken_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual std::basic_string<C> - post_nmtoken (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct nmtokens_pimpl: virtual nmtokens_pskel<C> - { - virtual void - _pre (); - - virtual void - _xsd_parse_item (const ro_string<C>&); - - virtual string_sequence<C> - post_nmtokens (); - - protected: - string_sequence<C> seq_; - nmtoken_pimpl<C> parser_; - }; - - template <typename C> - struct ncname_pimpl: virtual ncname_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual std::basic_string<C> - post_ncname (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct id_pimpl: virtual id_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual std::basic_string<C> - post_id (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct idref_pimpl: virtual idref_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual std::basic_string<C> - post_idref (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct idrefs_pimpl: virtual idrefs_pskel<C> - { - virtual void - _pre (); - - virtual void - _xsd_parse_item (const ro_string<C>&); - - virtual string_sequence<C> - post_idrefs (); - - protected: - string_sequence<C> seq_; - idref_pimpl<C> parser_; - }; - - // language - // - template <typename C> - struct language_pimpl: virtual language_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual std::basic_string<C> - post_language (); - - protected: - std::basic_string<C> str_; - }; - - // anyURI - // - template <typename C> - struct uri_pimpl: virtual uri_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual std::basic_string<C> - post_uri (); - - protected: - std::basic_string<C> str_; - }; - - // QName - // - template <typename C> - struct qname_pimpl: virtual qname_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual qname<C> - post_qname (); - - protected: - std::basic_string<C> str_; - }; - - // base64Binary - // - template <typename C> - struct base64_binary_pimpl: virtual base64_binary_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual XSD_AUTO_PTR<buffer> - post_base64_binary (); - - protected: - std::basic_string<C> str_; - }; - - // hexBinary - // - template <typename C> - struct hex_binary_pimpl: virtual hex_binary_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual XSD_AUTO_PTR<buffer> - post_hex_binary (); - - protected: - std::basic_string<C> str_; - }; - - // gday - // - template <typename C> - struct gday_pimpl: virtual gday_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual gday - post_gday (); - - protected: - std::basic_string<C> str_; - }; - - // gmonth - // - template <typename C> - struct gmonth_pimpl: virtual gmonth_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual gmonth - post_gmonth (); - - protected: - std::basic_string<C> str_; - }; - - // gyear - // - template <typename C> - struct gyear_pimpl: virtual gyear_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual gyear - post_gyear (); - - protected: - std::basic_string<C> str_; - }; - - // gmonth_day - // - template <typename C> - struct gmonth_day_pimpl: virtual gmonth_day_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual gmonth_day - post_gmonth_day (); - - protected: - std::basic_string<C> str_; - }; - - // gyear_month - // - template <typename C> - struct gyear_month_pimpl: virtual gyear_month_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual gyear_month - post_gyear_month (); - - protected: - std::basic_string<C> str_; - }; - - // date - // - template <typename C> - struct date_pimpl: virtual date_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual date - post_date (); - - protected: - std::basic_string<C> str_; - }; - - // time - // - template <typename C> - struct time_pimpl: virtual time_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual time - post_time (); - - protected: - std::basic_string<C> str_; - }; - - // date_time - // - template <typename C> - struct date_time_pimpl: virtual date_time_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual date_time - post_date_time (); - - protected: - std::basic_string<C> str_; - }; - - // duration - // - template <typename C> - struct duration_pimpl: virtual duration_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual duration - post_duration (); - - protected: - std::basic_string<C> str_; - }; - - // - // - namespace bits - { - // float literals: INF -INF NaN - // - template<typename C> - const C* - positive_inf (); - - template<typename C> - const C* - negative_inf (); - - template<typename C> - const C* - nan (); - - // boolean literals - // - template<typename C> - const C* - true_ (); - - template<typename C> - const C* - one (); - } - } - } - } -} - -#include <xsd/cxx/parser/non-validating/xml-schema-pimpl.txx> - -#endif // XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_HXX - -#include <xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx> diff --git a/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx b/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx deleted file mode 100644 index 6082654..0000000 --- a/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx +++ /dev/null @@ -1,127 +0,0 @@ -// file : xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) - -#ifndef XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_IXX_CHAR -#define XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_IXX_CHAR - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace non_validating - { - namespace bits - { - // - // - template<> - inline const char* - positive_inf<char> () - { - return "INF"; - } - - template<> - inline const char* - negative_inf<char> () - { - return "-INF"; - } - - template<> - inline const char* - nan<char> () - { - return "NaN"; - } - - // - // - template<> - inline const char* - true_<char> () - { - return "true"; - } - - template<> - inline const char* - one<char> () - { - return "1"; - } - } - } - } - } -} - -#endif // XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_IXX_CHAR -#endif // XSD_CXX_PARSER_USE_CHAR - - -#if defined(XSD_CXX_PARSER_USE_WCHAR) || !defined(XSD_CXX_PARSER_USE_CHAR) - -#ifndef XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_IXX_WCHAR -#define XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_IXX_WCHAR - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace non_validating - { - namespace bits - { - // - // - template<> - inline const wchar_t* - positive_inf<wchar_t> () - { - return L"INF"; - } - - template<> - inline const wchar_t* - negative_inf<wchar_t> () - { - return L"-INF"; - } - - template<> - inline const wchar_t* - nan<wchar_t> () - { - return L"NaN"; - } - - // - // - template<> - inline const wchar_t* - true_<wchar_t> () - { - return L"true"; - } - - template<> - inline const wchar_t* - one<wchar_t> () - { - return L"1"; - } - } - } - } - } -} - -#endif // XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_IXX_WCHAR -#endif // XSD_CXX_PARSER_USE_WCHAR diff --git a/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.txx b/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.txx deleted file mode 100644 index 9f56f7f..0000000 --- a/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.txx +++ /dev/null @@ -1,2066 +0,0 @@ -// file : xsd/cxx/parser/non-validating/xml-schema-pimpl.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <limits> -#include <locale> - -#include <xsd/cxx/zc-istream.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace non_validating - { - // Note that most of the types implemented here cannot have - // whitespaces in the value. As result we don't need to waste - // time collapsing whitespaces. All we need to do is trim the - // string representation which can be done without copying. - // - - // any_type - // - - template <typename C> - void any_type_pimpl<C>:: - post_any_type () - { - } - - // any_simple_type - // - - template <typename C> - void any_simple_type_pimpl<C>:: - post_any_simple_type () - { - } - - // boolean - // - template <typename C> - void boolean_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void boolean_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - bool boolean_pimpl<C>:: - post_boolean () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - return str == bits::true_<C> () || str == bits::one<C> (); - } - - // byte - // - - template <typename C> - void byte_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void byte_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - signed char byte_pimpl<C>:: - post_byte () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - short t; - zc_istream<C> is (str); - is >> t; - - return static_cast<signed char> (t); - } - - // unsigned_byte - // - - template <typename C> - void unsigned_byte_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void unsigned_byte_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - unsigned char unsigned_byte_pimpl<C>:: - post_unsigned_byte () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - unsigned short t; - zc_istream<C> is (str); - is >> t; - - return static_cast<unsigned char> (t); - } - - // short - // - - template <typename C> - void short_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void short_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - short short_pimpl<C>:: - post_short () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - short t; - zc_istream<C> is (str); - is >> t; - - return t; - } - - // unsigned_short - // - - template <typename C> - void unsigned_short_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void unsigned_short_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - unsigned short unsigned_short_pimpl<C>:: - post_unsigned_short () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - unsigned short t; - zc_istream<C> is (str); - is >> t; - - return t; - } - - // int - // - - template <typename C> - void int_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void int_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - int int_pimpl<C>:: - post_int () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - int t; - zc_istream<C> is (str); - is >> t; - - return t; - } - - // unsigned_int - // - - template <typename C> - void unsigned_int_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void unsigned_int_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - unsigned int unsigned_int_pimpl<C>:: - post_unsigned_int () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - unsigned int t; - zc_istream<C> is (str); - is >> t; - - return t; - } - - // long - // - template <typename C> - void long_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void long_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - long long long_pimpl<C>:: - post_long () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - long long t; - zc_istream<C> is (str); - is >> t; - - return t; - } - - // unsigned_long - // - template <typename C> - void unsigned_long_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void unsigned_long_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - unsigned long long unsigned_long_pimpl<C>:: - post_unsigned_long () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - unsigned long long t; - zc_istream<C> is (str); - is >> t; - - return t; - } - - // integer - // - template <typename C> - void integer_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void integer_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - long long integer_pimpl<C>:: - post_integer () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - long long t; - zc_istream<C> is (str); - is >> t; - - return t; - } - - // negative_integer - // - template <typename C> - void negative_integer_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void negative_integer_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - long long negative_integer_pimpl<C>:: - post_negative_integer () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - long long t; - zc_istream<C> is (str); - is >> t; - - return t; - } - - // non_positive_integer - // - template <typename C> - void non_positive_integer_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void non_positive_integer_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - long long non_positive_integer_pimpl<C>:: - post_non_positive_integer () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - long long t; - zc_istream<C> is (str); - is >> t; - - return t; - } - - // positive_integer - // - template <typename C> - void positive_integer_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void positive_integer_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - unsigned long long positive_integer_pimpl<C>:: - post_positive_integer () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - unsigned long long t; - zc_istream<C> is (str); - is >> t; - - return t; - } - - // non_negative_integer - // - template <typename C> - void non_negative_integer_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void non_negative_integer_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - unsigned long long non_negative_integer_pimpl<C>:: - post_non_negative_integer () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - unsigned long long t; - zc_istream<C> is (str); - is >> t; - - return t; - } - - // float - // - template <typename C> - void float_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void float_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - float float_pimpl<C>:: - post_float () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - if (str == bits::positive_inf<C> ()) - return std::numeric_limits<float>::infinity (); - - if (str == bits::negative_inf<C> ()) - return -std::numeric_limits<float>::infinity (); - - if (str == bits::nan<C> ()) - return std::numeric_limits<float>::quiet_NaN (); - - float t; - zc_istream<C> is (str); - is.imbue (std::locale::classic ()); - is >> t; - - return t; - } - - // double - // - template <typename C> - void double_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void double_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - double double_pimpl<C>:: - post_double () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - if (str == bits::positive_inf<C> ()) - return std::numeric_limits<double>::infinity (); - - if (str == bits::negative_inf<C> ()) - return -std::numeric_limits<double>::infinity (); - - if (str == bits::nan<C> ()) - return std::numeric_limits<double>::quiet_NaN (); - - double t; - zc_istream<C> is (str); - is.imbue (std::locale::classic ()); - is >> t; - - return t; - } - - // decimal - // - template <typename C> - void decimal_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void decimal_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - double decimal_pimpl<C>:: - post_decimal () - { - std::basic_string<C> tmp; - tmp.swap (str_); - - ro_string<C> str (tmp); - trim (str); - - double t; - zc_istream<C> is (str); - is.imbue (std::locale::classic ()); - is >> t; - - return t; - } - - - // string - // - template <typename C> - void string_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void string_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - std::basic_string<C> string_pimpl<C>:: - post_string () - { - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // normalized_string - // - template <typename C> - void normalized_string_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void normalized_string_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - std::basic_string<C> normalized_string_pimpl<C>:: - post_normalized_string () - { - typedef typename std::basic_string<C>::size_type size_type; - - size_type size (str_.size ()); - - for (size_type i (0); i < size; ++i) - { - C& c = str_[i]; - - if (c == C (0x0A) || c == C (0x0D) || c == C (0x09)) - c = C (0x20); - } - - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // token - // - template <typename C> - void token_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void token_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - std::basic_string<C> token_pimpl<C>:: - post_token () - { - typedef typename std::basic_string<C>::size_type size_type; - - size_type size (str_.size ()); - size_type j (0); - - bool subs (false); - - for (size_type i (0); i < size; ++i) - { - C c = str_[i]; - - if (c == C (0x20) || c == C (0x0A) || - c == C (0x0D) || c == C (0x09)) - { - subs = true; - } - else - { - if (subs) - { - subs = false; - str_[j++] = C (0x20); - } - - str_[j++] = c; - } - } - - str_.resize (j); - - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // name - // - template <typename C> - void name_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void name_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - std::basic_string<C> name_pimpl<C>:: - post_name () - { - ro_string<C> tmp (str_); - str_.resize (trim_right (tmp)); - - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // nmtoken - // - template <typename C> - void nmtoken_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void nmtoken_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - std::basic_string<C> nmtoken_pimpl<C>:: - post_nmtoken () - { - ro_string<C> tmp (str_); - str_.resize (trim_right (tmp)); - - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // nmtokens - // - template <typename C> - void nmtokens_pimpl<C>:: - _pre () - { - nmtokens_pskel<C>::_pre (); - seq_.clear (); - } - - template <typename C> - string_sequence<C> nmtokens_pimpl<C>:: - post_nmtokens () - { - string_sequence<C> r; - r.swap (seq_); - return r; - } - - template <typename C> - void nmtokens_pimpl<C>:: - _xsd_parse_item (const ro_string<C>& s) - { - parser_.pre (); - parser_._pre (); - parser_._characters (s); - parser_._post (); - seq_.push_back (parser_.post_nmtoken ()); - } - - // ncname - // - template <typename C> - void ncname_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void ncname_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - std::basic_string<C> ncname_pimpl<C>:: - post_ncname () - { - ro_string<C> tmp (str_); - str_.resize (trim_right (tmp)); - - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // id - // - template <typename C> - void id_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void id_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - std::basic_string<C> id_pimpl<C>:: - post_id () - { - ro_string<C> tmp (str_); - str_.resize (trim_right (tmp)); - - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // idref - // - template <typename C> - void idref_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void idref_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - std::basic_string<C> idref_pimpl<C>:: - post_idref () - { - ro_string<C> tmp (str_); - str_.resize (trim_right (tmp)); - - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // idrefs - // - template <typename C> - void idrefs_pimpl<C>:: - _pre () - { - idrefs_pskel<C>::_pre (); - seq_.clear (); - } - - template <typename C> - string_sequence<C> idrefs_pimpl<C>:: - post_idrefs () - { - string_sequence<C> r; - r.swap (seq_); - return r; - } - - template <typename C> - void idrefs_pimpl<C>:: - _xsd_parse_item (const ro_string<C>& s) - { - parser_.pre (); - parser_._pre (); - parser_._characters (s); - parser_._post (); - seq_.push_back (parser_.post_idref ()); - } - - // language - // - template <typename C> - void language_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void language_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - std::basic_string<C> language_pimpl<C>:: - post_language () - { - ro_string<C> tmp (str_); - str_.resize (trim_right (tmp)); - - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // uri - // - template <typename C> - void uri_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void uri_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - std::basic_string<C> uri_pimpl<C>:: - post_uri () - { - ro_string<C> tmp (str_); - str_.resize (trim_right (tmp)); - - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // qname - // - template <typename C> - void qname_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void qname_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - qname<C> qname_pimpl<C>:: - post_qname () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - size_type pos (tmp.find (C (':'))); - - if (pos != ro_string<C>::npos) - { - std::basic_string<C> prefix (tmp.data (), pos++); - std::basic_string<C> name (tmp.data () + pos, size - pos); - return qname<C> (prefix, name); - } - else - { - str_.resize (size); - return qname<C> (str_); - } - } - - // base64_binary - // - template <typename C> - void base64_binary_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void base64_binary_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - namespace bits - { - template <typename C> - inline unsigned char - base64_decode (C c) - { - unsigned char r (0xFF); - - if (c >= C('A') && c <= C ('Z')) - r = static_cast<unsigned char> (c - C ('A')); - else if (c >= C('a') && c <= C ('z')) - r = static_cast<unsigned char> (c - C ('a') + 26); - else if (c >= C('0') && c <= C ('9')) - r = static_cast<unsigned char> (c - C ('0') + 52); - else if (c == C ('+')) - r = 62; - else if (c == C ('/')) - r = 63; - - return r; - } - } - - template <typename C> - XSD_AUTO_PTR<buffer> base64_binary_pimpl<C>:: - post_base64_binary () - { - typedef typename std::basic_string<C>::size_type size_type; - - size_type size (str_.size ()); - const C* src (str_.c_str ()); - - // Remove all whitespaces. - // - { - size_type j (0); - - bool subs (false); - - for (size_type i (0); i < size; ++i) - { - C c = str_[i]; - - if (c == C (0x20) || c == C (0x0A) || - c == C (0x0D) || c == C (0x09)) - { - subs = true; - } - else - { - if (subs) - subs = false; - - str_[j++] = c; - } - } - - size = j; - str_.resize (size); - } - - // Our length should be a multiple of four. - // - size_type quad_count (size / 4); - size_type capacity (quad_count * 3 + 1); - - XSD_AUTO_PTR<buffer> buf (new buffer (capacity, capacity)); - char* dst (buf->data ()); - - size_type si (0), di (0); // Source and destination indexes. - - // Process all quads except the last one. - // - unsigned char b1, b2, b3, b4; - - for (size_type q (0); q < quad_count - 1; ++q) - { - b1 = bits::base64_decode (src[si++]); - b2 = bits::base64_decode (src[si++]); - b3 = bits::base64_decode (src[si++]); - b4 = bits::base64_decode (src[si++]); - - dst[di++] = (b1 << 2) | (b2 >> 4); - dst[di++] = (b2 << 4) | (b3 >> 2); - dst[di++] = (b3 << 6) | b4; - } - - // Process the last quad. The first two octets are always there. - // - b1 = bits::base64_decode (src[si++]); - b2 = bits::base64_decode (src[si++]); - - C e3 (src[si++]); - C e4 (src[si++]); - - if (e4 == C ('=')) - { - if (e3 == C ('=')) - { - // Two pads. Last 4 bits in b2 should be zero. - // - dst[di++] = (b1 << 2) | (b2 >> 4); - } - else - { - // One pad. Last 2 bits in b3 should be zero. - // - b3 = bits::base64_decode (e3); - - dst[di++] = (b1 << 2) | (b2 >> 4); - dst[di++] = (b2 << 4) | (b3 >> 2); - } - } - else - { - // No pads. - // - b3 = bits::base64_decode (e3); - b4 = bits::base64_decode (e4); - - dst[di++] = (b1 << 2) | (b2 >> 4); - dst[di++] = (b2 << 4) | (b3 >> 2); - dst[di++] = (b3 << 6) | b4; - } - - // Set the real size. - // - buf->size (di); - - return buf; - } - - // hex_binary - // - template <typename C> - void hex_binary_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void hex_binary_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - namespace bits - { - template <typename C> - inline unsigned char - hex_decode (C c) - { - unsigned char r (0xFF); - - if (c >= C('0') && c <= C ('9')) - r = static_cast<unsigned char> (c - C ('0')); - else if (c >= C ('A') && c <= C ('F')) - r = static_cast<unsigned char> (10 + (c - C ('A'))); - else if (c >= C ('a') && c <= C ('f')) - r = static_cast<unsigned char> (10 + (c - C ('a'))); - - return r; - } - } - - template <typename C> - XSD_AUTO_PTR<buffer> hex_binary_pimpl<C>:: - post_hex_binary () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - - buffer::size_t n (size / 2); - XSD_AUTO_PTR<buffer> buf (new buffer (n)); - - const C* src (tmp.data ()); - char* dst (buf->data ()); - - for (buffer::size_t i (0); i < n; ++i) - { - unsigned char h (bits::hex_decode (src[2 * i])); - unsigned char l (bits::hex_decode (src[2 * i + 1])); - dst[i] = (h << 4) | l; - } - - return buf; - } - - // time_zone - // - namespace bits - { - // Datatypes 3.2.7.3. - // - template <typename C> - void - parse_tz (const C* s, - typename std::basic_string<C>::size_type n, - short& h, short& m) - { - // time_zone := Z|(+|-)HH:MM - // - if (n == 0) - { - return; - } - else if (s[0] == 'Z') - { - h = 0; - m = 0; - } - else if (n == 6) - { - // Parse hours. - // - h = 10 * (s[1] - '0') + (s[2] - '0'); - - // Parse minutes. - // - m = 10 * (s[4] - '0') + (s[5] - '0'); - - if (s[0] == '-') - { - h = -h; - m = -m; - } - } - } - } - - // gday - // - template <typename C> - void gday_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void gday_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - gday gday_pimpl<C>:: - post_gday () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - unsigned short day (0); - bool z (false); - short zh (0), zm (0); - - // gday := ---DD[Z|(+|-)HH:MM] - // - if (size >= 5) - { - day = 10 * (s[3] - '0') + (s[4] - '0'); - - if (size > 5) - { - bits::parse_tz (s + 5, size - 5, zh, zm); - z = true; - } - } - - return z ? gday (day, zh, zm) : gday (day); - } - - // gmonth - // - template <typename C> - void gmonth_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void gmonth_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - gmonth gmonth_pimpl<C>:: - post_gmonth () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - unsigned short month (0); - bool z (false); - short zh (0), zm (0); - - // gmonth := --MM[Z|(+|-)HH:MM] - // - if (size >= 4) - { - month = 10 * (s[2] - '0') + (s[3] - '0'); - - if (size > 4) - { - bits::parse_tz (s + 4, size - 4, zh, zm); - z = true; - } - } - - return z ? gmonth (month, zh, zm) : gmonth (month); - } - - // gyear - // - template <typename C> - void gyear_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void gyear_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - gyear gyear_pimpl<C>:: - post_gyear () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - int year (0); - bool z (false); - short zh (0), zm (0); - - // gyear := [-]CCYY[N]*[Z|(+|-)HH:MM] - // - - if (size >= 4) - { - // Find the end of the year token. - // - size_type pos (4); - for (; pos < size; ++pos) - { - C c (s[pos]); - - if (c == C ('Z') || c == C ('+') || c == C ('-')) - break; - } - - ro_string<C> year_fragment (s, pos); - zc_istream<C> is (year_fragment); - is >> year; - - if (pos < size) - { - bits::parse_tz (s + pos, size - pos, zh, zm); - z = true; - } - } - - return z ? gyear (year, zh, zm) : gyear (year); - } - - // gmonth_day - // - template <typename C> - void gmonth_day_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void gmonth_day_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - gmonth_day gmonth_day_pimpl<C>:: - post_gmonth_day () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - unsigned short month (0), day (0); - bool z (false); - short zh (0), zm (0); - - // gmonth_day := --MM-DD[Z|(+|-)HH:MM] - // - if (size >= 7) - { - month = 10 * (s[2] - '0') + (s[3] - '0'); - day = 10 * (s[5] - '0') + (s[6] - '0'); - - if (size > 7) - { - bits::parse_tz (s + 7, size - 7, zh, zm); - z = true; - } - } - - return z - ? gmonth_day (month, day, zh, zm) - : gmonth_day (month, day); - } - - // gyear_month - // - template <typename C> - void gyear_month_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void gyear_month_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - gyear_month gyear_month_pimpl<C>:: - post_gyear_month () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - int year (0); - unsigned short month (0); - bool z (false); - short zh (0), zm (0); - - // gyear_month := [-]CCYY[N]*-MM[Z|(+|-)HH:MM] - // - - if (size >= 7) - { - // Find the end of the year token. - // - size_type pos (tmp.find (C ('-'), 4)); - - if (pos != ro_string<C>::npos && (size - pos - 1) >= 2) - { - ro_string<C> year_fragment (s, pos); - zc_istream<C> yis (year_fragment); - yis >> year; - - month = 10 * (s[pos + 1] - '0') + (s[pos + 2] - '0'); - - pos += 3; - - if (pos < size) - { - bits::parse_tz (s + pos, size - pos, zh, zm); - z = true; - } - } - } - - return z - ? gyear_month (year, month, zh, zm) - : gyear_month (year, month); - } - - // date - // - template <typename C> - void date_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void date_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - date date_pimpl<C>:: - post_date () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - int year (0); - unsigned short month (0), day (0); - bool z (false); - short zh (0), zm (0); - - // date := [-]CCYY[N]*-MM-DD[Z|(+|-)HH:MM] - // - - if (size >= 10) - { - // Find the end of the year token. - // - size_type pos (tmp.find (C ('-'), 4)); - - if (pos != ro_string<C>::npos && (size - pos - 1) >= 5) - { - ro_string<C> year_fragment (s, pos); - zc_istream<C> yis (year_fragment); - yis >> year; - - month = 10 * (s[pos + 1] - '0') + (s[pos + 2] - '0'); - day = 10 * (s[pos + 4] - '0') + (s[pos + 5] - '0'); - - pos += 6; - - if (pos < size) - { - bits::parse_tz (s + pos, size - pos, zh, zm); - z = true; - } - } - } - - return z - ? date (year, month, day, zh, zm) - : date (year, month, day); - } - - // time - // - template <typename C> - void time_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void time_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - time time_pimpl<C>:: - post_time () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - unsigned short hours (0), minutes (0); - double seconds (0.0); - bool z (false); - short zh (0), zm (0); - - // time := HH:MM:SS[.S+][Z|(+|-)HH:MM] - // - - if (size >= 8) - { - hours = 10 * (s[0] - '0') + (s[1] - '0'); - minutes = 10 * (s[3] - '0') + (s[4] - '0'); - - // Find the end of the seconds fragment. - // - size_type pos (8); - for (; pos < size; ++pos) - { - C c (s[pos]); - - if (c == C ('Z') || c == C ('+') || c == C ('-')) - break; - } - - ro_string<C> seconds_fragment (s + 6, pos - 6); - zc_istream<C> sis (seconds_fragment); - sis >> seconds; - - if (pos < size) - { - bits::parse_tz (s + pos, size - pos, zh, zm); - z = true; - } - } - - return z - ? time (hours, minutes, seconds, zh, zm) - : time (hours, minutes, seconds); - } - - - // date_time - // - template <typename C> - void date_time_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void date_time_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - date_time date_time_pimpl<C>:: - post_date_time () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - int year (0); - unsigned short month (0), day (0), hours (0), minutes (0); - double seconds (0.0); - bool z (false); - short zh (0), zm (0); - - // date_time := [-]CCYY[N]*-MM-DDTHH:MM:SS[.S+][Z|(+|-)HH:MM] - // - - if (size >= 19) - { - // Find the end of the year token. - // - size_type pos (tmp.find (C ('-'), 4)); - - if (pos != ro_string<C>::npos && (size - pos - 1) >= 14) - { - ro_string<C> year_fragment (s, pos); - zc_istream<C> yis (year_fragment); - yis >> year; - - month = 10 * (s[pos + 1] - '0') + (s[pos + 2] - '0'); - day = 10 * (s[pos + 4] - '0') + (s[pos + 5] - '0'); - - pos += 7; // Point to the first H. - - hours = 10 * (s[pos] - '0') + (s[pos + 1] - '0'); - minutes = 10 * (s[pos + 3] - '0') + (s[pos + 4] - '0'); - - // Find the end of the seconds fragment. - // - pos += 6; // Point to the first S. - - size_type sec_end (pos + 2); - for (; sec_end < size; ++sec_end) - { - C c (s[sec_end]); - - if (c == C ('Z') || c == C ('+') || c == C ('-')) - break; - } - - ro_string<C> seconds_fragment (s + pos, sec_end - pos); - zc_istream<C> sis (seconds_fragment); - sis >> seconds; - - if (sec_end < size) - { - bits::parse_tz (s + sec_end, size - sec_end, zh, zm); - z = true; - } - } - } - - return z - ? date_time (year, month, day, hours, minutes, seconds, zh, zm) - : date_time (year, month, day, hours, minutes, seconds); - } - - // duration - // - template <typename C> - void duration_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void duration_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - namespace bits - { - template <typename C> - inline typename ro_string<C>::size_type - duration_delim (const C* s, - typename ro_string<C>::size_type pos, - typename ro_string<C>::size_type size) - { - const C* p (s + pos); - for (; p < (s + size); ++p) - { - if (*p == C ('Y') || *p == C ('D') || *p == C ('M') || - *p == C ('H') || *p == C ('M') || *p == C ('S') || - *p == C ('T')) - break; - } - - return p - s; - } - } - - template <typename C> - duration duration_pimpl<C>:: - post_duration () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - - bool negative (false); - unsigned int years (0), months (0), days (0), hours (0), minutes (0); - double seconds (0.0); - - // duration := [-]P[nY][nM][nD][TnHnMn[.n+]S] - // - const C* s (tmp.data ()); - - if (size >= 3) - { - size_type pos (0); - - if (s[0] == C ('-')) - { - negative = true; - pos++; - } - - pos++; // Skip 'P'. - - size_type del (bits::duration_delim (s, pos, size)); - - if (del != size && s[del] == C ('Y')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - is >> years; - - pos = del + 1; - del = bits::duration_delim (s, pos, size); - } - - if (del != size && s[del] == C ('M')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - is >> months; - - pos = del + 1; - del = bits::duration_delim (s, pos, size); - } - - if (del != size && s[del] == C ('D')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - is >> days; - - pos = del + 1; - del = bits::duration_delim (s, pos, size); - } - - if (del != size && s[del] == C ('T')) - { - pos = del + 1; - del = bits::duration_delim (s, pos, size); - - if (del != size && s[del] == C ('H')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - is >> hours; - - pos = del + 1; - del = bits::duration_delim (s, pos, size); - } - - if (del != size && s[del] == C ('M')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - is >> minutes; - - pos = del + 1; - del = bits::duration_delim (s, pos, size); - } - - if (del != size && s[del] == C ('S')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - is >> seconds; - } - } - } - - return duration ( - negative, years, months, days, hours, minutes, seconds); - } - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.hxx b/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.hxx deleted file mode 100644 index cac9d27..0000000 --- a/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.hxx +++ /dev/null @@ -1,647 +0,0 @@ -// file : xsd/cxx/parser/non-validating/xml-schema-pskel.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_HXX -#define XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_HXX - -#include <string> -#include <memory> // std::auto_ptr/unique_ptr - -#include <xsd/cxx/config.hxx> // XSD_AUTO_PTR - -#include <xsd/cxx/parser/xml-schema.hxx> -#include <xsd/cxx/parser/non-validating/parser.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace non_validating - { - // anyType and anySimpleType. All events are routed to the - // _any_* callbacks. - // - template <typename C> - struct any_type_pskel: complex_content<C> - { - virtual bool - _start_element_impl (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>*); - - virtual bool - _end_element_impl (const ro_string<C>&, - const ro_string<C>&); - - virtual bool - _attribute_impl (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&); - - virtual bool - _characters_impl (const ro_string<C>&); - - virtual void - post_any_type () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct any_simple_type_pskel: simple_content<C> - { - virtual bool - _characters_impl (const ro_string<C>&); - - virtual void - post_any_simple_type () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // Boolean. - // - template <typename C> - struct boolean_pskel: simple_content<C> - { - virtual bool - post_boolean () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // 8-bit - // - template <typename C> - struct byte_pskel: simple_content<C> - { - virtual signed char - post_byte () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct unsigned_byte_pskel: simple_content<C> - { - virtual unsigned char - post_unsigned_byte () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // 16-bit - // - template <typename C> - struct short_pskel: simple_content<C> - { - virtual short - post_short () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct unsigned_short_pskel: simple_content<C> - { - virtual unsigned short - post_unsigned_short () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // 32-bit - // - template <typename C> - struct int_pskel: simple_content<C> - { - virtual int - post_int () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct unsigned_int_pskel: simple_content<C> - { - virtual unsigned int - post_unsigned_int () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // 64-bit - // - template <typename C> - struct long_pskel: simple_content<C> - { - virtual long long - post_long () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct unsigned_long_pskel: simple_content<C> - { - virtual unsigned long long - post_unsigned_long () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // Arbitrary-length integers. - // - template <typename C> - struct integer_pskel: simple_content<C> - { - virtual long long - post_integer () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct negative_integer_pskel: simple_content<C> - { - virtual long long - post_negative_integer () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct non_positive_integer_pskel: simple_content<C> - { - virtual long long - post_non_positive_integer () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct positive_integer_pskel: simple_content<C> - { - virtual unsigned long long - post_positive_integer () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct non_negative_integer_pskel: simple_content<C> - { - virtual unsigned long long - post_non_negative_integer () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // Floats. - // - template <typename C> - struct float_pskel: simple_content<C> - { - virtual float - post_float () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct double_pskel: simple_content<C> - { - virtual double - post_double () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct decimal_pskel: simple_content<C> - { - virtual double - post_decimal () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // Strings. - // - template <typename C> - struct string_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_string () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct normalized_string_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_normalized_string () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct token_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_token () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct name_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_name () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct nmtoken_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_nmtoken () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct nmtokens_pskel: list_base<C> - { - virtual string_sequence<C> - post_nmtokens () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct ncname_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_ncname () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct id_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_id () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct idref_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_idref () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct idrefs_pskel: list_base<C> - { - virtual string_sequence<C> - post_idrefs () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - // Language. - // - template <typename C> - struct language_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_language () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - // URI. - // - template <typename C> - struct uri_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_uri () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - // QName. - // - template <typename C> - struct qname_pskel: simple_content<C> - { - virtual qname<C> - post_qname () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - // Base64 and hex binaries. - // - template <typename C> - struct base64_binary_pskel: simple_content<C> - { - virtual XSD_AUTO_PTR<buffer> - post_base64_binary () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct hex_binary_pskel: simple_content<C> - { - virtual XSD_AUTO_PTR<buffer> - post_hex_binary () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - // Time and date types. - // - template <typename C> - struct gday_pskel: simple_content<C> - { - virtual gday - post_gday () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct gmonth_pskel: simple_content<C> - { - virtual gmonth - post_gmonth () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct gyear_pskel: simple_content<C> - { - virtual gyear - post_gyear () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct gmonth_day_pskel: simple_content<C> - { - virtual gmonth_day - post_gmonth_day () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct gyear_month_pskel: simple_content<C> - { - virtual gyear_month - post_gyear_month () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct date_pskel: simple_content<C> - { - virtual date - post_date () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct time_pskel: simple_content<C> - { - virtual time - post_time () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct date_time_pskel: simple_content<C> - { - virtual date_time - post_date_time () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct duration_pskel: simple_content<C> - { - virtual duration - post_duration () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - } - } - } -} - -#include <xsd/cxx/parser/non-validating/xml-schema-pskel.txx> - -#endif // XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_HXX - -#include <xsd/cxx/parser/non-validating/xml-schema-pskel.ixx> diff --git a/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.ixx b/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.ixx deleted file mode 100644 index e6db6cb..0000000 --- a/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.ixx +++ /dev/null @@ -1,1247 +0,0 @@ -// file : xsd/cxx/parser/non-validating/xml-schema-pskel.ixx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) - -#ifndef XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_IXX_CHAR -#define XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_IXX_CHAR - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace non_validating - { - template<> - inline const char* any_type_pskel<char>:: - _static_type () - { - return "anyType http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* any_type_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* any_simple_type_pskel<char>:: - _static_type () - { - return "anySimpleType http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* any_simple_type_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* boolean_pskel<char>:: - _static_type () - { - return "boolean http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* boolean_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* byte_pskel<char>:: - _static_type () - { - return "byte http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* byte_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* unsigned_byte_pskel<char>:: - _static_type () - { - return "unsignedByte http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* unsigned_byte_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* short_pskel<char>:: - _static_type () - { - return "short http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* short_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* unsigned_short_pskel<char>:: - _static_type () - { - return "unsignedShort http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* unsigned_short_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* int_pskel<char>:: - _static_type () - { - return "int http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* int_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* unsigned_int_pskel<char>:: - _static_type () - { - return "unsignedInt http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* unsigned_int_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* long_pskel<char>:: - _static_type () - { - return "long http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* long_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* unsigned_long_pskel<char>:: - _static_type () - { - return "unsignedLong http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* unsigned_long_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* integer_pskel<char>:: - _static_type () - { - return "integer http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* integer_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* negative_integer_pskel<char>:: - _static_type () - { - return "negativeInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* negative_integer_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* non_positive_integer_pskel<char>:: - _static_type () - { - return "nonPositiveInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* non_positive_integer_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* positive_integer_pskel<char>:: - _static_type () - { - return "positiveInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* positive_integer_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* non_negative_integer_pskel<char>:: - _static_type () - { - return "nonNegativeInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* non_negative_integer_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* float_pskel<char>:: - _static_type () - { - return "float http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* float_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* double_pskel<char>:: - _static_type () - { - return "double http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* double_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* decimal_pskel<char>:: - _static_type () - { - return "decimal http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* decimal_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* string_pskel<char>:: - _static_type () - { - return "string http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* string_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* normalized_string_pskel<char>:: - _static_type () - { - return "normalizedString http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* normalized_string_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* token_pskel<char>:: - _static_type () - { - return "token http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* token_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* name_pskel<char>:: - _static_type () - { - return "Name http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* name_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* nmtoken_pskel<char>:: - _static_type () - { - return "NMTOKEN http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* nmtoken_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* nmtokens_pskel<char>:: - _static_type () - { - return "NMTOKENS http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* nmtokens_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* ncname_pskel<char>:: - _static_type () - { - return "NCName http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* ncname_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* id_pskel<char>:: - _static_type () - { - return "ID http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* id_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* idref_pskel<char>:: - _static_type () - { - return "IDREF http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* idref_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* idrefs_pskel<char>:: - _static_type () - { - return "IDREFS http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* idrefs_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* language_pskel<char>:: - _static_type () - { - return "language http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* language_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* uri_pskel<char>:: - _static_type () - { - return "anyURI http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* uri_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* qname_pskel<char>:: - _static_type () - { - return "QName http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* qname_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* base64_binary_pskel<char>:: - _static_type () - { - return "base64Binary http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* base64_binary_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* hex_binary_pskel<char>:: - _static_type () - { - return "hexBinary http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* hex_binary_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* gday_pskel<char>:: - _static_type () - { - return "gDay http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* gday_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* gmonth_pskel<char>:: - _static_type () - { - return "gMonth http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* gmonth_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* gyear_pskel<char>:: - _static_type () - { - return "gYear http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* gyear_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* gmonth_day_pskel<char>:: - _static_type () - { - return "gMonthDay http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* gmonth_day_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* gyear_month_pskel<char>:: - _static_type () - { - return "gYearMonth http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* gyear_month_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* date_pskel<char>:: - _static_type () - { - return "date http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* date_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* time_pskel<char>:: - _static_type () - { - return "time http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* time_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* date_time_pskel<char>:: - _static_type () - { - return "dateTime http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* date_time_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* duration_pskel<char>:: - _static_type () - { - return "duration http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* duration_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - } - } - } -} - -#endif // XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_IXX_CHAR -#endif // XSD_CXX_PARSER_USE_CHAR - - -#if defined(XSD_CXX_PARSER_USE_WCHAR) || !defined(XSD_CXX_PARSER_USE_CHAR) - -#ifndef XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_IXX_WCHAR -#define XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_IXX_WCHAR - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace non_validating - { - template<> - inline const wchar_t* any_type_pskel<wchar_t>:: - _static_type () - { - return L"anyType http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* any_type_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* any_simple_type_pskel<wchar_t>:: - _static_type () - { - return L"anySimpleType http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* any_simple_type_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* boolean_pskel<wchar_t>:: - _static_type () - { - return L"boolean http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* boolean_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* byte_pskel<wchar_t>:: - _static_type () - { - return L"byte http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* byte_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* unsigned_byte_pskel<wchar_t>:: - _static_type () - { - return L"unsignedByte http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* unsigned_byte_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* short_pskel<wchar_t>:: - _static_type () - { - return L"short http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* short_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* unsigned_short_pskel<wchar_t>:: - _static_type () - { - return L"unsignedShort http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* unsigned_short_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* int_pskel<wchar_t>:: - _static_type () - { - return L"int http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* int_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* unsigned_int_pskel<wchar_t>:: - _static_type () - { - return L"unsignedInt http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* unsigned_int_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* long_pskel<wchar_t>:: - _static_type () - { - return L"long http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* long_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* unsigned_long_pskel<wchar_t>:: - _static_type () - { - return L"unsignedLong http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* unsigned_long_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* integer_pskel<wchar_t>:: - _static_type () - { - return L"integer http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* integer_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* negative_integer_pskel<wchar_t>:: - _static_type () - { - return L"negativeInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* negative_integer_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* non_positive_integer_pskel<wchar_t>:: - _static_type () - { - return L"nonPositiveInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* non_positive_integer_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* positive_integer_pskel<wchar_t>:: - _static_type () - { - return L"positiveInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* positive_integer_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* non_negative_integer_pskel<wchar_t>:: - _static_type () - { - return L"nonNegativeInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* non_negative_integer_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* float_pskel<wchar_t>:: - _static_type () - { - return L"float http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* float_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* double_pskel<wchar_t>:: - _static_type () - { - return L"double http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* double_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* decimal_pskel<wchar_t>:: - _static_type () - { - return L"decimal http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* decimal_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* string_pskel<wchar_t>:: - _static_type () - { - return L"string http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* string_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* normalized_string_pskel<wchar_t>:: - _static_type () - { - return L"normalizedString http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* normalized_string_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* token_pskel<wchar_t>:: - _static_type () - { - return L"token http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* token_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* name_pskel<wchar_t>:: - _static_type () - { - return L"Name http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* name_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* nmtoken_pskel<wchar_t>:: - _static_type () - { - return L"NMTOKEN http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* nmtoken_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* nmtokens_pskel<wchar_t>:: - _static_type () - { - return L"NMTOKENS http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* nmtokens_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* ncname_pskel<wchar_t>:: - _static_type () - { - return L"NCName http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* ncname_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* id_pskel<wchar_t>:: - _static_type () - { - return L"ID http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* id_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* idref_pskel<wchar_t>:: - _static_type () - { - return L"IDREF http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* idref_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* idrefs_pskel<wchar_t>:: - _static_type () - { - return L"IDREFS http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* idrefs_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* language_pskel<wchar_t>:: - _static_type () - { - return L"language http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* language_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* uri_pskel<wchar_t>:: - _static_type () - { - return L"anyURI http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* uri_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* qname_pskel<wchar_t>:: - _static_type () - { - return L"QName http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* qname_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* base64_binary_pskel<wchar_t>:: - _static_type () - { - return L"base64Binary http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* base64_binary_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* hex_binary_pskel<wchar_t>:: - _static_type () - { - return L"hexBinary http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* hex_binary_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* gday_pskel<wchar_t>:: - _static_type () - { - return L"gDay http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* gday_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* gmonth_pskel<wchar_t>:: - _static_type () - { - return L"gMonth http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* gmonth_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* gyear_pskel<wchar_t>:: - _static_type () - { - return L"gYear http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* gyear_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* gmonth_day_pskel<wchar_t>:: - _static_type () - { - return L"gMonthDay http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* gmonth_day_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* gyear_month_pskel<wchar_t>:: - _static_type () - { - return L"gYearMonth http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* gyear_month_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* date_pskel<wchar_t>:: - _static_type () - { - return L"date http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* date_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* time_pskel<wchar_t>:: - _static_type () - { - return L"time http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* time_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* date_time_pskel<wchar_t>:: - _static_type () - { - return L"dateTime http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* date_time_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* duration_pskel<wchar_t>:: - _static_type () - { - return L"duration http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* duration_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - } - } - } -} - -#endif // XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_IXX_WCHAR -#endif // XSD_CXX_PARSER_USE_WCHAR diff --git a/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.txx b/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.txx deleted file mode 100644 index fb166d0..0000000 --- a/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.txx +++ /dev/null @@ -1,67 +0,0 @@ -// file : xsd/cxx/parser/non-validating/xml-schema-pskel.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace non_validating - { - // any_type - // - - template <typename C> - bool any_type_pskel<C>:: - _start_element_impl (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type) - { - this->_start_any_element (ns, name, type); - this->complex_content<C>::context_.top ().any_ = true; - return true; - } - - template <typename C> - bool any_type_pskel<C>:: - _end_element_impl (const ro_string<C>& ns, const ro_string<C>& name) - { - this->complex_content<C>::context_.top ().any_ = false; - this->_end_any_element (ns, name); - return true; - } - - - template <typename C> - bool any_type_pskel<C>:: - _attribute_impl (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value) - { - this->_any_attribute (ns, name, value); - return true; - } - - template <typename C> - bool any_type_pskel<C>:: - _characters_impl (const ro_string<C>& s) - { - this->_any_characters (s); - return true; - } - - // any_simple_type - // - - template <typename C> - bool any_simple_type_pskel<C>:: - _characters_impl (const ro_string<C>& s) - { - this->_any_characters (s); - return true; - } - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/schema-exceptions.hxx b/libxsd/xsd/cxx/parser/schema-exceptions.hxx deleted file mode 100644 index 6145167..0000000 --- a/libxsd/xsd/cxx/parser/schema-exceptions.hxx +++ /dev/null @@ -1,185 +0,0 @@ -// file : xsd/cxx/parser/schema-exceptions.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_HXX -#define XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_HXX - -#include <string> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - template <typename C> - struct schema_exception - { - public: - virtual - ~schema_exception () - { - } - - unsigned long - line () const - { - return line_; - } - - void - line (unsigned long l) - { - line_ = l; - } - - unsigned long - column () const - { - return column_; - } - - void - column (unsigned long c) - { - column_ = c; - } - - const std::basic_string<C>& - id () const - { - return id_; - } - - void - id (const std::basic_string<C>& id) - { - id_ = id; - } - - virtual std::basic_string<C> - message () const = 0; - - protected: - unsigned long line_; - unsigned long column_; - std::basic_string<C> id_; - }; - - // - // - template <typename C> - struct expected_element: schema_exception<C> - { - virtual - ~expected_element (); - - expected_element (const std::basic_string<C>& expected_namespace, - const std::basic_string<C>& expected_name); - - expected_element (const std::basic_string<C>& expected_namespace, - const std::basic_string<C>& expected_name, - const std::basic_string<C>& encountered_namespace, - const std::basic_string<C>& encountered_name); - - const std::basic_string<C>& - expected_namespace () const - { - return expected_namespace_; - } - - const std::basic_string<C>& - expected_name () const - { - return expected_name_; - } - - // Encountered element namespace and name are empty if none - // encountered. - // - const std::basic_string<C>& - encountered_namespace () const - { - return encountered_namespace_; - } - - const std::basic_string<C>& - encountered_name () const - { - return encountered_name_; - } - - virtual std::basic_string<C> - message () const; - - private: - std::basic_string<C> expected_namespace_; - std::basic_string<C> expected_name_; - - std::basic_string<C> encountered_namespace_; - std::basic_string<C> encountered_name_; - }; - - - // - // - template <typename C> - struct unexpected_element: schema_exception<C> - { - virtual - ~unexpected_element (); - - unexpected_element (const std::basic_string<C>& encountered_namespace, - const std::basic_string<C>& encountered_name); - - const std::basic_string<C>& - encountered_namespace () const - { - return encountered_namespace_; - } - - const std::basic_string<C>& - encountered_name () const - { - return encountered_name_; - } - - virtual std::basic_string<C> - message () const; - - private: - std::basic_string<C> encountered_namespace_; - std::basic_string<C> encountered_name_; - }; - - // - // - template <typename C> - struct dynamic_type: schema_exception<C> - { - virtual - ~dynamic_type () throw (); - - dynamic_type (const std::basic_string<C>& type); - - const std::basic_string<C>& - type () const - { - return type_; - } - - virtual std::basic_string<C> - message () const; - - private: - std::basic_string<C> type_; - }; - } - } -} - -#include <xsd/cxx/parser/schema-exceptions.txx> - -#endif // XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_HXX - -#include <xsd/cxx/parser/schema-exceptions.ixx> diff --git a/libxsd/xsd/cxx/parser/schema-exceptions.ixx b/libxsd/xsd/cxx/parser/schema-exceptions.ixx deleted file mode 100644 index fdf0e99..0000000 --- a/libxsd/xsd/cxx/parser/schema-exceptions.ixx +++ /dev/null @@ -1,143 +0,0 @@ -// file : xsd/cxx/parser/schema-exceptions.ixx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) - -#ifndef XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_IXX_CHAR -#define XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_IXX_CHAR - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // expected_element - // - template<> - inline - std::basic_string<char> expected_element<char>:: - message () const - { - std::basic_string<char> r ("expected element '"); - r += expected_namespace_; - r += expected_namespace_.empty () ? "" : "#"; - r += expected_name_; - r += "'"; - - if (!encountered_name_.empty ()) - { - r += " instead of '"; - r += encountered_namespace_; - r += encountered_namespace_.empty () ? "" : "#"; - r += encountered_name_; - r += "'"; - } - - return r; - } - - // unexpected_element - // - template<> - inline - std::basic_string<char> unexpected_element<char>:: - message () const - { - std::basic_string<char> r ("unexpected element '"); - r += encountered_namespace_; - r += encountered_namespace_.empty () ? "" : "#"; - r += encountered_name_; - r += "'"; - return r; - } - - // dynamic_type - // - template<> - inline - std::basic_string<char> dynamic_type<char>:: - message () const - { - std::basic_string<char> r ("invalid xsi:type '"); - r += type_; - r += "'"; - return r; - } - } - } -} - -#endif // XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_IXX_CHAR -#endif // XSD_CXX_PARSER_USE_CHAR - - -#if defined(XSD_CXX_PARSER_USE_WCHAR) || !defined(XSD_CXX_PARSER_USE_CHAR) - -#ifndef XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_IXX_WCHAR -#define XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_IXX_WCHAR - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // expected_element - // - template<> - inline - std::basic_string<wchar_t> expected_element<wchar_t>:: - message () const - { - std::basic_string<wchar_t> r (L"expected element '"); - r += expected_namespace_; - r += expected_namespace_.empty () ? L"" : L"#"; - r += expected_name_; - r += L"'"; - - if (!encountered_name_.empty ()) - { - r += L" instead of '"; - r += encountered_namespace_; - r += encountered_namespace_.empty () ? L"" : L"#"; - r += encountered_name_; - r += L"'"; - } - - return r; - } - - // unexpected_element - // - template<> - inline - std::basic_string<wchar_t> unexpected_element<wchar_t>:: - message () const - { - std::basic_string<wchar_t> r (L"unexpected element '"); - r += encountered_namespace_; - r += encountered_namespace_.empty () ? L"" : L"#"; - r += encountered_name_; - r += L"'"; - return r; - } - - // dynamic_type - // - template<> - inline - std::basic_string<wchar_t> dynamic_type<wchar_t>:: - message () const - { - std::basic_string<wchar_t> r (L"invalid xsi:type '"); - r += type_; - r += L"'"; - return r; - } - } - } -} - -#endif // XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_IXX_WCHAR -#endif // XSD_CXX_PARSER_USE_WCHAR diff --git a/libxsd/xsd/cxx/parser/schema-exceptions.txx b/libxsd/xsd/cxx/parser/schema-exceptions.txx deleted file mode 100644 index 2e548ab..0000000 --- a/libxsd/xsd/cxx/parser/schema-exceptions.txx +++ /dev/null @@ -1,73 +0,0 @@ -// file : xsd/cxx/parser/schema-exceptions.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // expected_element - // - template <typename C> - expected_element<C>:: - ~expected_element () - { - } - - template <typename C> - expected_element<C>:: - expected_element (const std::basic_string<C>& expected_namespace, - const std::basic_string<C>& expected_name) - : expected_namespace_ (expected_namespace), - expected_name_ (expected_name) - { - } - - template <typename C> - expected_element<C>:: - expected_element (const std::basic_string<C>& expected_namespace, - const std::basic_string<C>& expected_name, - const std::basic_string<C>& encountered_namespace, - const std::basic_string<C>& encountered_name) - : expected_namespace_ (expected_namespace), - expected_name_ (expected_name), - encountered_namespace_ (encountered_namespace), - encountered_name_ (encountered_name) - { - } - - // unexpected_element - // - template <typename C> - unexpected_element<C>:: - ~unexpected_element () - { - } - - template <typename C> - unexpected_element<C>:: - unexpected_element (const std::basic_string<C>& encountered_namespace, - const std::basic_string<C>& encountered_name) - : encountered_namespace_ (encountered_namespace), - encountered_name_ (encountered_name) - { - } - - // dynamic_type - // - template <typename C> - dynamic_type<C>:: - ~dynamic_type () throw () - { - } - - template <typename C> - dynamic_type<C>:: - dynamic_type (const std::basic_string<C>& type) - : type_ (type) - { - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/substitution-map.hxx b/libxsd/xsd/cxx/parser/substitution-map.hxx deleted file mode 100644 index 07619b7..0000000 --- a/libxsd/xsd/cxx/parser/substitution-map.hxx +++ /dev/null @@ -1,239 +0,0 @@ -// file : xsd/cxx/parser/substitution-map.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_SUBSTITUTION_MAP_HXX -#define XSD_CXX_PARSER_SUBSTITUTION_MAP_HXX - -#include <map> -#include <cstddef> // std::size_t - -#include <xsd/cxx/ro-string.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - template <typename C> - struct substitution_map_key - { - substitution_map_key (const C* ns, const C* name) - : ns_ (ns), name_ (name) - { - } - - substitution_map_key (const ro_string<C>& ns, - const ro_string<C>& name) - : ns_ (ns.data (), ns.size ()), - name_ (name.data (), name.size ()) - { - } - - substitution_map_key (const substitution_map_key& x) - : ns_ (x.ns_.data (), x.ns_.size ()), - name_ (x.name_.data (), x.name_.size ()) - { - } - - private: - substitution_map_key& - operator= (const substitution_map_key&); - - public: - const ro_string<C>& - ns () const - { - return ns_; - } - - const ro_string<C>& - name () const - { - return name_; - } - - private: - const ro_string<C> ns_; - const ro_string<C> name_; - }; - - template <typename C> - inline bool - operator< (const substitution_map_key<C>& x, - const substitution_map_key<C>& y) - { - int r (x.name ().compare (y.name ())); - return r < 0 || (r == 0 && x.ns () < y.ns ()); - } - - template <typename C> - struct substitution_map_value - { - substitution_map_value (const C* ns, const C* name, const C* type) - : ns_ (ns), name_ (name), type_ (type) - { - } - - substitution_map_value (const substitution_map_value& x) - : ns_ (x.ns_.data (), x.ns_.size ()), - name_ (x.name_.data (), x.name_.size ()), - type_ (x.type_.data (), x.type_.size ()) - { - } - - substitution_map_value& - operator= (const substitution_map_value& x) - { - if (this != &x) - { - ns_.assign (x.ns_.data (), x.ns_.size ()); - name_.assign (x.name_.data (), x.name_.size ()); - type_.assign (x.type_.data (), x.type_.size ()); - } - - return *this; - } - - public: - const ro_string<C>& - ns () const - { - return ns_; - } - - const ro_string<C>& - name () const - { - return name_; - } - - const ro_string<C>& - type () const - { - return type_; - } - - private: - ro_string<C> ns_; - ro_string<C> name_; - ro_string<C> type_; - }; - - template <typename C> - struct substitution_map - { - void - insert (const C* member_ns, - const C* member_name, - const C* root_ns, - const C* root_name, - const C* member_type) - { - key k (member_ns, member_name); - value v (root_ns, root_name, member_type); - map_.insert (std::pair<key, value> (k, v)); - } - - void - erase (const C* member_ns, const C* member_name) - { - map_.erase (key (member_ns, member_name)); - } - - // Check and get the type set if found. - // - bool - check (const ro_string<C>& ns, - const ro_string<C>& name, - const C* root_ns, - const C* root_name, - const ro_string<C>*& type) const - { - - return map_.empty () - ? false - : check_ (ns, name, root_ns, root_name, &type); - } - - // Check but don't care about the type. - // - bool - check (const ro_string<C>& ns, - const ro_string<C>& name, - const C* root_ns, - const C* root_name) const - { - - return map_.empty () - ? false - : check_ (ns, name, root_ns, root_name, 0); - } - - private: - bool - check_ (const ro_string<C>& ns, - const ro_string<C>& name, - const C* root_ns, - const C* root_name, - const ro_string<C>** type) const; - - private: - typedef substitution_map_key<C> key; - typedef substitution_map_value<C> value; - typedef std::map<key, value> map; - - map map_; - }; - - - // Translation unit initializer. - // - template<typename C> - struct substitution_map_init - { - static substitution_map<C>* map; - static std::size_t count; - - substitution_map_init (); - ~substitution_map_init (); - }; - - template<typename C> - substitution_map<C>* substitution_map_init<C>::map = 0; - - template<typename C> - std::size_t substitution_map_init<C>::count = 0; - - template<typename C> - inline substitution_map<C>& - substitution_map_instance () - { - return *substitution_map_init<C>::map; - } - - - // Map entry initializer. - // - template<typename C> - struct substitution_map_entry - { - substitution_map_entry (const C* member_ns, - const C* member_name, - const C* root_ns, - const C* root_name, - const C* member_type); - - ~substitution_map_entry (); - - private: - const C* member_ns_; - const C* member_name_; - }; - } - } -} - -#include <xsd/cxx/parser/substitution-map.txx> - -#endif // XSD_CXX_PARSER_SUBSTITUTION_MAP_HXX diff --git a/libxsd/xsd/cxx/parser/substitution-map.txx b/libxsd/xsd/cxx/parser/substitution-map.txx deleted file mode 100644 index 5e9e92d..0000000 --- a/libxsd/xsd/cxx/parser/substitution-map.txx +++ /dev/null @@ -1,82 +0,0 @@ -// file : xsd/cxx/parser/substitution-map.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace parser - { - template <typename C> - bool substitution_map<C>:: - check_ (const ro_string<C>& ns, - const ro_string<C>& name, - const C* root_ns, - const C* root_name, - const ro_string<C>** type) const - { - key k (ns, name); - typename map::const_iterator i (map_.find (k)); - - if (i == map_.end ()) - return false; - - const value& v (i->second); - - bool r (false); - - if (v.name () == root_name && v.ns () == root_ns) - r = true; - else - r = check_ (v.ns (), v.name (), root_ns, root_name, 0); - - if (r && type != 0 && *type == 0) - *type = &v.type (); - - return r; - } - - // substitution_map_init - // - template<typename C> - substitution_map_init<C>:: - substitution_map_init () - { - if (count == 0) - map = new substitution_map<C>; - - ++count; - } - - template<typename C> - substitution_map_init<C>:: - ~substitution_map_init () - { - if (--count == 0) - delete map; - } - - // substitution_map_entry - // - template<typename C> - substitution_map_entry<C>:: - substitution_map_entry (const C* member_ns, - const C* member_name, - const C* root_ns, - const C* root_name, - const C* member_type) - : member_ns_ (member_ns), member_name_ (member_name) - { - substitution_map_instance<C> ().insert ( - member_ns, member_name, root_ns, root_name, member_type); - } - - template<typename C> - substitution_map_entry<C>:: - ~substitution_map_entry () - { - substitution_map_instance<C> ().erase (member_ns_, member_name_); - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/validating/exceptions.hxx b/libxsd/xsd/cxx/parser/validating/exceptions.hxx deleted file mode 100644 index 2201a8b..0000000 --- a/libxsd/xsd/cxx/parser/validating/exceptions.hxx +++ /dev/null @@ -1,151 +0,0 @@ -// file : xsd/cxx/parser/validating/exceptions.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_HXX -#define XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_HXX - -#include <string> - -#include <xsd/cxx/parser/schema-exceptions.hxx> -#include <xsd/cxx/ro-string.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - // - // - template <typename C> - struct expected_attribute: schema_exception<C> - { - virtual - ~expected_attribute (); - - expected_attribute (const std::basic_string<C>& expected_namespace, - const std::basic_string<C>& expected_name); - - const std::basic_string<C>& - expected_namespace () const - { - return expected_namespace_; - } - - const std::basic_string<C>& - expected_name () const - { - return expected_name_; - } - - virtual std::basic_string<C> - message () const; - - private: - std::basic_string<C> expected_namespace_; - std::basic_string<C> expected_name_; - }; - - // - // - template <typename C> - struct unexpected_attribute: schema_exception<C> - { - virtual - ~unexpected_attribute (); - - unexpected_attribute ( - const std::basic_string<C>& encountered_namespace, - const std::basic_string<C>& encountered_name); - - - const std::basic_string<C>& - encountered_namespace () const - { - return encountered_namespace_; - } - - const std::basic_string<C>& - encountered_name () const - { - return encountered_name_; - } - - virtual std::basic_string<C> - message () const; - - private: - std::basic_string<C> encountered_namespace_; - std::basic_string<C> encountered_name_; - }; - - - // - // - template <typename C> - struct unexpected_characters: schema_exception<C> - { - virtual - ~unexpected_characters (); - - unexpected_characters (const std::basic_string<C>& s); - - const std::basic_string<C>& - characters () const - { - return characters_; - } - - virtual std::basic_string<C> - message () const; - - private: - std::basic_string<C> characters_; - }; - - // - // - template <typename C> - struct invalid_value: schema_exception<C> - { - virtual - ~invalid_value (); - - invalid_value (const C* type, const std::basic_string<C>& value); - - invalid_value (const C* type, const ro_string<C>& value); - - invalid_value (const std::basic_string<C>& type, - const std::basic_string<C>& value); - - const std::basic_string<C>& - type () const - { - return type_; - } - - const std::basic_string<C>& - value () const - { - return value_; - } - - virtual std::basic_string<C> - message () const; - - private: - std::basic_string<C> type_; - std::basic_string<C> value_; - }; - } - } - } -} - -#include <xsd/cxx/parser/validating/exceptions.txx> - -#endif // XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_HXX - -#include <xsd/cxx/parser/validating/exceptions.ixx> diff --git a/libxsd/xsd/cxx/parser/validating/exceptions.ixx b/libxsd/xsd/cxx/parser/validating/exceptions.ixx deleted file mode 100644 index f46dcd1..0000000 --- a/libxsd/xsd/cxx/parser/validating/exceptions.ixx +++ /dev/null @@ -1,161 +0,0 @@ -// file : xsd/cxx/parser/validating/exceptions.ixx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) - -#ifndef XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_IXX_CHAR -#define XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_IXX_CHAR - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - // expected_attribute - // - template<> - inline - std::basic_string<char> expected_attribute<char>:: - message () const - { - std::basic_string<char> r ("expected attribute '"); - r += expected_namespace_; - r += expected_namespace_.empty () ? "" : "#"; - r += expected_name_; - r += "'"; - return r; - } - - // unexpected_attribute - // - template<> - inline - std::basic_string<char> unexpected_attribute<char>:: - message () const - { - std::basic_string<char> r ("unexpected attribute '"); - r += encountered_namespace_; - r += encountered_namespace_.empty () ? "" : "#"; - r += encountered_name_; - r += "'"; - return r; - } - - // unexpected_characters - // - template<> - inline - std::basic_string<char> unexpected_characters<char>:: - message () const - { - std::basic_string<char> r ("unexpected characters '"); - r += characters_; - r += "'"; - return r; - } - - // invalid_value - // - template<> - inline - std::basic_string<char> invalid_value<char>:: - message () const - { - std::basic_string<char> r ("'"); - r += value_; - r += "' is not a valid value representation "; - r += "for type '"; - r += type_; - r += "'"; - return r; - } - } - } - } -} - -#endif // XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_IXX_CHAR -#endif // XSD_CXX_PARSER_USE_CHAR - - -#if defined(XSD_CXX_PARSER_USE_WCHAR) || !defined(XSD_CXX_PARSER_USE_CHAR) - -#ifndef XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_IXX_WCHAR -#define XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_IXX_WCHAR - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - // expected_attribute - // - template<> - inline - std::basic_string<wchar_t> expected_attribute<wchar_t>:: - message () const - { - std::basic_string<wchar_t> r (L"expected attribute '"); - r += expected_namespace_; - r += expected_namespace_.empty () ? L"" : L"#"; - r += expected_name_; - r += L"'"; - return r; - } - - // unexpected_attribute - // - template<> - inline - std::basic_string<wchar_t> unexpected_attribute<wchar_t>:: - message () const - { - std::basic_string<wchar_t> r (L"unexpected attribute '"); - r += encountered_namespace_; - r += encountered_namespace_.empty () ? L"" : L"#"; - r += encountered_name_; - r += L"'"; - return r; - } - - // unexpected_characters - // - template<> - inline - std::basic_string<wchar_t> unexpected_characters<wchar_t>:: - message () const - { - std::basic_string<wchar_t> r (L"unexpected characters '"); - r += characters_; - r += L"'"; - return r; - } - - // invalid_value - // - template<> - inline - std::basic_string<wchar_t> invalid_value<wchar_t>:: - message () const - { - std::basic_string<wchar_t> r (L"'"); - r += value_; - r += L"' is not a valid value representation "; - r += L"for type '"; - r += type_; - r += L"'"; - return r; - } - } - } - } -} - -#endif // XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_IXX_WCHAR -#endif // XSD_CXX_PARSER_USE_WCHAR diff --git a/libxsd/xsd/cxx/parser/validating/exceptions.txx b/libxsd/xsd/cxx/parser/validating/exceptions.txx deleted file mode 100644 index f6b39e8..0000000 --- a/libxsd/xsd/cxx/parser/validating/exceptions.txx +++ /dev/null @@ -1,95 +0,0 @@ -// file : xsd/cxx/parser/validating/exceptions.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - // expected_attribute - // - template <typename C> - expected_attribute<C>:: - ~expected_attribute () - { - } - - template <typename C> - expected_attribute<C>:: - expected_attribute (const std::basic_string<C>& expected_namespace, - const std::basic_string<C>& expected_name) - : expected_namespace_ (expected_namespace), - expected_name_ (expected_name) - { - } - - // unexpected_attribute - // - template <typename C> - unexpected_attribute<C>:: - ~unexpected_attribute () - { - } - - template <typename C> - unexpected_attribute<C>:: - unexpected_attribute (const std::basic_string<C>& encountered_namespace, - const std::basic_string<C>& encountered_name) - : encountered_namespace_ (encountered_namespace), - encountered_name_ (encountered_name) - { - } - - // unexpected_characters - // - template <typename C> - unexpected_characters<C>:: - ~unexpected_characters () - { - } - - template <typename C> - unexpected_characters<C>:: - unexpected_characters (const std::basic_string<C>& s) - : characters_ (s) - { - } - - // invalid_value - // - template <typename C> - invalid_value<C>:: - ~invalid_value () - { - } - - template <typename C> - invalid_value<C>:: - invalid_value (const C* type, - const std::basic_string<C>& value) - : type_ (type), value_ (value) - { - } - - template <typename C> - invalid_value<C>:: - invalid_value (const C* type, - const ro_string<C>& value) - : type_ (type), value_ (value) - { - } - - template <typename C> - invalid_value<C>:: - invalid_value (const std::basic_string<C>& type, - const std::basic_string<C>& value) - : type_ (type), value_ (value) - { - } - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/validating/inheritance-map.hxx b/libxsd/xsd/cxx/parser/validating/inheritance-map.hxx deleted file mode 100644 index 1b338ec..0000000 --- a/libxsd/xsd/cxx/parser/validating/inheritance-map.hxx +++ /dev/null @@ -1,99 +0,0 @@ -// file : xsd/cxx/parser/validating/inheritance-map.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_VALIDATING_INHERITANCE_MAP_HXX -#define XSD_CXX_PARSER_VALIDATING_INHERITANCE_MAP_HXX - -#include <map> -#include <cstddef> // std::size_t - -#include <xsd/cxx/ro-string.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - template <typename C> - struct string_comparison - { - bool - operator() (const C* x, const C* y) const - { - ro_string<C> s (x); - return s.compare (y) < 0; - } - }; - - template <typename C> - struct inheritance_map - { - void - insert (const C* derived, const C* base) - { - map_[derived] = base; - } - - void - erase (const C* derived) - { - map_.erase (derived); - } - - bool - check (const C* derived, const ro_string<C>& base) const; - - private: - typedef std::map<const C*, const C*, string_comparison<C> > map; - map map_; - }; - - - // Translation unit initializer. - // - template<typename C> - struct inheritance_map_init - { - static inheritance_map<C>* map; - static std::size_t count; - - inheritance_map_init (); - ~inheritance_map_init (); - }; - - template<typename C> - inheritance_map<C>* inheritance_map_init<C>::map = 0; - - template<typename C> - std::size_t inheritance_map_init<C>::count = 0; - - template<typename C> - inline inheritance_map<C>& - inheritance_map_instance () - { - return *inheritance_map_init<C>::map; - } - - - // Map entry initializer. - // - template<typename C> - struct inheritance_map_entry - { - inheritance_map_entry (const C* derived, const C* base); - ~inheritance_map_entry (); - - private: - const C* derived_; - }; - } - } - } -} - -#include <xsd/cxx/parser/validating/inheritance-map.txx> - -#endif // XSD_CXX_PARSER_VALIDATING_INHERITANCE_MAP_HXX diff --git a/libxsd/xsd/cxx/parser/validating/inheritance-map.txx b/libxsd/xsd/cxx/parser/validating/inheritance-map.txx deleted file mode 100644 index f141d9e..0000000 --- a/libxsd/xsd/cxx/parser/validating/inheritance-map.txx +++ /dev/null @@ -1,71 +0,0 @@ -// file : xsd/cxx/parser/validating/inheritance-map.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - template <typename C> - bool inheritance_map<C>:: - check (const C* derived, const ro_string<C>& base) const - { - if (base == derived) - return true; - - typename map::const_iterator i (map_.find (derived)); - - if (i != map_.end ()) - { - if (base == i->second) - return true; - else - return check (i->second, base); - } - - return false; - } - - // inheritance_map_init - // - template<typename C> - inheritance_map_init<C>:: - inheritance_map_init () - { - if (count == 0) - map = new inheritance_map<C>; - - ++count; - } - - template<typename C> - inheritance_map_init<C>:: - ~inheritance_map_init () - { - if (--count == 0) - delete map; - } - - // inheritance_map_entry - // - template<typename C> - inheritance_map_entry<C>:: - inheritance_map_entry (const C* derived, const C* base) - : derived_ (derived) - { - inheritance_map_instance<C> ().insert (derived, base); - } - - template<typename C> - inheritance_map_entry<C>:: - ~inheritance_map_entry () - { - inheritance_map_instance<C> ().erase (derived_); - } - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/validating/parser.hxx b/libxsd/xsd/cxx/parser/validating/parser.hxx deleted file mode 100644 index 4ababce..0000000 --- a/libxsd/xsd/cxx/parser/validating/parser.hxx +++ /dev/null @@ -1,469 +0,0 @@ -// file : xsd/cxx/parser/validating/parser.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_VALIDATING_PARSER_HXX -#define XSD_CXX_PARSER_VALIDATING_PARSER_HXX - -#include <stack> -#include <cstddef> // std::size_t -#include <cstring> // std::memcpy - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/parser/elements.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - // - // - template <typename C> - struct empty_content: parser_base<C> - { - // These functions are called when wildcard content - // is encountered. Use them to handle mixed content - // models, any/anyAttribute, and anyType/anySimpleType. - // By default these functions do nothing. - // - - // The type argument is a type name and namespace from the - // xsi:type attribute in the form "<name> <namespace>" with - // the space and namespace part absent if the type does not - // have a namespace or 0 if xsi:type is not present. - // - virtual void - _start_any_element (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type); - - virtual void - _end_any_element (const ro_string<C>& ns, - const ro_string<C>& name); - - virtual void - _any_attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value); - - virtual void - _any_characters (const ro_string<C>&); - - - // - // - virtual bool - _start_element_impl (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>*); - - virtual bool - _end_element_impl (const ro_string<C>&, - const ro_string<C>&); - - virtual bool - _attribute_impl (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&); - - virtual bool - _characters_impl (const ro_string<C>&); - - - // - // - virtual void - _start_element (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>*); - - virtual void - _end_element (const ro_string<C>&, - const ro_string<C>&); - - virtual void - _attribute (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&); - - virtual void - _characters (const ro_string<C>&); - - - // - // - virtual void - _expected_element (const C* expected_ns, - const C* expected_name); - - virtual void - _expected_element (const C* expected_ns, - const C* expected_name, - const ro_string<C>& encountered_ns, - const ro_string<C>& encountered_name); - - virtual void - _unexpected_element (const ro_string<C>& ns, - const ro_string<C>& name); - - virtual void - _expected_attribute (const C* expected_ns, - const C* expected_name); - - virtual void - _unexpected_attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value); - - virtual void - _unexpected_characters (const ro_string<C>&); - }; - - - // - // - template <typename C> - struct simple_content: empty_content<C> - { - // - // - virtual void - _attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value); - - virtual void - _characters (const ro_string<C>&); - - // - // - virtual bool - _attribute_impl (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&); - - // - // - virtual void - _pre_impl (); - - virtual void - _post_impl (); - - - // Implementation callbacks. - // - virtual void - _pre_a_validate (); - - virtual void - _post_a_validate (); - - - // Attribute validation: during phase one we are searching for - // matching attributes (Structures, section 3.4.4, clause 2.1). - // During phase two we are searching for attribute wildcards - // (section 3.4.4, clause 2.2). Both phases run across - // inheritance hierarchy from derived to base for extension - // only. Both functions return true if the match was found and - // validation has been performed. - // - virtual bool - _attribute_impl_phase_one (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value); - - virtual bool - _attribute_impl_phase_two (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value); - }; - - - // - // - template <typename C> - struct complex_content: empty_content<C> - { - // - // - virtual void - _start_element (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type); - - virtual void - _end_element (const ro_string<C>& ns, - const ro_string<C>& name); - - virtual void - _attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value); - - virtual void - _characters (const ro_string<C>&); - - // - // - virtual bool - _attribute_impl (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&); - - // - // - virtual void - _pre_impl (); - - virtual void - _post_impl (); - - - // Implementation callbacks. - // - virtual void - _pre_e_validate (); - - virtual void - _post_e_validate (); - - virtual void - _pre_a_validate (); - - virtual void - _post_a_validate (); - - - // Attribute validation: during phase one we are searching for - // matching attributes (Structures, section 3.4.4, clause 2.1). - // During phase two we are searching for attribute wildcards - // (section 3.4.4, clause 2.2). Both phases run across - // inheritance hierarchy from derived to base for extension - // only. Both functions return true if the match was found and - // validation has been performed. - // - virtual bool - _attribute_impl_phase_one (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value); - - virtual bool - _attribute_impl_phase_two (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value); - protected: - struct state - { - state () - : any_ (false), depth_ (0), parser_ (0) - { - } - - bool any_; - std::size_t depth_; - parser_base<C>* parser_; - }; - - // Optimized state stack for non-recursive case (one element). - // - struct state_stack - { - state_stack () - : size_ (0) - { - } - - void - push (const state& s) - { - if (size_ > 0) - rest_.push (top_); - - top_ = s; - ++size_; - } - - void - pop () - { - if (size_ > 1) - { - top_ = rest_.top (); - rest_.pop (); - } - - --size_; - } - - const state& - top () const - { - return top_; - } - - state& - top () - { - return top_; - } - - state& - under_top () - { - return rest_.top (); - } - - private: - state top_; - std::stack<state> rest_; - std::size_t size_; - }; - - state_stack context_; - }; - - // Base for xsd:list. - // - template <typename C> - struct list_base: simple_content<C> - { - virtual void - _xsd_parse_item (const ro_string<C>&) = 0; - - virtual void - _pre_impl (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post_impl (); - - protected: - std::basic_string<C> buf_; - }; - } - - // POD stack with pre-allocated first element. You may - // need to pad your elements to get the proper alignment. - // - struct pod_stack - { - ~pod_stack () - { - delete[] data_; - } - - pod_stack (std::size_t element_size, void* first_element) - : el_size_ (element_size), first_ (first_element), - data_ (0), size_ (0), capacity_ (0) - { - } - - public: - void - pop () - { - --size_; - } - - void - push () - { - if (size_ > capacity_) - grow (); - - ++size_; - } - - void* - top () - { - return size_ == 1 ? first_ : data_ + (size_ - 1) * el_size_; - } - - void* - under_top () - { - return size_ == 2 ? first_ : data_ + (size_ - 2) * el_size_; - } - - std::size_t - element_size () const - { - return el_size_; - } - - private: - void - grow () - { - std::size_t c (capacity_ ? capacity_ * 2 : 8); - char* d (new char[c * el_size_]); - - if (size_ > 1) - std::memcpy (d, data_, (size_ - 1) * el_size_); - - delete[] data_; - - data_ = d; - capacity_ = c; - } - - private: - std::size_t el_size_; - void* first_; - char* data_; - std::size_t size_; - std::size_t capacity_; - }; - - namespace validating - { - // Validation state stack for the 'all' particle. - // - struct all_stack - { - all_stack (std::size_t n, unsigned char* first) - : stack_ (n, first) - { - } - - void - push () - { - stack_.push (); - - unsigned char* p (static_cast<unsigned char*> (stack_.top ())); - - for (std::size_t i (0); i < stack_.element_size (); ++i) - p[i] = 0; - } - - void - pop () - { - stack_.pop (); - } - - unsigned char* - top () - { - return static_cast<unsigned char*> (stack_.top ()); - } - - private: - pod_stack stack_; - }; - } - } - } -} - -#include <xsd/cxx/parser/validating/parser.txx> - -#endif // XSD_CXX_PARSER_VALIDATING_PARSER_HXX diff --git a/libxsd/xsd/cxx/parser/validating/parser.txx b/libxsd/xsd/cxx/parser/validating/parser.txx deleted file mode 100644 index fa1d1c4..0000000 --- a/libxsd/xsd/cxx/parser/validating/parser.txx +++ /dev/null @@ -1,665 +0,0 @@ -// file : xsd/cxx/parser/validating/parser.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <cassert> - -#include <xsd/cxx/xml/bits/literals.hxx> -#include <xsd/cxx/parser/validating/exceptions.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - - // empty_content - // - - - template <typename C> - void empty_content<C>:: - _start_any_element (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>*) - { - } - - template <typename C> - void empty_content<C>:: - _end_any_element (const ro_string<C>&, - const ro_string<C>&) - { - } - - template <typename C> - void empty_content<C>:: - _any_attribute (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&) - { - } - - template <typename C> - void empty_content<C>:: - _any_characters (const ro_string<C>&) - { - } - - // - // - template <typename C> - bool empty_content<C>:: - _start_element_impl (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>*) - { - return false; - } - - template <typename C> - bool empty_content<C>:: - _end_element_impl (const ro_string<C>&, - const ro_string<C>&) - { - return false; - } - - template <typename C> - bool empty_content<C>:: - _attribute_impl (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&) - { - return false; - } - - template <typename C> - bool empty_content<C>:: - _characters_impl (const ro_string<C>&) - { - return false; - } - - // - // - template <typename C> - void empty_content<C>:: - _start_element (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type) - { - if (!this->_start_element_impl (ns, name, type)) - this->_unexpected_element (ns, name); - } - - template <typename C> - void empty_content<C>:: - _end_element (const ro_string<C>& ns, - const ro_string<C>& name) - { - if (!this->_end_element_impl (ns, name)) - this->_unexpected_element (ns, name); - } - - template <typename C> - void empty_content<C>:: - _attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value) - { - // Weed out special attributes: xsi:type, xsi:nil, - // xsi:schemaLocation and noNamespaceSchemaLocation. - // See section 3.2.7 in Structures for details. - // - if (ns == xml::bits::xsi_namespace<C> () && - (name == xml::bits::type<C> () || - name == xml::bits::nil_lit<C> () || - name == xml::bits::schema_location<C> () || - name == xml::bits::no_namespace_schema_location<C> ())) - return; - - // Also some parsers (notably Xerces-C++) supplies us with - // namespace-prefix mapping attributes. - // - if (ns == xml::bits::xmlns_namespace<C> ()) - return; - - if (!this->_attribute_impl (ns, name, value)) - this->_unexpected_attribute (ns, name, value); - } - - template <typename C> - void empty_content<C>:: - _characters (const ro_string<C>& s) - { - if (!this->_characters_impl (s)) - this->_unexpected_characters (s); - } - - // - // - template <typename C> - void empty_content<C>:: - _expected_element (const C* ex_ns, const C* ex_name) - { - throw expected_element<C> (ex_ns, ex_name); - } - - template <typename C> - void empty_content<C>:: - _expected_element (const C* ex_ns, - const C* ex_name, - const ro_string<C>& en_ns, - const ro_string<C>& en_name) - { - throw expected_element<C> (ex_ns, ex_name, en_ns, en_name); - } - - template <typename C> - void empty_content<C>:: - _unexpected_element (const ro_string<C>& ns, - const ro_string<C>& name) - { - throw unexpected_element<C> (ns, name); - } - - template <typename C> - void empty_content<C>:: - _expected_attribute (const C* ex_ns, const C* ex_name) - { - throw expected_attribute<C> (ex_ns, ex_name); - } - - template <typename C> - void empty_content<C>:: - _unexpected_attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>&) - { - throw unexpected_attribute<C> (ns, name); - } - - template <typename C> - void empty_content<C>:: - _unexpected_characters (const ro_string<C>& s) - { - throw unexpected_characters<C> (s); - } - - - // simple_content - // - - template <typename C> - void simple_content<C>:: - _attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value) - { - // Weed out special attributes: xsi:type, xsi:nil, - // xsi:schemaLocation and xsi:noNamespaceSchemaLocation. - // See section 3.2.7 in Structures for details. - // - if (ns == xml::bits::xsi_namespace<C> () && - (name == xml::bits::type<C> () || - name == xml::bits::nil_lit<C> () || - name == xml::bits::schema_location<C> () || - name == xml::bits::no_namespace_schema_location<C> ())) - return; - - // Also some parsers (notably Xerces-C++) supplies us with - // namespace-prefix mapping attributes. - // - if (ns == xml::bits::xmlns_namespace<C> ()) - return; - - if (!this->_attribute_impl (ns, name, value)) - this->_unexpected_attribute (ns, name, value); - } - - template <typename C> - void simple_content<C>:: - _characters (const ro_string<C>& str) - { - if (!this->_characters_impl (str)) - { - // Mixed content is implemented in the generated code - // by overriding _characters_impl and forwarding to - // _any_characters. - // - - // Scan the string for any non-whitespace characters - // (Structures, section 3.4.4, clause 1.3). - // - for (typename ro_string<C>::size_type i (0), e (str.size ()); - i < e; ++i) - { - C c (str[i]); - - if (c != C (0x20) && // space - c != C (0x0D) && // carriage return - c != C (0x09) && // tab - c != C (0x0A)) - this->_unexpected_characters (str); - } - } - } - - template <typename C> - void simple_content<C>:: - _pre_impl () - { - this->_pre (); - _pre_a_validate (); - } - - template <typename C> - void simple_content<C>:: - _post_impl () - { - _post_a_validate (); - this->_post (); - } - - template <typename C> - void simple_content<C>:: - _pre_a_validate () - { - } - - template <typename C> - void simple_content<C>:: - _post_a_validate () - { - } - - template <typename C> - bool simple_content<C>:: - _attribute_impl (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value) - { - return _attribute_impl_phase_one (ns, name, value) || - _attribute_impl_phase_two (ns, name, value); - } - - template <typename C> - bool simple_content<C>:: - _attribute_impl_phase_one (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&) - { - return false; - } - - template <typename C> - bool simple_content<C>:: - _attribute_impl_phase_two (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&) - { - return false; - } - - - // complex_content - // - - - template <typename C> - void complex_content<C>:: - _start_element (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type) - { - state& s (context_.top ()); - - if (s.depth_++ > 0) - { - if (s.any_) - this->_start_any_element (ns, name, type); - else if (s.parser_) - s.parser_->_start_element (ns, name, type); - } - else - { - if (!this->_start_element_impl (ns, name, type)) - this->_unexpected_element (ns, name); - else if (s.parser_ != 0) - s.parser_->_pre_impl (); - } - } - - template <typename C> - void complex_content<C>:: - _end_element (const ro_string<C>& ns, - const ro_string<C>& name) - { - // To understand what's going on here it is helpful to think of - // a "total depth" as being the sum of individual depths over - // all elements. - // - - if (context_.top ().depth_ == 0) - { - state& s (context_.under_top ()); // One before last. - - if (--s.depth_ > 0) - { - // Indirect recursion. - // - if (s.parser_) - s.parser_->_end_element (ns, name); - } - else - { - // Direct recursion. - // - assert (this == s.parser_); - - this->_post_impl (); - - if (!this->_end_element_impl (ns, name)) - assert (false); - } - } - else - { - state& s (context_.top ()); - - if (--s.depth_ > 0) - { - if (s.any_) - this->_end_any_element (ns, name); - else if (s.parser_) - s.parser_->_end_element (ns, name); - } - else - { - if (s.parser_ != 0 && !s.any_) - s.parser_->_post_impl (); - - if (!this->_end_element_impl (ns, name)) - this->_unexpected_element (ns, name); - } - } - } - - template <typename C> - void complex_content<C>:: - _attribute (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value) - { - // Weed out special attributes: xsi:type, xsi:nil, - // xsi:schemaLocation and xsi:noNamespaceSchemaLocation. - // See section 3.2.7 in Structures for details. - // - if (ns == xml::bits::xsi_namespace<C> () && - (name == xml::bits::type<C> () || - name == xml::bits::nil_lit<C> () || - name == xml::bits::schema_location<C> () || - name == xml::bits::no_namespace_schema_location<C> ())) - return; - - // Also some parsers (notably Xerces-C++) supplies us with - // namespace-prefix mapping attributes. - // - if (ns == xml::bits::xmlns_namespace<C> ()) - return; - - const state& s (context_.top ()); - - if (s.depth_ > 0) - { - if (s.any_) - this->_any_attribute (ns, name, value); - else if (s.parser_) - s.parser_->_attribute (ns, name, value); - } - else - { - if (!this->_attribute_impl (ns, name, value)) - this->_unexpected_attribute (ns, name, value); - } - } - - template <typename C> - void complex_content<C>:: - _characters (const ro_string<C>& str) - { - const state& s (context_.top ()); - - if (s.depth_ > 0) - { - if (s.any_) - this->_any_characters (str); - else if (s.parser_) - s.parser_->_characters (str); - } - else - { - if (!this->_characters_impl (str)) - { - // Mixed content is implemented in the generated code - // by overriding _characters_impl and forwarding to - // _any_characters. - // - - // Scan the string for any non-whitespace characters - // (Structures, section 3.4.4, clause 1.3). - // - for (typename ro_string<C>::size_type i (0), e (str.size ()); - i < e; ++i) - { - C c (str[i]); - - if (c != C (0x20) && // space - c != C (0x0D) && // carriage return - c != C (0x09) && // tab - c != C (0x0A)) - this->_unexpected_characters (str); - } - } - } - } - - template <typename C> - void complex_content<C>:: - _pre_impl () - { - context_.push (state ()); - this->_pre (); - _pre_a_validate (); - _pre_e_validate (); - } - - template <typename C> - void complex_content<C>:: - _post_impl () - { - _post_e_validate (); - _post_a_validate (); - this->_post (); - context_.pop (); - } - - template <typename C> - void complex_content<C>:: - _pre_e_validate () - { - } - - template <typename C> - void complex_content<C>:: - _post_e_validate () - { - } - - template <typename C> - void complex_content<C>:: - _pre_a_validate () - { - } - - template <typename C> - void complex_content<C>:: - _post_a_validate () - { - } - - template <typename C> - bool complex_content<C>:: - _attribute_impl (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value) - { - return _attribute_impl_phase_one (ns, name, value) || - _attribute_impl_phase_two (ns, name, value); - } - - template <typename C> - bool complex_content<C>:: - _attribute_impl_phase_one (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&) - { - return false; - } - - template <typename C> - bool complex_content<C>:: - _attribute_impl_phase_two (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&) - { - return false; - } - - - // list_base - // - namespace bits - { - // Find first non-space character. - // - template <typename C> - typename ro_string<C>::size_type - find_ns (const C* s, - typename ro_string<C>::size_type size, - typename ro_string<C>::size_type pos) - { - while (pos < size && - (s[pos] == C (0x20) || s[pos] == C (0x0A) || - s[pos] == C (0x0D) || s[pos] == C (0x09))) - ++pos; - - return pos < size ? pos : ro_string<C>::npos; - } - - // Find first space character. - // - template <typename C> - typename ro_string<C>::size_type - find_s (const C* s, - typename ro_string<C>::size_type size, - typename ro_string<C>::size_type pos) - { - while (pos < size && - s[pos] != C (0x20) && s[pos] != C (0x0A) && - s[pos] != C (0x0D) && s[pos] != C (0x09)) - ++pos; - - return pos < size ? pos : ro_string<C>::npos; - } - } - - // Relevant XML Schema Part 2: Datatypes sections: 4.2.1.2, 4.3.6. - // - - template <typename C> - void list_base<C>:: - _pre_impl () - { - simple_content<C>::_pre_impl (); - buf_.clear (); - } - - template <typename C> - void list_base<C>:: - _characters (const ro_string<C>& s) - { - typedef typename ro_string<C>::size_type size_type; - - const C* data (s.data ()); - size_type size (s.size ()); - - // Handle the previous chunk if we start with a ws. - // - if (!buf_.empty () && - (data[0] == C (0x20) || data[0] == C (0x0A) || - data[0] == C (0x0D) || data[0] == C (0x09))) - { - ro_string<C> tmp (buf_); // Private copy ctor. - _xsd_parse_item (tmp); - buf_.clear (); - } - - // Traverse the data while logically collapsing spaces. - // - for (size_type i (bits::find_ns (data, size, 0)); - i != ro_string<C>::npos;) - { - size_type j (bits::find_s (data, size, i)); - - if (j != ro_string<C>::npos) - { - if (buf_.empty ()) - { - ro_string<C> tmp (data + i, j - i); // Private copy ctor. - _xsd_parse_item (tmp); - } - else - { - // Assemble the first item in str from buf_ and s. - // - std::basic_string<C> str; - str.swap (buf_); - str.append (data + i, j - i); - ro_string<C> tmp (str); // Private copy ctor. - _xsd_parse_item (tmp); - } - - i = bits::find_ns (data, size, j); - } - else - { - // Last fragment, append it to the buf_. - // - buf_.append (data + i, size - i); - break; - } - } - } - - template <typename C> - void list_base<C>:: - _post_impl () - { - // Handle the last item. - // - if (!buf_.empty ()) - { - ro_string<C> tmp (buf_); // Private copy ctor. - _xsd_parse_item (tmp); - } - - simple_content<C>::_post_impl (); - } - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.hxx b/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.hxx deleted file mode 100644 index 5f9133a..0000000 --- a/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.hxx +++ /dev/null @@ -1,1121 +0,0 @@ -// file : xsd/cxx/parser/validating/xml-schema-pimpl.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_HXX -#define XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_HXX - -#include <string> - -#include <xsd/cxx/config.hxx> // XSD_AUTO_PTR - -#include <xsd/cxx/parser/validating/xml-schema-pskel.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - // any_type - // - template <typename C> - struct any_type_pimpl: virtual any_type_pskel<C> - { - virtual void - post_any_type (); - }; - - // any_simple_type - // - template <typename C> - struct any_simple_type_pimpl: virtual any_simple_type_pskel<C> - { - virtual void - post_any_simple_type (); - }; - - // boolean - // - template <typename C> - struct boolean_pimpl: virtual boolean_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual bool - post_boolean (); - - protected: - std::basic_string<C> str_; - bool value_; - }; - - - // 8-bit - // - template <typename C> - struct byte_pimpl: virtual byte_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual signed char - post_byte (); - - protected: - std::basic_string<C> str_; - signed char value_; - }; - - - template <typename C> - struct unsigned_byte_pimpl: virtual unsigned_byte_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual unsigned char - post_unsigned_byte (); - - protected: - std::basic_string<C> str_; - unsigned char value_; - }; - - - // 16-bit - // - template <typename C> - struct short_pimpl: virtual short_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual short - post_short (); - - protected: - std::basic_string<C> str_; - short value_; - }; - - - template <typename C> - struct unsigned_short_pimpl: virtual unsigned_short_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual unsigned short - post_unsigned_short (); - - protected: - std::basic_string<C> str_; - unsigned short value_; - }; - - - // 32-bit - // - template <typename C> - struct int_pimpl: virtual int_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual int - post_int (); - - protected: - std::basic_string<C> str_; - int value_; - }; - - - template <typename C> - struct unsigned_int_pimpl: virtual unsigned_int_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual unsigned int - post_unsigned_int (); - - protected: - std::basic_string<C> str_; - unsigned int value_; - }; - - - // 64-bit - // - template <typename C> - struct long_pimpl: virtual long_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual long long - post_long (); - - protected: - std::basic_string<C> str_; - long long value_; - }; - - - template <typename C> - struct unsigned_long_pimpl: virtual unsigned_long_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual unsigned long long - post_unsigned_long (); - - protected: - std::basic_string<C> str_; - unsigned long long value_; - }; - - - // Arbitrary-length integers. - // - template <typename C> - struct integer_pimpl: virtual integer_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual long long - post_integer (); - - protected: - std::basic_string<C> str_; - long long value_; - }; - - template <typename C> - struct negative_integer_pimpl: virtual negative_integer_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual long long - post_negative_integer (); - - protected: - std::basic_string<C> str_; - long long value_; - }; - - template <typename C> - struct non_positive_integer_pimpl: virtual non_positive_integer_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual long long - post_non_positive_integer (); - - protected: - std::basic_string<C> str_; - long long value_; - }; - - template <typename C> - struct positive_integer_pimpl: virtual positive_integer_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual unsigned long long - post_positive_integer (); - - protected: - std::basic_string<C> str_; - unsigned long long value_; - }; - - template <typename C> - struct non_negative_integer_pimpl: virtual non_negative_integer_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual unsigned long long - post_non_negative_integer (); - - protected: - std::basic_string<C> str_; - unsigned long long value_; - }; - - - // Floats. - // - template <typename C> - struct float_pimpl: virtual float_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual float - post_float (); - - protected: - std::basic_string<C> str_; - float value_; - }; - - - template <typename C> - struct double_pimpl: virtual double_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual double - post_double (); - - protected: - std::basic_string<C> str_; - double value_; - }; - - - template <typename C> - struct decimal_pimpl: virtual decimal_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual double - post_decimal (); - - protected: - std::basic_string<C> str_; - double value_; - }; - - - // Strings. - // - template <typename C> - struct string_pimpl: virtual string_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual std::basic_string<C> - post_string (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct normalized_string_pimpl: virtual normalized_string_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual std::basic_string<C> - post_normalized_string (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct token_pimpl: virtual token_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual std::basic_string<C> - post_token (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct name_pimpl: virtual name_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual std::basic_string<C> - post_name (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct nmtoken_pimpl: virtual nmtoken_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual std::basic_string<C> - post_nmtoken (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct nmtokens_pimpl: virtual nmtokens_pskel<C> - { - virtual void - _pre (); - - virtual void - _xsd_parse_item (const ro_string<C>&); - - virtual void - _post (); - - virtual string_sequence<C> - post_nmtokens (); - - protected: - string_sequence<C> seq_; - nmtoken_pimpl<C> parser_; - }; - - template <typename C> - struct ncname_pimpl: virtual ncname_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual std::basic_string<C> - post_ncname (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct id_pimpl: virtual id_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual std::basic_string<C> - post_id (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct idref_pimpl: virtual idref_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual std::basic_string<C> - post_idref (); - - protected: - std::basic_string<C> str_; - }; - - template <typename C> - struct idrefs_pimpl: virtual idrefs_pskel<C> - { - virtual void - _pre (); - - virtual void - _xsd_parse_item (const ro_string<C>&); - - virtual void - _post (); - - virtual string_sequence<C> - post_idrefs (); - - protected: - string_sequence<C> seq_; - idref_pimpl<C> parser_; - }; - - // language - // - template <typename C> - struct language_pimpl: virtual language_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual std::basic_string<C> - post_language (); - - protected: - std::basic_string<C> str_; - }; - - // anyURI - // - template <typename C> - struct uri_pimpl: virtual uri_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual std::basic_string<C> - post_uri (); - - protected: - std::basic_string<C> str_; - }; - - // QName - // - template <typename C> - struct qname_pimpl: virtual qname_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual qname<C> - post_qname (); - - protected: - std::basic_string<C> str_; - std::basic_string<C> name_; - std::basic_string<C> prefix_; - }; - - // base64Binary - // - template <typename C> - struct base64_binary_pimpl: virtual base64_binary_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual XSD_AUTO_PTR<buffer> - post_base64_binary (); - - protected: - std::basic_string<C> str_; - XSD_AUTO_PTR<buffer> buf_; - }; - - // hexBinary - // - template <typename C> - struct hex_binary_pimpl: virtual hex_binary_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual XSD_AUTO_PTR<buffer> - post_hex_binary (); - - protected: - std::basic_string<C> str_; - XSD_AUTO_PTR<buffer> buf_; - }; - - // gday - // - template <typename C> - struct gday_pimpl: virtual gday_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual gday - post_gday (); - - protected: - std::basic_string<C> str_; - unsigned short day_; - bool z_; - short zh_, zm_; - }; - - // gmonth - // - template <typename C> - struct gmonth_pimpl: virtual gmonth_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual gmonth - post_gmonth (); - - protected: - std::basic_string<C> str_; - unsigned short month_; - bool z_; - short zh_, zm_; - }; - - // gyear - // - template <typename C> - struct gyear_pimpl: virtual gyear_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual gyear - post_gyear (); - - protected: - std::basic_string<C> str_; - int year_; - bool z_; - short zh_, zm_; - }; - - // gmonth_day - // - template <typename C> - struct gmonth_day_pimpl: virtual gmonth_day_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual gmonth_day - post_gmonth_day (); - - protected: - std::basic_string<C> str_; - unsigned short month_; - unsigned short day_; - bool z_; - short zh_, zm_; - }; - - // gyear_month - // - template <typename C> - struct gyear_month_pimpl: virtual gyear_month_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual gyear_month - post_gyear_month (); - - protected: - std::basic_string<C> str_; - int year_; - unsigned short month_; - bool z_; - short zh_, zm_; - }; - - // date - // - template <typename C> - struct date_pimpl: virtual date_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual date - post_date (); - - protected: - std::basic_string<C> str_; - int year_; - unsigned short month_; - unsigned short day_; - bool z_; - short zh_, zm_; - }; - - // time - // - template <typename C> - struct time_pimpl: virtual time_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual time - post_time (); - - protected: - std::basic_string<C> str_; - unsigned short hours_; - unsigned short minutes_; - double seconds_; - bool z_; - short zh_, zm_; - }; - - // date_time - // - template <typename C> - struct date_time_pimpl: virtual date_time_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual date_time - post_date_time (); - - protected: - std::basic_string<C> str_; - int year_; - unsigned short month_; - unsigned short day_; - unsigned short hours_; - unsigned short minutes_; - double seconds_; - bool z_; - short zh_, zm_; - }; - - // duration - // - template <typename C> - struct duration_pimpl: virtual duration_pskel<C> - { - virtual void - _pre (); - - virtual void - _characters (const ro_string<C>&); - - virtual void - _post (); - - virtual duration - post_duration (); - - protected: - std::basic_string<C> str_; - bool negative_; - unsigned int years_; - unsigned int months_; - unsigned int days_; - unsigned int hours_; - unsigned int minutes_; - double seconds_; - }; - - // Literals. - // - namespace bits - { - template<typename C> - const C* - boolean (); - - template<typename C> - const C* - byte (); - - template<typename C> - const C* - unsigned_byte (); - - template<typename C> - const C* - short_ (); - - template<typename C> - const C* - unsigned_short (); - - template<typename C> - const C* - int_ (); - - template<typename C> - const C* - unsigned_int (); - - template<typename C> - const C* - long_ (); - - template<typename C> - const C* - unsigned_long (); - - template<typename C> - const C* - integer (); - - template<typename C> - const C* - negative_integer (); - - template<typename C> - const C* - non_positive_integer (); - - template<typename C> - const C* - non_negative_integer (); - - template<typename C> - const C* - positive_integer (); - - template<typename C> - const C* - float_ (); - - template<typename C> - const C* - double_ (); - - template<typename C> - const C* - decimal (); - - template<typename C> - const C* - name (); - - template<typename C> - const C* - nmtoken (); - - template<typename C> - const C* - nmtokens (); - - template<typename C> - const C* - ncname (); - - template<typename C> - const C* - id (); - - template<typename C> - const C* - idref (); - - template<typename C> - const C* - idrefs (); - - template<typename C> - const C* - language (); - - template<typename C> - const C* - qname (); - - template<typename C> - const C* - base64_binary (); - - template<typename C> - const C* - hex_binary (); - - template<typename C> - const C* - gday (); - - template<typename C> - const C* - gmonth (); - - template<typename C> - const C* - gyear (); - - template<typename C> - const C* - gmonth_day (); - - template<typename C> - const C* - gyear_month (); - - template<typename C> - const C* - date (); - - template<typename C> - const C* - time (); - - template<typename C> - const C* - date_time (); - - template<typename C> - const C* - duration (); - - // float literals: INF -INF NaN - // - template<typename C> - const C* - positive_inf (); - - template<typename C> - const C* - negative_inf (); - - template<typename C> - const C* - nan (); - - // boolean literals - // - template<typename C> - const C* - true_ (); - - template<typename C> - const C* - false_ (); - - template<typename C> - const C* - one (); - - template<typename C> - const C* - zero (); - } - } - } - } -} - -#include <xsd/cxx/parser/validating/xml-schema-pimpl.txx> - -#endif // XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_HXX - -#include <xsd/cxx/parser/validating/xml-schema-pimpl.ixx> diff --git a/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.ixx b/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.ixx deleted file mode 100644 index 5875b57..0000000 --- a/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.ixx +++ /dev/null @@ -1,674 +0,0 @@ -// file : xsd/cxx/parser/validating/xml-schema-pimpl.ixx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) - -#ifndef XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_IXX_CHAR -#define XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_IXX_CHAR - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - namespace bits - { - template<> - inline const char* - boolean<char> () - { - return "boolean"; - } - - template<> - inline const char* - byte<char> () - { - return "byte"; - } - - template<> - inline const char* - unsigned_byte<char> () - { - return "unsignedByte"; - } - - template<> - inline const char* - short_<char> () - { - return "short"; - } - - template<> - inline const char* - unsigned_short<char> () - { - return "unsignedShort"; - } - - template<> - inline const char* - int_<char> () - { - return "int"; - } - - template<> - inline const char* - unsigned_int<char> () - { - return "unsignedInt"; - } - - template<> - inline const char* - long_<char> () - { - return "long"; - } - - template<> - inline const char* - unsigned_long<char> () - { - return "unsignedLong"; - } - - template<> - inline const char* - integer<char> () - { - return "integer"; - } - - template<> - inline const char* - negative_integer<char> () - { - return "negativeInteger"; - } - - template<> - inline const char* - non_positive_integer<char> () - { - return "nonPositiveInteger"; - } - - template<> - inline const char* - non_negative_integer<char> () - { - return "nonNegativeInteger"; - } - - template<> - inline const char* - positive_integer<char> () - { - return "positiveInteger"; - } - - template<> - inline const char* - float_<char> () - { - return "float"; - } - - template<> - inline const char* - double_<char> () - { - return "double"; - } - - template<> - inline const char* - decimal<char> () - { - return "decimal"; - } - - template<> - inline const char* - name<char> () - { - return "Name"; - } - - template<> - inline const char* - nmtoken<char> () - { - return "NMTOKEN"; - } - - template<> - inline const char* - nmtokens<char> () - { - return "NMTOKENS"; - } - - template<> - inline const char* - ncname<char> () - { - return "NCName"; - } - - template<> - inline const char* - id<char> () - { - return "ID"; - } - - template<> - inline const char* - idref<char> () - { - return "IDREF"; - } - - template<> - inline const char* - idrefs<char> () - { - return "IDREFS"; - } - - template<> - inline const char* - language<char> () - { - return "language"; - } - - template<> - inline const char* - qname<char> () - { - return "QName"; - } - - template<> - inline const char* - base64_binary<char> () - { - return "base64Binary"; - } - - template<> - inline const char* - hex_binary<char> () - { - return "hexBinary"; - } - - template<> - inline const char* - gday<char> () - { - return "gDay"; - } - - template<> - inline const char* - gmonth<char> () - { - return "gMonth"; - } - - template<> - inline const char* - gyear<char> () - { - return "gYear"; - } - - template<> - inline const char* - gmonth_day<char> () - { - return "gMonthDay"; - } - - template<> - inline const char* - gyear_month<char> () - { - return "gYearMonth"; - } - - template<> - inline const char* - date<char> () - { - return "date"; - } - - template<> - inline const char* - time<char> () - { - return "time"; - } - - template<> - inline const char* - date_time<char> () - { - return "dateTime"; - } - - template<> - inline const char* - duration<char> () - { - return "duration"; - } - - // - // - template<> - inline const char* - positive_inf<char> () - { - return "INF"; - } - - template<> - inline const char* - negative_inf<char> () - { - return "-INF"; - } - - template<> - inline const char* - nan<char> () - { - return "NaN"; - } - - // - // - template<> - inline const char* - true_<char> () - { - return "true"; - } - - template<> - inline const char* - false_<char> () - { - return "false"; - } - - template<> - inline const char* - one<char> () - { - return "1"; - } - - template<> - inline const char* - zero<char> () - { - return "0"; - } - } - } - } - } -} - -#endif // XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_IXX_CHAR -#endif // XSD_CXX_PARSER_USE_CHAR - - -#if defined(XSD_CXX_PARSER_USE_WCHAR) || !defined(XSD_CXX_PARSER_USE_CHAR) - -#ifndef XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_IXX_WCHAR -#define XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_IXX_WCHAR - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - namespace bits - { - template<> - inline const wchar_t* - boolean<wchar_t> () - { - return L"boolean"; - } - - template<> - inline const wchar_t* - byte<wchar_t> () - { - return L"byte"; - } - - template<> - inline const wchar_t* - unsigned_byte<wchar_t> () - { - return L"unsignedByte"; - } - - template<> - inline const wchar_t* - short_<wchar_t> () - { - return L"short"; - } - - template<> - inline const wchar_t* - unsigned_short<wchar_t> () - { - return L"unsignedShort"; - } - - template<> - inline const wchar_t* - int_<wchar_t> () - { - return L"int"; - } - - template<> - inline const wchar_t* - unsigned_int<wchar_t> () - { - return L"unsignedInt"; - } - - template<> - inline const wchar_t* - long_<wchar_t> () - { - return L"long"; - } - - template<> - inline const wchar_t* - unsigned_long<wchar_t> () - { - return L"unsignedLong"; - } - - template<> - inline const wchar_t* - integer<wchar_t> () - { - return L"integer"; - } - - template<> - inline const wchar_t* - negative_integer<wchar_t> () - { - return L"negativeInteger"; - } - - template<> - inline const wchar_t* - non_positive_integer<wchar_t> () - { - return L"nonPositiveInteger"; - } - - template<> - inline const wchar_t* - non_negative_integer<wchar_t> () - { - return L"nonNegativeInteger"; - } - - template<> - inline const wchar_t* - positive_integer<wchar_t> () - { - return L"positiveInteger"; - } - - template<> - inline const wchar_t* - float_<wchar_t> () - { - return L"float"; - } - - template<> - inline const wchar_t* - double_<wchar_t> () - { - return L"double"; - } - - template<> - inline const wchar_t* - decimal<wchar_t> () - { - return L"decimal"; - } - - template<> - inline const wchar_t* - name<wchar_t> () - { - return L"Name"; - } - - template<> - inline const wchar_t* - nmtoken<wchar_t> () - { - return L"NMTOKEN"; - } - - template<> - inline const wchar_t* - nmtokens<wchar_t> () - { - return L"NMTOKENS"; - } - - template<> - inline const wchar_t* - ncname<wchar_t> () - { - return L"NCName"; - } - - template<> - inline const wchar_t* - id<wchar_t> () - { - return L"ID"; - } - - template<> - inline const wchar_t* - idref<wchar_t> () - { - return L"IDREF"; - } - - template<> - inline const wchar_t* - idrefs<wchar_t> () - { - return L"IDREFS"; - } - - template<> - inline const wchar_t* - language<wchar_t> () - { - return L"language"; - } - - template<> - inline const wchar_t* - qname<wchar_t> () - { - return L"QName"; - } - - template<> - inline const wchar_t* - base64_binary<wchar_t> () - { - return L"base64Binary"; - } - - template<> - inline const wchar_t* - hex_binary<wchar_t> () - { - return L"hexBinary"; - } - - template<> - inline const wchar_t* - gday<wchar_t> () - { - return L"gDay"; - } - - template<> - inline const wchar_t* - gmonth<wchar_t> () - { - return L"gMonth"; - } - - template<> - inline const wchar_t* - gyear<wchar_t> () - { - return L"gYear"; - } - - template<> - inline const wchar_t* - gmonth_day<wchar_t> () - { - return L"gMonthDay"; - } - - template<> - inline const wchar_t* - gyear_month<wchar_t> () - { - return L"gYearMonth"; - } - - template<> - inline const wchar_t* - date<wchar_t> () - { - return L"date"; - } - - template<> - inline const wchar_t* - time<wchar_t> () - { - return L"time"; - } - - template<> - inline const wchar_t* - date_time<wchar_t> () - { - return L"dateTime"; - } - - template<> - inline const wchar_t* - duration<wchar_t> () - { - return L"duration"; - } - - - // - // - template<> - inline const wchar_t* - positive_inf<wchar_t> () - { - return L"INF"; - } - - template<> - inline const wchar_t* - negative_inf<wchar_t> () - { - return L"-INF"; - } - - template<> - inline const wchar_t* - nan<wchar_t> () - { - return L"NaN"; - } - - // - // - template<> - inline const wchar_t* - true_<wchar_t> () - { - return L"true"; - } - - template<> - inline const wchar_t* - false_<wchar_t> () - { - return L"false"; - } - - template<> - inline const wchar_t* - one<wchar_t> () - { - return L"1"; - } - - template<> - inline const wchar_t* - zero<wchar_t> () - { - return L"0"; - } - } - } - } - } -} - -#endif // XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_IXX_WCHAR -#endif // XSD_CXX_PARSER_USE_WCHAR diff --git a/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.txx b/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.txx deleted file mode 100644 index 5ef2455..0000000 --- a/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.txx +++ /dev/null @@ -1,2756 +0,0 @@ -// file : xsd/cxx/parser/validating/xml-schema-pimpl.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <limits> -#include <locale> - -#ifdef XSD_CXX11 -# include <utility> // std::move -#endif - -#include <xsd/cxx/zc-istream.hxx> -#include <xsd/cxx/parser/validating/exceptions.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - // Note that most of the types implemented here cannot have - // whitespaces in the value. As result we don't need to waste - // time collapsing whitespaces. All we need to do is trim the - // string representation which can be done without copying. - // - - // Character table. - // - namespace bits - { - const unsigned char ncname_mask = 0x1; - const unsigned char name_first_mask = 0x2; - const unsigned char name_mask = 0x4; - - template <typename C> - struct char_table - { - static C table[0x80]; - }; - - template <typename C> - C char_table<C>::table[0x80] = - { - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xD0, 0x00, 0x00, 0xD0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xD8, 0x48, 0x58, 0x48, 0x48, 0x48, 0x40, 0x58, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4D, 0x4D, 0x58, - 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4E, 0x48, 0x50, 0x48, 0x58, 0x48, - 0x48, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, - 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x48, 0x48, 0x40, 0x48, 0x4F, - 0x48, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, - 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x48, 0x48, 0x48, 0x48, 0x48 - }; - } - - // any_type - // - - template <typename C> - void any_type_pimpl<C>:: - post_any_type () - { - } - - // any_simple_type - // - - template <typename C> - void any_simple_type_pimpl<C>:: - post_any_simple_type () - { - } - - // boolean - // - - template <typename C> - void boolean_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void boolean_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void boolean_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - if (str == bits::true_<C> () || str == bits::one<C> ()) - value_ = true; - else if (str == bits::false_<C> () || str == bits::zero<C> ()) - value_ = false; - else - throw invalid_value<C> (bits::boolean<C> (), str); - } - - template <typename C> - bool boolean_pimpl<C>:: - post_boolean () - { - return value_; - } - - // byte - // - - template <typename C> - void byte_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void byte_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void byte_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - short t; - zc_istream<C> is (str); - - if (is >> t && is.exhausted () && t >= -128 && t <= 127) - value_ = static_cast<signed char> (t); - else - throw invalid_value<C> (bits::byte<C> (), str); - } - - template <typename C> - signed char byte_pimpl<C>:: - post_byte () - { - return value_; - } - - // unsigned_byte - // - - template <typename C> - void unsigned_byte_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void unsigned_byte_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void unsigned_byte_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - unsigned short t; - zc_istream<C> is (str); - - if (is >> t && is.exhausted () && t <= 255) - value_ = static_cast<unsigned char> (t); - else - throw invalid_value<C> (bits::unsigned_byte<C> (), str); - } - - template <typename C> - unsigned char unsigned_byte_pimpl<C>:: - post_unsigned_byte () - { - return value_; - } - - // short - // - - template <typename C> - void short_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void short_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void short_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - zc_istream<C> is (str); - - if (!(is >> value_ && is.exhausted ())) - throw invalid_value<C> (bits::short_<C> (), str); - } - - template <typename C> - short short_pimpl<C>:: - post_short () - { - return value_; - } - - - // unsigned_short - // - - template <typename C> - void unsigned_short_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void unsigned_short_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void unsigned_short_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - zc_istream<C> is (str); - - if (!(is >> value_ && is.exhausted ())) - throw invalid_value<C> (bits::unsigned_short<C> (), str); - } - - template <typename C> - unsigned short unsigned_short_pimpl<C>:: - post_unsigned_short () - { - return value_; - } - - // int - // - - template <typename C> - void int_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void int_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void int_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - zc_istream<C> is (str); - - if (!(is >> value_ && is.exhausted ())) - throw invalid_value<C> (bits::int_<C> (), str); - } - - template <typename C> - int int_pimpl<C>:: - post_int () - { - return value_; - } - - - // unsigned_int - // - - template <typename C> - void unsigned_int_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void unsigned_int_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void unsigned_int_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - zc_istream<C> is (str); - - if (!(is >> value_ && is.exhausted ())) - throw invalid_value<C> (bits::unsigned_int<C> (), str); - } - - template <typename C> - unsigned int unsigned_int_pimpl<C>:: - post_unsigned_int () - { - return value_; - } - - - // long - // - template <typename C> - void long_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void long_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void long_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - zc_istream<C> is (str); - - if (!(is >> value_ && is.exhausted ())) - throw invalid_value<C> (bits::long_<C> (), str); - } - - template <typename C> - long long long_pimpl<C>:: - post_long () - { - return value_; - } - - // unsigned_long - // - template <typename C> - void unsigned_long_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void unsigned_long_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void unsigned_long_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - zc_istream<C> is (str); - - if (!(is >> value_ && is.exhausted ())) - throw invalid_value<C> (bits::unsigned_long<C> (), str); - } - - template <typename C> - unsigned long long unsigned_long_pimpl<C>:: - post_unsigned_long () - { - return value_; - } - - - // integer - // - template <typename C> - void integer_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void integer_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void integer_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - zc_istream<C> is (str); - - if (!(is >> value_ && is.exhausted ())) - throw invalid_value<C> (bits::integer<C> (), str); - } - - template <typename C> - long long integer_pimpl<C>:: - post_integer () - { - return value_; - } - - // negative_integer - // - template <typename C> - void negative_integer_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void negative_integer_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void negative_integer_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - zc_istream<C> is (str); - - if (!(is >> value_ && is.exhausted () && value_ < 0)) - throw invalid_value<C> (bits::negative_integer<C> (), str); - } - - template <typename C> - long long negative_integer_pimpl<C>:: - post_negative_integer () - { - return value_; - } - - - // non_positive_integer - // - template <typename C> - void non_positive_integer_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void non_positive_integer_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void non_positive_integer_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - zc_istream<C> is (str); - - if (!(is >> value_ && is.exhausted () && value_ <= 0)) - throw invalid_value<C> (bits::non_positive_integer<C> (), str); - } - - template <typename C> - long long non_positive_integer_pimpl<C>:: - post_non_positive_integer () - { - return value_; - } - - // positive_integer - // - template <typename C> - void positive_integer_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void positive_integer_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void positive_integer_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - zc_istream<C> is (str); - - if (!(is >> value_ && is.exhausted () && value_ > 0)) - throw invalid_value<C> (bits::positive_integer<C> (), str); - } - - template <typename C> - unsigned long long positive_integer_pimpl<C>:: - post_positive_integer () - { - return value_; - } - - - // non_negative_integer - // - template <typename C> - void non_negative_integer_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void non_negative_integer_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void non_negative_integer_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - zc_istream<C> is (str); - - if (!(is >> value_ && is.exhausted ())) - throw invalid_value<C> (bits::non_negative_integer<C> (), str); - } - - template <typename C> - unsigned long long non_negative_integer_pimpl<C>:: - post_non_negative_integer () - { - return value_; - } - - - // float - // - template <typename C> - void float_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void float_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void float_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - if (str == bits::positive_inf<C> ()) - value_ = std::numeric_limits<float>::infinity (); - else if (str == bits::negative_inf<C> ()) - value_ = -std::numeric_limits<float>::infinity (); - else if (str == bits::nan<C> ()) - value_ = std::numeric_limits<float>::quiet_NaN (); - else - { - zc_istream<C> is (str); - is.imbue (std::locale::classic ()); - - if (!(is >> value_ && is.exhausted ())) - throw invalid_value<C> (bits::float_<C> (), str); - } - } - - template <typename C> - float float_pimpl<C>:: - post_float () - { - return value_; - } - - - // double - // - template <typename C> - void double_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void double_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void double_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - if (str == bits::positive_inf<C> ()) - value_ = std::numeric_limits<double>::infinity (); - else if (str == bits::negative_inf<C> ()) - value_ = -std::numeric_limits<double>::infinity (); - else if (str == bits::nan<C> ()) - value_ = std::numeric_limits<double>::quiet_NaN (); - else - { - zc_istream<C> is (str); - is.imbue (std::locale::classic ()); - - if (!(is >> value_ && is.exhausted ())) - throw invalid_value<C> (bits::double_<C> (), str); - } - } - - template <typename C> - double double_pimpl<C>:: - post_double () - { - return value_; - } - - // decimal - // - template <typename C> - void decimal_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void decimal_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - void decimal_pimpl<C>:: - _post () - { - ro_string<C> str (str_); - trim (str); - - zc_istream<C> is (str); - is.imbue (std::locale::classic ()); - - //@@ TODO: now we accept scientific notations and INF/NaN. - // - if (!(is >> value_ && is.exhausted ())) - throw invalid_value<C> (bits::decimal<C> (), str); - } - - template <typename C> - double decimal_pimpl<C>:: - post_decimal () - { - return value_; - } - - // string - // - template <typename C> - void string_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void string_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - std::basic_string<C> string_pimpl<C>:: - post_string () - { - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // normalized_string - // - template <typename C> - void normalized_string_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void normalized_string_pimpl<C>:: - _characters (const ro_string<C>& s) - { - str_ += s; - } - - template <typename C> - std::basic_string<C> normalized_string_pimpl<C>:: - post_normalized_string () - { - typedef typename std::basic_string<C>::size_type size_type; - - size_type size (str_.size ()); - - for (size_type i (0); i < size; ++i) - { - C& c = str_[i]; - - if (c == C (0x0A) || c == C (0x0D) || c == C (0x09)) - c = C (0x20); - } - - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // token - // - template <typename C> - void token_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void token_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - std::basic_string<C> token_pimpl<C>:: - post_token () - { - typedef typename std::basic_string<C>::size_type size_type; - - size_type size (str_.size ()); - size_type j (0); - - bool subs (false); - - for (size_type i (0); i < size; ++i) - { - C c = str_[i]; - - if (c == C (0x20) || c == C (0x0A) || - c == C (0x0D) || c == C (0x09)) - { - subs = true; - } - else - { - if (subs) - { - subs = false; - str_[j++] = C (0x20); - } - - str_[j++] = c; - } - } - - str_.resize (j); - - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // name - // - template <typename C> - void name_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void name_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void name_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - - // For now we are only checking the US-ASCII characters. - // - - bool ok (size != 0); - - if (ok) - { - unsigned int c (static_cast<unsigned int> (str_[0])); - - ok = c >= 0x80 || - (bits::char_table<unsigned char>::table[c] & - bits::name_first_mask); - - if (ok) - { - for (size_type i (1); i < size; ++i) - { - c = static_cast<unsigned int> (str_[i]); - - if (c < 0x80 && - !(bits::char_table<unsigned char>::table[c] & - bits::name_mask)) - { - ok = false; - break; - } - } - } - } - - if (!ok) - throw invalid_value<C> (bits::name<C> (), tmp); - - str_.resize (size); - } - - template <typename C> - std::basic_string<C> name_pimpl<C>:: - post_name () - { - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // nmtoken - // - template <typename C> - void nmtoken_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void nmtoken_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void nmtoken_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - - // For now we are only checking the US-ASCII characters. - // - - bool ok (size != 0); - - if (ok) - { - for (size_type i (0); i < size; ++i) - { - unsigned int c (static_cast<unsigned int> (str_[i])); - - if (c < 0x80 && - !(bits::char_table<unsigned char>::table[c] & - bits::name_mask)) - { - ok = false; - break; - } - } - } - - if (!ok) - throw invalid_value<C> (bits::nmtoken<C> (), tmp); - - str_.resize (size); - } - - template <typename C> - std::basic_string<C> nmtoken_pimpl<C>:: - post_nmtoken () - { - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // nmtokens - // - template <typename C> - void nmtokens_pimpl<C>:: - _pre () - { - nmtokens_pskel<C>::_pre (); - seq_.clear (); - } - - template <typename C> - void nmtokens_pimpl<C>:: - _post () - { - nmtokens_pskel<C>::_post (); - - // Should have at least one element. - // - if (seq_.size () < 1) - { - ro_string<C> tmp; - throw invalid_value<C> (bits::nmtokens<C> (), tmp); - } - } - - template <typename C> - string_sequence<C> nmtokens_pimpl<C>:: - post_nmtokens () - { - string_sequence<C> r; - r.swap (seq_); - return r; - } - - template <typename C> - void nmtokens_pimpl<C>:: - _xsd_parse_item (const ro_string<C>& s) - { - parser_.pre (); - parser_._pre (); - parser_._characters (s); - parser_._post (); - seq_.push_back (parser_.post_nmtoken ()); - } - - // ncname - // - namespace bits - { - template <typename C> - bool - valid_ncname (const C* s, typename ro_string<C>::size_type size) - { - typedef typename ro_string<C>::size_type size_type; - - // For now we are only checking the US-ASCII characters. - // - bool ok (size != 0); - - if (ok) - { - unsigned int c (static_cast<unsigned int> (s[0])); - - ok = c >= 0x80 || - ((bits::char_table<unsigned char>::table[c] & - bits::name_first_mask) && c != C (':')); - - if (ok) - { - for (size_type i (1); i < size; ++i) - { - c = static_cast<unsigned int> (s[i]); - - if (c < 0x80 && - !(bits::char_table<unsigned char>::table[c] & - bits::ncname_mask)) - { - ok = false; - break; - } - } - } - } - - return ok; - } - } - - template <typename C> - void ncname_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void ncname_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void ncname_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - - if (!bits::valid_ncname (tmp.data (), size)) - throw invalid_value<C> (bits::ncname<C> (), tmp); - - str_.resize (size); - } - - template <typename C> - std::basic_string<C> ncname_pimpl<C>:: - post_ncname () - { - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // id - // - template <typename C> - void id_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void id_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void id_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - - if (!bits::valid_ncname (tmp.data (), size)) - throw invalid_value<C> (bits::id<C> (), tmp); - - str_.resize (size); - } - - template <typename C> - std::basic_string<C> id_pimpl<C>:: - post_id () - { - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // idref - // - template <typename C> - void idref_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void idref_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void idref_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - - if (!bits::valid_ncname (tmp.data (), size)) - throw invalid_value<C> (bits::idref<C> (), tmp); - - str_.resize (size); - } - - template <typename C> - std::basic_string<C> idref_pimpl<C>:: - post_idref () - { - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // idrefs - // - template <typename C> - void idrefs_pimpl<C>:: - _pre () - { - idrefs_pskel<C>::_pre (); - seq_.clear (); - } - - template <typename C> - void idrefs_pimpl<C>:: - _post () - { - idrefs_pskel<C>::_post (); - - // Should have at least one element. - // - if (seq_.size () < 1) - { - ro_string<C> tmp; - throw invalid_value<C> (bits::idrefs<C> (), tmp); - } - } - - template <typename C> - string_sequence<C> idrefs_pimpl<C>:: - post_idrefs () - { - string_sequence<C> r; - r.swap (seq_); - return r; - } - - template <typename C> - void idrefs_pimpl<C>:: - _xsd_parse_item (const ro_string<C>& s) - { - parser_.pre (); - parser_._pre (); - parser_._characters (s); - parser_._post (); - seq_.push_back (parser_.post_idref ()); - } - - // language - // - template <typename C> - void language_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void language_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void language_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - - // language := ALPHA{1,8} *(-(ALPHA | DIGIT){1,8}) - // - bool ok (true); - - for (size_type tag (0), i (0); ; ++tag) - { - size_type n (0); - - for (; i < size && n < 8; ++n, ++i) - { - C c (tmp[i]); - - if (!((c >= C ('a') && c <= C ('z')) || - (c >= C ('A') && c <= C ('Z')) || - (tag != 0 && c >= C ('0') && c <= C ('9')))) - break; - } - - if (n == 0) - { - ok = false; - break; - } - - if (i == size) - break; - - if (tmp[i++] != C ('-')) - { - ok = false; - break; - } - } - - if (!ok) - throw invalid_value<C> (bits::language<C> (), tmp); - - str_.resize (size); - } - - template <typename C> - std::basic_string<C> language_pimpl<C>:: - post_language () - { - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // uri - // - template <typename C> - void uri_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void uri_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - std::basic_string<C> uri_pimpl<C>:: - post_uri () - { - // According to Datatypes 3.2.17 and RFC2396 pretty much anything - // can be a URI and conforming processors do not need to figure - // out and verify particular URI schemes. - // - ro_string<C> tmp (str_); - str_.resize (trim_right (tmp)); - - std::basic_string<C> r; - r.swap (str_); - return r; - } - - // qname - // - template <typename C> - void qname_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void qname_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void qname_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - size_type pos (tmp.find (C (':'))); - - const C* s (tmp.data ()); - - if (pos != ro_string<C>::npos) - { - if (!bits::valid_ncname (s, pos) || - !bits::valid_ncname (s + pos + 1, size - pos - 1)) - throw invalid_value<C> (bits::qname<C> (), tmp); - - prefix_.assign (s, pos); - name_.assign (s + pos + 1, size - pos - 1); - } - else - { - if (!bits::valid_ncname (s, size)) - throw invalid_value<C> (bits::qname<C> (), tmp); - - prefix_.clear (); - str_.resize (size); - name_.swap (str_); - } - } - - template <typename C> - qname<C> qname_pimpl<C>:: - post_qname () - { - return prefix_.empty () - ? qname<C> (name_) - : qname<C> (prefix_, name_); - } - - // base64_binary - // - template <typename C> - void base64_binary_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void base64_binary_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - namespace bits - { - template <typename C> - inline unsigned char - base64_decode (C c) - { - unsigned char r (0xFF); - - if (c >= C('A') && c <= C ('Z')) - r = static_cast<unsigned char> (c - C ('A')); - else if (c >= C('a') && c <= C ('z')) - r = static_cast<unsigned char> (c - C ('a') + 26); - else if (c >= C('0') && c <= C ('9')) - r = static_cast<unsigned char> (c - C ('0') + 52); - else if (c == C ('+')) - r = 62; - else if (c == C ('/')) - r = 63; - - return r; - } - } - - template <typename C> - void base64_binary_pimpl<C>:: - _post () - { - typedef typename std::basic_string<C>::size_type size_type; - - size_type size (str_.size ()); - const C* src (str_.c_str ()); - - // Remove all whitespaces. - // - { - size_type j (0); - - bool subs (false); - - for (size_type i (0); i < size; ++i) - { - C c = str_[i]; - - if (c == C (0x20) || c == C (0x0A) || - c == C (0x0D) || c == C (0x09)) - { - subs = true; - } - else - { - if (subs) - subs = false; - - str_[j++] = c; - } - } - - size = j; - str_.resize (size); - } - - // Our length should be a multiple of four. - // - if (size == 0 || size % 4 != 0) - throw invalid_value<C> (bits::base64_binary<C> (), str_); - - size_type quad_count (size / 4); - size_type capacity (quad_count * 3 + 1); - - buf_.reset (new buffer (capacity, capacity)); - char* dst (buf_->data ()); - - size_type si (0), di (0); // Source and destination indexes. - - // Process all quads except the last one. - // - unsigned char b1, b2, b3, b4; - - for (size_type q (0); q < quad_count - 1; ++q) - { - b1 = bits::base64_decode (src[si++]); - b2 = bits::base64_decode (src[si++]); - b3 = bits::base64_decode (src[si++]); - b4 = bits::base64_decode (src[si++]); - - if (b1 == 0xFF || b2 == 0xFF || b3 == 0xFF || b4 == 0xFF) - throw invalid_value<C> (bits::base64_binary<C> (), str_); - - dst[di++] = (b1 << 2) | (b2 >> 4); - dst[di++] = (b2 << 4) | (b3 >> 2); - dst[di++] = (b3 << 6) | b4; - } - - // Process the last quad. The first two octets are always there. - // - b1 = bits::base64_decode (src[si++]); - b2 = bits::base64_decode (src[si++]); - - if (b1 == 0xFF || b2 == 0xFF) - throw invalid_value<C> (bits::base64_binary<C> (), str_); - - C e3 (src[si++]); - C e4 (src[si++]); - - if (e4 == C ('=')) - { - if (e3 == C ('=')) - { - // Two pads. Last 4 bits in b2 should be zero. - // - if ((b2 & 0x0F) != 0) - throw invalid_value<C> (bits::base64_binary<C> (), str_); - - dst[di++] = (b1 << 2) | (b2 >> 4); - } - else - { - // One pad. Last 2 bits in b3 should be zero. - // - b3 = bits::base64_decode (e3); - - if (b3 == 0xFF || (b3 & 0x03) != 0) - throw invalid_value<C> (bits::base64_binary<C> (), str_); - - dst[di++] = (b1 << 2) | (b2 >> 4); - dst[di++] = (b2 << 4) | (b3 >> 2); - } - } - else - { - // No pads. - // - b3 = bits::base64_decode (e3); - b4 = bits::base64_decode (e4); - - if (b3 == 0xFF || b4 == 0xFF) - throw invalid_value<C> (bits::base64_binary<C> (), str_); - - dst[di++] = (b1 << 2) | (b2 >> 4); - dst[di++] = (b2 << 4) | (b3 >> 2); - dst[di++] = (b3 << 6) | b4; - } - - // Set the real size. - // - buf_->size (di); - } - - template <typename C> - XSD_AUTO_PTR<buffer> base64_binary_pimpl<C>:: - post_base64_binary () - { -#ifdef XSD_CXX11 - return std::move (buf_); -#else - return buf_; -#endif - } - - // hex_binary - // - template <typename C> - void hex_binary_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void hex_binary_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - namespace bits - { - template <typename C> - inline unsigned char - hex_decode (C c) - { - unsigned char r (0xFF); - - if (c >= C('0') && c <= C ('9')) - r = static_cast<unsigned char> (c - C ('0')); - else if (c >= C ('A') && c <= C ('F')) - r = static_cast<unsigned char> (10 + (c - C ('A'))); - else if (c >= C ('a') && c <= C ('f')) - r = static_cast<unsigned char> (10 + (c - C ('a'))); - - return r; - } - } - - template <typename C> - void hex_binary_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - - if (size % 2 != 0) - throw invalid_value<C> (bits::hex_binary<C> (), tmp); - - buffer::size_t n (size / 2); - buf_.reset (new buffer (n)); - - if (n != 0) - { - const C* src (tmp.data ()); - char* dst (buf_->data ()); - buffer::size_t i (0); - - for (; i < n; ++i) - { - unsigned char h (bits::hex_decode (src[2 * i])); - unsigned char l (bits::hex_decode (src[2 * i + 1])); - - if (h == 0xFF || l == 0xFF) - break; - - dst[i] = (h << 4) | l; - } - - if (i != n) - throw invalid_value<C> (bits::hex_binary<C> (), tmp); - } - } - - template <typename C> - XSD_AUTO_PTR<buffer> hex_binary_pimpl<C>:: - post_hex_binary () - { -#ifdef XSD_CXX11 - return std::move (buf_); -#else - return buf_; -#endif - } - - // time_zone - // - namespace bits - { - // Datatypes 3.2.7.3. Return false if time zone is invalid. - // - template <typename C> - bool - parse_tz (const C* s, - typename std::basic_string<C>::size_type n, - short& h, short& m) - { - // time_zone := Z|(+|-)HH:MM - // - if (n == 0) - { - return false; - } - else if (s[0] == 'Z') - { - if (n != 1) - return false; - - h = 0; - m = 0; - } - else - { - if (n != 6 || (s[0] != '-' && s[0] != '+') || s[3] != ':') - return false; - - // Parse hours. - // - char d1 = s[1]; - char d2 = s[2]; - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - return false; - - h = 10 * (d1 - '0') + (d2 - '0'); - - if (h > 14) - return false; - - // Parse minutes. - // - d1 = s[4]; - d2 = s[5]; - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - return false; - - m = 10 * (d1 - '0') + (d2 - '0'); - - if (m > 59 || (h == 14 && m != 0)) - return false; - - if (s[0] == '-') - { - h = -h; - m = -m; - } - } - - return true; - } - } - - // gday - // - template <typename C> - void gday_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void gday_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void gday_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - // gday := ---DD[Z|(+|-)HH:MM] - // - if (size < 5 || - s[0] != C ('-') || s[1] != C ('-') || s[2] != C ('-')) - throw invalid_value<C> (bits::gday<C> (), tmp); - - C d1 (s[3]), d2 (s[4]); - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - throw invalid_value<C> (bits::gday<C> (), tmp); - - day_ = 10 * (d1 - '0') + (d2 - '0'); - - if (day_ < 1 || day_ > 31) - throw invalid_value<C> (bits::gday<C> (), tmp); - - if (size > 5) - { - if (!bits::parse_tz (s + 5, size - 5, zh_, zm_)) - throw invalid_value<C> (bits::gday<C> (), tmp); - - z_ = true; - } - else - z_ = false; - } - - template <typename C> - gday gday_pimpl<C>:: - post_gday () - { - return z_ ? gday (day_, zh_, zm_) : gday (day_); - } - - // gmonth - // - template <typename C> - void gmonth_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void gmonth_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void gmonth_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - // gmonth := --MM[Z|(+|-)HH:MM] - // - if (size < 4 || s[0] != C ('-') || s[1] != C ('-')) - throw invalid_value<C> (bits::gmonth<C> (), tmp); - - C d1 (s[2]), d2 (s[3]); - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - throw invalid_value<C> (bits::gmonth<C> (), tmp); - - month_ = 10 * (d1 - '0') + (d2 - '0'); - - if (month_ < 1 || month_ > 12) - throw invalid_value<C> (bits::gmonth<C> (), tmp); - - if (size > 4) - { - if (!bits::parse_tz (s + 4, size - 4, zh_, zm_)) - throw invalid_value<C> (bits::gmonth<C> (), tmp); - - z_ = true; - } - else - z_ = false; - } - - template <typename C> - gmonth gmonth_pimpl<C>:: - post_gmonth () - { - return z_ ? gmonth (month_, zh_, zm_) : gmonth (month_); - } - - // gyear - // - template <typename C> - void gyear_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void gyear_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void gyear_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - // gyear := [-]CCYY[N]*[Z|(+|-)HH:MM] - // - - if (size < 4 || (s[0] == C ('-') && size < 5)) - throw invalid_value<C> (bits::gyear<C> (), tmp); - - // Find the end of the year token. - // - size_type pos (s[0] == C ('-') ? 5 : 4); - for (; pos < size; ++pos) - { - C c (s[pos]); - - if (c == C ('Z') || c == C ('+') || c == C ('-')) - break; - } - - ro_string<C> year_fragment (s, pos); - zc_istream<C> is (year_fragment); - - if (!(is >> year_ && is.exhausted () && year_ != 0)) - throw invalid_value<C> (bits::gyear<C> (), tmp); - - if (pos < size) - { - if (!bits::parse_tz (s + pos, size - pos, zh_, zm_)) - throw invalid_value<C> (bits::gyear<C> (), tmp); - - z_ = true; - } - else - z_ = false; - } - - template <typename C> - gyear gyear_pimpl<C>:: - post_gyear () - { - return z_ ? gyear (year_, zh_, zm_) : gyear (year_); - } - - // gmonth_day - // - template <typename C> - void gmonth_day_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void gmonth_day_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void gmonth_day_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - // gmonth_day := --MM-DD[Z|(+|-)HH:MM] - // - if (size < 7 || - s[0] != C ('-') || s[1] != C ('-') || s[4] != C ('-')) - throw invalid_value<C> (bits::gmonth_day<C> (), tmp); - - // month - // - C d1 (s[2]), d2 (s[3]); - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - throw invalid_value<C> (bits::gmonth_day<C> (), tmp); - - month_ = 10 * (d1 - '0') + (d2 - '0'); - - if (month_ < 1 || month_ > 12) - throw invalid_value<C> (bits::gmonth_day<C> (), tmp); - - // day - // - d1 = s[5]; - d2 = s[6]; - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - throw invalid_value<C> (bits::gmonth_day<C> (), tmp); - - day_ = 10 * (d1 - '0') + (d2 - '0'); - - if (day_ < 1 || day_ > 31) - throw invalid_value<C> (bits::gmonth_day<C> (), tmp); - - // zone - // - if (size > 7) - { - if (!bits::parse_tz (s + 7, size - 7, zh_, zm_)) - throw invalid_value<C> (bits::gmonth_day<C> (), tmp); - - z_ = true; - } - else - z_ = false; - } - - template <typename C> - gmonth_day gmonth_day_pimpl<C>:: - post_gmonth_day () - { - return z_ - ? gmonth_day (month_, day_, zh_, zm_) - : gmonth_day (month_, day_); - } - - // gyear_month - // - template <typename C> - void gyear_month_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void gyear_month_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void gyear_month_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - // gyear_month := [-]CCYY[N]*-MM[Z|(+|-)HH:MM] - // - - if (size < 7 || (s[0] == C ('-') && size < 8)) - throw invalid_value<C> (bits::gyear_month<C> (), tmp); - - // Find the end of the year token. - // - size_type pos (tmp.find (C ('-'), s[0] == C ('-') ? 5 : 4)); - - if (pos == ro_string<C>::npos || (size - pos - 1) < 2) - throw invalid_value<C> (bits::gyear_month<C> (), tmp); - - ro_string<C> year_fragment (s, pos); - zc_istream<C> yis (year_fragment); - - if (!(yis >> year_ && yis.exhausted () && year_ != 0)) - throw invalid_value<C> (bits::gyear_month<C> (), tmp); - - // month - // - C d1 (s[pos + 1]), d2 (s[pos + 2]); - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - throw invalid_value<C> (bits::gyear_month<C> (), tmp); - - month_ = 10 * (d1 - '0') + (d2 - '0'); - - if (month_ < 1 || month_ > 12) - throw invalid_value<C> (bits::gyear_month<C> (), tmp); - - // zone - // - pos += 3; - - if (pos < size) - { - if (!bits::parse_tz (s + pos, size - pos, zh_, zm_)) - throw invalid_value<C> (bits::gyear_month<C> (), tmp); - - z_ = true; - } - else - z_ = false; - } - - template <typename C> - gyear_month gyear_month_pimpl<C>:: - post_gyear_month () - { - return z_ - ? gyear_month (year_, month_, zh_, zm_) - : gyear_month (year_, month_); - } - - // date - // - template <typename C> - void date_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void date_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void date_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - // date := [-]CCYY[N]*-MM-DD[Z|(+|-)HH:MM] - // - - if (size < 10 || (s[0] == C ('-') && size < 11)) - throw invalid_value<C> (bits::date<C> (), tmp); - - // Find the end of the year token. - // - size_type pos (tmp.find (C ('-'), s[0] == C ('-') ? 5 : 4)); - - if (pos == ro_string<C>::npos - || (size - pos - 1) < 5 - || s[pos + 3] != C ('-')) - throw invalid_value<C> (bits::date<C> (), tmp); - - ro_string<C> year_fragment (s, pos); - zc_istream<C> yis (year_fragment); - - if (!(yis >> year_ && yis.exhausted () && year_ != 0)) - throw invalid_value<C> (bits::date<C> (), tmp); - - // month - // - C d1 (s[pos + 1]), d2 (s[pos + 2]); - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - throw invalid_value<C> (bits::date<C> (), tmp); - - month_ = 10 * (d1 - '0') + (d2 - '0'); - - if (month_ < 1 || month_ > 12) - throw invalid_value<C> (bits::date<C> (), tmp); - - // day - // - d1 = s[pos + 4]; - d2 = s[pos + 5]; - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - throw invalid_value<C> (bits::date<C> (), tmp); - - day_ = 10 * (d1 - '0') + (d2 - '0'); - - if (day_ < 1 || day_ > 31) - throw invalid_value<C> (bits::date<C> (), tmp); - - // zone - // - pos += 6; - - if (pos < size) - { - if (!bits::parse_tz (s + pos, size - pos, zh_, zm_)) - throw invalid_value<C> (bits::date<C> (), tmp); - - z_ = true; - } - else - z_ = false; - } - - template <typename C> - date date_pimpl<C>:: - post_date () - { - return z_ - ? date (year_, month_, day_, zh_, zm_) - : date (year_, month_, day_); - } - - // time - // - template <typename C> - void time_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void time_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void time_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - // time := HH:MM:SS[.S+][Z|(+|-)HH:MM] - // - - if (size < 8 || s[2] != C (':') || s[5] != C (':')) - throw invalid_value<C> (bits::time<C> (), tmp); - - // hours - // - C d1 (s[0]), d2 (s[1]); - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - throw invalid_value<C> (bits::time<C> (), tmp); - - hours_ = 10 * (d1 - '0') + (d2 - '0'); - - if (hours_ > 24) - throw invalid_value<C> (bits::time<C> (), tmp); - - // minutes - // - d1 = s[3]; - d2 = s[4]; - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - throw invalid_value<C> (bits::time<C> (), tmp); - - minutes_ = 10 * (d1 - '0') + (d2 - '0'); - - if (minutes_ > 59) - throw invalid_value<C> (bits::time<C> (), tmp); - - // Find the end of the seconds fragment. - // - size_type pos (8); - for (; pos < size; ++pos) - { - C c (s[pos]); - - if (c == C ('Z') || c == C ('+') || c == C ('-')) - break; - } - - // At least one digit should follow the fraction point. - // - if ((pos - 6) == 3) - throw invalid_value<C> (bits::time<C> (), tmp); - - ro_string<C> seconds_fragment (s + 6, pos - 6); - zc_istream<C> sis (seconds_fragment); - - if (!(sis >> seconds_ && sis.exhausted () && seconds_ < 60.0)) - throw invalid_value<C> (bits::time<C> (), tmp); - - if (hours_ == 24 && (minutes_ != 0 || seconds_ != 0.0)) - throw invalid_value<C> (bits::time<C> (), tmp); - - // zone - // - if (pos < size) - { - if (!bits::parse_tz (s + pos, size - pos, zh_, zm_)) - throw invalid_value<C> (bits::time<C> (), tmp); - - z_ = true; - } - else - z_ = false; - } - - template <typename C> - time time_pimpl<C>:: - post_time () - { - return z_ - ? time (hours_, minutes_, seconds_, zh_, zm_) - : time (hours_, minutes_, seconds_); - } - - - // date_time - // - template <typename C> - void date_time_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void date_time_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - template <typename C> - void date_time_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - const C* s (tmp.data ()); - - // date_time := [-]CCYY[N]*-MM-DDTHH:MM:SS[.S+][Z|(+|-)HH:MM] - // - - if (size < 19 || (s[0] == C ('-') && size < 20)) - throw invalid_value<C> (bits::date_time<C> (), tmp); - - // Find the end of the year token. - // - size_type pos (tmp.find (C ('-'), s[0] == C ('-') ? 5 : 4)); - - if (pos == ro_string<C>::npos || (size - pos - 1) < 14 - || s[pos + 3] != C ('-') || s[pos + 6] != C ('T') - || s[pos + 9] != C (':') || s[pos + 12] != C (':')) - throw invalid_value<C> (bits::date_time<C> (), tmp); - - // year - // - ro_string<C> year_fragment (s, pos); - zc_istream<C> yis (year_fragment); - - if (!(yis >> year_ && yis.exhausted () && year_ != 0)) - throw invalid_value<C> (bits::date_time<C> (), tmp); - - // month - // - C d1 (s[pos + 1]), d2 (s[pos + 2]); - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - throw invalid_value<C> (bits::date_time<C> (), tmp); - - month_ = 10 * (d1 - '0') + (d2 - '0'); - - if (month_ < 1 || month_ > 12) - throw invalid_value<C> (bits::date_time<C> (), tmp); - - // day - // - d1 = s[pos + 4]; - d2 = s[pos + 5]; - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - throw invalid_value<C> (bits::date_time<C> (), tmp); - - day_ = 10 * (d1 - '0') + (d2 - '0'); - - if (day_ < 1 || day_ > 31) - throw invalid_value<C> (bits::date_time<C> (), tmp); - - pos += 7; // Point to the first H. - - // hours - // - d1 = s[pos]; - d2 = s[pos + 1]; - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - throw invalid_value<C> (bits::date_time<C> (), tmp); - - hours_ = 10 * (d1 - '0') + (d2 - '0'); - - if (hours_ > 24) - throw invalid_value<C> (bits::date_time<C> (), tmp); - - // minutes - // - d1 = s[pos + 3]; - d2 = s[pos + 4]; - - if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') - throw invalid_value<C> (bits::date_time<C> (), tmp); - - minutes_ = 10 * (d1 - '0') + (d2 - '0'); - - if (minutes_ > 59) - throw invalid_value<C> (bits::date_time<C> (), tmp); - - // Find the end of the seconds fragment. - // - pos += 6; // Point to the first S. - - size_type sec_end (pos + 2); - for (; sec_end < size; ++sec_end) - { - C c (s[sec_end]); - - if (c == C ('Z') || c == C ('+') || c == C ('-')) - break; - } - - // At least one digit should should follow the fraction point. - // - if ((sec_end - pos) == 3) - throw invalid_value<C> (bits::date_time<C> (), tmp); - - ro_string<C> seconds_fragment (s + pos, sec_end - pos); - zc_istream<C> sis (seconds_fragment); - - if (!(sis >> seconds_ && sis.exhausted () && seconds_ < 60.0)) - throw invalid_value<C> (bits::date_time<C> (), tmp); - - if (hours_ == 24 && (minutes_ != 0 || seconds_ != 0.0)) - throw invalid_value<C> (bits::date_time<C> (), tmp); - - // zone - // - if (sec_end < size) - { - if (!bits::parse_tz (s + sec_end, size - sec_end, zh_, zm_)) - throw invalid_value<C> (bits::date_time<C> (), tmp); - - z_ = true; - } - else - z_ = false; - } - - template <typename C> - date_time date_time_pimpl<C>:: - post_date_time () - { - return z_ - ? date_time (year_, month_, day_, hours_, minutes_, seconds_, - zh_, zm_) - : date_time (year_, month_, day_, hours_, minutes_, seconds_); - } - - // duration - // - template <typename C> - void duration_pimpl<C>:: - _pre () - { - str_.clear (); - } - - template <typename C> - void duration_pimpl<C>:: - _characters (const ro_string<C>& s) - { - if (str_.size () == 0) - { - ro_string<C> tmp (s.data (), s.size ()); - - if (trim_left (tmp) != 0) - str_ += tmp; - } - else - str_ += s; - } - - namespace bits - { - template <typename C> - inline typename ro_string<C>::size_type - duration_delim (const C* s, - typename ro_string<C>::size_type pos, - typename ro_string<C>::size_type size) - { - const C* p (s + pos); - for (; p < (s + size); ++p) - { - if (*p == C ('Y') || *p == C ('D') || *p == C ('M') || - *p == C ('H') || *p == C ('M') || *p == C ('S') || - *p == C ('T')) - break; - } - - return p - s; - } - } - - template <typename C> - void duration_pimpl<C>:: - _post () - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str_); - size_type size (trim_right (tmp)); - - negative_ = false; - years_ = 0; - months_ = 0; - days_ = 0; - hours_ = 0; - minutes_ = 0; - seconds_ = 0.0; - - // duration := [-]P[nY][nM][nD][TnHnMn[.n+]S] - // - const C* s (tmp.data ()); - - if (size < 3 || (s[0] == C ('-') && size < 4)) - throw invalid_value<C> (bits::duration<C> (), tmp); - - size_type pos (0); - - if (s[0] == C ('-')) - { - negative_ = true; - pos++; - } - - if (s[pos++] != C ('P')) - throw invalid_value<C> (bits::duration<C> (), tmp); - - size_type del (bits::duration_delim (s, pos, size)); - - // Duration should contain at least one component. - // - if (del == size) - throw invalid_value<C> (bits::duration<C> (), tmp); - - if (s[del] == C ('Y')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - - if (!(is >> years_ && is.exhausted ())) - throw invalid_value<C> (bits::duration<C> (), tmp); - - pos = del + 1; - del = bits::duration_delim (s, pos, size); - } - - if (del != size && s[del] == C ('M')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - - if (!(is >> months_ && is.exhausted ())) - throw invalid_value<C> (bits::duration<C> (), tmp); - - pos = del + 1; - del = bits::duration_delim (s, pos, size); - } - - if (del != size && s[del] == C ('D')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - - if (!(is >> days_ && is.exhausted ())) - throw invalid_value<C> (bits::duration<C> (), tmp); - - pos = del + 1; - del = bits::duration_delim (s, pos, size); - } - - if (del != size && s[del] == C ('T')) - { - pos = del + 1; - del = bits::duration_delim (s, pos, size); - - // At least one time component should be present. - // - if (del == size) - throw invalid_value<C> (bits::duration<C> (), tmp); - - if (s[del] == C ('H')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - - if (!(is >> hours_ && is.exhausted ())) - throw invalid_value<C> (bits::duration<C> (), tmp); - - pos = del + 1; - del = bits::duration_delim (s, pos, size); - } - - if (del != size && s[del] == C ('M')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - - if (!(is >> minutes_ && is.exhausted ())) - throw invalid_value<C> (bits::duration<C> (), tmp); - - pos = del + 1; - del = bits::duration_delim (s, pos, size); - } - - if (del != size && s[del] == C ('S')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - - if (!(is >> seconds_ && is.exhausted () && seconds_ >= 0.0)) - throw invalid_value<C> (bits::duration<C> (), tmp); - - pos = del + 1; - } - } - - // Something did not match or appeared in the wrong order. - // - if (pos != size) - throw invalid_value<C> (bits::duration<C> (), tmp); - } - - template <typename C> - duration duration_pimpl<C>:: - post_duration () - { - return duration ( - negative_, years_, months_, days_, hours_, minutes_, seconds_); - } - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.hxx b/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.hxx deleted file mode 100644 index 1ad6528..0000000 --- a/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.hxx +++ /dev/null @@ -1,647 +0,0 @@ -// file : xsd/cxx/parser/validating/xml-schema-pskel.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_HXX -#define XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_HXX - -#include <string> -#include <memory> // std::auto_ptr/unique_ptr - -#include <xsd/cxx/config.hxx> // XSD_AUTO_PTR - -#include <xsd/cxx/parser/xml-schema.hxx> -#include <xsd/cxx/parser/validating/parser.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - // anyType and anySimpleType. All events are routed to the - // _any_* callbacks. - // - template <typename C> - struct any_type_pskel: complex_content<C> - { - virtual bool - _start_element_impl (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>*); - - virtual bool - _end_element_impl (const ro_string<C>&, - const ro_string<C>&); - - virtual bool - _attribute_impl_phase_two (const ro_string<C>&, - const ro_string<C>&, - const ro_string<C>&); - - virtual bool - _characters_impl (const ro_string<C>&); - - virtual void - post_any_type () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct any_simple_type_pskel: simple_content<C> - { - virtual bool - _characters_impl (const ro_string<C>&); - - virtual void - post_any_simple_type () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // Boolean. - // - template <typename C> - struct boolean_pskel: simple_content<C> - { - virtual bool - post_boolean () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // 8-bit - // - template <typename C> - struct byte_pskel: simple_content<C> - { - virtual signed char - post_byte () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct unsigned_byte_pskel: simple_content<C> - { - virtual unsigned char - post_unsigned_byte () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // 16-bit - // - template <typename C> - struct short_pskel: simple_content<C> - { - virtual short - post_short () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct unsigned_short_pskel: simple_content<C> - { - virtual unsigned short - post_unsigned_short () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // 32-bit - // - template <typename C> - struct int_pskel: simple_content<C> - { - virtual int - post_int () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct unsigned_int_pskel: simple_content<C> - { - virtual unsigned int - post_unsigned_int () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // 64-bit - // - template <typename C> - struct long_pskel: simple_content<C> - { - virtual long long - post_long () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct unsigned_long_pskel: simple_content<C> - { - virtual unsigned long long - post_unsigned_long () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // Arbitrary-length integers. - // - template <typename C> - struct integer_pskel: simple_content<C> - { - virtual long long - post_integer () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct negative_integer_pskel: simple_content<C> - { - virtual long long - post_negative_integer () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct non_positive_integer_pskel: simple_content<C> - { - virtual long long - post_non_positive_integer () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct positive_integer_pskel: simple_content<C> - { - virtual unsigned long long - post_positive_integer () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct non_negative_integer_pskel: simple_content<C> - { - virtual unsigned long long - post_non_negative_integer () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // Floats. - // - template <typename C> - struct float_pskel: simple_content<C> - { - virtual float - post_float () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct double_pskel: simple_content<C> - { - virtual double - post_double () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct decimal_pskel: simple_content<C> - { - virtual double - post_decimal () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - - // Strings. - // - template <typename C> - struct string_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_string () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct normalized_string_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_normalized_string () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct token_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_token () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct name_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_name () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct nmtoken_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_nmtoken () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct nmtokens_pskel: list_base<C> - { - virtual string_sequence<C> - post_nmtokens () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct ncname_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_ncname () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct id_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_id () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct idref_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_idref () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct idrefs_pskel: list_base<C> - { - virtual string_sequence<C> - post_idrefs () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - // Language. - // - template <typename C> - struct language_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_language () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - // URI. - // - template <typename C> - struct uri_pskel: simple_content<C> - { - virtual std::basic_string<C> - post_uri () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - // QName. - // - template <typename C> - struct qname_pskel: simple_content<C> - { - virtual qname<C> - post_qname () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - // Base64 and hex binaries. - // - template <typename C> - struct base64_binary_pskel: simple_content<C> - { - virtual XSD_AUTO_PTR<buffer> - post_base64_binary () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct hex_binary_pskel: simple_content<C> - { - virtual XSD_AUTO_PTR<buffer> - post_hex_binary () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - // Time and date types. - // - template <typename C> - struct gday_pskel: simple_content<C> - { - virtual gday - post_gday () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct gmonth_pskel: simple_content<C> - { - virtual gmonth - post_gmonth () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct gyear_pskel: simple_content<C> - { - virtual gyear - post_gyear () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct gmonth_day_pskel: simple_content<C> - { - virtual gmonth_day - post_gmonth_day () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct gyear_month_pskel: simple_content<C> - { - virtual gyear_month - post_gyear_month () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct date_pskel: simple_content<C> - { - virtual date - post_date () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct time_pskel: simple_content<C> - { - virtual time - post_time () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct date_time_pskel: simple_content<C> - { - virtual date_time - post_date_time () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - - template <typename C> - struct duration_pskel: simple_content<C> - { - virtual duration - post_duration () = 0; - - static const C* - _static_type (); - - virtual const C* - _dynamic_type () const; - }; - } - } - } -} - -#include <xsd/cxx/parser/validating/xml-schema-pskel.txx> - -#endif // XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_HXX - -#include <xsd/cxx/parser/validating/xml-schema-pskel.ixx> diff --git a/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.ixx b/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.ixx deleted file mode 100644 index 7133a6c..0000000 --- a/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.ixx +++ /dev/null @@ -1,1247 +0,0 @@ -// file : xsd/cxx/parser/validating/xml-schema-pskel.ixx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) - -#ifndef XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_IXX_CHAR -#define XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_IXX_CHAR - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - template<> - inline const char* any_type_pskel<char>:: - _static_type () - { - return "anyType http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* any_type_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* any_simple_type_pskel<char>:: - _static_type () - { - return "anySimpleType http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* any_simple_type_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* boolean_pskel<char>:: - _static_type () - { - return "boolean http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* boolean_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* byte_pskel<char>:: - _static_type () - { - return "byte http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* byte_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* unsigned_byte_pskel<char>:: - _static_type () - { - return "unsignedByte http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* unsigned_byte_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* short_pskel<char>:: - _static_type () - { - return "short http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* short_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* unsigned_short_pskel<char>:: - _static_type () - { - return "unsignedShort http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* unsigned_short_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* int_pskel<char>:: - _static_type () - { - return "int http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* int_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* unsigned_int_pskel<char>:: - _static_type () - { - return "unsignedInt http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* unsigned_int_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* long_pskel<char>:: - _static_type () - { - return "long http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* long_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* unsigned_long_pskel<char>:: - _static_type () - { - return "unsignedLong http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* unsigned_long_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* integer_pskel<char>:: - _static_type () - { - return "integer http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* integer_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* negative_integer_pskel<char>:: - _static_type () - { - return "negativeInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* negative_integer_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* non_positive_integer_pskel<char>:: - _static_type () - { - return "nonPositiveInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* non_positive_integer_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* positive_integer_pskel<char>:: - _static_type () - { - return "positiveInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* positive_integer_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* non_negative_integer_pskel<char>:: - _static_type () - { - return "nonNegativeInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* non_negative_integer_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* float_pskel<char>:: - _static_type () - { - return "float http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* float_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* double_pskel<char>:: - _static_type () - { - return "double http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* double_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* decimal_pskel<char>:: - _static_type () - { - return "decimal http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* decimal_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* string_pskel<char>:: - _static_type () - { - return "string http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* string_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* normalized_string_pskel<char>:: - _static_type () - { - return "normalizedString http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* normalized_string_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* token_pskel<char>:: - _static_type () - { - return "token http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* token_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* name_pskel<char>:: - _static_type () - { - return "Name http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* name_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* nmtoken_pskel<char>:: - _static_type () - { - return "NMTOKEN http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* nmtoken_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* nmtokens_pskel<char>:: - _static_type () - { - return "NMTOKENS http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* nmtokens_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* ncname_pskel<char>:: - _static_type () - { - return "NCName http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* ncname_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* id_pskel<char>:: - _static_type () - { - return "ID http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* id_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* idref_pskel<char>:: - _static_type () - { - return "IDREF http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* idref_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* idrefs_pskel<char>:: - _static_type () - { - return "IDREFS http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* idrefs_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* language_pskel<char>:: - _static_type () - { - return "language http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* language_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* uri_pskel<char>:: - _static_type () - { - return "anyURI http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* uri_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* qname_pskel<char>:: - _static_type () - { - return "QName http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* qname_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* base64_binary_pskel<char>:: - _static_type () - { - return "base64Binary http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* base64_binary_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* hex_binary_pskel<char>:: - _static_type () - { - return "hexBinary http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* hex_binary_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* gday_pskel<char>:: - _static_type () - { - return "gDay http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* gday_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* gmonth_pskel<char>:: - _static_type () - { - return "gMonth http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* gmonth_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* gyear_pskel<char>:: - _static_type () - { - return "gYear http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* gyear_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* gmonth_day_pskel<char>:: - _static_type () - { - return "gMonthDay http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* gmonth_day_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* gyear_month_pskel<char>:: - _static_type () - { - return "gYearMonth http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* gyear_month_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* date_pskel<char>:: - _static_type () - { - return "date http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* date_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* time_pskel<char>:: - _static_type () - { - return "time http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* time_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* date_time_pskel<char>:: - _static_type () - { - return "dateTime http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* date_time_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const char* duration_pskel<char>:: - _static_type () - { - return "duration http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const char* duration_pskel<char>:: - _dynamic_type () const - { - return _static_type (); - } - } - } - } -} - -#endif // XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_IXX_CHAR -#endif // XSD_CXX_PARSER_USE_CHAR - - -#if defined(XSD_CXX_PARSER_USE_WCHAR) || !defined(XSD_CXX_PARSER_USE_CHAR) - -#ifndef XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_IXX_WCHAR -#define XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_IXX_WCHAR - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - template<> - inline const wchar_t* any_type_pskel<wchar_t>:: - _static_type () - { - return L"anyType http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* any_type_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* any_simple_type_pskel<wchar_t>:: - _static_type () - { - return L"anySimpleType http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* any_simple_type_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* boolean_pskel<wchar_t>:: - _static_type () - { - return L"boolean http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* boolean_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* byte_pskel<wchar_t>:: - _static_type () - { - return L"byte http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* byte_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* unsigned_byte_pskel<wchar_t>:: - _static_type () - { - return L"unsignedByte http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* unsigned_byte_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* short_pskel<wchar_t>:: - _static_type () - { - return L"short http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* short_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* unsigned_short_pskel<wchar_t>:: - _static_type () - { - return L"unsignedShort http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* unsigned_short_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* int_pskel<wchar_t>:: - _static_type () - { - return L"int http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* int_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* unsigned_int_pskel<wchar_t>:: - _static_type () - { - return L"unsignedInt http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* unsigned_int_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* long_pskel<wchar_t>:: - _static_type () - { - return L"long http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* long_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* unsigned_long_pskel<wchar_t>:: - _static_type () - { - return L"unsignedLong http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* unsigned_long_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* integer_pskel<wchar_t>:: - _static_type () - { - return L"integer http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* integer_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* negative_integer_pskel<wchar_t>:: - _static_type () - { - return L"negativeInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* negative_integer_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* non_positive_integer_pskel<wchar_t>:: - _static_type () - { - return L"nonPositiveInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* non_positive_integer_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* positive_integer_pskel<wchar_t>:: - _static_type () - { - return L"positiveInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* positive_integer_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* non_negative_integer_pskel<wchar_t>:: - _static_type () - { - return L"nonNegativeInteger http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* non_negative_integer_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* float_pskel<wchar_t>:: - _static_type () - { - return L"float http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* float_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* double_pskel<wchar_t>:: - _static_type () - { - return L"double http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* double_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* decimal_pskel<wchar_t>:: - _static_type () - { - return L"decimal http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* decimal_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* string_pskel<wchar_t>:: - _static_type () - { - return L"string http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* string_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* normalized_string_pskel<wchar_t>:: - _static_type () - { - return L"normalizedString http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* normalized_string_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* token_pskel<wchar_t>:: - _static_type () - { - return L"token http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* token_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* name_pskel<wchar_t>:: - _static_type () - { - return L"Name http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* name_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* nmtoken_pskel<wchar_t>:: - _static_type () - { - return L"NMTOKEN http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* nmtoken_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* nmtokens_pskel<wchar_t>:: - _static_type () - { - return L"NMTOKENS http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* nmtokens_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* ncname_pskel<wchar_t>:: - _static_type () - { - return L"NCName http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* ncname_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* id_pskel<wchar_t>:: - _static_type () - { - return L"ID http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* id_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* idref_pskel<wchar_t>:: - _static_type () - { - return L"IDREF http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* idref_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* idrefs_pskel<wchar_t>:: - _static_type () - { - return L"IDREFS http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* idrefs_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* language_pskel<wchar_t>:: - _static_type () - { - return L"language http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* language_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* uri_pskel<wchar_t>:: - _static_type () - { - return L"anyURI http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* uri_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* qname_pskel<wchar_t>:: - _static_type () - { - return L"QName http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* qname_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* base64_binary_pskel<wchar_t>:: - _static_type () - { - return L"base64Binary http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* base64_binary_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* hex_binary_pskel<wchar_t>:: - _static_type () - { - return L"hexBinary http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* hex_binary_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* gday_pskel<wchar_t>:: - _static_type () - { - return L"gDay http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* gday_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* gmonth_pskel<wchar_t>:: - _static_type () - { - return L"gMonth http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* gmonth_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* gyear_pskel<wchar_t>:: - _static_type () - { - return L"gYear http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* gyear_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* gmonth_day_pskel<wchar_t>:: - _static_type () - { - return L"gMonthDay http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* gmonth_day_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* gyear_month_pskel<wchar_t>:: - _static_type () - { - return L"gYearMonth http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* gyear_month_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* date_pskel<wchar_t>:: - _static_type () - { - return L"date http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* date_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* time_pskel<wchar_t>:: - _static_type () - { - return L"time http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* time_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* date_time_pskel<wchar_t>:: - _static_type () - { - return L"dateTime http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* date_time_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - - template<> - inline const wchar_t* duration_pskel<wchar_t>:: - _static_type () - { - return L"duration http://www.w3.org/2001/XMLSchema"; - } - - template<> - inline const wchar_t* duration_pskel<wchar_t>:: - _dynamic_type () const - { - return _static_type (); - } - } - } - } -} - -#endif // XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_IXX_WCHAR -#endif // XSD_CXX_PARSER_USE_WCHAR diff --git a/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.txx b/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.txx deleted file mode 100644 index eb2fe0d..0000000 --- a/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.txx +++ /dev/null @@ -1,67 +0,0 @@ -// file : xsd/cxx/parser/validating/xml-schema-pskel.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace validating - { - // any_type - // - - template <typename C> - bool any_type_pskel<C>:: - _start_element_impl (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>* type) - { - this->_start_any_element (ns, name, type); - this->complex_content<C>::context_.top ().any_ = true; - return true; - } - - template <typename C> - bool any_type_pskel<C>:: - _end_element_impl (const ro_string<C>& ns, const ro_string<C>& name) - { - this->complex_content<C>::context_.top ().any_ = false; - this->_end_any_element (ns, name); - return true; - } - - - template <typename C> - bool any_type_pskel<C>:: - _attribute_impl_phase_two (const ro_string<C>& ns, - const ro_string<C>& name, - const ro_string<C>& value) - { - this->_any_attribute (ns, name, value); - return true; - } - - template <typename C> - bool any_type_pskel<C>:: - _characters_impl (const ro_string<C>& s) - { - this->_any_characters (s); - return true; - } - - // any_simple_type - // - - template <typename C> - bool any_simple_type_pskel<C>:: - _characters_impl (const ro_string<C>& s) - { - this->_any_characters (s); - return true; - } - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/xerces/elements.hxx b/libxsd/xsd/cxx/parser/xerces/elements.hxx deleted file mode 100644 index 292b689..0000000 --- a/libxsd/xsd/cxx/parser/xerces/elements.hxx +++ /dev/null @@ -1,463 +0,0 @@ -// file : xsd/cxx/parser/xerces/elements.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_XERCES_ELEMENTS_HXX -#define XSD_CXX_PARSER_XERCES_ELEMENTS_HXX - -#include <memory> // std::auto_ptr/unique_ptr -#include <string> -#include <iosfwd> -#include <vector> - -#include <xercesc/sax/Locator.hpp> -#include <xercesc/sax/InputSource.hpp> -#include <xercesc/sax2/SAX2XMLReader.hpp> -#include <xercesc/sax2/DefaultHandler.hpp> - -#include <xercesc/util/XercesVersion.hpp> - -#include <xsd/cxx/config.hxx> // XSD_AUTO_PTR - -#include <xsd/cxx/xml/elements.hxx> -#include <xsd/cxx/xml/error-handler.hxx> - -#include <xsd/cxx/parser/exceptions.hxx> -#include <xsd/cxx/parser/elements.hxx> -#include <xsd/cxx/parser/document.hxx> - -#if _XERCES_VERSION < 30000 -# error Xerces-C++ 2-series is not supported -#endif - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace xerces - { - // - // - struct flags - { - // Use the following flags to modify the default behavior - // of the parsing functions. - // - - // Do not try to validate instance documents. - // - static const unsigned long dont_validate = 0x00000001; - - // Do not initialize the Xerces-C++ runtime. - // - static const unsigned long dont_initialize = 0x00000002; - - // Disable handling of subsequent imports for the same namespace - // in Xerces-C++ 3.1.0 and later. - // - static const unsigned long no_multiple_imports = 0x00000004; - - public: - flags (unsigned long x = 0) - : x_ (x) - { - } - - operator unsigned long () const - { - return x_; - } - - private: - unsigned long x_; - }; - - - // Parsing properties. Refer to xsd/cxx/xml/elements.hxx for - // XML-related properties. - // - template <typename C> - class properties: public xml::properties<C> - { - }; - - // - // - template <typename C> - struct document: cxx::parser::document<C> // VC likes it qualified - { - public: - document (parser_base<C>& root, - const C* root_element_name, - bool polymorphic = false); - - document (parser_base<C>& root, - const std::basic_string<C>& root_element_name, - bool polymorphic = false); - - document (parser_base<C>& root, - const C* root_element_namespace, - const C* root_element_name, - bool polymorphic = false); - - document (parser_base<C>& root, - const std::basic_string<C>& root_element_namespace, - const std::basic_string<C>& root_element_name, - bool polymorphic = false); - - protected: - explicit - document (bool polymorphic = false); - - public: - // Parse URI or a local file. We have to overload it for const C* - // bacause xercesc::InputSource has an implicit constructor that - // takes const char*. - // - void - parse (const std::basic_string<C>& uri, - flags = 0, - const properties<C>& = properties<C> ()); - - void - parse (const C* uri, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse URI or a local file with a user-provided error_handler - // object. - // - void - parse (const std::basic_string<C>& uri, - xml::error_handler<C>&, - flags = 0, - const properties<C>& = properties<C> ()); - - void - parse (const C* uri, - xml::error_handler<C>&, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse URI or a local file with a user-provided ErrorHandler - // object. Note that you must initialize the Xerces-C++ runtime - // before calling these functions. - // - void - parse (const std::basic_string<C>& uri, - xercesc::ErrorHandler&, - flags = 0, - const properties<C>& = properties<C> ()); - - void - parse (const C* uri, - xercesc::ErrorHandler&, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse URI or a local file using a user-provided SAX2XMLReader - // object. Note that you must initialize the Xerces-C++ runtime - // before calling these functions. - // - void - parse (const std::basic_string<C>& uri, - xercesc::SAX2XMLReader&, - flags = 0, - const properties<C>& = properties<C> ()); - - void - parse (const C* uri, - xercesc::SAX2XMLReader&, - flags = 0, - const properties<C>& = properties<C> ()); - - - public: - // System id is a "system" identifier of the resources (e.g., - // URI or a full file path). Public id is a "public" identifier - // of the resource (e.g., an application-specific name or a - // relative file path). System id is used to resolve relative - // paths. In diagnostics messages system id is used if public - // id is not available. Otherwise public id is used. - // - - // Parse std::istream. - // - void - parse (std::istream&, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse std::istream with a user-provided error_handler object. - // - void - parse (std::istream&, - xml::error_handler<C>&, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse std::istream with a user-provided ErrorHandler object. - // Note that you must initialize the Xerces-C++ runtime before - // calling this function. - // - void - parse (std::istream&, - xercesc::ErrorHandler&, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse std::istream using a user-provided SAX2XMLReader object. - // Note that you must initialize the Xerces-C++ runtime before - // calling this function. - // - void - parse (std::istream&, - xercesc::SAX2XMLReader&, - flags = 0, - const properties<C>& = properties<C> ()); - - - public: - // Parse std::istream with a system id. - // - void - parse (std::istream&, - const std::basic_string<C>& system_id, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse std::istream with a system id and a user-provided - // error_handler object. - // - void - parse (std::istream&, - const std::basic_string<C>& system_id, - xml::error_handler<C>&, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse std::istream with a system id and a user-provided - // ErrorHandler object. Note that you must initialize the - // Xerces-C++ runtime before calling this function. - // - void - parse (std::istream&, - const std::basic_string<C>& system_id, - xercesc::ErrorHandler&, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse std::istream with a system id using a user-provided - // SAX2XMLReader object. Note that you must initialize the - // Xerces-C++ runtime before calling this function. - // - void - parse (std::istream&, - const std::basic_string<C>& system_id, - xercesc::SAX2XMLReader&, - flags = 0, - const properties<C>& = properties<C> ()); - - - - public: - // Parse std::istream with system and public ids. - // - void - parse (std::istream&, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse std::istream with system and public ids and a user-provided - // error_handler object. - // - void - parse (std::istream&, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id, - xml::error_handler<C>&, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse std::istream with system and public ids and a user-provided - // ErrorHandler object. Note that you must initialize the Xerces-C++ - // runtime before calling this function. - // - void - parse (std::istream&, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id, - xercesc::ErrorHandler&, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse std::istream with system and public ids using a user- - // provided SAX2XMLReader object. Note that you must initialize - // the Xerces-C++ runtime before calling this function. - // - void - parse (std::istream&, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id, - xercesc::SAX2XMLReader&, - flags = 0, - const properties<C>& = properties<C> ()); - - - public: - // Parse InputSource. Note that you must initialize the Xerces-C++ - // runtime before calling this function. - // - void - parse (const xercesc::InputSource&, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse InputSource with a user-provided error_handler object. - // Note that you must initialize the Xerces-C++ runtime before - // calling this function. - // - void - parse (const xercesc::InputSource&, - xml::error_handler<C>&, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse InputSource with a user-provided ErrorHandler object. - // Note that you must initialize the Xerces-C++ runtime before - // calling this function. - // - void - parse (const xercesc::InputSource&, - xercesc::ErrorHandler&, - flags = 0, - const properties<C>& = properties<C> ()); - - - // Parse InputSource using a user-provided SAX2XMLReader object. - // Note that you must initialize the Xerces-C++ runtime before - // calling this function. - // - void - parse (const xercesc::InputSource&, - xercesc::SAX2XMLReader&, - flags = 0, - const properties<C>& = properties<C> ()); - - private: - void - parse (const std::basic_string<C>& uri, - xercesc::ErrorHandler&, - xercesc::SAX2XMLReader&, - flags, - const properties<C>&); - - void - parse (const xercesc::InputSource&, - xercesc::ErrorHandler&, - xercesc::SAX2XMLReader&, - flags, - const properties<C>&); - - private: - XSD_AUTO_PTR<xercesc::SAX2XMLReader> - create_sax_ (flags, const properties<C>&); - - private: - bool polymorphic_; - }; - - // - // - template <typename C> - struct event_router: xercesc::DefaultHandler - { - event_router (cxx::parser::document<C>&, bool polymorphic); - - // I know, some of those consts are stupid. But that's what - // Xerces folks put into their interfaces and VC thinks there - // are different signatures if one strips this fluff off. - // - virtual void - setDocumentLocator (const xercesc::Locator* const); - - virtual void - startElement (const XMLCh* const uri, - const XMLCh* const lname, - const XMLCh* const qname, - const xercesc::Attributes& attributes); - - virtual void - endElement (const XMLCh* const uri, - const XMLCh* const lname, - const XMLCh* const qname); - - virtual void - characters (const XMLCh* const s, const XMLSize_t length); - - virtual void - startPrefixMapping (const XMLCh* const prefix, - const XMLCh* const uri); - - virtual void - endPrefixMapping (const XMLCh* const prefix); - - private: - void - set_location (schema_exception<C>&); - - private: - const xercesc::Locator* loc_; - cxx::parser::document<C>& consumer_; - bool polymorphic_; - - // Last element name cache. - // - bool last_valid_; - std::basic_string<C> last_ns_; - std::basic_string<C> last_name_; - - // Namespace-prefix mapping. Only maintained in the polymorphic - // case. - // - struct ns_decl - { - ns_decl (const std::basic_string<C>& p, - const std::basic_string<C>& n) - : prefix (p), ns (n) - { - } - - std::basic_string<C> prefix; - std::basic_string<C> ns; - }; - - typedef std::vector<ns_decl> ns_decls; - - ns_decls ns_decls_; - }; - } - } - } -} - -#include <xsd/cxx/parser/xerces/elements.txx> - -#endif // XSD_CXX_PARSER_XERCES_ELEMENTS_HXX diff --git a/libxsd/xsd/cxx/parser/xerces/elements.txx b/libxsd/xsd/cxx/parser/xerces/elements.txx deleted file mode 100644 index a0a808f..0000000 --- a/libxsd/xsd/cxx/parser/xerces/elements.txx +++ /dev/null @@ -1,951 +0,0 @@ -// file : xsd/cxx/parser/xerces/elements.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <istream> -#include <cstddef> // std::size_t -#include <cassert> - -#include <xercesc/sax/SAXParseException.hpp> -#include <xercesc/sax2/Attributes.hpp> -#include <xercesc/sax2/XMLReaderFactory.hpp> -#include <xercesc/validators/schema/SchemaSymbols.hpp> -#include <xercesc/util/XMLUni.hpp> -#include <xercesc/util/XMLString.hpp> - -#include <xsd/cxx/xml/string.hxx> -#include <xsd/cxx/xml/sax/std-input-source.hxx> -#include <xsd/cxx/xml/sax/bits/error-handler-proxy.hxx> -#include <xsd/cxx/xml/bits/literals.hxx> // xml::bits::{xml_prefix, etc} - -#include <xsd/cxx/parser/error-handler.hxx> -#include <xsd/cxx/parser/schema-exceptions.hxx> - -namespace xsd -{ - namespace cxx - { - namespace parser - { - namespace xerces - { - - // document - // - - template <typename C> - document<C>:: - document (parser_base<C>& parser, - const C* name, - bool polymorphic) - : cxx::parser::document<C> (parser, std::basic_string<C> (), name), - polymorphic_ (polymorphic) - { - } - - template <typename C> - document<C>:: - document (parser_base<C>& parser, - const std::basic_string<C>& name, - bool polymorphic) - : cxx::parser::document<C> (parser, std::basic_string<C> (), name), - polymorphic_ (polymorphic) - { - } - - template <typename C> - document<C>:: - document (parser_base<C>& parser, - const C* ns, - const C* name, - bool polymorphic) - : cxx::parser::document<C> (parser, ns, name), - polymorphic_ (polymorphic) - { - } - - template <typename C> - document<C>:: - document (parser_base<C>& parser, - const std::basic_string<C>& ns, - const std::basic_string<C>& name, - bool polymorphic) - : cxx::parser::document<C> (parser, ns, name), - polymorphic_ (polymorphic) - { - } - - template <typename C> - document<C>:: - document (bool polymorphic) - : polymorphic_ (polymorphic) - { - } - - // parse (uri) - // - template <typename C> - void document<C>:: - parse (const std::basic_string<C>& uri, - flags f, - const properties<C>& p) - { - xml::auto_initializer init ((f & flags::dont_initialize) == 0); - - error_handler<C> eh; - xml::sax::bits::error_handler_proxy<C> eh_proxy (eh); - XSD_AUTO_PTR<xercesc::SAX2XMLReader> sax (create_sax_ (f, p)); - - parse (uri, eh_proxy, *sax, f, p); - - eh.throw_if_failed (); - } - - template <typename C> - void document<C>:: - parse (const C* uri, - flags f, - const properties<C>& p) - { - parse (std::basic_string<C> (uri), f, p); - } - - // error_handler - // - - template <typename C> - void document<C>:: - parse (const std::basic_string<C>& uri, - xml::error_handler<C>& eh, - flags f, - const properties<C>& p) - { - xml::auto_initializer init ((f & flags::dont_initialize) == 0); - - xml::sax::bits::error_handler_proxy<C> eh_proxy (eh); - XSD_AUTO_PTR<xercesc::SAX2XMLReader> sax (create_sax_ (f, p)); - - parse (uri, eh_proxy, *sax, f, p); - - if (eh_proxy.failed ()) - throw parsing<C> (); - } - - template <typename C> - void document<C>:: - parse (const C* uri, - xml::error_handler<C>& eh, - flags f, - const properties<C>& p) - { - parse (std::basic_string<C> (uri), eh, f, p); - } - - // ErrorHandler - // - - template <typename C> - void document<C>:: - parse (const std::basic_string<C>& uri, - xercesc::ErrorHandler& eh, - flags f, - const properties<C>& p) - { - xml::sax::bits::error_handler_proxy<C> eh_proxy (eh); - XSD_AUTO_PTR<xercesc::SAX2XMLReader> sax (create_sax_ (f, p)); - - parse (uri, eh_proxy, *sax, f, p); - - if (eh_proxy.failed ()) - throw parsing<C> (); - } - - template <typename C> - void document<C>:: - parse (const C* uri, - xercesc::ErrorHandler& eh, - flags f, - const properties<C>& p) - { - parse (std::basic_string<C> (uri), eh, f, p); - } - - // SAX2XMLReader - // - - template <typename C> - void document<C>:: - parse (const std::basic_string<C>& uri, - xercesc::SAX2XMLReader& sax, - flags f, - const properties<C>& p) - { - // If there is no error handler, then fall back on the default - // implementation. - // - xercesc::ErrorHandler* eh (sax.getErrorHandler ()); - - if (eh) - { - xml::sax::bits::error_handler_proxy<C> eh_proxy (*eh); - - parse (uri, eh_proxy, sax, f, p); - - if (eh_proxy.failed ()) - throw parsing<C> (); - } - else - { - error_handler<C> fallback_eh; - xml::sax::bits::error_handler_proxy<C> eh_proxy (fallback_eh); - - parse (uri, eh_proxy, sax, f, p); - - fallback_eh.throw_if_failed (); - } - } - - template <typename C> - void document<C>:: - parse (const C* uri, - xercesc::SAX2XMLReader& sax, - flags f, - const properties<C>& p) - { - parse (std::basic_string<C> (uri), sax, f, p); - } - - // parse (istream) - // - - template <typename C> - void document<C>:: - parse (std::istream& is, - flags f, - const properties<C>& p) - { - xml::auto_initializer init ((f & flags::dont_initialize) == 0); - - xml::sax::std_input_source isrc (is); - - parse (isrc, f, p); - } - - template <typename C> - void document<C>:: - parse (std::istream& is, - xml::error_handler<C>& eh, - flags f, - const properties<C>& p) - { - xml::auto_initializer init ((f & flags::dont_initialize) == 0); - xml::sax::std_input_source isrc (is); - parse (isrc, eh, f, p); - } - - template <typename C> - void document<C>:: - parse (std::istream& is, - xercesc::ErrorHandler& eh, - flags f, - const properties<C>& p) - { - xml::sax::std_input_source isrc (is); - parse (isrc, eh, f, p); - } - - template <typename C> - void document<C>:: - parse (std::istream& is, - xercesc::SAX2XMLReader& sax, - flags f, - const properties<C>& p) - { - xml::sax::std_input_source isrc (is); - parse (isrc, sax, f, p); - } - - - // parse (istream, system_id) - // - - - template <typename C> - void document<C>:: - parse (std::istream& is, - const std::basic_string<C>& system_id, - flags f, - const properties<C>& p) - { - xml::auto_initializer init ((f & flags::dont_initialize) == 0); - xml::sax::std_input_source isrc (is, system_id); - parse (isrc, f, p); - } - - template <typename C> - void document<C>:: - parse (std::istream& is, - const std::basic_string<C>& system_id, - xml::error_handler<C>& eh, - flags f, - const properties<C>& p) - { - xml::auto_initializer init ((f & flags::dont_initialize) == 0); - xml::sax::std_input_source isrc (is, system_id); - parse (isrc, eh, f, p); - } - - template <typename C> - void document<C>:: - parse (std::istream& is, - const std::basic_string<C>& system_id, - xercesc::ErrorHandler& eh, - flags f, - const properties<C>& p) - { - xml::sax::std_input_source isrc (is, system_id); - parse (isrc, eh, f, p); - } - - template <typename C> - void document<C>:: - parse (std::istream& is, - const std::basic_string<C>& system_id, - xercesc::SAX2XMLReader& sax, - flags f, - const properties<C>& p) - { - xml::sax::std_input_source isrc (is, system_id); - parse (isrc, sax, f, p); - } - - - // parse (istream, system_id, public_id) - // - - template <typename C> - void document<C>:: - parse (std::istream& is, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id, - flags f, - const properties<C>& p) - { - xml::auto_initializer init ((f & flags::dont_initialize) == 0); - xml::sax::std_input_source isrc (is, system_id, public_id); - parse (isrc, f, p); - } - - template <typename C> - void document<C>:: - parse (std::istream& is, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id, - xml::error_handler<C>& eh, - flags f, - const properties<C>& p) - { - xml::auto_initializer init ((f & flags::dont_initialize) == 0); - xml::sax::std_input_source isrc (is, system_id, public_id); - parse (isrc, eh, f, p); - } - - template <typename C> - void document<C>:: - parse (std::istream& is, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id, - xercesc::ErrorHandler& eh, - flags f, - const properties<C>& p) - { - xml::sax::std_input_source isrc (is, system_id, public_id); - parse (isrc, eh, f, p); - } - - template <typename C> - void document<C>:: - parse (std::istream& is, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id, - xercesc::SAX2XMLReader& sax, - flags f, - const properties<C>& p) - { - xml::sax::std_input_source isrc (is, system_id, public_id); - parse (isrc, sax, f, p); - } - - - // parse (InputSource) - // - - - template <typename C> - void document<C>:: - parse (const xercesc::InputSource& is, - flags f, - const properties<C>& p) - { - error_handler<C> eh; - xml::sax::bits::error_handler_proxy<C> eh_proxy (eh); - XSD_AUTO_PTR<xercesc::SAX2XMLReader> sax (create_sax_ (f, p)); - - parse (is, eh_proxy, *sax, f, p); - - eh.throw_if_failed (); - } - - template <typename C> - void document<C>:: - parse (const xercesc::InputSource& is, - xml::error_handler<C>& eh, - flags f, - const properties<C>& p) - { - xml::sax::bits::error_handler_proxy<C> eh_proxy (eh); - XSD_AUTO_PTR<xercesc::SAX2XMLReader> sax (create_sax_ (f, p)); - - parse (is, eh_proxy, *sax, f, p); - - if (eh_proxy.failed ()) - throw parsing<C> (); - } - - template <typename C> - void document<C>:: - parse (const xercesc::InputSource& is, - xercesc::ErrorHandler& eh, - flags f, - const properties<C>& p) - { - xml::sax::bits::error_handler_proxy<C> eh_proxy (eh); - XSD_AUTO_PTR<xercesc::SAX2XMLReader> sax (create_sax_ (f, p)); - - parse (is, eh_proxy, *sax, f, p); - - if (eh_proxy.failed ()) - throw parsing<C> (); - } - - - template <typename C> - void document<C>:: - parse (const xercesc::InputSource& is, - xercesc::SAX2XMLReader& sax, - flags f, - const properties<C>& p) - { - // If there is no error handler, then fall back on the default - // implementation. - // - xercesc::ErrorHandler* eh (sax.getErrorHandler ()); - - if (eh) - { - xml::sax::bits::error_handler_proxy<C> eh_proxy (*eh); - - parse (is, eh_proxy, sax, f, p); - - if (eh_proxy.failed ()) - throw parsing<C> (); - } - else - { - error_handler<C> fallback_eh; - xml::sax::bits::error_handler_proxy<C> eh_proxy (fallback_eh); - - parse (is, eh_proxy, sax, f, p); - - fallback_eh.throw_if_failed (); - } - } - - namespace Bits - { - struct ErrorHandlingController - { - ErrorHandlingController (xercesc::SAX2XMLReader& sax, - xercesc::ErrorHandler& eh) - : sax_ (sax), eh_ (sax_.getErrorHandler ()) - { - sax_.setErrorHandler (&eh); - } - - ~ErrorHandlingController () - { - sax_.setErrorHandler (eh_); - } - - private: - xercesc::SAX2XMLReader& sax_; - xercesc::ErrorHandler* eh_; - }; - - struct ContentHandlingController - { - ContentHandlingController (xercesc::SAX2XMLReader& sax, - xercesc::ContentHandler& ch) - : sax_ (sax), ch_ (sax_.getContentHandler ()) - { - sax_.setContentHandler (&ch); - } - - ~ContentHandlingController () - { - sax_.setContentHandler (ch_); - } - - private: - xercesc::SAX2XMLReader& sax_; - xercesc::ContentHandler* ch_; - }; - }; - - template <typename C> - void document<C>:: - parse (const std::basic_string<C>& uri, - xercesc::ErrorHandler& eh, - xercesc::SAX2XMLReader& sax, - flags, - const properties<C>&) - { - event_router<C> router (*this, polymorphic_); - - Bits::ErrorHandlingController ehc (sax, eh); - Bits::ContentHandlingController chc (sax, router); - - try - { - sax.parse (xml::string (uri).c_str ()); - } - catch (const schema_exception<C>& e) - { - xml::string id (e.id ()); - - xercesc::SAXParseException se ( - xml::string (e.message ()).c_str (), - id.c_str (), - id.c_str (), - static_cast<XMLFileLoc> (e.line ()), - static_cast<XMLFileLoc> (e.column ())); - - eh.fatalError (se); - } - } - - template <typename C> - void document<C>:: - parse (const xercesc::InputSource& is, - xercesc::ErrorHandler& eh, - xercesc::SAX2XMLReader& sax, - flags, - const properties<C>&) - { - event_router<C> router (*this, polymorphic_); - - Bits::ErrorHandlingController controller (sax, eh); - Bits::ContentHandlingController chc (sax, router); - - try - { - sax.parse (is); - } - catch (const schema_exception<C>& e) - { - xml::string id (e.id ()); - - xercesc::SAXParseException se ( - xml::string (e.message ()).c_str (), - id.c_str (), - id.c_str (), - static_cast<XMLFileLoc> (e.line ()), - static_cast<XMLFileLoc> (e.column ())); - - eh.fatalError (se); - } - } - - - template <typename C> - XSD_AUTO_PTR<xercesc::SAX2XMLReader> document<C>:: - create_sax_ (flags f, const properties<C>& p) - { - // Cannot use 'using namespace' because of MSXML conflict. - // - using xercesc::XMLUni; - using xercesc::SAX2XMLReader; - using xercesc::XMLReaderFactory; - - XSD_AUTO_PTR<SAX2XMLReader> sax ( - XMLReaderFactory::createXMLReader ()); - - sax->setFeature (XMLUni::fgSAX2CoreNameSpaces, true); - sax->setFeature (XMLUni::fgSAX2CoreNameSpacePrefixes, true); - sax->setFeature (XMLUni::fgXercesValidationErrorAsFatal, true); - - if (f & flags::dont_validate) - { - sax->setFeature (XMLUni::fgSAX2CoreValidation, false); - sax->setFeature (XMLUni::fgXercesSchema, false); - sax->setFeature (XMLUni::fgXercesSchemaFullChecking, false); - } - else - { - sax->setFeature (XMLUni::fgSAX2CoreValidation, true); - sax->setFeature (XMLUni::fgXercesSchema, true); - - // Xerces-C++ 3.1.0 is the first version with working multi import - // support. - // -#if _XERCES_VERSION >= 30100 - if (!(f & flags::no_multiple_imports)) - sax->setFeature (XMLUni::fgXercesHandleMultipleImports, true); -#endif - // This feature checks the schema grammar for additional - // errors. We most likely do not need it when validating - // instances (assuming the schema is valid). - // - sax->setFeature (XMLUni::fgXercesSchemaFullChecking, false); - } - - // Transfer properies if any. - // - - if (!p.schema_location ().empty ()) - { - xml::string sl (p.schema_location ()); - const void* v (sl.c_str ()); - - sax->setProperty ( - XMLUni::fgXercesSchemaExternalSchemaLocation, - const_cast<void*> (v)); - } - - if (!p.no_namespace_schema_location ().empty ()) - { - xml::string sl (p.no_namespace_schema_location ()); - const void* v (sl.c_str ()); - - sax->setProperty ( - XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation, - const_cast<void*> (v)); - } - - return sax; - } - - // event_router - // - template <typename C> - event_router<C>:: - event_router (cxx::parser::document<C>& consumer, bool polymorphic) - : loc_ (0), consumer_ (consumer), polymorphic_ (polymorphic) - { - } - - template <typename C> - void event_router<C>:: - setDocumentLocator (const xercesc::Locator* const loc) - { - loc_ = loc; - } - - template <typename C> - void event_router<C>:: - startElement(const XMLCh* const uri, - const XMLCh* const lname, - const XMLCh* const /*qname*/, - const xercesc::Attributes& attributes) - { - using xercesc::XMLUni; - using xercesc::XMLString; - - typedef std::basic_string<C> string; - - { - last_valid_ = true; - last_ns_ = xml::transcode<C> (uri); - last_name_ = xml::transcode<C> (lname); - - // Without this explicit construction IBM XL C++ complains - // about ro_string's copy ctor being private even though the - // temporary has been eliminated. Note that we cannot - // eliminate ns, name and value since ro_string does not make - // a copy. - // - ro_string<C> ro_ns (last_ns_); - ro_string<C> ro_name (last_name_); - - if (!polymorphic_) - { - try - { - consumer_.start_element (ro_ns, ro_name, 0); - } - catch (schema_exception<C>& e) - { - set_location (e); - throw; - } - } - else - { - // Search for the xsi:type attribute. - // - int i (attributes.getIndex ( - xercesc::SchemaSymbols::fgURI_XSI, - xercesc::SchemaSymbols::fgXSI_TYPE)); - - if (i == -1) - { - try - { - consumer_.start_element (ro_ns, ro_name, 0); - } - catch (schema_exception<C>& e) - { - set_location (e); - throw; - } - } - else - { - try - { - // @@ Probably need proper QName validation. - // - // Get the qualified type name and try to resolve it. - // - string qn (xml::transcode<C> (attributes.getValue (i))); - - ro_string<C> tp, tn; - typename string::size_type pos (qn.find (C (':'))); - - if (pos != string::npos) - { - tp.assign (qn.c_str (), pos); - tn.assign (qn.c_str () + pos + 1); - - if (tp.empty ()) - throw dynamic_type<C> (qn); - } - else - tn.assign (qn); - - if (tn.empty ()) - throw dynamic_type<C> (qn); - - // Search our namespace declaration stack. Sun CC 5.7 - // blows if we use const_reverse_iterator. - // - ro_string<C> tns; - for (typename ns_decls::reverse_iterator - it (ns_decls_.rbegin ()), e (ns_decls_.rend ()); - it != e; ++it) - { - if (it->prefix == tp) - { - tns.assign (it->ns); - break; - } - } - - if (!tp.empty () && tns.empty ()) - { - // The 'xml' prefix requires special handling. - // - if (tp == xml::bits::xml_prefix<C> ()) - tns.assign (xml::bits::xml_namespace<C> ()); - else - throw dynamic_type<C> (qn); - } - - // Construct the compound type id. - // - string id (tn.data (), tn.size ()); - - if (!tns.empty ()) - { - id += C (' '); - id.append (tns.data (), tns.size ()); - } - - ro_string<C> ro_id (id); - consumer_.start_element (ro_ns, ro_name, &ro_id); - } - catch (schema_exception<C>& e) - { - set_location (e); - throw; - } - } - } - } - - for (XMLSize_t i (0), end (attributes.getLength()); i < end; ++i) - { - const XMLCh* xns (attributes.getURI (i)); - - // When SAX2 reports the xmlns attribute, it does not include - // the proper attribute namespace. So we have to detect and - // rectify this case. - // - if (XMLString::equals (attributes.getQName (i), - XMLUni::fgXMLNSString)) - xns = XMLUni::fgXMLNSURIName; - - string ns (xml::transcode<C> (xns)); - string name (xml::transcode<C> (attributes.getLocalName (i))); - string value (xml::transcode<C> (attributes.getValue (i))); - - // Without this explicit construction IBM XL C++ complains - // about ro_string's copy ctor being private even though the - // temporary has been eliminated. Note that we cannot - // eliminate ns, name and value since ro_string does not make - // a copy. - // - ro_string<C> ro_ns (ns); - ro_string<C> ro_name (name); - ro_string<C> ro_value (value); - - try - { - consumer_.attribute (ro_ns, ro_name, ro_value); - } - catch (schema_exception<C>& e) - { - set_location (e); - throw; - } - } - } - - template <typename C> - void event_router<C>:: - endElement(const XMLCh* const uri, - const XMLCh* const lname, - const XMLCh* const /*qname*/) - { - typedef std::basic_string<C> string; - - try - { - // Without this explicit construction IBM XL C++ complains - // about ro_string's copy ctor being private even though the - // temporary has been eliminated. Note that we cannot - // eliminate ns, name and value since ro_string does not make - // a copy. - // - if (last_valid_) - { - last_valid_ = false; - ro_string<C> ro_ns (last_ns_); - ro_string<C> ro_name (last_name_); - - consumer_.end_element (ro_ns, ro_name); - } - else - { - string ns (xml::transcode<C> (uri)); - string name (xml::transcode<C> (lname)); - - ro_string<C> ro_ns (ns); - ro_string<C> ro_name (name); - - consumer_.end_element (ro_ns, ro_name); - } - } - catch (schema_exception<C>& e) - { - set_location (e); - throw; - } - } - - template <typename C> - void event_router<C>:: - characters (const XMLCh* const s, const XMLSize_t n) - { - typedef std::basic_string<C> string; - - if (n != 0) - { - string str (xml::transcode<C> (s, n)); - - // Without this explicit construction IBM XL C++ complains - // about ro_string's copy ctor being private even though the - // temporary has been eliminated. Note that we cannot - // eliminate str since ro_string does not make a copy. - // - ro_string<C> ro_str (str); - - try - { - consumer_.characters (ro_str); - } - catch (schema_exception<C>& e) - { - set_location (e); - throw; - } - } - } - - template <typename C> - void event_router<C>:: - startPrefixMapping (const XMLCh* const prefix, - const XMLCh* const uri) - { - if (polymorphic_) - { - typedef std::basic_string<C> string; - - string p (xml::transcode<C> (prefix)); - string ns (xml::transcode<C> (uri)); - - ns_decls_.push_back (ns_decl (p, ns)); - } - } - - template <typename C> - void event_router<C>:: - endPrefixMapping (const XMLCh* const prefix) - { - if (polymorphic_) - { - typedef std::basic_string<C> string; - - string p (xml::transcode<C> (prefix)); - - // Here we assume the prefixes are removed in the reverse - // order of them being added. This appears to how every - // sensible implementation works. - // - assert (ns_decls_.back ().prefix == p); - - ns_decls_.pop_back (); - } - } - - template <typename C> - void event_router<C>:: - set_location (schema_exception<C>& e) - { - if (loc_ != 0) - { - const XMLCh* id (loc_->getPublicId ()); - - if (id == 0) - id = loc_->getSystemId (); - - if (id != 0) - e.id (xml::transcode<C> (id)); - - e.line (static_cast<unsigned long> (loc_->getLineNumber ())); - e.column (static_cast<unsigned long> (loc_->getColumnNumber ())); - } - } - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/xml-schema.hxx b/libxsd/xsd/cxx/parser/xml-schema.hxx deleted file mode 100644 index be6c46e..0000000 --- a/libxsd/xsd/cxx/parser/xml-schema.hxx +++ /dev/null @@ -1,570 +0,0 @@ -// file : xsd/cxx/parser/xml-schema.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_PARSER_XML_SCHEMA_HXX -#define XSD_CXX_PARSER_XML_SCHEMA_HXX - -#include <string> -#include <vector> -#include <cstddef> // std::size_t - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // String sequence. Used for the NMTOKENS and IDREFS types. - // - template <typename C> - class string_sequence: public std::vector<std::basic_string<C> > - { - public: - typedef std::basic_string<C> value_type; - typedef std::vector<value_type> base; - typedef typename base::size_type size_type; - - string_sequence (); - - explicit - string_sequence (size_type n, const value_type& x = value_type ()); - - template <typename I> - string_sequence (const I& begin, const I& end); - }; - - template <typename C> - bool - operator== (const string_sequence<C>&, const string_sequence<C>&); - - template <typename C> - bool - operator!= (const string_sequence<C>&, const string_sequence<C>&); - - - // QName - // - template <typename C> - class qname - { - public: - explicit - qname (const std::basic_string<C>& name); - - qname (const std::basic_string<C>& prefix, - const std::basic_string<C>& name); - - void - swap (qname&); - - const std::basic_string<C>& - prefix () const; - - std::basic_string<C>& - prefix (); - - void - prefix (const std::basic_string<C>&); - - const std::basic_string<C>& - name () const; - - std::basic_string<C>& - name (); - - void - name (const std::basic_string<C>&); - - private: - std::basic_string<C> prefix_; - std::basic_string<C> name_; - }; - - template <typename C> - bool - operator== (const qname<C>&, const qname<C>&); - - template <typename C> - bool - operator!= (const qname<C>&, const qname<C>&); - - - // Binary buffer. Used for the base64Binary and hexBinary types. - // - class buffer - { - public: - typedef std::size_t size_t; - - class bounds {}; // Out of bounds exception. - - public: - ~buffer (); - - explicit - buffer (size_t size = 0); - buffer (size_t size, size_t capacity); - buffer (const void* data, size_t size); - buffer (const void* data, size_t size, size_t capacity); - - // If the assume_ownership argument is true, the buffer will - // assume the ownership of the data and will release the memory - // by calling operator delete (). - // - buffer (void* data, - size_t size, - size_t capacity, - bool assume_ownership); - - buffer (const buffer&); - - public: - buffer& - operator= (const buffer&); - - public: - size_t - capacity () const; - - // Returns true if the underlying buffer has moved. - // - bool - capacity (size_t); - - public: - size_t - size () const; - - // Returns true if the underlying buffer has moved. - // - bool - size (size_t); - - public: - const char* - data () const; - - char* - data (); - - const char* - begin () const; - - char* - begin (); - - const char* - end () const; - - char* - end (); - - public: - void - swap (buffer&); - - private: - bool - capacity (size_t capacity, bool copy); - - private: - char* data_; - size_t size_; - size_t capacity_; - }; - - bool - operator== (const buffer&, const buffer&); - - bool - operator!= (const buffer&, const buffer&); - - - // Time and date types. - // - - class time_zone - { - public: - time_zone (); - time_zone (short hours, short minutes); - - // Returns true if time zone is specified. - // - bool - zone_present () const; - - // Resets the time zone to the 'not specified' state. - // - void - zone_reset (); - - short - zone_hours () const; - - void - zone_hours (short); - - short - zone_minutes () const; - - void - zone_minutes (short); - - private: - bool present_; - short hours_; - short minutes_; - }; - - bool - operator== (const time_zone&, const time_zone&); - - bool - operator!= (const time_zone&, const time_zone&); - - - class gday: public time_zone - { - public: - explicit - gday (unsigned short day); - gday (unsigned short day, short zone_hours, short zone_minutes); - - unsigned short - day () const; - - void - day (unsigned short); - - private: - unsigned short day_; - }; - - bool - operator== (const gday&, const gday&); - - bool - operator!= (const gday&, const gday&); - - - class gmonth: public time_zone - { - public: - explicit - gmonth (unsigned short month); - gmonth (unsigned short month, short zone_hours, short zone_minutes); - - unsigned short - month () const; - - void - month (unsigned short); - - private: - unsigned short month_; - }; - - bool - operator== (const gmonth&, const gmonth&); - - bool - operator!= (const gmonth&, const gmonth&); - - - class gyear: public time_zone - { - public: - explicit - gyear (int year); - gyear (int year, short zone_hours, short zone_minutes); - - int - year () const; - - void - year (int); - - private: - int year_; - }; - - bool - operator== (const gyear&, const gyear&); - - bool - operator!= (const gyear&, const gyear&); - - - class gmonth_day: public time_zone - { - public: - gmonth_day (unsigned short month, unsigned short day); - gmonth_day (unsigned short month, unsigned short day, - short zone_hours, short zone_minutes); - - unsigned short - month () const; - - void - month (unsigned short); - - unsigned short - day () const; - - void - day (unsigned short); - - private: - unsigned short month_; - unsigned short day_; - }; - - bool - operator== (const gmonth_day&, const gmonth_day&); - - bool - operator!= (const gmonth_day&, const gmonth_day&); - - - class gyear_month: public time_zone - { - public: - gyear_month (int year, unsigned short month); - gyear_month (int year, unsigned short month, - short zone_hours, short zone_minutes); - - int - year () const; - - void - year (int); - - unsigned short - month () const; - - void - month (unsigned short); - - private: - int year_; - unsigned short month_; - }; - - bool - operator== (const gyear_month&, const gyear_month&); - - bool - operator!= (const gyear_month&, const gyear_month&); - - - class date: public time_zone - { - public: - date (int year, unsigned short month, unsigned short day); - date (int year, unsigned short month, unsigned short day, - short zone_hours, short zone_minutes); - - int - year () const; - - void - year (int); - - unsigned short - month () const; - - void - month (unsigned short); - - unsigned short - day () const; - - void - day (unsigned short); - - private: - int year_; - unsigned short month_; - unsigned short day_; - }; - - bool - operator== (const date&, const date&); - - bool - operator!= (const date&, const date&); - - - class time: public time_zone - { - public: - time (unsigned short hours, unsigned short minutes, double seconds); - time (unsigned short hours, unsigned short minutes, double seconds, - short zone_hours, short zone_minutes); - - unsigned short - hours () const; - - void - hours (unsigned short); - - unsigned short - minutes () const; - - void - minutes (unsigned short); - - double - seconds () const; - - void - seconds (double); - - private: - unsigned short hours_; - unsigned short minutes_; - double seconds_; - }; - - bool - operator== (const time&, const time&); - - bool - operator!= (const time&, const time&); - - - class date_time: public time_zone - { - public: - date_time (int year, unsigned short month, unsigned short day, - unsigned short hours, unsigned short minutes, double seconds); - - date_time (int year, unsigned short month, unsigned short day, - unsigned short hours, unsigned short minutes, double seconds, - short zone_hours, short zone_minutes); - - int - year () const; - - void - year (int); - - unsigned short - month () const; - - void - month (unsigned short); - - unsigned short - day () const; - - void - day (unsigned short); - - unsigned short - hours () const; - - void - hours (unsigned short); - - unsigned short - minutes () const; - - void - minutes (unsigned short); - - double - seconds () const; - - void - seconds (double); - - private: - int year_; - unsigned short month_; - unsigned short day_; - unsigned short hours_; - unsigned short minutes_; - double seconds_; - }; - - bool - operator== (const date_time&, const date_time&); - - bool - operator!= (const date_time&, const date_time&); - - - class duration - { - public: - duration (bool negative, - unsigned int years, unsigned int months, unsigned int days, - unsigned int hours, unsigned int minutes, double seconds); - - bool - negative () const; - - void - negative (bool); - - unsigned int - years () const; - - void - years (unsigned int); - - unsigned int - months () const; - - void - months (unsigned int); - - unsigned int - days () const; - - void - days (unsigned int); - - unsigned int - hours () const; - - void - hours (unsigned int); - - unsigned int - minutes () const; - - void - minutes (unsigned int); - - double - seconds () const; - - void - seconds (double); - - private: - bool negative_; - unsigned int years_; - unsigned int months_; - unsigned int days_; - unsigned int hours_; - unsigned int minutes_; - double seconds_; - }; - - bool - operator== (const duration&, const duration&); - - bool - operator!= (const duration&, const duration&); - } - } -} - -#include <xsd/cxx/parser/xml-schema.ixx> -#include <xsd/cxx/parser/xml-schema.txx> - -#endif // XSD_CXX_PARSER_XML_SCHEMA_HXX diff --git a/libxsd/xsd/cxx/parser/xml-schema.ixx b/libxsd/xsd/cxx/parser/xml-schema.ixx deleted file mode 100644 index 1989384..0000000 --- a/libxsd/xsd/cxx/parser/xml-schema.ixx +++ /dev/null @@ -1,1020 +0,0 @@ -// file : xsd/cxx/parser/xml-schema.ixx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <new> // operator new/delete -#include <cstring> // std::memcpy, std::memcmp - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // string_sequence - // - template <typename C> - string_sequence<C>:: - string_sequence () - { - } - - template <typename C> - string_sequence<C>:: - string_sequence (size_type n, const value_type& x) - : base (n, x) - { - } - - template <typename C> - template <typename I> - string_sequence<C>:: - string_sequence (const I& begin, const I& end) - : base (begin, end) - { - } - - template <typename C> - inline bool - operator!= (const string_sequence<C>& a, const string_sequence<C>& b) - { - return !(a == b); - } - - // qname - // - template <typename C> - inline qname<C>:: - qname (const std::basic_string<C>& name) - : name_ (name) - { - } - - template <typename C> - inline qname<C>:: - qname (const std::basic_string<C>& prefix, - const std::basic_string<C>& name) - : prefix_ (prefix), name_ (name) - { - } - - template <typename C> - void qname<C>:: - swap (qname<C>& x) - { - prefix_.swap (x.prefix_); - name_.swap (x.name_); - } - - template <typename C> - inline const std::basic_string<C>& qname<C>:: - prefix () const - { - return prefix_; - } - - template <typename C> - inline std::basic_string<C>& qname<C>:: - prefix () - { - return prefix_; - } - - template <typename C> - inline void qname<C>:: - prefix (const std::basic_string<C>& prefix) - { - prefix_ = prefix; - } - - template <typename C> - inline const std::basic_string<C>& qname<C>:: - name () const - { - return name_; - } - - template <typename C> - inline std::basic_string<C>& qname<C>:: - name () - { - return name_; - } - - template <typename C> - inline void qname<C>:: - name (const std::basic_string<C>& name) - { - name_ = name; - } - - template <typename C> - inline bool - operator== (const qname<C>& a, const qname<C>& b) - { - return a.prefix () == b.prefix () && a.name () == b.name (); - } - - template <typename C> - inline bool - operator!= (const qname<C>& a, const qname<C>& b) - { - return !(a == b); - } - - // buffer - // - inline buffer:: - ~buffer () - { - if (data_) - operator delete (data_); - } - - inline buffer:: - buffer (size_t size) - : data_ (0), size_ (0), capacity_ (0) - { - capacity (size); - size_ = size; - } - - inline buffer:: - buffer (size_t size, size_t cap) - : data_ (0), size_ (0), capacity_ (0) - { - if (size > cap) - throw bounds (); - - capacity (cap); - size_ = size; - } - - inline buffer:: - buffer (const void* data, size_t size) - : data_ (0), size_ (0), capacity_ (0) - { - capacity (size); - size_ = size; - - if (size_) - std::memcpy (data_, data, size_); - } - - inline buffer:: - buffer (const void* data, size_t size, size_t cap) - : data_ (0), size_ (0), capacity_ (0) - { - if (size > cap) - throw bounds (); - - capacity (cap); - size_ = size; - - if (size_) - std::memcpy (data_, data, size_); - } - - inline buffer:: - buffer (void* data, size_t size, size_t cap, bool own) - : data_ (0), size_ (0), capacity_ (0) - { - if (size > cap) - throw bounds (); - - if (own) - { - data_ = reinterpret_cast<char*> (data); - size_ = size; - capacity_ = cap; - } - else - { - capacity (cap); - size_ = size; - - if (size_) - std::memcpy (data_, data, size_); - } - } - - inline buffer:: - buffer (const buffer& other) - : data_ (0), size_ (0), capacity_ (0) - { - capacity (other.capacity_); - size_ = other.size_; - - if (size_) - std::memcpy (data_, other.data_, size_); - } - - inline buffer& buffer:: - operator= (const buffer& other) - { - if (this != &other) - { - capacity (other.capacity_, false); - size_ = other.size_; - - if (size_) - std::memcpy (data_, other.data_, size_); - } - - return *this; - } - - inline size_t buffer:: - capacity () const - { - return capacity_; - } - - inline bool buffer:: - capacity (size_t cap) - { - return capacity (cap, true); - } - - inline size_t buffer:: - size () const - { - return size_; - } - - inline bool buffer:: - size (size_t size) - { - bool r (false); - - if (size > capacity_) - r = capacity (size); - - size_ = size; - - return r; - } - - inline const char* buffer:: - data () const - { - return data_; - } - - inline char* buffer:: - data () - { - return data_; - } - - inline const char* buffer:: - begin () const - { - return data_; - } - - inline char* buffer:: - begin () - { - return data_; - } - - inline const char* buffer:: - end () const - { - return data_ + size_; - } - - inline char* buffer:: - end () - { - return data_ + size_; - } - - inline void buffer:: - swap (buffer& other) - { - char* tmp_data (data_); - size_t tmp_size (size_); - size_t tmp_capacity (capacity_); - - data_ = other.data_; - size_ = other.size_; - capacity_ = other.capacity_; - - other.data_ = tmp_data; - other.size_ = tmp_size; - other.capacity_ = tmp_capacity; - } - - inline bool buffer:: - capacity (size_t capacity, bool copy) - { - if (size_ > capacity) - throw bounds (); - - if (capacity <= capacity_) - { - return false; // Do nothing if shrinking is requested. - } - else - { - char* data (reinterpret_cast<char*> (operator new (capacity))); - - if (copy && size_ > 0) - std::memcpy (data, data_, size_); - - if (data_) - operator delete (data_); - - data_ = data; - capacity_ = capacity; - - return true; - } - } - - inline bool - operator== (const buffer& a, const buffer& b) - { - return a.size () == b.size () && - std::memcmp (a.data (), b.data (), a.size ()) == 0; - } - - inline bool - operator!= (const buffer& a, const buffer& b) - { - return !(a == b); - } - - // time_zone - // - inline time_zone:: - time_zone () - : present_ (false) - { - } - - inline time_zone:: - time_zone (short h, short m) - : present_ (true), hours_ (h), minutes_ (m) - { - } - - inline bool time_zone:: - zone_present () const - { - return present_; - } - - inline void time_zone:: - zone_reset () - { - present_ = false; - } - - inline short time_zone:: - zone_hours () const - { - return hours_; - } - - inline void time_zone:: - zone_hours (short h) - { - hours_ = h; - present_ = true; - } - - inline short time_zone:: - zone_minutes () const - { - return minutes_; - } - - inline void time_zone:: - zone_minutes (short m) - { - minutes_ = m; - present_ = true; - } - - inline bool - operator== (const time_zone& x, const time_zone& y) - { - return x.zone_present () - ? y.zone_present () && - x.zone_hours () == y.zone_hours () && - x.zone_minutes () == y.zone_minutes () - : !y.zone_present (); - } - - inline bool - operator!= (const time_zone& x, const time_zone& y) - { - return !(x == y); - } - - // gday - // - inline gday:: - gday (unsigned short day) - : day_ (day) - { - } - - inline gday:: - gday (unsigned short day, short zh, short zm) - : time_zone (zh, zm), day_ (day) - { - } - - inline unsigned short gday:: - day () const - { - return day_; - } - - inline void gday:: - day (unsigned short day) - { - day_ = day; - } - - inline bool - operator== (const gday& a, const gday& b) - { - const time_zone& az = a; - const time_zone& bz = b; - - return a.day () == b.day () && az == bz; - } - - inline bool - operator!= (const gday& a, const gday& b) - { - return !(a == b); - } - - // gmonth - // - inline gmonth:: - gmonth (unsigned short month) - : month_ (month) - { - } - - inline gmonth:: - gmonth (unsigned short month, short zh, short zm) - : time_zone (zh, zm), month_ (month) - { - } - - inline unsigned short gmonth:: - month () const - { - return month_; - } - - inline void gmonth:: - month (unsigned short month) - { - month_ = month; - } - - inline bool - operator== (const gmonth& a, const gmonth& b) - { - const time_zone& az = a; - const time_zone& bz = b; - - return a.month () == b.month () && az == bz; - } - - inline bool - operator!= (const gmonth& a, const gmonth& b) - { - return !(a == b); - } - - // gyear - // - inline gyear:: - gyear (int year) - : year_ (year) - { - } - - inline gyear:: - gyear (int year, short zh, short zm) - : time_zone (zh, zm), year_ (year) - { - } - - inline int gyear:: - year () const - { - return year_; - } - - inline void gyear:: - year (int year) - { - year_ = year; - } - - inline bool - operator== (const gyear& a, const gyear& b) - { - const time_zone& az = a; - const time_zone& bz = b; - - return a.year () == b.year () && az == bz; - } - - inline bool - operator!= (const gyear& a, const gyear& b) - { - return !(a == b); - } - - // gmonth_day - // - inline gmonth_day:: - gmonth_day (unsigned short month, unsigned short day) - : month_ (month), day_ (day) - { - } - - inline gmonth_day:: - gmonth_day (unsigned short month, - unsigned short day, - short zh, short zm) - : time_zone (zh, zm), month_ (month), day_ (day) - { - } - - inline unsigned short gmonth_day:: - month () const - { - return month_; - } - - inline void gmonth_day:: - month (unsigned short month) - { - month_ = month; - } - - inline unsigned short gmonth_day:: - day () const - { - return day_; - } - - inline void gmonth_day:: - day (unsigned short day) - { - day_ = day; - } - - inline bool - operator== (const gmonth_day& a, const gmonth_day& b) - { - const time_zone& az = a; - const time_zone& bz = b; - - return a.month () == b.month () && - a.day () == b.day () && - az == bz; - } - - inline bool - operator!= (const gmonth_day& a, const gmonth_day& b) - { - return !(a == b); - } - - // gyear_month - // - inline gyear_month:: - gyear_month (int year, unsigned short month) - : year_ (year), month_ (month) - { - } - - inline gyear_month:: - gyear_month (int year, unsigned short month, - short zh, short zm) - : time_zone (zh, zm), year_ (year), month_ (month) - { - } - - inline int gyear_month:: - year () const - { - return year_; - } - - inline void gyear_month:: - year (int year) - { - year_ = year; - } - - inline unsigned short gyear_month:: - month () const - { - return month_; - } - - inline void gyear_month:: - month (unsigned short month) - { - month_ = month; - } - - inline bool - operator== (const gyear_month& a, const gyear_month& b) - { - const time_zone& az = a; - const time_zone& bz = b; - - return a.year () == b.year () && - a.month () == b.month () && - az == bz; - } - - inline bool - operator!= (const gyear_month& a, const gyear_month& b) - { - return !(a == b); - } - - // date - // - inline date:: - date (int year, unsigned short month, unsigned short day) - : year_ (year), month_ (month), day_ (day) - { - } - - inline date:: - date (int year, unsigned short month, unsigned short day, - short zh, short zm) - : time_zone (zh, zm), year_ (year), month_ (month), day_ (day) - { - } - - inline int date:: - year () const - { - return year_; - } - - inline void date:: - year (int year) - { - year_ = year; - } - - inline unsigned short date:: - month () const - { - return month_; - } - - inline void date:: - month (unsigned short month) - { - month_ = month; - } - - inline unsigned short date:: - day () const - { - return day_; - } - - inline void date:: - day (unsigned short day) - { - day_ = day; - } - - inline bool - operator== (const date& a, const date& b) - { - const time_zone& az = a; - const time_zone& bz = b; - - return a.year () == b.year () && - a.month () == b.month () && - a.day () == b.day () && - az == bz; - } - - inline bool - operator!= (const date& a, const date& b) - { - return !(a == b); - } - - // time - // - inline time:: - time (unsigned short hours, unsigned short minutes, double seconds) - : hours_ (hours), minutes_ (minutes), seconds_ (seconds) - { - } - - inline time:: - time (unsigned short hours, unsigned short minutes, double seconds, - short zh, short zm) - : time_zone (zh, zm), - hours_ (hours), minutes_ (minutes), seconds_ (seconds) - { - } - - inline unsigned short time:: - hours () const - { - return hours_; - } - - inline void time:: - hours (unsigned short hours) - { - hours_ = hours; - } - - inline unsigned short time:: - minutes () const - { - return minutes_; - } - - inline void time:: - minutes (unsigned short minutes) - { - minutes_ = minutes; - } - - inline double time:: - seconds () const - { - return seconds_; - } - - inline void time:: - seconds (double seconds) - { - seconds_ = seconds; - } - - inline bool - operator== (const time& a, const time& b) - { - const time_zone& az = a; - const time_zone& bz = b; - - return a.hours () == b.hours () && - a.minutes () == b.minutes () && - a.seconds () == b.seconds () && - az == bz; - } - - inline bool - operator!= (const time& a, const time& b) - { - return !(a == b); - } - - // date_time - // - inline date_time:: - date_time (int year, unsigned short month, unsigned short day, - unsigned short hours, unsigned short minutes, double seconds) - : year_ (year), month_ (month), day_ (day), - hours_ (hours), minutes_ (minutes), seconds_ (seconds) - { - } - - inline date_time:: - date_time (int year, unsigned short month, unsigned short day, - unsigned short hours, unsigned short minutes, double seconds, - short zh, short zm) - : time_zone (zh, zm), - year_ (year), month_ (month), day_ (day), - hours_ (hours), minutes_ (minutes), seconds_ (seconds) - { - } - - inline int date_time:: - year () const - { - return year_; - } - - inline void date_time:: - year (int year) - { - year_ = year; - } - - inline unsigned short date_time:: - month () const - { - return month_; - } - - inline void date_time:: - month (unsigned short month) - { - month_ = month; - } - - inline unsigned short date_time:: - day () const - { - return day_; - } - - inline void date_time:: - day (unsigned short day) - { - day_ = day; - } - - inline unsigned short date_time:: - hours () const - { - return hours_; - } - - inline void date_time:: - hours (unsigned short hours) - { - hours_ = hours; - } - - inline unsigned short date_time:: - minutes () const - { - return minutes_; - } - - inline void date_time:: - minutes (unsigned short minutes) - { - minutes_ = minutes; - } - - inline double date_time:: - seconds () const - { - return seconds_; - } - - inline void date_time:: - seconds (double seconds) - { - seconds_ = seconds; - } - - inline bool - operator== (const date_time& a, const date_time& b) - { - const time_zone& az = a; - const time_zone& bz = b; - - return a.year () == b.year () && - a.month () == b.month () && - a.day () == b.day () && - a.hours () == b.hours () && - a.minutes () == b.minutes () && - a.seconds () == b.seconds () && - az == bz; - } - - inline bool - operator!= (const date_time& a, const date_time& b) - { - return !(a == b); - } - - // duration - // - inline duration:: - duration (bool negative, - unsigned int years, unsigned int months, unsigned int days, - unsigned int hours, unsigned int minutes, double seconds) - : negative_ (negative), - years_ (years), months_ (months), days_ (days), - hours_ (hours), minutes_ (minutes), seconds_ (seconds) - { - } - - inline bool duration:: - negative () const - { - return negative_; - } - - inline void duration:: - negative (bool negative) - { - negative_ = negative; - } - - inline unsigned int duration:: - years () const - { - return years_; - } - - inline void duration:: - years (unsigned int years) - { - years_ = years; - } - - inline unsigned int duration:: - months () const - { - return months_; - } - - inline void duration:: - months (unsigned int months) - { - months_ = months; - } - - inline unsigned int duration:: - days () const - { - return days_; - } - - inline void duration:: - days (unsigned int days) - { - days_ = days; - } - - inline unsigned int duration:: - hours () const - { - return hours_; - } - - inline void duration:: - hours (unsigned int hours) - { - hours_ = hours; - } - - inline unsigned int duration:: - minutes () const - { - return minutes_; - } - - inline void duration:: - minutes (unsigned int minutes) - { - minutes_ = minutes; - } - - inline double duration:: - seconds () const - { - return seconds_; - } - - inline void duration:: - seconds (double seconds) - { - seconds_ = seconds; - } - - inline bool - operator== (const duration& a, const duration& b) - { - return a.negative () == b.negative () && - a.years () == b.years () && - a.months () == b.months () && - a.days () == b.days () && - a.hours () == b.hours () && - a.minutes () == b.minutes () && - a.seconds () == b.seconds (); - } - - inline bool - operator!= (const duration& a, const duration& b) - { - return !(a == b); - } - } - } -} diff --git a/libxsd/xsd/cxx/parser/xml-schema.txx b/libxsd/xsd/cxx/parser/xml-schema.txx deleted file mode 100644 index 7ace2d7..0000000 --- a/libxsd/xsd/cxx/parser/xml-schema.txx +++ /dev/null @@ -1,32 +0,0 @@ -// file : xsd/cxx/parser/xml-schema.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace parser - { - // string_sequence - // - template <typename C> - bool - operator== (const string_sequence<C>& a, const string_sequence<C>& b) - { - if (a.size () != b.size ()) - return false; - - for (typename string_sequence<C>::const_iterator - ai (a.begin ()), bi (b.begin ()), ae (a.end ()); - ai != ae; ++ai, ++bi) - { - if (*ai != *bi) - return false; - } - - return true; - } - } - } -} - |