Module:Glag-translit

From Linguifex
Jump to navigation Jump to search

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

local export = {}

local U = mw.ustring.char

local letters = {
	["common"] = {
		["Ⰰ"] = 'A',
		["ⰰ"] = 'a',
		["Ⱝ"] = 'A',
		["ⱝ"] = 'a',
		["Ⰱ"] = 'B',
		["ⰱ"] = 'b',
		["Ⰲ"] = 'V',
		["ⰲ"] = 'v',
		["Ⰳ"] = 'G',
		["ⰳ"] = 'g',
		["Ⰴ"] = 'D',
		["ⰴ"] = 'd',
		["Ⰵ"] = 'E',
		["ⰵ"] = 'e',
		["Ⰶ"] = 'Ž',
		["ⰶ"] = 'ž',
		["Ⰷ"] = 'Dz',
		["ⰷ"] = 'dz',
		["Ⰸ"] = 'Z',
		["ⰸ"] = 'z',
		["Ⰹ"] = 'I',
		["ⰹ"] = 'i',
		["Ⰺ"] = 'I',
		["ⰺ"] = 'i',
		["Ⰻ"] = 'I',
		["ⰻ"] = 'i',
		["Ⰼ"] = 'Đ',
		["ⰼ"] = 'đ',
		["Ⰽ"] = 'K',
		["ⰽ"] = 'k',
		["Ⰾ"] = 'L',
		["ⰾ"] = 'l',
		["Ⰿ"] = 'M',
		["ⰿ"] = 'm',
		["Ⱞ"] = 'M',
		["ⱞ"] = 'm',
		["Ⱀ"] = 'N',
		["ⱀ"] = 'n',
		["Ⱁ"] = 'O',
		["ⱁ"] = 'o',
		["Ⱉ"] = 'O',
		["ⱉ"] = 'o',
		["Ⱂ"] = 'P',
		["ⱂ"] = 'p',
		["Ⱃ"] = 'R',
		["ⱃ"] = 'r',
		["Ⱄ"] = 'S',
		["ⱄ"] = 's',
		["Ⱅ"] = 'T',
		["ⱅ"] = 't',
		["Ⱆ"] = 'U',
		["ⱆ"] = 'u',
		["Ⱇ"] = 'F',
		["ⱇ"] = 'f',
		["Ⱈ"] = 'X',
		["ⱈ"] = 'x',
		["Ⱒ"] = 'X',
		["ⱒ"] = 'x',
		["Ⱌ"] = 'C',
		["ⱌ"] = 'c',
		["Ⱍ"] = 'Č',
		["ⱍ"] = 'č',
		["Ⱎ"] = 'Š',
		["ⱎ"] = 'š',
		["Ⱏ"] = 'Ŭ',
		["ⱏ"] = 'ŭ',
		["Ⱐ"] = 'Ĭ',
		["ⱐ"] = 'ĭ',
		["Ⱜ"] = 'Ĭ',
		["ⱜ"] = 'ĭ',
		["Ⱑ"] = 'Ě',
		["ⱑ"] = 'ě',
		["Ⱓ"] = 'Ju',
		["ⱓ"] = 'ju',
		["Ⱔ"] = 'Ę',
		["ⱔ"] = 'ę',
		["Ⱕ"] = 'Y̨',
		["ⱕ"] = 'y̨',
		["Ⱗ"] = 'Ję',
		["ⱗ"] = 'ję',
		["Ⱘ"] = 'Ǫ',
		["ⱘ"] = 'ǫ',
		["Ⱖ"] = 'Ǫ',
		["ⱖ"] = 'ǫ',
		["Ⱙ"] = 'Jǫ',
		["ⱙ"] = 'jǫ',
		["Ⱚ"] = 'Θ',
		["ⱚ"] = 'θ',
		["Ⱛ"] = 'Ü',
		["ⱛ"] = 'ü',
		["Ⱋ"] = 'Št',
		["ⱋ"] = 'št'
	},
	["zle-ono"] = {
		["Ⱌ"] = 'Ć',
		["ⱌ"] = 'ć',
		["Ⱍ"] = 'Ć',
		["ⱍ"] = 'ć',
		["Ⱋ"] = 'Ść',
		["ⱋ"] = 'ść'
	}
}

local digraphs = {
	["common"] = {
		["Ⱏ[ⰉⰊⰋⰹⰺⰻ]"] = "Y", ["ⱏ[ⰹⰺⰻ]"] = "y",
	},
	["zle-ono"] = {
		["ⱏ[ⰹⰺⰻ]"] = 'ŷi',
	}
}

function export.tr(text, lang, sc)
	if not sc then
		sc = require("Module:languages").getByCode(lang):findBestScript(text):getCode()
	end

	local function digraph_subst(digraphs)
		for key, repl in pairs(digraphs) do
			text = mw.ustring.gsub(text, key, repl)
		end
	end

	if sc ~= "Glag" then
		text = nil
	else
		-- Transliterate the kamora as prime
		text = mw.ustring.gsub(text, U(0x0484), "ʹ")

		if digraphs[lang] then
			digraph_subst(digraphs[lang])
		end
		digraph_subst(digraphs["common"])

		if letters[lang] then
			text = mw.ustring.gsub(text, '.', letters[lang])
		end
		text = mw.ustring.gsub(text, '.', letters["common"])

		-- Transliterate the titlo and vzmet as colon.
		text = mw.ustring.gsub(text, "[" .. U(0x0483) .. U(0xA66F) .. "]", ":")
	end
	
	return text
end

return export