モジュール:uk-headword

出典: フリー多機能辞典『ウィクショナリー日本語版(Wiktionary)』
ナビゲーションに移動 検索に移動

このモジュールについての説明文ページを モジュール:uk-headword/doc に作成できます

local m_common = require("モジュール:uk-common")

local export = {}

local lang = require("モジュール:languages").getByCode("uk")

local pos_functions = {}

-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
	local args = frame:getParent().args
	PAGENAME = mw.title.getCurrentTitle().text
	
	local poscat = frame.args[1] or error("品詞が指定されていません。パラメータ1をモジュールの呼び出しに渡して下さい。")
	
	local genders = {}
	local inflections = {}
	local categories = {"ウクライナ語 " .. poscat}
	
	-- Get the head parameters
	-- First get the 1st parameter. The remainder is named head2=, head3= etc.
	local heads = {}
	local head = args[1]; if head == "" then head = nil end
	local i = 2
	
	while head do
		if m_common.needs_accents(head) then
			table.insert(categories, "ウクライナ語 アクセント未入力")
		end
		
		table.insert(heads, head)
		head = args["head" .. i]; if head == "" then head = nil end
		i = i + 1
	end
	
	if #heads == 0 then
		table.insert(categories, "ウクライナ語 アクセント未入力")
	end
	
	-- Get transliteration
	local tr = args["tr"]; if tr == "" then tr = nil end
	
	if pos_functions[poscat] then
		pos_functions[poscat](args, genders, inflections, categories)
	end
	
	return require("モジュール:headword").full_headword{
		lang = lang,
		heads = {head},
		translit = {tr},
		genders = genders,
		inflections = inflections,
		categories = categories,
	}
end

pos_functions["固有名詞"] = function(args, genders, inflections, categories)
	pos_functions["名詞"](args, genders, inflections, categories, true)
end

-- Display additional inflection information for a noun
pos_functions["名詞"] = function(args, genders, inflections, categories, no_plural)
	-- Iterate over all gn parameters (g2, g3 and so on) until one is empty
	local g = args[2]; if g == "" then g = nil end
	local i = 2
	
	while g do
		table.insert(genders, g)
		g = args["g" .. i]; if g == "" then g = nil end
		i = i + 1
	end
	
	if #genders == 0 then
		table.insert(genders, "?")
	elseif #genders > 1 then
		table.insert(categories, "ウクライナ語 複数の性を持つ名詞")
	end
	
	-- Get the genitive parameters
	-- First get the 3rd parameter. The remainder is named gen2=, gen3= etc.
	local genitives = {}
	local form = args[3]; if form == "" then form = nil end
	local i = 2
	
	while form do
		table.insert(genitives, form)
		form = args["gen" .. i]; if form == "" then form = nil end
		i = i + 1
	end
	
	-- Get the plural parameters
	-- First get the 4th parameter. The remainder is named pl2=, pl3= etc.
	local plurals = {}
	local form = args[4]; if form == "" then form = nil end
	local i = 2
	
	while form do
		table.insert(plurals, form)
		form = args["pl" .. i]; if form == "" then form = nil end
		i = i + 1
	end
	
	local mode = plurals[1]
	
	-- Get the feminine parameters
	-- First get the f= parameter. The remainder is named f2=, f3= etc.
	local feminines = {}
	local form = args["f"]; if form == "" then form = nil end
	local i = 2
	
	while form do
		table.insert(feminines, form)
		form = args["f" .. i]; if form == "" then form = nil end
		i = i + 1
	end

	-- Get the masculine parameters
	-- First get the m= parameter. The remainder is named m2=, m3= etc.
	local masculines = {}
	local form = args["m"]; if form == "" then form = nil end
	local i = 2
	
	while form do
		table.insert(masculines, form)
		form = args["m" .. i]; if form == "" then form = nil end
		i = i + 1
	end
	
	-- Process the genders
	local singular_genders = {
		["m-?"] = true,
		["m-an"] = true,
		["m-in"] = true,
		
		["f"] = true,
		["f-?"] = true,
		["f-an"] = true,
		["f-in"] = true,
		
		["n"] = true,
		["n-an"] = true,
		["n-in"] = true}
	
	local plural_genders = {
		["m-?-p"] = true,
		["m-an-p"] = true,
		["m-in-p"] = true,

		["f-?-p"] = true,
		["f-an-p"] = true,
		["f-in-p"] = true,
		
		["n-p"] = true,
		["n-an-p"] = true,
		["n-in-p"] = true}
	
	for i, g in ipairs(genders) do
		if g == "m" then
			g = "m-?"
		elseif g == "m-p" then
			g = "m-?-p"
		elseif g == "f" and mode ~= "-" and not no_plural then
			g = "f-?"
		elseif g == "f-p" then
			g = "f-?-p"
		end
		
		if not singular_genders[g] and not plural_genders[g] then
			g = "?"
		end
		
		genders[i] = g
		
		-- Categorize by gender
		if g:sub(1,1) == "m" then
			table.insert(categories, "ウクライナ語 男性名詞")
		elseif g:sub(1,1) == "f" then
			table.insert(categories, "ウクライナ語 女性名詞")
		elseif g:sub(1,1) == "n" then
			table.insert(categories, "ウクライナ語 中性名詞")
		end
		
		-- Categorize by animacy
		if g:sub(3,4) == "an" then
			table.insert(categories, "ウクライナ語 名詞 活動体")
		elseif g:sub(3,4) == "in" then
			table.insert(categories, "ウクライナ語 名詞 不活動体")
		end
		
		-- Categorize by number
		if plural_genders[g] then
			table.insert(categories, "ウクライナ語 絶対複数")
		end
	end
	
	-- Add the genitive forms
	genitives.label = "属格"
	genitives.request = true
	
	for i, form in ipairs(genitives) do
		if m_common.needs_accents(form) then
			table.insert(categories, "ウクライナ語 名詞 アクセント未入力")
		end
	end
	
	table.insert(inflections, genitives)
	
	-- Add the plural forms
	-- If the noun is a plurale tantum, then ignore the 4th parameter altogether
	if no_plural then
		-- do nothing
	elseif plural_genders[genders[1]] then
		table.insert(inflections, {label = "[[絶対複数]]"})
	elseif mode == "-" then
		table.insert(inflections, {label = "[[不可算名詞|不可算]]"})
		table.insert(categories, "ウクライナ語 不可算名詞")
	else
		plurals.label = "複数主格"
		plurals.request = true
		
		for i, form in ipairs(plurals) do
			if m_common.needs_accents(form) then
				table.insert(categories, "ウクライナ語 名詞 アクセント未入力")
			end
		end
		
		table.insert(inflections, plurals)
	end
	
	-- Add the feminine forms
	if #feminines > 0 then
		feminines.label = "女性"
		
		for i, form in ipairs(feminines) do
			if m_common.needs_accents(form) then
				table.insert(categories, "ウクライナ語 名詞 アクセント未入力")
			end
		end
		
		table.insert(inflections, feminines)
	end
	
	-- Add the masculine forms
	if #masculines > 0 then
		masculines.label = "男性"
		
		for i, form in ipairs(masculines) do
			if m_common.needs_accents(form) then
				table.insert(categories, "ウクライナ語 名詞 アクセント未入力")
			end
		end
		
		table.insert(inflections, masculines)
	end
