コンテンツにスキップ

モジュール:chg-noun-inflection

出典: フリー多機能辞典『ウィクショナリー日本語版(Wiktionary)』

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

local export = {}

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

--sound inventories based on vowel harmony
local front_sounds_lat = {
	["A"] = "ä",
	["I"] = "i",
	["U"] = "ü",
	["close"] = {["rounded"] = "ü", ["unrounded"] = "i"},
	["O"] = "ö",
	["consonants"] = {
		["voiced"] = {["dorsal"] = "g", ["alveolar"] = "d"},
		["unvoiced"] = {["dorsal"] = "k", ["alveolar"] = "t"}
	}
}
local back_sounds_lat = {
	["A"] = "a",
	["I"] = "ı",
	["U"] = "u",
	["close"] = {["rounded"] = "u", ["unrounded"] = "ı"},
	["O"] = "o",
	["consonants"] = {
		["voiced"] = {["dorsal"] = "ġ", ["alveolar"] = "d"},
		["unvoiced"] = {["dorsal"] = "q", ["alveolar"] = "t"}
	}
}
local inventory_chg = {
	["I"] = "ی",
	["close"] = {["rounded"] = "و", ["unrounded"] = "ی"},
	["consonants"] = {
		["voiced"] = {["dorsal"] = "غ", ["alveolar"] = "د"},
		["unvoiced"] = {["dorsal"] = "ک", ["alveolar"] = "ت"}	
	}
}

