モジュール:frk-decl-noun

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

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

local export = {}

local m_links = require("モジュール:links")
local m_utils = require("モジュール:utilities")

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

local decl_data = {}

decl_data["a-m"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		},
}
setmetatable(decl_data["a-m"], {__call = function(self, args, data)
	data.decl_type = "男性 a語幹"
	
	data.forms["nom_sg"] = {args[1]}
	data.forms["acc_sg"] = {args[1]}
	data.forms["gen_sg"] = {args[1] .. "as", args[1] .. "es"}
	data.forms["dat_sg"] = {args[1] .. "ē"}
	data.forms["ins_sg"] = {args[1] .. "u"}

	if not args.nopl then
		data.forms["nom_pl"] = {args[1] .. "a"}
		data.forms["acc_pl"] = {args[1] .. "a"}
		data.forms["gen_pl"] = {args[1] .. "ō"}
		data.forms["dat_pl"] = {args[1] .. "am", args[1] .. "um"}
		data.forms["ins_pl"] = {args[1] .. "am", args[1] .. "um"}
	end
	
	table.insert(data.categories, "古フランク語 a語幹名詞")
end
})

decl_data["a-n"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		["short"] = {},
		},
}
setmetatable(decl_data["a-n"], {__call = function(self, args, data)
	decl_data["a-m"](args, data)
	
	data.decl_type = "中性 a語幹"

	if not args.nopl then
		data.forms["nom_pl"] = {args[1] .. (args.short and "u" or "")}
		data.forms["acc_pl"] = {args[1] .. (args.short and "u" or "")}
	end
end
})

decl_data["cons-f"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		},
}
setmetatable(decl_data["cons-f"], {__call = function(self, args, data)
	data.decl_type = "古フランク語 子音語幹"
	
	data.forms["nom_sg"] = {args[1]}
	data.forms["acc_sg"] = {args[1]}
	data.forms["gen_sg"] = {args[1]}
	data.forms["dat_sg"] = {args[1]}
	data.forms["ins_sg"] = {args[1] .. "?"}

	if not args.nopl then
		data.forms["nom_pl"] = {args[1]}
		data.forms["acc_pl"] = {args[1]}
		data.forms["gen_pl"] = {args[1] .. "ō"}
		data.forms["dat_pl"] = {args[1] .. "um"}
		data.forms["ins_pl"] = {args[1] .. "um"}
	end
	
	table.insert(data.categories, "古フランク語 子音語幹名詞")
end
})

decl_data["cons-m"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		},
}
setmetatable(decl_data["cons-m"], {__call = function(self, args, data)
	decl_data["cons-f"](args, data)
	
	data.decl_type = "男性 子音語幹"

	data.forms["gen_sg"][2] = args[1] .. "es"
end
})

decl_data["i-f"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		["short"] = {},
		},
}
setmetatable(decl_data["i-f"], {__call = function(self, args, data)
	data.decl_type = "女性 i語幹"
	
	data.forms["nom_sg"] = {args[1] .. (args.short and "i" or "")}
	data.forms["acc_sg"] = {args[1] .. (args.short and "i" or "")}
	data.forms["gen_sg"] = {args[1] .. "ī"}
	data.forms["dat_sg"] = {args[1] .. "ī"}
	data.forms["ins_sg"] = {args[1] .. "ī", args[1] .. "ju"}

	if not args.nopl then
		data.forms["nom_pl"] = {args[1] .. "ī"}
		data.forms["acc_pl"] = {args[1] .. "ī"}
		data.forms["gen_pl"] = {args[1] .. "jō"}
		data.forms["dat_pl"] = {args[1] .. "im"}
		data.forms["ins_pl"] = {args[1] .. "im"}
	end
	
	table.insert(data.categories, "古フランク語 i語幹名詞")
end
})

decl_data["i-m"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		["short"] = {},
		},
}
setmetatable(decl_data["i-m"], {__call = function(self, args, data)
	decl_data["i-f"](args, data)
	
	data.decl_type = "男性 i語幹"

	data.forms["gen_sg"][2] = args[1] .. "es"
	data.forms["dat_sg"][2] = args[1] .. "ē"
end
})

