dotfiles/multimedia/.config/mpv/scripts/uosc/lib/char_conv.lua
2024-04-20 09:27:09 +02:00

73 lines
1.6 KiB
Lua

require('lib/text')
local char_dir = mp.get_script_directory() .. '/char-conv/'
local data = {}
local languages = get_languages()
for i = #languages, 1, -1 do
lang = languages[i]
if (lang == 'en') then
data = {}
else
table_assign(data, get_locale_from_json(char_dir .. lang:lower() .. '.json'))
end
end
local romanization = {}
local function get_romanization_table()
for k, v in pairs(data) do
for _, char in utf8_iter(v) do
romanization[char] = k
end
end
end
get_romanization_table()
function need_romanization()
return next(romanization) ~= nil
end
function char_conv(chars, use_ligature, has_separator)
local separator = has_separator or ' '
local length = 0
local char_conv, sp, cache = {}, {}, {}
local chars_length = utf8_length(chars)
local concat = table.concat
for _, char in utf8_iter(chars) do
if use_ligature then
if #char == 1 then
char_conv[#char_conv + 1] = char
else
char_conv[#char_conv + 1] = romanization[char] or char
end
else
length = length + 1
if #char <= 2 then
if (char ~= ' ' and length ~= chars_length) then
cache[#cache + 1] = romanization[char] or char
elseif (char == ' ' or length == chars_length) then
if length == chars_length then
cache[#cache + 1] = romanization[char] or char
end
sp[#sp + 1] = concat(cache)
itable_clear(cache)
end
else
if next(cache) ~= nil then
sp[#sp + 1] = concat(cache)
itable_clear(cache)
end
sp[#sp + 1] = romanization[char] or char
end
end
end
if use_ligature then
return concat(char_conv)
else
return concat(sp, separator)
end
end
return char_conv