tics2txt-tsv - ics2txt - convert icalendar .ics file to plain text
(HTM) git clone git://bitreich.org/ics2txt git://hg6vgqziawt5s4dj.onion/ics2txt
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Tags
(DIR) README
---
tics2txt-tsv (1410B)
---
1 #!/usr/bin/awk -f
2
3 function isleap(year)
4 {
5 return (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)
6 }
7
8 function mdays(mon, year)
9 {
10 return (mon == 2) ? (28 + isleap(year)) : (30 + (mon + (mon > 7)) % 2)
11 }
12
13 function timegm(year, mon, mday, hour, min, sec)
14 {
15 while (--mon >= 1)
16 mday += mdays(mon, year)
17 while (--year >= 1970)
18 mday += 365 + isleap(year)
19 return (((((mday - 1) * 24) + hour) * 60) + min) * 60 + sec
20 }
21
22 function date_ical(str, offset,
23 year, mon, mday, hour, min)
24 {
25 year = substr(str, 1, 4)
26 mon = substr(str, 5, 2)
27 mday = substr(str, 7, 2)
28 hour = substr(str, 10, 2)
29 min = substr(str, 12, 2)
30 offset = (substr(str, 16, 1) == "Z" ? 0 : offset)
31 return timegm(year, mon, mday, hour, min, 0) - offset
32 }
33
34 BEGIN {
35 "date +%z" | getline offset_str
36 close("date +%z")
37 hour = substr($0, 4, 2)
38 min = substr($0, 6, 2)
39 tzoffset = substr(zone, 3, 1) hour * 3600 + min * 60
40
41 FS = "[:;]"
42 }
43
44 {
45 gsub("\r", ""); gsub("\t", "\\\\t")
46 gsub("^ *", ""); gsub(" *$", "")
47
48 if (match($0, "^ ")) {
49 event[type] = event[type] substr($0, 2, length($0) - 1)
50 } else {
51 type = $1
52 i = index($0, ":")
53 event[type] = substr($0, i + 1, length($0) - i)
54 }
55
56 if ($0 ~ /^END:VEVENT/)
57 printf("%d\t%d\t%s\t%s\t%s\t%s\n",
58 date_ical(event["DTSTART"], offset),
59 date_ical(event["DTEND"], offset),
60 event["CATEGORIES"],
61 event["LOCATION"],
62 event["SUMMARY"],
63 event["DESCRIPTION"])
64 }