跳转到内容

模組:Osx-decl-noun

維基詞典,自由的多語言詞典


local export = {}

local m_links = require("Module:links")
local m_utils = require("Module:utilities")

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

local decl_data = {}

decl_data["a-f"] = {
	params = {
		[1] = {},
	},
}
setmetatable(decl_data["a-f"], {__call = function(self, args, data)
	data.decl_type = "feminine a-stem"
	
	data.forms["nom_sg"] = {args[1] .. "a"}
	data.forms["acc_sg"] = {args[1] .. "a"}
	data.forms["gen_sg"] = {args[1] .. "ō"}
	data.forms["dat_sg"] = {args[1] .. "u"}

	data.forms["nom_pl"] = {args[1] .. "a"}
	data.forms["acc_pl"] = {args[1] .. "a"}
	data.forms["gen_pl"] = {args[1] .. "anō"}
	data.forms["dat_pl"] = {args[1] .. "um"}
	
	table.insert(data.categories, "Old Saxon a-stem nouns")
end
})

decl_data["a-f-v"] = {
	params = {
		[1] = {},
		[2] = {},
	},
}
setmetatable(decl_data["a-f-v"], {__call = function(self, args, data)
	data.decl_type = "feminine a-stem"
	
	data.forms["nom_sg"] = {args[1]}
	data.forms["acc_sg"] = {args[1]}
	data.forms["gen_sg"] = {args[2] .. "ō"}
	data.forms["dat_sg"] = {args[2] .. "u"}

	data.forms["nom_pl"] = {args[2] .. "a"}
	data.forms["acc_pl"] = {args[2] .. "a"}
	data.forms["gen_pl"] = {args[2] .. "anō"}
	data.forms["dat_pl"] = {args[2] .. "um"}
	
	table.insert(data.categories, "Old Saxon a-stem nouns")
end
})

decl_data["a-m"] = {
	params = {
		[1] = {},
	},
}
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] .. "es"}
	data.forms["dat_sg"] = {args[1] .. "e"}

	data.forms["nom_pl"] = {args[1] .. "os"}
	data.forms["acc_pl"] = {args[1] .. "os"}
	data.forms["gen_pl"] = {args[1] .. "ō"}
	data.forms["dat_pl"] = {args[1] .. "um"}
	
	table.insert(data.categories, "古撒克遜語a-詞幹名詞")
end
})

decl_data["a-m-v"] = {
	params = {
		[1] = {},
		[2] = {},
	},
}
setmetatable(decl_data["a-m-v"], {__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[2] .. "es"}
	data.forms["dat_sg"] = {args[2] .. "e"}

	data.forms["nom_pl"] = {args[2] .. "os"}
	data.forms["acc_pl"] = {args[2] .. "os"}
	data.forms["gen_pl"] = {args[2] .. "ō"}
	data.forms["dat_pl"] = {args[2] .. "um"}
	
	table.insert(data.categories, "古撒克遜語a-詞幹名詞")
end
})

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

	data.forms["nom_pl"] = {args[1]}
	data.forms["acc_pl"] = {args[1]}
	data.forms["dat_pl"] = {args[1] .. "un"}
end
})

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

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

decl_data["a-n1-1"] = {
	params = {
		[1] = {},
		[2] = {},
	},
}
setmetatable(decl_data["a-n1-1"], {__call = function(self, args, data)
	decl_data["a-m-v"](args, data)
	
	data.decl_type = "中性a-詞幹"

	data.forms["nom_pl"] = {args[2] .. "u"}
	data.forms["acc_pl"] = {args[2] .. "u"}
end
})

decl_data["a-n2"] = {
	params = {
		[1] = {},
		[2] = {},
	},
}
setmetatable(decl_data["a-n2"], {__call = function(self, args, data)
	decl_data["a-m-v"](args, data)
	
	data.decl_type = "中性a-詞幹"

	data.forms["nom_pl"] = {args[1]}
	data.forms["acc_pl"] = {args[1]}
end
})

decl_data["i-f"] = {
	params = {
		[1] = {},
		[2] = {},
		},
}
setmetatable(decl_data["i-f"], {__call = function(self, args, data)
	data.decl_type = "陰性i-詞幹"
	
	data.forms["nom_sg"] = {args[1]}
	data.forms["acc_sg"] = {args[1]}
	data.forms["gen_sg"] = {args[2] .. "i"}
	data.forms["dat_sg"] = {args[2] .. "i"}

	data.forms["nom_pl"] = {args[2] .. "i"}
	data.forms["acc_pl"] = {args[2] .. "i"}
	data.forms["gen_pl"] = {args[2] .. "iō"}
	data.forms["dat_pl"] = {args[2] .. "ium"}
	
	table.insert(data.categories, "古撒克遜語i-詞幹名詞")
end
})

