Модуль:Citation/CS1/Generate language table

{{i}} Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]

Цей модуль використовується для автоматичного генерування мовної таблиці із даних MediaWiki, які після внесення певних змін можна додавати в Модуль:Citation/CS1/Configuration.

Використання ред.

  • Для формування всієї таблиці:

{{#invoke:Citation/CS1/Generate language table|generate_table}}

  • Для формування рядка таблиці:

{{#invoke:Citation/CS1/Generate language table|generate_row|код_мови}}

--require ("strict");

local cfg = require("Module:Citation/CS1/Configuration")						--підключаємо модуль, що отримати різні конфігураці з основного модуль (в основному для отримання коду цієї мови)
local is_set = require("Модуль:Citation/CS1/Utilities").is_set					--підключаємо модуль, що завантажити функцію is_set

local function get_params (lang, tag, is_one_element)
	local nominative, instrumental, is_noun, maybe_article_name					--оголошуємо зміні
	if mw.ustring.match(lang, "ка$") then										--перевіряємо чи назва закінчується ка, якщо закінчення на ка, то цей ймовірно є прикметником, а тому може відмінюватися
		nominative = lang														--передаємо назву мови, що йтак є в називному відмінку
		instrumental = lang:gsub('а$', 'ою')									--формуюємо орудний відмінок, замінивши а на ою
		maybe_article_name = nominative .. " мова"								--формуємо потенційну назву статті, додавши закінчення мова
	else																		--якщо іменник, то
		nominative = lang														--передаємо назву мови, що йтак є в називному відмінку
		is_noun = true															--встановлюємо значення, що це є іменник
		maybe_article_name = nominative .. " (мова)"							--формуємо потенційну назву статті, додавши закінчення (мова)
	end	
		
	local article_name									
	if is_one_element then														-- якщо формується лише один елемнт таблиці, то здійснюємо перевірку на наявність статті
		maybe_article_name = mw.title.new(maybe_article_name)					--перетворюємо потенційну навзу статті на клас назви статті; робимо це тут, що при формуванні всієї таблиці maybe_article_name була змінною, а не таблицею чи класом
		maybe_simple_article_name = mw.title.new(nominative)					--потенційна назва статті без приставки (мова)
		if maybe_article_name.exists then										--якщо стаття існує, то
			article_name = maybe_article_name.fullText							-- передаємо потенційну назву статті у змінну
		elseif is_noun and maybe_simple_article_name.exists then				--якщо це іменник і відсутня назва з приставкою (мова), то перевіряємо, чи існу стаття без цієї приставки
			article_name = maybe_simple_article_name.fullText					--якщо стаття існує, то передаємо потенційну назву статті у змінну
		end
	else																		-- якщо формується вся таблиця, то (так як перевірка наявності статті з таким ім'я для цілого списку є затратним процесом) 
		article_name = maybe_article_name										-- то просто передаємо назву мови напряму
	end	
		
	local instrumental_text = is_set(instrumental) and ", instrumental = \"" .. instrumental .. "\"" or '' --формує частину тексту з оруднум відмінком, якщо значення змінної не пусте; якщо пусте, то передаємо пустий рядок
	local link_text = is_set(article_name) and ", link = \"" .. article_name .. "\"" or '' --формує частину тексту з назвою статті, якщо значення змінної не пусте; якщо пусте, то передаємо пустий рядок
	local is_noun_text = is_noun and ", is_noun = true" or ''					--формує частину тексту з булевим параметри чи є назва мови іменником, якщо значення змінної є true; якщо false, то передаємо пустий рядок
	local lang_table = "['" .. tag .."'] = { nominative = \"" .. nominative .. "\"" .. instrumental_text .. ", short = \"\"" .. link_text .. is_noun_text .."}" --формує повний рядок таблиці з кодом мови, навзи мови в називному і орудному відмінку, назви статті мови та чи є мова іменником
	return lang_table															--повертаємо сформовану таблицю
end	

local function generate_table() 
	local lang_table = mw.language.fetchLanguageNames (cfg.this_wiki_code, 'all'); --отримуємо таблицю всіх мов і їхніх кодів з MediaWiki з локолізацію під поточну вікі
	local format_lang_table = ""												--зміна, що міститиме відформатовану таблицю
	
	for k, v in pairs(lang_table) do											--ітеруємо (проходимо) через кожен елемент таблиці, де k - код мови, а v - назва мови
		format_lang_table = format_lang_table .. get_params(v, k, false) ..",<br/>" --формує всю таблицю, додавши значення з попередньої ітерації, сформовний рядок таблиці з get_params() та завершальну частину з комою і переходом на новий рядок
	end
	
	return format_lang_table:gsub(",<br/>$", "")								--повертаємо сформовану таблицю, прибравши з останього рядка кому та перехід на новий рядок
end

local function generate_row(frame) 
	local code = frame.args[1]													--передаємо код мови, який ввів користувач, у змінну 
	local lang = mw.language.fetchLanguageNames (cfg.this_wiki_code, code); 	--отримуємо значення для мови за вибраним кодом мови з MediaWiki з локолізацію під поточну вікі
	return get_params(lang[code], code, true)											--повертаємо сформований рядок фкнкцією get_params()
end	

return {
	generate_table = generate_table,
	generate_row = generate_row
};