decl_data["i-n"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		["short"] = {},
		},
}
setmetatable(decl_data["i-n"], {__call = function(self, args, data)
	decl_data["i-m"](args, data)
	
	data.decl_type = "中性 i語幹"
end
})

decl_data["ja-m"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		["j"] = {},
		},
}
setmetatable(decl_data["ja-m"], {__call = function(self, args, data)
	data.decl_type = "男性 ja語幹"
	
	local ij = args.j or "ij"
	local i = args.j == "j" and "i" or "ī"
	
	data.forms["nom_sg"] = {args[1] .. i}
	data.forms["acc_sg"] = {args[1] .. i}
	data.forms["gen_sg"] = {args[1] .. ij .. "as", args[1] .. ij .. "es"}
	data.forms["dat_sg"] = {args[1] .. ij .. "ē"}
	data.forms["ins_sg"] = {args[1] .. ij .. "u"}

	if not args.nopl then
		data.forms["nom_pl"] = {args[1] .. ij .. "a"}
		data.forms["acc_pl"] = {args[1] .. ij .. "a"}
		data.forms["gen_pl"] = {args[1] .. ij .. "ō"}
		data.forms["dat_pl"] = {args[1] .. ij .. "am", args[1] .. ij .. "um"}
		data.forms["ins_pl"] = {args[1] .. ij .. "am", args[1] .. ij .. "um"}
	end
	
	table.insert(data.categories, "古フランク語 ja語幹名詞")
end
})

decl_data["ja-n"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		["j"] = {},
		},
}
setmetatable(decl_data["ja-n"], {__call = function(self, args, data)
	decl_data["ja-m"](args, data)
	
	data.decl_type = "中性 ja語幹"

	if not args.nopl then
		data.forms["nom_pl"] = {args[1] .. (args.j == "j" and "ju" or "ī")}
		data.forms["acc_pl"] = {args[1] .. (args.j == "j" and "ju" or "ī")}
	end
end
})

decl_data["an-m"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		},
}
setmetatable(decl_data["an-m"], {__call = function(self, args, data)
	data.decl_type = "男性 an語幹"
	
	data.forms["nom_sg"] = {args[1] .. "ō"}
	data.forms["acc_sg"] = {args[1] .. "an"}
	data.forms["gen_sg"] = {args[1] .. "in"}
	data.forms["dat_sg"] = {args[1] .. "in"}
	data.forms["ins_sg"] = {args[1] .. "in"}

	if not args.nopl then
		data.forms["nom_pl"] = {args[1] .. "an"}
		data.forms["acc_pl"] = {args[1] .. "an"}
		data.forms["gen_pl"] = {args[1] .. "anō"}
		data.forms["dat_pl"] = {args[1] .. "am", args[1] .. "um"}
		data.forms["ins_pl"] = {args[1] .. "am", args[1] .. "um"}
	end
	
	table.insert(data.categories, "古フランク語 an語幹名詞")
end
})

decl_data["an-n"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		},
}
setmetatable(decl_data["an-n"], {__call = function(self, args, data)
	decl_data["an-m"](args, data)
	
	data.decl_type = "中性 an語幹"

	data.forms["nom_sg"] = {args[1] .. "a"}
	data.forms["acc_sg"] = {args[1] .. "a"}
	
	if not args.nopl then
		data.forms["nom_pl"] = {args[1] .. "ōnu"}
		data.forms["acc_pl"] = {args[1] .. "ōnu"}
	end
end
})

decl_data["on-f"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		},
}
setmetatable(decl_data["on-f"], {__call = function(self, args, data)
	data.decl_type = "ōn語幹"
	
	data.forms["nom_sg"] = {args[1] .. "a"}
	data.forms["acc_sg"] = {args[1] .. "ōn"}
	data.forms["gen_sg"] = {args[1] .. "ōn"}
	data.forms["dat_sg"] = {args[1] .. "ōn"}
	data.forms["ins_sg"] = {args[1] .. "ōn"}

	if not args.nopl then
		data.forms["nom_pl"] = {args[1] .. "ōn"}
		data.forms["acc_pl"] = {args[1] .. "ōn"}
		data.forms["gen_pl"] = {args[1] .. "ōnō"}
		data.forms["dat_pl"] = {args[1] .. "ōm"}
		data.forms["ins_pl"] = {args[1] .. "ōm"}
	end
	
	table.insert(data.categories, "古フランク語 ōn語幹名詞")
end
})