decl_data["i-f2"] = {
	params = {
		[1] = {},
		[2] = {},
	},
}
setmetatable(decl_data["i-f2"], {__call = function(self, args, data)
	decl_data["i-f"](args, data)
	
	data.forms["gen_pl"] = {args[1] .. "iō"}
	data.forms["dat_pl"] = {args[1] .. "ium"}
end
})

decl_data["i-m"] = {
	params = {
		[1] = {},
		[2] = {},
		["mutstem"] = {},
		},
}
setmetatable(decl_data["i-m"], {__call = function(self, args, data)
	data.decl_type = "陽性i-詞幹"

	data.forms["nom_sg"] = {args.mutstem or args[1]}
	data.forms["acc_sg"] = {args.mutstem or args[1]}
	data.forms["gen_sg"] = {args[1] .. "ies"}
	data.forms["dat_sg"] = {args[1] .. "ie"}

	data.forms["nom_pl"] = {args[2]}
	data.forms["acc_pl"] = {args[2]}
	data.forms["gen_pl"] = {args[1] .. "iō"}
	data.forms["dat_pl"] = {args[1] .. "ium"}
	
	table.insert(data.categories, "古撒克遜語i-詞幹名詞")
end
})

decl_data["i-m1"] = {
	params = {
		[1] = {},
		[2] = {},
		},
}
setmetatable(decl_data["i-m1"], {__call = function(self, args, data)
	data.decl_type = "陽性i-詞幹"

	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] .. "e"}

	data.forms["nom_pl"] = {args[2] .. "i"}
	data.forms["acc_pl"] = {args[2] .. "i"}
	data.forms["gen_pl"] = {args[1] .. "iō"}
	data.forms["dat_pl"] = {args[1] .. "ium"}
	
	table.insert(data.categories, "古撒克遜語i-詞幹名詞")
end
})

decl_data["ja-m"] = {
	params = {
		[1] = {},
		},
}
setmetatable(decl_data["ja-m"], {__call = function(self, args, data)
	data.decl_type = "陽性ja-詞幹"
	
	data.forms["nom_sg"] = {args[1] .. "i"}
	data.forms["acc_sg"] = {args[1] .. "i"}
	data.forms["gen_sg"] = {args[1] .. "ies"}
	data.forms["dat_sg"] = {args[1] .. "ie"}

	data.forms["nom_pl"] = {args[1] .. "ios"}
	data.forms["acc_pl"] = {args[1] .. "ios"}
	data.forms["gen_pl"] = {args[1] .. "iō"}
	data.forms["dat_pl"] = {args[1] .. "ium"}

	table.insert(data.categories, "古撒克遜語ja-詞幹名詞")
end
})

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

	data.forms["nom_pl"] = {args[1] .. "i"}
	data.forms["acc_pl"] = {args[1] .. "i"}
end
})

decl_data["ja-n2"] = {
	params = {
		[1] = {},
		[2] = {},
		},
}
setmetatable(decl_data["ja-n2"], {__call = function(self, args, data)
	data.decl_type = "中性ja-詞幹"
	
	data.forms["nom_sg"] = {args[1]}
	data.forms["acc_sg"] = {args[1]}
	data.forms["gen_sg"] = {args[2] .. "ies"}
	data.forms["dat_sg"] = {args[2] .. "ie"}

	data.forms["nom_pl"] = {args[1]}
	data.forms["acc_pl"] = {args[1]}
	data.forms["gen_pl"] = {args[2] .. "iō"}
	data.forms["dat_pl"] = {args[2] .. "ium"}

	table.insert(data.categories, "古撒克遜語ja-詞幹名詞")
end
})

