72 lines
1.6 KiB
Lua
72 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
|