icount tag childrend to fix lack of SEP emission on data with leading whitespaces - xml2tsv - a simple xml-to-tsv converter, based on xmlparser Err bitreich.org 70
1Log /scm/xml2tsv/log.gph bitreich.org 70
1Files /scm/xml2tsv/files.gph bitreich.org 70
1Refs /scm/xml2tsv/refs.gph bitreich.org 70
1Tags /scm/xml2tsv/tag bitreich.org 70
1README /scm/xml2tsv/file/README.md.gph bitreich.org 70
1LICENSE /scm/xml2tsv/file/LICENSE.gph bitreich.org 70
i--- Err bitreich.org 70
1commit df38d2270241927e5436a0bc36ffb99044a8f4fb /scm/xml2tsv/commit/df38d2270241927e5436a0bc36ffb99044a8f4fb.gph bitreich.org 70
1parent b0601f2be7df28d3fab982344a2cc0df8960b012 /scm/xml2tsv/commit/b0601f2be7df28d3fab982344a2cc0df8960b012.gph bitreich.org 70
hAuthor: KatolaZ <katolaz@freaknet.org> URL:mailto:katolaz@freaknet.org bitreich.org 70
iDate: Wed, 8 Dec 2021 21:44:11 +0000 Err bitreich.org 70
i Err bitreich.org 70
icount tag childrend to fix lack of SEP emission on data with leading whitespaces Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M xml2tsv.c | 36 +++++++++++++++++++++----------- Err bitreich.org 70
i Err bitreich.org 70
i1 file changed, 24 insertions(+), 12 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/xml2tsv.c b/xml2tsv.c /scm/xml2tsv/file/xml2tsv.c.gph bitreich.org 70
i@@ -26,8 +26,15 @@ Err bitreich.org 70
i /* tag stack */ Err bitreich.org 70
i Err bitreich.org 70
i typedef struct { Err bitreich.org 70
i+ char s[STR_MAX]; Err bitreich.org 70
i+ int ref; Err bitreich.org 70
i+} taginfo_t; Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i+typedef struct { Err bitreich.org 70
i int top; Err bitreich.org 70
i- char st[DEPTH_MAX][STR_MAX]; Err bitreich.org 70
i+ taginfo_t st[DEPTH_MAX]; Err bitreich.org 70
i } tstack_t; Err bitreich.org 70
i Err bitreich.org 70
i int stack_empty(tstack_t *t){ Err bitreich.org 70
i@@ -37,22 +44,27 @@ int stack_empty(tstack_t *t){ Err bitreich.org 70
i int stack_push(tstack_t *t, const char *c){ Err bitreich.org 70
i if (t->top < DEPTH_MAX){ Err bitreich.org 70
i t->top ++; Err bitreich.org 70
i- strncpy(t->st[t->top], c, STR_MAX - 1); Err bitreich.org 70
i- t->st[t->top][STR_MAX - 1] = '\0'; Err bitreich.org 70
i+ strncpy(t->st[t->top].s, c, STR_MAX - 1); Err bitreich.org 70
i+ t->st[t->top].s[STR_MAX - 1] = '\0'; Err bitreich.org 70
i+ t->st[t->top].ref = 0; Err bitreich.org 70
i+ if (t->top){ Err bitreich.org 70
i+ /* Increment the ref counter of the parent tag*/ Err bitreich.org 70
i+ t->st[t->top-1].ref += 1; Err bitreich.org 70
i+ } Err bitreich.org 70
i return 0; Err bitreich.org 70
i } Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i-char* stack_pop(tstack_t *t){ Err bitreich.org 70
i+taginfo_t* stack_pop(tstack_t *t){ Err bitreich.org 70
i if (!stack_empty(t)) Err bitreich.org 70
i- return t->st[t->top--]; Err bitreich.org 70
i+ return t->st + t->top--; Err bitreich.org 70
i return NULL; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i-char* stack_peek(tstack_t *t){ Err bitreich.org 70
i+taginfo_t* stack_peek(tstack_t *t){ Err bitreich.org 70
i if (!stack_empty(t)) Err bitreich.org 70
i- return t->st[t->top]; Err bitreich.org 70
i+ return t->st + t->top; Err bitreich.org 70
i return NULL; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -102,7 +114,7 @@ void print_cur_str(tstack_t *t){ Err bitreich.org 70
i int i; Err bitreich.org 70
i for (i=0; i<=t->top; i++){ Err bitreich.org 70
i putchar('/'); Err bitreich.org 70
i- fputs(t->st[i], stdout); Err bitreich.org 70
i+ fputs(t->st[i].s, stdout); Err bitreich.org 70
i } Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -110,7 +122,7 @@ void print_cur_str_fp(FILE *f, tstack_t *t){ Err bitreich.org 70
i int i; Err bitreich.org 70
i for (i=0; i<=t->top; i++){ Err bitreich.org 70
i fputc('/', f); Err bitreich.org 70
i- fputs(t->st[i], f); Err bitreich.org 70
i+ fputs(t->st[i].s, f); Err bitreich.org 70
i } Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -164,7 +176,7 @@ xmlcdata(XMLParser *x, const char *d, size_t dl) Err bitreich.org 70
i void Err bitreich.org 70
i xmldata(XMLParser *x, const char *d, size_t dl) Err bitreich.org 70
i { Err bitreich.org 70
i- if (strcspn(d, " \t\n") && emitsep){ Err bitreich.org 70
i+ if (stack_peek(&st) || (strcspn(d, " \t\n") && emitsep)){ Err bitreich.org 70
i putchar(SEP); Err bitreich.org 70
i emitsep = FALSE; Err bitreich.org 70
i } Err bitreich.org 70
i@@ -202,7 +214,7 @@ xmltagend(XMLParser *x, const char *t, size_t tl, int isshort) Err bitreich.org 70
i if (stack_empty(&st)){ Err bitreich.org 70
i fprintf(stderr, "Error: tag-end '%s' before any open tag\n", t); Err bitreich.org 70
i } Err bitreich.org 70
i- tag = stack_pop(&st); Err bitreich.org 70
i+ tag = stack_pop(&st)->s; Err bitreich.org 70
i if (strcmp(t, tag)){ Err bitreich.org 70
i fprintf(stderr, "Error: tag-end '%s' closes tag '%s'\n", t, tag); Err bitreich.org 70
i } Err bitreich.org 70
i@@ -212,7 +224,7 @@ void Err bitreich.org 70
i xmltagstart(XMLParser *x, const char *t, size_t tl) Err bitreich.org 70
i { Err bitreich.org 70
i if (stack_push(&st, t)){ Err bitreich.org 70
i- fprintf(stderr, "Error: stack full. Ignoring tag '%s' (parent tag: '%s')\n", t, stack_peek(&st)); Err bitreich.org 70
i+ fprintf(stderr, "Error: stack full. Ignoring tag '%s' (parent tag: '%s')\n", t, stack_peek(&st)->s); Err bitreich.org 70
i return; Err bitreich.org 70
i } Err bitreich.org 70
i putchar('\n'); Err bitreich.org 70
.
Response:
text/plain