aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/xml-writer.hh
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2006-08-03 14:49:57 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2006-08-03 14:49:57 +0000
commit0e267e2625dba2c771996bcf537d1ebb6956ba58 (patch)
treea6425f8122d391510d021cbb56e629faca04e562 /src/libutil/xml-writer.hh
parent4750f6c5ed8f74683ebaa013079e24598a753cbe (diff)
* `nix-instantiate --print-args': produce XML output so that the
result can be used more easily by scripts.
Diffstat (limited to 'src/libutil/xml-writer.hh')
-rw-r--r--src/libutil/xml-writer.hh64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/libutil/xml-writer.hh b/src/libutil/xml-writer.hh
new file mode 100644
index 000000000..84c7fafbc
--- /dev/null
+++ b/src/libutil/xml-writer.hh
@@ -0,0 +1,64 @@
+#ifndef __XML_WRITER_H
+#define __XML_WRITER_H
+
+#include <iostream>
+#include <string>
+#include <list>
+#include <map>
+
+using namespace std;
+
+
+typedef map<string, string> XMLAttrs;
+
+
+class XMLWriter
+{
+private:
+
+ ostream & output;
+
+ bool closed;
+
+ list<string> pendingElems;
+
+public:
+
+ XMLWriter(ostream & output);
+ ~XMLWriter();
+
+ void close();
+
+ void openElement(const string & name,
+ const XMLAttrs & attrs = XMLAttrs());
+ void closeElement();
+
+ void writeShortElement(const string & name,
+ const XMLAttrs & attrs = XMLAttrs());
+
+ void writeCharData(const string & data);
+
+private:
+ void writeAttrs(const XMLAttrs & attrs);
+};
+
+
+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();
+ }
+};
+
+
+#endif /* !__XML_WRITER_H */