বিষয়বস্তুতে চলুন

মডিউল:syl-translit

উইকিঅভিধান, মুক্ত অভিধান থেকে

এই মডিউলের জন্য মডিউল:syl-translit/নথি-এ নথিপত্র তৈরি করা হয়ে থাকতে পারে

-- সিলেটি লিপি থেকে বাংলা লিপিতে লিপ্যন্তর

local export = {}
local gsub = mw.ustring.gsub
local match = mw.ustring.match
 
local conv = {
	-- ব্যঞ্জনবর্ণ
	['ꠇ'] = 'খ়',	['ꠈ'] = 'খ়',	['ꠉ'] = 'গ',	['ꠊ'] = 'গ',
	['ꠌ'] = 'স',	['ꠍ'] = 'স',	['ꠎ'] = 'জ়',	['ꠏ'] = 'জ়',
	['ꠐ'] = 'ট',	['ꠑ'] = 'ট',	['ꠒ'] = 'ড',	['ꠓ'] = 'ড',
	['ꠔ'] = 'ত',	['ꠕ'] = 'ত',	['ꠖ'] = 'দ',	['ꠗ'] = 'দ',	['ꠘ'] = 'ন',
	['ꠙ'] = 'ফ়',	['ꠚ'] = 'ফ়',	['ꠛ'] = 'ব',	['ꠜ'] = 'ব',	['ꠝ'] = 'ম',
	['ꠞ'] = 'র',	['ꠟ'] = 'ল',	['ꠠ'] = 'ড়', 
	['ꠡ'] = 'শ',    ['ꠢ'] = 'হ', ['ꠋ'] = 'ং', 

	-- স্বরবর্ণ ডায়াক্রিটিক্স
	['ꠣ'] = 'া', ['ꠤ'] = 'ি',	['ꠥ'] = 'ু', ['ꠦ'] = 'ে', ['ꠧ'] = 'ো',

	-- স্বরবর্ণ চিহ্ন
	['ꠀ'] = 'আ', ['ꠁ'] = 'ই', ['ꠃ'] = 'উ', ['ꠄ'] = 'এ', ['ꠅ'] = 'ও',

	-- virama
	['꠆'] = '্',
		
	-- অনুস্বর
	[' ꠋ'] = 'ং',

	-- dvisvara
	['ꠂ'] = 'ৈ',

	-- সংখ্যা
    ['[[File:সিলেটি সংখ্যা ০.svg|12px]]'] = '০',
	['[[File:সিলেটি সংখ্যা ১.svg|12px]]'] = '১',
	['[[File:সিলেটি সংখ্যা ২.svg|12px]]'] = '২',
	['[[File:সিলেটি সংখ্যা ৩.svg|12px]]'] = '৩',
	['[[File:সিলেটি সংখ্যা ৪.svg|12px]]'] = '৪',
	['[[File:সিলেটি সংখ্যা ৫.svg|12px]]'] = '৫',
	['[[File:সিলেটি সংখ্যা ৬.svg|12px]]'] = '৬',
	['[[File:সিলেটি সংখ্যা ৭.svg|12px]]'] = '৭',
	['[[File:সিলেটি সংখ্যা ৮.svg|12px]]'] = '৮',
	['[[File:সিলেটি সংখ্যা ৯.svg|12px]]'] = '৯' ,
 
	-- বিরাম চিহ্ন
	[' ꠨'] = ',', --প্রথম কমা
	[' ꠩'] = ',', --দ্বিতীয় কমা (বিশেষ ব্যবহার: ত্রিপদি কবিতায় প্রথম ছন্দের শেষে কমার পরিবর্তে '꠨', দ্বিতীয় ছন্দের শেষে কমার পরিবর্তে '꠩', এবং তৃতীয় ছন্দের শেষে দাড়ির পরিবর্তে '⁕' ব্যবহার হয়।)
	[' ꠪'] = ':',
	['‌ ꠫'] = '।', 
	[' ॥'] = ';',
	[' ⁕'] = '।' -- দাড়ি
}

local aspirates = "ꠈꠊꠍꠏꠑꠓꠕꠗꠚꠜ"
local consonant, vowel, vowel_sign = "ꠇ-ꠊꠌ-ꠢ", "ꠣ-ꠧ", "ꠀꠁꠃ-ꠅ"
local c = "[" .. consonant .. "]"
local v = "[" .. vowel .. vowel_sign .. "]"
local syncope_pattern = "(" .. v .. c .. v .. c .. ")(" .. c .. "ঁ?" .. v .. ")"

local function rev_string(text)
	local result, length = "", mw.ustring.len(text)
	for i = 1, length do
		result = result .. mw.ustring.sub(text, -i, -i)
	end
	return result
end

function export.tr(text, lang, sc)
	-- from [[MOD:as-translit]]
	text = gsub(text, "(" .. c .. ")([" .. vowel .. "’?꠆]?)", function(a, b)
		local res = a .. (b == "" and "" or b)
		if match(a, "[" .. aspirates .. "]") then res = res .. "’" end
		return res end)
	
	for word in mw.ustring.gmatch(text, "[ꠀ-ꠧô’]+") do
		local orig_word = word
		word = rev_string(word)
		word = gsub(word, "^ô(" .. c .. ")(" .. v .. ")", "%1%2")
		while match(word, syncope_pattern) do
			word = gsub(word, syncope_pattern, "%1%2")
		end
		text = gsub(text, orig_word, rev_string(word))
	end
	
	text = gsub(text, ".", conv)

	-- ô is really just o
	text = mw.ustring.gsub(text, 'ও', 'অ')
	
	-- velars
	text = mw.ustring.gsub(text, 'খ়([িুইউ])', 'ক%1')
	text = mw.ustring.gsub(text, '([িুইউ])খ়', '%1ক')
	text = mw.ustring.gsub(text, 'খ়খ়', 'কক')
    -- পরিক্ষামূলক
	text = mw.ustring.gsub(text, '([েএ])ক', '%1খ়')

	-- palatals (I think?)
	text = mw.ustring.gsub(text, 'সস', 'চচ')
	
	-- affricates (I'm just guessing now)
	text = mw.ustring.gsub(text, 'জজ', 'জ়জ়')
	text = mw.ustring.gsub(text, 'জ়স', 'জচ')
	
	-- final r/l
	text = mw.ustring.gsub(text, '([খ়রল])o$', '%1')
	text = mw.ustring.gsub(text, '([খ়রল])o ', '%1 ')

	-- tone
	text = gsub(text, '’', '')
	
	return text
end
 
return export