<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://academia.la/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Ala-headword</id>
	<title>Module:la-headword - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://academia.la/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Ala-headword"/>
	<link rel="alternate" type="text/html" href="https://academia.la/w/index.php?title=Module:la-headword&amp;action=history"/>
	<updated>2026-04-17T02:18:25Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://academia.la/w/index.php?title=Module:la-headword&amp;diff=1532&amp;oldid=prev</id>
		<title>Jācōbus: Created page with &quot;local export = {} local pos_functions = {}  local m_table = require(&quot;Module:table&quot;)  local legal_gender = { 	[&quot;m&quot;] = true, 	[&quot;f&quot;] = true, 	[&quot;n&quot;] = true, 	[&quot;?&quot;] = true, 	[&quot;?!&quot;] = true, }  local declension_to_english = { 	[&quot;1&quot;] = &quot;first&quot;, 	[&quot;2&quot;] = &quot;second&quot;, 	[&quot;3&quot;] = &quot;third&quot;, 	[&quot;4&quot;] = &quot;fourth&quot;, 	[&quot;5&quot;] = &quot;fifth&quot;, }  local gender_names = { 	[&quot;m&quot;] = &quot;masculine&quot;, 	[&quot;f&quot;] = &quot;feminine&quot;, 	[&quot;n&quot;] = &quot;neuter&quot;, 	[&quot;?&quot;] = &quot;unknown gender&quot;, 	[&quot;?!&quot;] = &quot;unattested gender&quot;, }  local lang = re...&quot;</title>
		<link rel="alternate" type="text/html" href="https://academia.la/w/index.php?title=Module:la-headword&amp;diff=1532&amp;oldid=prev"/>
		<updated>2023-02-11T18:48:19Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local export = {} local pos_functions = {}  local m_table = require(&amp;quot;Module:table&amp;quot;)  local legal_gender = { 	[&amp;quot;m&amp;quot;] = true, 	[&amp;quot;f&amp;quot;] = true, 	[&amp;quot;n&amp;quot;] = true, 	[&amp;quot;?&amp;quot;] = true, 	[&amp;quot;?!&amp;quot;] = true, }  local declension_to_english = { 	[&amp;quot;1&amp;quot;] = &amp;quot;first&amp;quot;, 	[&amp;quot;2&amp;quot;] = &amp;quot;second&amp;quot;, 	[&amp;quot;3&amp;quot;] = &amp;quot;third&amp;quot;, 	[&amp;quot;4&amp;quot;] = &amp;quot;fourth&amp;quot;, 	[&amp;quot;5&amp;quot;] = &amp;quot;fifth&amp;quot;, }  local gender_names = { 	[&amp;quot;m&amp;quot;] = &amp;quot;masculine&amp;quot;, 	[&amp;quot;f&amp;quot;] = &amp;quot;feminine&amp;quot;, 	[&amp;quot;n&amp;quot;] = &amp;quot;neuter&amp;quot;, 	[&amp;quot;?&amp;quot;] = &amp;quot;unknown gender&amp;quot;, 	[&amp;quot;?!&amp;quot;] = &amp;quot;unattested gender&amp;quot;, }  local lang = re...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local export = {}&lt;br /&gt;
