diff options
author | Ludovic Courtès <ludo@gnu.org> | 2014-12-26 23:31:04 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2014-12-26 23:31:04 +0100 |
commit | 763a401ed185d39119289c670c1eb250ace13ed9 (patch) | |
tree | 20c989b7c6d571e388e1707af275a946b7757ecb /nix/libutil/xml-writer.hh | |
parent | 94264407815da63c5f07a519cd41838e35ab464e (diff) | |
parent | bf7688fe4d8624ed9bddc8f7f3887df5f1fc3957 (diff) | |
download | guix-763a401ed185d39119289c670c1eb250ace13ed9.tar.gz |
Merge branch 'master' into core-updates
Diffstat (limited to 'nix/libutil/xml-writer.hh')
-rw-r--r-- | nix/libutil/xml-writer.hh | 69 |
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(); + } +}; + + +} |