Modül:bağlantılar

Merhaba, buraya Modül:bağlantılar kelimesinin anlamını aramaya geldiniz. DICTIOUS'da Modül:bağlantılar kelimesinin tüm sözlük anlamlarını bulmakla kalmayacak, aynı zamanda etimolojisini, özelliklerini ve Modül:bağlantılar kelimesinin tekil ve çoğul olarak nasıl söylendiğini de öğreneceksiniz. Modül:bağlantılar kelimesi hakkında bilmeniz gereken her şey burada. Modül:bağlantılar kelimesinin tanımı, konuşurken veya metinlerinizi yazarken daha kesin ve doğru olmanıza yardımcı olacaktır. XXX'in ve diğer kelimelerin tanımını bilmek, kelime dağarcığınızı zenginleştirir ve size daha fazla ve daha iyi dilsel kaynaklar sağlar.
Modül belgelemesi

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, ":", "&#x3a;")
	
	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, "&nbsp;" .. 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