Ҷаҳиш ба мӯҳтаво

Модул:documentation/translit

Аз Wiktionary

Documentation for this module may be created at Модул:documentation/translit/doc

local export = {}

local function fake_frame(args, parent_args)
	return {
		args = args,
		getParent = function()
			return {
				args = parent_args,
			}
		end
	}
end

function get_by_code(code)
	return require("Модул:languages").getByCode(code, nil, true, true) or require("Модул:scripts").getByCode(code)
end

local function get_code_from_title_without_namespace(title_without_namespace)
	local prefix = title_without_namespace:match("^(.+)%-translit%f[/%z]")
	if not prefix then
		error("Қисмати асосии унвон бояд бо -транслит тамом шавад: " .. title_without_namespace)
	end
	local code = prefix
	local lang_or_family_or_script = get_by_code(code)
	if not lang_or_family_or_script then
		-- Модулҳоро бо рамзҳои сершумор дар сарлавҳа ҷойгир кунед.
		-- Рамзи аввал бояд истифода шавад.
		-- Ҳоло он сегментҳоро аз охири то пайдо кардани мувофиқат ҷудо мекунад:
		-- Модул:Deva-Beng-translit -> Deva-Beng -> Deva
		-- Модул:pra-Deva-translit -> pra-Deva -> pra
		-- Модул:Deva-mnc-Mong-translit -> Deva-mnc-Mong -> Deva-mnc -> Deva
		while true do
			new_code = code:match("^(.+)%-[^%-]+$")
			if new_code then
				code = new_code
			else
				break
			end
			lang_or_family_or_script = get_by_code(new_code)
			if lang_or_family_or_script then
				break
			end
		end
	end
	
	return code, lang_or_family_or_script
end

function export.documentation(title_without_namespace, explanation)
	local code, lang_or_family_or_script = get_code_from_title_without_namespace(title_without_namespace)
	return export.documentation_from_code(code, explanation, title_without_namespace)
end

function export.documentation_from_code(code, explanation, title_without_namespace)
	local lang_or_family_or_script = get_by_code(code)
	
	if not lang_or_family_or_script then
		return "Рамзи забон дар номи саҳифа (<code>" .. code .. "</code>) эътироф нашудааст."
	end
	
	local category_name = lang_or_family_or_script:getCategoryName()
	
	local transliteration_input
	if lang_or_family_or_script:hasType("script") then
		transliteration_input = "матн дар [[:Category:" .. category_name .. "|" .. category_name .. "]]"
	elseif lang_or_family_or_script:hasType("family") then
		transliteration_input = "матн дар яке аз [[:Category:" .. category_name .. "|" .. category_name .. "]]"
	else -- language
		transliteration_input = "[[:Category:" .. category_name .. "|" .. category_name .. "]] text"
	end
	
	local tr_page = "WT:" .. mw.ustring.upper(code) .. " TR"
	
	return "Ин модул транслитератсия хоҳад кард " .. transliteration_input
		.. (explanation and " " .. explanation or "")
		.. (mw.title.new(tr_page).exists and " per [[" .. tr_page .. "]]" or "")
		.. ". "
		.. require("Модул:documentation").translitModuleLangList({args = { [1] = title_without_namespace:gsub("/documentation$", "") }})
		.. [=[

Модулро беҳтараш мустақиман аз қолабҳо ё модулҳои дигар даъват кардан мумкин нест.
Барои аз як қолаб истифода бурдани он, <code>{{[[Template:xlit|xlit]]}}</code>-ро истифода баред.
Дар дохили модул [[Модул:languages#Забон:транслитератсия]]-ро истифода баред.

Барои санҷишҳо ба [[Модул:]=] .. title_without_namespace:gsub("/documentation$", "") .. [=[/testcases]].

== Функсияҳо ==
; <code>tr(text, lang, sc)</code>
: Порчаи додаи <code>text</code>-ро, ки дар скрипте, ки бо коди <code>sc</code> муайян шудааст ва забони бо рамзи <code>lang</code> муайяншуда навишта шудааст, тарҷума мекунад.
: Вақте ки транслитератсия ноком мешавад, бармегардад <code>nil</code>.]=]
		.. require("Модул:module categorization").categorize(fake_frame({
				is_template = "1",
				[1] = title_without_namespace,
			}, {
				[1] = code,
			}))
end

function export.documentation_template(frame)
	-- Параметрҳо ба {{translit module documentation}}:
	-- |code|description
	-- Ignore code because we get it from the page name.
	local pagename = mw.title.getCurrentTitle().text
	local args = frame:getParent().args
	if args[1] and get_code_from_title_without_namespace(pagename) ~= args[1] then
		-- [[Special:WhatLinksHere/Wiktionary:Tracking/translit/input different from title]]
		require("Модул:debug").track("translit/input different from title")
	end
	if args[1] then
		return export.documentation_from_code(args[1], args[2], pagename)
	else
		return export.documentation(pagename, args[2])
	end
end

return export