Documentation for this module may be created at Module:bn-translit/doc

local export = {}
local gsub = mw.ustring.gsub
local u = mw.ustring.char
local letter_with_mark = '(.['..u(0x0300)..'-'..u(0x036F)..']?)'

local tt = {
	-- consonants
	['ক'] = 'ក', ['খ'] = 'ខ', ['গ'] = 'គ', ['ঘ'] = 'ឃ', ['ঙ'] = 'ង',
	['চ'] = 'ច', ['ছ'] = 'ឆ', ['জ'] = 'ជ', ['ঝ'] = 'ឈ', ['ঞ'] = 'ញ',
	['ট'] = 'ដ', ['ঠ'] = 'ឋ', ['ড'] = 'ឌ', ['ঢ'] = 'ឍ', ['ণ'] = 'ណ',
	['ত'] = 'ត', ['ৎ'] = 'ត្', ['থ'] = 'ថ', ['দ'] = 'ទ', ['ধ'] = 'ធ', ['ন'] = 'ន',
	['প'] = 'ប', ['ফ'] = 'ផ្វ', ['ব'] = 'ព', ['ভ'] = 'ភ', ['ম'] = 'ម',
	['য'] = 'យ', ['র'] = 'រ', ['ৰ'] = 'រ', ['ল'] = 'ល', ['ৱ'] = 'វ',
	['শ'] = 'ឝ', ['ষ'] = 'ឞ', ['স'] = 'ស', ['হ'] = 'ហ',
	[u(0x09DC)] = 'ឡ', [u(0x09DD)] = 'ឡ្ល', [u(0x09DF)] = 'យ្យ',
	-- independent vowels
	['অ'] = 'អ', ['আ'] = 'អា', ['ই'] = 'ឥ', ['ঈ'] = 'ឦ', ['উ'] = 'ឧ', ['ঊ'] = 'ឩ',
	['ঋ'] = 'ឫ', ['ৠ'] = 'ឬ', ['ঌ'] = 'ឭ', ['ৡ'] = 'ឮ',
	['এ'] = 'ឯ', ['ঐ'] = 'ឰ', ['ও'] = 'ឱ', ['ঔ'] = 'ឳ',
	-- dependent vowels and diacritics (excluding front type)
	['া'] = 'ា', ['ি'] = 'ិ', ['ী'] = 'ី', ['ু'] = 'ុ', ['ূ'] = 'ូ',
	['ৃ'] = '្ឫ', ['ৄ'] = '្ឬ', ['ৢ'] = '្ឭ', ['ৣ'] = '្ឮ',
	['ৗ'] = '~', ['ং'] = 'ំ', ['ঃ'] = 'ះ', ['্'] = '្', ['ে'] = 'េ', ['ৈ'] = 'ៃ', ['ো'] = 'ោ', ['ৌ'] = 'ៅ',
	['়'] = u(0x0331), -- macron below
	['ঁ'] = 'ม̐', -- candrabindu
	-- marks
	['ঽ'] = '-',
	-- numerals
	['০'] = '0', ['১'] = '1', ['২'] = '2', ['৩'] = '3', ['৪'] = '4',
	['৫'] = '5', ['৬'] = '6', ['৭'] = '7', ['৮'] = '8', ['৯'] = '9',
	['৴'] = '¹⁄₁₆', ['৵'] = '⅛', ['৶'] = '³⁄₁₆', ['৷'] = '¼', ['৸'] = '¾', ['৹'] = '16',
	-- zero-width space (display it if it hides in a word)
	[u(0x200B)] = "‼",
	-- zero-width non-joiner and joiner (display it if it hides in a word)
	[u(0x200C)] = "₋",
	[u(0x200D)] = "₊",
}

local adjust0 = {
	-- for convenience
	['ড'..'়'] = u(0x09DC), ['ঢ'..'়'] = u(0x09DD), ['য'..'়'] = u(0x09DF),
	['ে'..'া'] = 'ো', ['ে'..'ৗ'] = 'ৌ',
}

function export.tr(text, lang, sc, debug_mode)

	if type(text) == 'table' then -- called directly from a template
		text = text.args[1]
	end

	if lang == "pi" or lang == "sa" then
		text = gsub(text, "ৰ", "ৱ") -- Pali and Sanskrit use ৰ for va
	end

	for k, v in pairs(adjust0) do
		text = gsub(text, k, v)
	end
	text = gsub(text, '.', tt)
	
	return text

end

return export