summaryrefslogtreecommitdiff
path: root/support/lualibs/lua-uca/lua-uca
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-11-11 03:00:56 +0000
committerNorbert Preining <norbert@preining.info>2021-11-11 03:00:56 +0000
commit5749e1b65a86cb035a8e4809e7383a98619b0984 (patch)
tree7f699c2ae9ef2ae3f063583650a343e0d37f66da /support/lualibs/lua-uca/lua-uca
parent3b9a500a47854adcb6f2a248722ae2225d6d7d43 (diff)
CTAN sync 202111110300
Diffstat (limited to 'support/lualibs/lua-uca/lua-uca')
-rw-r--r--support/lualibs/lua-uca/lua-uca/lua-uca-collator.lua18
1 files changed, 17 insertions, 1 deletions
diff --git a/support/lualibs/lua-uca/lua-uca/lua-uca-collator.lua b/support/lualibs/lua-uca/lua-uca/lua-uca-collator.lua
index c009bc9868..258b2a12e4 100644
--- a/support/lualibs/lua-uca/lua-uca/lua-uca-collator.lua
+++ b/support/lualibs/lua-uca/lua-uca/lua-uca-collator.lua
@@ -2,6 +2,11 @@
local math = require "math"
local tailoring_lib = require "lua-uca.lua-uca-tailoring"
local reordering_table = require "lua-uca.lua-uca-reordering-table"
+local uni_normalize
+-- in LuaTeX, load the lua-uni-normalize library
+if kpse then
+ uni_normalize = require "lua-uni-normalize"
+end
local collator = {}
collator.__index = collator
@@ -213,9 +218,20 @@ function collator:compare(a, b)
return #a < #b
end
+local codepoints_cache = {}
+
function collator:string_to_codepoints(a)
+ if codepoints_cache[a] then return codepoints_cache[a] end
+ -- try unicode normalization, if it is available
+ -- it uses libraries available in LuaTeX, so it doesn't work with
+ -- stock Lua
+ local normalized = a
+ if uni_normalize then
+ normalized = uni_normalize.NFC(a)
+ end
local codepoints = {}
- for _, code in utf8.codes(a) do codepoints[#codepoints+1] = code end
+ for _, code in utf8.codes(normalized) do codepoints[#codepoints+1] = code end
+ codepoints_cache[a] = codepoints
return codepoints
end