update functionality
This commit is contained in:
102
src/awk/update.awk
Normal file
102
src/awk/update.awk
Normal file
@@ -0,0 +1,102 @@
|
||||
function getcontent(content_line, prop)
|
||||
{
|
||||
return substr(content_line[prop], index(content_line[prop], ":") + 1);
|
||||
}
|
||||
|
||||
function escape(str)
|
||||
{
|
||||
gsub("\\\\", "\\\\", str);
|
||||
gsub(";", "\\\\;", str);
|
||||
gsub(",", "\\\\,", str);
|
||||
}
|
||||
|
||||
function print_fold(nameparam, content, i, s)
|
||||
{
|
||||
i = 74 - length(nameparam);
|
||||
s = substr(content, 1, i);
|
||||
print nameparam s;
|
||||
s = substr(content, i+1, 73);
|
||||
i = i + 73;
|
||||
while (s)
|
||||
{
|
||||
print " " s;
|
||||
s = substr(content, i+1, 73);
|
||||
i = i + 73;
|
||||
}
|
||||
}
|
||||
|
||||
BEGIN {
|
||||
FS=":";
|
||||
zulu = strftime("%Y%m%dT%H%M%SZ", systime(), 1);
|
||||
}
|
||||
|
||||
ENDFILE {
|
||||
if (NR == FNR)
|
||||
{
|
||||
# Sanitize input
|
||||
cmd = "date +\"%R\""
|
||||
cmd | getline now
|
||||
close(cmd)
|
||||
# if time is set to 00:00 or right now, assume it's a date
|
||||
# and not a datetime entry.
|
||||
from = from ? from : "now"
|
||||
cmd = "date -d \"" from "\" +\"%R\"";
|
||||
cmd | getline t
|
||||
close(cmd)
|
||||
if (t == "00:00" || t == now) {
|
||||
from_type = "DATE"
|
||||
cmd = "date -d \"" from "\" +\"%Y%m%d\"";
|
||||
} else {
|
||||
from_type = "DATE-TIME"
|
||||
cmd = "date -d \"" from "\" +\"@%s\" | xargs date -u +\"%Y%m%dT%H%M00Z\" -d"
|
||||
}
|
||||
cmd | getline from
|
||||
close(cmd)
|
||||
#
|
||||
to = to ? to : "now"
|
||||
cmd = "date -d \"" to "\" +\"%R\"";
|
||||
cmd | getline t
|
||||
close(cmd)
|
||||
if (t == "00:00" || t == now) {
|
||||
to_type = "DATE"
|
||||
cmd = "date -d \"" to "\" +\"%Y%m%d\"";
|
||||
} else {
|
||||
to_type = "DATE-TIME"
|
||||
cmd = "date -d \"" to "\" +\"@%s\" | xargs date -u +\"%Y%m%dT%H%M00Z\" -d"
|
||||
}
|
||||
cmd | getline to
|
||||
close(cmd)
|
||||
}
|
||||
escape(summary);
|
||||
escape(desc);
|
||||
}
|
||||
|
||||
NR == FNR && desc { desc = desc "\\n" $0; next; }
|
||||
NR == FNR {
|
||||
from = substr($0, 1, 6) == "::: |>" ? substr($0, 8) : "";
|
||||
getline
|
||||
to = substr($0, 1, 6) == "::: <|" ? substr($0, 8) : "";
|
||||
getline
|
||||
summary = substr($0, 1, 2) == "# " ? substr($0, 3) : ""
|
||||
getline # This line should be empty
|
||||
getline # First line of description
|
||||
desc = $0;
|
||||
next;
|
||||
}
|
||||
|
||||
/^BEGIN:VEVENT$/ { inside = 1; print; next }
|
||||
/^X-ALT-DESC/ && inside { next } # drop this alternative description
|
||||
/^ / && inside { next } # drop this folded line (the only content with folded lines will be updated)
|
||||
/^(DTSTART|DTEND|SUMMARY|CATEGORIES|DESCRIPTION|LAST-MODIFIED)/ && inside { next } # skip for now, we will write updated fields at the end
|
||||
/^SEQUENCE/ && inside { seq = $2; next } # store sequence number and skip
|
||||
/^END:VEVENT$/ {
|
||||
seq = seq ? seq + 1 : 1
|
||||
print "SEQUENCE:" seq
|
||||
print "LAST-MODIFIED:" zulu
|
||||
print "DTSTART;VALUE=" from_type ":" from
|
||||
print "DTEND;VALUE=" to_type ":" to
|
||||
print_fold("SUMMARY:", summary, i, s)
|
||||
print_fold("DESCRIPTION:", desc, i, s)
|
||||
inside = ""
|
||||
}
|
||||
{ print }
|
Reference in New Issue
Block a user