Module:Ahom-translit

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, debug_mode)

	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