From 8286ac511144e4f17d34eac9affb97e50646344a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Wed, 23 Jul 2014 15:25:44 +0200 Subject: Imported Upstream version 4.0.0 --- libcutl/cutl/xml/serializer.hxx | 183 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 libcutl/cutl/xml/serializer.hxx (limited to 'libcutl/cutl/xml/serializer.hxx') diff --git a/libcutl/cutl/xml/serializer.hxx b/libcutl/cutl/xml/serializer.hxx new file mode 100644 index 0000000..88164e2 --- /dev/null +++ b/libcutl/cutl/xml/serializer.hxx @@ -0,0 +1,183 @@ +// file : cutl/xml/serializer.hxx +// copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC +// license : MIT; see accompanying LICENSE file + +#ifndef CUTL_XML_SERIALIZER_HXX +#define CUTL_XML_SERIALIZER_HXX + +#include +#include +#include // std::size_t + +#include + +#include +#include + +#include + +namespace cutl +{ + namespace xml + { + class serializer; + + struct LIBCUTL_EXPORT serialization: exception + { + virtual + ~serialization () throw (); + + serialization (const std::string& name, + const std::string& description); + + serialization (const serializer&, const std::string& description); + + const std::string& + name () const {return name_;} + + const std::string& + description () const {return description_;} + + virtual const char* + what () const throw (); + + private: + void + init (); + + private: + std::string name_; + std::string description_; + std::string what_; + }; + + class LIBCUTL_EXPORT serializer + { + public: + ~serializer (); + + typedef xml::qname qname_type; + + // Serialize to std::ostream. Output name is used in diagnostics to + // identify the document being serialized. std::ios_base::failure + // exception is used to report io errors (badbit and failbit). The + // indentation argument specifies the number of indentation spaces + // that should be used for pretty-printing. If 0 is passed, no + // pretty-printing is performed. + // + serializer (std::ostream&, + const std::string& output_name, + unsigned short indentation = 2); + + const std::string& + output_name () const {return oname_;} + + // Serialization functions. + // + public: + + // Elements. + // + void + start_element (const qname_type& qname); + + void + start_element (const std::string& name); + + void + start_element (const std::string& ns, const std::string& name); + + void + end_element (); + + // Attributes. + // + void + start_attribute (const qname_type& qname); + + void + start_attribute (const std::string& name); + + void + start_attribute (const std::string& ns, const std::string& name); + + void + end_attribute (); + + void + attribute (const qname_type& qname, const std::string& value); + + template + void + attribute (const qname_type& qname, const T& value); + + void + attribute (const std::string& name, const std::string& value); + + template + void + attribute (const std::string& name, const T& value); + + void + attribute (const std::string& ns, + const std::string& name, + const std::string& value); + + template + void + attribute (const std::string& ns, + const std::string& name, + const T& value); + + // Characters. + // + void + characters (const std::string& value); + + template + void + characters (const T& value); + + // Namespaces declaration. If prefix is empty, then the default + // namespace is declared. If both prefix and namespace are empty, + // then the default namespace declaration is cleared (xmlns=""). + // + void + namespace_decl (const std::string& ns, const std::string& prefix); + + // XML Declaration. If encoding or standalone are not specified, + // then these attributes are omitted from the output. + // + void + xml_decl (const std::string& version = "1.0", + const std::string& encoding = "UTF-8", + const std::string& standalone = ""); + + // Other functions. + // + public: + // Return true if there is a mapping. In this case, prefix contains + // the mapped prefix. + // + bool + lookup_namespace_prefix (const std::string& ns, std::string& prefix); + + private: + void + handle_error (genxStatus); + + private: + std::ostream& os_; + std::ostream::iostate os_state_; // Original exception state. + const std::string oname_; + + genxWriter s_; + genxSender sender_; + std::size_t depth_; + }; + } +} + +#include + +#endif // CUTL_XML_SERIALIZER_HXX -- cgit v1.2.3