Module:User:Thecurran/Deva-Latn-translit

local export = {} local gsub = mw.ustring.gsub local match = mw.ustring.match local sub = mw.ustring.sub

local c = { ["Deva"] = { ["k"] = "क", ["kh"] = "ख",  ["g"] = "ग", ["gh"] = "घ",   ["ṅ"] = "ङ", ["c"] = "च", ["ch"] = "छ",  ["j"] = "ज",  ["jh"] = "झ",  ["ñ"] = "ञ", ["ṭ"] = "ट", ["ṭh"] = "ठ",   ["ḍ"] = "ड", ["ḍh"] = "ढ",   ["ṇ"] = "ण", ["t"] = "त", ["th"] = "थ",   ["d"] = "द", ["dh"] = "ध",   ["n"] = "न", ["p"] = "प", ["ph"] = "फ",  ["b"] = "ब",  ["bh"] = "भ",  ["m"] = "म", ["y"] = "य",  ["r"] = "र",   ["l"] = "ल",   ["ḷ"] = "ळ",  ["v"] = "व", ["ś"] = "श",  ["ṣ"] = "ष",   ["s"] = "स",  ["h"] = "ह",   ["ʔ"] = "ॽ", ["q"] = "क़", ["k͟h"] = "ख़",  ["ġ"] = "ग़",   ["z"] = "ज़",  ["ž"] = "झ़", ["ṛ"] = "ड़", ["ṛh"] = "ढ़",   ["ṉ"] = "ऩ",  ["f"] = "फ़",  ["ẏ"] = "य़", ["ṟ"] = "ऱ",   ["ḻ"] = "ऴ",  ["ç"] = "श़", ["g̤"] = "ॻ",   ["j̤"] = "ॼ",  ["d̤"] = "ॾ",  ["b̤"] = "ॿ", ["kt"] = "क्त", ["kṣ"] = "क्ष", ["jñ"] = "ज्ञ", ["tt"] = "त्त", ["tr"] = "त्र", ["dd"] = "द्द", ["ddh"] = "द्ध", ["db"] = "द्ब", ["dbh"] = "द्भ", ["dm"] = "द्म", ["dy"] = "द्य", ["dv"] = "द्व", ["śr"] = "श्र", ["śn"] = "श्न", ["str"] = "स्त्र", ["hm"] = "ह्म", ["hy"] = "ह्म", ["æ"] = "ॲ",   ["ǣ"] = "ऄ", ["a"] = "अ",  ["ā"] = "आ", ["i"] = "इ",   ["ī"] = "ई",  ["u"] = "उ",  ["ū"] = "ऊ", ["r̥"] = "ऋ",   ["r̥̄"] = "ॠ", ["l̥"] = "ऌ",  ["l̥̄"] = "ॡ", ["ê"] = "ऍ",   ["e"] = "ऎ",  ["ē"] = "ए",  ["ai"] = "ऐ", ["ô"] = "ऑ",  ["o"] = "ऒ", ["ō"] = "ओ", ["au"] = "औ",  ["m͒"] = "ऀ", ["m̐"] = "ँ",  ["ṁ"] = "ं", ["ḥ"] = "ः",  ["'"] = "ऽ",  ["."] = "्", --Nukta↘, ↖Candrabindu, Anusvara,     Visarga,       Agravaha,     Virama, ["̊"] = "़",   [""] = "",	},	["Khmr"] = { ["k"] = "ក", ["kh"] = "ខ", ["g"] = "គ", ["gh"] = "ឃ",   ["ṅ"] = "ង", ["c"] = "ច", ["ch"] = "ឆ", ["j"] = "ជ", ["jh"] = "ឈ",  ["ñ"] = "ញ", ["ṭ"] = "ដ", ["ṭh"] = "ឋ", ["ḍ"] = "ឌ", ["ḍh"] = "ឍ",   ["ṇ"] = "ណ", ["t"] = "ត", ["th"] = "ថ", ["d"] = "ទ", ["dh"] = "ធ",   ["n"] = "ន", ["p"] = "ប", ["ph"] = "ផ", ["b"] = "ព", ["bh"] = "ភ",   ["m"] = "ម", ["y"] = "យ",  ["r"] = "រ",  ["l"] = "ល", ["ḷ"] = "ឡ",    ["v"] = "វ", ["ś"] = "ឝ",  ["ṣ"] = "ឞ", ["s"] = "ស", ["h"] = "ហ",    ["ʔ"] = "អ", ["a"] = "អ", ["ā"] = "អា", ["i"] = "ឥ",  ["ī"] = "ឦ",  ["u"] = "ឧ",  ["ū"] = "ឩ",  ["uk"] = "ឨ", ["r̥"] = "ឫ",  ["r̥̄"] = "ឬ",  ["l̥"] = "ឭ",  ["l̥̄"] = "ឮ", ["ē"] = "ឯ", ["ai"] = "ឰ", ["ô"] = "ឪ",  ["o"] = "ឲ",  ["ō"] = "ឱ",  ["au"] = "ឳ", ["ṁ"] = "ំ",    ["ḥ"] = "ះ",  ["'"] = "ៜ",   ["."] = "៑",      ["̊"] = "ំ", --      Anusvara,       Visarga,      Agravaha,      Virama,         Nukta, [""] = "", 	},	["Mymr"] = { ["k"] = "က", ["kh"] = "ခ",  ["g"] = "ဂ", ["gh"] = "ဃ",  ["ṅ"] = "င", ["c"] = "စ",  ["ch"] = "ဆ", ["j"] = "ဇ", ["jh"] = "ဈ",  ["ñ"] = "ဉ", ["ṭ"] = "ဋ",  ["ṭh"] = "ဌ",  ["ḍ"] = "ဍ", ["ḍh"] = "ဎ",  ["ṇ"] = "ဏ", ["t"] = "တ", ["th"] = "ထ", ["d"] = "ဒ", ["dh"] = "ဓ",   ["n"] = "န", ["p"] = "ပ",  ["ph"] = "ဖ",  ["b"] = "ဗ", ["bh"] = "ဘ", ["m"] = "မ", ["y"] = "ယ",  ["r"] = "ရ",  ["l"] = "လ", ["ḷ"] = "ဠ",  ["v"] = "ဝ", ["ś"] = "ၐ",   ["ṣ"] = "ၑ",  ["s"] = "သ", ["h"] = "ဟ", ["ss"] = "ဿ", ["ññ"] = "ည", ["g̤"] = "ၚ",   ["j̤"] = "ၛ",  ["d̤"] = "ၜ",  ["b̤"] = "ၝ", ["św"] = "ၡ", --		 Mon ṅa,        Mon jha,       Mon bba,      Mon bbe,     S'gaw śa, ["thw"] = "ၥ", ["pw"] = "ၦ", ["ṇw"] = "ၮ", ["yw"] = "ၯ", ["ghw"] = "ၰ", --		Pwo tha,      Pwo pwa,      Pwo ṇa,         Pwo ywa,       Pwo ghwa, ["q"] = "ၵ",  ["k͟h"] = "ၶ",  ["ġ"] = "ၷ",  ["ç"] = "ၸ",  ["z"] = "ၹ", --		 Shan ka,      Shan kha,      Shan ga,       Shan ca,       Shan za, ["ẏ"] = "ၺ",  ["ṛ"] = "ၻ", ["ṉ"] = "ၼ",  ["p̊"] = "ၽ",  ["f"] = "ၾ", --		 Shan ña,       Shan da,      Shan na,       Shan pha,      Shan fa, ["b̊"] = "ၿ",  ["ṛh"] = "ႀ", ["ž"] = "ႁ",   ["f̊"] = "ႎ", --		 Shan ba,      Shan tha,      Shan ha,       Palaung fa, ["kk"] = "က္က", ["kkh"] = "က္ခ", ["gg"] = "ဂ္ဂ", ["ggh"] = "ဂ္ဃ", ["cc"] = "စ္စ", ["cch"] = "စ္ဆ", ["jj"] = "ဇ္ဇ", ["jjh"] = "ဇ္ဈ", ["ṭṭ"] = "ဋ္ဋ", ["ṭṭh"] = "ဋ္ဌ", ["ḍḍ"] = "ဍ္ဍ", ["ḍḍh"] = "ဍ္ဎ", ["tt"] = "တ္တ", ["tth"] = "တ္ထ", ["dd"] = "ဒ္ဒ", ["ddh"] = "ဒ္ဓ", ["pp"] = "ပ္ပ", ["pph"] = "ပ္ဖ", ["bb"] = "ဗ္ဗ", ["bbh"] = "ဗ္ဘ", ["ñc"] = "ဉ္စ", ["ñch"] = "ဉ္ဆ", ["ñj"] = "ဉ္ဇ", ["ñjh"] = "ဉ္ဈ", ["ṇṭ"] = "ဏ္ဋ", ["ṇḍ"] = "ဏ္ဍ", ["nt"] = "န္တ", ["nth"] = "န္ထ", ["nd"] = "န္ဒ", ["ndh"] = "န္ဓ", ["nn"] = "န္န", ["mp"] = "မ္ပ", ["mb"] = "မ္ဗ", ["mbh"] = "မ္ဘ", ["mm"] = "မ္မ",

["a"] = "အ", ["ā"] = "အာ", ["i"] = "ဣ",  ["ī"] = "ဤ",  ["u"] = "ဥ",  ["ū"] = "ဦ", ["r̥"] = "ၒ",   ["r̥̄"] = "ၓ",   ["l̥"] = "ၔ",  ["l̥̄"] = "ၕ", ["e"] = "ဧ",  ["ē"] = "ဨ", ["ō"] = "ဩ", ["au"] = "ဪ", ["ṁ"] = "ံ",     ["ḥ"] = "း",   ["'"] = "်",   ["."] = "္",     ["̊"] = "့", --      Anusvara,        Visarga,       Agravaha,    Virama,         Nukta, [""] = "",	},	["Sinh"] = { ["k"] = "ක", ["kh"] = "ඛ", ["g"] = "ග", ["gh"] = "ඝ", ["ṅ"] = "ඞ", ["c"] = "ච", ["ch"] = "ඡ", ["j"] = "ජ", ["jh"] = "ඣ", ["ñ"] = "ඤ", ["ṭ"] = "ට", ["ṭh"] = "ඨ", ["ḍ"] = "ඩ", ["ḍh"] = "ඪ", ["ṇ"] = "ණ", ["t"] = "ත", ["th"] = "ථ", ["d"] = "ද", ["dh"] = "ධ", ["n"] = "න", ["p"] = "ප", ["ph"] = "ඵ", ["b"] = "බ", ["bh"] = "භ", ["m"] = "ම", ["y"] = "ය", ["r"] = "ර", ["l"] = "ල",  ["ḷ"] = "ළ",  ["v"] = "ව", ["ś"] = "ශ", ["ṣ"] = "ෂ",  ["s"] = "ස", ["h"] = "හ", ["g͜n"] = "ඥ", ["ṁ͜g"] = "ඟ", ["ṁ͜j"] = "ඦ", ["ṁ͜ḍ"] = "ඬ", ["ṁ͜d"] = "ඳ", ["ṁ͜b"] = "ඹ", ["f"] = "ෆ", ["æ"] = "ඇ",  ["ǣ"] = "ඈ", ["a"] = "අ",  ["ā"] = "ආ", ["i"] = "ඉ",  ["ī"] = "ඊ",  ["u"] = "උ",   ["ū"] = "ඌ", ["r̥"] = "ඍ", ["r̥̄"] = "ඎ", ["l̥"] = "ඏ",  ["l̥̄"] = "ඐ", ["e"] = "එ",  ["ē"] ="ඒ",  ["ai"] = "ඓ", ["o"] = "ඔ",  ["ō"] = "ඕ", ["au"] = "ඖ", ["ṁ"] = "ං", ["ḥ"] = "ඃ", ["."] = "්", Anusvara,    Visarga,      Virama, [""] = "",	},

["Thai"] = { ["k"] = "ก", ["kh"] = "ข", ["g"] = "ค", ["gh"] = "ฆ", ["ṅ"] = "ง", ["c"] = "จ", ["ch"] = "ฉ", ["j"] = "ช", ["jh"] = "ฌ", ["ñ"] = "ญ", ["ṭ"] = "ฏ", ["ṭh"] = "ฐ", ["ḍ"] = "ฑ", ["ḍh"] = "ฒ", ["ṇ"] = "ณ", ["t"] = "ต", ["th"] = "ถ", ["d"] = "ท", ["dh"] = "ธ", ["n"] = "น", ["p"] = "ป", ["ph"] = "ผ", ["b"] = "พ", ["bh"] = "ภ", ["m"] = "ม", ["y"] = "ย", ["r"] = "ร", ["l"] = "ล", ["v"] = "ว", ["s"] = "ส", ["h"] = "ห", ["ḷ"] = "ฬ", ["a"] = "อ", ["ā"] = "อา", ["i"] = "อิ", ["ī"] = "อี", ["u"] = "อุ", ["ū"] = "อู", ["e"] = "อเ", --to be swapped later ["o"] = "อโ", --to be swapped later ["ṃ"] = "ํ", ["ḥ"] = "", [""] = "",	}, }

