Ҷаҳиш ба мӯҳтаво

Модул:nl-adjective

Аз Wiktionary

Documentation for this module may be created at Модул:nl-adjective/doc

--[=[
	Модули мазкур дар вазифаҳои барои ташкили мизњои оҳанг барои Голландия
    сифатҳо.
	
	Аҳамият диҳед, ки:
	Дар боти [[User: MewBot]] истифода мебарад ин модул ба таври худкор вурудоти эҷод
	барои шаклу сифат. Агар шумо тағйир чӣ кор ин модул, лутфан огоњ
	соҳиби боти ба тавре ки боти мумкин аст аз нав!
]=]--

local m_links = require("Module:links")
local m_scriptutils = require("Module:script utilities")

local lang = require("Module:languages").getByCode("nl")

local export = {}

-- Вазифаҳо, ки мекунед, ки оҳанге воқеии бо роҳи ташкил кардани шаклҳои мӯҳлати асосии.
local inflections = {}

-- Аз нуқтаи вуруди асосии.
-- Ин танҳо Функсияи, ки мумкин аст аз ҷониби як шаблон забҳ аст.
function export.show(frame)
	PAGENAME = mw.title.getCurrentTitle().text
	NAMESPACE = mw.title.getCurrentTitle().nsText
	local word_type = frame.args["word_type"] or "сифат"
	local args = frame:getParent().args
	
	if not inflections[word_type] then
		error("Навъи оҳанг номаълуми '" .. infl_type .. "'")
	end
	
	local data = {forms = {}, comparable = true}

	-- Тавлид шаклҳои
	inflections[word_type](args, data)
	
	return make_table(data)
end

inflections["сифат"] = function(args, data, word_type)
	-- Даст параметрҳои
	local pred_pos = args["pred"]; if pred_pos == "" then pred_pos = nil end
	local infl_pos = args[1]; if infl_pos == "" then infl_pos = nil end
	local part_pos = args["part"]; if part_pos == "" then part_pos = nil end
	local comp = args[2]; if comp == "" then comp = nil end
	local sup = args[3]; if sup == "" then sup = nil end
	
	if comp == "-" then
		data.comparable = false
	end
	
	local base = (NAMESPACE == "шаблон" and "-" or PAGENAME)

	-- Дараҷаи мусбат
	if pred_pos == "-" then pred_pos = nil else pred_pos = pred_pos or base end
	infl_pos = infl_pos or export.make_inflected(base)
	if part_pos == "-" then part_pos = nil else part_pos = part_pos or export.make_partitive(base) end
	
	data.forms["pred_pos"] = {pred_pos}
	data.forms["mfsg_pos"] = {infl_pos}
	data.forms["nsg_pos"] = {base}
	data.forms["pl_pos"] = {infl_pos}
	data.forms["def_pos"] = {infl_pos}
	data.forms["part_pos"] = {part_pos}
	
	-- Зарраҳои ҳаргиз шаклҳои муқоисавӣ ва волотар доранд.
    -- Агар онҳо, он гоҳ, ки шояд дар асл сифатҳои ҳастед.
	if data.comparable then
		-- Дараҷаи қиёсӣ
		comp = comp or export.make_comparative(base, infl_pos)
		local infl_comp = export.make_inflected(comp); if base:find("[^eio]en$") or base:find("[aeou]ien$") then infl_comp = comp end
		local part_comp = export.make_partitive(comp)
		
		data.forms["pred_comp"] = {comp}
		data.forms["mfsg_comp"] = {infl_comp}
		data.forms["nsg_comp"] = {comp}
		data.forms["pl_comp"] = {infl_comp}
		data.forms["def_comp"] = {infl_comp}
		data.forms["part_comp"] = {part_comp}
		
		-- Дараҷаи волотар
		sup = sup or export.make_superlative(base, part_pos)
		local infl_sup = export.make_inflected(sup)
		
		data.forms["pred_sup"] = {"het [[" .. sup .. "]]", "het [[" .. infl_sup .. "]]"}
		data.forms["mfsg_sup"] = {infl_sup}
		data.forms["nsg_sup"] = {infl_sup}
		data.forms["pl_sup"] = {infl_sup}
		data.forms["def_sup"] = {infl_sup}
		data.forms["part_sup"] = nil
	end
end

