diff options
author | Philipp Gesang <phg@phi-gamma.net> | 2018-07-06 16:10:17 +0200 |
---|---|---|
committer | Philipp Gesang <phg@phi-gamma.net> | 2018-09-08 16:12:35 +0200 |
commit | 35aaedc729970ae2c5aa26738babd6c9939e338c (patch) | |
tree | ba482cd1dcb113c7125c1b66ba52d06b2ad1b7d4 | |
parent | ba120b9edec8a34b12bbc8b2530d890afc545364 (diff) | |
download | caldr-35aaedc729970ae2c5aa26738babd6c9939e338c.tar.gz |
rem, common: recognize multi-valued lines
For muliple values we simply concatenate the input with newlines.
None of the properties we implement so far need special
considerations in this regard.
-rw-r--r-- | common.lua | 14 | ||||
-rw-r--r-- | rem.lua | 3 |
2 files changed, 16 insertions, 1 deletions
@@ -24,6 +24,7 @@ local set_verbosity = function (n) verboselvl = n end local trim_whitespace local unescape_string +local internalize_value do local P = lpeg.P local S = lpeg.S @@ -41,10 +42,22 @@ do + (P"\\v" / "\v") local p_unescape = Cs ((p_escape_char + 1)^0) + --[[-- + + rfc2445, sec. 4.1.2: Properties can have multiple values, separated by a + literal comma, thus text commas are escaped. + + --]]-- + local p_value_char = ( p_escape_char + + P"\\," / "," + + P"," / "\n") + local p_value = Cs ((p_value_char + 1)^0) + local lpegmatch = lpeg.match trim_whitespace = function (s) return lpegmatch (p_ws_drop , s) end unescape_string = function (s) return lpegmatch (p_unescape, s) end + internalize_value = function (s) return lpegmatch (p_value, s) end end return @@ -55,5 +68,6 @@ return , set_verbosity = set_verbosity , trim_whitespace = trim_whitespace , unescape_string = unescape_string + , internalize_value = internalize_value } @@ -35,6 +35,7 @@ local noiseln = common.noiseln local debugln = common.debugln local trim_whitespace = common.trim_whitespace local unescape_string = common.unescape_string +local internalize_value = common.internalize_value local seconds_of_time = function (t) return t % 60 @@ -261,7 +262,7 @@ local rem_of_vcalendars do end local string_of_textdata = function (val) - local sane = unescape_string (val.value) + local sane = internalize_value (val.value) return trim_whitespace (sane) end |