Modül:ar-başlıkbaşı

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

Bu Lua modülü, şu şablonların çıktısını vermektedir:


-- Yazarlar: Benwing, CodeCat

local ar_translit = require("Modül:ar-alfabeçeviri")

local dil = require("Modül:diller").getirKodaGore("ar")

local cikart = {}
local soz_fonksiyonlari = {}

-- diacritics
local u = mw.ustring.char
local A  = u(0x064E) -- fetḥa
local AN = u(0x064B) -- fetḥatān (fetḥa tenvīn)
local U  = u(0x064F) -- ḍamme
local UN = u(0x064C) -- ḍammetān (ḍamme tenvīn)
local I  = u(0x0650) -- kesre
local IN = u(0x064D) -- kesretān (kesre tenvīn)
local SK = u(0x0652) -- sükūn = sessiz
local SH = u(0x0651) -- şedde = ünsüzleri ikizleştirir
local DAGGER_ALIF = u(0x0670)
local DIACRITIC_ANY_BUT_SH = ""

-- bazı harfler ve işaretler
local TAM    = u(0x0629) -- tāʾ-i merbūṭa = ة

-- common combinations
local UNU   = ""

------------------------
-- Araç fonksiyonları --
------------------------

-- Eğer boş değilse
local function ebd(arg)
	if arg == "" then
		return nil
	else
		return arg
	end
end

local function listeden_ayarla(list)
	local set = {}
	for _, item in ipairs(list) do
		set = true
	end
	return set
end

-- version of mw.ustring.gsub() that discards all but the first return value
function rsub(term, foo, bar)
	local retval = mw.ustring.gsub(term, foo, bar)
	return retval
end

local rfind = mw.ustring.find

function remove_links(text)
	text = rsub(text, "%]*|", "")
	text = rsub(text, "%[%[", "")
	text = rsub(text, "%]%]", "")
	return text
end

function reorder_shadda(text)
	-- shadda+short-vowel (including tanwīn vowels, i.e. -an -in -un) gets
	-- replaced with short-vowel+shadda during NFC normalisation, which
	-- MediaWiki does for all Unicode strings; however, it makes the
	-- detection process inconvenient, so undo it. (For example, the tracking
	-- code below would fail to detect the -un in سِتٌّ because the shadda
	-- would come after the -un.)
	text = rsub(text, "(" .. DIACRITIC_ANY_BUT_SH .. ")" .. SH, SH .. "%1")
	return text
end

-- The main entry point.
function cikart.show(frame)
	local sozkat = frame.args or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
	
	local params = {
		 = {list = "head", allow_holes = true, default = ""},
		 = {default = ""},
		 = {list = true, allow_holes = true},
	}
	
	local args = frame:getParent().args  -- YAPILACAK: Burada ] kullan
	
	-- Parametreleri topla
	local veri = {dil = dil, soz_kategorisi = sozkat, kategoriler = {}, baslar = {}, alfabecevler = {}, cinsiyetler = {}, cekimler = { etkin_oto_alfabecev = true }}
	
	local bas = args or args or ""
	local translit = ebd(args)
	local i = 1
	
	local irreg_translit = false
	
	while bas do
		table.insert(veri.baslar, bas)
		veri.alfabecevler = translit
		if ar_translit.irregular_translit(bas, translit) then
			irreg_translit = true
		end
		
		i = i + 1
		bas = ebd(args)
		translit = ebd(args)
	end

	if irreg_translit then
		table.insert(veri.kategoriler, dil:getirAsilAd() .. " terms with irregular pronunciations")
	end
	
	if soz_fonksiyonlari then
		soz_fonksiyonlari.func(args, veri)
	end
	
	return require("Modül:başlık başı").tam_baslikbasi(veri)
end

-- Get a list of inflections. See handle_infl() for meaning of ARGS, ARGPREF
-- and DEFGENDER.
local function getargs(args, argpref, defgender)
	-- Gather parameters
	local forms = {}
	
	local form = ebd(args)
	local translit = ebd(args)
	local cinsiyet = ebd(args)
	local cinsiyet2 = ebd(args)
	local i = 1
	
	while form do
		local genderlist = (cinsiyet or cinsiyet2) and {cinsiyet, cinsiyet2} or defgender and {defgender} or nil
		table.insert(forms, {sozcuk = form, alfabecev = translit, cinsiyetler = genderlist})

		i = i + 1
		form = ebd(args)
		translit = ebd(args)
		cinsiyet = ebd(args)
		cinsiyet2 = ebd(args)
	end

	return forms