decl_data["o-f"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		["short"] = {},
		},
}
setmetatable(decl_data["o-f"], {__call = function(self, args, data)
	data.decl_type = "ō語幹"
	
	data.forms["nom_sg"] = {args[1] .. "a"}
	if args.short then
		data.forms["nom_sg"][2] = args[1] .. "u"
	end
	data.forms["acc_sg"] = {args[1] .. "a"}
	data.forms["gen_sg"] = {args[1] .. "a"}
	data.forms["dat_sg"] = {args[1] .. "u"}
	data.forms["ins_sg"] = {args[1] .. "u"}

	if not args.nopl then
		data.forms["nom_pl"] = {args[1] .. "a"}
		data.forms["acc_pl"] = {args[1] .. "a"}
		data.forms["gen_pl"] = {args[1] .. "ō"}
		data.forms["dat_pl"] = {args[1] .. "ōm"}
		data.forms["ins_pl"] = {args[1] .. "ōm"}
	end
	
	table.insert(data.categories, "古フランク語 ō語幹名詞")
end
})

decl_data["u-mf"] = {
	params = {
		[1] = {},
		["mutstem"] = {},
		["nopl"] = {},
		["short"] = {},
		},
}
setmetatable(decl_data["u-mf"], {__call = function(self, args, data)
	data.decl_type = "u語幹"
	
	data.forms["nom_sg"] = {args[1] .. (args.short and "u" or "")}
	data.forms["acc_sg"] = {args[1] .. (args.short and "u" or "")}
	data.forms["gen_sg"] = {args[1] .. "ō"}
	data.forms["dat_sg"] = {(args.mutstem or args[1]) .. "iu"}
	data.forms["ins_sg"] = {args[1] .. "ū"}

	if not args.nopl then
		data.forms["nom_pl"] = {args.mutstem or (args[1] .. "iu")}
		data.forms["acc_pl"] = {args[1] .. "un"}
		data.forms["gen_pl"] = {args.mutstem or args[1] .. "iwō", not args.mutstem and args[1] .. "jō"}
		data.forms["dat_pl"] = {args[1] .. "um"}
		data.forms["ins_pl"] = {args[1] .. "um"}
	end
	
	table.insert(data.categories, "古フランク語 u語幹名詞")
end
})

decl_data["u-n"] = {
	params = {
		[1] = {},
		["mutstem"] = {},
		["nopl"] = {},
		["short"] = {},
		},
}
setmetatable(decl_data["u-n"], {__call = function(self, args, data)
	decl_data["u-mf"](args, data)
	
	data.decl_type = "中性 u語幹"
	
	if not args.nopl then
		data.forms["nom_pl"] = {args[1] .. "ū"}
		data.forms["acc_pl"] = {args[1] .. "ū"}
		data.forms["gen_pl"][2] = nil
	end
end
})

decl_data["wa-m"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		["w"] = {},
		},
}
setmetatable(decl_data["wa-m"], {__call = function(self, args, data)
	data.decl_type = "男性 wa語幹"
	
	local uw = args.w or "uw"
	
	data.forms["nom_sg"] = {args[1] .. "u"}
	data.forms["acc_sg"] = {args[1] .. "u"}
	data.forms["gen_sg"] = {args[1] .. uw .. "as", args[1] .. uw .. "es"}
	data.forms["dat_sg"] = {args[1] .. uw .. "ē"}
	data.forms["ins_sg"] = {args[1] .. uw .. "u"}

	if not args.nopl then
		data.forms["nom_pl"] = {args[1] .. uw .. "a"}
		data.forms["acc_pl"] = {args[1] .. uw .. "a"}
		data.forms["gen_pl"] = {args[1] .. uw .. "ō"}
		data.forms["dat_pl"] = {args[1] .. uw .. "am", args[1] .. uw .. "um"}
		data.forms["ins_pl"] = {args[1] .. uw .. "am", args[1] .. uw .. "um"}
	end
	
	table.insert(data.categories, "古フランク語 wa語幹名詞")
end
})

