İçeriğe atla

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

Vikisözlük sitesinden
Modül belgelemesi [Düzenle] [Tazele]

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


local cikart = {}
local soz_fonksiyonlari = {}

local legal_gender = {
	["e"] = true,
	["e"] = true,
	["m-s"] = true,
	["e-t"] = true,
	["m-p"] = true,
	["e-ç"] = true,
	["d"] = true,
	["d"] = true,
	["f-s"] = true,
	["d-t"] = true,
	["d-ç"] = true,
	["n"] = true,
	["n-s"] = true,
	["n-t"] = true,
	["n-p"] = true,
	["n-ç"] = true,
	["?"] = true,
	["?-s"] = true,
	["?-t"] = true,
	["?-p"] = true,
	["?-ç"] = true,
	["p"] = true,
	["ç"] = true,
}

local gender_names = {
	["e"] = "eril",
	["e"] = "eril",
	["m-s"] = "eril",
	["e-t"] = "eril",
	["m-p"] = "eril",
	["e-ç"] = "eril",
	["d"] = "dişil",
	["d"] = "dişil",
	["f-s"] = "dişil",
	["d-t"] = "dişil",
	["f-p"] = "dişil",
	["d-ç"] = "dişil",
	["n"] = "nötr",
	["n-s"] = "nötr",
	["n-t"] = "nötr",
	["n-p"] = "nötr",
	["n-ç"] = "nötr",
	["?"] = "bilinmeyen",
	["?-s"] = "bilinmeyen",
	["?-t"] = "bilinmeyen",
	["?-p"] = "bilinmeyen",
	["?-ç"] = "bilinmeyen",
	["p"] = "bilinmeyen",
	["ç"] = "bilinmeyen",
}

local plural_genders = {
	["m-p"] = true,
	["e-ç"] = true,
	["f-p"] = true,
	["d-ç"] = true,
	["n-p"] = true,
	["n-ç"] = true,
	["?-p"] = true,
	["?-ç"] = true,
	["p"] = true,
	["ç"] = true,
}

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

-- The main entry point.
-- This is the only function that can be invoked from a template.
function cikart.goster(frame)
	local args = frame:getParent().args
	PAGENAME = mw.title.getCurrentTitle().text
	
	local head = args["baş"]; if head == "" then head = nil end
	
	local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
	
	local veri = {dil = dil, soz_kategorisi = poscat, kategoriler = {}, baslar = {args["baş"]}, cinsiyetler = {}, cekimler = {}}
	
	if soz_fonksiyonlari[poscat] then
		soz_fonksiyonlari[poscat](class, args, veri)
	end
	
	return
		require("Modül:başlık başı").tam_baslikbasi(veri)
end

soz_fonksiyonlari["ön adlar"] = function(class, args, veri)
	params = {
		[1] = {list = "m",
			default = mw.ustring.match(PAGENAME, "ee$") ~= nil
					and PAGENAME .. "ën" 
				or PAGENAME .. "en"},
		[2] = {list = "n",
			default = mw.ustring.match(PAGENAME, "[dt]$") ~= nil
					and PAGENAME
				or mw.ustring.gsub(PAGENAME,
					"([^AaIiEeOoUuÄäËëÉé])([aiou])([bcdfghjklmnpqrstvwxz])$",
					"%1%2%2%3") .. "t"},
		["d"] = {list = true},
		["comp"] = {list = true},
		["sup"] = {list = true,
			default = mw.ustring.match(PAGENAME, "[sxz]$") ~= nil
					and mw.ustring.gsub(PAGENAME,
					"([^AaIiEeOoUuÄäËëÉé])([aiou])([sxz])$",
					"%1%2%2%3") .. "ten"
				or mw.ustring.gsub(PAGENAME,
					"([^AaIiEeOoUuÄäËëÉé])([aiou])([bcdfghjklmnpqrstvwxz]?)$",
					"%1%2%2%3") .. "sten"
			},
		["comp-irreg-only"] = {type = "boolean"},
		["baş"] = {default = PAGENAME},
		["pred-only"] = {type = "boolean"},
	}
	local args = require("Modül:parameters").process(args, params)
	veri.baslar = {args["baş"]}
	
	if args["pred-only"] then
		table.insert(veri.cekimler, {etiket = 'predicate-only'})
		table.insert(veri.kategoriler, 'Lüksemburgca predicate only adjectives')
	else
		for i, form in ipairs(args[1]) do
			args[1][i] = {sozcuk = form}
		end
		args[1].etiket = "eril"
		table.insert(veri.cekimler, args[1])
		
		if #args.d > 0 then
			for i, form in ipairs(args["d"]) do
				args["d"][i] = {sozcuk = form}
			end
			args["d"].etiket = "dişil"
			table.insert(veri.cekimler, args["d"])
		end
		
		for i, form in ipairs(args[2]) do
			args[2][i] = {sozcuk = form}
		end
		args[2].etiket = "nötr"
		table.insert(veri.cekimler, args[2])
	end
	
	if args["comp"][1] == '-' then
		table.insert(veri.cekimler, {etiket = 'not comparable'})
		table.insert(veri.kategoriler, 'Lüksemburgca uncomparable adjectives')
	else
		if #args["comp"] > 0 then
			for i, form in ipairs(args["comp"]) do
				args["comp"][i] = {sozcuk = form}
			end
			if not args["comp-irreg-only"] then
				table.insert(args["comp"], 1, "[[méi]] " .. PAGENAME)
			end
		else
			args["comp"] = {"[[méi]] " .. PAGENAME}
		end
		args["comp"].etiket = "[[Ek:Açıklamalar#comparative|comparative]]"
		table.insert(veri.cekimler, args["comp"])
		
		for i, form in ipairs(args["sup"]) do
			args["sup"][i] = {sozcuk = 'am [[' .. form .. ']]'}
		end
		args["sup"].etiket = "[[Ek:Açıklamalar#superlative|superlative]]"
		table.insert(veri.cekimler, args["sup"])
	end
end

soz_fonksiyonlari.adlar = function(class, args, veri)
	params = {
		[1] = {list = 'c', default = '?'},
		[2] = {list = 'ç'},
		["dim"] = {list = true},
		["baş"] = {default = PAGENAME},
		["e"] = {list = true},
		["d"] = {list = true},
	}
	if veri.soz_kategorisi == 'adlar' then
		params[2].default = mw.ustring.match(PAGENAME, "ee$") ~= nil
					and PAGENAME .. "ën" 
				or PAGENAME .. "en"
	end
	local args = require("Modül:parameters").process(args, params)
	veri.baslar = {args["baş"]}
	
	local plur_tant = false
	
	for _, g in ipairs(args[1]) do
		if legal_gender[g] then
			table.insert(veri.cinsiyetler, g)
			table.insert(veri.kategoriler, "Lüksemburgca " .. gender_names[g] .. " adlar")
		else
			error("“" .. g .. "” cinsiyeti Lüksemburgca için geçerli değil.")
		end
		
		if plural_genders[g] then
			plur_tant = true
		end
	end
	
	if plur_tant then
		table.insert(veri.cekimler, {etiket = '[[Ek:Açıklamalar#topluluk adı|topluluk adı]]'})
		table.insert(veri.kategoriler, 'Lüksemburgca topluluk adları')
	elseif args[2][1] == '-' then
		table.insert(veri.cekimler, {etiket = '[[Ek:Açıklamalar#sayılamayan|sayılamayan]]'})
		table.insert(veri.kategoriler, 'Lüksemburgca sayılamayan adlar')
	elseif #args[2] > 0 then
		for i, form in ipairs(args[2]) do
			args[2][i] = {sozcuk = form}
		end
		args[2].etiket = "çoğul"
		table.insert(veri.cekimler, args[2])
		
		if #args[2] > 1 then
			table.insert(veri.kategoriler, 'Lüksemburgca nouns with multiple plurals')
		end
	end
	
	if #args["dim"] > 0 then
		for i, form in ipairs(args["dim"]) do
			args["dim"][i] = {sozcuk = form}
		end
		args["dim"].etiket = "diminutive"
		table.insert(veri.cekimler, args["dim"])
	end
	
	if #args.d > 0 then
		args.d.etiket = "dişil"
		table.insert(veri.cekimler, args.d)
	end
	
	if #args.e > 0 then
		args.e.etiket = "eril"
		table.insert(veri.cekimler, args.e)
	end