end

-- Get a list of inflections from the arguments in ARGS based on argument
-- prefix ARGPREF (e.g. "pl" to snarf arguments called "pl", "pl2", etc.,
-- along with "pltr", "pl2tr", etc. and optional gender(s) "plg", "plg2",
-- "pl2g", "pl2g2", "pl3g", "pl3g2", etc.). Label with LABEL (e.g. "plural"),
-- which will appear in the headword. Insert into inflections list
-- INFLS. Optional DEFGENDER is default gender to insert if gender
-- isn't given; otherwise, no gender is inserted. (This is used for
-- singulative forms of collective nouns, and collective forms of singulative
-- nouns, which have different gender from the base form(s).)
local function handle_infl(args, veri, argpref, etiket, defgender)
	local newinfls = getargs(args, argpref, defgender)
	newinfls.etiket = etiket

	if #newinfls > 0 then
		table.insert(veri.cekimler, newinfls)
	end
end

-- Handle a basic inflection (e.g. plural, feminine) along with the construct,
-- definite and oblique variants of this inflection. Can also handle the base
-- construct/definite/oblique variants if both ARGPREF and LABEL are given
-- as blank strings. If NOBASE or ARGPREF is blank, skip the base inflection.
local function handle_all_infl(args, veri, argpref, etiket, nobase)
	if not nobase and argpref ~= "" then
		handle_infl(args, veri, argpref, etiket)
	end
	
	local etiketvm = etiket == "" and "" or etiket .. " "
	handle_infl(args, veri, argpref .. "cons", etiketvm .. "tamlanan hâli")
	handle_infl(args, veri, argpref .. "def", etiketvm .. "definite state")
	handle_infl(args, veri, argpref .. "obl", etiketvm .. "oblique")
	handle_infl(args, veri, argpref .. "inf", etiketvm .. "informal")
end

-- Handle the case where pl=-, indicating an uncountable noun.
local function handle_noun_plural(args, veri)
	if args == "-" then
		table.insert(veri.cekimler, {etiket = "usually ]"})
		table.insert(veri.kategoriler, dil:getirAsilAd() .. " sayılamayan adlar")
	else
		handle_infl(args, veri, "pl", "çoğul")
		handle_infl(args, veri, "ç", "çoğul")
	end
end

local valid_genders = listeden_ayarla(
	{"m", "m-s", "m-pr", "m-s-pr", "m-np", "m-s-np",
	 "e", "e-t", "e-pr", "e-t-pr", "e-np", "e-t-np",
	 "f", "f-s", "f-pr", "f-s-pr", "f-np", "f-s-np",
	 "d", "d-t", "d-pr", "d-t-pr", "d-np", "d-t-np",
	 "m-du", "m-du-pr", "m-du-np",
	 "e-i", "e-i-pr", "e-i-np",
	 "f-du", "f-du-pr", "f-du-np",
	 "d-i", "d-i-pr", "d-i-np",
	 "m-p", "m-p-pr", "m-p-np",
	 "e-ç", "e-ç-pr", "e-ç-np",
	 "f-p", "f-p-pr", "f-p-np",
	 "d-ç", "d-ç-pr", "d-ç-np",
	 "i", "du",
	 "i-ç", "du-p",
	 "p", "p-pr", "p-np",
	 "ç", "ç-pr", "ç-np",
	 "pr", "np"
	})

local function is_masc_sg(g)
	return g == "m" or g == "m-pr" or g == "m-np" or g == "e" or g == "e-pr" or g == "e-np"
end
local function is_fem_sg(g)
	return g == "f" or g == "f-pr" or g == "f-np" or g == "d" or g == "d-pr" or g == "d-np"
end