inflections["pres-ptc"] = function(args, data)
	data.comparable = false
	inflections["сифат"](args, data)
	
	-- Дар шакли мустанадӣ аз зарра мазкур метавонад -e низ доранд,
	-- Дар ҳукмҳои мисли "Hij is stervende".
	table.insert(data.forms["pred_pos"], data.forms["mfsg_pos"][1])
end

inflections["past-ptc"] = function(args, data)
	data.comparable = false
	inflections["сифат"](args, data)
end

inflections["номунтазам"] = function(args, data)
	local base = args[1]; if base == "" then base = nil end
	base = base or (NAMESPACE == "Template" and "veel" or PAGENAME)
	
	if base == "veel" then
		data.forms["pred_pos"] = {"veel"}
		data.forms["mfsg_pos"] = {"veel"}
		data.forms["nsg_pos"] = {"veel"}
		data.forms["pl_pos"] = {"veel"}
		data.forms["def_pos"] = {"vele"}
		data.forms["part_pos"] = nil
		
		data.forms["pred_comp"] = {"meer"}
		data.forms["mfsg_comp"] = {"meer"}
		data.forms["nsg_comp"] = {"meer"}
		data.forms["pl_comp"] = {"meer"}
		data.forms["def_comp"] = nil
		data.forms["part_comp"] = nil
		
		data.forms["pred_sup"] = {"het [[meest]]", "het [[meeste]]"}
		data.forms["mfsg_sup"] = nil
		data.forms["nsg_sup"] = nil
		data.forms["pl_sup"] = nil
		data.forms["def_sup"] = {"meeste"}
		data.forms["part_sup"] = nil
	elseif base == "weinig" then
		data.forms["pred_pos"] = {"weinig"}
		data.forms["mfsg_pos"] = {"weinig"}
		data.forms["nsg_pos"] = {"weinig"}
		data.forms["pl_pos"] = {"weinig"}
		data.forms["def_pos"] = {"weinige"}
		data.forms["part_pos"] = nil
		
		data.forms["pred_comp"] = {"minder"}
		data.forms["mfsg_comp"] = {"minder"}
		data.forms["nsg_comp"] = {"minder"}
		data.forms["pl_comp"] = {"minder"}
		data.forms["def_comp"] = nil
		data.forms["part_comp"] = nil
		
		data.forms["pred_sup"] = {"het [[minst]]", "het [[minste]]"}
		data.forms["mfsg_sup"] = {"minste"}
		data.forms["nsg_sup"] = {"minste"}
		data.forms["pl_sup"] = {"minste"}
		data.forms["def_sup"] = {"minste"}
		data.forms["part_sup"] = nil
	else
		error("Не тасрифкунӣ номунтазам аст, ки барои ин калима маълум аст. Лутфан, онро ба илова [[Module:nl-adjective]].")
	end
end

-- Чор вазифаҳо барои сохтани шаклҳои гуногун.
-- Ин содирот, чунки Модули:NL-headword низ онҳоро истифода мебарад, ба таъсиси
-- Муқоисавӣ ва шаклҳои бузургтар.

function export.make_inflected(base)
	-- Сифатҳо моҳаи дар вазне -en ё -e даст нест -e иловагӣ.
	if base:find("[^eio]en$") or base:find("[aeou]ien$") or base:find("[^eio]e$") then
		return base
	-- Сифатҳо моҳаи дар digraphs муайян даст диерезисӣ.
	elseif base:find("[eio]e$") then
		return base .. "ë"
	else
		return base .. "e"
	end
end

function export.make_partitive(base)
	-- Сифатҳо моҳаи дар як ҳуштакӣ ба як -s иловагӣ дарёфт накунем
	if base:find("s$") or base:find("sch$") or base:find("x$") or base:find("sj$") or base:find("sh$") then
		return base
	-- Сифатҳо моҳаи дар як овози садонок дароз даст ҳичгоҳ пеш аз -s
	elseif base:find("[^aeiou][aiouy]$") then
		return base .. "'s"
	else
		return base .. "s"
	end
end

function export.make_comparative(base, inflected)
	if not inflected then
		inflected = export.make_inflected(base)
	end
	
	-- Сифатҳо моҳаи дар -r гирифтани -d- иловагӣ дар муқоисавии,
	-- Рад кардани шакли оҳанганд
	if base:find("r$") then
		return base .. "der"
	-- Агар шакли оҳанганд ки дар -e хотима надиҳед, онро илов
	elseif not inflected:find("[eë]$") then
		return inflected .. "er"
	else
		return inflected .. "r"
	end
