aboutsummaryrefslogtreecommitdiff
path: root/parser.lua
diff options
context:
space:
mode:
Diffstat (limited to 'parser.lua')
-rw-r--r--parser.lua18
1 files changed, 18 insertions, 0 deletions
diff --git a/parser.lua b/parser.lua
index c3478dc..b5fb258 100644
--- a/parser.lua
+++ b/parser.lua
@@ -234,4 +234,22 @@ end
Parser.is_identifier = function(s)
return not not (NOMSU_DEFS.ident_char ^ 1 * -1):match(s)
end
+local inline_escaper = re.compile("{~ (%utf8_char / ('\\' -> '\\\\') / [ -~] / ('\n' -> '\\n') / ('\t' -> '\\t') / ('\b' -> '\\b') / ('\a' -> '\\a') / ('\v' -> '\\v') / ('\f' -> '\\f') / ('\r' -> '\\r') / ('\"' -> '\\\"') / (. -> escape))* ~}", {
+ utf8_char = NOMSU_DEFS.utf8_char,
+ escape = (function(self)
+ return ("\\%03d"):format(self:byte())
+ end)
+})
+Parser.inline_escape = function(s)
+ return inline_escaper:match(s)
+end
+local escaper = re.compile("{~ (%utf8_char / ('\\' -> '\\\\') / [\n\r\t -~] / (. -> escape))* ~}", {
+ utf8_char = NOMSU_DEFS.utf8_char,
+ escape = (function(self)
+ return ("\\%03d"):format(self:byte())
+ end)
+})
+Parser.escape = function(s)
+ return escaper:match(s)
+end
return Parser