Module:Mn-translit

local export = {} local trfunc = {} local mn = require("Module:mn-common")

local tt_Cyrl = { -- BGN/PCGN 1964 System ["А"] = "A",	["а"] = "a", ["Б"] = "B",	["б"] = "b", ["В"] = "V",	["в"] = "v", ["Г"] = "G",	["г"] = "g", ["Д"] = "D",	["д"] = "d", ["Е"] = "Yö",	["е"] = "yö", ["Ё"] = "Yo",	["ё"] = "yo", ["Ж"] = "J",	["ж"] = "j", ["З"] = "Dz",	["з"] = "dz", ["И"] = "I",	["и"] = "i", ["Й"] = "Y",	["й"] = "y", ["К"] = "K",	["к"] = "k", ["Л"] = "L",	["л"] = "l", ["М"] = "M",	["м"] = "m", ["Н"] = "N",	["н"] = "n", ["О"] = "O",	["о"] = "o", ["Ө"] = "Ö",	["ө"] = "ö", ["П"] = "P",	["п"] = "p", ["Р"] = "R",	["р"] = "r", ["С"] = "S",	["с"] = "s", ["Т"] = "T",	["т"] = "t", ["У"] = "U",	["у"] = "u", ["Ү"] = "Ü",	["ү"] = "ü", ["Ф"] = "F",	["ф"] = "f", ["Х"] = "H",	["х"] = "h", ["Ц"] = "Ts",	["ц"] = "ts", ["Ч"] = "Ch",	["ч"] = "ch", ["Ш"] = "Sh",	["ш"] = "sh", ["Щ"] = "Shch",	["щ"] = "shch", ["Ъ"] = "’",	["ъ"] = "’", ["Ы"] = "Ï",	["ы"] = "ï", ["Ь"] = "Ĭ",	["ь"] = "ĭ", ["Э"] = "E",	["э"] = "e", -- Ю/ю handled separately ["Я"] = "Ya",	["я"] = "ya", ["Є"] = "Ö",	["є"] = "ö" -- used as substitutes for Ө/ө on non-Mongolian keyboards }

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 = mn.vowelharmony( text ) text.translit = {} -- Ю is "yu" or "yü" depending on vowel harmony for i, v in ipairs( text ) do		if text[i].position == "front" then text[i].substring = mw.ustring.gsub( text[i].substring, "Ю", "Yü") text[i].substring = mw.ustring.gsub( text[i].substring, "ю", "yü") else text[i].substring = mw.ustring.gsub( text[i].substring, "Ю", "Yu") text[i].substring = mw.ustring.gsub( text[i].substring, "ю", "yu") end text[i].substring = mw.ustring.gsub( text[i].substring, ".", tt_Cyrl) table.insert( text.translit, text[i].substring ) end return table.concat( text.translit, "" ) 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