isome fixes and improvements - 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 5cb461a629973380fc58050bee2d8d893db7923d /scm/xml2tsv/commit/5cb461a629973380fc58050bee2d8d893db7923d.gph bitreich.org 70 1parent 0fe049559d88b204e73332e205caa8c5936985d6 /scm/xml2tsv/commit/0fe049559d88b204e73332e205caa8c5936985d6.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Fri, 3 Jan 2020 16:37:46 +0100 Err bitreich.org 70 i Err bitreich.org 70 isome fixes and improvements Err bitreich.org 70 i Err bitreich.org 70 i- print_no_cr: fix for modification of const buffer. Err bitreich.org 70 i- improve buffering of data handlers using the start and end handlers. Err bitreich.org 70 i- add XML entity conversion. Err bitreich.org 70 i- some white-space fixes. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M xml2tsv.c | 47 ++++++++++++++++++++----------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 30 insertions(+), 17 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@@ -36,13 +36,13 @@ int stack_push(tstack_t *t, const char *c){ 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 Err bitreich.org 70 i char* stack_pop(tstack_t *t){ Err bitreich.org 70 i if (t->top >= 0) 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 Err bitreich.org 70 i char* stack_peek(tstack_t *t){ Err bitreich.org 70 i if (t->top >= 0) Err bitreich.org 70 i@@ -61,17 +61,15 @@ void stack_init(tstack_t *t){ Err bitreich.org 70 i Err bitreich.org 70 i /* utility functions */ Err bitreich.org 70 i Err bitreich.org 70 i-void print_no_cr(FILE *f, const char *c){ Err bitreich.org 70 i- char *tmp = c; Err bitreich.org 70 i- while (c != NULL){ Err bitreich.org 70 i- tmp = strchr(c, '\n'); Err bitreich.org 70 i- if (tmp != NULL) Err bitreich.org 70 i- *tmp = '\0'; Err bitreich.org 70 i- fprintf(f, "%s", c); Err bitreich.org 70 i- if (tmp != NULL) Err bitreich.org 70 i- c = tmp + 1; Err bitreich.org 70 i- else Err bitreich.org 70 i- c = NULL; Err bitreich.org 70 i+void print_no_cr(FILE *f, const char *s){ Err bitreich.org 70 i+ const char *tmp = s; Err bitreich.org 70 i+ size_t len; Err bitreich.org 70 i+ while (*tmp != '\0'){ Err bitreich.org 70 i+ len = strcspn(tmp, "\n"); Err bitreich.org 70 i+ fwrite(tmp, 1, len, f); Err bitreich.org 70 i+ tmp += len; Err bitreich.org 70 i+ if (tmp[len] == '\n') Err bitreich.org 70 i+ tmp++; Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -93,14 +91,20 @@ void Err bitreich.org 70 i xmlattr(XMLParser *x, const char *t, size_t tl, const char *a, size_t al, Err bitreich.org 70 i const char *v, size_t vl) Err bitreich.org 70 i { Err bitreich.org 70 i- printf("\t%s=%s", a, v); Err bitreich.org 70 i+ printf("%s", v); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i xmlattrentity(XMLParser *x, const char *t, size_t tl, const char *a, size_t al, Err bitreich.org 70 i const char *v, size_t vl) Err bitreich.org 70 i { Err bitreich.org 70 i- printf("attrentity: %s\n", a); Err bitreich.org 70 i+ char buf[16]; Err bitreich.org 70 i+ int n; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if ((n = xml_entitytostr(v, buf, sizeof(buf))) > 0) Err bitreich.org 70 i+ xmlattr(x, t, tl, a, al, buf, (size_t)n); Err bitreich.org 70 i+ else Err bitreich.org 70 i+ xmlattr(x, t, tl, a, al, v, vl); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i@@ -111,17 +115,19 @@ xmlattrend(XMLParser *x, const char *t, size_t tl, const char *a, size_t al) Err bitreich.org 70 i void Err bitreich.org 70 i xmlattrstart(XMLParser *x, const char *t, size_t tl, const char *a, size_t al) Err bitreich.org 70 i { Err bitreich.org 70 i+ printf("\t%s=", a); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i xmlcdatastart(XMLParser *x) Err bitreich.org 70 i { Err bitreich.org 70 i+ printf("\t"); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i xmlcdata(XMLParser *x, const char *d, size_t dl) Err bitreich.org 70 i { Err bitreich.org 70 i- printf("\t%s", d); Err bitreich.org 70 i+ print_no_cr(stdout, d); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i@@ -147,7 +153,6 @@ xmlcommentend(XMLParser *x) 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- printf("\t"); Err bitreich.org 70 i print_no_cr(stdout, d); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -159,11 +164,19 @@ xmldataend(XMLParser *x) Err bitreich.org 70 i void Err bitreich.org 70 i xmldataentity(XMLParser *x, const char *d, size_t dl) Err bitreich.org 70 i { Err bitreich.org 70 i+ char buf[16]; Err bitreich.org 70 i+ int n; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if ((n = xml_entitytostr(d, buf, sizeof(buf))) > 0) Err bitreich.org 70 i+ xmldata(x, buf, (size_t)n); Err bitreich.org 70 i+ else Err bitreich.org 70 i+ xmldata(x, d, dl); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i xmldatastart(XMLParser *x) Err bitreich.org 70 i { Err bitreich.org 70 i+ printf("\t"); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 .