Benoit Blanchon пре 11 година
родитељ
комит
ea79340dc7
2 измењених фајлова са 46 додато и 36 уклоњено
  1. 39 33
      JsonGenerator/PrettyPrintDecorator.cpp
  2. 7 3
      JsonGenerator/PrettyPrintDecorator.h

+ 39 - 33
JsonGenerator/PrettyPrintDecorator.cpp

@@ -7,53 +7,42 @@
 
 size_t PrettyPrintDecorator::write(uint8_t c)
 {
-    size_t n;
+    size_t n = inString ? handleStringChar(c) : handleMarkupChar(c);    
+    previousChar = c;
+    return n;
+}
+
+size_t PrettyPrintDecorator::handleStringChar(uint8_t c)
+{
+    bool isQuote = c == '"' && previousChar != '\\';
 
+    return isQuote ? writeQuote() : writeNormalChar(c);
+}
+
+size_t PrettyPrintDecorator::handleMarkupChar(uint8_t c)
+{
     switch (c)
     {
     case '{':
     case '[':
-        n = inString ? writeNormalChar(c) : writeOpening(c);        
-        break;
+        return writeOpening(c);
 
     case '}':
-    case ']':  
-        n = inString ? writeNormalChar(c) : writeClosing(c);
-        break;
-        
+    case ']':
+        return writeClosing(c);
+
     case ',':
-        n = inString ? writeNormalChar(c) : writeComma();
-        break;
+        return writeComma();
 
     case ':':
-        n = inString ? writeNormalChar(c) : writeColumn();
-        break;
-
-    case '\"':
-        n = writeNormalChar(c);
+        return writeColumn();
 
-        if (previousChar != '\\')
-            inString = !inString;
-
-        break;
+    case '"':
+        return writeQuote();
 
     default:
-        n = writeNormalChar(c);     
-        break;
+        return writeNormalChar(c); // <- should not happen anyway
     }
-
-    previousChar = c;
-    return n;
-}
-
-size_t PrettyPrintDecorator::writeln()
-{
-    size_t n = sink.write('\n');
-
-    for (int i = 0; i < indent; i++)
-        n += sink.write(' ');
-
-    return n;
 }
 
 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;
 }

+ 7 - 3
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();
 };