decl_data["n-m"] = {
	params = {
		[1] = {},
		["nopl"] = {},
		},
}
setmetatable(decl_data["n-m"], {__call = function(self, args, data)
	data.decl_type = "陽性n-詞幹"
	
	data.forms["nom_sg"] = {args[1] .. "o"}
	data.forms["acc_sg"] = {args[1] .. "on", args[1] .. "an"}
	data.forms["gen_sg"] = {args[1] .. "en", args[1] .. "an", args[1] .. "on" }
	data.forms["dat_sg"] = {args[1] .. "en", args[1] .. "an", args[1] .. "on" }

	if not args.nopl then
		data.forms["nom_pl"] = {args[1] .. "on", args[1] .. "un", args[1] .. "an"}
		data.forms["acc_pl"] = {args[1] .. "on", args[1] .. "un", args[1] .. "an"}
		data.forms["gen_pl"] = {args[1] .. "ono"}
		data.forms["dat_pl"] = {args[1] .. "un", args[1] .. "on"}
	end

	table.insert(data.categories, "古撒克遜語n-詞幹名詞")
end
})

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

	data.forms["nom_sg"] = {args[1] .. "a"}
	data.forms["acc_sg"] = {args[1] .. "a"}
end
})

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

	data.forms["nom_sg"] = {args[1] .. "a"}
	data.forms["acc_sg"] = {args[1] .. "un", args[1] .. "an", args[1] .. "on" }
	data.forms["gen_sg"] = {args[1] .. "un", args[1] .. "an", args[1] .. "on" }
	data.forms["dat_sg"] = {args[1] .. "un", args[1] .. "an", args[1] .. "on" }
	data.forms["nom_pl"] = {args[1] .. "un", args[1] .. "an", args[1] .. "on" }
	data.forms["acc_pl"] = {args[1] .. "un", args[1] .. "an", args[1] .. "on" }
	data.forms["dat_pl"] = {args[1] .. "un", args[1] .. "an", args[1] .. "on" }
end
})

decl_data["nd"] = {
	params = {
		[1] = {},
		},
}
setmetatable(decl_data["nd"], {__call = function(self, args, data)
	data.decl_type = "nd-詞幹"
	
	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] .. "e"}

	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"}

	table.insert(data.categories, "古撒克遜語nd-詞幹名詞")
end
})

decl_data["o-f"] = {
	params = {
		[1] = {},
		[2] = {},
		["nopl"] = {},
		},
}
setmetatable(decl_data["o-f"], {__call = function(self, args, data)
	data.decl_type = "陰性ō-詞幹"
	
	data.forms["nom_sg"] = {args[2] or (args[1] .. "a")}
	data.forms["acc_sg"] = {args[2] or (args[1] .. "a")}
	data.forms["gen_sg"] = {args[1] .. "a", args[1] .. "u", args[1] .. "o"}
	data.forms["dat_sg"] = {args[1] .. "u", args[1] .. "o", args[1] .. "a"}

	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] .. "ono"}
		data.forms["dat_pl"] = {args[1] .. "on", args[1] .. "um", args[1] .. "un"}
	end
	
	table.insert(data.categories, "古撒克遜語ō-詞幹名詞")
end
})

decl_data["r-n"] = {
	params = {
		[1] = {},
		},
}
setmetatable(decl_data["r-n"], {__call = function(self, args, data)
	data.decl_type = "r-詞幹"
	
	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["nom_pl"] = {args.mutstem or args[1]}
	data.forms["acc_pl"] = {args.mutstem or args[1]}
	data.forms["gen_pl"] = {(args.mutstem2 or args[1]) .. "ō"}
	data.forms["dat_pl"] = {(args.mutstem2 or args[1]) .. "um"}

	table.insert(data.categories, "古撒克遜語r-詞幹名詞")
end
})

decl_data["u-f"] = {
	params = {
		[1] = {},
		[2] = {},
		},
}
setmetatable(decl_data["u-f"], {__call = function(self, args, data)
	data.decl_type = "陰性u-詞幹"
	
	data.forms["nom_sg"] = {args[1]}
	data.forms["acc_sg"] = {args[1]}
	data.forms["gen_sg"] = {args[2] .. "i"}
	data.forms["dat_sg"] = {args[2] .. "i"}

	data.forms["nom_pl"] = {args[2] .. "i"}
	data.forms["acc_pl"] = {args[2] .. "i"}
	data.forms["gen_pl"] = {args[1] .. "o"}
	data.forms["dat_pl"] = {args[1] .. "um"}

	table.insert(data.categories, "古撒克遜語u-詞幹名詞")
end
})

