ifirst mockup of conversion - ics2txt - convert icalendar .ics file to plain text Err bitreich.org 70 hgit clone git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ics2txt URL:git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ics2txt bitreich.org 70 1Log /scm/ics2txt/log.gph bitreich.org 70 1Files /scm/ics2txt/files.gph bitreich.org 70 1Refs /scm/ics2txt/refs.gph bitreich.org 70 1Tags /scm/ics2txt/tag bitreich.org 70 1README /scm/ics2txt/file/README.md.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 65778fa74c2e72ca67a8dc4f6c1f0021f8ce2de4 /scm/ics2txt/commit/65778fa74c2e72ca67a8dc4f6c1f0021f8ce2de4.gph bitreich.org 70 1parent 54ba66bb7b1b7eed7e3aaf60ef00c9ccc9cc65d6 /scm/ics2txt/commit/54ba66bb7b1b7eed7e3aaf60ef00c9ccc9cc65d6.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:me@josuah.net bitreich.org 70 iDate: Thu, 17 Jun 2021 08:33:25 +0200 Err bitreich.org 70 i Err bitreich.org 70 ifirst mockup of conversion Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M ical.c | 16 +++++++++++----- Err bitreich.org 70 i M ics2tsv.c | 16 ++++++++-------- Err bitreich.org 70 i Err bitreich.org 70 i2 files changed, 19 insertions(+), 13 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/ical.c b/ical.c /scm/ics2txt/file/ical.c.gph bitreich.org 70 i@@ -154,16 +154,21 @@ hook_block_begin(IcalParser *p, char *name) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static int Err bitreich.org 70 i-hook_block_end(IcalParser *p, char *name) Err bitreich.org 70 i+hook_block_end_before(IcalParser *p, char *name) Err bitreich.org 70 i { Err bitreich.org 70 i if (p->current == p->stack) Err bitreich.org 70 i return ical_err(p, "more END: than BEGIN:"); Err bitreich.org 70 i if (strcasecmp(p->current->name, name) != 0) Err bitreich.org 70 i return ical_err(p, "mismatching BEGIN: and END:"); Err bitreich.org 70 i- p->current--; Err bitreich.org 70 i- if (p->current < p->stack) Err bitreich.org 70 i+ if (p->current <= p->stack) Err bitreich.org 70 i return ical_err(p, "more END: than BEGIN:"); Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+} Err bitreich.org 70 i Err bitreich.org 70 i+static int Err bitreich.org 70 i+hook_block_end_after(IcalParser *p, char *name) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ p->current--; Err bitreich.org 70 i if (ical_block_name[p->blocktype] != NULL && Err bitreich.org 70 i strcasecmp(ical_block_name[p->blocktype], name) == 0) Err bitreich.org 70 i p->blocktype = ICAL_BLOCK_OTHER; Err bitreich.org 70 i@@ -264,8 +269,9 @@ ical_parse_contentline(IcalParser *p, char *s) Err bitreich.org 70 i (err = CALL(p, fn_block_begin, s)) != 0) Err bitreich.org 70 i return err; Err bitreich.org 70 i } else if (strcasecmp(name, "END") == 0) { Err bitreich.org 70 i- if ((err = hook_block_end(p, s)) != 0 || Err bitreich.org 70 i- (err = CALL(p, fn_block_end, s)) != 0) Err bitreich.org 70 i+ if ((err = hook_block_end_before(p, s)) != 0 || Err bitreich.org 70 i+ (err = CALL(p, fn_block_end, s)) != 0 || Err bitreich.org 70 i+ (err = hook_block_end_after(p, s)) != 0) Err bitreich.org 70 i return err; Err bitreich.org 70 i } else { Err bitreich.org 70 i if ((err = hook_field_value(p, name, s)) != 0 || Err bitreich.org 70 1diff --git a/ics2tsv.c b/ics2tsv.c /scm/ics2txt/file/ics2tsv.c.gph bitreich.org 70 i@@ -22,28 +22,29 @@ Block block; Err bitreich.org 70 i static int Err bitreich.org 70 i fn_field_name(IcalParser *p, char *name) Err bitreich.org 70 i { Err bitreich.org 70 i- printf("name %s\n", name); Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static int Err bitreich.org 70 i fn_block_begin(IcalParser *p, char *name) Err bitreich.org 70 i { Err bitreich.org 70 i- debug("begin %s\n", name); Err bitreich.org 70 i+ memset(&block, 0, sizeof block); Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static int Err bitreich.org 70 i fn_block_end(IcalParser *p, char *name) Err bitreich.org 70 i { Err bitreich.org 70 i- debug("end %s\n", name); Err bitreich.org 70 i+ if (p->blocktype == ICAL_BLOCK_OTHER) Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+ printf("%s\t%lld\t%lld", p->current->name, block.beg, block.end); Err bitreich.org 70 i+ printf("\n"); Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static int Err bitreich.org 70 i fn_param_value(IcalParser *p, char *name, char *value) Err bitreich.org 70 i { Err bitreich.org 70 i- printf("param %s=%s\n", name, value); Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -84,16 +85,15 @@ main(int argc, char **argv) Err bitreich.org 70 i p.fn_field_value = fn_field_value; Err bitreich.org 70 i Err bitreich.org 70 i if (*argv == NULL) { Err bitreich.org 70 i+ debug("converting *stdin*"); Err bitreich.org 70 i if (ical_parse(&p, stdin) < 0) Err bitreich.org 70 i- err("parsing stdin:%d: %s", p.linenum, p.errmsg); Err bitreich.org 70 i+ err("parsing *stdin*:%d: %s", p.linenum, p.errmsg); Err bitreich.org 70 i } Err bitreich.org 70 i- Err bitreich.org 70 i for (; *argv != NULL; argv++, argc--) { Err bitreich.org 70 i FILE *fp; Err bitreich.org 70 i- Err bitreich.org 70 i debug("converting \"%s\"", *argv); Err bitreich.org 70 i if ((fp = fopen(*argv, "r")) == NULL) Err bitreich.org 70 i- err("opening %s", *argv); Err bitreich.org 70 i+ err("opening %s: %s", *argv, strerror(errno)); Err bitreich.org 70 i if (ical_parse(&p, fp) < 0) Err bitreich.org 70 i err("parsing %s:%d: %s", *argv, p.linenum, p.errmsg); Err bitreich.org 70 i fclose(fp); Err bitreich.org 70 .