aboutsummaryrefslogtreecommitdiff
path: root/src/libutil
diff options
context:
space:
mode:
Diffstat (limited to 'src/libutil')
-rw-r--r--src/libutil/xml-writer.cc17
-rw-r--r--src/libutil/xml-writer.hh5
2 files changed, 19 insertions, 3 deletions
diff --git a/src/libutil/xml-writer.cc b/src/libutil/xml-writer.cc
index e5f0d9455..cd37dff56 100644
--- a/src/libutil/xml-writer.cc
+++ b/src/libutil/xml-writer.cc
@@ -3,8 +3,8 @@
#include "xml-writer.hh"
-XMLWriter::XMLWriter(ostream & output)
- : output(output)
+XMLWriter::XMLWriter(bool indent, ostream & output)
+ : output(output), indent(indent)
{
output << "<?xml version='1.0' encoding='utf-8'?>\n";
closed = false;
@@ -25,13 +25,22 @@ void XMLWriter::close()
}
+void XMLWriter::indent_(unsigned int depth)
+{
+ if (!indent) return;
+ output << string(depth * 2, ' ');
+}
+
+
void XMLWriter::openElement(const string & name,
const XMLAttrs & attrs)
{
assert(!closed);
+ indent_(pendingElems.size());
output << "<" << name;
writeAttrs(attrs);
output << ">";
+ if (indent) output << "\n";
pendingElems.push_back(name);
}
@@ -39,7 +48,9 @@ void XMLWriter::openElement(const string & name,
void XMLWriter::closeElement()
{
assert(!pendingElems.empty());
+ indent_(pendingElems.size() - 1);
output << "</" << pendingElems.back() << ">";
+ if (indent) output << "\n";
pendingElems.pop_back();
if (pendingElems.empty()) closed = true;
}
@@ -49,9 +60,11 @@ void XMLWriter::writeEmptyElement(const string & name,
const XMLAttrs & attrs)
{
assert(!closed);
+ indent_(pendingElems.size());
output << "<" << name;
writeAttrs(attrs);
output << " />";
+ if (indent) output << "\n";
}
diff --git a/src/libutil/xml-writer.hh b/src/libutil/xml-writer.hh
index ae6c76ff2..8c203a348 100644
--- a/src/libutil/xml-writer.hh
+++ b/src/libutil/xml-writer.hh
@@ -18,13 +18,14 @@ private:
ostream & output;
+ bool indent;
bool closed;
list<string> pendingElems;
public:
- XMLWriter(ostream & output);
+ XMLWriter(bool indent, ostream & output);
~XMLWriter();
void close();
@@ -40,6 +41,8 @@ public:
private:
void writeAttrs(const XMLAttrs & attrs);
+
+ void indent_(unsigned int depth);
};