aboutsummaryrefslogtreecommitdiff
path: root/web/xhtml-fragment
diff options
context:
space:
mode:
Diffstat (limited to 'web/xhtml-fragment')
-rw-r--r--web/xhtml-fragment48
1 files changed, 48 insertions, 0 deletions
diff --git a/web/xhtml-fragment b/web/xhtml-fragment
new file mode 100644
index 0000000..a0964b0
--- /dev/null
+++ b/web/xhtml-fragment
@@ -0,0 +1,48 @@
+// file : web/xhtml-fragment -*- C++ -*-
+// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#ifndef WEB_XHTML_FRAGMENT
+#define WEB_XHTML_FRAGMENT
+
+#include <string>
+#include <vector>
+#include <utility> // pair
+
+#include <xml/parser>
+#include <xml/forward>
+
+namespace web
+{
+ namespace xhtml
+ {
+ // A parsed (via xml::parser) XHTML fragment that can later be serialized
+ // to xml::serializer.
+ //
+ class fragment
+ {
+ public:
+ fragment () = default;
+
+ // Parse string as XHTML document fragment. The fragment should be
+ // complete, in the sense that all elements should have closing tags.
+ // Elements and attributes are considered to be in the namespace of the
+ // entire XHTML document, so no namespace should be specified for them.
+ // Do not validate against XHTML vocabulary. Can throw xml::parsing
+ // exception.
+ //
+ fragment (const std::string& xhtml, const std::string& input_name);
+
+ void
+ operator() (xml::serializer&) const;
+
+ bool
+ empty () const {return events_.empty ();}
+
+ private:
+ std::vector<std::pair<xml::parser::event_type, std::string>> events_;
+ };
+ }
+}
+
+#endif // WEB_XHTML_FRAGMENT