Home
       ttical-ics-tsv - ics2txt - convert icalendar .ics file to plain text
  HTML git clone git://bitreich.org/ics2txt git://hg6vgqziawt5s4dj.onion/ics2txt
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR README
       ---
       ttical-ics-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 }