initial commit
This commit is contained in:
14
src/merge.awk
Normal file
14
src/merge.awk
Normal file
@@ -0,0 +1,14 @@
|
||||
BEGIN { FS="|"; i=0; dlt = -259200; spw = 604800; }
|
||||
NR == FNR {
|
||||
i = i + 1;
|
||||
from[i] = int(($1 + dtl)/ spw);
|
||||
getline;
|
||||
to[i] = int(($1 + dlt) / spw);
|
||||
next
|
||||
} # Load start and end week numbers from first file
|
||||
|
||||
{ for(i=from[FNR]; i<=to[FNR]; i++) {
|
||||
week[i] = week[i] ? week[i] ";" $3 : $3
|
||||
}
|
||||
}
|
||||
END { for (i in week) print i, week[i]; }
|
58
src/parse.awk
Normal file
58
src/parse.awk
Normal file
@@ -0,0 +1,58 @@
|
||||
function parse( dt) {
|
||||
# Get timezone information
|
||||
dt = "";
|
||||
for (i=2; i<NF-1; i+=2) {
|
||||
if ($i == "TZID") {
|
||||
dt = "TZ=\"" $(i+1) "\" ";
|
||||
break;
|
||||
}
|
||||
}
|
||||
# Get date/datetime
|
||||
return length($NF) == 8 ?
|
||||
dt $NF :
|
||||
dt gensub(/^([0-9]{8})T([0-9]{2})([0-9]{2})([0-9]{2})(Z)?$/, "\\1 \\2:\\3:\\4\\5", "g", $NF);
|
||||
}
|
||||
|
||||
function parse_duration( dt, dta, i, n, a, seps) {
|
||||
n = split($NF, a, /[PTWHMSD]/, seps);
|
||||
delete dta;
|
||||
for (i=2; i<=n; i++) {
|
||||
if(seps[i] == "W") dta["weeks"] = a[i];
|
||||
if(seps[i] == "H") dta["hours"] = a[i];
|
||||
if(seps[i] == "M") dta["minutes"] = a[i];
|
||||
if(seps[i] == "S") dta["seconds"] = a[i];
|
||||
if(seps[i] == "D") dta["days"] = a[i];
|
||||
}
|
||||
dt = a[1] ? a[1] : "+";
|
||||
for (i in dta) {
|
||||
dt = dt " " dta[i] " " i;
|
||||
}
|
||||
return dt;
|
||||
}
|
||||
|
||||
function print_data(start, dur, end, summary, cmd) {
|
||||
summary = substr(summary, index(summary, ":") + 1);
|
||||
#gsub("\\\\n", "\n", summary); # one-liner
|
||||
#gsub("\\\\N", "\n", summary); # one-liner
|
||||
gsub("\\\\,", ",", summary);
|
||||
gsub("\\\\;", ";", summary);
|
||||
gsub("\\\\\\\\", "\\", summary);
|
||||
end = dur ? start " " end : end
|
||||
cmd = "date -d '" start "' +\"%s\""
|
||||
cmd | getline start
|
||||
close(cmd)
|
||||
cmd = "date -d '" end "' +\"%s\""
|
||||
cmd | getline end
|
||||
close(cmd)
|
||||
print start, end, summary
|
||||
}
|
||||
|
||||
BEGIN { FS="[:;=]"; }
|
||||
/^END:VEVENT/ && inside { print_data(start, dur, end, summary, cmd); exit }
|
||||
/^DTSTART/ && inside { start = parse( dt) }
|
||||
/^DTEND/ && inside { end = parse( dt) }
|
||||
/^DURATION/ && inside { end = parse_duration( dt, dta, i, n, a, seps); dur = 1 }
|
||||
/^[^ ]/ && rs { rs = 0 }
|
||||
/^ / && rs { summary = summary substr($0, 2); }
|
||||
/^SUMMARY/ && inside { rs = 1; summary = $0; }
|
||||
/^BEGIN:VEVENT/ { inside = 1 }
|
44
src/weeks.awk
Normal file
44
src/weeks.awk
Normal file
@@ -0,0 +1,44 @@
|
||||
function parse( dt) {
|
||||
# Get timezone information
|
||||
dt = "";
|
||||
for (i=2; i<NF-1; i+=2) {
|
||||
if ($i == "TZID") {
|
||||
dt = "TZ=\"" $(i+1) "\" ";
|
||||
break;
|
||||
}
|
||||
}
|
||||
# Get date/datetime
|
||||
return length($NF) == 8 ?
|
||||
dt $NF :
|
||||
dt gensub(/^([0-9]{8})T([0-9]{2})([0-9]{2})([0-9]{2})(Z)?$/, "\\1 \\2:\\3:\\4\\5", "g", $NF);
|
||||
}
|
||||
|
||||
function parse_duration( dt, dta, i, n, a, seps) {
|
||||
n = split($NF, a, /[PTWHMSD]/, seps);
|
||||
delete dta;
|
||||
for (i=2; i<=n; i++) {
|
||||
if(seps[i] == "W") dta["weeks"] = a[i];
|
||||
if(seps[i] == "H") dta["hours"] = a[i];
|
||||
if(seps[i] == "M") dta["minutes"] = a[i];
|
||||
if(seps[i] == "S") dta["seconds"] = a[i];
|
||||
if(seps[i] == "D") dta["days"] = a[i];
|
||||
}
|
||||
dt = a[1] ? a[1] : "+";
|
||||
for (i in dta) {
|
||||
dt = dt " " dta[i] " " i;
|
||||
}
|
||||
return dt;
|
||||
}
|
||||
|
||||
function fn(path, n, a) {
|
||||
n = split(path, a, "/");
|
||||
return a[n-1] "/" a[n];
|
||||
}
|
||||
|
||||
BEGIN { FS="[:;=]"; OFS="|" }
|
||||
BEGINFILE { inside = 0; dur = 0; start = "ERROR"; end = "ERROR" }
|
||||
/^END:VEVENT/ { print start, dur ? start " " end : end, fn(FILENAME, n, a); nextfile }
|
||||
/^DTSTART/ && inside { start = parse( dt) }
|
||||
/^DTEND/ && inside { end = parse( dt) }
|
||||
/^DURATION/ && inside { end = parse_duration( dt, dta, i, n, a, seps); dur = 1 }
|
||||
/^BEGIN:VEVENT/ { inside = 1 }
|
22
src/weekview.awk
Normal file
22
src/weekview.awk
Normal file
@@ -0,0 +1,22 @@
|
||||
function c() {
|
||||
return substr($0, index($0, ">") + 1) " " RED "/" OFF
|
||||
}
|
||||
BEGIN {
|
||||
GREEN = "\033[1;32m";
|
||||
RED = "\033[1;31m";
|
||||
WHITE = "\033[1;97m";
|
||||
CYAN = "\033[1;36m";
|
||||
FAINT = "\033[2m";
|
||||
OFF = "\033[m";
|
||||
}
|
||||
/^[0-7] 00:00 -- 00:00/ { dayline = dayline " " c(); next }
|
||||
/^[0-7] 00:00 -- / { dayline = dayline " <-|" $4 " " c(); next }
|
||||
/^[0-7] [0-9]{2}:[0-9]{2} -- 00:00/ { dayline = dayline " " $2 "|-> " c(); next }
|
||||
/^[0-7] [0-9]{2}:[0-9]{2} -- [0-9]{2}:[0-9]{2}/ { dayline = dayline " " $2 " - " $4 " " c(); next }
|
||||
/^[0-7]$/ && dayline { print dayline; }
|
||||
/^[0-7]$/ {
|
||||
cmd = "date -d '" startofweek " +" $0 " days' +\"%a %e %b %Y\"";
|
||||
cmd | getline dayline;
|
||||
close(cmd);
|
||||
dayline = GREEN dayline ": " OFF
|
||||
}
|
Reference in New Issue
Block a user