Jump to content

Module:ast-conj

From Wiktionary, the free dictionary

This module needs documentation.
Please document this module by describing its purpose and usage on the documentation page.

local m_gen_num = require("Module:gender and number")
local m_links = require("Module:links")
local m_utilities = require("Module:utilities")

local m_infl =  require("Module:ast-conj/data")

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

local export = {}

-- Shows forms with links, or a dash if empty
local function show_form(subforms)
	if not subforms then
		return "—"
	elseif type(subforms) ~= "table" then
		error("a non-table value was given in the list of inflected forms.")
	elseif #subforms == 0 then
		return "—"
	end
	
	local ret = {}
	
	-- Go over each subform and insert links
	for key, subform in ipairs(subforms) do
		table.insert(ret, m_links.full_link({lang = lang, term = subform}))
	end
	
	return table.concat(ret, ", ")
end

-- Shows the table with the given forms
local function make_table(data)
	local ret = {[=[<div class="NavFrame">
<div class="NavHead" align="center">Conjugation of ]=]}
	table.insert(ret, m_links.full_link({lang = lang, alt = data.forms.infinitive[1]}, "term") .. "</div>\n")
	table.insert(ret, [=[<div class="NavContent" align="left">
{| class="roa-inflection-table" data-toggle-category="inflection"
|-
! class="roa-nonfinite-header" colspan="2" | infinitive
| colspan="6" | ]=])
	table.insert(ret, show_form(data.forms.infinitive) .. "\n")
	table.insert(ret, [=[|-
! class="roa-nonfinite-header" colspan="2" | gerund
| colspan="6" | ]=])
	table.insert(ret, show_form(data.forms.gerund) .. "\n")
	table.insert(ret, [=[|-
! class="roa-nonfinite-header" colspan="2" | past participle
| colspan="6" | ]=])
	if not data.forms.part_all then
		table.insert(ret, m_gen_num.format_list({"m"}) .. " " .. show_form(data.forms.part_m) .. ", ")
		table.insert(ret, m_gen_num.format_list({"f"}) .. " " .. show_form(data.forms.part_f) .. ", ")
		table.insert(ret, m_gen_num.format_list({"n"}) .. " " .. show_form(data.forms.part_n) .. ", ")
		table.insert(ret, m_gen_num.format_list({"m-p"}) .. " " .. show_form(data.forms["part_m-p"]) .. ", ")
		table.insert(ret, m_gen_num.format_list({"f-p"}) .. " " .. show_form(data.forms["part_f-p"]) .. "\n")
	else
		table.insert(ret, show_form(data.forms.part_all) .. "\n")
	end
	table.insert(ret, [=[
|- class="roa-person-number-header"
! colspan="2" | person
! style="width:12.5%" | first singular<br/>yo
! style="width:12.5%" | second singular<br/>tu
! style="width:12.5%" | third singular<br/>él/elli
! style="width:12.5%" | first plural<br/>nosotros/nós
! style="width:12.5%" | second plural<br/>vosotros/vós
! style="width:12.5%" | third plural<br/>ellos
|-
! class="roa-indicative-left-rail" rowspan="6" | indicative
! class="roa-indicative-left-rail" style="height:3em;" | present
]=])
	table.insert(ret, "| " .. show_form(data.forms.pres_ind_1sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pres_ind_2sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pres_ind_3sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pres_ind_1pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pres_ind_2pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pres_ind_3pl) .. "\n")
	table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | imperfect
]=])
	table.insert(ret, "| " .. show_form(data.forms.impf_ind_1sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.impf_ind_2sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.impf_ind_3sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.impf_ind_1pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.impf_ind_2pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.impf_ind_3pl) .. "\n")
	table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | preterite
]=])
	table.insert(ret, "| " .. show_form(data.forms.pret_ind_1sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pret_ind_2sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pret_ind_3sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pret_ind_1pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pret_ind_2pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pret_ind_3pl) .. "\n")
	table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | pluperfect
]=])
	table.insert(ret, "| " .. show_form(data.forms.plup_ind_1sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.plup_ind_2sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.plup_ind_3sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.plup_ind_1pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.plup_ind_2pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.plup_ind_3pl) .. "\n")
	table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | future
]=])
	table.insert(ret, "| " .. show_form(data.forms.futr_ind_1sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.futr_ind_2sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.futr_ind_3sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.futr_ind_1pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.futr_ind_2pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.futr_ind_3pl) .. "\n")
	table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | conditional
]=])
	table.insert(ret, "| " .. show_form(data.forms.cond_ind_1sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.cond_ind_2sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.cond_ind_3sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.cond_ind_1pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.cond_ind_2pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.cond_ind_3pl) .. "\n")
	table.insert(ret, [=[
|-
! class="roa-subjunctive-left-rail" rowspan="2" | subjunctive
! class="roa-subjunctive-left-rail" style="height:3em;" | present
]=])
	table.insert(ret, "| " .. show_form(data.forms.pres_sub_1sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pres_sub_2sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pres_sub_3sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pres_sub_1pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pres_sub_2pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.pres_sub_3pl) .. "\n")
	table.insert(ret, [=[
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | imperfect
]=])
	table.insert(ret, "| " .. show_form(data.forms.impf_sub_1sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.impf_sub_2sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.impf_sub_3sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.impf_sub_1pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.impf_sub_2pl) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.impf_sub_3pl) .. "\n")
	table.insert(ret, [=[
|-
! class="roa-imperative-left-rail" style="height:3em;" colspan="2" | imperative
| —
| ]=])
	table.insert(ret, show_form(data.forms.impr_2sg) .. "\n")
	table.insert(ret, [=[
| —
| —
| ]=])
	table.insert(ret, show_form(data.forms.impr_2pl) .. "\n")
	table.insert(ret, [=[
| —
|}
</div></div>]=])

	return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. table.concat(ret)
end

-- Main entry point
function export.show(frame)
	local args = frame:getParent().args
	
	-- Create the forms
	local data = {forms = {}, categories = {}, refl = false}
	
	-- Find what type of verb is it (hard-coded in the template).
	-- m_gen_numerate standard conjugated forms for each type of verb,
	local infl_type = frame.args["conj"]
	
	if not args[1] then args[1] = "{{{1}}}" end
	--[[ Provisional code to prevent arg 2 from being blank, to avoid
		the following forms from ending up as blank stems with their
		inflectional endings in cases where this is invoked with only
		args 1 and 3:
			* 1st sg. ind. (would result in "o")
			* 3rd sg. ind. (would result in "a")
			* 2nd. sg. imp. (would result in "a")
	]]--
	if (args[2] == "" or not args[2]) then args[2] = args[1] end
	
	if not infl_type then
		data.forms.infinitive = {args["inf"]}; if data.forms.infinitive[1] == "" then data.forms.infinitive = nil end
	elseif m_infl[infl_type] then
		m_infl[infl_type](args, data)
	else
		error("Verb type " .. infl_type .. " not supported.")
	end
	
	return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end

return export