--[=[
Bu modül cinsiyet ve numaralar için standart görünümler oluşturur.
Bir cinsiyet birimini viki/HTML biçimine çevirir.
Bir cinsiyet birimi aşağıda listelenmiş unsurlardan bir tanesidir,
tire ile ayrılmış şekildedir. Örnek olarak: "g", "n", "d-ç", "e-an-ç"
]=]--
local cikart = {}
local kodlar = {}
-- Tüm muhtemel "kısımların" oluşabileceği kodların lsitesi.
kodlar = '<abbr title="cinsiyet tamamlanmamış">?</abbr>'
-- Cinsiyetler
kodlar = '<abbr title="eril cinsiyet">e</abbr>'
kodlar = '<abbr title="eril cinsiyet">e</abbr>'
kodlar = '<abbr title="dişil cinsiyet">d</abbr>'
kodlar = '<abbr title="dişil cinsiyet">d</abbr>'
kodlar = '<abbr title="nötr cinsiyet">n</abbr>'
kodlar = '<abbr title="genel cinsiyet">g</abbr>'
kodlar = '<abbr title="genel cinsiyet">g</abbr>'
-- Fazladan belirticiler
kodlar = '<abbr title="animate">anim</abbr>'
kodlar = '<abbr title="cansız, ">cansız</abbr>'
kodlar = '<abbr title="personal">pers</abbr>'
kodlar = '<abbr title="non-personal">npers</abbr>'
-- Numaralar
kodlar = '<abbr title="tekil sayı">te</abbr>'
kodlar = '<abbr title="tekil sayı">te</abbr>'
kodlar = '<abbr title="ikil sayı">ik</abbr>'
kodlar = '<abbr title="ikil sayı">ik</abbr>'
kodlar = '<abbr title="çoğul sayı">ç</abbr>'
kodlar = '<abbr title="çoğul sayı">ç</abbr>'
-- Eylem belirticileri
kodlar = '<abbr title="imperfective aspect">impf</abbr>'
kodlar = '<abbr title="perfective aspect">pf</abbr>'
-- biçimlendir_liste'nin bir şablondan çağırılabilir hali.
function cikart.goster_liste(frame)
local args = frame.args
local dil = args; if dil == "" then dil = nil end
local liste = {}
local i = 1
while args and args ~= "" do
table.insert(liste, args)
i = i + 1
end
return cikart.bicimlendir_liste(liste, dil)
end
-- Bir veya daha fazla cinsiyet ayrıştırmasını hallet, belirtici listesi şeklinde.
function cikart.bicimlendir_liste(liste, dil)
local adsinifi_mi = nil
-- Her bir belirticiyi işlemden geçir ve biçimlendir
for anahtar, kisa in ipairs(liste) do
local as
liste, as = cikart.bicimlendir_belirtici(kisa, dil)
-- Tüm belirticilerin bir ad sınıfı olduğundan veya olmadığından emin ol.
if adsinifi_mi == nil then
adsinifi_mi = as
elseif adsinifi_mi ~= as then
error("Ad sınıfları ve cinsiyetler karıştırılamaz. Lütfen ikisinden birini seçip kullanın.")
end
end
if adsinifi_mi then
-- Tüm kodları eğik çizgi ile ayırarak birleştir
return "<span class=\"gender\">class " .. table.concat(liste, "/") .. "</span>"
else
-- Tüm kodları virgül ile ayırarak birleştir
return "<span class=\"gender\">" .. table.concat(liste, ", ") .. "</span>"
end
end
-- Tek bir cinsiyet belirticisinin alt parçalarını biçimlendir.
function cikart.bicimlendir_belirtici(kisa, dil)
local kategoriler = ""
local ret = ""
local adsinifi_mi = false
-- Eğer belirtici cX ile başlıyorsa, o zaman bir ad belirticisidir.
if kisa:find("^") or kisa:find("^c") then
adsinifi_mi = true
kod = kisa:gsub("^c", "")
if kod == "?" then
ret = "<abbr class=\"noun-class\" title=\"noun class missing\">?</abbr>"
else
ret = "<abbr class=\"noun-class\" title=\"noun class " .. kod .. "\">" .. kod .. "</abbr>"
end
else
-- Kısımları ayır ve hepsini işlemden geçir, kendi görüntü haline biçimlendir
local kisimlar = mw.text.split(kisa, "-")
for anahtar, kod in ipairs(kisimlar) do
-- Bu kod geçerli mi?
if kodlar then
kisimlar = kodlar
else
error("\"" .. kisa .. "\" cinsiyet belirticisi geçerli değil.")
end
end
-- Tüm kodları bir boşluk ile birleştir
ret = table.concat(kisimlar, " ")
end
-- Eğer dil verildiyse fazladan işlemler yap
if dil then
-- Bu desteklenmeyen bir cinsiyet mi?
if kisa:find("?") then
local m_araclar = require("Modül:araçlar")
kategoriler = m_araclar.format_categories({dil:getirAsilAd() .. " cinsiyeti eksik sözcükler"}, nil)
end
end
return ret .. kategoriler, adsinifi_mi
end
return cikart