summaryrefslogtreecommitdiff
path: root/tex/context/base/l-unicode.lua
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2014-08-21 09:56:00 +0200
committerHans Hagen <pragma@wxs.nl>2014-08-21 09:56:00 +0200
commit236b439da00fe0baaf9d7ad6ce684ecd6109555c (patch)
treee956172d575edd18d634605bfcf607ab96911ec1 /tex/context/base/l-unicode.lua
parent7169f20fa4a82724c4050f1c2756b303db5e2749 (diff)
downloadcontext-236b439da00fe0baaf9d7ad6ce684ecd6109555c.tar.gz
beta 2014.08.21 09:56
Diffstat (limited to 'tex/context/base/l-unicode.lua')
-rw-r--r--tex/context/base/l-unicode.lua46
1 files changed, 34 insertions, 12 deletions
diff --git a/tex/context/base/l-unicode.lua b/tex/context/base/l-unicode.lua
index fb4ea37fa..d75779267 100644
--- a/tex/context/base/l-unicode.lua
+++ b/tex/context/base/l-unicode.lua
@@ -525,23 +525,45 @@ end
-- end, pattern
-- end
-function utf.remapper(mapping)
- local pattern = type(mapping) == "table" and tabletopattern(mapping) or p_utf8char
- local pattern = Cs((pattern/mapping + p_utf8char)^0)
- return function(str)
- if not str or str == "" then
- return ""
+function utf.remapper(mapping,option) -- static also returns a pattern
+ if type(mapping) == "table" then
+ if option == "dynamic" then
+ local pattern = false
+ table.setmetatablenewindex(mapping,function(t,k,v) rawset(t,k,v) pattern = false end)
+ return function(str)
+ if not str or str == "" then
+ return ""
+ else
+ if not pattern then
+ pattern = Cs((tabletopattern(mapping)/mapping + p_utf8char)^0)
+ end
+ return lpegmatch(pattern,str)
+ end
+ end
+ elseif option == "pattern" then
+ return Cs((tabletopattern(mapping)/mapping + p_utf8char)^0)
+ -- elseif option == "static" then
else
- return lpegmatch(pattern,str)
+ local pattern = Cs((tabletopattern(mapping)/mapping + p_utf8char)^0)
+ return function(str)
+ if not str or str == "" then
+ return ""
+ else
+ return lpegmatch(pattern,str)
+ end
+ end, pattern
+ end
+ else
+ -- is actually an error
+ return function(str)
+ return str or ""
end
- end, pattern
+ end
end
-- local remap = utf.remapper { a = 'd', b = "c", c = "b", d = "a" }
-- print(remap("abcd 1234 abcd"))
---
-
function utf.replacer(t) -- no precheck, always string builder
local r = replacer(t,false,false,true)
return function(str)
@@ -954,8 +976,8 @@ end
-- end
-- end
-local _, l_remap = utf.remapper(little)
-local _, b_remap = utf.remapper(big)
+local l_remap = utf.remapper(little,"pattern")
+local b_remap = utf.remapper(big,"pattern")
function utf.utf8_to_utf16_be(str,nobom)
if nobom then