Introduction
Introduction Statistics Contact Development Disclaimer Help
first mockup of conversion - ics2txt - convert icalendar .ics file to plain text
git clone git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws…
Log
Files
Refs
Tags
README
---
commit 65778fa74c2e72ca67a8dc4f6c1f0021f8ce2de4
parent 54ba66bb7b1b7eed7e3aaf60ef00c9ccc9cc65d6
Author: Josuah Demangeon <[email protected]>
Date: Thu, 17 Jun 2021 08:33:25 +0200
first mockup of conversion
Diffstat:
M ical.c | 16 +++++++++++-----
M ics2tsv.c | 16 ++++++++--------
2 files changed, 19 insertions(+), 13 deletions(-)
---
diff --git a/ical.c b/ical.c
@@ -154,16 +154,21 @@ hook_block_begin(IcalParser *p, char *name)
}
static int
-hook_block_end(IcalParser *p, char *name)
+hook_block_end_before(IcalParser *p, char *name)
{
if (p->current == p->stack)
return ical_err(p, "more END: than BEGIN:");
if (strcasecmp(p->current->name, name) != 0)
return ical_err(p, "mismatching BEGIN: and END:");
- p->current--;
- if (p->current < p->stack)
+ if (p->current <= p->stack)
return ical_err(p, "more END: than BEGIN:");
+ return 0;
+}
+static int
+hook_block_end_after(IcalParser *p, char *name)
+{
+ p->current--;
if (ical_block_name[p->blocktype] != NULL &&
strcasecmp(ical_block_name[p->blocktype], name) == 0)
p->blocktype = ICAL_BLOCK_OTHER;
@@ -264,8 +269,9 @@ ical_parse_contentline(IcalParser *p, char *s)
(err = CALL(p, fn_block_begin, s)) != 0)
return err;
} else if (strcasecmp(name, "END") == 0) {
- if ((err = hook_block_end(p, s)) != 0 ||
- (err = CALL(p, fn_block_end, s)) != 0)
+ if ((err = hook_block_end_before(p, s)) != 0 ||
+ (err = CALL(p, fn_block_end, s)) != 0 ||
+ (err = hook_block_end_after(p, s)) != 0)
return err;
} else {
if ((err = hook_field_value(p, name, s)) != 0 ||
diff --git a/ics2tsv.c b/ics2tsv.c
@@ -22,28 +22,29 @@ Block block;
static int
fn_field_name(IcalParser *p, char *name)
{
- printf("name %s\n", name);
return 0;
}
static int
fn_block_begin(IcalParser *p, char *name)
{
- debug("begin %s\n", name);
+ memset(&block, 0, sizeof block);
return 0;
}
static int
fn_block_end(IcalParser *p, char *name)
{
- debug("end %s\n", name);
+ if (p->blocktype == ICAL_BLOCK_OTHER)
+ return 0;
+ printf("%s\t%lld\t%lld", p->current->name, block.beg, block.end);
+ printf("\n");
return 0;
}
static int
fn_param_value(IcalParser *p, char *name, char *value)
{
- printf("param %s=%s\n", name, value);
return 0;
}
@@ -84,16 +85,15 @@ main(int argc, char **argv)
p.fn_field_value = fn_field_value;
if (*argv == NULL) {
+ debug("converting *stdin*");
if (ical_parse(&p, stdin) < 0)
- err("parsing stdin:%d: %s", p.linenum, p.errmsg);
+ err("parsing *stdin*:%d: %s", p.linenum, p.errmsg);
}
-
for (; *argv != NULL; argv++, argc--) {
FILE *fp;
-
debug("converting \"%s\"", *argv);
if ((fp = fopen(*argv, "r")) == NULL)
- err("opening %s", *argv);
+ err("opening %s: %s", *argv, strerror(errno));
if (ical_parse(&p, fp) < 0)
err("parsing %s:%d: %s", *argv, p.linenum, p.errmsg);
fclose(fp);
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.