-- Handle gender in unnamed param 2 and a second gender in param g2,
-- inserting into the list of genders in GENDER. Also insert categories
-- into CATS if the gender is unexpected for the form of the noun
-- or if multiple genders occur. If gender unspecified, default to
-- DEFAULT, which may be omitted.
local function handle_gender(args, veri, default)
	local g = ebd(args) or default
	local g2 = ebd(args)

	local function process_gender(g)
		if not g then
			table.insert(veri.cinsiyetler, "?")
		elseif valid_genders then
			table.insert(veri.cinsiyetler, g)
		else
			error("Unrecognized gender: " .. g)
		end
	end

	process_gender(g)
	if g2 then
		process_gender(g2)
	end

	if g and g2 then
		table.insert(veri.kategoriler, dil:getirAsilAd() .. " birden fazla cinsiyeti olan sözcükler")
	elseif is_masc_sg(g) or is_fem_sg(g) then
		if is_masc_sg(g) then
			table.insert(veri.kategoriler, dil:getirAsilAd() .. " eril adlar")
		elseif is_fem_sg(g) then
			table.insert(veri.kategoriler, dil:getirAsilAd() .. " dişil adlar")
		end
		local bas = ebd(args) or ebd(args)
		if bas then
			bas = rsub(reorder_shadda(remove_links(bas)), UNU .. "?$", "")
			local ends_with_tam = rfind(bas, "^*" .. TAM .. "$") or
				rfind(bas, "^*" .. TAM .. " ")
			if is_masc_sg(g) and ends_with_tam then
				table.insert(veri.kategoriler, dil:getirAsilAd() .. " dişil bitişe sahip eril sözcükler")
			elseif is_fem_sg(g) and not ends_with_tam then
				table.insert(veri.kategoriler, dil:getirAsilAd() .. " dişil bitişe sahip olmayan dişil sözcükler")
			end
		end
	end
end

-- Part-of-speech functions

soz_fonksiyonlari = {
	func = function(args, veri)
		handle_all_infl(args, veri, "", "") -- handle cons, def, obl, inf
		handle_all_infl(args, veri, "f", "dişil")
		handle_all_infl(args, veri, "d", "dişil")
		handle_all_infl(args, veri, "i", "ikil")
		handle_all_infl(args, veri, "cpl", "genel çoğul")
		handle_all_infl(args, veri, "gç", "genel çoğul")
		handle_all_infl(args, veri, "pl", "eril çoğulu")
		handle_all_infl(args, veri, "ç", "eril çoğulu")
		handle_all_infl(args, veri, "fpl", "dişil çoğulu")
		handle_all_infl(args, veri, "dç", "dişil çoğulu")
		handle_infl(args, veri, "el", "üstünlük")
	end
}

function handle_sing_coll_noun_infls(args, veri)
	handle_all_infl(args, veri, "", "") -- handle cons, def, obl, inf
	handle_all_infl(args, veri, "d", "ikil")
	handle_all_infl(args, veri, "pauc", "paucal")
	handle_noun_plural(args, veri)
	handle_all_infl(args, veri, "pl", "çoğul", "nobase")
	handle_all_infl(args, veri, "ç", "çoğul", "nobase")
end

soz_fonksiyonlari = {
	func = function(args, veri)
		veri.soz_kategorisi = "adlar"
		table.insert(veri.kategoriler, dil:getirAsilAd() .. " collective nouns")
		table.insert(veri.cekimler, {etiket = "collective"})
		
		handle_gender(args, veri, "m")
		-- Handle sing= (the corresponding singulative noun) and singg= (its gender)
		handle_infl(args, veri, "sing", "singulative", "f")
		handle_sing_coll_noun_infls(args, veri)
	end
}

soz_fonksiyonlari = {
	func = function(args, veri)
		veri.soz_kategorisi = "adlar"
		table.insert(veri.kategoriler, dil:getirAsilAd() .. " singulative nouns")
		table.insert(veri.cekimler, {etiket = "singulative"})
		
		handle_gender(args, veri, "f")
		-- Handle coll= (the corresponding collective noun) and collg= (its gender)
		handle_infl(args, veri, "coll", "collective", "m")
		handle_sing_coll_noun_infls(args, veri)
	end
}

