From ea79340dc769444d1b850a7d3f9695ca04ee819e Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Mon, 25 Aug 2014 12:41:49 +0200 Subject: [PATCH] Refactoring... --- JsonGenerator/PrettyPrintDecorator.cpp | 86 ++++++++++++++------------ JsonGenerator/PrettyPrintDecorator.h | 10 ++- 2 files changed, 53 insertions(+), 43 deletions(-) diff --git a/JsonGenerator/PrettyPrintDecorator.cpp b/JsonGenerator/PrettyPrintDecorator.cpp index df3f0a7e..ebc7497b 100644 --- a/JsonGenerator/PrettyPrintDecorator.cpp +++ b/JsonGenerator/PrettyPrintDecorator.cpp @@ -7,53 +7,42 @@ size_t PrettyPrintDecorator::write(uint8_t c) { - size_t n; - - switch (c) - { - case '{': - case '[': - n = inString ? writeNormalChar(c) : writeOpening(c); - break; - - case '}': - case ']': - n = inString ? writeNormalChar(c) : writeClosing(c); - break; - - case ',': - n = inString ? writeNormalChar(c) : writeComma(); - break; - - case ':': - n = inString ? writeNormalChar(c) : writeColumn(); - break; - - case '\"': - n = writeNormalChar(c); - - if (previousChar != '\\') - inString = !inString; - - break; - - default: - n = writeNormalChar(c); - break; - } - + size_t n = inString ? handleStringChar(c) : handleMarkupChar(c); previousChar = c; return n; } -size_t PrettyPrintDecorator::writeln() +size_t PrettyPrintDecorator::handleStringChar(uint8_t c) { - size_t n = sink.write('\n'); + bool isQuote = c == '"' && previousChar != '\\'; - for (int i = 0; i < indent; i++) - n += sink.write(' '); + return isQuote ? writeQuote() : writeNormalChar(c); +} - return n; +size_t PrettyPrintDecorator::handleMarkupChar(uint8_t c) +{ + switch (c) + { + case '{': + case '[': + return writeOpening(c); + + case '}': + case ']': + return writeClosing(c); + + case ',': + return writeComma(); + + case ':': + return writeColumn(); + + case '"': + return writeQuote(); + + default: + return writeNormalChar(c); // <- should not happen anyway + } } size_t PrettyPrintDecorator::writeNormalChar(uint8_t c) @@ -84,6 +73,13 @@ size_t PrettyPrintDecorator::writeOpening(uint8_t c) return n; } +size_t PrettyPrintDecorator::writeQuote() +{ + size_t n = writeNormalChar('"'); + inString = !inString; + return n; +} + size_t PrettyPrintDecorator::writeClosing(uint8_t c) { bool inEmptyBlock = previousChar == '{' || previousChar == '['; @@ -91,4 +87,14 @@ size_t PrettyPrintDecorator::writeClosing(uint8_t c) indent--; return inEmptyBlock ? sink.write(c) : writeln() + sink.write(c); +} + +size_t PrettyPrintDecorator::writeln() +{ + size_t n = sink.write('\n'); + + for (int i = 0; i < indent; i++) + n += sink.write(' '); + + return n; } \ No newline at end of file diff --git a/JsonGenerator/PrettyPrintDecorator.h b/JsonGenerator/PrettyPrintDecorator.h index cbc3681d..61409a96 100644 --- a/JsonGenerator/PrettyPrintDecorator.h +++ b/JsonGenerator/PrettyPrintDecorator.h @@ -29,10 +29,14 @@ private: size_t writeln(); - size_t writeNormalChar(uint8_t c); + size_t handleStringChar(uint8_t); + size_t handleMarkupChar(uint8_t); + + size_t writeClosing(uint8_t); size_t writeColumn(); size_t writeComma(); - size_t writeOpening(uint8_t c); - size_t writeClosing(uint8_t c); + size_t writeNormalChar(uint8_t); + size_t writeOpening(uint8_t); + size_t writeQuote(); };