function export.above(frame)
	--basic assignments
	local params = {
		["head"] = {default = mw.loadData("モジュール:headword/data").pagename},
		["tr"] = {required = true, default = "default"},
		["loan"] = {type = "boolean"},
		["st"] = {type = "boolean"},
		["pt"] = {type = "boolean"},
		["vza"] = {type = "boolean"},
		["pr"] = {type = "boolean"},
		["poss"] = {type = "boolean"}
	}
	local args = require("モジュール:parameters").process(frame:getParent().args, params)
	local stem_chg = mw.loadData("モジュール:headword/data").pagename
	if args["head"] then
		stem_chg = args["head"]
	end
	local stem_lat = args["tr"]
	local data = {forms = {}, info = stem_chg .. " の格変化 (" .. stem_lat .. ")", categories = {}}
	local last_vowel = mw.ustring.match(stem_lat, ".*([aāäiīıoōöuūü])")
	local inventory_lat = back_sounds_lat
	
	--inventory selection based on palatal vowel harmony
	if not args["loan"] then
		if last_vowel == "ä" or last_vowel == "i" or last_vowel == "ü" or last_vowel == "ö" then
			inventory_lat = front_sounds_lat
		end
	else
		if (not mw.ustring.find(stem_lat, "[ṭṣqḥḍẓġ]")) and (last_vowel == "a" or last_vowel == "i" or last_vowel == "u") then
			inventory_lat = front_sounds_lat
		end
	end
	
	--close vowel selection based on labial vowel harmony
	local close_vowel_lat = inventory_lat["close"]["unrounded"]
	local close_vowel_chg = inventory_chg["close"]["unrounded"]
	if last_vowel == inventory_lat["U"] or last_vowel == inventory_lat["O"] then
		close_vowel_lat = inventory_lat["close"]["rounded"]
		close_vowel_chg = inventory_chg["close"]["rounded"]
	end
	
	--defining voicing of certain consonants (function for use in suffix declaration)
	local function consonants_decl(base_stem)
		local last_letter = mw.ustring.sub(base_stem, -1)
		if not mw.ustring.find(last_letter, "[aāäeiīıoöuūü]") then
        	if mw.ustring.find(last_letter, "[pščftṭṣkqḫḥh]") then
				return inventory_lat["consonants"]["unvoiced"], inventory_chg["consonants"]["unvoiced"]
			else
				return inventory_lat["consonants"]["voiced"], inventory_chg["consonants"]["voiced"]
			end
		else
			return inventory_lat["consonants"]["voiced"], inventory_chg["consonants"]["voiced"]
		end
	end
	
	--ZWNJ assignment for correct orthography
	if mw.ustring.sub(stem_chg, -1) == "ه" and mw.ustring.sub(stem_lat, -1) == inventory_lat["A"] then
		stem_chg = stem_chg .. "‌"
	end
	
	--stem assignments
	local stem_pl_chg = stem_chg .. "لار"
	local stem_pl_lat = stem_lat .. "l" .. inventory_lat["A"] .. "r"
	local poss_stem_lat = stem_lat
	local poss_stem_pl_lat = stem_pl_lat
	local poss_stem_chg = stem_chg
	local poss_stem_pl_chg = stem_pl_chg
	
	--vowel-zero alteration check
	if args["vza"] then
		poss_stem_lat = mw.ustring.gsub(stem_lat, "(.*)[iīıuūü](.*)", "%1%2", 1)
		poss_stem_chg = mw.ustring.gsub(stem_chg, "(.*)[وی](.*)", "%1%2", 1)
	end
	
	--defining possessive forms
	local function poss_decl(base_stem_lat, base_stem_chg)
		local last_letter = mw.ustring.sub(base_stem_lat, -1)
		local base_poss_stem_lat = base_stem_lat
		local base_poss_stem_chg = base_stem_chg
		local base_poss_stem_3ps_lat = base_stem_lat .. "s"
		local base_poss_stem_3ps_chg = base_stem_chg .. "س"
		if base_stem_chg == "سو" and base_stem_lat == "su" then
			base_poss_stem_lat = "suyu"
			base_poss_stem_chg = "سویو"
			base_poss_stem_3ps_lat = "suy"
			base_poss_stem_3ps_chg = "سوی"
		elseif not mw.ustring.find(last_letter, "[aāäiīıoöuūü]") then
			base_poss_stem_lat = base_stem_lat .. close_vowel_lat
			base_poss_stem_chg = base_stem_chg .. close_vowel_chg
			base_poss_stem_3ps_lat = base_stem_lat
			base_poss_stem_3ps_chg = base_stem_chg
		end
		return {
			["lat_1sg"] = base_poss_stem_lat .. "m",
			["lat_2sg"] = base_poss_stem_lat .. "ng",
			["lat_3sg"] = base_poss_stem_3ps_lat .. inventory_lat["I"],
			["lat_1pl"] = base_poss_stem_lat .. "m" .. inventory_lat["I"] .. "z",
			["lat_a_2pl"] = base_poss_stem_lat .. "ng" .. inventory_lat["I"] .. "z",
			["lat_b_2pl"] = base_poss_stem_lat .. "ngl" .. inventory_lat["A"] .. "r",
			["lat_a_3pl"] = (mw.ustring.match(base_stem_lat, "l" .. inventory_lat["A"] .. "r$") and base_stem_lat or base_stem_lat .. "l" .. inventory_lat["A"] .. "r") .. inventory_lat["I"],
			["lat_b_3pl"] = base_poss_stem_3ps_lat .. inventory_lat["I"],
			["chg_1sg"] = base_poss_stem_chg .. "م",
			["chg_2sg"] = base_poss_stem_chg .. "نگ",
			["chg_3sg"] = base_poss_stem_3ps_chg .. "ی",
			["chg_1pl"] = base_poss_stem_chg .. "میز",
			["chg_a_2pl"] = base_poss_stem_chg .. "نگیز",
			["chg_b_2pl"] = base_poss_stem_chg .. "نگلار",
			["chg_a_3pl"] = (mw.ustring.match(base_stem_chg, "لار$") and base_stem_chg or base_stem_chg .. "لار") .. inventory_chg["I"],
			["chg_b_3pl"] = base_poss_stem_3ps_chg .. "ی",
		}
	end
	
	local sg_poss = poss_decl(poss_stem_lat, poss_stem_chg)
	local pl_poss = poss_decl(poss_stem_pl_lat, poss_stem_pl_chg)
	
	--defining suffixed forms
	local function suffix_decl(base_stem_lat, base_stem_chg)
		local cons_inventory_lat, cons_inventory_chg = consonants_decl(base_stem_lat)
		return {
			["lat_nom"] = base_stem_lat,
			["lat_gen"] = base_stem_lat .. "n" .. inventory_lat["I"] .. "ng",
			["lat_def_acc"] = base_stem_lat .. "n" .. inventory_lat["I"],
			["lat_dat"] = base_stem_lat .. cons_inventory_lat["dorsal"] .. inventory_lat["A"],
			["lat_abl"] = base_stem_lat .. cons_inventory_lat["alveolar"] .. inventory_lat["I"] .. "n",
			["lat_loc"] = base_stem_lat .. cons_inventory_lat["alveolar"] .. inventory_lat["A"],
			["chg_nom"] = base_stem_chg,
			["chg_gen"] = base_stem_chg .. "نینگ",
			["chg_def_acc"] = base_stem_chg .. "نی",
			["chg_dat"] = base_stem_chg .. cons_inventory_chg["dorsal"] .. "ە",
			["chg_abl"] = base_stem_chg .. cons_inventory_chg["alveolar"] .. "ین",
			["chg_loc"] = base_stem_chg .. cons_inventory_chg["alveolar"] .. "ە"
		}
	end
	
	data.forms["decl_sg"] = suffix_decl(stem_lat, stem_chg)
	data.forms["decl_pl"] = suffix_decl(stem_pl_lat, stem_pl_chg)
	
	--defining suffixed possessive forms
	if args["poss"] then
		data.forms["decl_poss_1sg_sg"] = suffix_decl(sg_poss["lat_1sg"], sg_poss["chg_1sg"])
		data.forms["decl_poss_1sg_pl"] = suffix_decl(pl_poss["lat_1sg"], pl_poss["chg_1sg"])
		data.forms["decl_poss_2sg_sg"] = suffix_decl(sg_poss["lat_2sg"], sg_poss["chg_2sg"])
		data.forms["decl_poss_2sg_pl"] = suffix_decl(pl_poss["lat_2sg"], pl_poss["chg_2sg"])
		data.forms["decl_poss_3sg_sg"] = suffix_decl(sg_poss["lat_3sg"], sg_poss["chg_3sg"])
		data.forms["decl_poss_3sg_pl"] = suffix_decl(pl_poss["lat_3sg"], pl_poss["chg_3sg"])
		data.forms["decl_poss_1pl_sg"] = suffix_decl(sg_poss["lat_1pl"], sg_poss["chg_1pl"])
		data.forms["decl_poss_1pl_pl"] = suffix_decl(pl_poss["lat_1pl"], pl_poss["chg_1pl"])
		data.forms["decl_poss_a_2pl_sg"] = suffix_decl(sg_poss["lat_a_2pl"], sg_poss["chg_a_2pl"])
		data.forms["decl_poss_a_2pl_pl"] = suffix_decl(pl_poss["lat_a_2pl"], pl_poss["chg_a_2pl"])
		data.forms["decl_poss_b_2pl_sg"] = suffix_decl(sg_poss["lat_b_2pl"], sg_poss["chg_b_2pl"])
		data.forms["decl_poss_b_2pl_pl"] = suffix_decl(pl_poss["lat_b_2pl"], pl_poss["chg_b_2pl"])
		data.forms["decl_poss_a_3pl_sg"] = suffix_decl(sg_poss["lat_a_3pl"], sg_poss["chg_a_3pl"])
		data.forms["decl_poss_a_3pl_pl"] = suffix_decl(pl_poss["lat_a_3pl"], pl_poss["chg_a_3pl"])
		data.forms["decl_poss_b_3pl_sg"] = suffix_decl(sg_poss["lat_b_3pl"], sg_poss["chg_b_3pl"])
		data.forms["decl_poss_b_3pl_pl"] = suffix_decl(pl_poss["lat_b_3pl"], pl_poss["chg_b_3pl"])
	end
	
	postprocess(args, data)
	
    return finaloutput(args, data)
