aboutsummaryrefslogtreecommitdiff
path: root/sxml.h
diff options
context:
space:
mode:
Diffstat (limited to 'sxml.h')
-rw-r--r--sxml.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/sxml.h b/sxml.h
new file mode 100644
index 0000000..7b9ffc2
--- /dev/null
+++ b/sxml.h
@@ -0,0 +1,91 @@
+/*
+ * This file is part of sxml - stupid XML generator
+ *
+ * Copyright (c) 2011 Oskari Timperi
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute
+ * it freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must
+ * not claim that you wrote the original software. If you use this
+ * software in a product, an acknowledgment in the product documentation
+ * would be appreciated but is not required.
+ *
+ * 2. Altered source versions must be plainly marked as such, and must
+ * not be misrepresented as being the original software.
+ *
+ * 3. This notice may not be removed or altered from any source
+ * distribution.
+ */
+
+#ifndef SXML_H
+#define SXML_H
+
+#include <string>
+#include <map>
+#include <vector>
+
+namespace sxml {
+
+class element;
+
+typedef std::vector<element> element_list;
+typedef std::map<std::string, std::string> attribute_map;
+
+class element
+{
+ public:
+
+ //! Constructs an empty element (i.e., no name,
+ //! children, attributes).
+ element();
+
+ //! Copy constructor.
+ element(const element &elem);
+
+ //! Construcst an element with the specified name and text.
+ element(const std::string &name,
+ const std::string &text = std::string());
+
+ //! Creates a textual representation of the element. If nice
+ //! is true, the returned string is formatted with indentations
+ //! and newlines.
+ std::string to_string(bool nice = false, int indent = 0) const;
+
+ //! Adds a child element to this element.
+ element &add_child(const element &child);
+
+ //! Set the text for this element. An element can either have text
+ //! or children. If an element has both, children take precedence
+ //! when calling to_string().
+ element &set_text(const std::string &text);
+
+ //! Set an attribute for this element with the specified name and
+ //! value.
+ element &set_attr(const std::string &name,
+ const std::string &value);
+
+ //! This is an overloaded function.
+ element &set_attr(const std::string &name, long value);
+
+ //! This is an overloaded function.
+ element &set_attr(const std::string &name, double value);
+
+ private:
+
+ element_list m_children;
+ attribute_map m_attributes;
+
+ std::string m_name;
+ std::string m_text;
+};
+
+} // namespace sxml
+
+#endif // SXML_H
+