summary refs log tree commit diff
path: root/nix/libutil/xml-writer.hh
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-12-17 10:44:19 +0100
committerLudovic Courtès <ludo@gnu.org>2014-12-17 22:57:04 +0100
commitd4e18b05e0ab149265d3d09ae017d7337fc4176f (patch)
treee6faf256d8ec513c85c91684199fa8bf3495f002 /nix/libutil/xml-writer.hh
parente7720aa10a1da63bb15a4587837d649268944943 (diff)
downloadguix-d4e18b05e0ab149265d3d09ae017d7337fc4176f.tar.gz
Keep only libstore, nix-daemon, and related stuff.
Diffstat (limited to 'nix/libutil/xml-writer.hh')
-rw-r--r--nix/libutil/xml-writer.hh69
1 files changed, 69 insertions, 0 deletions
diff --git a/nix/libutil/xml-writer.hh b/nix/libutil/xml-writer.hh
new file mode 100644
index 0000000000..3cefe3712c
--- /dev/null
+++ b/nix/libutil/xml-writer.hh
@@ -0,0 +1,69 @@
+#pragma once
+
+#include <iostream>
+#include <string>
+#include <list>
+#include <map>
+
+
+namespace nix {
+
+using std::string;
+using std::map;
+using std::list;
+
+
+typedef map<string, string> XMLAttrs;
+
+
+class XMLWriter
+{
+private:
+
+    std::ostream & output;
+
+    bool indent;
+    bool closed;
+
+    list<string> pendingElems;
+
+public:
+
+    XMLWriter(bool indent, std::ostream & output);
+    ~XMLWriter();
+
+    void close();
+
+    void openElement(const string & name,
+        const XMLAttrs & attrs = XMLAttrs());
+    void closeElement();
+
+    void writeEmptyElement(const string & name,
+        const XMLAttrs & attrs = XMLAttrs());
+
+private:
+    void writeAttrs(const XMLAttrs & attrs);
+
+    void indent_(unsigned int depth);
+};
+
+
+class XMLOpenElement
+{
+private:
+    XMLWriter & writer;
+public:
+    XMLOpenElement(XMLWriter & writer, const string & name,
+        const XMLAttrs & attrs = XMLAttrs())
+        : writer(writer)
+    {
+        writer.openElement(name, attrs);
+    }
+    ~XMLOpenElement()
+    {
+        writer.closeElement();
+    }
+};
+
+
+}