[svgcanvas] Add flag to suppress newlines and tabs in XML
Bug: skia:9343
Change-Id: Id82f998ac57fc787aeb4435a6907047ea680d2fc
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/236157
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
diff --git a/src/xml/SkXMLWriter.cpp b/src/xml/SkXMLWriter.cpp
index 25d59b4..4640d73 100644
--- a/src/xml/SkXMLWriter.cpp
+++ b/src/xml/SkXMLWriter.cpp
@@ -190,14 +190,9 @@
// SkXMLStreamWriter
-static void tab(SkWStream& stream, int level) {
- for (int i = 0; i < level; i++) {
- stream.writeText("\t");
- }
-}
-
-SkXMLStreamWriter::SkXMLStreamWriter(SkWStream* stream) : fStream(*stream)
-{}
+SkXMLStreamWriter::SkXMLStreamWriter(SkWStream* stream, uint32_t flags)
+ : fStream(*stream)
+ , fFlags(flags) {}
SkXMLStreamWriter::~SkXMLStreamWriter() {
this->flush();
@@ -217,25 +212,25 @@
if (!elem->fHasChildren && !elem->fHasText) {
fStream.writeText(">");
- fStream.newline();
+ this->newline();
}
- tab(fStream, fElems.count() + 1);
+ this->tab(fElems.count() + 1);
fStream.write(text, length);
- fStream.newline();
+ this->newline();
}
void SkXMLStreamWriter::onEndElement() {
Elem* elem = getEnd();
if (elem->fHasChildren || elem->fHasText) {
- tab(fStream, fElems.count());
+ this->tab(fElems.count());
fStream.writeText("</");
fStream.writeText(elem->fName.c_str());
fStream.writeText(">");
} else {
fStream.writeText("/>");
}
- fStream.newline();
+ this->newline();
doEnd(elem);
}
@@ -244,10 +239,10 @@
if (this->doStart(name, length)) {
// the first child, need to close with >
fStream.writeText(">");
- fStream.newline();
+ this->newline();
}
- tab(fStream, level);
+ this->tab(level);
fStream.writeText("<");
fStream.write(name, length);
}
@@ -255,7 +250,21 @@
void SkXMLStreamWriter::writeHeader() {
const char* header = getHeader();
fStream.write(header, strlen(header));
- fStream.newline();
+ this->newline();
+}
+
+void SkXMLStreamWriter::newline() {
+ if (!(fFlags & kNoPretty_Flag)) {
+ fStream.newline();
+ }
+}
+
+void SkXMLStreamWriter::tab(int level) {
+ if (!(fFlags & kNoPretty_Flag)) {
+ for (int i = 0; i < level; i++) {
+ fStream.writeText("\t");
+ }
+ }
}
////////////////////////////////////////////////////////////////////////////////////////////////