diff options
Diffstat (limited to 'libxsd/xsd/cxx/xml')
34 files changed, 0 insertions, 3999 deletions
diff --git a/libxsd/xsd/cxx/xml/bits/literals.hxx b/libxsd/xsd/cxx/xml/bits/literals.hxx deleted file mode 100644 index b80fa78..0000000 --- a/libxsd/xsd/cxx/xml/bits/literals.hxx +++ /dev/null @@ -1,81 +0,0 @@ -// file : xsd/cxx/xml/bits/literals.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_BITS_LITERALS_HXX -#define XSD_CXX_XML_BITS_LITERALS_HXX - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace bits - { - template <typename C> - const C* - xml_prefix (); - - template <typename C> - const C* - xml_namespace (); - - template <typename C> - const C* - xmlns_prefix (); - - template <typename C> - const C* - xmlns_namespace (); - - template <typename C> - const C* - xsi_prefix (); - - template <typename C> - const C* - xsi_namespace (); - - template <typename C> - const C* - type (); - - template <typename C> - const C* - nil_lit (); - - template <typename C> - const C* - schema_location (); - - template <typename C> - const C* - no_namespace_schema_location (); - - template <typename C> - const C* - first_prefix (); - - template <typename C> - const C* - second_prefix (); - - template <typename C> - const C* - third_prefix (); - - template <typename C> - const C* - fourth_prefix (); - - template <typename C> - const C* - fifth_prefix (); - } - } - } -} - -#endif // XSD_CXX_XML_BITS_LITERALS_HXX - -#include <xsd/cxx/xml/bits/literals.ixx> diff --git a/libxsd/xsd/cxx/xml/bits/literals.ixx b/libxsd/xsd/cxx/xml/bits/literals.ixx deleted file mode 100644 index 36afd3c..0000000 --- a/libxsd/xsd/cxx/xml/bits/literals.ixx +++ /dev/null @@ -1,259 +0,0 @@ -// file : xsd/cxx/xml/bits/literals.ixx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_BITS_LITERALS_IXX -#define XSD_CXX_XML_BITS_LITERALS_IXX - -#endif // XSD_CXX_XML_BITS_LITERALS_IXX - - -#if defined(XSD_USE_CHAR) || !defined(XSD_USE_WCHAR) - -#ifndef XSD_CXX_XML_BITS_LITERALS_IXX_CHAR -#define XSD_CXX_XML_BITS_LITERALS_IXX_CHAR - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace bits - { - template <> - inline const char* - xml_prefix<char> () - { - return "xml"; - } - - template <> - inline const char* - xml_namespace<char> () - { - return "http://www.w3.org/XML/1998/namespace"; - } - - template <> - inline const char* - xmlns_prefix<char> () - { - return "xmlns"; - } - - template <> - inline const char* - xmlns_namespace<char> () - { - return "http://www.w3.org/2000/xmlns/"; - } - - template <> - inline const char* - xsi_prefix<char> () - { - return "xsi"; - } - - template <> - inline const char* - xsi_namespace<char> () - { - return "http://www.w3.org/2001/XMLSchema-instance"; - } - - template <> - inline const char* - type<char> () - { - return "type"; - } - - template <> - inline const char* - nil_lit<char> () - { - return "nil"; - } - - template <> - inline const char* - schema_location<char> () - { - return "schemaLocation"; - } - - template <> - inline const char* - no_namespace_schema_location<char> () - { - return "noNamespaceSchemaLocation"; - } - - template <> - inline const char* - first_prefix<char> () - { - return "p1"; - } - - template <> - inline const char* - second_prefix<char> () - { - return "p2"; - } - - template <> - inline const char* - third_prefix<char> () - { - return "p3"; - } - - template <> - inline const char* - fourth_prefix<char> () - { - return "p4"; - } - - template <> - inline const char* - fifth_prefix<char> () - { - return "p5"; - } - } - } - } -} - -#endif // XSD_CXX_XML_BITS_LITERALS_IXX_CHAR -#endif // XSD_USE_CHAR - - -#if defined(XSD_USE_WCHAR) || !defined(XSD_USE_CHAR) - -#ifndef XSD_CXX_XML_BITS_LITERALS_IXX_WCHAR -#define XSD_CXX_XML_BITS_LITERALS_IXX_WCHAR - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace bits - { - template <> - inline const wchar_t* - xml_prefix<wchar_t> () - { - return L"xml"; - } - - template <> - inline const wchar_t* - xml_namespace<wchar_t> () - { - return L"http://www.w3.org/XML/1998/namespace"; - } - - template <> - inline const wchar_t* - xmlns_prefix<wchar_t> () - { - return L"xmlns"; - } - - template <> - inline const wchar_t* - xmlns_namespace<wchar_t> () - { - return L"http://www.w3.org/2000/xmlns/"; - } - - template <> - inline const wchar_t* - xsi_prefix<wchar_t> () - { - return L"xsi"; - } - - template <> - inline const wchar_t* - xsi_namespace<wchar_t> () - { - return L"http://www.w3.org/2001/XMLSchema-instance"; - } - - template <> - inline const wchar_t* - type<wchar_t> () - { - return L"type"; - } - - template <> - inline const wchar_t* - nil_lit<wchar_t> () - { - return L"nil"; - } - - template <> - inline const wchar_t* - schema_location<wchar_t> () - { - return L"schemaLocation"; - } - - template <> - inline const wchar_t* - no_namespace_schema_location<wchar_t> () - { - return L"noNamespaceSchemaLocation"; - } - - template <> - inline const wchar_t* - first_prefix<wchar_t> () - { - return L"p1"; - } - - template <> - inline const wchar_t* - second_prefix<wchar_t> () - { - return L"p2"; - } - - template <> - inline const wchar_t* - third_prefix<wchar_t> () - { - return L"p3"; - } - - template <> - inline const wchar_t* - fourth_prefix<wchar_t> () - { - return L"p4"; - } - - template <> - inline const wchar_t* - fifth_prefix<wchar_t> () - { - return L"p5"; - } - } - } - } -} - -#endif // XSD_CXX_XML_BITS_LITERALS_IXX_WCHAR -#endif // XSD_USE_WCHAR diff --git a/libxsd/xsd/cxx/xml/char-iso8859-1.hxx b/libxsd/xsd/cxx/xml/char-iso8859-1.hxx deleted file mode 100644 index 5e87b3d..0000000 --- a/libxsd/xsd/cxx/xml/char-iso8859-1.hxx +++ /dev/null @@ -1,70 +0,0 @@ -// file : xsd/cxx/xml/char-iso8859-1.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_TRANSCODER -#define XSD_CXX_XML_TRANSCODER -#define XSD_CXX_XML_TRANSCODER_CHAR_ISO8859_1 - -#include <string> -#include <cstddef> // std::size_t - -#include <xercesc/util/XercesDefs.hpp> // XMLCh - -#include <xsd/cxx/xml/exceptions.hxx> // invalid_utf16_string - -namespace xsd -{ - namespace cxx - { - namespace xml - { - struct iso8859_1_unrepresentable {}; - - // UTF-16 to/from ISO-8859-1 transcoder. - // - template <typename C> - struct char_iso8859_1_transcoder - { - static std::basic_string<C> - to (const XMLCh* s, std::size_t length); - - static XMLCh* - from (const C* s, std::size_t length); - - // Get/set a replacement for unrepresentable characters. If set to - // 0 (the default value), throw iso8859_1_unrepresentable instead. - // - static C - unrep_char () - { - return unrep_char_; - } - - static void - unrep_char (C c) - { - unrep_char_ = c; - } - - private: - static C unrep_char_; - }; - - typedef char_iso8859_1_transcoder<char> char_transcoder; - } - } -} - -#include <xsd/cxx/xml/char-iso8859-1.txx> - -#else -# ifndef XSD_CXX_XML_TRANSCODER_CHAR_ISO8859_1 - // - // If you get this error, it usually means that either you compiled - // your schemas with different --char-encoding values or you included - // some of the libxsd headers (e.g., xsd/cxx/xml/string.hxx) directly - // without first including the correct xsd/cxx/xml/char-*.hxx header. - // -# error conflicting character encoding detected -# endif -#endif // XSD_CXX_XML_TRANSCODER diff --git a/libxsd/xsd/cxx/xml/char-iso8859-1.txx b/libxsd/xsd/cxx/xml/char-iso8859-1.txx deleted file mode 100644 index 8ad9f36..0000000 --- a/libxsd/xsd/cxx/xml/char-iso8859-1.txx +++ /dev/null @@ -1,110 +0,0 @@ -// file : xsd/cxx/xml/char-iso8859-1.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xsd/cxx/config.hxx> // XSD_CXX11 - -#ifdef XSD_CXX11 -# include <memory> // std::unique_ptr -#else -# include <xsd/cxx/auto-array.hxx> -#endif - -namespace xsd -{ - namespace cxx - { - namespace xml - { - template <typename C> - C char_iso8859_1_transcoder<C>::unrep_char_ = 0; - - template <typename C> - std::basic_string<C> char_iso8859_1_transcoder<C>:: - to (const XMLCh* s, std::size_t len) - { - const XMLCh* end (s + len); - - // Find what the resulting buffer size will be. - // - std::size_t rl (0); - unsigned int u (0); // Four byte UCS-4 char. - - bool valid (true); - const XMLCh* p (s); - - for (; p < end; ++p) - { - if (*p >= 0xD800 && *p <= 0xDBFF) - { - // Make sure we have one more char and it has a valid - // value for the second char in a surrogate pair. - // - if (++p == end || !((*p >= 0xDC00) && (*p <= 0xDFFF))) - { - valid = false; - break; - } - } - - rl++; - } - - if (!valid) - throw invalid_utf16_string (); - - std::basic_string<C> r; - r.reserve (rl + 1); - r.resize (rl); - C* rs (const_cast<C*> (r.c_str ())); - std::size_t i (0); - - p = s; - - // Tight first loop for the common case. - // - for (; p < end && *p < 0x100; ++p) - rs[i++] = C (*p); - - if (p < end && unrep_char_ == 0) - throw iso8859_1_unrepresentable (); - - for (; p < end; ++p) - { - XMLCh x (*p); - - if ((x >= 0xD800) && (x <= 0xDBFF)) - { - u = ((x - 0xD800) << 10) + (*++p - 0xDC00) + 0x10000; - } - else - u = x; - - rs[i++] = u < 0x100 ? C (u) : unrep_char_; - } - - return r; - } - - template <typename C> - XMLCh* char_iso8859_1_transcoder<C>:: - from (const C* s, std::size_t len) - { - const C* end (s + len); - -#ifdef XSD_CXX11 - std::unique_ptr<XMLCh[]> r ( -#else - auto_array<XMLCh> r ( -#endif - new XMLCh[len + 1]); - XMLCh* ir (r.get ()); - - for (const C* p (s); p < end; ++p) - *ir++ = static_cast<unsigned char> (*p); - - *ir = XMLCh (0); - return r.release (); - } - } - } -} diff --git a/libxsd/xsd/cxx/xml/char-lcp.hxx b/libxsd/xsd/cxx/xml/char-lcp.hxx deleted file mode 100644 index 6958f3e..0000000 --- a/libxsd/xsd/cxx/xml/char-lcp.hxx +++ /dev/null @@ -1,54 +0,0 @@ -// file : xsd/cxx/xml/char-lcp.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_TRANSCODER -#define XSD_CXX_XML_TRANSCODER -#define XSD_CXX_XML_TRANSCODER_CHAR_LCP - -#include <string> -#include <cstddef> // std::size_t - -#include <xercesc/util/XercesDefs.hpp> // XMLCh - -namespace xsd -{ - namespace cxx - { - namespace xml - { - // UTF-16 to/from Xerces-C++ local code page (LCP) transcoder. - // - // Note that this transcoder has a custom interface due to Xerces-C++ - // idiosyncrasies. Don't use it as a base for your custom transcoder. - // - template <typename C> - struct char_lcp_transcoder - { - static std::basic_string<C> - to (const XMLCh* s); - - static std::basic_string<C> - to (const XMLCh* s, std::size_t length); - - static XMLCh* - from (const C* s); - }; - - typedef char_lcp_transcoder<char> char_transcoder; - } - } -} - -#include <xsd/cxx/xml/char-lcp.txx> - -#else -# ifndef XSD_CXX_XML_TRANSCODER_CHAR_LCP - // - // If you get this error, it usually means that either you compiled - // your schemas with different --char-encoding values or you included - // some of the libxsd headers (e.g., xsd/cxx/xml/string.hxx) directly - // without first including the correct xsd/cxx/xml/char-*.hxx header. - // -# error conflicting character encoding detected -# endif -#endif // XSD_CXX_XML_TRANSCODER diff --git a/libxsd/xsd/cxx/xml/char-lcp.txx b/libxsd/xsd/cxx/xml/char-lcp.txx deleted file mode 100644 index efcd0d0..0000000 --- a/libxsd/xsd/cxx/xml/char-lcp.txx +++ /dev/null @@ -1,73 +0,0 @@ -// file : xsd/cxx/xml/char-lcp.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <cstring> // std::memcpy - -#include <xercesc/util/XMLString.hpp> - -#include <xsd/cxx/config.hxx> // XSD_CXX11 - -#ifdef XSD_CXX11 -# include <memory> // std::unique_ptr -#else -# include <xsd/cxx/auto-array.hxx> -#endif - -#include <xsd/cxx/xml/std-memory-manager.hxx> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - template <typename C> - std::basic_string<C> char_lcp_transcoder<C>:: - to (const XMLCh* s) - { - std_memory_manager mm; -#ifdef XSD_CXX11 - std::unique_ptr<C[], std_memory_manager&> r ( -#else - auto_array<C, std_memory_manager> r ( -#endif - xercesc::XMLString::transcode (s, &mm), mm); - return std::basic_string<C> (r.get ()); - } - - template <typename C> - std::basic_string<C> char_lcp_transcoder<C>:: - to (const XMLCh* s, std::size_t len) - { -#ifdef XSD_CXX11 - std::unique_ptr<XMLCh[]> tmp ( -#else - auto_array<XMLCh> tmp ( -#endif - new XMLCh[len + 1]); - std::memcpy (tmp.get (), s, len * sizeof (XMLCh)); - tmp[len] = XMLCh (0); - - std_memory_manager mm; -#ifdef XSD_CXX11 - std::unique_ptr<C[], std_memory_manager&> r ( -#else - auto_array<C, std_memory_manager> r ( -#endif - xercesc::XMLString::transcode (tmp.get (), &mm), mm); - - tmp.reset (); - - return std::basic_string<C> (r.get ()); - } - - template <typename C> - XMLCh* char_lcp_transcoder<C>:: - from (const C* s) - { - std_memory_manager mm; - return xercesc::XMLString::transcode (s, &mm); - } - } - } -} diff --git a/libxsd/xsd/cxx/xml/char-utf8.hxx b/libxsd/xsd/cxx/xml/char-utf8.hxx deleted file mode 100644 index 84186cd..0000000 --- a/libxsd/xsd/cxx/xml/char-utf8.hxx +++ /dev/null @@ -1,55 +0,0 @@ -// file : xsd/cxx/xml/char-utf8.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_TRANSCODER -#define XSD_CXX_XML_TRANSCODER -#define XSD_CXX_XML_TRANSCODER_CHAR_UTF8 - -#include <string> -#include <cstddef> // std::size_t - -#include <xercesc/util/XercesDefs.hpp> // XMLCh - -#include <xsd/cxx/xml/exceptions.hxx> // invalid_utf16_string - -namespace xsd -{ - namespace cxx - { - namespace xml - { - struct invalid_utf8_string {}; - - // UTF-16 to/from UTF-8 transcoder. - // - template <typename C> - struct char_utf8_transcoder - { - static std::basic_string<C> - to (const XMLCh* s, std::size_t length); - - static XMLCh* - from (const C* s, std::size_t length); - - private: - static const unsigned char first_byte_mask_[5]; - }; - - typedef char_utf8_transcoder<char> char_transcoder; - } - } -} - -#include <xsd/cxx/xml/char-utf8.txx> - -#else -# ifndef XSD_CXX_XML_TRANSCODER_CHAR_UTF8 - // - // If you get this error, it usually means that either you compiled - // your schemas with different --char-encoding values or you included - // some of the libxsd headers (e.g., xsd/cxx/xml/string.hxx) directly - // without first including the correct xsd/cxx/xml/char-*.hxx header. - // -# error conflicting character encoding detected -# endif -#endif // XSD_CXX_XML_TRANSCODER diff --git a/libxsd/xsd/cxx/xml/char-utf8.txx b/libxsd/xsd/cxx/xml/char-utf8.txx deleted file mode 100644 index ba65397..0000000 --- a/libxsd/xsd/cxx/xml/char-utf8.txx +++ /dev/null @@ -1,302 +0,0 @@ -// file : xsd/cxx/xml/char-utf8.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xsd/cxx/config.hxx> // XSD_CXX11 - -#ifdef XSD_CXX11 -# include <memory> // std::unique_ptr -#else -# include <xsd/cxx/auto-array.hxx> -#endif - -namespace xsd -{ - namespace cxx - { - namespace xml - { - template <typename C> - const unsigned char char_utf8_transcoder<C>::first_byte_mask_[5] = - { - 0x00, 0x00, 0xC0, 0xE0, 0xF0 - }; - - template <typename C> - std::basic_string<C> char_utf8_transcoder<C>:: - to (const XMLCh* s, std::size_t len) - { - const XMLCh* end (s + len); - - // Find what the resulting buffer size will be. - // - std::size_t rl (0); - unsigned int u (0); // Four byte UCS-4 char. - - bool valid (true); - const XMLCh* p (s); - - for (; p < end; ++p) - { - XMLCh x (*p); - - if (x < 0xD800 || x > 0xDBFF) - u = x; - else - { - // Make sure we have one more char and it has a valid - // value for the second char in a surrogate pair. - // - if (++p == end || !((*p >= 0xDC00) && (*p <= 0xDFFF))) - { - valid = false; - break; - } - - u = ((x - 0xD800) << 10) + (*p - 0xDC00) + 0x10000; - } - - if (u < 0x80) - rl++; - else if (u < 0x800) - rl += 2; - else if (u < 0x10000) - rl += 3; - else if (u < 0x110000) - rl += 4; - else - { - valid = false; - break; - } - } - - if (!valid) - throw invalid_utf16_string (); - - std::basic_string<C> r; - r.reserve (rl + 1); - r.resize (rl); - C* rs (const_cast<C*> (r.c_str ())); - - std::size_t i (0); - unsigned int count (0); - - p = s; - - // Tight first loop for the common case. - // - for (; p < end && *p < 0x80; ++p) - rs[i++] = C (*p); - - for (; p < end; ++p) - { - XMLCh x (*p); - - if ((x >= 0xD800) && (x <= 0xDBFF)) - { - u = ((x - 0xD800) << 10) + (*++p - 0xDC00) + 0x10000; - } - else - u = x; - - if (u < 0x80) - count = 1; - else if (u < 0x800) - count = 2; - else if (u < 0x10000) - count = 3; - else if (u < 0x110000) - count = 4; - - switch(count) - { - case 4: - { - rs[i + 3] = C ((u | 0x80UL) & 0xBFUL); - u >>= 6; - } - case 3: - { - rs[i + 2] = C ((u | 0x80UL) & 0xBFUL); - u >>= 6; - } - case 2: - { - rs[i + 1] = C ((u | 0x80UL) & 0xBFUL); - u >>= 6; - } - case 1: - { - rs[i] = C (u | first_byte_mask_[count]); - } - } - - i += count; - } - - return r; - } - - template <typename C> - XMLCh* char_utf8_transcoder<C>:: - from (const C* s, std::size_t len) - { - bool valid (true); - const C* end (s + len); - - // Find what the resulting buffer size will be. - // - std::size_t rl (0); - unsigned int count (0); - - for (const C* p (s); p < end; ++p) - { - unsigned char c (static_cast<unsigned char> (*p)); - - if (c < 0x80) - { - // Fast path. - // - rl += 1; - continue; - } - else if ((c >> 5) == 0x06) - count = 2; - else if ((c >> 4) == 0x0E) - count = 3; - else if ((c >> 3) == 0x1E) - count = 4; - else - { - valid = false; - break; - } - - p += count - 1; // One will be added in the for loop - - if (p + 1 > end) - { - valid = false; - break; - } - - // BMP is represented by up to 3 code points in UTF-8. - // - rl += count > 3 ? 2 : 1; - } - - if (!valid) - throw invalid_utf8_string (); - -#ifdef XSD_CXX11 - std::unique_ptr<XMLCh[]> r ( -#else - auto_array<XMLCh> r ( -#endif - new XMLCh[rl + 1]); - XMLCh* ir (r.get ()); - - unsigned int u (0); // Four byte UCS-4 char. - - for (const C* p (s); p < end; ++p) - { - unsigned char c (static_cast<unsigned char> (*p)); - - if (c < 0x80) - { - // Fast path. - // - *ir++ = static_cast<XMLCh> (c); - continue; - } - else if ((c >> 5) == 0x06) - { - // UTF-8: 110yyyyy 10zzzzzz - // Unicode: 00000yyy yyzzzzzz - // - u = (c & 0x1F) << 6; - - c = *++p; - if ((c >> 6) != 2) - { - valid = false; - break; - } - u |= c & 0x3F; - } - else if ((c >> 4) == 0x0E) - { - // UTF-8: 1110xxxx 10yyyyyy 10zzzzzz - // Unicode: xxxxyyyy yyzzzzzz - // - u = (c & 0x0F) << 6; - - c = *++p; - if ((c >> 6) != 2) - { - valid = false; - break; - } - u = (u | (c & 0x3F)) << 6; - - c = *++p; - if ((c >> 6) != 2) - { - valid = false; - break; - } - u |= c & 0x3F; - } - else if ((c >> 3) == 0x1E) - { - // UTF-8: 000wwwxx xxxxyyyy yyzzzzzz - // Unicode: 11110www 10xxxxxx 10yyyyyy 10zzzzzz - // - u = (c & 0x07) << 6; - - c = *++p; - if ((c >> 6) != 2) - { - valid = false; - break; - } - u = (u | (c & 0x3F)) << 6; - - c = *++p; - if ((c >> 6) != 2) - { - valid = false; - break; - } - u = (u | (c & 0x3F)) << 6; - - c = *++p; - if ((c >> 6) != 2) - { - valid = false; - break; - } - u |= c & 0x3F; - } - - if (u & 0xFFFF0000) - { - // Surrogate pair. - // - *ir++ = static_cast<XMLCh> (((u - 0x10000) >> 10) + 0xD800); - *ir++ = static_cast<XMLCh> ((u & 0x3FF) + 0xDC00); - } - else - *ir++ = static_cast<XMLCh> (u); - } - - if (!valid) - throw invalid_utf8_string (); - - *ir = XMLCh (0); - - return r.release (); - } - } - } -} diff --git a/libxsd/xsd/cxx/xml/dom/auto-ptr.hxx b/libxsd/xsd/cxx/xml/dom/auto-ptr.hxx deleted file mode 100644 index 97c9399..0000000 --- a/libxsd/xsd/cxx/xml/dom/auto-ptr.hxx +++ /dev/null @@ -1,232 +0,0 @@ -// file : xsd/cxx/xml/dom/auto-ptr.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_DOM_AUTO_PTR_HXX -#define XSD_CXX_XML_DOM_AUTO_PTR_HXX - -#include <xsd/cxx/config.hxx> // XSD_CXX11_* - -#ifdef XSD_CXX11 -# include <memory> // std::unique_ptr -# include <utility> // std::move -# include <type_traits> // std::remove_const -#endif - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace dom - { -#ifdef XSD_CXX11 - template <typename T> - struct deleter - { - void - operator() (T* p) const - { - if (p != 0) - const_cast<typename std::remove_const<T>::type*> (p)->release (); - } - }; - -#ifdef XSD_CXX11_TEMPLATE_ALIAS - template <typename T> - using unique_ptr = std::unique_ptr<T, deleter<T>>; -#else - template <typename T> - class unique_ptr: public std::unique_ptr<T, deleter<T>> - { - public: - typedef std::unique_ptr<T, deleter<T>> base; - - typedef typename base::pointer pointer; - typedef T element_type; - typedef deleter<T> deleter_type; - - unique_ptr (): base () {} - explicit unique_ptr (pointer p): base (p) {} - unique_ptr (pointer p, const deleter_type& d): base (p, d) {} - unique_ptr (pointer p, deleter_type&& d): base (p, std::move (d)) {} - unique_ptr (unique_ptr&& p): base (std::move (p)) {} - template <class T1> - unique_ptr (unique_ptr<T1>&& p): base (std::move (p)) {} - template <class T1> - unique_ptr (std::auto_ptr<T1>&& p): base (std::move (p)) {} - - unique_ptr& operator= (unique_ptr&& p) - { - static_cast<base&> (*this) = std::move (p); - return *this; - } - - template <class T1> - unique_ptr& operator= (unique_ptr<T1>&& p) - { - static_cast<base&> (*this) = std::move (p); - return *this; - } - -#ifdef XSD_CXX11_NULLPTR - unique_ptr (std::nullptr_t p): base (p) {} - - unique_ptr& operator= (std::nullptr_t p) - { - static_cast<base&> (*this) = p; - return *this; - } -#endif - }; -#endif // XSD_CXX11_TEMPLATE_ALIAS - -#define XSD_DOM_AUTO_PTR xsd::cxx::xml::dom::unique_ptr - -#else - // Simple auto_ptr version for C++98 that calls release() instead - // of delete. - // - template <typename T> - struct remove_c - { - typedef T r; - }; - - template <typename T> - struct remove_c<const T> - { - typedef T r; - }; - - template <typename T> - struct auto_ptr_ref - { - T* x_; - - explicit - auto_ptr_ref (T* x) - : x_ (x) - { - } - }; - - template <typename T> - struct auto_ptr - { - ~auto_ptr () - { - reset (); - } - - explicit - auto_ptr (T* x = 0) - : x_ (x) - { - } - - auto_ptr (auto_ptr& y) - : x_ (y.release ()) - { - } - - template <typename T2> - auto_ptr (auto_ptr<T2>& y) - : x_ (y.release ()) - { - } - - auto_ptr (auto_ptr_ref<T> r) - : x_ (r.x_) - { - } - - auto_ptr& - operator= (auto_ptr& y) - { - if (x_ != y.x_) - reset (y.release ()); - - return *this; - } - - template <typename T2> - auto_ptr& - operator= (auto_ptr<T2>& y) - { - if (x_ != y.x_) - reset (y.release ()); - - return *this; - } - - auto_ptr& - operator= (auto_ptr_ref<T> r) - { - if (r.x_ != x_) - reset (r.x_); - - return *this; - } - - template <typename T2> - operator auto_ptr_ref<T2> () - { - return auto_ptr_ref<T2> (release ()); - } - - template <typename T2> - operator auto_ptr<T2> () - { - return auto_ptr<T2> (release ()); - } - - public: - T& - operator* () const - { - return *x_; - } - - T* - operator-> () const - { - return x_; - } - - T* - get () const - { - return x_; - } - - T* - release () - { - T* x (x_); - x_ = 0; - return x; - } - - void - reset (T* x = 0) - { - if (x_) - const_cast<typename remove_c<T>::r*> (x_)->release (); - - x_ = x; - } - - private: - T* x_; - }; - -#define XSD_DOM_AUTO_PTR xsd::cxx::xml::dom::auto_ptr - -#endif // XSD_CXX11 - } - } - } -} - -#endif // XSD_CXX_XML_DOM_AUTO_PTR_HXX diff --git a/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.hxx b/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.hxx deleted file mode 100644 index 5154b62..0000000 --- a/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.hxx +++ /dev/null @@ -1,59 +0,0 @@ -// file : xsd/cxx/xml/dom/bits/error-handler-proxy.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_DOM_BITS_ERROR_HANDLER_PROXY_HXX -#define XSD_CXX_XML_DOM_BITS_ERROR_HANDLER_PROXY_HXX - -#include <xercesc/dom/DOMError.hpp> -#include <xercesc/dom/DOMLocator.hpp> -#include <xercesc/dom/DOMErrorHandler.hpp> - -#include <xsd/cxx/xml/error-handler.hxx> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace dom - { - namespace bits - { - template <typename C> - class error_handler_proxy: public xercesc::DOMErrorHandler - { - public: - error_handler_proxy (error_handler<C>& eh) - : failed_ (false), eh_ (&eh), native_eh_ (0) - { - } - - error_handler_proxy (xercesc::DOMErrorHandler& eh) - : failed_ (false), eh_ (0), native_eh_ (&eh) - { - } - - virtual bool - handleError (const xercesc::DOMError& e); - - bool - failed () const - { - return failed_; - } - - private: - bool failed_; - error_handler<C>* eh_; - xercesc::DOMErrorHandler* native_eh_; - }; - } - } - } - } -} - -#include <xsd/cxx/xml/dom/bits/error-handler-proxy.txx> - -#endif // XSD_CXX_XML_DOM_BITS_ERROR_HANDLER_PROXY_HXX diff --git a/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.txx b/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.txx deleted file mode 100644 index a1f83ff..0000000 --- a/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.txx +++ /dev/null @@ -1,66 +0,0 @@ -// file : xsd/cxx/xml/dom/bits/error-handler-proxy.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xsd/cxx/xml/string.hxx> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace dom - { - namespace bits - { - template <typename C> - bool error_handler_proxy<C>:: - handleError (const xercesc::DOMError& e) - { - using xercesc::DOMError; - - if (e.getSeverity() != DOMError::DOM_SEVERITY_WARNING) - failed_ = true; - - if (native_eh_) - return native_eh_->handleError (e); - else - { - typedef typename error_handler<C>::severity severity; - - severity s (severity::error); - - switch (e.getSeverity()) - { - case DOMError::DOM_SEVERITY_WARNING: - { - s = severity::warning; - break; - } - case DOMError::DOM_SEVERITY_ERROR: - { - s = severity::error; - break; - } - case DOMError::DOM_SEVERITY_FATAL_ERROR: - { - s = severity::fatal; - break; - } - } - - xercesc::DOMLocator* loc (e.getLocation ()); - - return eh_->handle ( - transcode<C> (loc->getURI ()), - static_cast<unsigned long> (loc->getLineNumber ()), - static_cast<unsigned long> (loc->getColumnNumber ()), - s, - transcode<C> (e.getMessage ())); - } - } - } - } - } - } -} diff --git a/libxsd/xsd/cxx/xml/dom/elements.hxx b/libxsd/xsd/cxx/xml/dom/elements.hxx deleted file mode 100644 index 1244395..0000000 --- a/libxsd/xsd/cxx/xml/dom/elements.hxx +++ /dev/null @@ -1,34 +0,0 @@ -// file : xsd/cxx/xml/dom/elements.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_DOM_ELEMENTS_HXX -#define XSD_CXX_XML_DOM_ELEMENTS_HXX - -#include <xercesc/dom/DOMAttr.hpp> -#include <xercesc/dom/DOMElement.hpp> - -#include <xsd/cxx/xml/qualified-name.hxx> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace dom - { - template <typename C> - qualified_name<C> - name (const xercesc::DOMAttr&); - - template <typename C> - qualified_name<C> - name (const xercesc::DOMElement&); - } - } - } -} - -#include <xsd/cxx/xml/dom/elements.txx> - -#endif // XSD_CXX_XML_DOM_ELEMENTS_HXX diff --git a/libxsd/xsd/cxx/xml/dom/elements.txx b/libxsd/xsd/cxx/xml/dom/elements.txx deleted file mode 100644 index 46e4866..0000000 --- a/libxsd/xsd/cxx/xml/dom/elements.txx +++ /dev/null @@ -1,55 +0,0 @@ -// file : xsd/cxx/xml/dom/elements.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xsd/cxx/xml/string.hxx> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace dom - { - template <typename C> - qualified_name<C> - name (const xercesc::DOMAttr& a) - { - const XMLCh* n (a.getLocalName ()); - - // If this DOM doesn't support namespaces then use getName. - // - if (n != 0) - { - if (const XMLCh* ns = a.getNamespaceURI ()) - return qualified_name<C> (transcode<C> (n), transcode<C> (ns)); - else - return qualified_name<C> (transcode<C> (n)); - } - else - return qualified_name<C> (transcode<C> (a.getName ())); - } - - - template <typename C> - qualified_name<C> - name (const xercesc::DOMElement& e) - { - const XMLCh* n (e.getLocalName ()); - - // If this DOM doesn't support namespaces then use getTagName. - // - if (n != 0) - { - if (const XMLCh* ns = e.getNamespaceURI ()) - return qualified_name<C> (transcode<C> (n), transcode<C> (ns)); - else - return qualified_name<C> (transcode<C> (n)); - } - else - return qualified_name<C> (transcode<C> (e.getTagName ())); - } - } - } - } -} diff --git a/libxsd/xsd/cxx/xml/dom/parsing-header.hxx b/libxsd/xsd/cxx/xml/dom/parsing-header.hxx deleted file mode 100644 index b7bf344..0000000 --- a/libxsd/xsd/cxx/xml/dom/parsing-header.hxx +++ /dev/null @@ -1,22 +0,0 @@ -// file : xsd/cxx/xml/dom/parsing-header.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_DOM_PARSING_HEADER_HXX -#define XSD_CXX_XML_DOM_PARSING_HEADER_HXX - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace dom - { - template <typename C> - class parser; - } - } - } -} - -#endif // XSD_CXX_XML_DOM_PARSING_HEADER_HXX diff --git a/libxsd/xsd/cxx/xml/dom/parsing-source.hxx b/libxsd/xsd/cxx/xml/dom/parsing-source.hxx deleted file mode 100644 index fc0bd71..0000000 --- a/libxsd/xsd/cxx/xml/dom/parsing-source.hxx +++ /dev/null @@ -1,152 +0,0 @@ -// file : xsd/cxx/xml/dom/parsing-source.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_DOM_PARSING_SOURCE_HXX -#define XSD_CXX_XML_DOM_PARSING_SOURCE_HXX - -#include <string> - -#include <xercesc/dom/DOMNode.hpp> -#include <xercesc/dom/DOMAttr.hpp> -#include <xercesc/dom/DOMElement.hpp> -#include <xercesc/dom/DOMDocument.hpp> -#include <xercesc/dom/DOMNamedNodeMap.hpp> -#include <xercesc/dom/DOMErrorHandler.hpp> - -#include <xercesc/sax/InputSource.hpp> - -#include <xsd/cxx/xml/elements.hxx> // properies -#include <xsd/cxx/xml/error-handler.hxx> -#include <xsd/cxx/xml/dom/auto-ptr.hxx> -#include <xsd/cxx/xml/dom/elements.hxx> // name -#include <xsd/cxx/xml/dom/parsing-header.hxx> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace dom - { - // Parser state object. Can be used for parsing elements (and - // optionally text), attributes, or both. - // - template <typename C> - class parser - { - public: - parser (const xercesc::DOMElement& e, bool ep, bool tp, bool ap); - - // Content parsing. - // - bool - more_content () - { - return next_content_ != 0; - } - - const xercesc::DOMElement& - cur_element () - { - return *static_cast<const xercesc::DOMElement*> (next_content_); - } - - const xercesc::DOMText& - cur_text () - { - return *static_cast<const xercesc::DOMText*> (next_content_); - } - - bool - cur_is_text () - { - return next_content_->getNodeType () != - xercesc::DOMNode::ELEMENT_NODE; - } - - void - next_content (bool text); - - // Attribute parsing. - // - bool - more_attributes () - { - return as_ > ai_; - } - - const xercesc::DOMAttr& - next_attribute () - { - return *static_cast<const xercesc::DOMAttr*> (a_->item (ai_++)); - } - - void - reset_attributes () - { - ai_ = 0; - } - - const xercesc::DOMElement& - element () const - { - return element_; - } - - private: - parser (const parser&); - - parser& - operator= (const parser&); - - private: - const xercesc::DOMElement& element_; - const xercesc::DOMNode* next_content_; - - const xercesc::DOMNamedNodeMap* a_; - XMLSize_t ai_; // Index of the next DOMAttr. - XMLSize_t as_; // Cached size of a_. - }; - - - // Parsing flags. - // - const unsigned long dont_validate = 0x00000400UL; - const unsigned long no_muliple_imports = 0x00000800UL; - - template <typename C> - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> - parse (xercesc::InputSource&, - error_handler<C>&, - const properties<C>&, - unsigned long flags); - - template <typename C> - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> - parse (xercesc::InputSource&, - xercesc::DOMErrorHandler&, - const properties<C>&, - unsigned long flags); - - template <typename C> - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> - parse (const std::basic_string<C>& uri, - error_handler<C>&, - const properties<C>&, - unsigned long flags); - - template <typename C> - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> - parse (const std::basic_string<C>& uri, - xercesc::DOMErrorHandler&, - const properties<C>&, - unsigned long flags); - } - } - } -} - -#include <xsd/cxx/xml/dom/parsing-source.txx> - -#endif // XSD_CXX_XML_DOM_PARSING_SOURCE_HXX diff --git a/libxsd/xsd/cxx/xml/dom/parsing-source.txx b/libxsd/xsd/cxx/xml/dom/parsing-source.txx deleted file mode 100644 index 6543671..0000000 --- a/libxsd/xsd/cxx/xml/dom/parsing-source.txx +++ /dev/null @@ -1,379 +0,0 @@ -// file : xsd/cxx/xml/dom/parsing-source.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xercesc/dom/DOMLSParser.hpp> -#include <xercesc/dom/DOMLSException.hpp> - -#include <xercesc/dom/DOMNamedNodeMap.hpp> -#include <xercesc/dom/DOMImplementation.hpp> -#include <xercesc/dom/DOMImplementationRegistry.hpp> - -#include <xercesc/util/XMLUni.hpp> // xercesc::fg* -#include <xercesc/util/XMLUniDefs.hpp> // chLatin_L, etc - -#include <xercesc/framework/Wrapper4InputSource.hpp> - -#include <xsd/cxx/xml/string.hxx> -#include <xsd/cxx/xml/dom/bits/error-handler-proxy.hxx> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace dom - { - // parser - // - template <typename C> - parser<C>:: - parser (const xercesc::DOMElement& e, bool ep, bool tp, bool ap) - : element_ (e), - next_content_ (0), - a_ (0), - ai_ (0) - { - using xercesc::DOMNode; - - if (ep) - { - for (next_content_ = e.getFirstChild ();; - next_content_ = next_content_->getNextSibling ()) - { - if (next_content_ == 0) - break; - - DOMNode::NodeType t (next_content_->getNodeType ()); - - if (t == DOMNode::ELEMENT_NODE) - break; - - if (tp && (t == DOMNode::TEXT_NODE || - t == DOMNode::CDATA_SECTION_NODE)) - break; - } - } - - if (ap) - { - a_ = e.getAttributes (); - as_ = a_->getLength (); - } - } - - template <typename C> - void parser<C>:: - next_content (bool tp) - { - using xercesc::DOMNode; - - for (next_content_ = next_content_->getNextSibling ();; - next_content_ = next_content_->getNextSibling ()) - { - if (next_content_ == 0) - break; - - DOMNode::NodeType t (next_content_->getNodeType ()); - - if (t == DOMNode::ELEMENT_NODE) - break; - - if (tp && (t == DOMNode::TEXT_NODE || - t == DOMNode::CDATA_SECTION_NODE)) - break; - } - } - - // parse() - // - template <typename C> - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> - parse (xercesc::InputSource& is, - error_handler<C>& eh, - const properties<C>& prop, - unsigned long flags) - { - bits::error_handler_proxy<C> ehp (eh); - return xml::dom::parse (is, ehp, prop, flags); - } - - template <typename C> - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> - parse (xercesc::InputSource& is, - xercesc::DOMErrorHandler& eh, - const properties<C>& prop, - unsigned long flags) - { - using namespace xercesc; - - // Instantiate the DOM parser. - // - const XMLCh ls_id[] = {xercesc::chLatin_L, - xercesc::chLatin_S, - xercesc::chNull}; - - // Get an implementation of the Load-Store (LS) interface. - // - DOMImplementation* impl ( - DOMImplementationRegistry::getDOMImplementation (ls_id)); - - XSD_DOM_AUTO_PTR<DOMLSParser> parser ( - impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); - - DOMConfiguration* conf (parser->getDomConfig ()); - - // Discard comment nodes in the document. - // - conf->setParameter (XMLUni::fgDOMComments, false); - - // Enable datatype normalization. - // - conf->setParameter (XMLUni::fgDOMDatatypeNormalization, true); - - // Do not create EntityReference nodes in the DOM tree. No - // EntityReference nodes will be created, only the nodes - // corresponding to their fully expanded substitution text - // will be created. - // - conf->setParameter (XMLUni::fgDOMEntities, false); - - // Perform namespace processing. - // - conf->setParameter (XMLUni::fgDOMNamespaces, true); - - // Do not include ignorable whitespace in the DOM tree. - // - conf->setParameter (XMLUni::fgDOMElementContentWhitespace, false); - - if (flags & dont_validate) - { - conf->setParameter (XMLUni::fgDOMValidate, false); - conf->setParameter (XMLUni::fgXercesSchema, false); - conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); - } - else - { - conf->setParameter (XMLUni::fgDOMValidate, true); - conf->setParameter (XMLUni::fgXercesSchema, true); - - // Xerces-C++ 3.1.0 is the first version with working multi import - // support. - // -#if _XERCES_VERSION >= 30100 - if (!(flags & no_muliple_imports)) - conf->setParameter (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). - // - conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); - } - - // We will release DOM ourselves. - // - conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); - - - // Transfer properies if any. - // - - if (!prop.schema_location ().empty ()) - { - xml::string sl (prop.schema_location ()); - const void* v (sl.c_str ()); - - conf->setParameter ( - XMLUni::fgXercesSchemaExternalSchemaLocation, - const_cast<void*> (v)); - } - - if (!prop.no_namespace_schema_location ().empty ()) - { - xml::string sl (prop.no_namespace_schema_location ()); - const void* v (sl.c_str ()); - - conf->setParameter ( - XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation, - const_cast<void*> (v)); - } - - // If external schema location was specified, disable loading - // schemas via the schema location attributes in the document. - // -#if _XERCES_VERSION >= 30100 - if (!prop.schema_location ().empty () || - !prop.no_namespace_schema_location ().empty ()) - { - conf->setParameter (XMLUni::fgXercesLoadSchema, false); - } -#endif - // Set error handler. - // - bits::error_handler_proxy<C> ehp (eh); - conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); - - xercesc::Wrapper4InputSource wrap (&is, false); - - XSD_DOM_AUTO_PTR<DOMDocument> doc; - try - { - doc.reset (parser->parse (&wrap)); - } - catch (const xercesc::DOMLSException&) - { - } - - if (ehp.failed ()) - doc.reset (); - - return doc; - } - - template <typename C> - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> - parse (const std::basic_string<C>& uri, - error_handler<C>& eh, - const properties<C>& prop, - unsigned long flags) - { - bits::error_handler_proxy<C> ehp (eh); - return xml::dom::parse (uri, ehp, prop, flags); - } - - template <typename C> - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> - parse (const std::basic_string<C>& uri, - xercesc::DOMErrorHandler& eh, - const properties<C>& prop, - unsigned long flags) - { - using namespace xercesc; - - // Instantiate the DOM parser. - // - const XMLCh ls_id[] = {xercesc::chLatin_L, - xercesc::chLatin_S, - xercesc::chNull}; - - // Get an implementation of the Load-Store (LS) interface. - // - DOMImplementation* impl ( - DOMImplementationRegistry::getDOMImplementation (ls_id)); - - XSD_DOM_AUTO_PTR<DOMLSParser> parser ( - impl->createLSParser(DOMImplementationLS::MODE_SYNCHRONOUS, 0)); - - DOMConfiguration* conf (parser->getDomConfig ()); - - // Discard comment nodes in the document. - // - conf->setParameter (XMLUni::fgDOMComments, false); - - // Enable datatype normalization. - // - conf->setParameter (XMLUni::fgDOMDatatypeNormalization, true); - - // Do not create EntityReference nodes in the DOM tree. No - // EntityReference nodes will be created, only the nodes - // corresponding to their fully expanded substitution text - // will be created. - // - conf->setParameter (XMLUni::fgDOMEntities, false); - - // Perform namespace processing. - // - conf->setParameter (XMLUni::fgDOMNamespaces, true); - - // Do not include ignorable whitespace in the DOM tree. - // - conf->setParameter (XMLUni::fgDOMElementContentWhitespace, false); - - if (flags & dont_validate) - { - conf->setParameter (XMLUni::fgDOMValidate, false); - conf->setParameter (XMLUni::fgXercesSchema, false); - conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); - } - else - { - conf->setParameter (XMLUni::fgDOMValidate, true); - conf->setParameter (XMLUni::fgXercesSchema, true); - - // Xerces-C++ 3.1.0 is the first version with working multi import - // support. - // -#if _XERCES_VERSION >= 30100 - if (!(flags & no_muliple_imports)) - conf->setParameter (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). - // - conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); - } - - // We will release DOM ourselves. - // - conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); - - - // Transfer properies if any. - // - - if (!prop.schema_location ().empty ()) - { - xml::string sl (prop.schema_location ()); - const void* v (sl.c_str ()); - - conf->setParameter ( - XMLUni::fgXercesSchemaExternalSchemaLocation, - const_cast<void*> (v)); - } - - if (!prop.no_namespace_schema_location ().empty ()) - { - xml::string sl (prop.no_namespace_schema_location ()); - const void* v (sl.c_str ()); - - conf->setParameter ( - XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation, - const_cast<void*> (v)); - } - - // If external schema location was specified, disable loading - // schemas via the schema location attributes in the document. - // -#if _XERCES_VERSION >= 30100 - if (!prop.schema_location ().empty () || - !prop.no_namespace_schema_location ().empty ()) - { - conf->setParameter (XMLUni::fgXercesLoadSchema, false); - } -#endif - // Set error handler. - // - bits::error_handler_proxy<C> ehp (eh); - conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); - - XSD_DOM_AUTO_PTR<DOMDocument> doc; - try - { - doc.reset (parser->parseURI (string (uri).c_str ())); - } - catch (const xercesc::DOMLSException&) - { - } - - if (ehp.failed ()) - doc.reset (); - - return doc; - } - } - } - } -} diff --git a/libxsd/xsd/cxx/xml/dom/serialization-header.hxx b/libxsd/xsd/cxx/xml/dom/serialization-header.hxx deleted file mode 100644 index 8d3d6e9..0000000 --- a/libxsd/xsd/cxx/xml/dom/serialization-header.hxx +++ /dev/null @@ -1,79 +0,0 @@ -// file : xsd/cxx/xml/dom/serialization-header.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_DOM_SERIALIZATION_HEADER_HXX -#define XSD_CXX_XML_DOM_SERIALIZATION_HEADER_HXX - -#include <map> -#include <string> - -#include <xercesc/dom/DOMElement.hpp> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace dom - { - // Find an existing prefix or establish a new one. Try to use - // hint if provided and available. - // - template <typename C> - std::basic_string<C> - prefix (const C* ns, xercesc::DOMElement&, const C* hint = 0); - - template <typename C> - inline std::basic_string<C> - prefix (const std::basic_string<C>& ns, - xercesc::DOMElement& e, - const C* hint = 0) - { - return prefix (ns.c_str (), e, hint); - } - - // - // - template <typename C> - void - clear (xercesc::DOMElement&); - - // - // - template <typename C> - class namespace_info - { - public: - typedef std::basic_string<C> string; - - namespace_info () - { - } - - namespace_info (const string& name_, const string& schema_) - : name (name_), - schema (schema_) - { - } - - std::basic_string<C> name; - std::basic_string<C> schema; - }; - - - // Map of namespace prefix to namespace_info. - // - template <typename C> - class namespace_infomap: - public std::map<std::basic_string<C>, namespace_info<C> > - { - }; - } - } - } -} - -#include <xsd/cxx/xml/dom/serialization-header.txx> - -#endif // XSD_CXX_XML_DOM_SERIALIZATION_HEADER_HXX diff --git a/libxsd/xsd/cxx/xml/dom/serialization-header.txx b/libxsd/xsd/cxx/xml/dom/serialization-header.txx deleted file mode 100644 index 997dfe9..0000000 --- a/libxsd/xsd/cxx/xml/dom/serialization-header.txx +++ /dev/null @@ -1,188 +0,0 @@ -// file : xsd/cxx/xml/dom/serialization-header.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <vector> -#include <sstream> -#include <cstddef> // std::size_t - -#include <xercesc/dom/DOMNode.hpp> -#include <xercesc/dom/DOMAttr.hpp> -#include <xercesc/dom/DOMNamedNodeMap.hpp> - -#include <xercesc/util/XMLUni.hpp> // xercesc::fg* -#include <xercesc/util/XMLString.hpp> -#include <xercesc/validators/schema/SchemaSymbols.hpp> - -#include <xsd/cxx/xml/string.hxx> -#include <xsd/cxx/xml/bits/literals.hxx> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace dom - { - // - // - template <typename C> - std::basic_string<C> - prefix (const C* ns, xercesc::DOMElement& e, const C* hint) - { - string xns (ns); - const XMLCh* p (e.lookupPrefix (xns.c_str ())); - - if (p != 0) - return transcode<C> (p); - - if (e.isDefaultNamespace (xns.c_str ())) - return std::basic_string<C> (); - - // 'xml' prefix requires special handling and Xerces folks - // refuse to handle this in DOM so I have to do it myself. - // - if (std::basic_string<C> (ns) == xml::bits::xml_namespace<C> ()) - return xml::bits::xml_prefix<C> (); - - // No prefix for this namespace. Will need to establish one. - // - std::basic_string<C> prefix; - - if (hint != 0 && - e.lookupNamespaceURI (xml::string (hint).c_str ()) == 0) - { - prefix = hint; - } - else - { - for (unsigned long n (1);; ++n) - { - // Make finding the first few prefixes fast. - // - switch (n) - { - case 1: - { - prefix = xml::bits::first_prefix<C> (); - break; - } - case 2: - { - prefix = xml::bits::second_prefix<C> (); - break; - } - case 3: - { - prefix = xml::bits::third_prefix<C> (); - break; - } - case 4: - { - prefix = xml::bits::fourth_prefix<C> (); - break; - } - case 5: - { - prefix = xml::bits::fifth_prefix<C> (); - break; - } - default: - { - std::basic_ostringstream<C> ostr; - ostr << C ('p') << n; - prefix = ostr.str (); - break; - } - } - - if (e.lookupNamespaceURI (xml::string (prefix).c_str ()) == 0) - break; - } - } - - std::basic_string<C> name (xml::bits::xmlns_prefix<C> ()); - name += C(':'); - name += prefix; - - e.setAttributeNS ( - xercesc::XMLUni::fgXMLNSURIName, - xml::string (name).c_str (), - xns.c_str ()); - - return prefix; - } - - // - // - template <typename C> - void - clear (xercesc::DOMElement& e) - { - // Cannot use 'using namespace' because of MSXML conflict. - // - using xercesc::XMLUni; - using xercesc::XMLString; - using xercesc::SchemaSymbols; - - using xercesc::DOMNode; - using xercesc::DOMAttr; - using xercesc::DOMNamedNodeMap; - - // Remove child nodes. - // - while (DOMNode* n = e.getFirstChild ()) - { - e.removeChild (n); - n->release (); - } - - // Remove attributes. - // - DOMNamedNodeMap* att_map (e.getAttributes ()); - XMLSize_t n (att_map->getLength ()); - - if (n != 0) - { - std::vector<DOMAttr*> atts; - - // Collect all attributes to be removed while filtering - // out special cases (xmlns & xsi). - // - for (XMLSize_t i (0); i != n; ++i) - { - DOMAttr* a (static_cast<DOMAttr*> (att_map->item (i))); - const XMLCh* ns (a->getNamespaceURI ()); - - if (ns != 0) - { - if (XMLString::equals (ns, XMLUni::fgXMLNSURIName)) - continue; - - if (XMLString::equals (ns, SchemaSymbols::fgURI_XSI)) - { - const XMLCh* name (a->getLocalName ()); - - if (XMLString::equals ( - name, SchemaSymbols::fgXSI_SCHEMALOCACTION) || - XMLString::equals ( - name, SchemaSymbols::fgXSI_NONAMESPACESCHEMALOCACTION)) - continue; - } - } - - atts.push_back (a); - } - - for (std::vector<DOMAttr*>::iterator i (atts.begin ()), - end (atts.end ()); i != end; ++i) - { - e.removeAttributeNode (*i); - (*i)->release (); - } - } - } - } - } - } -} diff --git a/libxsd/xsd/cxx/xml/dom/serialization-source.hxx b/libxsd/xsd/cxx/xml/dom/serialization-source.hxx deleted file mode 100644 index a25e2ca..0000000 --- a/libxsd/xsd/cxx/xml/dom/serialization-source.hxx +++ /dev/null @@ -1,181 +0,0 @@ -// file : xsd/cxx/xml/dom/serialization-source.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_DOM_SERIALIZATION_SOURCE_HXX -#define XSD_CXX_XML_DOM_SERIALIZATION_SOURCE_HXX - -#include <string> -#include <cstring> // std::memcpy -#include <ostream> - -#include <xercesc/dom/DOMAttr.hpp> -#include <xercesc/dom/DOMElement.hpp> -#include <xercesc/dom/DOMDocument.hpp> -#include <xercesc/dom/DOMErrorHandler.hpp> -#include <xercesc/framework/XMLFormatter.hpp> // XMLFormatTarget, XMLFormatter - -#include <xsd/cxx/xml/error-handler.hxx> -#include <xsd/cxx/xml/dom/auto-ptr.hxx> -#include <xsd/cxx/xml/dom/elements.hxx> // name -#include <xsd/cxx/xml/dom/serialization-header.hxx> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace dom - { - // - // - template <typename C> - xercesc::DOMAttr& - create_attribute (const C* name, xercesc::DOMElement&); - - template <typename C> - xercesc::DOMAttr& - create_attribute (const C* name, const C* ns, xercesc::DOMElement&); - - template <typename C> - xercesc::DOMElement& - create_element (const C* name, xercesc::DOMElement&); - - template <typename C> - xercesc::DOMElement& - create_element (const C* name, const C* ns, xercesc::DOMElement&); - - // Add namespace declarations and schema locations. - // - template <typename C> - void - add_namespaces (xercesc::DOMElement&, const namespace_infomap<C>&); - - // Serialization flags. - // - const unsigned long no_xml_declaration = 0x00010000UL; - const unsigned long dont_pretty_print = 0x00020000UL; - - template <typename C> - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> - serialize (const std::basic_string<C>& root_element, - const std::basic_string<C>& root_element_namespace, - const namespace_infomap<C>& map, - unsigned long flags); - - // This one helps Sun C++ to overcome its fears. - // - template <typename C> - inline XSD_DOM_AUTO_PTR<xercesc::DOMDocument> - serialize (const C* root_element, - const C* root_element_namespace, - const namespace_infomap<C>& map, - unsigned long flags) - { - return serialize (std::basic_string<C> (root_element), - std::basic_string<C> (root_element_namespace), - map, - flags); - } - - // - // - template <typename C> - bool - serialize (xercesc::XMLFormatTarget& target, - const xercesc::DOMDocument& doc, - const std::basic_string<C>& enconding, - error_handler<C>& eh, - unsigned long flags); - - template <typename C> - bool - serialize (xercesc::XMLFormatTarget& target, - const xercesc::DOMDocument& doc, - const std::basic_string<C>& enconding, - xercesc::DOMErrorHandler& eh, - unsigned long flags); - - - class ostream_format_target: public xercesc::XMLFormatTarget - { - public: - ostream_format_target (std::ostream& os) - : n_ (0), os_ (os) - { - } - - public: - // 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 - writeChars (const XMLByte* const buf, - const XMLSize_t size, - xercesc::XMLFormatter* const) - { - // Ignore the write request if there was a stream failure and the - // stream is not using exceptions. - // - if (os_.fail ()) - return; - - // Flush the buffer if the block is too large or if we don't have - // any space left. - // - if ((size >= buf_size_ / 8 || n_ + size > buf_size_) && n_ != 0) - { - os_.write (buf_, static_cast<std::streamsize> (n_)); - n_ = 0; - - if (os_.fail ()) - return; - } - - if (size < buf_size_ / 8) - { - std::memcpy (buf_ + n_, reinterpret_cast<const char*> (buf), size); - n_ += size; - } - else - os_.write (reinterpret_cast<const char*> (buf), - static_cast<std::streamsize> (size)); - } - - - virtual void - flush () - { - // Ignore the flush request if there was a stream failure - // and the stream is not using exceptions. - // - if (!os_.fail ()) - { - if (n_ != 0) - { - os_.write (buf_, static_cast<std::streamsize> (n_)); - n_ = 0; - - if (os_.fail ()) - return; - } - - os_.flush (); - } - } - - private: - static const std::size_t buf_size_ = 1024; - char buf_[buf_size_]; - std::size_t n_; - std::ostream& os_; - }; - } - } - } -} - -#include <xsd/cxx/xml/dom/serialization-source.txx> - -#endif // XSD_CXX_XML_DOM_SERIALIZATION_SOURCE_HXX diff --git a/libxsd/xsd/cxx/xml/dom/serialization-source.txx b/libxsd/xsd/cxx/xml/dom/serialization-source.txx deleted file mode 100644 index b59e109..0000000 --- a/libxsd/xsd/cxx/xml/dom/serialization-source.txx +++ /dev/null @@ -1,362 +0,0 @@ -// file : xsd/cxx/xml/dom/serialization-source.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xercesc/util/XMLUni.hpp> // xercesc::fg* -#include <xercesc/util/XMLUniDefs.hpp> // chLatin_L, etc -#include <xercesc/validators/schema/SchemaSymbols.hpp> - -#include <xercesc/dom/DOMLSOutput.hpp> -#include <xercesc/dom/DOMLSSerializer.hpp> - -#include <xercesc/dom/DOMElement.hpp> -#include <xercesc/dom/DOMImplementation.hpp> -#include <xercesc/dom/DOMImplementationRegistry.hpp> - -#include <xsd/cxx/xml/string.hxx> -#include <xsd/cxx/xml/bits/literals.hxx> -#include <xsd/cxx/xml/dom/bits/error-handler-proxy.hxx> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace dom - { - // - // - template <typename C> - xercesc::DOMAttr& - create_attribute (const C* name, xercesc::DOMElement& parent) - { - xercesc::DOMDocument* doc (parent.getOwnerDocument ()); - xercesc::DOMAttr* a (doc->createAttribute (string (name).c_str ())); - parent.setAttributeNode (a); - return *a; - } - - template <typename C> - xercesc::DOMAttr& - create_attribute (const C* name, - const C* ns, - xercesc::DOMElement& parent) - { - if (ns[0] == C ('\0')) - return create_attribute (name, parent); - - xercesc::DOMDocument* doc (parent.getOwnerDocument ()); - - xercesc::DOMAttr* a; - std::basic_string<C> p (prefix<C> (ns, parent)); - - if (!p.empty ()) - { - p += ':'; - p += name; - a = doc->createAttributeNS (string (ns).c_str (), - string (p).c_str ()); - } - else - a = doc->createAttributeNS (string (ns).c_str (), - string (name).c_str ()); - - parent.setAttributeNodeNS (a); - return *a; - } - - template <typename C> - xercesc::DOMElement& - create_element (const C* name, xercesc::DOMElement& parent) - { - xercesc::DOMDocument* doc (parent.getOwnerDocument ()); - xercesc::DOMElement* e (doc->createElement (string (name).c_str ())); - parent.appendChild (e); - return *e; - } - - template <typename C> - xercesc::DOMElement& - create_element (const C* name, - const C* ns, - xercesc::DOMElement& parent) - { - if (ns[0] == C ('\0')) - return create_element (name, parent); - - xercesc::DOMDocument* doc (parent.getOwnerDocument ()); - - xercesc::DOMElement* e; - std::basic_string<C> p (prefix<C> (ns, parent)); - - if (!p.empty ()) - { - p += ':'; - p += name; - e = doc->createElementNS (string (ns).c_str (), - string (p).c_str ()); - } - else - e = doc->createElementNS (string (ns).c_str (), - string (name).c_str ()); - - parent.appendChild (e); - return *e; - } - - template <typename C> - void - add_namespaces (xercesc::DOMElement& el, - const namespace_infomap<C>& map) - { - using namespace xercesc; - - typedef std::basic_string<C> string; - typedef namespace_infomap<C> infomap; - typedef typename infomap::const_iterator infomap_iterator; - - C colon (':'), space (' '); - - // Check if we need to provide xsi mapping. - // - bool xsi (false); - string xsi_prefix; - string xmlns_prefix (xml::bits::xmlns_prefix<C> ()); - - for (infomap_iterator i (map.begin ()), e (map.end ()); i != e; ++i) - { - if (!i->second.schema.empty ()) - { - xsi = true; - break; - } - } - - // Check if we were told to provide xsi mapping. - // - if (xsi) - { - for (infomap_iterator i (map.begin ()), e (map.end ()); - i != e; - ++i) - { - if (i->second.name == xml::bits::xsi_namespace<C> ()) - { - xsi_prefix = i->first; - xsi = false; - break; - } - } - } - - // Create user-defined mappings. - // - for (infomap_iterator i (map.begin ()), e (map.end ()); i != e; ++i) - { - if (i->first.empty ()) - { - // Empty prefix. - // - if (!i->second.name.empty ()) - el.setAttributeNS ( - xercesc::XMLUni::fgXMLNSURIName, - xml::string (xmlns_prefix).c_str (), - xml::string (i->second.name).c_str ()); - } - else - { - el.setAttributeNS ( - xercesc::XMLUni::fgXMLNSURIName, - xml::string (xmlns_prefix + colon + i->first).c_str (), - xml::string (i->second.name).c_str ()); - } - } - - // If we were not told to provide xsi mapping but we need it - // then we will have to add it ourselves. - // - if (xsi) - xsi_prefix = dom::prefix (xml::bits::xsi_namespace<C> (), - el, - xml::bits::xsi_prefix<C> ()); - - // Create xsi:schemaLocation and xsi:noNamespaceSchemaLocation - // attributes. - // - string schema_location; - string no_namespace_schema_location; - - for (infomap_iterator i (map.begin ()), e (map.end ()); i != e; ++i) - { - if (!i->second.schema.empty ()) - { - if (i->second.name.empty ()) - { - if (!no_namespace_schema_location.empty ()) - no_namespace_schema_location += space; - - no_namespace_schema_location += i->second.schema; - } - else - { - if (!schema_location.empty ()) - schema_location += space; - - schema_location += i->second.name + space + i->second.schema; - } - } - } - - if (!schema_location.empty ()) - { - el.setAttributeNS ( - xercesc::SchemaSymbols::fgURI_XSI, - xml::string (xsi_prefix + colon + - xml::bits::schema_location<C> ()).c_str (), - xml::string (schema_location).c_str ()); - } - - if (!no_namespace_schema_location.empty ()) - { - el.setAttributeNS ( - xercesc::SchemaSymbols::fgURI_XSI, - xml::string ( - xsi_prefix + colon + - xml::bits::no_namespace_schema_location<C> ()).c_str (), - xml::string (no_namespace_schema_location).c_str ()); - } - } - - // - // - template <typename C> - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> - serialize (const std::basic_string<C>& el, - const std::basic_string<C>& ns, - const namespace_infomap<C>& map, - unsigned long) - { - using namespace xercesc; - - typedef std::basic_string<C> string; - typedef namespace_infomap<C> infomap; - typedef typename infomap::const_iterator infomap_iterator; - - string prefix; - - if (!ns.empty ()) - { - infomap_iterator i (map.begin ()), e (map.end ()); - - for ( ;i != e; ++i) - { - if (i->second.name == ns) - { - prefix = i->first; - break; - } - } - - // Since this is the first namespace in document we don't - // need to worry about conflicts. - // - if (i == e) - prefix = xml::bits::first_prefix<C> (); - } - - const XMLCh ls[] = {xercesc::chLatin_L, - xercesc::chLatin_S, - xercesc::chNull}; - - DOMImplementation* impl ( - DOMImplementationRegistry::getDOMImplementation (ls)); - - XSD_DOM_AUTO_PTR<DOMDocument> doc ( - impl->createDocument ( - (ns.empty () ? 0 : xml::string (ns).c_str ()), - xml::string ((prefix.empty () - ? el - : prefix + C (':') + el)).c_str (), - 0)); - - add_namespaces (*doc->getDocumentElement (), map); - - return doc; - } - - - template <typename C> - bool - serialize (xercesc::XMLFormatTarget& target, - const xercesc::DOMDocument& doc, - const std::basic_string<C>& encoding, - xercesc::DOMErrorHandler& eh, - unsigned long flags) - { - using namespace xercesc; - - const XMLCh ls[] = {xercesc::chLatin_L, - xercesc::chLatin_S, - xercesc::chNull}; - - DOMImplementation* impl ( - DOMImplementationRegistry::getDOMImplementation (ls)); - - bits::error_handler_proxy<C> ehp (eh); - - XSD_DOM_AUTO_PTR<DOMLSSerializer> writer ( - impl->createLSSerializer ()); - - DOMConfiguration* conf (writer->getDomConfig ()); - - conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); - - // Set some nice features if the serializer supports them. - // - if (conf->canSetParameter ( - XMLUni::fgDOMWRTDiscardDefaultContent, true)) - conf->setParameter (XMLUni::fgDOMWRTDiscardDefaultContent, true); - - if (!(flags & dont_pretty_print) && - conf->canSetParameter (XMLUni::fgDOMWRTFormatPrettyPrint, true)) - { - conf->setParameter (XMLUni::fgDOMWRTFormatPrettyPrint, true); - - // Don't add extra new lines between first-level elements. - // - if (conf->canSetParameter (XMLUni::fgDOMWRTXercesPrettyPrint, true)) - conf->setParameter (XMLUni::fgDOMWRTXercesPrettyPrint, false); - } - - // See if we need to write XML declaration. - // - if ((flags & no_xml_declaration) && - conf->canSetParameter (XMLUni::fgDOMXMLDeclaration, false)) - conf->setParameter (XMLUni::fgDOMXMLDeclaration, false); - - XSD_DOM_AUTO_PTR<DOMLSOutput> out (impl->createLSOutput ()); - - out->setEncoding (xml::string (encoding).c_str ()); - out->setByteStream (&target); - - if (!writer->write (&doc, out.get ()) || ehp.failed ()) - return false; - - return true; - } - - template <typename C> - bool - serialize (xercesc::XMLFormatTarget& target, - const xercesc::DOMDocument& doc, - const std::basic_string<C>& enconding, - error_handler<C>& eh, - unsigned long flags) - { - bits::error_handler_proxy<C> ehp (eh); - return serialize (target, doc, enconding, ehp, flags); - } - } - } - } -} diff --git a/libxsd/xsd/cxx/xml/dom/wildcard-source.hxx b/libxsd/xsd/cxx/xml/dom/wildcard-source.hxx deleted file mode 100644 index 66c0ae6..0000000 --- a/libxsd/xsd/cxx/xml/dom/wildcard-source.hxx +++ /dev/null @@ -1,29 +0,0 @@ -// file : xsd/cxx/xml/dom/wildcard-source.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_DOM_WILDCARD_SOURCE_HXX -#define XSD_CXX_XML_DOM_WILDCARD_SOURCE_HXX - -#include <xercesc/dom/DOMDocument.hpp> - -#include <xsd/cxx/xml/dom/auto-ptr.hxx> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace dom - { - template <typename C> - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> - create_document (); - } - } - } -} - -#include <xsd/cxx/xml/dom/wildcard-source.txx> - -#endif // XSD_CXX_XML_DOM_WILDCARD_SOURCE_HXX diff --git a/libxsd/xsd/cxx/xml/dom/wildcard-source.txx b/libxsd/xsd/cxx/xml/dom/wildcard-source.txx deleted file mode 100644 index 5249235..0000000 --- a/libxsd/xsd/cxx/xml/dom/wildcard-source.txx +++ /dev/null @@ -1,36 +0,0 @@ -// file : xsd/cxx/xml/dom/wildcard-source.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xercesc/util/XMLUniDefs.hpp> // chLatin_L, etc - -#include <xercesc/dom/DOMImplementation.hpp> -#include <xercesc/dom/DOMImplementationRegistry.hpp> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace dom - { - template <typename C> - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> - create_document () - { - const XMLCh ls[] = {xercesc::chLatin_L, - xercesc::chLatin_S, - xercesc::chNull}; - - // Get an implementation of the Load-Store (LS) interface. - // - xercesc::DOMImplementation* impl ( - xercesc::DOMImplementationRegistry::getDOMImplementation (ls)); - - return XSD_DOM_AUTO_PTR<xercesc::DOMDocument> ( - impl->createDocument ()); - } - } - } - } -} diff --git a/libxsd/xsd/cxx/xml/elements.hxx b/libxsd/xsd/cxx/xml/elements.hxx deleted file mode 100644 index 4145891..0000000 --- a/libxsd/xsd/cxx/xml/elements.hxx +++ /dev/null @@ -1,116 +0,0 @@ -// file : xsd/cxx/xml/elements.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_ELEMENTS_HXX -#define XSD_CXX_XML_ELEMENTS_HXX - -#include <string> - -#include <xercesc/util/XercesVersion.hpp> -#include <xercesc/util/PlatformUtils.hpp> - -#if _XERCES_VERSION < 30000 -# error Xerces-C++ 2-series is not supported -#endif - -namespace xsd -{ - namespace cxx - { - namespace xml - { - template <typename C> - class properties - { - public: - struct argument {}; - - - // Schema location properties. Note that all locations are - // relative to an instance document unless they are full - // URIs. For example if you want to use a local schema then - // you will need to use 'file:///absolute/path/to/your/schema'. - // - - // Add a location for a schema with a target namespace. - // - void - schema_location (const std::basic_string<C>& namespace_, - const std::basic_string<C>& location); - - // Add a location for a schema without a target namespace. - // - void - no_namespace_schema_location (const std::basic_string<C>& location); - - public: - const std::basic_string<C>& - schema_location () const - { - return schema_location_; - } - - const std::basic_string<C>& - no_namespace_schema_location () const - { - return no_namespace_schema_location_; - } - - private: - std::basic_string<C> schema_location_; - std::basic_string<C> no_namespace_schema_location_; - }; - - - // - // - - template <typename C> - std::basic_string<C> - prefix (const std::basic_string<C>& n); - - template <typename C> - std::basic_string<C> - uq_name (const std::basic_string<C>& n); - - - // - // - - inline void - initialize () - { - xercesc::XMLPlatformUtils::Initialize (); - } - - inline void - terminate () - { - xercesc::XMLPlatformUtils::Terminate (); - } - - struct auto_initializer - { - auto_initializer (bool initialize = true, bool terminate = true) - : terminate_ (initialize && terminate) - { - if (initialize) - xml::initialize (); - } - - ~auto_initializer () - { - if (terminate_) - terminate (); - } - - private: - bool terminate_; - }; - } - } -} - -#include <xsd/cxx/xml/elements.txx> - -#endif // XSD_CXX_XML_ELEMENTS_HXX diff --git a/libxsd/xsd/cxx/xml/elements.txx b/libxsd/xsd/cxx/xml/elements.txx deleted file mode 100644 index c034c07..0000000 --- a/libxsd/xsd/cxx/xml/elements.txx +++ /dev/null @@ -1,71 +0,0 @@ -// file : xsd/cxx/xml/elements.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace xml - { - // properties - // - - template <typename C> - void properties<C>:: - schema_location (const std::basic_string<C>& ns, - const std::basic_string<C>& loc) - { - if (ns.empty () || loc.empty ()) - throw argument (); - - if (!schema_location_.empty ()) - schema_location_ += C (' '); - - schema_location_ += ns + C (' ') + loc; - } - - template <typename C> - void properties<C>:: - no_namespace_schema_location (const std::basic_string<C>& loc) - { - if (loc.empty ()) - throw argument (); - - if (!no_namespace_schema_location_.empty ()) - no_namespace_schema_location_ += C (' '); - - no_namespace_schema_location_ += loc; - } - - - // - // - - template <typename C> - std::basic_string<C> - prefix (const std::basic_string<C>& n) - { - std::size_t i (0); - - while (i < n.length () && n[i] != ':') - ++i; - - return std::basic_string<C> (n, i == n.length () ? i : 0, i); - } - - template <typename C> - std::basic_string<C> - uq_name (const std::basic_string<C>& n) - { - std::size_t i (0); - - while (i < n.length () && n[i] != ':') - ++i; - - return std::basic_string<C> ( - n.c_str () + (i == n.length () ? 0 : i + 1)); - } - } - } -} - diff --git a/libxsd/xsd/cxx/xml/error-handler.hxx b/libxsd/xsd/cxx/xml/error-handler.hxx deleted file mode 100644 index 40c30f3..0000000 --- a/libxsd/xsd/cxx/xml/error-handler.hxx +++ /dev/null @@ -1,57 +0,0 @@ -// file : xsd/cxx/xml/error-handler.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_ERROR_HANDLER_HXX -#define XSD_CXX_XML_ERROR_HANDLER_HXX - -#include <string> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - template <typename C> - class error_handler - { - public: - virtual - ~error_handler () - { - } - - public: - - // The fatal severity level results in termination - // of the parsing process no matter what is returned - // from handle. - // - struct severity - { - enum value - { - warning, - error, - fatal - }; - - severity (value v) : v_ (v) {} - operator value () const { return v_; } - - private: - value v_; - }; - - virtual bool - handle (const std::basic_string<C>& id, - unsigned long line, - unsigned long column, - severity, - const std::basic_string<C>& message) = 0; - }; - } - } -} - -#endif // XSD_CXX_XML_ERROR_HANDLER_HXX diff --git a/libxsd/xsd/cxx/xml/exceptions.hxx b/libxsd/xsd/cxx/xml/exceptions.hxx deleted file mode 100644 index 2c2baaf..0000000 --- a/libxsd/xsd/cxx/xml/exceptions.hxx +++ /dev/null @@ -1,18 +0,0 @@ -// file : xsd/cxx/xml/exceptions.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_EXCEPTIONS_HXX -#define XSD_CXX_XML_EXCEPTIONS_HXX - -namespace xsd -{ - namespace cxx - { - namespace xml - { - struct invalid_utf16_string {}; - } - } -} - -#endif // XSD_CXX_XML_EXCEPTIONS_HXX diff --git a/libxsd/xsd/cxx/xml/qualified-name.hxx b/libxsd/xsd/cxx/xml/qualified-name.hxx deleted file mode 100644 index f6879aa..0000000 --- a/libxsd/xsd/cxx/xml/qualified-name.hxx +++ /dev/null @@ -1,82 +0,0 @@ -// file : xsd/cxx/xml/qualified-name.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_QUALIFIED_NAME_HXX -#define XSD_CXX_XML_QUALIFIED_NAME_HXX - -#include <string> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - template <typename C> - struct qualified_name - { - qualified_name (const C* name, - const C* namespace_) - : name_ (name), namespace__ (namespace_) - { - } - - qualified_name (const std::basic_string<C>& name, - const std::basic_string<C>& namespace_) - : name_ (name), namespace__ (namespace_) - { - } - - qualified_name (const C* name) - : name_ (name) - { - } - - qualified_name (const std::basic_string<C>& name) - : name_ (name) - { - } - - const std::basic_string<C>& - name () const - { - return name_; - } - - const std::basic_string<C>& - namespace_ () const - { - return namespace__; - } - - private: - std::basic_string<C> name_; - std::basic_string<C> namespace__; - }; - - template <typename C> - inline bool - operator== (const qualified_name<C>& x, const qualified_name<C>& y) - { - return x.name () == y.name () && x.namespace_ () == y.namespace_ (); - } - - template <typename C> - inline bool - operator!= (const qualified_name<C>& x, const qualified_name<C>& y) - { - return !(x == y); - } - - template <typename C> - inline bool - operator< (const qualified_name<C>& x, const qualified_name<C>& y) - { - int r (x.name ().compare (y.name ())); - return (r < 0) || (r == 0 && x.namespace_ () < y.namespace_ ()); - } - } - } -} - -#endif // XSD_CXX_XML_QUALIFIED_NAME_HXX diff --git a/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.hxx b/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.hxx deleted file mode 100644 index 7ceecbe..0000000 --- a/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.hxx +++ /dev/null @@ -1,78 +0,0 @@ -// file : xsd/cxx/xml/sax/bits/error-handler-proxy.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_SAX_ERROR_HANDLER_PROXY_HXX -#define XSD_CXX_XML_SAX_ERROR_HANDLER_PROXY_HXX - -#include <xercesc/sax/ErrorHandler.hpp> -#include <xercesc/sax/SAXParseException.hpp> - -#include <xsd/cxx/xml/error-handler.hxx> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace sax - { - namespace bits - { - template <typename C> - class error_handler_proxy: public xercesc::ErrorHandler - { - public: - error_handler_proxy (error_handler<C>& eh) - : failed_ (false), eh_ (&eh), native_eh_ (0) - { - } - - error_handler_proxy (xercesc::ErrorHandler& eh) - : failed_ (false), eh_ (0), native_eh_ (&eh) - { - } - - public: - virtual void - warning (const xercesc::SAXParseException& e); - - virtual void - error (const xercesc::SAXParseException& e); - - virtual void - fatalError (const xercesc::SAXParseException& e); - - public: - bool - failed () const - { - return failed_; - } - - virtual void - resetErrors() - { - failed_ = false; - } - - private: - typedef typename error_handler<C>::severity severity; - - void - handle (const xercesc::SAXParseException&, severity); - - private: - bool failed_; - error_handler<C>* eh_; - xercesc::ErrorHandler* native_eh_; - }; - } - } - } - } -} - -#include <xsd/cxx/xml/sax/bits/error-handler-proxy.txx> - -#endif // XSD_CXX_XML_SAX_ERROR_HANDLER_PROXY_HXX diff --git a/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.txx b/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.txx deleted file mode 100644 index 58cef7a..0000000 --- a/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.txx +++ /dev/null @@ -1,76 +0,0 @@ -// file : xsd/cxx/xml/sax/bits/error-handler-proxy.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xsd/cxx/xml/string.hxx> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace sax - { - namespace bits - { - template <typename C> - void error_handler_proxy<C>:: - warning (const xercesc::SAXParseException& e) - { - if (native_eh_) - native_eh_->warning (e); - else - handle (e, severity::warning); - } - - - template <typename C> - void error_handler_proxy<C>:: - error (const xercesc::SAXParseException& e) - { - failed_ = true; - - if (native_eh_) - native_eh_->error (e); - else - handle (e, severity::error); - } - - - template <typename C> - void error_handler_proxy<C>:: - fatalError (const xercesc::SAXParseException& e) - { - failed_ = true; - - if (native_eh_) - native_eh_->fatalError (e); - else - handle (e, severity::fatal); - } - - - template <typename C> - void error_handler_proxy<C>:: - handle (const xercesc::SAXParseException& e, severity s) - { - //@@ I do not honor return values from the handler. This - // is not too bad at the moment because I set - // all-errors-are-fatal flag on the parser. - // - const XMLCh* id (e.getPublicId ()); - - if (id == 0) - id = e.getSystemId (); - - eh_->handle (transcode<C> (id), - static_cast<unsigned long> (e.getLineNumber ()), - static_cast<unsigned long> (e.getColumnNumber ()), - s, - transcode<C> (e.getMessage ())); - } - } - } - } - } -} diff --git a/libxsd/xsd/cxx/xml/sax/std-input-source.hxx b/libxsd/xsd/cxx/xml/sax/std-input-source.hxx deleted file mode 100644 index f4376d1..0000000 --- a/libxsd/xsd/cxx/xml/sax/std-input-source.hxx +++ /dev/null @@ -1,151 +0,0 @@ -// file : xsd/cxx/xml/sax/std-input-source.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_SAX_STD_INPUT_SOURCE_HXX -#define XSD_CXX_XML_SAX_STD_INPUT_SOURCE_HXX - -#include <istream> - -#include <xsd/cxx/xml/string.hxx> - -#include <xercesc/sax/InputSource.hpp> -#include <xercesc/util/BinInputStream.hpp> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace sax - { - class std_input_stream: public xercesc::BinInputStream - { - public: - std_input_stream (std::istream& is) - : is_ (is) - { - } - - virtual XMLFilePos - curPos () const - { - return static_cast<XMLFilePos> (is_.tellg ()); - } - - virtual XMLSize_t - readBytes (XMLByte* const buf, const XMLSize_t size) - { - // Some implementations don't clear gcount if you - // call read() on a stream that is in the eof state. - // - if (is_.eof ()) - return 0; - - // Unset the exception failbit while we are working - // with the stream. - // - std::ios_base::iostate old (is_.exceptions ()); - is_.exceptions (old & ~std::ios_base::failbit); - - is_.read (reinterpret_cast<char*> (buf), - static_cast<std::streamsize> (size)); - - // Clear the fail bit if it was caused by eof and restore - // the original exception state. If there are any pending - // errors then the exception will be thrown now. - // - if (is_.fail () && is_.eof ()) - is_.clear (is_.rdstate () & ~std::ios_base::failbit); - - is_.exceptions (old); - - // Make sure that if we failed, readBytes won't be called - // again. - // - return !is_.fail () - ? static_cast<XMLSize_t> (is_.gcount ()) - : 0; - } - - virtual const XMLCh* - getContentType () const - { - return 0; - } - - private: - std::istream& is_; - }; - - - class std_input_source: public xercesc::InputSource - { - public: - std_input_source (std::istream& is) - : is_ (&is) - { - } - - template <typename C> - std_input_source (std::istream& is, const C* system_id) - : xercesc::InputSource (xml::string (system_id).c_str ()), - is_ (&is) - { - } - - template <typename C> - std_input_source (std::istream& is, - const std::basic_string<C>& system_id) - : xercesc::InputSource (xml::string (system_id).c_str ()), - is_ (&is) - { - } - - template <typename C> - std_input_source (std::istream& is, - const C* system_id, - const C* public_id) - : xercesc::InputSource (xml::string (system_id).c_str (), - xml::string (public_id).c_str ()), - is_ (&is) - { - } - - template <typename C> - std_input_source (std::istream& is, - const std::basic_string<C>& system_id, - const std::basic_string<C>& public_id) - : xercesc::InputSource (xml::string (system_id).c_str (), - xml::string (public_id).c_str ()), - is_ (&is) - { - } - - struct copy {}; - - // Throws the copy exception if this function is called more - // than once. - // - virtual xercesc::BinInputStream* - makeStream () const - { - if (is_ == 0) - throw copy (); - - std::istream& is (*is_); - - is_ = 0; - - return new std_input_stream (is); - } - - private: - mutable std::istream* is_; - }; - } - } - } -} - -#endif // XSD_CXX_XML_SAX_STD_INPUT_SOURCE_HXX diff --git a/libxsd/xsd/cxx/xml/std-memory-manager.hxx b/libxsd/xsd/cxx/xml/std-memory-manager.hxx deleted file mode 100644 index b6454a8..0000000 --- a/libxsd/xsd/cxx/xml/std-memory-manager.hxx +++ /dev/null @@ -1,53 +0,0 @@ -// file : xsd/cxx/xml/std-memory-manager.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_STD_MEMORY_MANAGER_HXX -#define XSD_CXX_XML_STD_MEMORY_MANAGER_HXX - -#include <new> // operator new, delete -#include <xercesc/framework/MemoryManager.hpp> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - class std_memory_manager: public xercesc::MemoryManager - { - public: - // Xerces-C++ MemoryManager interface. - // - virtual void* - allocate(XMLSize_t size) - { - return operator new (size); - } - - virtual void - deallocate(void* p) - { - if (p) - operator delete (p); - } - - virtual xercesc::MemoryManager* - getExceptionMemoryManager() - { - return xercesc::XMLPlatformUtils::fgMemoryManager; - } - - // Standard deleter interface. - // - void - operator() (void* p) const - { - if (p) - operator delete (p); - } - }; - } - } -} - -#endif // XSD_CXX_XML_STD_MEMORY_MANAGER_HXX diff --git a/libxsd/xsd/cxx/xml/string.hxx b/libxsd/xsd/cxx/xml/string.hxx deleted file mode 100644 index 252bb82..0000000 --- a/libxsd/xsd/cxx/xml/string.hxx +++ /dev/null @@ -1,89 +0,0 @@ -// file : xsd/cxx/xml/string.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_STRING_HXX -#define XSD_CXX_XML_STRING_HXX - -#include <string> -#include <cstddef> // std::size_t - -#include <xercesc/util/XercesDefs.hpp> // XMLCh - -#include <xsd/cxx/config.hxx> // XSD_CXX11 - -#ifdef XSD_CXX11 -# include <memory> // std::unique_ptr -#else -# include <xsd/cxx/auto-array.hxx> -#endif - -namespace xsd -{ - namespace cxx - { - namespace xml - { - // Transcode a null-terminated string. - // - template <typename C> - std::basic_string<C> - transcode (const XMLCh* s); - - // Transcode a potentially non-null-terminated string. - // - template <typename C> - std::basic_string<C> - transcode (const XMLCh* s, std::size_t length); - - - // For VC wchar_t and XMLCh are the same type so we cannot overload - // the transcode name. You should not use these functions anyway and - // instead use the xml::string class below. - // - template <typename C> - XMLCh* - transcode_to_xmlch (const C*); - - template <typename C> - XMLCh* - transcode_to_xmlch (const std::basic_string<C>& s); - - // - // - class string - { - public : - template <typename C> - string (const std::basic_string<C>& s) - : s_ (transcode_to_xmlch<C> (s)) {} - - template <typename C> - string (const C* s): s_ (transcode_to_xmlch<C> (s)) {} - - const XMLCh* - c_str () const {return s_.get ();} - - XMLCh* - release () {return s_.release ();} - - private: - string (const string&); - - string& - operator= (const string&); - - private: -#ifdef XSD_CXX11 - std::unique_ptr<XMLCh[]> s_; -#else - auto_array<XMLCh> s_; -#endif - }; - } - } -} - -#endif // XSD_CXX_XML_STRING_HXX - -#include <xsd/cxx/xml/string.ixx> -#include <xsd/cxx/xml/string.txx> diff --git a/libxsd/xsd/cxx/xml/string.ixx b/libxsd/xsd/cxx/xml/string.ixx deleted file mode 100644 index f93a498..0000000 --- a/libxsd/xsd/cxx/xml/string.ixx +++ /dev/null @@ -1,169 +0,0 @@ -// file : xsd/cxx/xml/string.ixx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_STRING_IXX -#define XSD_CXX_XML_STRING_IXX - -#include <xercesc/util/XMLString.hpp> - -// If no transcoder has been included, use the default UTF-8. -// -#ifndef XSD_CXX_XML_TRANSCODER -# include <xsd/cxx/xml/char-utf8.hxx> -#endif - -// We sometimes need this functionality even if we are building for -// wchar_t. -// -namespace xsd -{ - namespace cxx - { - namespace xml - { - template <> - inline std::basic_string<char> - transcode<char> (const XMLCh* s) - { - if (s == 0 || *s == XMLCh (0)) - return std::basic_string<char> (); - -#ifndef XSD_CXX_XML_TRANSCODER_CHAR_LCP - return char_transcoder::to (s, xercesc::XMLString::stringLen (s)); -#else - return char_transcoder::to (s); -#endif - } - - template <> - inline std::basic_string<char> - transcode<char> (const XMLCh* s, std::size_t len) - { - if (s == 0 || len == 0) - return std::basic_string<char> (); - - return char_transcoder::to (s, len); - } - - template <> - inline XMLCh* - transcode_to_xmlch (const char* s) - { -#ifndef XSD_CXX_XML_TRANSCODER_CHAR_LCP - return char_transcoder::from (s, std::char_traits<char>::length (s)); -#else - return char_transcoder::from (s); -#endif - } - - template <> - inline XMLCh* - transcode_to_xmlch (const std::basic_string<char>& s) - { -#ifndef XSD_CXX_XML_TRANSCODER_CHAR_LCP - return char_transcoder::from (s.c_str (), s.length ()); -#else - return char_transcoder::from (s.c_str ()); -#endif - } - } - } -} - -#endif // XSD_CXX_XML_STRING_IXX - - -#if defined(XSD_USE_CHAR) || !defined(XSD_USE_WCHAR) - -#ifndef XSD_CXX_XML_STRING_IXX_CHAR -#define XSD_CXX_XML_STRING_IXX_CHAR - -#endif // XSD_CXX_XML_STRING_IXX_CHAR -#endif // XSD_USE_CHAR - - -#if defined(XSD_USE_WCHAR) || !defined(XSD_USE_CHAR) - -#ifndef XSD_CXX_XML_STRING_IXX_WCHAR -#define XSD_CXX_XML_STRING_IXX_WCHAR - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace bits - { - template <typename W, std::size_t S> - struct wchar_transcoder; - - // Specialization for 2-byte wchar_t (resulting encoding is UTF-16). - // - template <typename W> - struct wchar_transcoder<W, 2> - { - static std::basic_string<W> - to (const XMLCh* s, std::size_t length); - - static XMLCh* - from (const W* s, std::size_t length); - }; - - - // Specialization for 4-byte wchar_t (resulting encoding is UCS-4). - // - template <typename W> - struct wchar_transcoder<W, 4> - { - static std::basic_string<W> - to (const XMLCh* s, std::size_t length); - - static XMLCh* - from (const W* s, std::size_t length); - }; - } - - template <> - inline std::basic_string<wchar_t> - transcode<wchar_t> (const XMLCh* s) - { - if (s == 0) - return std::basic_string<wchar_t> (); - - return bits::wchar_transcoder<wchar_t, sizeof (wchar_t)>::to ( - s, xercesc::XMLString::stringLen (s)); - } - - template <> - inline std::basic_string<wchar_t> - transcode<wchar_t> (const XMLCh* s, std::size_t len) - { - if (s == 0 || len == 0) - return std::basic_string<wchar_t> (); - - return bits::wchar_transcoder<wchar_t, sizeof (wchar_t)>::to ( - s, len); - } - - template <> - inline XMLCh* - transcode_to_xmlch (const wchar_t* s) - { - return bits::wchar_transcoder<wchar_t, sizeof (wchar_t)>::from ( - s, std::char_traits<wchar_t>::length (s)); - } - - template <> - inline XMLCh* - transcode_to_xmlch (const std::basic_string<wchar_t>& s) - { - return bits::wchar_transcoder<wchar_t, sizeof (wchar_t)>::from ( - s.c_str (), s.length ()); - } - } - } -} - -#endif // XSD_CXX_XML_STRING_IXX_WCHAR -#endif // XSD_USE_WCHAR diff --git a/libxsd/xsd/cxx/xml/string.txx b/libxsd/xsd/cxx/xml/string.txx deleted file mode 100644 index bf4617d..0000000 --- a/libxsd/xsd/cxx/xml/string.txx +++ /dev/null @@ -1,161 +0,0 @@ -// file : xsd/cxx/xml/string.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_XML_STRING_TXX -#define XSD_CXX_XML_STRING_TXX - - -#endif // XSD_CXX_XML_STRING_TXX - -#if defined(XSD_USE_WCHAR) || !defined(XSD_USE_CHAR) - -#ifndef XSD_CXX_XML_STRING_TXX_WCHAR -#define XSD_CXX_XML_STRING_TXX_WCHAR - -#include <xsd/cxx/xml/exceptions.hxx> - -namespace xsd -{ - namespace cxx - { - namespace xml - { - namespace bits - { - // wchar_transcoder (specialization for 2-byte wchar_t) - // - template <typename W> - std::basic_string<W> wchar_transcoder<W, 2>:: - to (const XMLCh* s, std::size_t length) - { - std::basic_string<W> r; - r.reserve (length + 1); - r.resize (length); - W* rs (const_cast<W*> (r.c_str ())); - - for (std::size_t i (0); i < length; ++s, ++i) - { - rs[i] = *s; - } - - return r; - } - - template <typename W> - XMLCh* wchar_transcoder<W, 2>:: - from (const W* s, std::size_t length) - { -#ifdef XSD_CXX11 - std::unique_ptr<XMLCh[]> r ( -#else - auto_array<XMLCh> r ( -#endif - new XMLCh[length + 1]); - - XMLCh* ir (r.get ()); - - for (std::size_t i (0); i < length; ++ir, ++i) - { - *ir = static_cast<XMLCh> (s[i]); - } - - *ir = XMLCh (0); - - return r.release (); - } - - - // wchar_transcoder (specialization for 4-byte wchar_t) - // - template <typename W> - std::basic_string<W> wchar_transcoder<W, 4>:: - to (const XMLCh* s, std::size_t length) - { - const XMLCh* end (s + length); - - // Find what the resulting buffer size will be. - // - std::size_t rl (0); - - for (const XMLCh* p (s); p < end; ++p) - { - rl++; - - if ((*p >= 0xD800) && (*p <= 0xDBFF)) - { - // Make sure we have one more char and it has a valid - // value for the second char in a surrogate pair. - // - if (++p == end || !((*p >= 0xDC00) && (*p <= 0xDFFF))) - throw invalid_utf16_string (); - } - } - - std::basic_string<W> r; - r.reserve (rl + 1); - r.resize (rl); - W* rs (const_cast<W*> (r.c_str ())); - - std::size_t i (0); - - for (const XMLCh* p (s); p < end; ++p) - { - XMLCh x (*p); - - if (x < 0xD800 || x > 0xDBFF) - rs[i++] = W (x); - else - rs[i++] = ((x - 0xD800) << 10) + (*++p - 0xDC00) + 0x10000; - } - - return r; - } - - template <typename W> - XMLCh* wchar_transcoder<W, 4>:: - from (const W* s, std::size_t length) - { - // Find what the resulting buffer size will be. - // - std::size_t rl (0); - - for (const W* p (s); p < s + length; ++p) - { - rl += (*p & 0xFFFF0000) ? 2 : 1; - } - -#ifdef XSD_CXX11 - std::unique_ptr<XMLCh[]> r ( -#else - auto_array<XMLCh> r ( -#endif - new XMLCh[rl + 1]); - - XMLCh* ir (r.get ()); - - for (const W* p (s); p < s + length; ++p) - { - W w (*p); - - if (w & 0xFFFF0000) - { - // Surrogate pair. - // - *ir++ = static_cast<XMLCh> (((w - 0x10000) >> 10) + 0xD800); - *ir++ = static_cast<XMLCh> ((w & 0x3FF) + 0xDC00); - } - else - *ir++ = static_cast<XMLCh> (w); - } - - *ir = XMLCh (0); - - return r.release (); - } - } - } - } -} - -#endif // XSD_CXX_XML_STRING_TXX_WCHAR -#endif // XSD_USE_WCHAR |