| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- 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
|