diff options
Diffstat (limited to 'tex/context/base/util-tpl.lua')
-rw-r--r-- | tex/context/base/util-tpl.lua | 34 |
1 files changed, 9 insertions, 25 deletions
diff --git a/tex/context/base/util-tpl.lua b/tex/context/base/util-tpl.lua index 67d058221..7a6abefd6 100644 --- a/tex/context/base/util-tpl.lua +++ b/tex/context/base/util-tpl.lua @@ -17,8 +17,8 @@ local trace_template = false trackers.register("templates.trace",function(v) t local report_template = logs.reporter("template") local tostring = tostring -local format, sub, byte = string.format, string.sub, string.byte -local P, C, R, Cs, Cc, Carg, lpegmatch, lpegpatterns = lpeg.P, lpeg.C, lpeg.R, lpeg.Cs, lpeg.Cc, lpeg.Carg, lpeg.match, lpeg.patterns +local format, sub = string.format, string.sub +local P, C, Cs, Carg, lpegmatch = lpeg.P, lpeg.C, lpeg.Cs, lpeg.Carg, lpeg.match -- todo: make installable template.new @@ -52,10 +52,7 @@ local sqlescape = lpeg.replacer { -- { "\t", "\\t" }, } -local sqlquoted = lpeg.Cs(lpeg.Cc("'") * sqlescape * lpeg.Cc("'")) - -lpegpatterns.sqlescape = sqlescape -lpegpatterns.sqlquoted = sqlquoted +local sqlquotedescape = lpeg.Cs(lpeg.Cc("'") * sqlescape * lpeg.Cc("'")) -- escapeset : \0\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\17\18\19\20\21\22\23\24\25\26\27\28\29\30\31\"\\\127 -- test string: [[1\0\31test23"\\]] .. string.char(19) .. "23" @@ -71,7 +68,7 @@ lpegpatterns.sqlquoted = sqlquoted -- } -- -- slightly faster: - +-- -- local luaescape = Cs (( -- P('"' ) / [[\"]] + -- P('\\') / [[\\]] + @@ -81,16 +78,9 @@ lpegpatterns.sqlquoted = sqlquoted -- P(1) -- )^0) ------ xmlescape = lpegpatterns.xmlescape ------ texescape = lpegpatterns.texescape -local luaescape = lpegpatterns.luaescape ------ sqlquoted = lpegpatterns.sqlquoted ------ luaquoted = lpegpatterns.luaquoted - local escapers = { lua = function(s) - -- return sub(format("%q",s),2,-2) - return lpegmatch(luaescape,s) + return sub(format("%q",s),2,-2) end, sql = function(s) return lpegmatch(sqlescape,s) @@ -99,14 +89,16 @@ local escapers = { local quotedescapers = { lua = function(s) - -- return lpegmatch(luaquoted,s) return format("%q",s) end, sql = function(s) - return lpegmatch(sqlquoted,s) + return lpegmatch(sqlquotedescape,s) end, } +lpeg.patterns.sqlescape = sqlescape +lpeg.patterns.sqlescape = sqlquotedescape + local luaescaper = escapers.lua local quotedluaescaper = quotedescapers.lua @@ -159,14 +151,6 @@ end templates.replace = replace -function templates.replacer(str,how,recurse) -- reads nicer - return function(mapping) - return lpegmatch(replacer,str,1,mapping,how or "lua",recurse or false) or str - end -end - --- local cmd = templates.replacer([[foo %bar%]]) print(cmd { bar = "foo" }) - function templates.load(filename,mapping,how,recurse) local data = io.loaddata(filename) or "" if mapping and next(mapping) then |