summaryrefslogtreecommitdiff
path: root/lualibs-unicode.lua
diff options
context:
space:
mode:
authorPhilipp Gesang <phg42.2a@gmail.com>2014-07-09 20:28:11 +0200
committerPhilipp Gesang <phg42.2a@gmail.com>2014-07-09 20:28:11 +0200
commitcdd478fce0ba30e0a2f7af7604b05bb34e392a88 (patch)
tree959df2d100d0937da5de5ad77856708482560b14 /lualibs-unicode.lua
parented0275bf230dfa5ef7d8e48d81948d4a52b193c7 (diff)
downloadlualibs-cdd478fce0ba30e0a2f7af7604b05bb34e392a88.tar.gz
sync with Context as of 2014-07-09
Diffstat (limited to 'lualibs-unicode.lua')
-rw-r--r--lualibs-unicode.lua32
1 files changed, 24 insertions, 8 deletions
diff --git a/lualibs-unicode.lua b/lualibs-unicode.lua
index be61f3d..fb4ea37 100644
--- a/lualibs-unicode.lua
+++ b/lualibs-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 ""