• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/contrib/libxo/encoder/csv/

Lines Matching defs:csv

164 csv_dbg (xo_handle_t *xop UNUSED, csv_private_t *csv UNUSED,
167 if (csv == NULL || !(csv->c_flags & CF_DEBUG))
184 csv_private_t *csv = xo_realloc(NULL, sizeof(*csv));
185 if (csv == NULL)
188 bzero(csv, sizeof(*csv));
189 xo_buf_init(&csv->c_data);
190 xo_buf_init(&csv->c_name_buf);
191 xo_buf_init(&csv->c_value_buf);
193 xo_buf_init(&csv->c_stack_buf);
196 xo_set_private(xop, csv);
205 csv_destroy (xo_handle_t *xop UNUSED, csv_private_t *csv)
208 xo_buf_cleanup(&csv->c_data);
209 xo_buf_cleanup(&csv->c_name_buf);
210 xo_buf_cleanup(&csv->c_value_buf);
212 xo_buf_cleanup(&csv->c_stack_buf);
215 if (csv->c_leaf)
216 xo_free(csv->c_leaf);
217 if (csv->c_path_buf)
218 xo_free(csv->c_path_buf);
226 csv_path_top (csv_private_t *csv, ssize_t delta)
228 if (!(csv->c_flags & CF_HAS_PATH) || csv->c_path == NULL)
231 ssize_t cur = csv->c_path_cur + delta;
236 return csv->c_path[cur].pf_name;
243 csv_stack_push (csv_private_t *csv UNUSED, const char *name UNUSED)
246 csv->c_stack_depth += 1;
254 csv_stack_pop (csv_private_t *csv UNUSED, const char *name UNUSED)
257 csv->c_stack_depth -= 1;
271 csv_quote_flags (xo_handle_t *xop UNUSED, csv_private_t *csv UNUSED,
277 if (csv->c_flags & CF_NO_QUOTES) /* User doesn't want quotes */
293 csv_dbg(xop, csv, "csv: quote flags [%s] -> %x (%zu/%zu)\n",
323 csv_append_newline (xo_buffer_t *xbp, csv_private_t *csv)
325 if (csv->c_flags & CF_DOS_NEWLINE)
337 csv_emit_record (xo_handle_t *xop, csv_private_t *csv)
339 csv_dbg(xop, csv, "csv: emit: ...\n");
346 if (csv->c_leaf_depth == 0)
349 if (!(csv->c_flags & (CF_HEADER_DONE | CF_NO_HEADER))) {
350 csv->c_flags |= CF_HEADER_DONE;
352 for (fnum = 0; fnum < csv->c_leaf_depth; fnum++) {
353 lp = &csv->c_leaf[fnum];
354 const char *name = xo_buf_data(&csv->c_name_buf, lp->f_name);
357 xo_buf_append(&csv->c_data, ",", 1);
359 xo_buf_append(&csv->c_data, name, strlen(name));
362 csv_append_newline(&csv->c_data, csv);
365 for (fnum = 0; fnum < csv->c_leaf_depth; fnum++) {
366 lp = &csv->c_leaf[fnum];
370 value = xo_buf_data(&csv->c_value_buf, lp->f_value);
375 quote_flags = csv_quote_flags(xop, csv, value);
378 xo_buf_append(&csv->c_data, ",", 1);
381 xo_buf_append(&csv->c_data, "\"", 1);
384 csv_escape(&csv->c_data, value, strlen(value));
386 xo_buf_append(&csv->c_data, value, strlen(value));
389 xo_buf_append(&csv->c_data, "\"", 1);
392 csv_append_newline(&csv->c_data, csv);
399 for (fnum = 0; fnum < csv->c_leaf_depth; fnum++) {
400 lp = &csv->c_leaf[fnum];
406 xo_buf_reset(&csv->c_value_buf);
412 csv->c_flags |= CF_LEAFS_DONE;
421 csv_open_level (xo_handle_t *xop UNUSED, csv_private_t *csv,
425 if (csv->c_flags & CF_RECORD_DATA) {
426 csv->c_flags &= ~CF_RECORD_DATA;
427 csv_emit_record(xop, csv);
431 const char *path_top = csv_path_top(csv, 0);
435 if (instance && !(csv->c_flags & CF_HAS_PATH)) {
436 csv_dbg(xop, csv, "csv: recording (no-path) ...\n");
437 csv->c_flags |= CF_RECORD_DATA;
441 csv->c_path_cur += 1; /* Advance to next path member */
443 csv_dbg(xop, csv, "csv: match: [%s] (%zd/%zd)\n", name,
444 csv->c_path_cur, csv->c_path_max);
447 if (csv->c_path_cur == csv->c_path_max) {
448 csv_dbg(xop, csv, "csv: recording ...\n");
449 csv->c_flags |= CF_RECORD_DATA;
454 csv_stack_push(csv, name);
463 csv_close_level (xo_handle_t *xop UNUSED, csv_private_t *csv, const char *name)
466 if (csv->c_flags & CF_RECORD_DATA) {
467 csv->c_flags &= ~CF_RECORD_DATA;
468 csv_emit_record(xop, csv);
471 const char *path_top = csv_path_top(csv, -1);
472 csv_dbg(xop, csv, "csv: close: [%s] [%s] (%zd)\n", name,
473 path_top ?: "", csv->c_path_cur);
477 csv->c_path_cur -= 1;
482 csv_stack_pop(csv, name);
493 csv_leaf_num (xo_handle_t *xop UNUSED, csv_private_t *csv,
498 xo_buffer_t *xbp = &csv->c_name_buf;
500 for (fnum = 0; fnum < csv->c_leaf_depth; fnum++) {
501 lp = &csv->c_leaf[fnum];
509 if (csv->c_flags & CF_LEAFS_DONE)
514 if (csv->c_leaf_depth + 1 >= csv->c_leaf_max) {
516 ssize_t new_max = csv->c_leaf_max * 2;
520 lp = xo_realloc(csv->c_leaf, new_max * sizeof(*lp));
525 bzero(&lp[csv->c_leaf_max], csv->c_leaf_max * sizeof(*lp));
527 /* Update csv data */
528 csv->c_leaf = lp;
529 csv->c_leaf_max = new_max;
532 lp = &csv->c_leaf[csv->c_leaf_depth++];
534 lp->f_depth = csv->c_stack_depth;
545 csv_dbg(xop, csv, "csv: leaf: name: %zd [%s] [%s] %x\n",
555 csv_leaf_set (xo_handle_t *xop UNUSED, csv_private_t *csv, leaf_t *lp,
558 xo_buffer_t *xbp = &csv->c_value_buf;
566 csv_dbg(xop, csv, "csv: leaf: value: [%s] [%s] %x\n",
575 csv_record_leafs (xo_handle_t *xop, csv_private_t *csv, const char *leafs_raw)
591 csv_dbg(xop, csv, "adding leaf: [%s]\n", cp);
592 csv_leaf_num(xop, csv, cp, 0);
598 csv->c_flags |= CF_LEAFS_DONE;
608 csv_record_path (xo_handle_t *xop, csv_private_t *csv, const char *path_raw)
640 csv_dbg(xop, csv, "path: [%s]\n", cp);
645 if (csv->c_path) /* In case two paths are given */
646 xo_free(csv->c_path);
647 if (csv->c_path_buf) /* In case two paths are given */
648 xo_free(csv->c_path_buf);
650 csv->c_path_buf = path_buf;
651 csv->c_path = path;
652 csv->c_path_max = count;
653 csv->c_path_cur = 0;
660 * -libxo encoder=csv:kw=val:kw=val:kw=val,pretty
661 * -libxo encoder=csv+kw=val+kw=val+kw=val,pretty
664 csv_options (xo_handle_t *xop, csv_private_t *csv,
684 if (vp != NULL && csv_record_path(xop, csv, vp))
687 csv->c_flags |= CF_HAS_PATH; /* Yup, we have an explicit path now */
693 if (vp != NULL && csv_record_leafs(xop, csv, vp))
697 csv->c_flags |= CF_NO_KEYS;
699 csv->c_flags |= CF_NO_HEADER;
701 csv->c_flags |= CF_VALUE_ONLY;
703 csv->c_flags |= CF_DOS_NEWLINE;
705 csv->c_flags |= CF_NO_QUOTES;
707 csv->c_flags |= CF_DEBUG;
723 csv_data (xo_handle_t *xop UNUSED, csv_private_t *csv UNUSED,
727 csv_dbg(xop, csv, "data: [%s]=[%s] %llx\n", name, value, (unsigned long long) flags);
729 if (!(csv->c_flags & CF_RECORD_DATA))
733 int fnum = csv_leaf_num(xop, csv, name, flags);
737 leaf_t *lp = &csv->c_leaf[fnum];
738 csv_leaf_set(xop, csv, lp, value);
751 csv_private_t *csv = private;
752 xo_buffer_t *xbp = csv ? &csv->c_data : NULL;
754 csv_dbg(xop, csv, "op %s: [%s] [%s]\n", xo_encoder_op_name(op),
759 if (csv == NULL && op != XO_OP_CREATE)
768 rc = csv_options(xop, csv, value, ':');
772 rc = csv_options(xop, csv, value, '+');
781 rc = csv_open_level(xop, csv, name, 0);
785 rc = csv_open_level(xop, csv, name, 1);
791 rc = csv_close_level(xop, csv, name);
796 rc = csv_data(xop, csv, name, value, flags);
811 csv_destroy(xop, csv);