มอดูล:Mlym-translit

จาก วิกิพจนานุกรม พจนานุกรมเสรี
ไปยังการนำทาง ไปยังการค้นหา

มอดูลนี้ใช้ถอดอักษรข้อความในอักษรมลยาฬัม.

The module should preferably not be called directly from templates or other modules. To use it from a template, use {{xlit}}. Within a module, use Module:languages#Language:transliterate.

For testcases, see มอดูล:Mlym-translit/testcases.

ฟังก์ชัน[แก้ไข]

tr(text, lang, sc)
Transliterates a given piece of text written in the script specified by sc, and language specified by lang. When the transliteration fails, returns nil.

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

local tt = {
	-- consonants
	['ക'] = 'ก', ['ഖ'] = 'ข', ['ഗ'] = 'ค', ['ഘ'] = 'ฆ', ['ങ'] = 'ง',
	['ച'] = 'จ', ['ഛ'] = 'ฉ', ['ജ'] = 'ช', ['ഝ'] = 'ฌ', ['ഞ'] = 'ญ',
	['ട'] = 'ฏ', ['ഠ'] = 'ฐ', ['ഡ'] = 'ฑ', ['ഢ'] = 'ฒ', ['ണ'] = 'ณ',
	['ത'] = 'ต', ['ഥ'] = 'ถ', ['ദ'] = 'ท', ['ധ'] = 'ธ', ['ന'] = 'น', ['ഩ'] = 'น̱',
	['പ'] = 'ป', ['ഫ'] = 'ผ', ['ബ'] = 'พ', ['ഭ'] = 'ภ', ['മ'] = 'ม',
	['യ'] = 'ย', ['ര'] = 'ร', ['റ'] = 'ร̱', ['ല'] = 'ล', ['ള'] = 'ฬ', ['ഴ'] = 'ฬ̱', ['വ'] = 'ว',
	['ശ'] = 'ศ', ['ഷ'] = 'ษ', ['സ'] = 'ส', ['ഹ'] = 'ห', ['ഺ'] = 'ต̱',
	['ൺ'] = 'ณฺ', ['ൻ'] = 'นฺ', ['ർ'] = 'รฺ', ['ൽ'] = 'ลฺ', ['ൾ'] = 'ฬฺ', ['ൿ'] = 'กฺ',
	-- independent vowels
	['അ'] = 'อ', ['ആ'] = 'อา', ['ഇ'] = 'อิ', ['ഈ'] = 'อี', ['ഉ'] = 'อุ', ['ഊ'] = 'อู',
	['ഋ'] = 'ฤ', ['ൠ'] = 'ฤๅ', ['ഌ'] = 'ฦ', ['ൡ'] = 'ฦๅ',
	['എ'] = 'เอะ', ['ഏ'] = 'เอ', ['ഐ'] = 'ไอ', ['ഒ'] = 'โอะ', ['ഓ'] = 'โอ', ['ഔ'] = 'เอา',
	['ൟ'] = 'อี',
	-- dependent vowels and diacritics (excluding front type)
	['ാ'] = 'า', ['ി'] = 'ิ', ['ീ'] = 'ี', ['ു'] = 'ุ', ['ൂ'] = 'ู',
	['ൃ'] = 'ฺฤ', ['ൄ'] = 'ฺฤๅ', ['ൢ'] = 'ฺฦ', ['ൣ'] = 'ฺฦๅ',
	['ൗ'] = '~', ['ൎ'] = 'รฺ', ['ം'] = 'ํ', ['ഃ'] = 'ห์', ['്'] = 'ฺ',
	['ഁ'] = 'ม̐', -- candrabindu
	-- marks
	['ഽ'] = '-',
	-- numerals
	['൦'] = '0', ['൧'] = '1', ['൨'] = '2', ['൩'] = '3', ['൪'] = '4',
	['൫'] = '5', ['൬'] = '6', ['൭'] = '7', ['൮'] = '8', ['൯'] = '9',
	['൰'] = '[10]', ['൱'] = '[100]', ['൲'] = '[1000]', ['൳'] = '¼', ['൴'] = '½', ['൵'] = '¾',
	-- zero-width space (display it if it hides in a word)
	[u(0x200B)] = '‼',
}

local adjust0 = {
	-- for convenience
	['ഇ'..'ൗ'] = 'ഈ', ['ഉ'..'ൗ'] = 'ഊ', ['എ'..'െ'] = 'ഐ', ['ഒ'..'ാ'] = 'ഓ', ['ഒ'..'ൗ'] = 'ഔ',
	['െ'..'െ'] = 'ൈ', ['െ'..'ാ'] = 'ൊ', ['േ'..'ാ'] = 'ോ', ['െ'..'ൗ'] = 'ൌ',
}

local adjust1 = {
	-- dependent vowels (front type)
	['െ'] = 'เ%1ะ', ['േ'] = 'เ%1', ['ൈ'] = 'ไ%1', ['ൊ'] = 'โ%1ะ', ['ോ'] = 'โ%1', ['ൌ'] = 'เ%1า',
}

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

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

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

	for k, v in pairs(adjust1) do
		text = gsub(text, letter_with_mark..k, v)
	end

	text = gsub(text, '([เแไโ])อฺ', 'อฺ%1')
	text = gsub(text, 'ะ'..letter_with_mark..'ฺ', '็%1ฺ') -- เปลี่ยน ะ ที่มีตัวสะกดตามเป็นไม้ไต่คู้
	
	-- ย้ายสัญลักษณ์ขึ้นบน เมื่อมีสระล่าง (ยกเว้นตัวที่ไม่มี)
	text = gsub(text, u(0x0331)..'([ุ-ฺ])', u(0x0304)..'%1') -- macron below > macron above
		
	return text

end

return export