Modülün alt sayfaları:
local cikart = {}
--[=[
] ve çok fazla hafıza
kullanan sayfalar ] sayfasında
listelenmiştir.
Kullanılan diğer modüller:
]
]
]
]
]=]
local m_alfabearaclari = require("Modül:alfabe araçları")
local gorme_buyuk = {
= true,
}
local ses_ciktisi = {
= "Modül:th",
-- = "Modül:km",
}
local soz_etiketleri = {
= "ön ad",
= "belirteç",
= "çekim",
= "ad",
= "özel ad",
= "eylem",
= "geçişsiz eylem",
= "geçişli eylem",
= "geçişli ve geçişsiz eylem",
}
function cikart.getirBagSayfasi(hedef, dil)
if mw.loadData("Modül:bağlantılar/veri").desteklenmeyen_basliklar then
return "Unsupported titles/" .. mw.loadData("Modül:bağlantılar/veri").desteklenmeyen_basliklar
end
-- Eğer bağlantı desteklenmeyen bir karakter içeriyorsa, bağlantıyı oluşturma.
if hedef:find("{{{", nil, true) then
return nil
end
if hedef:find("^:") or hedef:find("^w:") or hedef:find("^wikipedia:") then
return hedef
end
-- Noktalama işaretlerini sayfa adından kaldır
hedef = dil:yapGirdiAdi(hedef)
-- YeniKurum sözcükler ve sadece Ek alanında kullanılan sözcükler için bağlantı oluştur
if hedef:find("^*.") then
if dil:getirKod() == "und" then
return nil
end
hedef = "YeniKurum:" .. dil:getirAsilAd() .. "/" .. mw.ustring.sub(hedef, 2)
elseif dil:getirTip() == "reconstructed" then
error(dil:getirAsilAd() .. " varlığı kanıtlanmamış bir dildir, bir yeni kurum dili olduğunu belirtmek için başına '*' konulması gerekmektedir")
elseif dil:getirTip() == "appendix-constructed" then
hedef = "Ek:" .. dil:getirAsilAd() .. "/" .. hedef
end
return hedef
end
-- Girilen bağlantının kısımlarıyla dil-bazlı bir bağlantı oluştur
local function yapDilBag(bag, dil, id, izinverKendiBag)
-- Eğer bir görünüm biçimi yoksa, varsayılan bir değer oluştur
if not bag.gorunum then
bag.gorunum = bag.hedef
-- Ön eki görünüm biçiminden ayır
-- YAP: diğer interviki bağlantıları?
if bag.gorunum:find("^:") and not mw.loadData("Modül:bağlantılar/veri").desteklenmeyen_basliklar then
bag.gorunum = bag.gorunum:gsub("^:", "")
elseif bag.gorunum:find("^w:") then
bag.gorunum = bag.gorunum:gsub("^w:", "")
elseif bag.gorunum:find("^wikipedia:") then
bag.gorunum = bag.gorunum:gsub("^wikipedia:", "")
end
end
-- Hedefi işlemden geçir
bag.hedef = cikart.getirBagSayfasi(bag.hedef, dil)
if not bag.hedef then
return bag.gorunum
end
-- Eğer hedef mevcut sayfa ile aynıysa, bu defa bir "kendi-bağlantı" çıktısı ver
if not izinverKendiBag and not id and (bag.hedef == mw.title.getCurrentTitle().prefixedText or bag.hedef == ":" .. mw.title.getCurrentTitle().prefixedText) then
return "<strong class=\"selflink\">" .. bag.gorunum .. "</strong>"
end
-- Parçayı ekle
-- "Belirlenmemiş" için bir kısım bağı ekleme, bu kısımlar zaten mevcut ve geçerli de değil.
-- SekmeliDiller bir kısım olmadan "son ziyaret edilmiş" kısmı kullanarak bağlantıları halleder,
-- ama "Belirlenmemiş" bu özelliği bozabilir.
if not (bag.hedef:find("^w:") or bag.hedef:find("^wikipedia:")) then
if not bag.parca and dil:getirKod() ~= "und" then
if id then
bag.parca = require("Modül:araçlar").make_id(dil, id)
elseif not bag.hedef:find("^Ek:") and not bag.hedef:find("^YeniKurum:") then
bag.parca = dil:getirAsilAd()
end
end
end
-- Bu ] gibi sayfalara, garip bir şey yapmadan bağlantı yapılmasını sağlar.
bag.hedef = mw.ustring.gsub(bag.hedef, ":", ":")
return "]"
end
-- Bir bağlantıyı kısımlarına ayır
local function parcalaBag(bagyazi)
local bag = {hedef = bagyazi}
local bulunan, _, bir, iki
bulunan, _, bir, iki = mw.ustring.find(bag.hedef, "^(+)|(.+)$")
if bulunan then
bag.hedef = bir
bag.gorunum = iki
else
bag.gorunum = bag.hedef
end
bulunan, _, bir, iki = mw.ustring.find(bag.hedef, "^(.+)#(.+)$")
if bulunan then
bag.hedef = bir
bag.parca = iki
end
return bag
end
-- Girilen sözcüğe basit bir vikibağlantısı oluşturur. Eğer yazı zaten
-- bağlantı içeriyorsa, bunlar kısmı düzeltmek için bağlantılar ile değiştirilir.
function cikart.dil_bag(veri, izinverKendiBag)
if type(veri) ~= "table" then
error("'dil_bag' fonksiyonunun ilk parametresi tablo olmak zorundadır. Daha fazla bilgi için bakınız, Modül:bağlantılar/belge.")
end
local yazi = veri.sozcuk
if gorme_buyuk and yazi then
yazi = mw.ustring.gsub(yazi, "%^", "")
end
-- Eğer yazı * veya başka bir karakterle başlıyorsa,
-- o zaman her bağlantı * ile başlıyormuş gibi davran
local hepsiYeniKurum = false
if yazi:find("^*.") then
hepsiYeniKurum = true
end
-- Yazıda eklenmiş vikibağlantımız var mı?
if yazi:find("[[", nil, true) then
-- Bir vikibağlantı etiketi ile başlayıp bitiyorsa
if mw.ustring.find(yazi, "^%%]$") then
-- Aralarda var mı yok mu.
-- Bu vikibağlantıları gereksiz hale getirir.
if mw.ustring.find(yazi, "^%]+%]%]$") then
else
local sablon = mw.ustring.gsub(yazi, "^%%]$", "%1")
sablon = mw.ustring.gsub(sablon, "%]%], %[%[", "|")
end
end
yazi = mw.ustring.gsub(yazi, "%]+)%]%]",
function(bagyazi)
local bag = parcalaBag(bagyazi)
if hepsiYeniKurum then
bag.hedef = "*" .. bag.hedef
end
return yapDilBag(bag, veri.dil, veri.id, izinverKendiBag)
end
)
-- Eğer devamında da aynısı varsa baştaki * simgesini kaldır,
-- görünümü * ile başlayan bir bağlantı için
if hepsiYeniKurum then
yazi = mw.ustring.gsub(yazi, "^%*%]+)|%*", "[[%1|*")
end
else
-- Eğer yazıya eklenmiş vikibağlantısı yoksa, parametreleri kullanarak bağlantı oluştur.
yazi = yapDilBag({hedef = yazi, gorunum = veri.alt}, veri.dil, veri.id, izinverKendiBag)
end
return yazi
end
function cikart.isaretle(yazi, nesneTuru, tip, dil)
local etiket = { "", "" }
if nesneTuru == "anlam" then
etiket = { '<span class="mention-gloss-double-quote">“</span><span class="mention-gloss">', '</span><span class="mention-gloss-double-quote">”</span>' }
elseif nesneTuru == "c" then
if tip == "sözcük" then
etiket = { '<span lang="' .. dil:getirKod() .. '" class="tr mention-tr Latn">', '</span>' }
else
etiket = { '<span lang="' .. dil:getirKod() .. '" class="tr Latn">', '</span>' }
end
elseif nesneTuru == "bilgiler" then
etiket = { '<span class="mention-gloss-paren annotation-paren">(</span>', '<span class="mention-gloss-paren annotation-paren">)</span>' }
end
if type(yazi) == "string" then
return etiket .. yazi .. etiket
else
return ""
end
end
cikart.mark = cikart.isaretle
-- Bilgilerin biçimini oluştur (sözcük bağlantısının devamında beliren her şey)
function cikart.bicimlendir_bag_bilgilerini(veri, tip)
local sonuc = {}
-- İnterviki bağlantısı
if veri.interviki then
table.insert(sonuc, veri.interviki)
end
-- Cinsiyetler
if type(veri.cinsiyetler) ~= "table" then
veri.cinsiyetler = { veri.cinsiyetler }
end
if veri.cinsiyetler and #veri.cinsiyetler > 0 then
local m_cinsiyet = require("Modül:cinsiyet ve numara")
table.insert(sonuc, " " .. m_cinsiyet.bicimlendir_liste(veri.cinsiyetler, veri.dil))
end
local bilgiler = {}
-- Alfabe çevirisi
if veri.c then
local tur
if tip == "sözcük" then
tur = tip
else
tur = "varsayılan"
end
table.insert(bilgiler, m_alfabearaclari.etiket_alfabecev(veri.c, veri.dil, tur))
end
-- Anlam/çeviri
if veri.anlam then
table.insert(bilgiler, cikart.isaretle(veri.anlam, "anlam"))
end
-- Söz türü
if veri.soz then
table.insert(bilgiler, soz_etiketleri or veri.soz)
end
-- Tamamının/bir kısmının tam anlamıyla çevirisi
if veri.tam then
table.insert(bilgiler, "tam çevirisi " .. cikart.isaretle(veri.tam, "anlam"))
end
if #bilgiler > 0 then
table.insert(sonuc, " " .. cikart.isaretle(table.concat(bilgiler, ", "), "bilgiler"))
end
return table.concat(sonuc)
end
-- {{b}} veya {{z}} şablonlarının başka modüllerden de çağırılabilen bir versiyonu
function cikart.tam_bag(veri, tip, izinverKendiBag)
if type(veri) ~= "table" then
error("'tam_bag' fonksiyonunun ilk parametresi tablo olmak zorundadır. Daha fazla bilgi için bakınız, Modül:bağlantılar/belge.")
end
-- Bağlantıyı oluştur
local sonuc = {}
local kategoriler = {}
local bag = ""
local bilgiler
-- Gösterilecek bir yazı var mı?
if (veri.sozcuk or veri.alt) then
-- Girildiyse alfabeyi saptamaya çalış
if not veri.alf then
veri.alf = require("Modül:alfabeler").bulEnIyiAlfabe(veri.alt or veri.sozcuk, veri.dil)
end
-- Eğer sözcük eklendiyse bir bağlantı oluşturmaya çalıştır, aksi takdirde alternatif yazıyı bağlantı olmadan göster
bag = m_alfabearaclari.etiket_yazi(veri.sozcuk and cikart.dil_bag(veri, izinverKendiBag) or veri.alt, veri.dil, veri.alf, tip)
else
--[[ Gösterilecek bir sözcük yok.
En azından bir alfabe çevirisi var mı elimizde? ]]
bag = m_alfabearaclari.iste_alfabe(veri.dil, veri.alf)
if bag == "" or not veri.c or veri.c == "-" then
-- Gösterilecek bir bağlantı yok, ve alfabe çevirisi de yok. Sözcük istendiğini belirt.
local kategori = ""
if mw.title.getCurrentTitle().nsText ~= "Şablon" and tip == "çeviri" then
table.insert(kategoriler, "]")
end
bag = "<small></small>"
end
end
table.insert(sonuc, bag)
if veri.c == "" or veri.c == "-" then
veri.c = nil
elseif ses_ciktisi then
local m_ses = require(ses_ciktisi)
veri.c = veri.c or m_ses.getTranslit(cikart.kaldir_baglantilari(veri.sozcuk))
elseif (veri.sozcuk or veri.alt)
and not ((veri.alf:getirKod():find("Latn", nil, true)) or veri.alf:getirKod() == "Latinx") then
if not mw.loadData("Modül:bağlantılar/veri").yuksek_hafizali_sayfalar or not veri.c then
-- Eğer gerekliyse alfabe çevirisini getir
local otomatik_c =
veri.dil:alfabeceviri(
cikart.kaldir_baglantilari(veri.alt or veri.sozcuk), veri.alf)
if otomatik_c then
local elle_eklenmis_c = veri.c
if elle_eklenmis_c then
if elle_eklenmis_c == otomatik_c then
table.insert(
kategoriler,
"]"
.. "]"
)
else
-- Bu durum Arapça köklerin izleme kategorilerine eklenmesini engeller.
if mw.ustring.gsub( otomatik_c, "%s", "-" ) ~= elle_eklenmis_c then
table.insert(
kategoriler,
"]"
.. "]"
)
end
end
end
if (not elle_eklenmis_c) or veri.dil:gecersizElleCeviri() then
veri.c = otomatik_c
end
end
end
end
-- Alfabe çevirisinin maddesine bağlantı oluştur, eğer girilen dil bunu gerektiriyorsa
if veri.c and veri.dil:baglanti_cev() then
veri.c = cikart.dil_bag{ dil = veri.dil, sozcuk = veri.c }
end
bilgiler = cikart.bicimlendir_bag_bilgilerini(veri, tip)
table.insert(sonuc, bilgiler)
return table.concat(sonuc) .. table.concat(kategoriler)
end
--[[ Alfabe bağlantıları: kategori bağlantılarını,
hedefli bağlantıların hedeflerini,
ve tüm kare parantezleri siler. ]]
function cikart.kaldir_baglantilari(yazi)
if type(yazi) == "table" then
yazi = yazi.args
end
if not yazi or yazi == "" then
return ""
end
yazi = yazi:gsub("%]-|?]-%]%]", "")
yazi = yazi:gsub("%]-|", "")
yazi = yazi:gsub("%[%[", "")
yazi = yazi:gsub("%]%]", "")
return yazi
end
function cikart.turkce_bag(yazi)
local dil = require("Modül:diller").getirKodaGore("tr")
yazi = mw.ustring.gsub(yazi, "%]+)%]%]",
function(bagyazi)
local bag = parcalaBag(bagyazi)
return yapDilBag(bag, dil, nil, true, false)
end
)
return yazi
end
function cikart.hafif_bag(veri)
local dil_adlari = mw.loadData("Modül:diller/koddan asıl ada")
local alfabe_kodlari = mw.loadData("Modül:diller/kodlar")
if veri.dilKodu then
veri.dilAdi = dil_adlari or error('"' .. veri.dilKodu .. '" tanınmayan bir dil kodu.')
else
error('Dil kodu girilmesi zorunlu.')
end
if not veri.sozcuk then
error('Bağlantı verilecek sözcük girilmesi zorunlu.')
end
if veri.alfKodu then
if not alfabe_kodlari then
error('"' .. veri.alf .. '" tanınmayan bir alfabe kodu.')
end
else
error("'hafif_bag' fonksiyonu bir alfabe koduna ihtiyaç duyuyor.")
end
local parca
if veri.id then
parca = veri.dilAdi .. "-" .. mw.uri.encode(veri.id, "WIKI")
else
parca = veri.dilAdi
end
return '<span class="' .. veri.alfKodu .. '" lang="' .. veri.dilKodu .. '">]</span>"
end
function cikart.kisim_bag(bag)
if type(bag) ~= "string" then
error("'kisim_bag' fonksiyonunun ilk parametresi " .. type(bag) .. ", ama bir string olmalı.")
end
bag = mw.ustring.gsub(bag, "_", " ")
local numaraIsaretleri = require("Modül:String").count(bag, "#")
if numaraIsaretleri > 1 then
error("Kısım bağı yalnızca bir numara işareti (#) barındırabilir.")
end
local sayfa, kisim = mw.ustring.match(bag, "^(+)#(.+)$")
if sayfa and kisim then
return table.concat{ "]" }
else
error('"' .. kisim_bag .. '" fonksiyonu kısmın adını işaretleyecek bir numara işareti bulamadı.')
end
end
return cikart