Benoit Blanchon 11 лет назад
Родитель
Сommit
61952a9bcd
2 измененных файлов с 18 добавлено и 6 удалено
  1. 10 4
      JsonGenerator/IndentedPrint.cpp
  2. 8 2
      JsonGenerator/IndentedPrint.h

+ 10 - 4
JsonGenerator/IndentedPrint.cpp

@@ -4,16 +4,22 @@ using namespace ArduinoJson::Generator;
 
 void IndentedPrint::indent()
 {
-    if (level<127)
+    if (level < MAX_LEVEL)
         level++;
 }
 
 void IndentedPrint::unindent()
 {
-    if (level>0)
+    if (level > 0)
         level--;
 }
 
+void IndentedPrint::setTabSize(uint8_t n)
+{
+    if (n < MAX_TAB_SIZE)
+        tabSize = n;
+}
+
 size_t IndentedPrint::write(uint8_t c)
 {
     size_t n = 0;
@@ -24,7 +30,7 @@ size_t IndentedPrint::write(uint8_t c)
     n += sink.write(c);
 
     isNewLine = c == '\n';
-        
+
     return n;
 }
 
@@ -32,7 +38,7 @@ size_t IndentedPrint::writeTabs()
 {
     size_t n = 0;
 
-    for (int i = 0; i<level; i++)
+    for (int i = 0; i < level*tabSize; i++)
         n += sink.write(' ');
 
     return n;

+ 8 - 2
JsonGenerator/IndentedPrint.h

@@ -19,6 +19,7 @@ namespace ArduinoJson
                 : sink(p)
             {
                 level = 0;
+                tabSize = 1;
                 isNewLine = true;
             }
 
@@ -26,13 +27,18 @@ namespace ArduinoJson
 
             void indent();
             void unindent();
+            void setTabSize(uint8_t n);
 
         private:
             Print& sink;
-            uint8_t level : 7;
+            uint8_t level : 4;
+            uint8_t tabSize : 3;
             bool isNewLine : 1;
-
+            
             size_t writeTabs();
+
+            const int MAX_LEVEL = 15; // because it's only 4 bits
+            const int MAX_TAB_SIZE = 7; // because it's only 3 bits
         };
     }
 }