summaryrefslogtreecommitdiff
path: root/tex/context/base/l-unicode.lua
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2014-07-09 10:26:00 +0200
committerHans Hagen <pragma@wxs.nl>2014-07-09 10:26:00 +0200
commit305f6529b5970f953803716fb0e475c7f52ff3b5 (patch)
treecb12e68f1c1aa8e22a7a3f06bd7bc91f63add0b8 /tex/context/base/l-unicode.lua
parent19e6c5feec9f26dd796a135d3f2924b9b15a998a (diff)
downloadcontext-305f6529b5970f953803716fb0e475c7f52ff3b5.tar.gz
beta 2014.07.09 10:26
Diffstat (limited to 'tex/context/base/l-unicode.lua')
-rw-r--r--tex/context/base/l-unicode.lua32
1 files changed, 24 insertions, 8 deletions
diff --git a/tex/context/base/l-unicode.lua b/tex/context/base/l-unicode.lua
index be61f3d73..fb4ea37fa 100644
--- a/tex/context/base/l-unicode.lua
+++ b/tex/context/base/l-unicode.lua
@@ -34,25 +34,29 @@ local type = type
local char, byte, format, sub, gmatch = string.char, string.byte, string.format, string.sub, string.gmatch
local concat = table.concat
local P, C, R, Cs, Ct, Cmt, Cc, Carg, Cp = lpeg.P, lpeg.C, lpeg.R, lpeg.Cs, lpeg.Ct, lpeg.Cmt, lpeg.Cc, lpeg.Carg, lpeg.Cp
-local lpegmatch, patterns = lpeg.match, lpeg.patterns
-local bytepairs = string.bytepairs
+local lpegmatch = lpeg.match
+local patterns = lpeg.patterns
+local tabletopattern = lpeg.utfchartabletopattern
-local finder = lpeg.finder
-local replacer = lpeg.replacer
+local bytepairs = string.bytepairs
-local utfvalues = utf.values
-local utfgmatch = utf.gmatch -- not always present
+local finder = lpeg.finder
+local replacer = lpeg.replacer
+
+local utfvalues = utf.values
+local utfgmatch = utf.gmatch -- not always present
local p_utftype = patterns.utftype
local p_utfstricttype = patterns.utfstricttype
local p_utfoffset = patterns.utfoffset
-local p_utf8char = patterns.utf8char
+local p_utf8char = patterns.utf8character
local p_utf8byte = patterns.utf8byte
local p_utfbom = patterns.utfbom
local p_newline = patterns.newline
local p_whitespace = patterns.whitespace
+
if not unicode then
unicode = { utf = utf } -- for a while
@@ -510,8 +514,20 @@ end
-- a replacement for simple gsubs:
+-- function utf.remapper(mapping)
+-- local pattern = Cs((p_utf8char/mapping)^0)
+-- return function(str)
+-- if not str or str == "" then
+-- return ""
+-- else
+-- return lpegmatch(pattern,str)
+-- end
+-- end, pattern
+-- end
+
function utf.remapper(mapping)
- local pattern = Cs((p_utf8char/mapping)^0)
+ 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 ""