模組:Tibt-translit

維基詞典,自由的多語言詞典

這個模組會將藏語未確定的文字拉丁化。

最好不要直接從模板或其他模組調用此模組。要從模板中使用它,請以{{xlit}}做為替代;若要在模組中使用,則以Module:languages#Language:transliterate替代。

關於測試用例,請參閱Module:Tibt-translit/testcases

函數

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

[[Category:藏語模塊|per the w[[Category:per the Wylie transliteration|Wylie transliteration scheme]]

範例文字

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

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


-- Transliteration for Tibetic 藏語轉譯

local export = {}
local Tibt = require("Module:Tibt-common")
local gsub = mw.ustring.gsub
local gmatch = mw.ustring.gmatch
local match = mw.ustring.match
local sub = mw.ustring.sub
local toNFC = mw.ustring.toNFC
local upper = mw.ustring.upper

local twoChars = {
	["རྀ"] = "ṛ", ["ྲྀ"] = "ṛ", -- Primarily used in Sanskrit(-derived) borrowings.
	["ལྀ"] = "ḷ", ["ླྀ"] = "ḷ",
	
	["ཕ༹"] = "f", ["བ༹"] = "v", -- Used to transliterate Chinese.
	["ཁ༹"] = "x", ["ག༹"] = "ġ", -- Used in Balti.
	
	["ྥ༹"] = "f", ["ྦ༹"] = "v",
	["ྑ༹"] = "x", ["ྒ༹"] = "ġ",
}

local oneChar = {
	["ཀ"] = "k", ["ཁ"] = "kh", ["ག"] = "g", ["ང"] = "ng",
	["ཅ"] = "c", ["ཆ"] = "ch", ["ཇ"] = "j", ["ཉ"] = "ny",
	["ཏ"] = "t", ["ཐ"] = "th", ["ད"] = "d", ["ན"] = "n",
	["པ"] = "p", ["ཕ"] = "ph", ["བ"] = "b", ["མ"] = "m",
	["ཙ"] = "ts", ["ཚ"] = "tsh", ["ཛ"] = "dz", ["ཝ"] = ".w",
	["ཞ"] = "zh", ["ཟ"] = "z", ["འ"] = "'", ["ཡ"] = ".y",
	["ར"] = ".r", ["ཪ"] = ".r", ["ལ"] = "l", ["ཤ"] = "sh", ["ས"] = "s",
	["ཧ"] = "h", ["ཨ"] = "\1",
	["ཊ"] = "ṭ", ["ཋ"] = "ṭh", ["ཌ"] = "ḍ", ["ཎ"] = "ṇ", ["ཥ"] = "ṣ",
	["ཫ"] = "q", ["ཬ"] = "ṛ", -- Used in Balti.
	["྅"] = "ʼ", ["ྈ"] = "x", ["ྉ"] = "f", ["ྌ"] = "f", -- Used in Sanskrit.
	
	["ཱ"] = "̄", ["ི"] = "i", ["ྀ"] = "ị", ["ུ"] = "u", ["ེ"] = "e", ["ཻ"] = "ai", ["ོ"] = "o", ["ཽ"] = "au",
	
	["ཾ"] = "ṃ", ["ྂ"] = "ṃ", ["ྃ"] = "m̐", ["ཿ"] = "ḥ",
	
	["ྐ"] = "k", ["ྑ"] = "kh", ["ྒ"] = "g", ["ྔ"] = "ng",
	["ྕ"] = "c", ["ྖ"] = "ch", ["ྗ"] = "j", ["ྙ"] = "ny",
	["ྟ"] = "t", ["ྠ"] = "th", ["ྡ"] = "d", ["ྣ"] = "n",
	["ྤ"] = "p", ["ྥ"] = "ph", ["ྦ"] = "b", ["ྨ"] = "m",
	["ྩ"] = "ts", ["ྪ"] = "tsh", ["ྫ"] = "dz", ["ྭ"] = "w", ["ྺ"] = "w",
	["ྮ"] = "zh", ["ྯ"] = "z", ["ྰ"] = "'", ["ྱ"] = "y", ["ྻ"] = "y",
	["ྲ"] = "r", ["ྼ"] = "r", ["ླ"] = "l", ["ྴ"] = "sh", ["ྶ"] = "s",
	["ྷ"] = "h", ["ྸ"] = "+a",
	["ྚ"] = "ṭ", ["ྛ"] = "ṭh", ["ྜ"] = "ḍ", ["ྞ"] = "ṇ", ["ྵ"] = "ṣ",
	["ྍ"] = "x", ["ྎ"] = "f", ["ྏ"] = "f",
}

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",
	["་"] = " ", ["༌"] = "*", ["།"] = ".", ["༎"] = ".\n\n", ["༏"] = ";",
	["༑"] = "|", ["༈"] = "!", ["༔"] = ":", ["༼"] = "(", ["༽"] = ")",
	["༺"] = "<", ["༻"] = ">"
}

function export.tr(text, lang, sc)

	local langObj; if not lang then
		error("Language code required.")
	else
		langObj = require("Module:languages").getByCode(lang)
	end
	local scObj = require("Module:scripts").getByCode("Tibt")
	text = (langObj:makeEntryName(text))
	text = scObj:fixDiscouragedSequences(text)
	text = scObj:toFixedNFD(text)
	text = gsub(text, "༒", "།")
	text = gsub(text, "[་༌]+$", "")
	
	for word in Tibt.getWords(text) do
		for syllable in Tibt.getSyllables(word) do
			local tr = syllable
			
			tr = gsub(tr, "(ཱ)([ིེུ-ཽྀྲླ]+)", "%2%1")
			
			local mainStack = gsub(Tibt.findMainStack(syllable, lang), "[ཾཿྂྃ]", "")
			if match(mainStack, "([^ༀི-ཽྀ]ཱ?)$") then
				local newMainStack = mainStack .. "a"
				newMainStack = gsub(newMainStack, "ཱa$", "aཱ")
				tr = gsub(tr, mainStack, newMainStack, 1)
			end
			
			tr = gsub(tr, "^(.*)༷(.*)$", "<u>%1%2</u>")
			tr = gsub(tr, "^(.*)༵(.*)$", "<span style=\"text-decoration-style:double;\">%1%2</span>")
			
			for letter, replacement in pairs(twoChars) do
				tr = gsub(tr, letter, replacement)
			end
			tr = gsub(tr, ".", oneChar)
			
			tr = gsub(tr, "(.')([^aāeiīoḷḹṛṝuū%-<])", "%1a%2")
			tr = gsub(tr, "%f[^%zaāeiīoḷḹṛṝuū%->]%.", "")
			tr = gsub(tr, "%.([rwy][^aāeiīoḷḹṛṝuū])", "%1")
			tr = gsub(tr, "^\1", "")
			tr = tr:gsub("\1", "%.")
			
			text = gsub(text, syllable, tr, 1)
		end
	end
	
	text = gsub(text, "྄a?", "")
	text = gsub(text, ".", symbol)
	text = gsub(text, " ' ", "")
	text = gsub(text, " *· *·? *", " · ")
	text = gsub(text, " *%.", ".")
	text = gsub(text, "\n+", "\n\n")
	text = gsub(text, "\n\n$", "")
	if match(text, "%. ") or match(text, "%.\n.") or match(text, "%.$") then
		text = gsub(text, "^'?.", upper)
		text = gsub(text, "\n\n'?.", upper)
		text = gsub(text, "%. '?.", upper)
	end
	
	-- End with a space so that concurrent parts of running text that need to be transliterated separately (e.g. due to links) are still properly separated.
	return toNFC(text) .. " "
end

return export