function handle_noun_infls(args, veri, singonly)
	handle_all_infl(args, veri, "", "") -- handle cons, def, obl, inf
	
	if not singonly then
		handle_all_infl(args, veri, "du", "ikil")
		handle_all_infl(args, veri, "i", "ikil")
		handle_noun_plural(args, veri)
		handle_all_infl(args, veri, "pl", "çoğul", "nobase")
		handle_all_infl(args, veri, "ç", "çoğul", "nobase")
	end
	
	handle_all_infl(args, veri, "f", "dişil")
	handle_all_infl(args, veri, "d", "dişil")
	handle_all_infl(args, veri, "m", "eril")
	handle_all_infl(args, veri, "e", "eril")
end

soz_fonksiyonlari = {
	func = function(args, veri)
		handle_gender(args, veri)
		handle_noun_infls(args, veri)
	end
}

soz_fonksiyonlari = {
	func = function(args, veri)
		table.insert(veri.kategoriler, dil:getirAsilAd() .. " cardinal numbers")
		handle_gender(args, veri)
		handle_noun_infls(args, veri)
	end
}

soz_fonksiyonlari = {
	func = function(args, veri)
		handle_gender(args, veri)
		handle_noun_infls(args, veri, "singular only")
	end
}

soz_fonksiyonlari = {
	params = {
		 = {},
		 = {},
		
		  = {},   = {},   = {},   = {},
		
		  = {},   = {},   = {},   = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		
		  = {},   = {},   = {},   = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		
		  = {},   = {},   = {},   = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		
		  = {},   = {},   = {},   = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		},
	func = function(args, veri)
		handle_gender(args, veri)
		handle_all_infl(args, veri, "f", "dişil")
	end
}

soz_fonksiyonlari = {
	params = {
		 = {},
		 = {},
		
		  = {},   = {},   = {},   = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		
		  = {},   = {},   = {},   = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		
		  = {},   = {},   = {},   = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		
		  = {},   = {},   = {},   = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		 = {},  = {},  = {},  = {},
		},
	func = function(args, veri)
		veri.soz_kategorisi = "çekimli adlar"
		handle_gender(args, veri, "p")
		handle_all_infl(args, veri, "", "") -- handle cons, def, obl, inf
	end
}

soz_fonksiyonlari = {
	params = {
		 = {},
		 = {},
		 = {},
		 = { type = boolean },
		},
	func = function(args, veri)
		veri.soz_kategorisi = "adjective forms"
		handle_noun_plural(args, veri)
		handle_gender(args, veri, "f")
	end
}

soz_fonksiyonlari = {
	params = {
		 = {},
		 = {},
		},
	func = function(args, veri)
		veri.soz_kategorisi = "çekimli adlar"
		handle_gender(args, veri, "m-d")
	end
}

soz_fonksiyonlari = {
	params = {
		 = {},
		 = {},
		},
	func = function(args, veri)
		veri.soz_kategorisi = "adjective forms"
		handle_gender(args, veri, "m-p")
	end
}

soz_fonksiyonlari = {
	params = {
		 = {},
		 = {},
		},
	func = function(args, veri)
		veri.soz_kategorisi = "adjective forms"
		handle_gender(args, veri, "m-d")
	end
}

soz_fonksiyonlari = {
	params = {
		 = {},
		 = {},
		},
	func = function(args, veri)
		handle_gender(args, veri)
	end
}

local valid_forms = listeden_ayarla(
	{"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII",
	 "XIII", "XIV", "XV", "Iq", "IIq", "IIIq", "IVq"})

local function handle_conj_form(args, veri)
	local form = ebd(args)
	if form then
		if not valid_forms then
			error("Invalid verb conjugation form " .. form)
		end
		
		table.insert(veri.cekimler, {etiket = ']'})
	end
end

soz_fonksiyonlari = {
	params = {
		 = {},
		},
	func = function(args, veri)
		handle_conj_form(args, veri)
	end
}

soz_fonksiyonlari = {
	params = {
		 = {},
		},
	func = function(args, veri)
		veri.soz_kategorisi = "participles"
		table.insert(veri.kategoriler, dil:getirAsilAd() .. " active participles")
		handle_conj_form(args, veri)
	end
}

soz_fonksiyonlari = {
	params = {
		 = {},
		},
	func = function(args, veri)
		veri.soz_kategorisi = "participles"
		table.insert(veri.kategoriler, dil:getirAsilAd() .. " passive participles")
		handle_conj_form(args, veri)
	end
}

return cikart

-- For Vim, so we get 4-space tabs
-- vim: set ts=4 sw=4 noet: