Moduuli:Kirjoitusjärjestelmät

Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Kirjoitusjärjestelmät/ohje

local p = {}

-- Kielten ISO 15924 -kirjoitusjärjestelmä koodit
local kirjoitusjarjestelmat = {
	["am"]  = "Ethi", -- amhara
	["ar"]  = "Arab", -- arabia
	["as"]  = "Beng", -- assami
	["bn"]  = "Beng", -- bengali
	["bo"]  = "Tibt", -- tiibet
	["chr"] = "Cher", -- cherokee
	["cmn"] = "Hani", -- mandariinikiina
	["cu"]  = { "Zzzz", "Cyrl", "Glag" }, -- kirkkoslaavi
	["dv"]  = "Thaa", -- divehi
	["dz"]  = "Tibt", -- dzongkha
	["el"]  = "Grek", -- kreikka
	["fa"]  = "Arab", -- persia
	["fr"]  = "Latn", -- ranska
	["got"] = "Goth", -- gootti
	["grc"] = "Grek", -- muinaiskreikka
	["gu"]  = "Gujr", -- gudžarati
	["he"]  = "Hebr", -- hebrea
	["hi"]  = "Deva", -- hindi
	["hy"]  = "Armn", -- armenia
	["iu"]  = { "Zzzz", "Latn", "Cans" }, -- inuktitut
	["km"]  = "Khmr", -- khmeeri
	["ja"]  = { "Jpan", "Hani", "Hrkt", "Hira", "Kana" }, -- japani
	["ko"]  = { "Kore", "Hani", "Hang" },  -- korea
	["my"]  = "Mymr", -- burma
	["oj"]  = { "Zzzz", "Latn", "Cans" }, -- odžibwa
	["ru"]  = "Cyrl", -- venäjä
	["sa"]  = "Deva", -- sanskrit
	["sc"]  = { "Zzzz", "Latn", "Cyrl" }, -- serbia
	["si"]  = "Sinh", -- sinhala
	["th"]  = "Thai", -- thai
	["ti"]  = "Ethi", -- tigrinja
	["uk"]  = "Cyrl", -- ukraina
	["ur"]  = "Arab", -- urdu
	["yi"]  = "Hebr", -- jiddiš
	["yue"] = "Hani", -- kantoninkiina
	["zh"]  = "Hani", -- kiina
	["nan"] = "Hani", -- minnan
	["ta"]  = "Taml", -- tamili
}

-- Kaikki kielen kirjoitusjärjestelmät kattava koodi, jos sellainen on.
--
-- @param lang:  kielen kielikoodi
-- @return:      kielen yleinen järjestelmä tai Zzzz
function p.yleinenKirjoitusjarjestelma(lang)
	local tbl = kirjoitusjarjestelmat[lang]
	if type(tbl) == "table" then
    	return tbl[1]
	elseif tbl then
    	return tbl
	else
   		return "Zzzz"
	end
end

function p.kirjoitusjarjestelmat(lang)
	local val = kirjoitusjarjestelmat[lang]
	if val then
		return val
	else
		return "Zzzz"
	end
end

--- Erottaa kieliosan ja kirjoitusjärjestelmäosan koodista.
--
-- Esim. 
--     sc-Cyrl -> sc,  Cyrl
--     bg      -> bg,  nil
--     Hani    -> nil, Hani
function p.avaaKielikoodi(lgsc)
   local lg, sc = mw.ustring.match(lgsc, "([a-z][a-z][a-z]?)-([A-Z][a-z][a-z][a-z])")
   if lg then
      return lg, sc
   end
   
   sc = mw.ustring.match(lgsc, "([A-Z][a-z][a-z][a-z])")
   if sc then
		return nil, sc
   end
   
   return lgsc
end


p["YleinenKirjoitusjärjestelmä"] = function (frame)
	local lgsc = frame.args[1]
	assert(lgsc, "Kieli- tai kirjoitusjärjestelmätunnus puuttuu (parametri 1)")
	
	if lgsc == "kans" then
		return "Zyyy"
	end
	
	local lang, script = p.avaaKielikoodi(lgsc)
	if script then
		return script
	end
		
	return p.yleinenKirjoitusjarjestelma(lang)
end

function p.Kielikoodi(frame)
	local lgsc = frame.args[1]
	assert(lgsc, "Kieli- tai kirjoitusjärjestelmätunnus puuttuu (parametri 1)")
	
	if lgsc == "kans" then
		return "Zyyy"
	end
	
	local lang, script = p.avaaKielikoodi(lgsc)
	if lang then
		return lang
	end
		
	return ""
end

-- Vanha
local merkistot = {
	["ar"]  = "Arab",
	["cmn"] = "Hani",
	["fi"]  = "Latn",
	["ja"]  = "Jpan",
	["ko"]  = "Kore",
	["ru"]  = "Cyrl",
	["th"]  = "Thai",
	["el"]  = "Grek",
	["grc"] = "Grek",
}

---
function p.kirjoitusjarjestelmakoodi_kielelle(kielikoodi)
	if merkistot[kielikoodi] then
		return merkistot[kielikoodi]
	else
		return "Zzzz"		
	end
end

return p