local v = { ["Deva"] = { ["a"] = "", 	 ["ā"] = " ा", ["i"] = " ि", ["ī"] = " ी",  ["u"] = " ु",  ["ū"] = " ू", ["r̥"] = " ृ", ["r̥̄"] = " ॄ",  ["l̥"] = " ॢ",  ["l̥̄"] = " ॣ", ["ê"] = " ॅ", ["e"] = " ॆ",  ["ē"] = " े",  ["ai"] = " ै", ["ô"] = " ॉ", ["o"] = " ो",  ["ō"] = " ो",  ["au"] = " ौ", [""] = "",	},

["Khmr"] = { ["a"] = "",    ["ā"] = " ា", ["i"] = " ិ",	 ["ī"] = " ី", 	 ["u"] = " ុ",	 ["ū"] = " ូ", ["y"] = " ឹ",	 ["yy"] = " ឺ",	 ["ua"] = " ួ",	["oe"] = " ើ", ["ya"] = " ឿ",	["ie"] = " ៀ", ["ē"] = " េ", ["ae"] = " ែ", ["ai"] = " ៃ",				   ["ō"] = " ោ", ["au"] = " ៅ", [""] = "",	},

["Mymr"] = { ["a"] = "", ["ā"] = " ာ", --									tall ["ā"] = " ါ", ["i"] = " ိ", 	["ī"] = " ီ",	["u"] = " ု", 	["ū"] = " ူ", ["ē"] = " ေ", 	["ai"] = " ဲ", --		above ["ē"] = " ဵ", Mon ["ī"] = " ဳ", Mon ["ō"] = " ဴ", ["ō"] = " ော", [""] = "",	},

["Sinh"] = { ["a"] = "", ["ā"] = "ා", ["i"] = "ි", ["ī"] = "ී", ["u"] = "ු", ["ū"] = "ූ", ["ē"] = "ෙ", ["ō"] = "ො", [""] = "",	},

["Thai"] = { ["a"] = "", ["ā"] = "า", ["i"] = "ิ", ["ī"] = "ี", ["u"] = "ุ", ["ū"] = "ู", ["e"] = "เ", ["o"] = "โ", [""] = "",	},

}