decl_data["wa-n"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		["w"] = {},
		},
}
setmetatable(decl_data["wa-n"], {__call = function(self, args, data)
	decl_data["wa-m"](args, data)
	
	data.decl_type = "中性 wa語幹"

	if not args.nopl then
		data.forms["nom_pl"] = {args[1] .. "u"}
		data.forms["acc_pl"] = {args[1] .. "u"}
	end
end
})

decl_data["z-n"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		},
}
setmetatable(decl_data["z-n"], {__call = function(self, args, data)
	data.decl_type = "z語幹"
	
	data.forms["nom_sg"] = {args[1]}
	data.forms["acc_sg"] = {args[1]}
	data.forms["gen_sg"] = {args[1] .. "es?"}
	data.forms["dat_sg"] = {args[1] .. "ē?"}
	data.forms["ins_sg"] = {args[1] .. "u?"}

	if not args.nopl then
		data.forms["nom_pl"] = {args[1] .. "ir"}
		data.forms["acc_pl"] = {args[1] .. "ir"}
		data.forms["gen_pl"] = {args[1] .. "irō"}
		data.forms["dat_pl"] = {args[1] .. "irum"}
		data.forms["ins_pl"] = {args[1] .. "irum"}
	end
	
	table.insert(data.categories, "古フランク語 z語幹名詞")
end
})

local function add_asterisks(forms, data)
	for _, form in ipairs(forms) do
		for i, subform in ipairs(data.forms[form]) do
			data.forms[form][i] = "*" .. subform
		end
	end
end

-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)

	local parent_args = frame:getParent().args
	local decl_type = (frame.args["decl"] or parent_args["decl"]) or "a-m"

	if not decl_data[decl_type] then
		error("Unknown declension '" .. decl_type .. "'")
	end
	
	local data = {forms = {}, categories = {}}
	
	data.head = parent_args["head"] or nil

	local args = require("モジュール:parameters").process(parent_args, decl_data[decl_type].params, true)
	
	-- Override for templates
	if not args[1] then
		setmetatable(args, {__index = function(self, key)
			return "{{{" .. key .. "}}}"
		end
		})
	end
	
	-- Generate the forms
	if parent_args.irr then
		table.insert(data.categories, "古フランク語 不規則名詞")
		if decl_data.irregular[parent_args.irr] then
			decl_data.irregular[parent_args.irr](data)
		else
			decl_data[decl_type](args, data)
		end
	else
		decl_data[decl_type](args, data)
	end

	-- Make the table
	return make_table(data)
end

function make_table(data)
	local function show_form(form)
		if not form then
			return "—"
		end
		
		local ret = {}
		
		for key, subform in ipairs(form) do
			if subform ~= "—" then
				subform = "*" .. subform
			end
			table.insert(ret, subform)
		end
			
		return table.concat(ret, ", ")
	end
	
	local function repl(param)
		if param == "decl_type" then
			return data.decl_type
		else
			return show_form(data.forms[param])
		end
	end

	local wikicode = [=[
<div class="NavFrame" style="float: left; width: 45%;">
<div class="NavHead" style="text-align: center">{{{nom_sg}}} ({{{decl_type}}})の語形変化</div>
<div class="NavContent">
{| style="width: 100%; line-height: 125%; background-color:#F9F9F9; text-align:center; border: 1px solid #CCCCFF;" cellpadding="3" cellspacing="1" class="inflection-table"
|- style="background-color:#EFEFEF; "
|-
| 
! style="width: 50%; background-color:#F3E5AB" | 単数
! style="width: 50%; background-color:#F3E5AB" | 複数
|-
! style="background: #FAEBD7" | [[主格]]
| {{{nom_sg}}}
| {{{nom_pl}}}
|-
! style="background: #FAEBD7" | [[対格]]
| {{{acc_sg}}}
| {{{acc_pl}}}
|-
! style="background: #FAEBD7" | [[属格]]
| {{{gen_sg}}}
| {{{gen_pl}}}
|-
! style="background: #FAEBD7" | [[与格]]
| {{{dat_sg}}}
| {{{dat_pl}}}
|-
! style="background: #FAEBD7" | [[具格]]
| {{{ins_sg}}}
| {{{ins_pl}}}
|}</div></div>
<br clear="all" />]=]

	return (mw.ustring.gsub(wikicode, "{{{([a-z0-9_]+)}}}", repl)) .. m_utils.format_categories(data.categories, lang)
end

return export