Modül:başlık başı

Merhaba, buraya Modül:başlık başı kelimesinin anlamını aramaya geldiniz. DICTIOUS'da Modül:başlık başı kelimesinin tüm sözlük anlamlarını bulmakla kalmayacak, aynı zamanda etimolojisini, özelliklerini ve Modül:başlık başı kelimesinin tekil ve çoğul olarak nasıl söylendiğini de öğreneceksiniz. Modül:başlık başı kelimesi hakkında bilmeniz gereken her şey burada. Modül:başlık başı 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


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 "&nbsp;" .. 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