end

soz_fonksiyonlari["özel adlar"] = soz_fonksiyonlari.adlar

local function make_verb_forms(prefix)
	if prefix == nil then prefix = "" end
	
	if mw.ustring.match(prefix, "n$") then
		prefix = mw.ustring.gsub(
			prefix,
			"(.*)([^n])(n+)$",
			"%1%2"
			) .. "n*"
	end
	
	local stem = mw.ustring.gsub(PAGENAME, "^(" .. prefix .. ")(.*)([eë]n)$", "%2")
	local dent_suff = mw.ustring.match(stem, "([td]+)$")

	local conjugated = ""
	if dent_suff then
		conjugated = mw.ustring.gsub(stem, "([td]+)$", mw.ustring.rep("t", #dent_suff))
	else
		local lengthened = mw.ustring.gsub(stem,
			"([^AaIiEeOoUuÄäËëÉé])([aiou])([bcdfghjklmnpqrstvwz])$",
			"%1%2%2%3")
		conjugated = mw.ustring.match(lengthened, "(w)$") and mw.ustring.sub(lengthened, 1, -2) .. "ft" or lengthened .. "t"
	end
	
	return conjugated, (mw.ustring.match(conjugated, "^[ei]") and "gë" or "ge") .. conjugated
end

soz_fonksiyonlari.eylemler = function(class, args, veri)
	third, pp = make_verb_forms(args.sep)
	
	params = {
		[1] = {list = '3s pres', default = third},
		[2] = {list = 'pp', default = pp},
		[3] = {default = 'hunn'},
		["pret"] = {list = true},
		["subj"] = {list = true},
		["baş"] = {default = PAGENAME},
		["sep"] = {default = ""},
	}
	
	local args = require("Modül:parameters").process(args, params)
	veri.baslar = {args["baş"]}
	
	local denasalized_prefix = mw.ustring.gsub(
		args.sep,
		"(.*)([^n])(n+)$",
		"%1%2"
		)
	
	for i, form in ipairs(args[1]) do
		args[1][i] = {
			sozcuk = form .. (#args.sep > 0 and " " .. args.sep or ""),
			}
	end
	args[1].etiket = 'third-person singular present'
	table.insert(veri.cekimler, args[1])
	
	if #args.pret > 0 then
		for i, form in ipairs(args.pret) do
			args.pret[i] = {
				sozcuk = form .. (#args.sep > 0 and " " .. args.sep or ""),
				}
		end
		args.pret.etiket = 'preterite'
		table.insert(veri.cekimler, args.pret)
	end
	
	for i, form in ipairs(args[2]) do
		args[2][i] = {
			sozcuk = (mw.ustring.match(form, "^[^dhntzaäeéëioöuü]") and denasalized_prefix or args.sep) .. form,
			}
	end
	args[2].etiket = 'past participle'
	table.insert(veri.cekimler, args[2])
	
	if #args.subj > 0 then
		for i, form in ipairs(args.subj) do
			args.subj[i] = {
				sozcuk = form .. (#args.sep > 0 and " " .. args.sep or ""),
				}
		end
		args.subj.etiket = 'past subjunctive'
		table.insert(veri.cekimler, args.subj)
	end
	
	if args[3] == 'hunn' then
		args[3] = {'hunn'}
		table.insert(veri.kategoriler, 'Lüksemburgca verbs using hunn as auxiliary')
	elseif args[3] == 'sinn' then
		args[3] = {'sinn'}
		table.insert(veri.kategoriler, 'Lüksemburgca verbs using sinn as auxiliary')
	elseif args[3] == 'both' then
		args[3] = {'hunn', 'sinn'}
		table.insert(veri.kategoriler, 'Lüksemburgca verbs using hunn and sinn as auxiliary')
	else
		error("Verb auxiliary “" .. args[3] .. "” is not an valid Luxembourgish auxiliary (“hunn”, “sinn”, or “both”).")
	end
	args[3].etiket = "auxiliary verb"
	table.insert(veri.cekimler, args[3])
end

return cikart