SMOLNET PORTAL home about changes
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
Original URLgopher://bitreich.org/0/scm/xml2tsv/commit/df38d227024192...
Content-Typetext/plain; charset=utf-8