end

--defining categorisation and such
function postprocess(args, data)
	if args["pr"] then
		table.insert(data.categories, lang:getCanonicalName() .. " 固有名詞")
	end
	
	if args["st"] then
		table.insert(data.categories, lang:getCanonicalName() .. " 不可算名詞")
	elseif args["pt"] then
		table.insert(data.categories, lang:getCanonicalName() .. " 絶対複数")
	end
	
	if args["vza"] then
		table.insert(data.categories, lang:getCanonicalName() .. " 名詞 with vowel-zero alteration")
	end
	
	if args["loan"] then
		table.insert(data.categories, lang:getCanonicalName() .. " 他言語由来")
	end
end

--defining structuring for the final output
function finaloutput(args, data)
	--defining function to use in gsub later on as repl
	local function field(decl, term)
		if ((args["st"] or args["pr"]) and decl:match("pl$")) or (args["pt"] and decl:match("sg$")) then
			return "—"
		elseif term == "info" then
			return data.info
		end
		
		return data.forms[decl][term]
	end
	
	local wikicode = {}
	
	if args["poss"] then
		table.insert(wikicode, mw.getCurrentFrame():expandTemplate{
			title = "inflection-box-top",
			args = {
				title = "{{{_|info}}}",
				flow = "vertical",
			}
		})
	
		table.insert(wikicode, mw.getCurrentFrame():expandTemplate{
			title = "inflection-table-top",
			args = {
				title = "-",
				palette = "teal",
			}
		})
	else
		table.insert(wikicode, mw.getCurrentFrame():expandTemplate{
			title = "inflection-table-top",
			args = {
				title = "{{{_|info}}}",
				tall = "yes",
				palette = "teal",
			}
		})
	end
	
	--wikitable for regular declension
	table.insert(wikicode, [=[
		!
		! 単数
		! 複数
		|-
		! 主格
		| {{{decl_sg|chg_nom}}}<br><small>{{{decl_sg|lat_nom}}}</small>
		| {{{decl_pl|chg_nom}}}<br><small>{{{decl_pl|lat_nom}}}</small>
		|-
		! 属格
		| {{{decl_sg|chg_gen}}}<br><small>{{{decl_sg|lat_gen}}}</small>
		| {{{decl_pl|chg_gen}}}<br><small>{{{decl_pl|lat_gen}}}</small>
		|-
		! 限定対格
		| {{{decl_sg|chg_def_acc}}}<br><small>{{{decl_sg|lat_def_acc}}}</small>
		| {{{decl_pl|chg_def_acc}}}<br><small>{{{decl_pl|lat_def_acc}}}</small>
		|-
		! 与格
		| {{{decl_sg|chg_dat}}}<br><small>{{{decl_sg|lat_dat}}}</small>
		| {{{decl_pl|chg_dat}}}<br><small>{{{decl_pl|lat_dat}}}</small>
		|-
		! 奪格
		| {{{decl_sg|chg_abl}}}<br><small>{{{decl_sg|lat_abl}}}</small>
		| {{{decl_pl|chg_abl}}}<br><small>{{{decl_pl|lat_abl}}}</small>
		|-
		! 処格
		| {{{decl_sg|chg_loc}}}<br><small>{{{decl_sg|lat_loc}}}</small>
		| {{{decl_pl|chg_loc}}}<br><small>{{{decl_pl|lat_loc}}}</small>
	]=])
	table.insert(wikicode, mw.getCurrentFrame():expandTemplate{title = "inflection-table-bottom"})
	
	--wikitable for possessive declension
	if args["poss"] then
		table.insert(wikicode, mw.getCurrentFrame():expandTemplate{
			title = "inflection-table-top",
			args = {
				title = "possessive forms",
				tall = "yes",
				palette = "teal",
			}
		})
		
		table.insert(wikicode, [=[
			! colspan=3 class="outer" | 一人称単数
			|-
			!
			! 単数
			! 複数
			|-
			! 主格
			| {{{decl_poss_1sg_sg|chg_nom}}}<br><small>{{{decl_poss_1sg_sg|lat_nom}}}</small>
			| {{{decl_poss_1sg_pl|chg_nom}}}<br><small>{{{decl_poss_1sg_pl|lat_nom}}}</small>
			|-
			! 属格
			| {{{decl_poss_1sg_sg|chg_gen}}}<br><small>{{{decl_poss_1sg_sg|lat_gen}}}</small>
			| {{{decl_poss_1sg_pl|chg_gen}}}<br><small>{{{decl_poss_1sg_pl|lat_gen}}}</small>
			|-
			! 限定対格
			| {{{decl_poss_1sg_sg|chg_def_acc}}}<br><small>{{{decl_poss_1sg_sg|lat_def_acc}}}</small>
			| {{{decl_poss_1sg_pl|chg_def_acc}}}<br><small>{{{decl_poss_1sg_pl|lat_def_acc}}}</small>
			|-
			! 与格
			| {{{decl_poss_1sg_sg|chg_dat}}}<br><small>{{{decl_poss_1sg_sg|lat_dat}}}</small>
			| {{{decl_poss_1sg_pl|chg_dat}}}<br><small>{{{decl_poss_1sg_pl|lat_dat}}}</small>
			|-
			! 奪格
			| {{{decl_poss_1sg_sg|chg_abl}}}<br><small>{{{decl_poss_1sg_sg|lat_abl}}}</small>
			| {{{decl_poss_1sg_pl|chg_abl}}}<br><small>{{{decl_poss_1sg_pl|lat_abl}}}</small>
			|-
			! 処格
			| {{{decl_poss_1sg_sg|chg_loc}}}<br><small>{{{decl_poss_1sg_sg|lat_loc}}}</small>
			| {{{decl_poss_1sg_pl|chg_loc}}}<br><small>{{{decl_poss_1sg_pl|lat_loc}}}</small>
			|-
			! colspan=3 class="outer" | 二人称単数
			|-
			!
			! 単数
			! 複数
			|-
			! 主格
			| {{{decl_poss_2sg_sg|chg_nom}}}<br><small>{{{decl_poss_2sg_sg|lat_nom}}}</small>
			| {{{decl_poss_2sg_pl|chg_nom}}}<br><small>{{{decl_poss_2sg_pl|lat_nom}}}</small>
			|-
			! 属格
			| {{{decl_poss_2sg_sg|chg_gen}}}<br><small>{{{decl_poss_2sg_sg|lat_gen}}}</small>
			| {{{decl_poss_2sg_pl|chg_gen}}}<br><small>{{{decl_poss_2sg_pl|lat_gen}}}</small>
			|-
			! 限定対格
			| {{{decl_poss_2sg_sg|chg_def_acc}}}<br><small>{{{decl_poss_2sg_sg|lat_def_acc}}}</small>
			| {{{decl_poss_2sg_pl|chg_def_acc}}}<br><small>{{{decl_poss_2sg_pl|lat_def_acc}}}</small>
			|-
			! 与格
			| {{{decl_poss_2sg_sg|chg_dat}}}<br><small>{{{decl_poss_2sg_sg|lat_dat}}}</small>
			| {{{decl_poss_2sg_pl|chg_dat}}}<br><small>{{{decl_poss_2sg_pl|lat_dat}}}</small>
			|-
			! 奪格
			| {{{decl_poss_2sg_sg|chg_abl}}}<br><small>{{{decl_poss_2sg_sg|lat_abl}}}</small>
			| {{{decl_poss_2sg_pl|chg_abl}}}<br><small>{{{decl_poss_2sg_pl|lat_abl}}}</small>
			|-
			! 処格
			| {{{decl_poss_2sg_sg|chg_loc}}}<br><small>{{{decl_poss_2sg_sg|lat_loc}}}</small>
			| {{{decl_poss_2sg_pl|chg_loc}}}<br><small>{{{decl_poss_2sg_pl|lat_loc}}}</small>
			|-
			! colspan=3 class="outer" | 三人称単数
			|-
			!
			! 単数
			! 複数
			|-
			! 主格
			| {{{decl_poss_3sg_sg|chg_nom}}}<br><small>{{{decl_poss_3sg_sg|lat_nom}}}</small>
			| {{{decl_poss_3sg_pl|chg_nom}}}<br><small>{{{decl_poss_3sg_pl|lat_nom}}}</small>
			|-
			! 属格
			| {{{decl_poss_3sg_sg|chg_gen}}}<br><small>{{{decl_poss_3sg_sg|lat_gen}}}</small>
			| {{{decl_poss_3sg_pl|chg_gen}}}<br><small>{{{decl_poss_3sg_pl|lat_gen}}}</small>
			|-
			! 限定対格
			| {{{decl_poss_3sg_sg|chg_def_acc}}}<br><small>{{{decl_poss_3sg_sg|lat_def_acc}}}</small>
			| {{{decl_poss_3sg_pl|chg_def_acc}}}<br><small>{{{decl_poss_3sg_pl|lat_def_acc}}}</small>
			|-
			! 与格
			| {{{decl_poss_3sg_sg|chg_dat}}}<br><small>{{{decl_poss_3sg_sg|lat_dat}}}</small>
			| {{{decl_poss_3sg_pl|chg_dat}}}<br><small>{{{decl_poss_3sg_pl|lat_dat}}}</small>
			|-
			! 奪格
			| {{{decl_poss_3sg_sg|chg_abl}}}<br><small>{{{decl_poss_3sg_sg|lat_abl}}}</small>
			| {{{decl_poss_3sg_pl|chg_abl}}}<br><small>{{{decl_poss_3sg_pl|lat_abl}}}</small>
			|-
			! 処格
			| {{{decl_poss_3sg_sg|chg_loc}}}<br><small>{{{decl_poss_3sg_sg|lat_loc}}}</small>
			| {{{decl_poss_3sg_pl|chg_loc}}}<br><small>{{{decl_poss_3sg_pl|lat_loc}}}</small>
			|-
			! colspan=3 class="outer" | 一人称複数
			|-
			!
			! 単数
			! 複数
			|-
			! 主格
			| {{{decl_poss_1pl_sg|chg_nom}}}<br><small>{{{decl_poss_1pl_sg|lat_nom}}}</small>
			| {{{decl_poss_1pl_pl|chg_nom}}}<br><small>{{{decl_poss_1pl_pl|lat_nom}}}</small>
			|-
			! 属格
			| {{{decl_poss_1pl_sg|chg_gen}}}<br><small>{{{decl_poss_1pl_sg|lat_gen}}}</small>
			| {{{decl_poss_1pl_pl|chg_gen}}}<br><small>{{{decl_poss_1pl_pl|lat_gen}}}</small>
			|-
			! 限定対格
			| {{{decl_poss_1pl_sg|chg_def_acc}}}<br><small>{{{decl_poss_1pl_sg|lat_def_acc}}}</small>
			| {{{decl_poss_1pl_pl|chg_def_acc}}}<br><small>{{{decl_poss_1pl_pl|lat_def_acc}}}</small>
			|-
			! 与格
			| {{{decl_poss_1pl_sg|chg_dat}}}<br><small>{{{decl_poss_1pl_sg|lat_dat}}}</small>
			| {{{decl_poss_1pl_pl|chg_dat}}}<br><small>{{{decl_poss_1pl_pl|lat_dat}}}</small>
			|-
			! 奪格
			| {{{decl_poss_1pl_sg|chg_abl}}}<br><small>{{{decl_poss_1pl_sg|lat_abl}}}</small>
			| {{{decl_poss_1pl_pl|chg_abl}}}<br><small>{{{decl_poss_1pl_pl|lat_abl}}}</small>
			|-
			! 処格
			| {{{decl_poss_1pl_sg|chg_loc}}}<br><small>{{{decl_poss_1pl_sg|lat_loc}}}</small>
			| {{{decl_poss_1pl_pl|chg_loc}}}<br><small>{{{decl_poss_1pl_pl|lat_loc}}}</small>
			|-
			! colspan=3 class="outer" | 二人称複数
			|-
			!
			! 単数
			! 複数
			|-
			! rowspan=2 | 主格
			| {{{decl_poss_a_2pl_sg|chg_nom}}}<br><small>{{{decl_poss_a_2pl_sg|lat_nom}}}</small>
			| {{{decl_poss_a_2pl_pl|chg_nom}}}<br><small>{{{decl_poss_a_2pl_pl|lat_nom}}}</small>
			|-
			| {{{decl_poss_b_2pl_sg|chg_nom}}}<br><small>{{{decl_poss_b_2pl_sg|lat_nom}}}</small>
			| {{{decl_poss_b_2pl_pl|chg_nom}}}<br><small>{{{decl_poss_b_2pl_pl|lat_nom}}}</small>
			|-
			! rowspan=2 | 属格
			| {{{decl_poss_a_2pl_sg|chg_gen}}}<br><small>{{{decl_poss_a_2pl_sg|lat_gen}}}</small>
			| {{{decl_poss_a_2pl_pl|chg_gen}}}<br><small>{{{decl_poss_a_2pl_pl|lat_gen}}}</small>
			|-
			| {{{decl_poss_b_2pl_sg|chg_gen}}}<br><small>{{{decl_poss_b_2pl_sg|lat_gen}}}</small>
			| {{{decl_poss_b_2pl_pl|chg_gen}}}<br><small>{{{decl_poss_b_2pl_pl|lat_gen}}}</small>
			|-
			! rowspan=2 | 限定対格
			| {{{decl_poss_a_2pl_sg|chg_def_acc}}}<br><small>{{{decl_poss_a_2pl_sg|lat_def_acc}}}</small>
			| {{{decl_poss_a_2pl_pl|chg_def_acc}}}<br><small>{{{decl_poss_a_2pl_pl|lat_def_acc}}}</small>
			|-
			| {{{decl_poss_b_2pl_sg|chg_def_acc}}}<br><small>{{{decl_poss_b_2pl_sg|lat_def_acc}}}</small>
			| {{{decl_poss_b_2pl_pl|chg_def_acc}}}<br><small>{{{decl_poss_b_2pl_pl|lat_def_acc}}}</small>
			|-
			! rowspan=2 | 与格
			| {{{decl_poss_a_2pl_sg|chg_dat}}}<br><small>{{{decl_poss_a_2pl_sg|lat_dat}}}</small>
			| {{{decl_poss_a_2pl_pl|chg_dat}}}<br><small>{{{decl_poss_a_2pl_pl|lat_dat}}}</small>
			|-
			| {{{decl_poss_b_2pl_sg|chg_dat}}}<br><small>{{{decl_poss_b_2pl_sg|lat_dat}}}</small>
			| {{{decl_poss_b_2pl_pl|chg_dat}}}<br><small>{{{decl_poss_b_2pl_pl|lat_dat}}}</small>
			|-
			! rowspan=2 | 奪格
			| {{{decl_poss_a_2pl_sg|chg_abl}}}<br><small>{{{decl_poss_a_2pl_sg|lat_abl}}}</small>
			| {{{decl_poss_a_2pl_pl|chg_abl}}}<br><small>{{{decl_poss_a_2pl_pl|lat_abl}}}</small>
			|-
			| {{{decl_poss_b_2pl_sg|chg_abl}}}<br><small>{{{decl_poss_b_2pl_sg|lat_abl}}}</small>
			| {{{decl_poss_b_2pl_pl|chg_abl}}}<br><small>{{{decl_poss_b_2pl_pl|lat_abl}}}</small>
			|-
			! rowspan=2 | 処格
			| {{{decl_poss_a_2pl_sg|chg_loc}}}<br><small>{{{decl_poss_a_2pl_sg|lat_loc}}}</small>
			| {{{decl_poss_a_2pl_pl|chg_loc}}}<br><small>{{{decl_poss_a_2pl_pl|lat_loc}}}</small>
			|-
			| {{{decl_poss_b_2pl_sg|chg_loc}}}<br><small>{{{decl_poss_b_2pl_sg|lat_loc}}}</small>
			| {{{decl_poss_b_2pl_pl|chg_loc}}}<br><small>{{{decl_poss_b_2pl_pl|lat_loc}}}</small>
			|-
			! colspan=3 class="outer" | 三人称複数
			|-
			!
			! 単数
			! 複数
			|-
			! rowspan=2 | 主格
			| {{{decl_poss_a_3pl_sg|chg_nom}}}<br><small>{{{decl_poss_a_3pl_sg|lat_nom}}}</small>
			| {{{decl_poss_a_3pl_pl|chg_nom}}}<br><small>{{{decl_poss_a_3pl_pl|lat_nom}}}</small>
			|-
			| {{{decl_poss_b_3pl_sg|chg_nom}}}<br><small>{{{decl_poss_b_3pl_sg|lat_nom}}}</small>
			| {{{decl_poss_b_3pl_pl|chg_nom}}}<br><small>{{{decl_poss_b_3pl_pl|lat_nom}}}</small>
			|-
			! rowspan=2 | 属格
			| {{{decl_poss_a_3pl_sg|chg_gen}}}<br><small>{{{decl_poss_a_3pl_sg|lat_gen}}}</small>
			| {{{decl_poss_a_3pl_pl|chg_gen}}}<br><small>{{{decl_poss_a_3pl_pl|lat_gen}}}</small>
			|-
			| {{{decl_poss_b_3pl_sg|chg_gen}}}<br><small>{{{decl_poss_b_3pl_sg|lat_gen}}}</small>
			| {{{decl_poss_b_3pl_pl|chg_gen}}}<br><small>{{{decl_poss_b_3pl_pl|lat_gen}}}</small>
			|-
			! rowspan=2 | 限定対格
			| {{{decl_poss_a_3pl_sg|chg_def_acc}}}<br><small>{{{decl_poss_a_3pl_sg|lat_def_acc}}}</small>
			| {{{decl_poss_a_3pl_pl|chg_def_acc}}}<br><small>{{{decl_poss_a_3pl_pl|lat_def_acc}}}</small>
			|-
			| {{{decl_poss_b_3pl_sg|chg_def_acc}}}<br><small>{{{decl_poss_b_2pl_sg|lat_def_acc}}}</small>
			| {{{decl_poss_b_3pl_pl|chg_def_acc}}}<br><small>{{{decl_poss_b_2pl_pl|lat_def_acc}}}</small>
			|-
			! rowspan=2 | 与格
			| {{{decl_poss_a_3pl_sg|chg_dat}}}<br><small>{{{decl_poss_a_3pl_sg|lat_dat}}}</small>
			| {{{decl_poss_a_3pl_pl|chg_dat}}}<br><small>{{{decl_poss_a_3pl_pl|lat_dat}}}</small>
			|-
			| {{{decl_poss_b_3pl_sg|chg_dat}}}<br><small>{{{decl_poss_b_3pl_sg|lat_dat}}}</small>
			| {{{decl_poss_b_3pl_pl|chg_dat}}}<br><small>{{{decl_poss_b_3pl_pl|lat_dat}}}</small>
			|-
			! rowspan=2 | 属格
			| {{{decl_poss_a_3pl_sg|chg_abl}}}<br><small>{{{decl_poss_a_3pl_sg|lat_abl}}}</small>
			| {{{decl_poss_a_3pl_pl|chg_abl}}}<br><small>{{{decl_poss_a_3pl_pl|lat_abl}}}</small>
			|-
			| {{{decl_poss_b_3pl_sg|chg_abl}}}<br><small>{{{decl_poss_b_3pl_sg|lat_abl}}}</small>
			| {{{decl_poss_b_3pl_pl|chg_abl}}}<br><small>{{{decl_poss_b_3pl_pl|lat_abl}}}</small>
			|-
			! rowspan=2 | 処格
			| {{{decl_poss_a_3pl_sg|chg_loc}}}<br><small>{{{decl_poss_a_3pl_sg|lat_loc}}}</small>
			| {{{decl_poss_a_3pl_pl|chg_loc}}}<br><small>{{{decl_poss_a_3pl_pl|lat_loc}}}</small>
			|-
			| {{{decl_poss_b_3pl_sg|chg_loc}}}<br><small>{{{decl_poss_b_3pl_sg|lat_loc}}}</small>
			| {{{decl_poss_b_3pl_pl|chg_loc}}}<br><small>{{{decl_poss_b_3pl_pl|lat_loc}}}</small>
			|-
			| colspan=3 |
		]=])
		table.insert(wikicode, mw.getCurrentFrame():expandTemplate{title = "inflection-table-bottom"})
		table.insert(wikicode, "\n")
		table.insert(wikicode, mw.getCurrentFrame():expandTemplate{title = "inflection-table-bottom"})
	end
	
	return mw.ustring.gsub(table.concat(wikicode), "{{{([a-z0-9_]+)|([a-z_]+)}}}", field) .. require("モジュール:utilities").format_categories(data.categories, lang)
end

return export