diff --git a/src/awk/attach.awk b/src/awk/attach.awk index 4ab6599..3f2b7bb 100644 --- a/src/awk/attach.awk +++ b/src/awk/attach.awk @@ -15,21 +15,21 @@ function write_attachment( line, aline, fl) { fl = 1 while (getline aline = 73) { - print substr(line, 1, 73) - line = substr(line, 74) + if (fl && length(line) >= 72) { + print substr(line, 1, 72)"\r" + line = substr(line, 73) fl = 0 } - while (length(line) >= 72) { - print " "substr(line, 1, 72) - line = substr(line, 73) + while (length(line) >= 71) { + print " "substr(line, 1, 71)"\r" + line = substr(line, 72) } } if (line) - print " "line + print " "line"\r" } # AWK program -/^END:VEVENT$/ { write_attachment() } +/^END:VEVENT/ { write_attachment() } { print } diff --git a/src/awk/attachdd.awk b/src/awk/attachdd.awk index 14643f7..40b87d5 100644 --- a/src/awk/attachdd.awk +++ b/src/awk/attachdd.awk @@ -1,4 +1,5 @@ BEGIN { FS="[:;]" } +{ gsub("\r", "") } /^END:VEVENT$/ { ins = 0; exit } /^[^ ]/ && a { a = 0 } /^ / && a && p { print substr($0, 2); } diff --git a/src/awk/attachls.awk b/src/awk/attachls.awk index d3361fc..442e893 100644 --- a/src/awk/attachls.awk +++ b/src/awk/attachls.awk @@ -34,6 +34,7 @@ function att_info(i, str, cnt, k, info) { } BEGIN { FS="[:;]"; OFS="\t" } +{ gsub("\r", "") } /^END:VEVENT$/ { ins = 0; exit } l && !r { att_info(i, l); l = "" } /^ / && r { l = l substr($0, 2); r = cont_reading($0) } diff --git a/src/awk/attachrm.awk b/src/awk/attachrm.awk index d584f92..a767e44 100644 --- a/src/awk/attachrm.awk +++ b/src/awk/attachrm.awk @@ -4,10 +4,10 @@ ## @assign id: Attachment number to remove BEGIN { FS="[:;]" } -/^END:VEVENT$/ { ins = 0 } +/^END:VEVENT/ { ins = 0 } /^[^ ]/ && a { a = 0 } /^ / && a { next } /^ATTACH/ && ins { i++; } /^ATTACH/ && ins && i == id { a = 1; next } -/^BEGIN:VEVENT$/ { ins = 1 } +/^BEGIN:VEVENT/ { ins = 1 } { print } diff --git a/src/awk/has.awk b/src/awk/has.awk index d310931..6ab999d 100644 --- a/src/awk/has.awk +++ b/src/awk/has.awk @@ -5,6 +5,7 @@ # AWK program BEGIN { FS = "[:;]" } + { gsub("\r", "") } /^BEGIN:VEVENT$/ { ins = 1 } /^END:VEVENT$/ { exit 1 } ins && $1 == field { exit 0 } diff --git a/src/awk/new.awk b/src/awk/new.awk index 0f7b437..da96aff 100644 --- a/src/awk/new.awk +++ b/src/awk/new.awk @@ -83,23 +83,23 @@ END { } # print ical - print "BEGIN:VCALENDAR" - print "VERSION:2.0" - print "CALSCALE:GREGORIAN" - print "PRODID:-//fab//awk//EN" - print "BEGIN:VEVENT" - print "DTSTAMP:" zulu - print "UID:" uid - print "CLASS:PRIVATE" - print "CREATED:" zulu - print "SEQUENCE:1" - print "LAST-MODIFIED:" zulu - print "STATUS:CONFIRMED" - print "DTSTART;VALUE=" from_type ":" from - print "DTEND;VALUE=" to_type ":" to + print_cr("BEGIN:VCALENDAR") + print_cr("VERSION:2.0") + print_cr("CALSCALE:GREGORIAN") + print_cr("PRODID:-//fab//awk//EN") + print_cr("BEGIN:VEVENT") + print_cr("DTSTAMP:" zulu) + print_cr("UID:" uid) + print_cr("CLASS:PRIVATE") + print_cr("CREATED:" zulu) + print_cr("SEQUENCE:1") + print_cr("LAST-MODIFIED:" zulu) + print_cr("STATUS:CONFIRMED") + print_cr("DTSTART;VALUE=" from_type ":" from) + print_cr("DTEND;VALUE=" to_type ":" to) if (summary) print_fold("SUMMARY:", summary) if (desc) print_fold("DESCRIPTION:", desc) if (location) print_fold("LOCATION:", location) - print "END:VEVENT" - print "END:VCALENDAR" + print_cr("END:VEVENT") + print_cr("END:VCALENDAR") } diff --git a/src/awk/set.awk b/src/awk/set.awk index 6bba546..f7d0b7a 100644 --- a/src/awk/set.awk +++ b/src/awk/set.awk @@ -9,19 +9,20 @@ @include "lib/awk/icalendar.awk" BEGIN { FS = "[:;]"; zulu = strftime("%Y%m%dT%H%M%SZ", systime(), 1) } + { gsub("\r", "") } /^BEGIN:VEVENT$/ { inside = 1 } /^END:VEVENT$/ { inside = 0 if (!duplic) - print field ":" escape(value) + print_fold(field":", escape(value)) seq = seq ? seq + 1 : 1 - print "SEQUENCE:" seq - print "LAST-MODIFIED:" zulu + print_cr("SEQUENCE:" seq) + print_cr("LAST-MODIFIED:" zulu) } -$1 == field && inside { con = 1; duplic = 1; print field ":" escape(value); next } +$1 == field && inside { con = 1; duplic = 1; print_fold(field":", escape(value)); next } $1 == field && duplic { con = 1; next } /^ / && con { next } /^[^ ]/ && con { con = 0 } /^SEQUENCE/ && inside { seq = $2; next } # store sequence number and skip /^LAST-MODIFIED/ && inside { next } -{ print } +{ print_cr($0) } diff --git a/src/awk/update.awk b/src/awk/update.awk index 8d662c6..8df534a 100644 --- a/src/awk/update.awk +++ b/src/awk/update.awk @@ -84,10 +84,10 @@ NR == FNR { { gsub("\r", "") } /^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_cr("SEQUENCE:" seq) + print_cr("LAST-MODIFIED:" zulu) + print_cr("DTSTART;VALUE=" from_type ":" from) + print_cr("DTEND;VALUE=" to_type ":" to) print_fold("SUMMARY:", summary) print_fold("DESCRIPTION:", desc) print_fold("LOCATION:", location) @@ -100,4 +100,4 @@ NR == FNR { /^(DTSTART|DTEND|SUMMARY|LOCATION|CATEGORIES|DESCRIPTION|LAST-MODIFIED)/ && inside { skipf = 1; next } # skip for now, we will write updated fields at the end /^X-ALT-DESC/ && inside { skipf = 1; next } # skip /^SEQUENCE/ && inside { seq = $2; next } # store sequence number and skip -{ print } +{ print_cr($0) } diff --git a/src/lib/awk/icalendar.awk b/src/lib/awk/icalendar.awk index 4f257ce..7b0b83b 100644 --- a/src/lib/awk/icalendar.awk +++ b/src/lib/awk/icalendar.awk @@ -11,6 +11,14 @@ function escape(str) return str } +# Print line using \r\n ending, as required by the RFC +# +# @input str: String +function print_cr(str) +{ + print str "\r" +} + # Print property with its content and fold according to the iCalendar # specification. # @@ -19,16 +27,16 @@ function escape(str) # @input content: Escaped content function print_fold(nameparam, content, i, s) { - i = 74 - length(nameparam) + i = 73 - length(nameparam) s = substr(content, 1, i) - print nameparam s - s = substr(content, i+1, 73) - i = i + 73 + print_cr(nameparam s) + s = substr(content, i+1, 72) + i = i + 72 while (s) { - print " " s - s = substr(content, i+1, 73) - i = i + 73 + print_cr(" " s) + s = substr(content, i+1, 72) + i = i + 72 } }