iadd a man page and a -1 flag - 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 4bcfcc3e64d33c6e67b3f6f6359e859d2ee0ff6b /scm/ics2txt/commit/4bcfcc3e64d33c6e67b3f6f6359e859d2ee0ff6b.gph bitreich.org 70
1parent 8894359aa6ad4ccc485901a8af9db03d1a2b4d5f /scm/ics2txt/commit/8894359aa6ad4ccc485901a8af9db03d1a2b4d5f.gph bitreich.org 70
hAuthor: Josuah Demangeon <me@josuah.net> URL:mailto:me@josuah.net bitreich.org 70
iDate: Sat, 19 Jun 2021 12:15:14 +0200 Err bitreich.org 70
i Err bitreich.org 70
iadd a man page and a -1 flag Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M Makefile | 4 ++-- Err bitreich.org 70
i A ics2tsv.1 | 150 +++++++++++++++++++++++++++++++ Err bitreich.org 70
i M ics2tsv.c | 22 ++++++++++++++++++++-- Err bitreich.org 70
i Err bitreich.org 70
i3 files changed, 172 insertions(+), 4 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/Makefile b/Makefile /scm/ics2txt/file/Makefile.gph bitreich.org 70
i@@ -11,7 +11,7 @@ SRC = ical.c base64.c util.c Err bitreich.org 70
i HDR = ical.h base64.h util.h Err bitreich.org 70
i OBJ = ${SRC:.c=.o} Err bitreich.org 70
i BIN = ics2tree ics2tsv Err bitreich.org 70
i-MAN1 = ics2txt.1 Err bitreich.org 70
i+MAN1 = ics2txt.1 ics2tsv.1 Err bitreich.org 70
i MAN5 = tcal.5 Err bitreich.org 70
i Err bitreich.org 70
i all: ${BIN} Err bitreich.org 70
i@@ -36,5 +36,5 @@ install: Err bitreich.org 70
i Err bitreich.org 70
i dist: clean Err bitreich.org 70
i mkdir -p ${NAME}-${VERSION} Err bitreich.org 70
i- cp -r README Makefile bin ${SRC} ${NAME}-${VERSION} Err bitreich.org 70
i+ cp -r README Makefile bin ${MAN1} ${MAN5} ${SRC} ${NAME}-${VERSION} Err bitreich.org 70
i tar -cf - ${NAME}-${VERSION} | gzip -c >${NAME}-${VERSION}.tar.gz Err bitreich.org 70
1diff --git a/ics2tsv.1 b/ics2tsv.1 /scm/ics2txt/file/ics2tsv.1.gph bitreich.org 70
i@@ -0,0 +1,150 @@ Err bitreich.org 70
i+.Dd $Mdocdate: Mar 1 2020$ Err bitreich.org 70
i+.Dt ICS2TSV 1 Err bitreich.org 70
i+.Os Err bitreich.org 70
i+. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh NAME Err bitreich.org 70
i+. Err bitreich.org 70
i+.Nm ics2tsv Err bitreich.org 70
i+.Nd convert an icalendar.ics file to tsv Err bitreich.org 70
i+. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh SYNOPSIS Err bitreich.org 70
i+. Err bitreich.org 70
i+.Nm ics2tsv Err bitreich.org 70
i+.Op Fl 1 Err bitreich.org 70
i+.Op Fl f Ar fields Err bitreich.org 70
i+.Op Fl s Ar subsep Err bitreich.org 70
i+.Op Fl t Ar timefmt Err bitreich.org 70
i+.Ar [file.ics...] >file.tsv Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh DESCRIPTION Err bitreich.org 70
i+. Err bitreich.org 70
i+.Nm Err bitreich.org 70
i+is a converter that parse icalendar format and produces lines of output. Err bitreich.org 70
i+Every line represents an element delimited by Err bitreich.org 70
i+.Dq BEGIN: Err bitreich.org 70
i+and Err bitreich.org 70
i+.Dq END: Err bitreich.org 70
i+among Err bitreich.org 70
i+.Dq VEVENT , Err bitreich.org 70
i+.Dq VTODO , Err bitreich.org 70
i+.Dq VJOURNAL , Err bitreich.org 70
i+.Dq VFREEBUSY , Err bitreich.org 70
i+and Err bitreich.org 70
i+.Dq VALARM . Err bitreich.org 70
i+. Err bitreich.org 70
i+.Pp Err bitreich.org 70
i+The lines are filled with tab-delimited fields, with the first ones: Err bitreich.org 70
i+. Err bitreich.org 70
i+.Bl -enum Err bitreich.org 70
i+. Err bitreich.org 70
i+.It Err bitreich.org 70
i+Element type, as encountered after Err bitreich.org 70
i+.Dq BEGIN Err bitreich.org 70
i+and Err bitreich.org 70
i+.Dq END ; Err bitreich.org 70
i+. Err bitreich.org 70
i+.It Err bitreich.org 70
i+Start date, present for Err bitreich.org 70
i+.Dq VEVENT , Err bitreich.org 70
i+.Dq VJOURNAL , Err bitreich.org 70
i+.Dq VFREEBUSY , Err bitreich.org 70
i+and Err bitreich.org 70
i+.Dq VALARM Err bitreich.org 70
i+types. Err bitreich.org 70
i+. Err bitreich.org 70
i+.It Err bitreich.org 70
i+End date, present for Err bitreich.org 70
i+.Dq VEVENT , Err bitreich.org 70
i+.Dq VTODO , Err bitreich.org 70
i+.Dq VFREEBUSY , Err bitreich.org 70
i+and Err bitreich.org 70
i+.Dq VALARM Err bitreich.org 70
i+types. Err bitreich.org 70
i+. Err bitreich.org 70
i+.It Err bitreich.org 70
i+Reserved for future use. Err bitreich.org 70
i+. Err bitreich.org 70
i+.El Err bitreich.org 70
i+. Err bitreich.org 70
i+.Pp Err bitreich.org 70
i+And the other fields starting from Err bitreich.org 70
i+.Pq 5. Err bitreich.org 70
i+chosen by the Err bitreich.org 70
i+.Fl f Err bitreich.org 70
i+flag. Err bitreich.org 70
i+By default: Err bitreich.org 70
i+.Dq "CATEGORIES,LOCATION,SUMMARY,DESCRIPTION" . Err bitreich.org 70
i+. Err bitreich.org 70
i+.Bl -tag Err bitreich.org 70
i+. Err bitreich.org 70
i+.It Fl 1 Err bitreich.org 70
i+Show the name of the columns on the first line before the content. Err bitreich.org 70
i+. Err bitreich.org 70
i+.It Fl f Ar field1,field2,field3... Err bitreich.org 70
i+Chooses the fields from the icalendar to display, in this order, Err bitreich.org 70
i+separated by a comma Err bitreich.org 70
i+.Pq Sq \&, Err bitreich.org 70
i+and case-insensitive Err bitreich.org 70
i+. Err bitreich.org 70
i+.It Fl s Ar subsep Err bitreich.org 70
i+When there are multiple fields with the same value, they are Err bitreich.org 70
i+concatenated with Err bitreich.org 70
i+.Ar subsep Err bitreich.org 70
i+separator, by default a comma Err bitreich.org 70
i+.Pq Sq \&, . Err bitreich.org 70
i+. Err bitreich.org 70
i+.It Fl t Ar timefmt Err bitreich.org 70
i+Dates from 2nd and 3rd fields are formatted with a Err bitreich.org 70
i+.Xr strftime 3 Err bitreich.org 70
i+string Err bitreich.org 70
i+.Ar timeftm , Err bitreich.org 70
i+by default in seconds since 1970/01/01. Err bitreich.org 70
i+. Err bitreich.org 70
i+.El Err bitreich.org 70
i+. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh EXAMPLES Err bitreich.org 70
i+. Err bitreich.org 70
i+Convert a calendar from HTTP Err bitreich.org 70
i+.Pa .ics Err bitreich.org 70
i+to custom Err bitreich.org 70
i+.Pa .txt Err bitreich.org 70
i+sorted by start date: Err bitreich.org 70
i+.Dl curl "$url.ics" | ics2tsv | sort -n -k 1,1 | tsv2tsv Err bitreich.org 70
i+. Err bitreich.org 70
i+.Pp Err bitreich.org 70
i+. Err bitreich.org 70
i+.Pp Err bitreich.org 70
i+Split an Err bitreich.org 70
i+.ics Err bitreich.org 70
i+file according to the category, saved as Err bitreich.org 70
i+.Pa .tsv : Err bitreich.org 70
i+.Bd -literal Err bitreich.org 70
i+ics2tsv -f CATEGORIES icalendar.ics | awk -F '\et' '{ print >>($6".tsv") }\' Err bitreich.org 70
i+.Ed Err bitreich.org 70
i+. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh SEE ALSO Err bitreich.org 70
i+. Err bitreich.org 70
i+.Xr awk 1 , Err bitreich.org 70
i+.Xr cal 1 , Err bitreich.org 70
i+.Xr calendar 1 , Err bitreich.org 70
i+.Xr date 1 , Err bitreich.org 70
i+.Xr sort 1 Err bitreich.org 70
i+. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh STANDARDS Err bitreich.org 70
i+. Err bitreich.org 70
i+.Rs Err bitreich.org 70
i+.%A Desruisseaux Err bitreich.org 70
i+.%D September 2009 Err bitreich.org 70
i+.%T Internet Calendaring and Scheduling Core Object Specification (iCalendar) Err bitreich.org 70
i+.%R RFC 5545 Err bitreich.org 70
i+.Re Err bitreich.org 70
i+. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh AUTHORS Err bitreich.org 70
i+. Err bitreich.org 70
i+.An Josuah Demangeon Aq Mt me@josuah.net Err bitreich.org 70
1diff --git a/ics2tsv.c b/ics2tsv.c /scm/ics2txt/file/ics2tsv.c.gph bitreich.org 70
i@@ -24,6 +24,7 @@ struct Block { Err bitreich.org 70
i char *fields[FIELDS_MAX]; Err bitreich.org 70
i }; Err bitreich.org 70
i Err bitreich.org 70
i+static int flag_1 = 0; Err bitreich.org 70
i static char default_fields[] = "CATEGORIES,LOCATION,SUMMARY,DESCRIPTION"; Err bitreich.org 70
i static char *flag_s = ","; Err bitreich.org 70
i static char *flag_t = NULL; Err bitreich.org 70
i@@ -46,6 +47,9 @@ fn_block_begin(IcalParser *p, char *name) Err bitreich.org 70
i (void)p; Err bitreich.org 70
i (void)name; Err bitreich.org 70
i Err bitreich.org 70
i+ if (p->blocktype == ICAL_BLOCK_OTHER) Err bitreich.org 70
i+ return 0; Err bitreich.org 70
i+ 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@@ -72,6 +76,9 @@ fn_block_end(IcalParser *p, char *name) Err bitreich.org 70
i printf("\t%s", buf); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i+ /* reserved for recurring events */ Err bitreich.org 70
i+ printf("\t%s", "(null)"); Err bitreich.org 70
i+ Err bitreich.org 70
i for (int i = 0; fields[i] != NULL; i++) { Err bitreich.org 70
i fputc('\t', stdout); Err bitreich.org 70
i if (block.fields[i] != NULL) Err bitreich.org 70
i@@ -134,7 +141,8 @@ fn_field_value(IcalParser *p, char *name, char *value) Err bitreich.org 70
i static void Err bitreich.org 70
i usage(void) Err bitreich.org 70
i { Err bitreich.org 70
i- fprintf(stderr, "usage: %s [-f fields] [-s subsep] [-t timefmt] [file...]", arg0); Err bitreich.org 70
i+ fprintf(stderr,"usage: %s [-1] [-f fields] [-s subsep] [-t timefmt]" Err bitreich.org 70
i+ " [file...]\n", arg0); Err bitreich.org 70
i exit(1); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -153,8 +161,11 @@ main(int argc, char **argv) Err bitreich.org 70
i p.fn_param_value = fn_param_value; Err bitreich.org 70
i p.fn_field_value = fn_field_value; Err bitreich.org 70
i Err bitreich.org 70
i- while ((c = getopt(argc, argv, "f:s:t:")) != -1) { Err bitreich.org 70
i+ while ((c = getopt(argc, argv, "1f:s:t:")) != -1) { Err bitreich.org 70
i switch (c) { Err bitreich.org 70
i+ case '1': Err bitreich.org 70
i+ flag_1 = 1; Err bitreich.org 70
i+ break; Err bitreich.org 70
i case 'f': Err bitreich.org 70
i flag_f = optarg; Err bitreich.org 70
i break; Err bitreich.org 70
i@@ -179,6 +190,13 @@ main(int argc, char **argv) Err bitreich.org 70
i } while ((fields[i++] = strsep(&flag_f, ",")) != NULL); Err bitreich.org 70
i fields[i] = NULL; Err bitreich.org 70
i Err bitreich.org 70
i+ if (flag_1) { Err bitreich.org 70
i+ printf("%s\t%s\t%s", "TYPE", "BEG", "END"); Err bitreich.org 70
i+ for (i = 0; fields[i] != NULL; i++) Err bitreich.org 70
i+ printf("\t%s", fields[i]); Err bitreich.org 70
i+ fputc('\n', stdout); Err bitreich.org 70
i+ } Err bitreich.org 70
i+ Err bitreich.org 70
i if (*argv == NULL || strcmp(*argv, "-") == 0) { Err bitreich.org 70
i debug("converting *stdin*"); Err bitreich.org 70
i if (ical_parse(&p, stdin) < 0) Err bitreich.org 70
.
Response:
text/plain