local s = { ["Deva"] = { ["0"] = "०", ["1"] = "१", ["2"] = "२", ["3"] = "३", ["4"] = "४",		["5"] = "५", ["6"] = "६", ["7"] = "७", ["8"] = "८", ["9"] = "९", 		["."] = "।", ["-"] = "-",	},

["Khmr"] = { ["0"] = "០", ["1"] = "១", ["2"] = "២", ["3"] = "៣", ["4"] = "៤", 		["5"] = "៥", ["6"] = "៦", ["7"] = "៧", ["8"] = "៨", ["9"] = "៩", 		["."] = "។", ["-"] = "-",	},

["Mymr"] = { ["0"] = "၀", ["1"] = "၁", ["2"] = "၂", ["3"] = "၃", ["4"] = "၄", 		["5"] = "၅", ["6"] = "၆", ["7"] = "၇", ["8"] = "၈", ["9"] = "၉", 		["."] = "။", ["-"] = "-",	},

["Sinh"] = { ["0"] = "0", ["1"] = "1", ["2"] = "2", ["3"] = "3", ["4"] = "4", 		["5"] = "5", ["6"] = "6", ["7"] = "7", ["8"] = "8", ["9"] = "9", 		["."] = ".", ["-"] = "-",	},

["Thai"] = { ["0"] = "๐", ["1"] = "๑", ["2"] = "๒", ["3"] = "๓", ["4"] = "๔", 		["5"] = "๕", ["6"] = "๖", ["7"] = "๗", ["8"] = "๘", ["9"] = "๙", 		["."] = ".", ["-"] = "-",	},

}

