#include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "output/lrec_writers.h" lrec_writer_t* lrec_writer_alloc(cli_writer_opts_t* popts) { if (streq(popts->ofile_fmt, "dkvp")) { return lrec_writer_dkvp_alloc(popts->ors, popts->ofs, popts->ops); } else if (streq(popts->ofile_fmt, "json")) { return lrec_writer_json_alloc(popts->stack_json_output_vertically, popts->wrap_json_output_in_outer_list, popts->json_quote_int_keys, popts->json_quote_non_string_values, popts->output_json_flatten_separator, popts->ors); } else if (streq(popts->ofile_fmt, "csv")) { return lrec_writer_csv_alloc(popts->ors, popts->ofs, popts->oquoting, popts->headerless_csv_output); } else if (streq(popts->ofile_fmt, "csvlite")) { return lrec_writer_csvlite_alloc(popts->ors, popts->ofs, popts->headerless_csv_output); } else if (streq(popts->ofile_fmt, "markdown")) { return lrec_writer_markdown_alloc(popts->ors); } else if (streq(popts->ofile_fmt, "nidx")) { return lrec_writer_nidx_alloc(popts->ors, popts->ofs); } else if (streq(popts->ofile_fmt, "xtab")) { return lrec_writer_xtab_alloc(popts->ofs, popts->ops, popts->right_justify_xtab_value); } else if (streq(popts->ofile_fmt, "pprint")) { if (strlen(popts->ofs) != 1) { fprintf(stderr, "%s: OFS for PPRINT format must be single-character; got \"%s\".\n", MLR_GLOBALS.bargv0, popts->ofs); return NULL; } else { return lrec_writer_pprint_alloc(popts->ors, popts->ofs[0], popts->right_align_pprint, popts->pprint_barred, popts->headerless_csv_output); } } else { return NULL; } } // ---------------------------------------------------------------- lrec_writer_t* lrec_writer_alloc_or_die(cli_writer_opts_t* popts) { lrec_writer_t* plrec_writer = lrec_writer_alloc(popts); MLR_INTERNAL_CODING_ERROR_IF(plrec_writer == NULL); return plrec_writer; } // ---------------------------------------------------------------- void lrec_writer_print_all(lrec_writer_t* pwriter, FILE* fp, sllv_t* poutrecs, context_t* pctx) { while (poutrecs->phead != NULL) { lrec_t* poutrec = sllv_pop(poutrecs); pwriter->pprocess_func(pwriter->pvstate, fp, poutrec, pctx); } }