isimplify and improve portability across mawk, gawk, nawk, busybox awk... - 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 24985c575e833254adb79215584947a601569ea1 /scm/ics2txt/commit/24985c575e833254adb79215584947a601569ea1.gph bitreich.org 70
1parent c6606df0960a765824c000aeb54e21691bcc94bb /scm/ics2txt/commit/c6606df0960a765824c000aeb54e21691bcc94bb.gph bitreich.org 70
hAuthor: Josuah Demangeon <me@josuah.net> URL:mailto:me@josuah.net bitreich.org 70
iDate: Thu, 25 Jun 2020 21:11:17 +0200 Err bitreich.org 70
i Err bitreich.org 70
isimplify and improve portability across mawk, gawk, nawk, busybox awk... Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M README | 33 +++++++++++++++---------------- Err bitreich.org 70
i M ics2tsv | 32 ++++++++++++------------------- Err bitreich.org 70
i M tcal2tsv | 12 ++++++------ Err bitreich.org 70
i M tsv2tcal | 4 ++-- Err bitreich.org 70
i Err bitreich.org 70
i4 files changed, 36 insertions(+), 45 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/README b/README /scm/ics2txt/file/README.gph bitreich.org 70
i@@ -1,7 +1,5 @@ Err bitreich.org 70
i-ICS2TSV(1) General Commands Manual ICS2TSV(1) Err bitreich.org 70
i- Err bitreich.org 70
i NAME Err bitreich.org 70
i- ics2tsv – convert ics file to simpler tsv or txt formats Err bitreich.org 70
i+ ics2txt – convert ics file to simpler tsv or txt formats Err bitreich.org 70
i Err bitreich.org 70
i SYNOPSIS Err bitreich.org 70
i ics2txt <file.ics >file.txt Err bitreich.org 70
i@@ -13,31 +11,34 @@ SYNOPSIS Err bitreich.org 70
i tsv2ics <file.tsv >file.ics Err bitreich.org 70
i Err bitreich.org 70
i DESCRIPTION Err bitreich.org 70
i- ics2tsv is set of awk scripts to deal with iCal (.ics) format to publish, Err bitreich.org 70
i+ ics2txt is set of awk scripts to deal with iCal (.ics) format to publish, Err bitreich.org 70
i display and convert *.ics files, though a simple central TSV format. Err bitreich.org 70
i Err bitreich.org 70
i They all read from either stdin or the file passed as argument, and write Err bitreich.org 70
i to stdout. Err bitreich.org 70
i Err bitreich.org 70
i- file.tsv files have one line per event, all with the following fields, Err bitreich.org 70
i- separated by one tab: Err bitreich.org 70
i- 1. Begining (epoch) Err bitreich.org 70
i- 2. End (epoch) Err bitreich.org 70
i- 3. Category Err bitreich.org 70
i- 4. Location Err bitreich.org 70
i- 5. Summary Err bitreich.org 70
i- 6. Description Err bitreich.org 70
i+ file.tsv have one line per event, with the first line declaring fields Err bitreich.org 70
i+ order and presence, among: Err bitreich.org 70
i+ “beg” Begining of event (epoch) Err bitreich.org 70
i+ “end” End of event (epoch) Err bitreich.org 70
i+ “cat” Category Err bitreich.org 70
i+ “loc” Location Err bitreich.org 70
i+ “sum” Summary Err bitreich.org 70
i+ “des” Description Err bitreich.org 70
i Err bitreich.org 70
i EXAMPLES Err bitreich.org 70
i- Convert a calendar from HTTP .ics to custom .txt sorted by beginning Err bitreich.org 70
i- date: Err bitreich.org 70
i+ Convert a calendar from HTTP .ics to custom .txt sorted by start date: Err bitreich.org 70
i curl $url.ics | ics2tsv | sort -n -k 1,1 | tsv2txt Err bitreich.org 70
i Err bitreich.org 70
i Convert a custom .txt format back to an .ics file and publish it: Err bitreich.org 70
i tcal2tsv cal.txt | tsv2ics | ssh www@$host 'cat >/var/www/cal.ics' Err bitreich.org 70
i Err bitreich.org 70
i Split an file according to the category, saved as .tsv: Err bitreich.org 70
i- tcal2tsv cal.txt | awk -F '\t' '{ f = $3".tsv"; print >>f }' Err bitreich.org 70
i+ Err bitreich.org 70
i+ ics2tsv cal.txt | awk -F '\t' ' Err bitreich.org 70
i+ NR == 1 { for (i = 1; i <= NF; i++) F[$i] = i; next } Err bitreich.org 70
i+ { print >>($F["cat"]".tsv") } Err bitreich.org 70
i+ ´ Err bitreich.org 70
i Err bitreich.org 70
i SEE ALSO Err bitreich.org 70
i cal(1), calendar(1), date(1), sort(1) Err bitreich.org 70
i@@ -48,5 +49,3 @@ STANDARDS Err bitreich.org 70
i Err bitreich.org 70
i AUTHORS Err bitreich.org 70
i Josuah Demangeon <me@josuah.net> Err bitreich.org 70
i- Err bitreich.org 70
i-OpenBSD 6.6 March 1, 2020 OpenBSD 6.6 Err bitreich.org 70
1diff --git a/ics2tsv b/ics2tsv /scm/ics2txt/file/ics2tsv.gph bitreich.org 70
i@@ -44,49 +44,41 @@ function ical_to_epoch(str, offset, Err bitreich.org 70
i function print_event(ev, fields, Err bitreich.org 70
i i) Err bitreich.org 70
i { Err bitreich.org 70
i- for (i = 1; i <= fields["len"]; i++) Err bitreich.org 70
i+ for (i = 1; i in fields; i++) Err bitreich.org 70
i printf("%s%s", (i > 1 ? "\t" : ""), ev[fields[i]]) Err bitreich.org 70
i printf("\n") Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i BEGIN { Err bitreich.org 70
i FIELDS = "DTSTART DTEND CATEGORIES LOCATION SUMMARY DESCRIPTION" Err bitreich.org 70
i- fields["len"] = split(FIELDS, fields, " ") Err bitreich.org 70
i+ split(FIELDS, fields, " ") Err bitreich.org 70
i Err bitreich.org 70
i # by default: "CATEGORIES" -> "cat", "LOCATION" -> "loc"... Err bitreich.org 70
i translate["DTSTART"] = "beg" Err bitreich.org 70
i translate["DTEND"] = "end" Err bitreich.org 70
i Err bitreich.org 70
i- "date +%z" | getline offset_str Err bitreich.org 70
i+ "date +%z" | getline Err bitreich.org 70
i close("date +%z") Err bitreich.org 70
i- hour = substr($0, 4, 2) Err bitreich.org 70
i- min = substr($0, 6, 2) Err bitreich.org 70
i- tzoffset = substr(zone, 3, 1) hour * 3600 + min * 60 Err bitreich.org 70
i+ TZ = substr($0, 3, 1) substr($0, 4, 2)*3600 + substr($0, 6, 2)*60 Err bitreich.org 70
i Err bitreich.org 70
i FS = "[:;]" Err bitreich.org 70
i Err bitreich.org 70
i- for (i = 1; i <= fields["len"]; i++) { Err bitreich.org 70
i+ for (i = 1; i in fields; i++) { Err bitreich.org 70
i if (!(s = translate[fields[i]])) Err bitreich.org 70
i s = tolower(substr(fields[i], 1, 3)) Err bitreich.org 70
i printf("%s%s", (i > 1 ? "\t" : ""), s) Err bitreich.org 70
i } Err bitreich.org 70
i- Err bitreich.org 70
i printf("\n") Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i+/^ / { Err bitreich.org 70
i+ ev[type] = ev[type] substr($0, 2, length($0) - 1) Err bitreich.org 70
i+ next Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i { Err bitreich.org 70
i- gsub("\r", "") Err bitreich.org 70
i- gsub("\t", "\\\\t") Err bitreich.org 70
i- gsub("^ *", "") Err bitreich.org 70
i- gsub(" *$", "") Err bitreich.org 70
i- Err bitreich.org 70
i- if (match($0, "^ ")) { Err bitreich.org 70
i- ev[type] = ev[type] substr($0, 2, length($0) - 1) Err bitreich.org 70
i- } else { Err bitreich.org 70
i- type = $1 Err bitreich.org 70
i- i = index($0, ":") Err bitreich.org 70
i- ev[type] = substr($0, i + 1, length($0) - i) Err bitreich.org 70
i- } Err bitreich.org 70
i+ i = index($0, ":") Err bitreich.org 70
i+ ev[$1] = substr($0, i + 1, length($0) - i) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i /^END:VEVENT/ { Err bitreich.org 70
1diff --git a/tcal2tsv b/tcal2tsv /scm/ics2txt/file/tcal2tsv.gph bitreich.org 70
i@@ -42,9 +42,9 @@ function text_to_epoch(str, tz, Err bitreich.org 70
i Err bitreich.org 70
i BEGIN { Err bitreich.org 70
i FIELDS = "beg end cat loc sum des" Err bitreich.org 70
i- fields["len"] = split(FIELDS, fields, " ") Err bitreich.org 70
i+ split(FIELDS, fields, " ") Err bitreich.org 70
i Err bitreich.org 70
i- for (i = 1; i <= fields["len"]; i++) { Err bitreich.org 70
i+ for (i = 1; i in fields; i++) { Err bitreich.org 70
i pos[fields[i]] = i Err bitreich.org 70
i printf("%s%s", (i > 1 ? "\t" : ""), fields[i]) Err bitreich.org 70
i } Err bitreich.org 70
i@@ -56,16 +56,16 @@ BEGIN { Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i /^TZ[+-]/ { Err bitreich.org 70
i- TZOFFSET = substr($1, 3, 1) substr($0, 4, 2)*3600 + substr($0, 6, 2)*60 Err bitreich.org 70
i+ TZ = substr($1, 3, 1) substr($0, 4, 2)*3600 + substr($0, 6, 2)*60 Err bitreich.org 70
i while (getline && $0 ~ /^$/) Err bitreich.org 70
i continue Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i /^[0-9]+-[0-9]+-[0-9]+/ { Err bitreich.org 70
i if ("beg" in ev) Err bitreich.org 70
i- ev["end"] = text_to_epoch($0, TZOFFSET) Err bitreich.org 70
i+ ev["end"] = text_to_epoch($0, TZ) Err bitreich.org 70
i else Err bitreich.org 70
i- ev["beg"] = text_to_epoch($0, TZOFFSET) Err bitreich.org 70
i+ ev["beg"] = text_to_epoch($0, TZ) Err bitreich.org 70
i next Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -78,7 +78,7 @@ BEGIN { Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i /^$/ { Err bitreich.org 70
i- for (i = 1; i <= fields["len"]; i++) Err bitreich.org 70
i+ for (i = 1; i in fields; i++) Err bitreich.org 70
i printf("%s%s", (i > 1 ? "\t" : ""), ev[fields[i]]) Err bitreich.org 70
i printf("\n") Err bitreich.org 70
i delete ev Err bitreich.org 70
1diff --git a/tsv2tcal b/tsv2tcal /scm/ics2txt/file/tsv2tcal.gph bitreich.org 70
i@@ -43,13 +43,13 @@ function gmtime(sec, tm) Err bitreich.org 70
i function localtime(sec, tm, Err bitreich.org 70
i tz, h, m) Err bitreich.org 70
i { Err bitreich.org 70
i- return gmtime(sec + TZOFFSET, tm) Err bitreich.org 70
i+ return gmtime(sec + TZ, tm) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i BEGIN { Err bitreich.org 70
i "date +%z" | getline tz Err bitreich.org 70
i close("date +%z") Err bitreich.org 70
i- TZOFFSET = substr(tz, 1, 1) substr(tz, 2, 2)*3600 + substr(tz, 4, 2)*60 Err bitreich.org 70
i+ TZ = substr(tz, 1, 1) substr(tz, 2, 2)*3600 + substr(tz, 4, 2)*60 Err bitreich.org 70
i Err bitreich.org 70
i print("TZ" tz) Err bitreich.org 70
i Err bitreich.org 70
.
Response:
text/plain