Module:bo-translit

Definition from Wiktionary, the free dictionary
Jump to: navigation, search

This module will transliterate Tibetan language text per the Wylie transliteration scheme.

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 Module:bo-translit/testcases.

Functions[edit]

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.

Sample text[edit]

བོད་རྒྱལ་རབས་དེ་སྤྱིར་བོད་བརྒྱུད་ནང་བསྟན་ཆོས་ལུགས་ཀྱི་ལོ་རྒྱུས་དང་ཧ་ཅང་འབྲེལ་ཡོད། རྒྱུ་རྐྱེན་གཙོ་བོ་ནི་བོད་རིགས་དང་ སོག་རིགས་ མན་ཇུ་རིགས་སོགས་ཀྱི་རིག་གནས་འཕེལ་རྒྱས་དང་འབྲེལ་ཡོད་ མ་ཟད་སྔོན་བྱོན་ཀྱི་ལོ་རྒྱུས་མཁས་ཅན་ཕལ་ཆེ་བ་ནི་ནང་ཆོས་རྒྱུད་འཛིན་པ་ཡིན།།བོད་གངས་ཅན་ཞེས་པའི་རྒྱལ་ཁབ་ཆེན་པོ་འདི་ཉིད། ཆེས་སྔ་བའི་དུས་བོད་ཀྱི་ཡུལ་ཆ་ཤས་རྒྱ་ཆེ་བ་རྒྱ་མཚོ་ཡིན་པ་དང༌། རིམ་གྱིས་མཚོའི་རྒྱུན་སྐམ་ནས་ཡུལ་ལྗོངས་ཆགས། དེ་ནས་མིའི་འགྲོ་བ་བྱུང་ཞིང༌། དེ་ཡང་མིའི་འགྲོ་བ་ནི་འཕགས་མཆོག་སྤྱན་རས་གཟིགས་ཀྱི་རྣམ་སྤྲུལ་ཕ་སྤྲེའུ་བྱང་ ཆུབ་སེམས་དཔའ་དང༌། མ་སྒྲོལ་མའི་རྣམ་སྤྲུལ་མ་བྲག་སྲིན་མོ་གཉིས་དུས་པ་ལས་ བྱུང་བ་ཡིན་པ་རེད། གངས་ཅན་བོད་རྒྱལ་ཁབ་ཀྱི་ས་ཁྱོན་ནི་སྤྱི་ལེ་གྲུ་བཞི་མ་འབུམ་ ༢༥ ཡིན་ཞིང༌། རྒྱ་ཁྱོན་དེ་ནི་བལ་ཡུལ་གྱི་རྒྱ་ཁྱོན་ལྔ་བཅུ་ཙམ་ཞིག་ཡིན་པ་དང༌། ཁོར་ཡུག་ནི། ཤར་དུ་རྒྱ་ནག་དང༌། མན་ཇུ། སོག་པོ། ནུབ་ཏུ་བལ་ཡུལ་དང༌། རྒྱ་གར། པ་ཀི་སི་ཐན། ཨབ་གྷ་ནི་སི་ཏན། བྱང་དུ་ཏུར་ཀི་སི་ ཏན་དང༌། ཨུ་རུ་སུ། ལྷོ་རུ་འབྲུག་དང༌། འབྲས་ལྗོངས། འབར་མ། བྷང་ལ་སྡེ་ཤི་བཅས་ཀྱི་དབུས་སུ་གནས་ཡོད། དེ་ལྟ་བུའི་རྒྱ་ཁྱོན་ཅན་གྱི་བོད་ཀྱི་རྒྱལ་ཁབ་དེ། ཕྱི་ལོ་མ་བྱུང་བའི་ལོ་ ༡༢༧ གོང་རྒྱལ་པོའི་ཐོག་མ་གཉའ་ཁྲི་བཙན་པོ་བྱུང་བ་ནས་བཟུང་རྒྱལ་པོ་གླང་ དར་མའི་བར་མི་ལོ་དགུ་བརྒྱ་ལྷག་གི་རིང་ཆོས་དང་སྲིད་ཀྱི་བྱུང་བ་མཐའ་ཡས་པ་བྱུང། ཕྱི་ལོ་ ༩༠༠ ཙམ་ནས་མི་ལོ་ ༣༤༧ ཙམ་རིང་བོད་ཡུལ་མདོ་སྟོད་སྨད་དང༌། དབུས་གཙང་བཅས་པ་སིལ་བུར་འཐོར་ཏེ་བོད་ཁམས་ཉམས་རྒྱུད་ཇེ་ཆེར་གྱུར། རིམ་པས་ས་སྐྱའི་ཁྲི་རབས་ཉི་ཤུས་ལོ་ ༩༦ རིང་བོད་སྤྱི་ལ་དབང་བསྒྱུར་ཞིང༌། དེ་རྗེས་ཕག་མོ་གྲུབ་པ་ཁྲི་རབས་བཅུ་གཅིག་གིས་ལོ་ ༨༦དང༌། རིན་སྤུངས་པ་ཁྲི་རབས་བཞི་ནས་ལོ་ ༡༣༠ དང༌། སྡེ་པ་གཙང་པའི་ཁྲི་རབས་གསུམ་གྱིས་ལོ་ ༧༦ བཅས་དབང་སྒྱུར། དགའ་ལྡན་ཕོ་བྲང་གི་དུས་རབས། སྤྱི་ལོ་ ༡༦༤༢ ནས་ ༡༩༥༠ བར་ལོ་ ༣༦༧སོགས་ཡིན།