local join = { ["Deva"] = "्", ["Khmr"] = "្", ["Mymr"] = "္", ["Sinh"] = "්", ["Thai"] = "ฺ", }

local kill = { ["Deva"] = "्", ["Khmr"] = "៑", ["Mymr"] = "်", ["Sinh"] = "්", ["Thai"] = "ฺ", }

local function return_error(text) return error(("Unrecognised part: \"%s\""):format(text)) end

function export.tr(text, script) if type(text) == "table" then text, script = text.args[1], text.args[2] end text = gsub(text, "[0-9\.]", s[script]) for word in mw.ustring.gmatch(text, "[aāiīuūeoṃḥkhgṅcjñṭḍṇtdnpbmyrlḷvs]+") do		local word_conv, orig_word = {}, word word = gsub(word, "([aāiīuūeo][ṃḥ]?)", "%1 ") word = gsub(word, " $", "") for syllable in mw.text.gsplit(word, " ") do			if not match(syllable, "[aāiīuūeoṃḥ]$") then syllable = syllable .. "a" .. kill[script] end syllable = gsub(syllable, "^([khgṅcjñṭḍṇtdnpbmyrlḷvs]*)([aāiīuūeo])([ṃḥ]?)([्៑်්ฺ]?)$", function(onset, vowel, coda, optJoin)				if onset == "" then					onset = vowel					vowel = ""				end				if not c[script][onset] then					if match(onset, "^[ṅñṇnm]") then						onset = c[script][sub(onset, 1, 1)] .. join[script] ..							(c[script][sub(onset, 2, -1)] or return_error(onset))					elseif match(onset, "h$") and sub(onset, 1, 1) == sub(onset, 2, 2) then						onset = (c[script][sub(onset, 1, 1)] or return_error(onset)) .. join[script] ..							(c[script][sub(onset, 2, -1)] or return_error(onset))					else						temp = {}						for character in mw.text.gsplit(onset, "") do							table.insert(temp, (c[script][character] or return_error(onset)))						end						onset = table.concat(temp, join[script])					end				else					onset = c[script][onset]				end				return onset .. (v[script][vowel] or return_error(vowel)) .. c[script][coda] .. optJoin end)			table.insert(word_conv, syllable)		end		word = table.concat(word_conv, "")		if script == "Thai" then			word = gsub(word, "(.)([เโ])", "%2%1")		end		if script == "Mymr" then			word = gsub(word, "([ဝခဂငဒပ])(္.)ာ", "%1%2ါ")			word = gsub(word, "([ဝခဂငဒပ])ာ", "%1ါ")			word = gsub(word, "္[ယဝ]", { ["္ယ"] = "ျ", ["္ဝ"] = "ွ" })		end		text = gsub(text, orig_word, word)	end	return text end

return export