diff options
author | Norbert Preining <norbert@preining.info> | 2021-11-11 03:00:56 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2021-11-11 03:00:56 +0000 |
commit | 5749e1b65a86cb035a8e4809e7383a98619b0984 (patch) | |
tree | 7f699c2ae9ef2ae3f063583650a343e0d37f66da /support/lualibs/lua-uca/lua-uca | |
parent | 3b9a500a47854adcb6f2a248722ae2225d6d7d43 (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.lua | 18 |
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 |