diff options
author | Philipp Gesang <phg@phi-gamma.net> | 2018-07-06 10:10:05 +0200 |
---|---|---|
committer | Philipp Gesang <phg@phi-gamma.net> | 2018-09-08 16:12:34 +0200 |
commit | 78bde1b41e5cb692ea9ffbfff4d35edf3162dcdf (patch) | |
tree | 28e73d3dc2899c80abaafe2af66367fce91989cb /common.lua | |
parent | 87ce8402c1c3c62dadce1537bd255c27c94959eb (diff) | |
download | caldr-78bde1b41e5cb692ea9ffbfff4d35edf3162dcdf.tar.gz |
rem, common: handle string sanitization
Diffstat (limited to 'common.lua')
-rw-r--r-- | common.lua | 39 |
1 files changed, 34 insertions, 5 deletions
@@ -1,3 +1,5 @@ +local lpeg = require "lpeg" + local string = require "string" local stringformat = string.format @@ -20,11 +22,38 @@ end local set_verbosity = function (n) verboselvl = n end +local trim_whitespace +local unescape_string +do + local P = lpeg.P + local S = lpeg.S + local Cs = lpeg.Cs + local p_ws_char = S" \n\r\t\v" + local p_ws = p_ws_char^1 + local p_ws_trailing = p_ws * P (-1) + local p_ws_drop = Cs ( (p_ws^-1 / "") + * (1 - p_ws_trailing)^0 + * (p_ws^-1 * P (-1) / "")) + + local p_escape_char = (P"\\n" / "\n") + + (P"\\r" / "\r") + + (P"\\t" / "\t") + + (P"\\v" / "\v") + local p_unescape = Cs ((p_escape_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 +end + return - { println = mk_out ("stdout", 0, true) - , errorln = mk_out ("stderr", 0, true) - , noiseln = mk_out ("stderr", 1, true) - , debugln = mk_out ("stderr", 2, true) - , set_verbosity = set_verbosity + { println = mk_out ("stdout", 0, true) + , errorln = mk_out ("stderr", 0, true) + , noiseln = mk_out ("stderr", 1, true) + , debugln = mk_out ("stderr", 2, true) + , set_verbosity = set_verbosity + , trim_whitespace = trim_whitespace + , unescape_string = unescape_string } |