bod rgyal rabs de spyir bod brgyud nang bstan chos lugs kyi lo rgyus dang ha cang 'brel yod · rgyu rkyen gtso bo ni bod rigs dang sog rigs man ju rigs sogs kyi rig gnas 'phel rgyas dang 'brel yod ma zad sngon byon kyi lo rgyus mkhas can phal che ba ni nang chos rgyud 'dzin pa yin · bod gangs can zhes pa'i rgyal khab chen po 'di nyid · ches snga ba'i dus bod kyi yul cha shas rgya che ba rgya mtsho yin pa dang · rim gyis mtsho'i rgyun skam nas yul ljongs chags · de nas mi'i 'gro ba byung zhing · de yang mi'i 'gro ba ni 'phags mchog spyan ras gzigs kyi rnam sprul pha spre'u byang chub sems dpa' dang · ma sgrol ma'i rnam sprul ma brag srin mo gnyis dus pa las byung ba yin pa red · gangs can bod rgyal khab kyi sa khyon ni spyi le gru bzhi ma 'bum 25 yin zhing · rgya khyon de ni bal yul gyi rgya khyon lnga bcu tsam zhig yin pa dang · khor yug ni · shar du rgya nag dang · man ju · sog po · nub tu bal yul dang · rgya gar · pa ki si than · ab gha ni si tan · byang du tur ki si tan dang · u ru su · lho ru 'brug dang · 'bras ljongs · 'bar ma · bhang la sde shi bcas kyi dbus su gnas yod · de lta bu'i rgya khyon can gyi bod kyi rgyal khab de · phyi lo ma byung ba'i lo 127 gong rgyal po'i thog ma gnya' khri btsan po byung ba nas bzung rgyal po glang dar ma'i bar mi lo dgu brgya lhag gi ring chos dang srid kyi byung ba mtha' yas pa byung · phyi lo 900 tsam nas mi lo 347 tsam ring bod yul mdo stod smad dang · dbus gtsang bcas pa sil bur 'thor te bod khams nyams rgyud je cher gyur · rim pas sa skya'i khri rabs nyi shus lo 96 ring bod spyi la dbang bsgyur zhing · de rjes phag mo grub pa khri rabs bcu gcig gis lo 86dang · rin spungs pa khri rabs bzhi nas lo 130 dang · sde pa gtsang pa'i khri rabs gsum gyis lo 76 bcas dbang sgyur · dga' ldan pho brang gi dus rabs · spyi lo 1642 nas 1950 bar lo 367sogs yin


local export = {}
local gsub = mw.ustring.gsub
local match = mw.ustring.match

local conv = {
	["ཀ"] = "k", ["ཁ"] = "kh", ["ག"] = "g", ["ང"] = "ng", 
	["ཅ"] = "c", ["ཆ"] = "ch", ["ཇ"] = "j", ["ཉ"] = "ny", 
	["ཏ"] = "t", ["ཐ"] = "th", ["ད"] = "d", ["ན"] = "n", 
	["པ"] = "p", ["ཕ"] = "ph", ["བ"] = "b", ["མ"] = "m", 
	["ཙ"] = "ts", ["ཚ"] = "tsh", ["ཛ"] = "dz", ["ཝ"] = "w", 
	["ཞ"] = "zh", ["ཟ"] = "z", ["འ"] = "‘", ["ཡ"] = "y", 
	["ར"] = "r", ["ལ"] = "l", ["ཤ"] = "sh", ["ས"] = "s", 
	["ཧ"] = "h", ["ཨ"] = "a", 
	["ཊ"] = "ṭ", ["ཋ"] = "ṭh", ["ཌ"] = "ḍ", ["ཎ"] = "ṇ", ["ཥ"] = "ṣ", 
	
	["ི"] = "i", 
	["ུ"] = "u", 
	["ེ"] = "e", 
	["ོ"] = "o", 
	["ཱ"] = "ā", 
	["ཱི"] = "ī", 
	["ཱུ"] = "ū", 
	["ཻ"] = "ai", 
	["ཽ"] = "au", 
	["ྲྀ"] = "ṛ", 
	["ཷ"] = "ṝ", 
	["ླྀ"] = "ḷ", 
	["ཹ"] = "ḹ", 
	["ཾ"] = "ṃ", 
	["ྃ"] = "ṃ", 
	["ཿ"] = "aḥ", 
	["ༀ"] = "oṃ",
	
	["ྐ"] = "k", ["ྑ"] = "kh", ["ྒ"] = "g", ["ྔ"] = "ng", 
	["ྕ"] = "c", ["ྖ"] = "ch", ["ྗ"] = "j", ["ྙ"] = "ny", 
	["ྟ"] = "t", ["ྠ"] = "th", ["ྡ"] = "d", ["ྣ"] = "n", 
	["ྤ"] = "p", ["ྥ"] = "ph", ["ྦ"] = "b", ["ྨ"] = "m", 
	["ྩ"] = "ts", ["ྪ"] = "tsh", ["ྫ"] = "dz", ["ྭ"] = "w", 
	["ྮ"] = "zh", ["ྯ"] = "z", ["ྰ"] = "‘", ["ྱ"] = "y", 
	["ྲ"] = "r", ["ླ"] = "l", ["ྴ"] = "sh", ["ྶ"] = "s", 
	["ྷ"] = "h", ["ྸ"] = "a", 
	["ྚ"] = "ṭ", ["ྛ"] = "ṭh", ["ྜ"] = "ḍ", ["ྞ"] = "ṇ", ["ྵ"] = "ṣ"
}

