local export = {}
local gsub = mw.ustring.gsub
local u = mw.ustring.char
local con_cls = "([𑜀-𑜚𑝀-𑝆][𑜝".."𑜞".."𑜟]?)"
-- see also https://www.unicode.org/L2/L2020/20258-add-tai-ahom.pdf
-- 𑜊 represents both j and y
local tt = {
-- consonants
["𑜀"] = "k", ["𑜁"] = "kh", ["𑜂"] = "ṅ", ["𑜃"] = "n", ["𑜄"] = "t", ["𑜅"] = "t",
["𑜆"] = "p", ["𑜇"] = "ph", ["𑜈"] = "b", ["𑜉"] = "m", ["𑜊"] = "jʸ", ["𑜋"] = "ch",
["𑜌"] = "th", ["𑜍"] = "r", ["𑜎"] = "l", ["𑜏"] = "s", ["𑜐"] = "ñ", ["𑜑"] = "h",
["𑜒"] = "ʼ", ["𑜓"] = "d", ["𑜔"] = "dh", ["𑜕"] = "g", ["𑜖"] = "g", ["𑜗"] = "gh",
["𑜘"] = "bh", ["𑜙"] = "jh", ["𑜚"] = "v",
["𑝀"] = "c", ["𑝁"] = "ṭ", ["𑝂"] = "ṭh", ["𑝃"] = "ḍ", ["𑝄"] = "ḍh", ["𑝅"] = "ṇ", ["𑝆"] = "ḷ",
-- medials
["𑜝"] = "l", ["𑜞"] = "r", ["𑜟"] = "r",
-- vowels (excluding composition)
["𑜠"] = "a", ["𑜡"] = "ā", ["𑜢"] = "i", ["𑜣"] = "ī",
["𑜤"] = "u", ["𑜥"] = "ū", ["𑜧"] = "w", ["𑜩"] = "y",
["𑜦"] = "e", ["𑜨"] = "o",
["𑜪"] = "ṃ", ["𑜫"] = "",
-- numerals
["𑜰"] = "0", ["𑜱"] = "1", ["𑜲"] = "2", ["𑜳"] = "3", ["𑜴"] = "4",
["𑜵"] = "5", ["𑜶"] = "6", ["𑜷"] = "7", ["𑜸"] = "8", ["𑜹"] = "9",
["𑜺"] = "[10]", ["𑜻"] = "[20]",
-- punctuations and symbols
["𑜼"] = ",", ["𑜽"] = ".", ["𑜾"] = "@", ["𑜿"] = "vi",
-- zero-width space (display it if it hides in a word)
[u(0x200B)] = "‼",
}
local adjust0 = {
-- vowels (composition)
["𑜢".."𑜤"] = "ü",
["𑜦".."𑜡"] = "ō",
["𑜨".."𑜦".."𑜡"] = "wō",
["𑜦".."𑜧"] = "ē",
["𑜩".."𑜤"] = "āy",
["𑜧".."𑜤"] = "āw",
}
function export.tr(text, lang, sc)
if type(text) == "table" then -- called directly from a template
text = text.args[1]
end
text = gsub(text, "[𑜈𑜚](𑜫)", "w%1") -- final -b (or -v) becomes -w
text = gsub(text, con_cls.."([𑜀-𑜚𑝀-𑝆w])𑜫", "%1a%2")
text = gsub(text, con_cls.."([𑜧".."𑜩".."𑜪])", "%1a%2")
for k, v in pairs(adjust0) do
text = gsub(text, con_cls..k, "%1"..v)
end
text = gsub(text, ".", tt)
return text
end
return export