local cikart = {}
local m_veri = mw.loadData("Modül:başlık başı/veri")
local sozcukler = m_veri.sozcukler
local sozcukGruplari = m_veri.sozcukGruplari
local sembolKarakter = m_veri.sembolKarakter
local bicimBirim = m_veri.bicimBirim
local yokAlfabecev = m_veri.yokAlfabecev
local etiketlenecek = m_veri.etiketlenecek
local function eril_mi(c)
return c == "m" or c == "m-pr" or c == "m-np" or c == "e" or c == "e-ç" or c == "e-np"
end
local function disil_mi(c)
return c == "f" or c == "f-pr" or c == "f-np" or c == "d" or c == "d-ç" or c == "d-np"
end
local function notr_mu(c)
return c == "n" or c == "n-pr" or c == "n-ç"
end
local function onislem(veri)
if type(veri.baslar) ~= "table" then
if veri.baslar then
--tracking
end
veri.baslar = { veri.baslar }
end
if type(veri.alfabecevler) ~= "table" then
if veri.alfabecevler then
--tracking
end
veri.alfabecevler = { veri.alfabecevler }
end
if not veri.baslar or #veri.baslar == 0 then
veri.baslar = {""}
end
local baslik = mw.title.getCurrentTitle()
-- Sözcüğün yeni kurum olup olmadığını kontrol et
local yeni_kurum_mu = veri.dil:getirTip() == "reconstructed"
or baslik.nsText == "YeniKurum"
-- Varsayılan bir başlık başı oluştur.
local altsayfaadi = baslik.subpageText
local sayfaadi = baslik.text
local varsayilan_bas
if yeni_kurum_mu then
varsayilan_bas = require("Modül:araçlar").plain_gsub(sayfaadi, veri.dil:getirAsilAd() .. "/", "")
else
varsayilan_bas = altsayfaadi
end
-- Gerektiğinde çok sözcüklü sayfa adlarına bağlantı oluştur.
if veri.dil:getirKod() ~= "zh" then
local ayiriciNoktalama = "(+)"
--[[ Sözcüklerin içerisinde herhangi bir noktalama işareti
dışında bir şey barındıran değerleri bul.
Aşağıdaki satırı kullanarak karakterleri soyutla. ]]
local degilSozNokt = "(+)"
local iceriyor_sozcukler = false
for muhtemelSozcukSonu in mw.ustring.gmatch(varsayilan_bas, ayiriciNoktalama) do
if mw.ustring.find(muhtemelSozcukSonu, degilSozNokt) then
iceriyor_sozcukler = true
break
end
end
if (not yeni_kurum_mu) and iceriyor_sozcukler then
local function karak_soyutlama_cozumu(s)
return mw.ustring.gsub(s, degilSozNokt, "]]%1[[")
end
varsayilan_bas = "[["
.. mw.ustring.gsub(
varsayilan_bas,
ayiriciNoktalama,
karak_soyutlama_cozumu
)
.. "]]"
--[=[
String'in başında veya sonunda oluşmuş olabilecek
tüm boş bağlantıları kaldır, yukarıda oluşturulmuş da olabilir.
]=]
varsayilan_bas = mw.ustring.gsub(varsayilan_bas, "%%]", "")
end
end
if yeni_kurum_mu then
varsayilan_bas = "*" .. varsayilan_bas
end
-- Eğer bir baş boş bir string ise "", o zaman bunu varsayılan ile değiştir
for i, bas in ipairs(veri.baslar) do
if bas == "" then
bas = varsayilan_bas
else
if bas == varsayilan_bas and veri.dil:getirAsilAd() == "İngilizce" then
table.insert(veri.kategoriler, veri.dil:getirAsilAd() .. " gereksiz baş parametresi içeren sözcükler")
end
end
veri.baslar = bas
end
--[[ Eğer belirtilmediyse alfabeyi saptamaya çalış
Bunun için ilk başı kullanıyoruz, ve tüm hepsinin
aynı alfabede yazıldığını varsayıyoruz
Bu *her zaman* doğru olmalı, değil mi? ]]
if not veri.alf then
veri.alf = require("Modül:alfabeler").bulEnIyiAlfabe(veri.baslar, veri.dil)
end
-- Alfabe çevirilerini ayarla
for i, bas in ipairs(veri.baslar) do
local alfabecev = veri.alfabecevler
-- Eğer gerekliyse bir alfabe çevirisi oluşturmaya çalış
-- Alfabe Latn veya benzeri bir alfabe ise çeviriyi oluştur,
-- ve eğer hiçbir alfabe çevirisi oluşmuyorsa
if alfabecev == "-" then
alfabecev = nil
elseif not alfabecev
and not (
veri.alf:getirKod():find("Latn", nil, true)
or veri.alf:getirKod() == "Latinx"
or veri.alf:getirKod() == "None"
)
and (not veri.alf or veri.alf:getirKod() ~= "Imag") then
alfabecev = veri.dil:alfabeceviri(require("Modül:bağlantılar").kaldir_baglantilari(bas), veri.alf)
-- Hala bir alfabe çevirimiz yok mu?
-- Bu maddeyi bir bakım kategorisine ekle.
if not alfabecev and not yokAlfabecev then
alfabecev = "<small>alfabe çevirisi gerekiyor</small>"
table.insert(veri.kategoriler, veri.dil:getirAsilAd() .. " alfabe çevirisi eksik sözcükler")
table.insert(veri.kategoriler, "Alfabe çevirisi eksik sözcükler")
end
end
-- Alfabe çevirisinin maddesine bağlantı oluştur, eğer girilen dil bunu gerektiriyorsa
if alfabecev and veri.dil:baglanti_cev() then
alfabecev = require("Modül:bağlantılar").tam_bag{
sozcuk = alfabecev,
dil = veri.dil,
alf = require("Modül:alfabeler").getirKodaGore("Latn"),
c = "-"
}
end
veri.alfabecevler = alfabecev
end
if veri.id and type(veri.id) ~= "string" then
error("Veri tablosundaki id bir string olmalı.")
end
end
-- Bir başlık başını alfabe çevirileri ile biçimlendir
local function bicimlendir_baslikbasi(veri)
local m_baglantilar = require("Modül:bağlantılar")
local m_alfabearaclari = require("Modül:alfabe araçları")
if veri.baslar and #veri.baslar and veri.dil then
--tracking
end
-- Boş olmayan alfabe çevirileri mi var?
-- Bunu bu şekilde yapmalıyız çünkü alfabecev nil olup da alfabecev olmayabilir
local varmi_alfabecev = false
-- Başları biçimlendir
for i, bas in ipairs(veri.baslar) do
if veri.alfabecevler then
varmi_alfabecev = true
end
-- Başlık başına işlemi uygula, bağlantıları ve diğer şeyleri biçimlendirmek için
if bas:find("[[", nil, true) and (not veri.alf or veri.alf:getirKod() ~= "Imag") then
bas = m_baglantilar.dil_bag({sozcuk = bas, dil = veri.dil}, false)
end
-- Dil ve alfabe
if i == 1 then
bas = m_alfabearaclari.etiket_yazi(bas, veri.dil, veri.alf, "baş", nil, veri.id)
else
bas = m_alfabearaclari.etiket_yazi(bas, veri.dil, veri.alf, "baş", nil)
end
veri.baslar = bas
end
local alfabecevler_bicimli = ""
if varmi_alfabecev then
-- Alfabe çevirilerini biçimlendir
for i, bas in ipairs(veri.baslar) do
local alfabecev = veri.alfabecevler
if not alfabecev then
alfabecev = "?"
end
alfabecev = m_alfabearaclari.etiket_alfabecev(alfabecev, veri.dil:getirKod(), "baş")
veri.alfabecevler = alfabecev
end
alfabecevler_bicimli = " (" .. table.concat(veri.alfabecevler, " ''veya'' ") .. ")"
if mw.title.new(veri.dil:getirAsilAd() .. " alfabe çevirisi", "Vikisözlük").exists then
alfabecevler_bicimli = " ]" .. alfabecevler_bicimli
end
end
return table.concat(veri.baslar, " ''veya'' ") .. alfabecevler_bicimli
end
local function bicimlendir_cinsiyetler(veri)
if veri.cinsiyetler and #veri.cinsiyetler > 0 then
local cin = require("Modül:cinsiyet ve numara")
for n,c in ipairs(veri.cinsiyetler) do
if eril_mi(veri.cinsiyetler) then
table.insert(veri.kategoriler, veri.dil:getirAsilAd() .. " eril " .. veri.soz_kategorisi)
elseif disil_mi(veri.cinsiyetler) then
table.insert(veri.kategoriler, veri.dil:getirAsilAd() .. " dişil " .. veri.soz_kategorisi)
elseif notr_mu(veri.cinsiyetler) then
table.insert(veri.kategoriler, veri.dil:getirAsilAd() .. " nötr " .. veri.soz_kategorisi)
end
end
return " " .. cin.bicimlendir_liste(veri.cinsiyetler, veri.dil)
else
return ""
end
end
local function bicimlendir_cekim_kisimlari(veri, kisimlar)
local m_baglantilar = require("Modül:bağlantılar")
for anahtar, kisim in ipairs(kisimlar) do
if type(kisim) ~= "table" then
kisim = {sozcuk = kisim}
end
local belirticiler = ""
if kisim.belirticiler and #kisim.belirticiler > 0 then
belirticiler = require("Modül:belirtici").bicimlendir_belirtici(kisim.belirticiler) .. " "
--tracking
end
local partaccel = kisim.accel
local tip = kisim and "varsayımsal" or "kalın"
local bagyok = kisim or kisim.bagyok
-- Sözcüğü tam bir bağlantıya çevir
-- Burada alfabe çevirisini gösterme, bunları burada göstermek
-- başlık başı satırını oldukça karmaşıklaştırmaktadır.
kisim = m_baglantilar.tam_bag(
{
sozcuk = not bagyok and kisim.sozcuk or nil,
alt = kisim.alt or (bagyok and kisim.sozcuk or nil),
dil = kisim.dil or veri.dil,
alf = kisim.alf or (not kisim.dil and veri.alf),
id = kisim.id,
cinsiyetler = kisim.cinsiyetler,
c = kisim.alfabecev or ((not (kisimlar.etkin_oto_alfabecev or veri.dil:getirKod() == "ar")) and "-" or nil)
},
tip,
false
)
kisim = belirticiler .. kisim
kisimlar = kisim
end
local kisimlar_cikti = ""
if #kisimlar > 0 then
kisimlar_cikti = " " .. table.concat(kisimlar, " ''veya'' ")
elseif kisimlar.request then
kisimlar_cikti = " <small></small>"
.. require("Modül:araçlar").format_categories(
{veri.dil:getirAsilAd() .. " çekimlemeye ihtiyaç duyan maddeler"},
dil,
nil,
nil,
veri.zorla_kat_cikti
)
end
return "''" .. kisimlar.etiket .. "''" .. kisimlar_cikti
end
-- Başlık başının devamında gelen çekimlemeleri biçimlendir
local function bicimlendir_cekimler(veri)
if veri.cekimler and #veri.cekimler > 0 then
-- Her çekimi tek tek biçimlendir
for anahtar, cekim in ipairs(veri.cekimler) do
veri.cekimler = bicimlendir_cekim_kisimlari(veri, cekim)
end
return " (" .. table.concat(veri.cekimler, ", ") .. ")"
else
return ""
end
end
local function goster_baslikbasi_satiri(veri)
-- Dil tipini göre alan adını kontrol et
if mw.title.getCurrentTitle().nsText == "" then
if veri.dil:getirTip() == "reconstructed" then
error("Bu dildeki sözcükler YeniKurum: alan adında kullanılmalıdır.")
elseif veri.dil:getirTip() == "appendix-constructed" then
error("Bu dildeki sözcükler Ek: alan adında kullanılmalıdır.")
end
end
local izleme_kategorileri = {}
table.insert(veri.kategoriler, 1, veri.dil:getirAsilAd() .. " " .. veri.soz_kategorisi)
-- Bir sözcük mü?
if sozcukler then
table.insert(veri.kategoriler, 1, veri.dil:getirAsilAd() .. " sözcükler")
-- Bir sözcük grubu mu?
elseif sozcukGruplari then
table.insert(veri.kategoriler, 1, veri.dil:getirAsilAd() .. " sözcük grupları")
-- Bir sembol veya karakter mi?
elseif sembolKarakter then
table.insert(veri.kategoriler, 1, veri.dil:getirAsilAd() .. " semboller ve karakterler")
-- Bir biçim birimi mi?
elseif bicimBirim then
table.insert(veri.kategoriler, 1, veri.dil:getirAsilAd() .. " biçim birimleri")
-- Bir romanizasyon mu?
elseif veri.soz_kategorisi == "romanizasyonlar" then
table.insert(veri.kategoriler, 1, veri.dil:getirAsilAd() .. " romanizasyonlar")
else
-- Eğer yukarıdakilerden birisi değilse, izleyici kategori ekle.
table.insert(izleme_kategorileri, "Tanınmayan söz türü")
--tracking
end
-- Ön işlemler
onislem(veri)
local m_baglantilar = require("Modül:bağlantılar")
if veri.dil:getirTip() ~= "reconstructed" then
for _, bas in ipairs(veri.baslar) do
if mw.title.getCurrentTitle().prefixedText ~= m_baglantilar.getirBagSayfasi(m_baglantilar.kaldir_baglantilari(bas), veri.dil) then
--tracking
break
end
end
end
-- Tüm toplanmış bilgileri topla ve biçimlendir
return
bicimlendir_baslikbasi(veri) ..
bicimlendir_cinsiyetler(veri) ..
bicimlendir_cekimler(veri) ..
require("Modül:araçlar").format_categories(
izleme_kategorileri, veri.dil, veri.sira_anahtari, nil, veri.zorla_kat_cikti
)
end
function cikart.tam_baslikbasi(veri)
local izleme_kategorileri = {}
-- En üstteki başlığı alfabeye göre biçimlendir.
local sayfaadi = mw.title.getCurrentTitle().text
if not veri.alf then
veri.alf = require("Modül:alfabeler").bulEnIyiAlfabe(sayfaadi, veri.dil)
end
if veri.alf and (etiketlenecek or etiketlenecek*-*", "", 1)] ) then
local frame = mw.getCurrentFrame()
frame:callParserFunction("DISPLAYTITLE", '<span class="' .. veri.alf:getirKod() .. '">' .. sayfaadi .. '</span>')
end
if veri.zorla_kat_cikti then
--tracking
end
if veri.getirAsilAd then
error('"tam_baslikbasi" fonksiyonuna eklenen "veri" bir dil nesnesi olmamalı.')
end
-- Herhangi bir kategori eklendi mi?
if veri.kategoriler and #veri.kategoriler > 0 then
local dil_adi = require("Modül:String").pattern_escape(veri.dil:getirAsilAd())
for _, kat in ipairs(veri.kategoriler) do
-- Kategori dilin adıyla mı başlıyor? Öyle değilse, bunu bir izleme kategorisi ile işaretle.
if not mw.ustring.find(kat, dil_adi) then
mw.log(kat, veri.dil:getirAsilAd())
table.insert(izleme_kategorileri, "Dili belli olmayanlar")
--tracking
end
end
if not veri.soz_kategorisi
and mw.ustring.find(veri.kategoriler, "^" .. veri.dil:getirAsilAd())
then
veri.soz_kategorisi = mw.ustring.gsub(veri.kategoriler, "^" .. veri.dil:getirAsilAd() .. " ", "")
table.remove(veri.kategoriler, 1)
end
end
if not veri.soz_kategorisi then
error(
'"tam_baslikbasi" fonksiyonuna iletilen kategori listesinde '
.. 'hiçbir geçerli söz türü kategorisi bulunamadı. '
.. 'Bir söz türü kategorisi dilin adını ve devamında da '
.. 'bir söz türünü barındırmalı.'
)
end
-- Alışılmadık karakterler için kategorilendirme
local standart = veri.dil:getirStandartKarakterler()
if standart then
if mw.ustring.len(mw.title.getCurrentTitle().subpageText) ~= 1 and not mw.ustring.match(mw.title.getCurrentTitle().text, "^Desteklenmeyen başlıklar/") then
for karakter in mw.ustring.gmatch(mw.title.getCurrentTitle().subpageText, "()") do
table.insert(veri.kategoriler, veri.dil:getirAsilAd() .. " " .. mw.ustring.upper(karakter) .. " karakterini içeren sözcükler")
end
end
end
-- Palindromlar için kategorilendirme
if mw.title.getCurrentTitle().nsText ~= "YeniKurum"
and require('Modül:palindromlar').is_palindrome(
mw.title.getCurrentTitle().subpageText, veri.dil, veri.alf
) then
table.insert(veri.kategoriler, veri.dil:getirAsilAd() .. " palindrom sözcükler")
end
if mw.title.getCurrentTitle().nsText == ""
and require("Modül:alfabekontrol").goster(mw.title.getCurrentTitle().subpageText, veri.dil:getirAsilAd()) == false then
return "]"
.."]"
else
return
goster_baslikbasi_satiri(veri) ..
require("Modül:araçlar").format_categories(
veri.kategoriler, veri.dil, veri.sira_anahtari, nil, veri.zorla_kat_cikti
) ..
require("Modül:araçlar").format_categories(
izleme_kategorileri, veri.dil, veri.sira_anahtari, nil, veri.zorla_kat_cikti
)
end
end
return cikart