Module:gld-translit

local export = {}

local toNFD = mw.ustring.toNFD

local noDecompose = { ["ё"] = true, ["Ё"] = true, ["й"] = true, ["Й"] = true, }

local twoChars = { ["де"] = "ʒe", ["Де"] = "Ʒe", ["ДЕ"] = "ƷE", ["дё"] = "ʒo", ["Дё"] = "Ʒo", ["ДЁ"] = "ƷO", ["ди"] = "ʒi", ["Ди"] = "Ʒi", ["ДИ"] = "ƷI", ["дю"] = "ʒu", ["Дю"] = "Ʒu", ["ДЮ"] = "ƷU", ["дя"] = "ʒa", ["Дя"] = "Ʒa", ["ДЯ"] = "ƷA", ["дь"] = "ʒ", ["Дь"] = "Ʒ", ["ДЬ"] = "Ʒ", ["нг"] = "ӈ", ["Нг"] = "Ӈ", ["НГ"] = "Ӈ", }

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

function export.tr(text, lang, sc) -- Decompose (except ё/Ё and й/Й) to simplify conversion of letters with macrons. text = text:gsub("[%z\1-\127\194-\244][\128-\191]*", function(m)		if not noDecompose[m] then			return toNFD(m)		end	end) for digraph, replacement in pairs(twoChars) do		text = text:gsub(digraph, replacement) end return mw.ustring.toNFC((text:gsub("[%z\1-\127\194-\244][\128-\191]*", tab))) end

return export