@@ -728,6 +728,22 @@ FASTCALL_ATTR INLINE_PREFIX void FASTCALL_MSVC strreverse(char *begin,
728
728
while (end > begin ) aux = * end , * end -- = * begin , * begin ++ = aux ;
729
729
}
730
730
731
+ void Buffer_AppendIndentNewlineUnchecked (JSONObjectEncoder * enc )
732
+ {
733
+ if (enc -> indent > 0 ) Buffer_AppendCharUnchecked (enc , '\n' );
734
+ }
735
+
736
+ // This function could be refactored to only accept enc as an argument,
737
+ // but this is a straight vendor from ujson source
738
+ void Buffer_AppendIndentUnchecked (JSONObjectEncoder * enc , JSINT32 value )
739
+ {
740
+ int i ;
741
+ if (enc -> indent > 0 )
742
+ while (value -- > 0 )
743
+ for (i = 0 ; i < enc -> indent ; i ++ )
744
+ Buffer_AppendCharUnchecked (enc , ' ' );
745
+ }
746
+
731
747
void Buffer_AppendIntUnchecked (JSONObjectEncoder * enc , JSINT32 value ) {
732
748
char * wstr ;
733
749
JSUINT32 uvalue = (value < 0 ) ? - value : value ;
@@ -960,24 +976,28 @@ void encode(JSOBJ obj, JSONObjectEncoder *enc, const char *name,
960
976
enc -> iterBegin (obj , & tc );
961
977
962
978
Buffer_AppendCharUnchecked (enc , '[' );
979
+ Buffer_AppendIndentNewlineUnchecked (enc );
963
980
964
981
while (enc -> iterNext (obj , & tc )) {
965
982
if (count > 0 ) {
966
983
Buffer_AppendCharUnchecked (enc , ',' );
967
984
#ifndef JSON_NO_EXTRA_WHITESPACE
968
985
Buffer_AppendCharUnchecked (buffer , ' ' );
969
986
#endif
987
+ Buffer_AppendIndentNewlineUnchecked (enc );
970
988
}
971
989
972
990
iterObj = enc -> iterGetValue (obj , & tc );
973
991
974
992
enc -> level ++ ;
993
+ Buffer_AppendIndentUnchecked (enc , enc -> level );
975
994
encode (iterObj , enc , NULL , 0 );
976
995
count ++ ;
977
996
}
978
997
979
998
enc -> iterEnd (obj , & tc );
980
- Buffer_Reserve (enc , 2 );
999
+ Buffer_AppendIndentNewlineUnchecked (enc );
1000
+ Buffer_AppendIndentUnchecked (enc , enc -> level );
981
1001
Buffer_AppendCharUnchecked (enc , ']' );
982
1002
break ;
983
1003
}
@@ -987,25 +1007,29 @@ void encode(JSOBJ obj, JSONObjectEncoder *enc, const char *name,
987
1007
enc -> iterBegin (obj , & tc );
988
1008
989
1009
Buffer_AppendCharUnchecked (enc , '{' );
1010
+ Buffer_AppendIndentNewlineUnchecked (enc );
990
1011
991
1012
while (enc -> iterNext (obj , & tc )) {
992
1013
if (count > 0 ) {
993
1014
Buffer_AppendCharUnchecked (enc , ',' );
994
1015
#ifndef JSON_NO_EXTRA_WHITESPACE
995
1016
Buffer_AppendCharUnchecked (enc , ' ' );
996
1017
#endif
1018
+ Buffer_AppendIndentNewlineUnchecked (enc );
997
1019
}
998
1020
999
1021
iterObj = enc -> iterGetValue (obj , & tc );
1000
1022
objName = enc -> iterGetName (obj , & tc , & szlen );
1001
1023
1002
1024
enc -> level ++ ;
1025
+ Buffer_AppendIndentUnchecked (enc , enc -> level );
1003
1026
encode (iterObj , enc , objName , szlen );
1004
1027
count ++ ;
1005
1028
}
1006
1029
1007
1030
enc -> iterEnd (obj , & tc );
1008
- Buffer_Reserve (enc , 2 );
1031
+ Buffer_AppendIndentNewlineUnchecked (enc );
1032
+ Buffer_AppendIndentUnchecked (enc , enc -> level );
1009
1033
Buffer_AppendCharUnchecked (enc , '}' );
1010
1034
break ;
1011
1035
}
0 commit comments