decl_data["u-m"] = {
	params = {
		[1] = {},
		},
}
setmetatable(decl_data["u-m"], {__call = function(self, args, data)
	data.decl_type = "陽性u-詞幹"
	
	data.forms["nom_sg"] = {args[1] .. "u"}
	data.forms["acc_sg"] = {args[1] .. "u"}
	data.forms["gen_sg"] = {args[1] .. "ies", args[1] .. "eas"}
	data.forms["dat_sg"] = {args[1] .. "o", args[1] .. "ie", args[1] .. "i", args[1] .. "e"}

	data.forms["nom_pl"] = {args[1] .. "i"}
	data.forms["acc_pl"] = {args[1] .. "i"}
	data.forms["gen_pl"] = {args[1] .. "io", args[1] .. "o" }
	data.forms["dat_pl"] = {args[1] .. "un", args[1] .. "iun"}

	table.insert(data.categories, "古撒克遜語u-詞幹名詞")
end
})

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

	data.forms["nom_sg"] = {args[1] .. "u", args[1] .. "o"}
	data.forms["acc_sg"] = {args[1] .. "u", args[1] .. "o"}
	data.forms["gen_sg"] = {args[1] .. "es", args[1] .. "as"}
	data.forms["dat_sg"] = {args[1] .. "e"}
	data.forms["ins_sg"] = {args[1] .. "o"}

	table.insert(data.categories, "古撒克遜語u-詞幹名詞")
end
})

decl_data["wa-m"] = {
	params = {
		[1] = {},
		[2] = {},
		},
}
setmetatable(decl_data["wa-m"], {__call = function(self, args, data)
	data.decl_type = "陽性wa-詞幹"
	
	data.forms["nom_sg"] = {args[1]}
	data.forms["acc_sg"] = {args[1]}
	data.forms["gen_sg"] = {args[2] .. "wes"}
	data.forms["dat_sg"] = {args[2] .. "we"}

	data.forms["nom_pl"] = {args[2] .. "wos"}
	data.forms["acc_pl"] = {args[2] .. "wos"}
	data.forms["gen_pl"] = {args[2] .. "wō"}
	data.forms["dat_pl"] = {args[2] .. "wum"}

	table.insert(data.categories, "古撒克遜語wa-詞幹名詞")
end
})

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

	data.forms["nom_pl"] = {args[1]}
	data.forms["acc_pl"] = {args[1]}
end
})

decl_data["z-n"] = {
	params = {
		[1] = {},
		[2] = {},
		},
}
setmetatable(decl_data["z-n"], {__call = function(self, args, data)
	local a2 = args[2] or args[1]
	data.decl_type = "z-詞幹"
	
	data.forms["nom_sg"] = {args[1]}
	data.forms["acc_sg"] = {args[1]}
	data.forms["gen_sg"] = {a2 .. "es"}
	data.forms["dat_sg"] = {a2 .. "e"}

	data.forms["nom_pl"] = {a2 .. "iru"}
	data.forms["acc_pl"] = {a2 .. "iru"}
	data.forms["gen_pl"] = {a2 .. "irō"}
	data.forms["dat_pl"] = {a2 .. "irum"}

	table.insert(data.categories, "古撒克遜語z-詞幹名詞")
end
})

-- The main entry point for automatic declension.
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("Module: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

-- The main entry point for manual declension.
function export.show_manual(frame)
	local parent_args = frame:getParent().args
	local params = {
		[1] = {},
		[2] = {},
		[3] = {},
		[4] = {},
		[5] = {},
		[6] = {},
		[7] = {},
		[8] = {},
		[9] = {},
		["head"] = {}, -- currently ignored
	}

	local data = {forms = {}, categories = {}}
	local args = require("Module:parameters").process(parent_args, params)
	
	local function split(arg)
		return arg and mw.text.split(arg, "%s*,%s*") or nil
	end
	data.forms.nom_sg = split(args[1])
	data.forms.nom_pl = split(args[2])
	data.forms.acc_sg = split(args[3])
	data.forms.acc_pl = split(args[4])
	data.forms.gen_sg = split(args[5])
	data.forms.gen_pl = split(args[6])
	data.forms.dat_sg = split(args[7])
	data.forms.dat_pl = split(args[8])
	data.forms.ins_sg = split(args[9])
	data.decl_type = "irregular"

	-- 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 mw.title.getCurrentTitle().nsText == "Reconstruction" and subform ~= "—" then
				subform = "*" .. subform
			end
			table.insert(ret, m_links.full_link({lang = lang, term = 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">{{{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