Перейти до вмісту

Модуль:Automatic transliteration

Матеріал з Вікіпедії — вільної енциклопедії.
{{i}} Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]

Рання версія модуля, що робить автоматичне створення транслітерації на основі вхідного тексту.

Використання

[ред. код]

{{#invoke:Automatic transliteration|назва функції}}

local data = require ('Модуль:Automatic transliteration/data')
local invert = require('Модуль:TableTools').invert 

local function split(test, separator)
	if not (test and (test ~= '') and separator and (separator ~= '')) then
		return ''
	end
	
	test = test .. separator
	local splitted_table = test:gmatch('(%S+),%s*')
	
   return splitted_table
end

local function invert_pairs (a_table)
	local inverted_table = {}
	for key, item in pairs(a_table) do
		inverted_table[item] = key
	end
	
	return inverted_table
end	

local function create_text (base_text, table_name, is_invert)
	return mw.ustring.gsub(base_text, '.', is_invert and invert_pairs(data[table_name]) or data[table_name])
end	

local function get_abbr_name(system_name)
	local name = data.jaAbbrName[system_name]
	return name .. ': '
end	

local function look_for_transliteration (text, language)
	for i, item in ipairs(data.jaFeature_obj) do
		if mw.ustring.match(text, item) then
			return data.jaFeature_name[i]
		end
	end	
end

local function formated_text (base_text, language, systems, is_trans)
	local table_name
	local formed_text = ''
	
	if is_trans then
		local transl_name = look_for_transliteration(base_text, language)
		base_text = create_text(base_text, transl_name, true)
		error(base_text)
		systems = systems .. ', ' .. transl_name:gsub(language, '')
	end	
	
	
	if systems then
		for item in split(systems, ',') do
			table_name = language .. item
			formed_text = formed_text .. get_abbr_name(table_name) .. create_text (base_text, table_name) .. ', '
		end
	else
		formed_text = ''
	end	
	
	return formed_text
end	

local function _main(args)
	local original_text = args[1] or args.original or args['оригінал']
	local transliterad_text = args[2] or args.transliteration or args['транслітерація']
	local systems = args[3] or args.systems or args['системи']
	local formed_text
	
	if original_text and not (original_text == '') then
		formed_text = formated_text(original_text, 'ja', systems)
	elseif transliterad_text and not (transliterad_text == '') then
		formed_text = formated_text(transliterad_text, 'ja', systems, true)
	else
		formed_text = "Помилка: Не вказано текст, з якого створювати транслітерацію."
	end	
	
	return formed_text
end

local function main (frame)
	 return _main(frame.args)
end

return {
	main = main,
	_main = _main
}