local symbol = {
	["༠"] = "0", ["༡"] = "1", ["༢"] = "2", ["༣"] = "3", ["༤"] = "4",
	["༥"] = "5", ["༦"] = "6", ["༧"] = "7", ["༨"] = "8", ["༩"] = "9",
	["༪"] = "0.5", ["༫"] = "1.5", ["༬"] = "2.5", ["༭"] = "3.5", ["༮"] = "4.5", 
	["༯"] = "5.5", ["༰"] = "6.5", ["༱"] = "7.5", ["༲"] = "8.5", ["༳"] = "9.5",
	["་"] = " ", ["།"] = "·", ["‘"] = "'",
}

function export.tr(text, lang, sc, debug_mode)
	text = gsub(text, "[༌་]+ ?", "་")
	text = gsub(text, "[་།]+$", "")
	text = gsub(text, "([^་])(འ[ཱིེོིུྲཷླཹཾཿ])", "%1་‘་%2")
	
	for Tibetan_word in mw.ustring.gmatch(text, "[་-༑ཀ-ྼ]+") do
		Tibetan_word = gsub(Tibetan_word, "་$", "")
		
		for syllable in mw.ustring.gmatch(Tibetan_word, "[ཀ-ྼ]+") do
			local tr = {}

			local syl = gsub(syllable, "ཨ([ཱིེོིུྲཷླཹཾཿ])", "%1")
			syl = gsub(syl, "([ྐྑྒྔྕྖྗྙྟྠྡྣྤྥྦྨྩྪྫྮྯྭྰྱྲླྴྶྷྸ]+)([^ཱིེོིུྲཷླཹཾཿྐྑྒྔྕྖྗྙྟྠྡྣྤྥྦྨྩྪྫྮྯྭྰྱྲླྴྶྷྸ]*)$", "%1a%2")
			letter = mw.text.split(syl, "", true)
			
			for i = 1, #letter do
				tr[i] = conv[letter[i]] or letter[i]
			end

			if not match(syllable,"[ྐྑྒྔྕྖྗྙྟྠྡྣྤྥྦྨྩྪྫྮྯྭྰྱྲླྴྶྷྸིེོུཨཱཱཱིཻཽུྲྀཷླྀཹཾྃཿ]") then
				if #letter < 5 then
					if #letter > 3 then
						if letter[2] ~= "འ" and letter[3] ~= "འ" then
							table.insert(tr, 3, "a")
						end
						
					elseif #letter > 2 then
						if letter[3] == "འ" then
							if letter[1] == "འ" then
								tr = { "‘", tr[2], "a", "‘" }
							else
								tr = { tr[1], tr[2], "a", "‘" }
							end
							
						elseif not match(letter[1], "[གདབའམ]") or (match(letter[1]..letter[2]..letter[3], "[གདབའམ][གངཐབམའརལ]ས")) then
							table.insert(tr, 2, "a")
						else
							table.insert(tr, 3, "a")
						end
						
					elseif match(letter[1], "[གདབའམ]") and not match(letter[2] or "", "[གངདཐབམའརལསན]") then
						table.insert(tr, "a")
					else
						table.insert(tr, 2, "a")
					end
				end
			end
		
			tr = table.concat(tr)
			
			if match(syllable, "གཡ") then
				tr = gsub(tr, "gy", "g.y")
			end
			
			text = gsub(text, syllable, tr, 1)
		end
	end
	
	text = gsub(text, ".", symbol)
	text = gsub(text, " ' ", "")
	text = gsub(text, " *· *·? *", " · ")
	text = gsub(text, " *%.", ".")
	
	if match(text, "[ཀ-ྼ]") and not debug_mode then
		return nil
	else
		return text
	end
end

return export