@@ -20,16 +20,39 @@ bool ffPrintCommand(FFCommandOptions* options)
2020 return false;
2121 }
2222
23- if (options -> moduleArgs . outputFormat . length == 0 )
23+ if (options -> splitLines )
2424 {
25- ffPrintLogoAndKey (FF_COMMAND_MODULE_NAME , 0 , & options -> moduleArgs , FF_PRINT_TYPE_DEFAULT );
26- ffStrbufPutTo (& result , stdout );
25+ uint8_t index = 0 ;
26+ char * line = NULL ;
27+ size_t len = 0 ;
28+ while (ffStrbufGetline (& line , & len , & result ))
29+ {
30+ if (options -> moduleArgs .outputFormat .length == 0 )
31+ {
32+ ffPrintLogoAndKey (FF_COMMAND_MODULE_NAME , ++ index , & options -> moduleArgs , FF_PRINT_TYPE_DEFAULT );
33+ puts (line );
34+ }
35+ else
36+ {
37+ FF_PRINT_FORMAT_CHECKED (FF_COMMAND_MODULE_NAME , ++ index , & options -> moduleArgs , FF_PRINT_TYPE_DEFAULT , ((FFformatarg []){
38+ FF_FORMAT_ARG (line , "result" )
39+ }));
40+ }
41+ }
2742 }
2843 else
2944 {
30- FF_PRINT_FORMAT_CHECKED (FF_COMMAND_MODULE_NAME , 0 , & options -> moduleArgs , FF_PRINT_TYPE_DEFAULT , ((FFformatarg []){
31- FF_FORMAT_ARG (result , "result" )
32- }));
45+ if (options -> moduleArgs .outputFormat .length == 0 )
46+ {
47+ ffPrintLogoAndKey (FF_COMMAND_MODULE_NAME , 0 , & options -> moduleArgs , FF_PRINT_TYPE_DEFAULT );
48+ ffStrbufPutTo (& result , stdout );
49+ }
50+ else
51+ {
52+ FF_PRINT_FORMAT_CHECKED (FF_COMMAND_MODULE_NAME , 0 , & options -> moduleArgs , FF_PRINT_TYPE_DEFAULT , ((FFformatarg []){
53+ FF_FORMAT_ARG (result , "result" )
54+ }));
55+ }
3356 }
3457
3558 return true;
@@ -74,6 +97,12 @@ void ffParseCommandJsonObject(FFCommandOptions* options, yyjson_val* module)
7497 continue ;
7598 }
7699
100+ if (unsafe_yyjson_equals_str (key , "splitLines" ))
101+ {
102+ options -> splitLines = yyjson_get_bool (val );
103+ continue ;
104+ }
105+
77106 ffPrintError (FF_COMMAND_MODULE_NAME , 0 , & options -> moduleArgs , FF_PRINT_TYPE_DEFAULT , "Unknown JSON key %s" , unsafe_yyjson_get_str (key ));
78107 }
79108}
@@ -87,6 +116,7 @@ void ffGenerateCommandJsonConfig(FFCommandOptions* options, yyjson_mut_doc* doc,
87116 yyjson_mut_obj_add_strbuf (doc , module , "text" , & options -> text );
88117 yyjson_mut_obj_add_bool (doc , module , "useStdErr" , options -> useStdErr );
89118 yyjson_mut_obj_add_bool (doc , module , "parallel" , options -> parallel );
119+ yyjson_mut_obj_add_bool (doc , module , "splitLines" , options -> splitLines );
90120}
91121
92122bool ffGenerateCommandJsonResult (FF_MAYBE_UNUSED FFCommandOptions * options , yyjson_mut_doc * doc , yyjson_mut_val * module )
@@ -106,7 +136,16 @@ bool ffGenerateCommandJsonResult(FF_MAYBE_UNUSED FFCommandOptions* options, yyjs
106136 return false;
107137 }
108138
109- yyjson_mut_obj_add_strbuf (doc , module , "result" , & result );
139+ if (options -> splitLines )
140+ {
141+ yyjson_mut_val * jsonArray = yyjson_mut_obj_add_arr (doc , module , "result" );
142+ char * line = NULL ;
143+ size_t len = 0 ;
144+ while (ffStrbufGetline (& line , & len , & result ))
145+ yyjson_mut_arr_add_strncpy (doc , jsonArray , line , len );
146+ }
147+ else
148+ yyjson_mut_obj_add_strbuf (doc , module , "result" , & result );
110149
111150 return true;
112151}
@@ -132,6 +171,7 @@ void ffInitCommandOptions(FFCommandOptions* options)
132171 ffStrbufInit (& options -> text );
133172 options -> useStdErr = false;
134173 options -> parallel = true;
174+ options -> splitLines = false;
135175}
136176
137177void ffDestroyCommandOptions (FFCommandOptions * options )
0 commit comments