SMOLNET PORTAL home about changes
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
Original URLgopher://bitreich.org/0/scm/ics2txt/commit/24985c575e8332...
Content-Typetext/plain; charset=utf-8