end

-- Display additional inflection information for a verb
pos_functions["動詞"] = function(args, genders, inflections, categories)
	-- Aspect
	local aspect = args[2]; if aspect == "" then aspect = nil end
	
	if aspect == "impf" then
		table.insert(genders, "impf")
		table.insert(categories, "ウクライナ語 動詞 不完了体")
	elseif aspect == "pf" then
		table.insert(genders, "pf")
		table.insert(categories, "ウクライナ語 動詞 完了体")
	elseif aspect == "both" then
		table.insert(genders, "impf")
		table.insert(genders, "pf")
		table.insert(categories, "ウクライナ語 動詞 不完了体")
		table.insert(categories, "ウクライナ語 動詞 完了体")
	else
		table.insert(genders, "?")
		table.insert(categories, "ウクライナ語 動詞 相未入力")
	end
	
	-- Get the imperfective parameters
	-- First get the impf= parameter. The remainder is named impf2=, impf3= etc.
	local imperfectives = {}
	local form = args["impf"]; if form == "" then form = nil end
	local i = 2
	
	while form do
		table.insert(imperfectives, form)
		form = args["impf" .. i]; if form == "" then form = nil end
		i = i + 1
	end
	
	-- Get the perfective parameters
	-- First get the pf= parameter. The remainder is named pf2=, pf3= etc.
	local perfectives = {}
	local form = args["pf"]; if form == "" then form = nil end
	local i = 2
	
	while form do
		table.insert(perfectives, form)
		form = args["pf" .. i]; if form == "" then form = nil end
		i = i + 1
	end

	-- Add the imperfective forms
	if #imperfectives > 0 then
		local impf_parts = {label = "imperfective"}
		
		for i, form in ipairs(imperfectives) do
			table.insert(impf_parts, form)
			
			if m_common.needs_accents(form) then
				table.insert(categories, "ウクライナ語 動詞 アクセント未入力")
			end
		end
		
		table.insert(inflections, impf_parts)
	end
	
	-- Add the perfective forms
	if #perfectives > 0 then
		local pf_parts = {label = "perfective"}
		
		for i, form in ipairs(perfectives) do
			table.insert(pf_parts, form)
			
			if m_common.needs_accents(form) then
				table.insert(categories, "ウクライナ語 動詞 アクセント未入力")
			end
		end
		
		table.insert(inflections, pf_parts)
	end
end

return export