local pos_functions = {}&lt;br /&gt;
&lt;br /&gt;
local m_table = require(&amp;quot;Module:table&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local legal_gender = {&lt;br /&gt;
	[&amp;quot;m&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;f&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;n&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;?&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;?!&amp;quot;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local declension_to_english = {&lt;br /&gt;
	[&amp;quot;1&amp;quot;] = &amp;quot;first&amp;quot;,&lt;br /&gt;
	[&amp;quot;2&amp;quot;] = &amp;quot;second&amp;quot;,&lt;br /&gt;
	[&amp;quot;3&amp;quot;] = &amp;quot;third&amp;quot;,&lt;br /&gt;
	[&amp;quot;4&amp;quot;] = &amp;quot;fourth&amp;quot;,&lt;br /&gt;
	[&amp;quot;5&amp;quot;] = &amp;quot;fifth&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local gender_names = {&lt;br /&gt;
	[&amp;quot;m&amp;quot;] = &amp;quot;masculine&amp;quot;,&lt;br /&gt;
	[&amp;quot;f&amp;quot;] = &amp;quot;feminine&amp;quot;,&lt;br /&gt;
	[&amp;quot;n&amp;quot;] = &amp;quot;neuter&amp;quot;,&lt;br /&gt;
	[&amp;quot;?&amp;quot;] = &amp;quot;unknown gender&amp;quot;,&lt;br /&gt;
	[&amp;quot;?!&amp;quot;] = &amp;quot;unattested gender&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local lang = require(&amp;quot;Module:languages&amp;quot;).getByCode(&amp;quot;la&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local u = mw.ustring.char&lt;br /&gt;
local rfind = mw.ustring.find&lt;br /&gt;
local rmatch = mw.ustring.match&lt;br /&gt;
local rsplit = mw.text.split&lt;br /&gt;
local rsubn = mw.ustring.gsub&lt;br /&gt;
local ulower = mw.ustring.lower&lt;br /&gt;
&lt;br /&gt;
local MACRON = u(0x0304)&lt;br /&gt;
local BREVE = u(0x0306)&lt;br /&gt;
local DIAER = u(0x0308)&lt;br /&gt;
local DOUBLE_INV_BREVE = u(0x0361)&lt;br /&gt;
local accents = MACRON .. BREVE .. DIAER .. DOUBLE_INV_BREVE&lt;br /&gt;
&lt;br /&gt;
-- version of rsubn() that discards all but the first return value&lt;br /&gt;
local function rsub(term, foo, bar)&lt;br /&gt;
	local retval = rsubn(term, foo, bar)&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function track(page)&lt;br /&gt;
	require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;la-headword/&amp;quot; .. page)&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function format(array, concatenater)&lt;br /&gt;
	if #array == 0 then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		local concatenated = table.concat(array, concatenater)&lt;br /&gt;
		if concatenated == &amp;quot;&amp;quot; then&lt;br /&gt;
			return &amp;quot;&amp;quot;&lt;br /&gt;
		elseif rfind(concatenated, &amp;quot;'$&amp;quot;) then&lt;br /&gt;
			concatenated = concatenated .. &amp;quot; &amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		return &amp;quot;; ''&amp;quot; .. concatenated .. &amp;quot;''&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function glossary_link(anchor, text)&lt;br /&gt;
	text = text or anchor&lt;br /&gt;
	return &amp;quot;[[Appendix:Glossary#&amp;quot; .. anchor .. &amp;quot;|&amp;quot; .. text .. &amp;quot;]]&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- The main entry point.&lt;br /&gt;
-- This is the only function that can be invoked from a template.&lt;br /&gt;
function export.show(frame)&lt;br /&gt;
	local NAMESPACE = mw.title.getCurrentTitle().nsText&lt;br /&gt;
	local PAGENAME = mw.title.getCurrentTitle().text&lt;br /&gt;
&lt;br /&gt;
	local iparams = {&lt;br /&gt;
		[1] = {required = true},&lt;br /&gt;
		[&amp;quot;def&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;suff_type&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
	local iargs = require(&amp;quot;Module:parameters&amp;quot;).process(frame.args, iparams)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local poscat = iargs[1]&lt;br /&gt;
	local def = iargs.def&lt;br /&gt;
	local suff_type = iargs.suff_type&lt;br /&gt;
	local postype = nil&lt;br /&gt;
	if suff_type then&lt;br /&gt;
		postype = poscat .. '-' .. suff_type&lt;br /&gt;
	else&lt;br /&gt;
		postype = poscat&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local data = {lang = lang, categories = {}, heads = {}, genders = {}, inflections = {}}&lt;br /&gt;
	local infl_classes = {}&lt;br /&gt;
	local appendix = {}&lt;br /&gt;
	local postscript = {}&lt;br /&gt;
&lt;br /&gt;
	if poscat == &amp;quot;suffixes&amp;quot; then&lt;br /&gt;
		table.insert(data.categories, &amp;quot;Latin &amp;quot; .. suff_type .. &amp;quot;-forming suffixes&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if pos_functions[postype] then&lt;br /&gt;
		local new_poscat = pos_functions[postype](def, args, data, infl_classes, appendix, postscript)&lt;br /&gt;
		if new_poscat then&lt;br /&gt;
			poscat = new_poscat&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not rfind(poscat, &amp;quot; forms?$&amp;quot;) then&lt;br /&gt;
		for _, head in ipairs(data.heads) do&lt;br /&gt;
			-- Don't trigger on prefixes or suffixes.&lt;br /&gt;
			if (rfind(head, &amp;quot; &amp;quot;) or rfind(head, &amp;quot;.%-.&amp;quot;)) then&lt;br /&gt;
				table.insert(data.categories, &amp;quot;Latin multiword terms&amp;quot;)&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (NAMESPACE == &amp;quot;Reconstruction&amp;quot;) then&lt;br /&gt;
		data.pos_category = &amp;quot;reconstructed &amp;quot; .. poscat&lt;br /&gt;
		data.nolink = true&lt;br /&gt;
	else&lt;br /&gt;
		data.pos_category = poscat&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	postscript = table.concat(postscript, &amp;quot;, &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	return&lt;br /&gt;
		require(&amp;quot;Module:headword&amp;quot;).full_headword(data)&lt;br /&gt;
		.. format(infl_classes, &amp;quot;/&amp;quot;)&lt;br /&gt;
		.. format(appendix, &amp;quot;, &amp;quot;)&lt;br /&gt;
		.. (postscript ~= &amp;quot;&amp;quot; and &amp;quot; (&amp;quot; .. postscript .. &amp;quot;)&amp;quot; or &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function process_num_type(numtype, categories)&lt;br /&gt;
	if numtype == &amp;quot;card&amp;quot; then&lt;br /&gt;
		table.insert(categories, &amp;quot;Latin cardinal numbers&amp;quot;)&lt;br /&gt;
	elseif numtype == &amp;quot;ord&amp;quot; then&lt;br /&gt;
		table.insert(categories, &amp;quot;Latin ordinal numbers&amp;quot;)&lt;br /&gt;
	elseif numtype == &amp;quot;dist&amp;quot; then&lt;br /&gt;
		-- FIXME, should be named 'Latin distributive numbers'&lt;br /&gt;
		table.insert(categories, &amp;quot;la:Distributive numbers&amp;quot;)&lt;br /&gt;
	elseif numtype == &amp;quot;mul&amp;quot; then&lt;br /&gt;
		-- FIXME, should be named 'Latin multiplicative numbers'&lt;br /&gt;
		table.insert(categories, &amp;quot;la:Multiplicative numbers&amp;quot;)&lt;br /&gt;
	elseif numtype == &amp;quot;coll&amp;quot; then&lt;br /&gt;
		-- FIXME, should be named 'Latin collective numbers'&lt;br /&gt;
		table.insert(categories, &amp;quot;la:Collective numbers&amp;quot;)&lt;br /&gt;
	elseif numtype then&lt;br /&gt;
		error(&amp;quot;Unrecognized numeral type '&amp;quot; .. numtype .. &amp;quot;'&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function nouns(pos, def, args, data, infl_classes, appendix)&lt;br /&gt;
	local NAMESPACE = mw.title.getCurrentTitle().nsText&lt;br /&gt;
	local is_num = pos == &amp;quot;numerals&amp;quot;&lt;br /&gt;
	local is_pn = false&lt;br /&gt;
	if pos == &amp;quot;proper nouns&amp;quot; then&lt;br /&gt;
		is_pn = true&lt;br /&gt;
		pos = &amp;quot;nouns&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local decldata = require(&amp;quot;Module:la-nominal&amp;quot;).do_generate_noun_forms(&lt;br /&gt;
	  args, pos, true, def, is_num)&lt;br /&gt;
	local lemma = decldata.overriding_lemma&lt;br /&gt;
	local lemma_num = decldata.num == &amp;quot;pl&amp;quot; and &amp;quot;pl&amp;quot; or &amp;quot;sg&amp;quot;&lt;br /&gt;
	if not lemma or #lemma == 0 then&lt;br /&gt;
		lemma = decldata.forms[&amp;quot;linked_nom_&amp;quot; .. lemma_num]&lt;br /&gt;
		if decldata.unattested[&amp;quot;nom_&amp;quot; .. lemma_num] then&lt;br /&gt;
			lemma[1] = '*' .. lemma[1]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	data.heads = lemma&lt;br /&gt;
	data.id = decldata.id&lt;br /&gt;
	&lt;br /&gt;
	local genders = decldata.overriding_genders&lt;br /&gt;
	if #genders == 0 then&lt;br /&gt;
		if decldata.gender then&lt;br /&gt;
			genders = {ulower(decldata.gender)}&lt;br /&gt;
		elseif not is_num then&lt;br /&gt;
			error(&amp;quot;No gender explicitly specified in headword template using g=, and can't infer gender from lemma spec&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if is_num then&lt;br /&gt;
		process_num_type(decldata.num_type, data.categories)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if decldata.indecl then&lt;br /&gt;
		table.insert(data.inflections, {label = glossary_link(&amp;quot;indeclinable&amp;quot;)})&lt;br /&gt;
		table.insert(data.categories, &amp;quot;Latin indeclinable &amp;quot; .. decldata.pos)&lt;br /&gt;
&lt;br /&gt;
		for _, g in ipairs(genders) do&lt;br /&gt;
			local gender, number = rmatch(g, &amp;quot;^(.)%-([sp])$&amp;quot;)&lt;br /&gt;
			if not gender then&lt;br /&gt;
				gender = g&lt;br /&gt;
			end&lt;br /&gt;
			if not legal_gender[gender] then&lt;br /&gt;
				error(&amp;quot;Gender “&amp;quot; .. gender .. &amp;quot;” is not a valid Latin gender.&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(data.genders, g)&lt;br /&gt;
			local gender_name = gender_names[gender]&lt;br /&gt;
			table.insert(data.categories, &amp;quot;Latin &amp;quot; .. gender_name .. &amp;quot; &amp;quot; .. decldata.pos)&lt;br /&gt;
			table.insert(data.categories, &amp;quot;Latin &amp;quot; .. gender_name ..  &amp;quot; indeclinable &amp;quot; .. decldata.pos)&lt;br /&gt;
			if number == &amp;quot;p&amp;quot; and NAMESPACE == '' then&lt;br /&gt;
				table.insert(data.categories, &amp;quot;Latin pluralia tantum&amp;quot;)&lt;br /&gt;
			elseif number == &amp;quot;s&amp;quot; and NAMESPACE == '' then&lt;br /&gt;
				table.insert(data.categories, &amp;quot;Latin singularia tantum&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local is_irreg = false&lt;br /&gt;
		local is_indecl = false&lt;br /&gt;
		local is_decl = false&lt;br /&gt;
		local has_multiple_decls = false&lt;br /&gt;
		local has_multiple_variants = false&lt;br /&gt;
		-- flatten declension specs&lt;br /&gt;
		local decls = {}&lt;br /&gt;
&lt;br /&gt;
		for _, g in ipairs(genders) do&lt;br /&gt;
			if not legal_gender[g] then&lt;br /&gt;
				error(&amp;quot;Gender “&amp;quot; .. g .. &amp;quot;” is not a valid Latin gender.&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			local gender_name = gender_names[g]&lt;br /&gt;
			if decldata.num == &amp;quot;pl&amp;quot; then&lt;br /&gt;
				g = g .. &amp;quot;-p&amp;quot;&lt;br /&gt;
			elseif decldata.num == &amp;quot;sg&amp;quot; then&lt;br /&gt;
				g = g .. &amp;quot;-s&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(data.genders, g)&lt;br /&gt;
			table.insert(data.categories, &amp;quot;Latin &amp;quot; .. gender_name .. &amp;quot; &amp;quot; .. decldata.pos)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if decldata.num == &amp;quot;pl&amp;quot; and NAMESPACE == '' then&lt;br /&gt;
			table.insert(data.categories, &amp;quot;Latin pluralia tantum&amp;quot;)&lt;br /&gt;
		elseif decldata.num == &amp;quot;sg&amp;quot; and NAMESPACE == '' then&lt;br /&gt;
			table.insert(data.categories, &amp;quot;Latin singularia tantum&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local function process_decl(decl_list, decl)&lt;br /&gt;
			-- skip adjectival declensions&lt;br /&gt;
			if not rfind(decl, &amp;quot;%+$&amp;quot;) then&lt;br /&gt;
				local irreg_decl_spec = rmatch(decl, &amp;quot;^irreg/(.*)$&amp;quot;)&lt;br /&gt;
				if irreg_decl_spec then&lt;br /&gt;
					is_irreg = true&lt;br /&gt;
					local irreg_decls = rsplit(irreg_decl_spec, &amp;quot;,&amp;quot;)&lt;br /&gt;
					if #irreg_decls &amp;gt; 1 then&lt;br /&gt;
						has_multiple_decls = true&lt;br /&gt;
					end&lt;br /&gt;
					for _, d in ipairs(irreg_decls) do&lt;br /&gt;
						if d == &amp;quot;indecl&amp;quot; or decl == &amp;quot;0&amp;quot; then&lt;br /&gt;
							is_indecl = true&lt;br /&gt;
						else&lt;br /&gt;
							is_decl = true&lt;br /&gt;
						end&lt;br /&gt;
						m_table.insertIfNot(decl_list, d)&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					if decl == &amp;quot;indecl&amp;quot; or decl == &amp;quot;0&amp;quot; then&lt;br /&gt;
						is_indecl = true&lt;br /&gt;
					else&lt;br /&gt;
						is_decl = true&lt;br /&gt;
					end&lt;br /&gt;
					m_table.insertIfNot(decl_list, decl)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		for _, props in ipairs(decldata.propses) do&lt;br /&gt;
			if props.headword_decl then&lt;br /&gt;
				process_decl(decls, props.headword_decl)&lt;br /&gt;
			else&lt;br /&gt;
				local alternant_decls = {}&lt;br /&gt;
				for _, alternant in ipairs(props) do&lt;br /&gt;
					for _, single_props in ipairs(alternant) do&lt;br /&gt;
						process_decl(alternant_decls, single_props.headword_decl)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if #alternant_decls &amp;gt; 1 then&lt;br /&gt;
					has_multiple_decls = true&lt;br /&gt;
				elseif #decls &amp;gt; 1 then&lt;br /&gt;
					has_multiple_variants = true&lt;br /&gt;
				end&lt;br /&gt;
				for _, d in ipairs(alternant_decls) do&lt;br /&gt;
					m_table.insertIfNot(decls, d)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if is_indecl and is_decl then&lt;br /&gt;
			has_multiple_decls = true&lt;br /&gt;
		end&lt;br /&gt;
		if has_multiple_decls then&lt;br /&gt;
			table.insert(data.categories, &amp;quot;Latin &amp;quot; .. decldata.pos .. &amp;quot; with multiple declensions&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		if has_multiple_variants then&lt;br /&gt;
			table.insert(data.categories, &amp;quot;Latin &amp;quot; .. decldata.pos .. &amp;quot; with multiple variants of a single declension&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		if is_irreg then&lt;br /&gt;
			table.insert(data.inflections, {label = glossary_link(&amp;quot;irregular&amp;quot;)})&lt;br /&gt;
			table.insert(data.categories, &amp;quot;Latin irregular &amp;quot; .. decldata.pos)&lt;br /&gt;
			for _, g in ipairs(genders) do&lt;br /&gt;
				table.insert(data.categories, &amp;quot;Latin &amp;quot; .. gender_names[g] ..  &amp;quot; irregular &amp;quot; .. decldata.pos)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if is_indecl then&lt;br /&gt;
			if is_decl then&lt;br /&gt;
				table.insert(appendix, glossary_link(&amp;quot;indeclinable&amp;quot;))&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(data.inflections, {label = glossary_link(&amp;quot;indeclinable&amp;quot;)})&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(data.categories, &amp;quot;Latin indeclinable &amp;quot; .. decldata.pos)&lt;br /&gt;
			for _, g in ipairs(genders) do&lt;br /&gt;
				table.insert(data.categories, &amp;quot;Latin &amp;quot; .. gender_names[g] ..  &amp;quot; indeclinable &amp;quot; .. decldata.pos)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if #decls &amp;gt; 1 then&lt;br /&gt;
			table.insert(data.inflections, {label = 'variously declined'})&lt;br /&gt;
			--This causes multipart nouns composed of two nouns of different declensions&lt;br /&gt;
			--to go into the category. The above code only triggers if a given term has&lt;br /&gt;
			--multiple declensions.&lt;br /&gt;
			--table.insert(data.categories, &amp;quot;Latin &amp;quot; .. decldata.pos .. &amp;quot; with multiple declensions&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		for _, decl in ipairs(decls) do&lt;br /&gt;
			if decl ~= &amp;quot;irreg&amp;quot; and decl ~= &amp;quot;indecl&amp;quot; and decl ~= &amp;quot;0&amp;quot; then&lt;br /&gt;
				local decl_class = declension_to_english[decl]&lt;br /&gt;
				if not decl_class then&lt;br /&gt;
					error(&amp;quot;Something wrong with declension '&amp;quot; .. decl .. &amp;quot;', don't recognize it&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				table.insert(appendix, &amp;quot;[[Appendix:Latin &amp;quot; .. decl_class .. &amp;quot; declension|&amp;quot; .. decl_class .. &amp;quot; declension]]&amp;quot;)&lt;br /&gt;
				table.insert(data.categories, &amp;quot;Latin &amp;quot; .. decl_class .. &amp;quot; declension &amp;quot; .. decldata.pos)&lt;br /&gt;
&lt;br /&gt;
				for _, g in ipairs(genders) do&lt;br /&gt;
					table.insert(data.categories, &amp;quot;Latin &amp;quot; .. gender_names[g] ..  &amp;quot; &amp;quot; .. decldata.pos .. &amp;quot; in the &amp;quot; .. decl_class .. &amp;quot; declension&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local gen = decldata.forms[&amp;quot;gen_&amp;quot; .. lemma_num]&lt;br /&gt;
		if (decldata.unattested[&amp;quot;gen_&amp;quot; .. lemma_num]) then&lt;br /&gt;
			gen[1] = '*' .. gen[1]&lt;br /&gt;
			data.nolink = true&lt;br /&gt;
		end&lt;br /&gt;
		if gen and gen ~= &amp;quot;&amp;quot; and gen ~= &amp;quot;—&amp;quot; and #gen &amp;gt; 0 then&lt;br /&gt;
			if is_decl then&lt;br /&gt;
				-- Skip displaying the genitive for nouns that are only&lt;br /&gt;
				-- indeclinable. But we do display it for nouns like Abrahām&lt;br /&gt;
				-- and Ādām that can be either indeclinable or declined.&lt;br /&gt;
				gen.label = &amp;quot;genitive&amp;quot;&lt;br /&gt;
				table.insert(data.inflections, gen)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(data.inflections, {label = &amp;quot;no genitive&amp;quot;})&lt;br /&gt;
			table.insert(data.categories, &amp;quot;Latin &amp;quot; .. decldata.pos .. &amp;quot; without a genitive singular&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #decldata.m &amp;gt; 0 then&lt;br /&gt;
		decldata.m.label = &amp;quot;masculine&amp;quot;&lt;br /&gt;
		table.insert(data.inflections, decldata.m)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #decldata.f &amp;gt; 0 then&lt;br /&gt;
		decldata.f.label = &amp;quot;feminine&amp;quot;&lt;br /&gt;
		table.insert(data.inflections, decldata.f)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(decldata.categories) do&lt;br /&gt;
		m_table.insertIfNot(data.categories, cat)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(decldata.cat) do&lt;br /&gt;
		m_table.insertIfNot(data.categories, &amp;quot;Latin &amp;quot; .. cat)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return is_pn and decldata.pos == &amp;quot;nouns&amp;quot; and &amp;quot;proper nouns&amp;quot; or decldata.pos&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;nouns&amp;quot;] = function(def, args, data, infl_classes, appendix)&lt;br /&gt;
	return nouns(&amp;quot;nouns&amp;quot;, def, args, data, infl_classes, appendix)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;proper nouns&amp;quot;] = function(def, args, data, infl_classes, appendix)&lt;br /&gt;
	return nouns(&amp;quot;proper nouns&amp;quot;, def, args, data, infl_classes, appendix)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;suffixes-noun&amp;quot;] = function(def, args, data, infl_classes, appendix)&lt;br /&gt;
	return nouns(&amp;quot;suffixes&amp;quot;, def, args, data, infl_classes, appendix)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;numerals-noun&amp;quot;] = function(def, args, data, infl_classes, appendix)&lt;br /&gt;
	return nouns(&amp;quot;numerals&amp;quot;, def, args, data, infl_classes, appendix)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
export.allowed_subtypes = {&lt;br /&gt;
	[&amp;quot;impers&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;3only&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;depon&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;semidepon&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;optsemidepon&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;nopass&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;pass3only&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;passimpers&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;perfaspres&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;noperf&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;nopasvperf&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;nosup&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;supfutractvonly&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;noimp&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;nofut&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;p3inf&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;poetsyncperf&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;optsyncperf&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;alwayssyncperf&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;m&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;f&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;n&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;mp&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;fp&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;np&amp;quot;] = true,&lt;br /&gt;
	-- can be specified manually in the headword to display &amp;quot;highly defective&amp;quot;&lt;br /&gt;
	-- in the title (e.g. aveō)&lt;br /&gt;
	[&amp;quot;highlydef&amp;quot;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;verbs&amp;quot;] = function(def, args, data, infl_classes, appendix)&lt;br /&gt;
	local m_la_verb = require(&amp;quot;Module:la-verb&amp;quot;)&lt;br /&gt;
	local NAMESPACE = mw.title.getCurrentTitle().nsText&lt;br /&gt;
	local def1, def2&lt;br /&gt;
	if def then&lt;br /&gt;
		def1, def2 = rmatch(def, &amp;quot;^(.*):(.*)$&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	local conjdata, typeinfo = m_la_verb.make_data(args, true, def1, def2)&lt;br /&gt;
	local lemma_forms = conjdata.overriding_lemma&lt;br /&gt;
	if not lemma_forms or #lemma_forms == 0 then&lt;br /&gt;
		lemma_forms = m_la_verb.get_lemma_forms(conjdata, true)&lt;br /&gt;
	end&lt;br /&gt;
	local first_lemma = &amp;quot;&amp;quot;&lt;br /&gt;
	if #lemma_forms &amp;gt; 0 then&lt;br /&gt;
		first_lemma = require(&amp;quot;Module:links&amp;quot;).remove_links(lemma_forms[1])&lt;br /&gt;
	end&lt;br /&gt;
	data.heads = lemma_forms&lt;br /&gt;
	data.id = conjdata.id&lt;br /&gt;
	local conj = typeinfo.conj_type&lt;br /&gt;
	local subconj = typeinfo.conj_subtype&lt;br /&gt;
	local subtypes = typeinfo.subtypes&lt;br /&gt;
	local perf_only = false&lt;br /&gt;
&lt;br /&gt;
	local function insert_inflection(infl, label)&lt;br /&gt;
		for _, form in ipairs(infl) do&lt;br /&gt;
			if rsub(form, &amp;quot;^[*%[%]|%-a-zA-ZĀāĒēĪīŌōŪūȲȳÄäËëÏïÖöÜüŸÿĂăĔĕĬĭŎŏŬŭ &amp;quot; .. accents .. &amp;quot;]+$&amp;quot;, &amp;quot;&amp;quot;) ~= &amp;quot;&amp;quot; then&lt;br /&gt;
				table.insert(data.categories, &amp;quot;la-verb invalid parameters&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		infl.label = label&lt;br /&gt;
		table.insert(data.inflections, infl)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local inf = m_la_verb.get_valid_forms(conjdata.forms[&amp;quot;pres_actv_inf&amp;quot;])&lt;br /&gt;
	if #inf &amp;gt; 0 then&lt;br /&gt;
		insert_inflection(inf, &amp;quot;present infinitive&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		inf = m_la_verb.get_valid_forms(conjdata.forms[&amp;quot;perf_actv_inf&amp;quot;])&lt;br /&gt;
		if #inf &amp;gt; 0 then&lt;br /&gt;
			perf_only = true&lt;br /&gt;
			insert_inflection(inf, &amp;quot;perfect infinitive&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local depon = typeinfo.subtypes.depon or typeinfo.subtypes.semidepon&lt;br /&gt;
	if not perf_only then&lt;br /&gt;
		local perf&lt;br /&gt;
		if depon then&lt;br /&gt;
			local sup = m_la_verb.get_valid_forms(conjdata.forms[&amp;quot;sup_acc&amp;quot;])&lt;br /&gt;
			perf = {}&lt;br /&gt;
			for _, form in ipairs(sup) do&lt;br /&gt;
				if typeinfo.subtypes.impers then&lt;br /&gt;
					form = rsub(form, &amp;quot;^(.*)m$&amp;quot;, &amp;quot;[[%1s|%1m]] est&amp;quot;)&lt;br /&gt;
				elseif typeinfo.subtypes[&amp;quot;3only&amp;quot;] then&lt;br /&gt;
					form = rsub(form, &amp;quot;^(.*)m$&amp;quot;, &amp;quot;[[%1s]] est&amp;quot;)&lt;br /&gt;
				else&lt;br /&gt;
					form = rsub(form, &amp;quot;^(.*)m$&amp;quot;, &amp;quot;[[%1s]] sum&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				table.insert(perf, form)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			perf = m_la_verb.get_valid_forms(conjdata.forms[&amp;quot;1s_perf_actv_indc&amp;quot;])&lt;br /&gt;
			if #perf == 0 then&lt;br /&gt;
				perf = m_la_verb.get_valid_forms(conjdata.forms[&amp;quot;3s_perf_actv_indc&amp;quot;])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if #perf &amp;gt; 0 then&lt;br /&gt;
			insert_inflection(perf, &amp;quot;perfect active&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not depon then&lt;br /&gt;
		local sup = m_la_verb.get_valid_forms(conjdata.forms[&amp;quot;sup_acc&amp;quot;])&lt;br /&gt;
		if #sup &amp;gt; 0 then&lt;br /&gt;
			insert_inflection(sup, &amp;quot;supine&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			local fap = m_la_verb.get_valid_forms(conjdata.forms[&amp;quot;futr_actv_ptc&amp;quot;])&lt;br /&gt;
			if #fap &amp;gt; 0 then&lt;br /&gt;
				insert_inflection(fap, &amp;quot;future participle&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if conj == &amp;quot;1st&amp;quot; or subconj == &amp;quot;1st&amp;quot; then&lt;br /&gt;
		table.insert(appendix, &amp;quot;[[Appendix:Latin first conjugation|first conjugation]]&amp;quot;)&lt;br /&gt;
	elseif conj == &amp;quot;2nd&amp;quot; or subconj == &amp;quot;2nd&amp;quot; then&lt;br /&gt;
		table.insert(appendix, &amp;quot;[[Appendix:Latin second conjugation|second conjugation]]&amp;quot;)&lt;br /&gt;
	elseif conj == &amp;quot;3rd&amp;quot; or subconj == &amp;quot;3rd&amp;quot; then&lt;br /&gt;
		table.insert(appendix, &amp;quot;[[Appendix:Latin third conjugation|third conjugation]]&amp;quot;)&lt;br /&gt;
	elseif conj == &amp;quot;3rd-io&amp;quot; or subconj == &amp;quot;3rd-io&amp;quot; then&lt;br /&gt;
		table.insert(appendix, &amp;quot;[[Appendix:Latin third conjugation|third conjugation]] iō-variant&amp;quot;)&lt;br /&gt;
	elseif conj == &amp;quot;4th&amp;quot; or subconj == &amp;quot;4th&amp;quot; then&lt;br /&gt;
		table.insert(appendix, &amp;quot;[[Appendix:Latin fourth conjugation|fourth conjugation]]&amp;quot;)&lt;br /&gt;
	elseif conj == &amp;quot;irreg&amp;quot; then --sum&lt;br /&gt;
		table.insert(appendix, &amp;quot;[[Appendix:Latin irregular verbs|irregular conjugation]]&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		if NAMESPACE == &amp;quot;Template&amp;quot; then&lt;br /&gt;
			table.insert(appendix, &amp;quot;? declension&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(data.categories, &amp;quot;Latin verbs without the conjugation in their headwords&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if conj == &amp;quot;irreg&amp;quot; and subconj == &amp;quot;irreg&amp;quot; or subtypes.irreg then&lt;br /&gt;
		--sum, volō, ferō etc.&lt;br /&gt;
		table.insert(appendix, &amp;quot;[[irregular#English|irregular]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if subtypes.highlydef then&lt;br /&gt;
		-- āiō, inquam&lt;br /&gt;
		table.insert(appendix, &amp;quot;highly [[defective#English|defective]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if subtypes.perfaspres then&lt;br /&gt;
		-- ōdī, meminī, commeminī&lt;br /&gt;
		table.insert(appendix, &amp;quot;[[perfect#English|perfect]] forms have [[present#English|present]] meaning&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if subtypes.impers then&lt;br /&gt;
		-- decet&lt;br /&gt;
		-- advesperāscit (also nopass)&lt;br /&gt;
		table.insert(appendix, &amp;quot;[[impersonal#English|impersonal]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if subtypes.nopass then&lt;br /&gt;
		--coacēscō&lt;br /&gt;
		table.insert(appendix, &amp;quot;no [[passive#English|passive]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if subtypes.depon then&lt;br /&gt;
		-- dēmōlior&lt;br /&gt;
		-- calvor (also noperf)&lt;br /&gt;
		table.insert(appendix, &amp;quot;[[deponent#English|deponent]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if subtypes.semidepon then&lt;br /&gt;
		-- fīdō, gaudeō&lt;br /&gt;
		table.insert(appendix, &amp;quot;[[semi-deponent#English|semi-deponent]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if subtypes.optsemidepon then&lt;br /&gt;
		-- audeō, placeō, soleō, pudeō&lt;br /&gt;
		table.insert(appendix, &amp;quot;optionally [[semi-deponent#English|semi-deponent]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if subtypes.nosup and subtypes.noperf then&lt;br /&gt;
		-- many verbs&lt;br /&gt;
		table.insert(appendix, &amp;quot;no [[perfect#English|perfect]] or [[supine#English|supine]] stem&amp;quot;)&lt;br /&gt;
	elseif subtypes.noperf then&lt;br /&gt;
		-- īnsolēscō etc.&lt;br /&gt;
		table.insert(appendix, &amp;quot;no [[perfect#English|perfect]] stem&amp;quot;)&lt;br /&gt;
	elseif subtypes.nosup then&lt;br /&gt;
		-- deeō etc.&lt;br /&gt;
		table.insert(appendix, &amp;quot;no [[supine#English|supine]] stem&amp;quot;)&lt;br /&gt;
	elseif subtypes.supfutractvonly then&lt;br /&gt;
		-- sum, dēpereō, etc.&lt;br /&gt;
		table.insert(appendix, &amp;quot;no [[supine#English|supine]] stem except in the [[future#English|future]] [[active#English|active]] [[participle#English|participle]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if typeinfo.subtypes.nopasvperf and not typeinfo.subtypes.nosup and&lt;br /&gt;
			not typeinfo.subtypes.supfutractvonly then&lt;br /&gt;
		table.insert(appendix, &amp;quot;no [[passive#English|passive]] [[perfect#English|perfect]] forms&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if subtypes.pass3only then&lt;br /&gt;
		--praefundō&lt;br /&gt;
		table.insert(appendix, &amp;quot;limited [[passive#English|passive]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if subtypes.passimpers then&lt;br /&gt;
		--abambulō&lt;br /&gt;
		table.insert(appendix, &amp;quot;[[impersonal#English|impersonal]] in the passive&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if rfind(first_lemma, &amp;quot;faciō$&amp;quot;) then&lt;br /&gt;
		--faciō&lt;br /&gt;
		table.insert(appendix, &amp;quot;irregular [[passive voice#English|passive voice]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if subtypes[&amp;quot;3only&amp;quot;] then&lt;br /&gt;
		--decet&lt;br /&gt;
		table.insert(appendix,&amp;quot;[[third person#English|third person]] only&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if subtypes.noimp then&lt;br /&gt;
		--volō&lt;br /&gt;
		table.insert(appendix, &amp;quot;no [[imperative#English|imperative]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if rfind(first_lemma, &amp;quot;d[īū]cō$&amp;quot;) then&lt;br /&gt;
		--dīcō&lt;br /&gt;
		table.insert(appendix, &amp;quot;irregular short [[imperative#English|imperative]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if subtypes.nofut then&lt;br /&gt;
		--soleō&lt;br /&gt;
		table.insert(appendix, &amp;quot;no [[future#English|future]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;suffixes-verb&amp;quot;] = pos_functions[&amp;quot;verbs&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
local function adjectives(pos, def, args, data, infl_classes, appendix)&lt;br /&gt;
	local is_num = pos == &amp;quot;numerals&amp;quot;&lt;br /&gt;
	local decldata = require(&amp;quot;Module:la-nominal&amp;quot;).do_generate_adj_forms(&lt;br /&gt;
	  args, pos, true, def, is_num)&lt;br /&gt;
	local lemma = decldata.overriding_lemma&lt;br /&gt;
	local lemma_num = decldata.num == &amp;quot;pl&amp;quot; and &amp;quot;pl&amp;quot; or &amp;quot;sg&amp;quot;&lt;br /&gt;
	if not lemma or #lemma == 0 then&lt;br /&gt;
		lemma = decldata.forms[&amp;quot;linked_nom_&amp;quot; .. lemma_num .. &amp;quot;_m&amp;quot;]&lt;br /&gt;
		if decldata.unattested[&amp;quot;nom_&amp;quot; .. lemma_num .. &amp;quot;_m&amp;quot;] then&lt;br /&gt;
			lemma[1] = '*' .. lemma[1]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	data.heads = lemma&lt;br /&gt;
	data.id = decldata.id&lt;br /&gt;
&lt;br /&gt;
	if is_num then&lt;br /&gt;
		process_num_type(decldata.num_type, data.categories)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if decldata.num == &amp;quot;pl&amp;quot; then&lt;br /&gt;
		table.insert(data.categories, &amp;quot;Latin plural-only &amp;quot; .. decldata.pos)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if decldata.indecl then&lt;br /&gt;
		table.insert(data.inflections, {label = glossary_link(&amp;quot;indeclinable&amp;quot;)})&lt;br /&gt;
&lt;br /&gt;
		if decldata.pos == &amp;quot;participles&amp;quot; then&lt;br /&gt;
			if rfind(lemma[1], &amp;quot;[stxu]um$&amp;quot;) then&lt;br /&gt;
				table.insert(data.categories, &amp;quot;Latin perfect participles&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
&lt;br /&gt;
		local function attested_form(index)&lt;br /&gt;
			local form&lt;br /&gt;
			if (decldata.unattested[index]) then&lt;br /&gt;
				form = { { term = '*' .. decldata.forms[index][1], nolink = true } }&lt;br /&gt;
			else&lt;br /&gt;
				form = decldata.forms[index]&lt;br /&gt;
			end&lt;br /&gt;
			return form&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local masc = decldata.forms[&amp;quot;nom_&amp;quot; .. lemma_num .. &amp;quot;_m&amp;quot;]&lt;br /&gt;
		local fem = attested_form(&amp;quot;nom_&amp;quot; .. lemma_num .. &amp;quot;_f&amp;quot;)&lt;br /&gt;
		local neut = attested_form(&amp;quot;nom_&amp;quot; .. lemma_num .. &amp;quot;_n&amp;quot;)&lt;br /&gt;
		local gen = attested_form(&amp;quot;gen_&amp;quot; .. lemma_num .. &amp;quot;_m&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
		if decldata.pos == &amp;quot;participles&amp;quot; then&lt;br /&gt;
			if rfind(masc[1], &amp;quot;ūrus$&amp;quot;) then&lt;br /&gt;
				table.insert(data.categories, &amp;quot;Latin future participles&amp;quot;)&lt;br /&gt;
			elseif rfind(masc[1], &amp;quot;ndus$&amp;quot;) then&lt;br /&gt;
				-- FIXME, should rename to &amp;quot;Latin gerundives&amp;quot;)&lt;br /&gt;
				table.insert(data.categories, &amp;quot;Latin future passive participles&amp;quot;)&lt;br /&gt;
			elseif rfind(masc[1], &amp;quot;[stxu]us$&amp;quot;) then&lt;br /&gt;
				table.insert(data.categories, &amp;quot;Latin perfect participles&amp;quot;)&lt;br /&gt;
			elseif rfind(masc[1], &amp;quot;ns$&amp;quot;) then&lt;br /&gt;
				table.insert(data.categories, &amp;quot;Latin present participles&amp;quot;)&lt;br /&gt;
			else&lt;br /&gt;
				error(&amp;quot;Unrecognized participle ending: &amp;quot; .. masc[1])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		local function is_missing(form)&lt;br /&gt;
			return not form or form == &amp;quot;&amp;quot; or form == &amp;quot;—&amp;quot; or #form == 0&lt;br /&gt;
		end&lt;br /&gt;
		-- We display the inflections in three different ways to mimic the&lt;br /&gt;
		-- old way of doing things:&lt;br /&gt;
		--&lt;br /&gt;
		-- 1. If masc and fem are different, show masc, fem and neut.&lt;br /&gt;
		-- 2. Otherwise, if masc and neut are different, show masc and neut.&lt;br /&gt;
		-- 3. Otherwise, show masc nominative and masc genitive.&lt;br /&gt;
		if not is_missing(fem) and not m_table.deepEquals(masc, fem) then&lt;br /&gt;
			fem.label = &amp;quot;feminine&amp;quot;&lt;br /&gt;
			table.insert(data.inflections, fem)&lt;br /&gt;
			if not is_missing(neut) then&lt;br /&gt;
				neut.label = &amp;quot;neuter&amp;quot;&lt;br /&gt;
				table.insert(data.inflections, neut)&lt;br /&gt;
			end&lt;br /&gt;
		elseif not is_missing(neut) and not m_table.deepEquals(masc, neut) then&lt;br /&gt;
			neut.label = &amp;quot;neuter&amp;quot;&lt;br /&gt;
			table.insert(data.inflections, neut)&lt;br /&gt;
		elseif not is_missing(gen) then&lt;br /&gt;
			gen.label = &amp;quot;genitive&amp;quot;&lt;br /&gt;
			table.insert(data.inflections, gen)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		table.insert(infl_classes, decldata.title)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #decldata.comp &amp;gt; 0 then&lt;br /&gt;
		decldata.comp.label = &amp;quot;comparative&amp;quot;&lt;br /&gt;
		table.insert(data.inflections, decldata.comp)&lt;br /&gt;
	end&lt;br /&gt;
	if #decldata.sup &amp;gt; 0 then&lt;br /&gt;
		decldata.sup.label = &amp;quot;superlative&amp;quot;&lt;br /&gt;
		table.insert(data.inflections, decldata.sup)&lt;br /&gt;
	end&lt;br /&gt;
	if #decldata.adv &amp;gt; 0 then&lt;br /&gt;
		decldata.adv.label = &amp;quot;adverb&amp;quot;&lt;br /&gt;
		table.insert(data.inflections, decldata.adv)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(decldata.categories) do&lt;br /&gt;
		m_table.insertIfNot(data.categories, cat)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs(decldata.cat) do&lt;br /&gt;
		m_table.insertIfNot(data.categories, &amp;quot;Latin &amp;quot; .. cat)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return decldata.pos&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function adjectives_comp(pos, def, args, data, infl_classes, appendix)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {alias_of = 'head'},&lt;br /&gt;
		[2] = {alias_of = 'pos'},&lt;br /&gt;
		[&amp;quot;head&amp;quot;] = {list = true, default = mw.title.getCurrentTitle().text},&lt;br /&gt;
		[&amp;quot;pos&amp;quot;] = {list = true},&lt;br /&gt;
		[&amp;quot;is_lemma&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
		[&amp;quot;id&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(args, params)&lt;br /&gt;
	data.heads = args.head&lt;br /&gt;
	data.id = args.id&lt;br /&gt;
	if args.is_lemma then&lt;br /&gt;
		-- See below. This happens automatically by virtue of the default POS&lt;br /&gt;
		-- unless we overrride it, which we do when is_lemma.&lt;br /&gt;
		table.insert(data.categories, &amp;quot;Latin comparative &amp;quot; .. pos)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(infl_classes, &amp;quot;[[Appendix:Latin third declension|third declension]]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	local n = {label = &amp;quot;neuter&amp;quot;}&lt;br /&gt;
	for _, head in ipairs(args.head) do&lt;br /&gt;
		local neuter = mw.ustring.gsub(head, &amp;quot;or$&amp;quot;, &amp;quot;us&amp;quot;)&lt;br /&gt;
		table.insert(n, neuter)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert(data.inflections, n)&lt;br /&gt;
&lt;br /&gt;
	if #args.pos &amp;gt; 0 then&lt;br /&gt;
		args.pos.label = &amp;quot;positive&amp;quot;&lt;br /&gt;
		table.insert(data.inflections, args.pos)&lt;br /&gt;
	end&lt;br /&gt;
	if args.is_lemma then&lt;br /&gt;
		-- If is_lemma, we're a comparative adjective without positive form,&lt;br /&gt;
		-- so we're treated as a lemma. In that case, we return &amp;quot;adjectives&amp;quot; as&lt;br /&gt;
		-- the part of speech, which will automatically categorize into&lt;br /&gt;
		-- &amp;quot;Latin adjectives&amp;quot; and &amp;quot;Latin lemmas&amp;quot;, otherwise we don't return&lt;br /&gt;
		-- anything, which defaults to the passed-in POS (usually&lt;br /&gt;
		-- &amp;quot;comparative adjectives&amp;quot;), which will automatically categorize into&lt;br /&gt;
		-- that POS (e.g. &amp;quot;Latin comparative adjectives&amp;quot;) and into&lt;br /&gt;
		-- &amp;quot;Latin non-lemma forms&amp;quot;.&lt;br /&gt;
		return pos&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function adjectives_sup(pos, def, args, data, infl_classes, appendix)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {alias_of = 'head'},&lt;br /&gt;
		[2] = {alias_of = 'pos'},&lt;br /&gt;
		[&amp;quot;head&amp;quot;] = {list = true, default = mw.title.getCurrentTitle().text},&lt;br /&gt;
		[&amp;quot;pos&amp;quot;] = {list = true},&lt;br /&gt;
		[&amp;quot;is_lemma&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
		[&amp;quot;id&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(args, params)&lt;br /&gt;
	data.heads = args.head&lt;br /&gt;
	data.id = args.id&lt;br /&gt;
&lt;br /&gt;
	if args.is_lemma then&lt;br /&gt;
		-- See below. This happens automatically by virtue of the default POS&lt;br /&gt;
		-- unless we overrride it, which we do when is_lemma.&lt;br /&gt;
		table.insert(data.categories, &amp;quot;Latin superlative &amp;quot; .. pos)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(infl_classes, &amp;quot;[[Appendix:Latin first declension|first]]&amp;quot;)&lt;br /&gt;
	table.insert(infl_classes, &amp;quot;[[Appendix:Latin second declension|second declension]]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	local f, n = {label = &amp;quot;feminine&amp;quot;}, {label = &amp;quot;neuter&amp;quot;}&lt;br /&gt;
	for _, head in ipairs(args.head) do&lt;br /&gt;
		local stem = mw.ustring.gsub(head, &amp;quot;us$&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
		table.insert(f, stem .. &amp;quot;a&amp;quot;)&lt;br /&gt;
		table.insert(n, stem .. &amp;quot;um&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert(data.inflections, f)&lt;br /&gt;
	table.insert(data.inflections, n)&lt;br /&gt;
&lt;br /&gt;
	if #args.pos &amp;gt; 0 then&lt;br /&gt;
		args.pos.label = &amp;quot;positive&amp;quot;&lt;br /&gt;
		table.insert(data.inflections, args.pos)&lt;br /&gt;
	end&lt;br /&gt;
	if args.is_lemma then&lt;br /&gt;
		-- If is_lemma, we're a superlative adjective without positive form,&lt;br /&gt;
		-- so we're treated as a lemma. In that case, we return &amp;quot;adjectives&amp;quot; as&lt;br /&gt;
		-- the part of speech, which will automatically categorize into&lt;br /&gt;
		-- &amp;quot;Latin adjectives&amp;quot; and &amp;quot;Latin lemmas&amp;quot;, otherwise we don't return&lt;br /&gt;
		-- anything, which defaults to the passed-in POS (usually&lt;br /&gt;
		-- &amp;quot;superlative adjectives&amp;quot;), which will automatically categorize into&lt;br /&gt;
		-- that POS (e.g. &amp;quot;Latin superlative adjectives&amp;quot;) and into&lt;br /&gt;
		-- &amp;quot;Latin non-lemma forms&amp;quot;.&lt;br /&gt;
		return pos&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;adjectives&amp;quot;] = function(def, args, data, infl_classes, appendix)&lt;br /&gt;
	return adjectives(&amp;quot;adjectives&amp;quot;, def, args, data, infl_classes, appendix)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;comparative adjectives&amp;quot;] = function(def, args, data, infl_classes, appendix)&lt;br /&gt;
	return adjectives_comp(&amp;quot;adjectives&amp;quot;, def, args, data, infl_classes, appendix)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;superlative adjectives&amp;quot;] = function(def, args, data, infl_classes, appendix)&lt;br /&gt;
	return adjectives_sup(&amp;quot;adjectives&amp;quot;, def, args, data, infl_classes, appendix)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;participles&amp;quot;] = function(def, args, data, infl_classes, appendix)&lt;br /&gt;
	return adjectives(&amp;quot;participles&amp;quot;, def, args, data, infl_classes, appendix)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;determiners&amp;quot;] = function(def, args, data, infl_classes, appendix)&lt;br /&gt;
	return adjectives(&amp;quot;determiners&amp;quot;, def, args, data, infl_classes, appendix)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;pronouns&amp;quot;] = function(def, args, data, infl_classes, appendix)&lt;br /&gt;
	return adjectives(&amp;quot;pronouns&amp;quot;, def, args, data, infl_classes, appendix)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;suffixes-adjective&amp;quot;] = function(def, args, data, infl_classes, appendix)&lt;br /&gt;
	return adjectives(&amp;quot;suffixes&amp;quot;, def, args, data, infl_classes, appendix)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;numerals-adjective&amp;quot;] = function(def, args, data, infl_classes, appendix)&lt;br /&gt;
	return adjectives(&amp;quot;numerals&amp;quot;, def, args, data, infl_classes, appendix)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;adverbs&amp;quot;] = function(def, args, data, infl_classes, appendix)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {alias_of = 'head'},&lt;br /&gt;
		[2] = {alias_of = 'comp'},&lt;br /&gt;
		[3] = {alias_of = 'sup'},&lt;br /&gt;
		[&amp;quot;head&amp;quot;] = {list = true, required = true},&lt;br /&gt;
		[&amp;quot;comp&amp;quot;] = {list = true},&lt;br /&gt;
		[&amp;quot;sup&amp;quot;] = {list = true},&lt;br /&gt;
		[&amp;quot;id&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(args, params)&lt;br /&gt;
	data.heads = args.head&lt;br /&gt;
	data.id = args.id&lt;br /&gt;
	local comp, sup&lt;br /&gt;
	local irreg = false&lt;br /&gt;
&lt;br /&gt;
	if args.comp[1] == &amp;quot;-&amp;quot; then&lt;br /&gt;
		comp = &amp;quot;-&amp;quot;&lt;br /&gt;
	elseif #args.comp &amp;gt; 0 then&lt;br /&gt;
		args.comp.label = glossary_link(&amp;quot;comparative&amp;quot;)&lt;br /&gt;
		comp = args.comp&lt;br /&gt;
		irreg = true&lt;br /&gt;
	end&lt;br /&gt;
	if args.comp[1] == &amp;quot;-&amp;quot; or args.sup[1] == &amp;quot;-&amp;quot; then&lt;br /&gt;
		sup = &amp;quot;-&amp;quot;&lt;br /&gt;
	elseif #args.sup &amp;gt; 0 then&lt;br /&gt;
		args.sup.label = glossary_link(&amp;quot;superlative&amp;quot;)&lt;br /&gt;
		sup = args.sup&lt;br /&gt;
		irreg = true&lt;br /&gt;
	end&lt;br /&gt;
	if irreg then&lt;br /&gt;
		table.insert(data.categories, &amp;quot;Latin irregular adverbs&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not comp or not sup then&lt;br /&gt;
		local default_comp = {label = glossary_link(&amp;quot;comparative&amp;quot;)}&lt;br /&gt;
		local default_sup = {label = glossary_link(&amp;quot;superlative&amp;quot;)}&lt;br /&gt;
		for _, head in ipairs(args.head) do&lt;br /&gt;
			local stem = nil&lt;br /&gt;
			for _, suff in ipairs({&amp;quot;iter&amp;quot;, &amp;quot;nter&amp;quot;, &amp;quot;ter&amp;quot;, &amp;quot;er&amp;quot;, &amp;quot;iē&amp;quot;, &amp;quot;ē&amp;quot;, &amp;quot;im&amp;quot;, &amp;quot;ō&amp;quot;}) do&lt;br /&gt;
				stem = mw.ustring.match(head, &amp;quot;(.*)&amp;quot; .. suff .. &amp;quot;$&amp;quot;)&lt;br /&gt;
				if stem ~= nil then&lt;br /&gt;
					if suff == &amp;quot;nter&amp;quot; then&lt;br /&gt;
						stem = stem .. &amp;quot;nt&amp;quot;&lt;br /&gt;
						suff = &amp;quot;er&amp;quot;&lt;br /&gt;
					end&lt;br /&gt;
					table.insert(default_comp, stem .. &amp;quot;ius&amp;quot;)&lt;br /&gt;
					table.insert(default_sup, stem .. &amp;quot;issimē&amp;quot;)&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if not stem then&lt;br /&gt;
				error(&amp;quot;Unrecognized adverb type, recognized types are “-ē”, “-er”, “-ter”, “-iter”, “-im”, or “-ō” or specify irregular forms or “-” if incomparable.&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		comp = comp or default_comp&lt;br /&gt;
		sup = sup or default_sup&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if comp == &amp;quot;-&amp;quot; then&lt;br /&gt;
		table.insert(data.inflections, {label = &amp;quot;not [[Appendix:Glossary#comparative|comparable]]&amp;quot;})&lt;br /&gt;
		table.insert(data.categories, &amp;quot;Latin uncomparable adverbs&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(data.inflections, comp)&lt;br /&gt;
	end&lt;br /&gt;
	if sup == &amp;quot;-&amp;quot; then&lt;br /&gt;
		if comp ~= &amp;quot;-&amp;quot; then&lt;br /&gt;
			table.insert(data.inflections, {label = &amp;quot;no [[Appendix:Glossary#superlative|superlative]]&amp;quot;})&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(data.inflections, sup)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;suffixes-adverb&amp;quot;] = pos_functions[&amp;quot;adverbs&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
local prepositional_cases = {&lt;br /&gt;
	genitive = true, accusative = true, ablative = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;prepositions&amp;quot;] = function(def, args, data, infl_classes, appendix, postscript)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {list = true, required = true}, -- headword or cases&lt;br /&gt;
		[&amp;quot;head&amp;quot;] = {list = true},&lt;br /&gt;
		[&amp;quot;id&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(args, params)&lt;br /&gt;
&lt;br /&gt;
	-- Case names are supplied in numbered arguments, optionally preceded by&lt;br /&gt;
	-- headwords.&lt;br /&gt;
	local cases = {}&lt;br /&gt;
	while prepositional_cases[args[1][#args[1]]] do&lt;br /&gt;
		table.insert(cases, 1, table.remove(args[1]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for i = 1, #cases do&lt;br /&gt;
		for j = i + 1, #cases do&lt;br /&gt;
			if cases[i] == cases[j] then&lt;br /&gt;
				error(&amp;quot;Duplicate case&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local case = cases[i]&lt;br /&gt;
		local appendix_link = glossary_link(case)&lt;br /&gt;
		if i == 1 then&lt;br /&gt;
			appendix_link = &amp;quot;+ &amp;quot; .. appendix_link&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(postscript, appendix_link)&lt;br /&gt;
		table.insert(data.categories, &amp;quot;Latin &amp;quot; .. case .. &amp;quot; prepositions&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, v in ipairs(args[1]) do&lt;br /&gt;
		table.insert(args.head, 1, v)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	data.heads = args.head&lt;br /&gt;
	data.id = args.id&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;gerunds&amp;quot;] = function(def, args, data, infl_classes, appendix, postscript)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {required = true, default = &amp;quot;labōrandum&amp;quot;}, -- headword&lt;br /&gt;
		[2] = {}, -- gerundive&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(args, params)&lt;br /&gt;
&lt;br /&gt;
	data.heads = {args[1]}&lt;br /&gt;
	table.insert(data.inflections, {label = &amp;quot;[[Appendix:Glossary#accusative|accusative]]&amp;quot;})&lt;br /&gt;
	local stem = rmatch(args[1], &amp;quot;^(.*)um$&amp;quot;)&lt;br /&gt;
	if not stem then&lt;br /&gt;
		error(&amp;quot;Unrecognized gerund ending: &amp;quot; .. stem)&lt;br /&gt;
	end&lt;br /&gt;
	if args[2] == &amp;quot;-&amp;quot; then&lt;br /&gt;
		table.insert(data.inflections, {label = &amp;quot;no [[Appendix:Glossary#gerundive|gerundive]]&amp;quot;})&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(data.inflections, {[1] = args[2] or stem .. &amp;quot;us&amp;quot;, label = &amp;quot;[[Appendix:Glossary#gerundive|gerundive]]&amp;quot;})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function non_lemma_forms(def, args, data, infl_classes, appendix, postscript)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {required = true, default = def}, -- headword or cases&lt;br /&gt;
		[&amp;quot;head&amp;quot;] = {list = true, require_index = true},&lt;br /&gt;
		[&amp;quot;g&amp;quot;] = {list = true},&lt;br /&gt;
		[&amp;quot;id&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(args, params)&lt;br /&gt;
&lt;br /&gt;
	local heads = {args[1]}&lt;br /&gt;
	for _, head in ipairs(args.head) do&lt;br /&gt;
		table.insert(heads, head)&lt;br /&gt;
	end&lt;br /&gt;
	data.heads = heads&lt;br /&gt;
	data.genders = args.g&lt;br /&gt;
	data.id = args.id&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
pos_functions[&amp;quot;noun forms&amp;quot;] = non_lemma_forms&lt;br /&gt;
pos_functions[&amp;quot;proper noun forms&amp;quot;] = non_lemma_forms&lt;br /&gt;
pos_functions[&amp;quot;pronoun forms&amp;quot;] = non_lemma_forms&lt;br /&gt;
pos_functions[&amp;quot;verb forms&amp;quot;] = non_lemma_forms&lt;br /&gt;
pos_functions[&amp;quot;gerund forms&amp;quot;] = non_lemma_forms&lt;br /&gt;
pos_functions[&amp;quot;adjective forms&amp;quot;] = non_lemma_forms&lt;br /&gt;
pos_functions[&amp;quot;participle forms&amp;quot;] = non_lemma_forms&lt;br /&gt;
pos_functions[&amp;quot;determiner forms&amp;quot;] = non_lemma_forms&lt;br /&gt;
pos_functions[&amp;quot;numeral forms&amp;quot;] = non_lemma_forms&lt;br /&gt;
pos_functions[&amp;quot;suffix forms&amp;quot;] = non_lemma_forms&lt;br /&gt;
&lt;br /&gt;
return export&lt;br /&gt;
&lt;br /&gt;
-- For Vim, so we get 4-space tabs&lt;br /&gt;
-- vim: set ts=4 sw=4 noet:&lt;/div&gt;</summary>
		<author><name>Jācōbus</name></author>
	</entry>
</feed>