tics2txt-back - 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-back (1335B)
---
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_text(str, offset,
23 year, mon, mday, hour, min)
24 {
25 year = substr(str, 1, 4)
26 mon = substr(str, 6, 2)
27 mday = substr(str, 9, 2)
28 hour = substr(str, 12, 2)
29 min = substr(str, 15, 2)
30 return timegm(year, mon, mday, hour, min, 0) - offset
31 }
32
33 {
34 gsub(/\t/, " ")
35 }
36
37 /^TZ[+-]/ {
38 hour = substr($0, 4, 2)
39 min = substr($0, 6, 2)
40 tzoffset = substr(zone, 3, 1) hour * 3600 + min * 60
41 next
42 }
43
44 /^[0-9]+-[0-9]+-[0-9]+ / {
45 time = date_text($1 " " $2, tzoffset)
46 row++
47 }
48
49 /^ / {
50 d = $0
51 sub(/^ */, "", d)
52 des = des " " d
53 }
54
55 /^$/ {
56 if (beg)
57 printf "%d\t%d\t%s\t%s\t%s\t%s\n", beg, end, cat, loc, sum, des
58 beg = end = cat = loc = sum = des = ""
59 }
60
61 row == 1 {
62 beg = time
63 sum = $0
64 sub(/^[^ ]+ +[^ ]+ +/, "", sum)
65 }
66
67 row == 2 {
68 end = time
69
70 line = $0
71 sub(/^[^ ]+ +[^ ]+ +/, "", line)
72
73 cat = line
74 sub(/\].*/, "", cat)
75 sub(/^\[/, "", cat)
76
77 loc = line
78 sub(/[^]]*\] */, "", loc)
79
80 row = 0
81 }