@@ -728,6 +728,22 @@ FASTCALL_ATTR INLINE_PREFIX void FASTCALL_MSVC strreverse(char *begin,
728728 while (end > begin ) aux = * end , * end -- = * begin , * begin ++ = aux ;
729729}
730730
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+
731747void Buffer_AppendIntUnchecked (JSONObjectEncoder * enc , JSINT32 value ) {
732748 char * wstr ;
733749 JSUINT32 uvalue = (value < 0 ) ? - value : value ;
@@ -960,24 +976,28 @@ void encode(JSOBJ obj, JSONObjectEncoder *enc, const char *name,
960976 enc -> iterBegin (obj , & tc );
961977
962978 Buffer_AppendCharUnchecked (enc , '[' );
979+ Buffer_AppendIndentNewlineUnchecked (enc );
963980
964981 while (enc -> iterNext (obj , & tc )) {
965982 if (count > 0 ) {
966983 Buffer_AppendCharUnchecked (enc , ',' );
967984#ifndef JSON_NO_EXTRA_WHITESPACE
968985 Buffer_AppendCharUnchecked (buffer , ' ' );
969986#endif
987+ Buffer_AppendIndentNewlineUnchecked (enc );
970988 }
971989
972990 iterObj = enc -> iterGetValue (obj , & tc );
973991
974992 enc -> level ++ ;
993+ Buffer_AppendIndentUnchecked (enc , enc -> level );
975994 encode (iterObj , enc , NULL , 0 );
976995 count ++ ;
977996 }
978997
979998 enc -> iterEnd (obj , & tc );
980- Buffer_Reserve (enc , 2 );
999+ Buffer_AppendIndentNewlineUnchecked (enc );
1000+ Buffer_AppendIndentUnchecked (enc , enc -> level );
9811001 Buffer_AppendCharUnchecked (enc , ']' );
9821002 break ;
9831003 }
@@ -987,25 +1007,29 @@ void encode(JSOBJ obj, JSONObjectEncoder *enc, const char *name,
9871007 enc -> iterBegin (obj , & tc );
9881008
9891009 Buffer_AppendCharUnchecked (enc , '{' );
1010+ Buffer_AppendIndentNewlineUnchecked (enc );
9901011
9911012 while (enc -> iterNext (obj , & tc )) {
9921013 if (count > 0 ) {
9931014 Buffer_AppendCharUnchecked (enc , ',' );
9941015#ifndef JSON_NO_EXTRA_WHITESPACE
9951016 Buffer_AppendCharUnchecked (enc , ' ' );
9961017#endif
1018+ Buffer_AppendIndentNewlineUnchecked (enc );
9971019 }
9981020
9991021 iterObj = enc -> iterGetValue (obj , & tc );
10001022 objName = enc -> iterGetName (obj , & tc , & szlen );
10011023
10021024 enc -> level ++ ;
1025+ Buffer_AppendIndentUnchecked (enc , enc -> level );
10031026 encode (iterObj , enc , objName , szlen );
10041027 count ++ ;
10051028 }
10061029
10071030 enc -> iterEnd (obj , & tc );
1008- Buffer_Reserve (enc , 2 );
1031+ Buffer_AppendIndentNewlineUnchecked (enc );
1032+ Buffer_AppendIndentUnchecked (enc , enc -> level );
10091033 Buffer_AppendCharUnchecked (enc , '}' );
10101034 break ;
10111035 }
0 commit comments