Modül:bağlantılar
Bu belgeleme Modül:bağlantılar/belge (düzenle | geçmiş) sayfasından yansıtılmaktadır. Arayüz düzenleyicilerinin deney yapabilmeleri için ayrıca Modül:bağlantılar/deneme tahtası sayfası kullanılabilir.
Modülün alt sayfaları:
local cikart = {}
--[=[
[[Ek:Desteklenmeyen başlıklar]] ve çok fazla hafıza
kullanan sayfalar [[Modül:bağlantılar/veri]] sayfasında
listelenmiştir.
Kullanılan diğer modüller:
[[Modül:alfabeler]]
[[Modül:cinsiyet ve numara]]
[[Modül:araçlar]]
[[Modül:String]]
]=]
local m_alfabearaclari = require("Modül:alfabe araçları")
local gorme_buyuk = {
["ko"] = true,
}
local ses_ciktisi = {
["th"] = "Modül:th",
--["km"] = "Modül:km",
}
local soz_etiketleri = {
["a"] = "ön ad",
["adv"] = "belirteç",
["int"] = "çekim",
["n"] = "ad",
["pron"] = "özel ad",
["v"] = "eylem",
["vi"] = "geçişsiz eylem",
["vt"] = "geçişli eylem",
["vti"] = "geçişli ve geçişsiz eylem",
}
function cikart.getirBagSayfasi(hedef, dil)
if mw.loadData("Modül:bağlantılar/veri").desteklenmeyen_basliklar[hedef] then
return "Unsupported titles/" .. mw.loadData("Modül:bağlantılar/veri").desteklenmeyen_basliklar[hedef]
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[bag.gorunum] 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 [[sms:a]] gibi sayfalara, garip bir şey yapmadan bağlantı yapılmasını sağlar.
bag.hedef = mw.ustring.gsub(bag.hedef, ":", ":")
return "[[" .. bag.hedef .. (bag.parca and "#" .. bag.parca or "") .. "|" .. bag.gorunum .. "]]"
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[veri.dil:getirKod()] 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[1] .. yazi .. etiket[2]
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[veri.soz] 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, "[[Kategori:Boş çeviri şablonu kullanan sayfalar]]")
end
bag = "<small>[Madde?]</small>"
end
end
table.insert(sonuc, bag)
if veri.c == "" or veri.c == "-" then
veri.c = nil
elseif ses_ciktisi[veri.dil:getirKod()] then
local m_ses = require(ses_ciktisi[veri.dil:getirKod()])
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[mw.title.getCurrentTitle().text] 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,
"[[Kategori:Gereğinden fazla başka alfabeye çevirmeler]]"
.. "[[Kategori:" .. veri.dil:getirAsilAd() .. " gereğinden fazla başka alfabeye çevirmeler]]"
)
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,
"[[Kategori:Otomatik olanlardan farklı elle eklenmiş başka alfabeye çevirmeler]]"
.. "[[Kategori:" .. veri.dil:getirAsilAd() .. " otomatik olanlardan farklı elle eklenmiş başka alfabeye çevirmeler]]"
)
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[1]
end
if not yazi or yazi == "" then
return ""
end
yazi = yazi:gsub("%[%[Kategori:[^|%]]-|?[^|%]]-%]%]", "")
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[veri.dilKodu] 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[veri.alfKodu] 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 .. '">[[' .. veri.sozcuk .. "#" .. parca .. "|" .. ( veri.alt or veri.sozcuk ) .. "]]</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{ "[[" , sayfa, "#", kisim, "|", sayfa, " § ", kisim, "]]" }
else
error('"' .. kisim_bag .. '" fonksiyonu kısmın adını işaretleyecek bir numara işareti bulamadı.')
end
end
return cikart