end

function export.make_superlative(base, partitive)
	if not partitive then
		partitive = export.make_partitive(base)
	end
	
	-- Сифатҳо дар -ide доранд волотар -iedst
	if base:find("[iï]de$") then
		return base:gsub("([iï])de$", "%1ed") .. "st"
	elseif partitive then
		return partitive .. "t"
	else
		return base .. "st"
	end
end

function show_form(form)
	if not form then
		return "—"
	elseif type(form) ~= "table" then
		error("a non-table value was given in the list of inflected forms.")
	elseif #form == 0 then
		return "—"
	end
	
	local ret = {}
	
	for key, subform in ipairs(form) do
		table.insert(ret, m_links.full_link(subform, nil, lang, nil, nil, nil, {}, false))
	end
	
	return table.concat(ret, "<br/>")
end

-- Make the table
function make_table(data)
	return [=[
<div class="NavFrame" style="width: ]=] .. (data.comparable and 60 or 30) .. [=[em;">
<div class="NavHead" style="background: #CCCCFF; text-align: left;">шаклҳои асосии ]=] .. m_links.full_link(nil, PAGENAME, lang, nil, "term", nil, {}, false) .. [=[</div>
<div class="NavContent">
{| class="inflection-table" style="width:100%; text-align:center; line-height:125%;" cellspacing="1" cellpadding="3"
|- style="background: #CCCCFF;"]=] .. (data.comparable and [=[

| colspan="2" style="background: #E6E6FF; width: 25%;" |
! style="width: 25%;" | [[positive degree|мусбат]]
! style="width: 25%;" | [[comparative degree|муқоисавии]]
! style="width: 25%;" | [[superlative degree|волотар]]]=] or [=[

| colspan="2" style="background: #E6E6FF; width: 50%;" |
! style="width: 50%;" | [[positive degree|мусбат]]]=]) .. [=[

|- style="background: #F2F2FF;"
! style="background: #CCCCFF;" colspan="2" | [[мустанадӣ]]/[[зарфи]]
| ]=] .. show_form(data.forms["pred_pos"]) .. (data.comparable and " || " .. show_form(data.forms["pred_comp"]) .. " || " .. show_form(data.forms["pred_sup"]) or "") .. [=[

|- style="background: #F2F2FF;"
! style="background: #CCCCFF;" rowspan="3" | [[номуайян]]
! style="background: #CCCCFF;" | [[мардона|m.]]/[[бонувон|f.]]&nbsp;[[ягонаи|sing.]]
| ]=] .. show_form(data.forms["mfsg_pos"]) .. (data.comparable and " || " .. show_form(data.forms["mfsg_comp"]) .. " || " .. show_form(data.forms["mfsg_sup"]) or "") .. [=[

|- style="background: #F2F2FF;"
! style="background: #CCCCFF;" | [[neuter|n.]]&nbsp;[[ягонаи|sing.]]
| ]=] .. show_form(data.forms["nsg_pos"]) .. (data.comparable and " || " .. show_form(data.forms["nsg_comp"]) .. " || " .. show_form(data.forms["nsg_sup"]) or "") .. [=[

|- style="background: #F2F2FF;"
! style="background:#CCCCFF;" | [[ҷамъ]]
| ]=] .. show_form(data.forms["pl_pos"]) .. (data.comparable and " || " .. show_form(data.forms["pl_comp"]) .. " || " .. show_form(data.forms["pl_sup"]) or "") .. [=[

|- style="background: #F2F2FF;"
! style="background: #CCCCFF;" colspan="2" | [[муайян]]
| ]=] .. show_form(data.forms["def_pos"]) .. (data.comparable and " || " .. show_form(data.forms["def_comp"]) .. " || " .. show_form(data.forms["def_sup"]) or "") .. [=[

|- style="background: #F2F2FF;"
! style="background: #CCCCFF;" colspan="2" | [[ҳиҷобести]]
| ]=] .. show_form(data.forms["part_pos"]) .. (data.comparable and " || " .. show_form(data.forms["part_comp"]) .. " || " .. show_form(data.forms["part_sup"]) or "") .. [=[

|}</div></div>]=]
end

return export