Module:mn-translit

Ut Wikiwurdboek
local export = {}

local trfunc = {}

local tt_Cyrl = {
	["Щ"] = "Šč",	["щ"] = "šč",	["Ы"] = "Y",	["ы"] = "y",	["Э"] = "E",	["э"] = "e",	
	["Я"] = "Ja",	["я"] = "ja",	["У"] = "U",	["у"] = "u",	["С"] = "S",	["с"] = "s",	
	["Ч"] = "Č",	["ч"] = "č",	["Х"] = "H",	["х"] = "h",	["Ж"] = "Ž",	["ж"] = "ž",	
	["Д"] = "D",	["д"] = "d",	["В"] = "V",	["в"] = "v",	["А"] = "A",	["а"] = "a",	
	["М"] = "M",	["м"] = "m",	["О"] = "O",	["о"] = "o",	["И"] = "I",	["и"] = "i",	
	["К"] = "K",	["к"] = "k",	["Ш"] = "Š",	["ш"] = "š",	["Ъ"] = "ʺ",	["ъ"] = "ʺ",	
	["Ё"] = "Jo",	["ё"] = "jo",	["Ь"] = "ʹ",	["ь"] = "ʹ",	["Ю"] = "Ju",	["ю"] = "ju",	
	["Т"] = "T",	["т"] = "t",	["Р"] = "R",	["р"] = "r",	["Ц"] = "Ts",	["ц"] = "ts",	
	["Ф"] = "F",	["ф"] = "f",	["З"] = "Z",	["з"] = "z",	["Е"] = "E",	["е"] = "e",	
	["Г"] = "G",	["г"] = "g",	["Б"] = "B",	["б"] = "b",	["Н"] = "N",	["н"] = "n",	
	["П"] = "P",	["п"] = "p",	["Й"] = "J",	["й"] = "j",	["Л"] = "L",	["л"] = "l",	
	["Ү"] = "Ü",	["ү"] = "ü",	["Ө"] = "Ö",	["ө"] = "ö"
}

local tt_Mong = {
	["ᠠ"] = "a",	["ᠡ"] = "e",	["ᠢ"] = "i",	["ᠣ"] = "o",	["ᠤ"] = "u",
	["ᠥ"] = "ö",	["ᠦ"] = "ü",	["ᠧ"] = "ē",
	["ᠨ"] = "n",	["ᠩ"] = "ng",	["ᠪ"] = "b",	["ᠫ"] = "p",	
	["ᠬ"] = "q",	["ᢉ"] = "k",	["ᠭ"] = "ɣ",	["ᢉ"] = "g",
	["ᠮ"] = "m",	["ᠯ"] = "l",	["ᠰ"] = "s",	["ᠱ"] = "š",
	["ᠲ"] = "t",	["ᠳ"] = "d",	["ᠴ"] = "č",	["ᠵ"] = "ǰ",
	["ᠶ"] = "y",	["ᠷ"] = "r",	["ᠸ"] = "w",	["ᠹ"] = "f",
	["ᠺ"] = "g",	["ᠻ"] = "k",	["ᠼ"] = "c",	["ᠽ"] = "z",
	["ᠾ"] = "h",	["ᠿ"] = "ž",	["ᡀ"] = "lh",	["ᡁ"] = "zh",	["ᡂ"] = "ch",
	["᠎"] = "-",	["︖"] = "?",	["︕"] = "!",	["᠂"] = ",",	["᠃"] = "."
}

function trfunc.Cyrl(text)
	text = mw.ustring.gsub(text, "([АОУЫЕЯЁЮИЕЪЬаоуыэяёюиеъь%A][\204\129\204\128]?)([Ее])",
		function (a, e)
			return a .. (e == "е" and "je" or "Je")
		end):gsub("^Е", "Je"):gsub("^е", "je")
	return (mw.ustring.gsub(text, ".", tt_Cyrl))
end

function trfunc.Mong(text)
	local velar_conv = { ["q"] = "k", ["ɣ"] = "g" }
	text = mw.ustring.gsub(text, ".", tt_Mong)
	text = mw.ustring.gsub(text, "([qɣ])(.?)", function(velar, vowel)
		return ((mw.ustring.match(vowel, "[eöü ]") or vowel == "")
			and mw.ustring.gsub(velar, "[qɣ]", velar_conv) or velar) .. vowel end)
	return text
end

function export.tr(text, lang, sc)
	if not sc then
		sc = require("Module:scripts").findBestScript(text, require("Module:languages").getByCode("mn"))
		if sc then
			sc = sc:getCode()
		else
			return nil
		end
	end
	
	local func = trfunc[sc]
	if func then
		return trfunc[sc](text)
	end
end

return export