Module:User:DanishtD/Sandbox

From Wiktionary, the free dictionary
Jump to navigation Jump to search

This is a private module sandbox of DanishtD, for their own experimentation. Items in this module may be added and removed at DanishtD's discretion; do not rely on this module's stability.


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:User:DanishtD/Sandbox/data")

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

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" style="width:450px">
<div class="NavHead" style="" >[[Appendix:Livonian declension|Declension]] of ]=]}
	table.insert(ret, m_links.full_link({lang = lang, alt = data.forms.nom_sg[1]}, "term") .. "&nbsp;(Viitso type\n")
	table.insert(ret, show_form({data.infl_type}) .. ")</div>\n")
	table.insert(ret, [=[<div class="NavContent">
{| border="1px solid #000000" style="border-collapse:collapse; background:#F9F9F9; text-align:center; width:100%" class="inflection-table"
|-
! style="width:158px;background:#DEDEDE" | 
! style="background:#DEDEDE" | singular <small>([[ikšlug]])</small>
! style="background:#DEDEDE" | plural <small>([[pǟgiņlug]])</small>
|-
! style="background:#EFEFEF" | nominative <small>([[nominatīv]])</small>
]=])
	table.insert(ret, "| " .. show_form(data.forms.nom_sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.nom_pl) .. "\n")
	table.insert(ret, [=[
|-
! style="background:#EFEFEF" | genitive <small>([[genitīv]])</small>
]=])
	table.insert(ret, "| " .. show_form(data.forms.gen_sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.gen_pl) .. "\n")
	table.insert(ret, [=[
|-
! style="background:#EFEFEF" | partitive <small>([[partitīv]])</small>
]=])
	table.insert(ret, "| " .. show_form(data.forms.par_sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.par_pl) .. "\n")
	table.insert(ret, [=[
|-
! style="background:#EFEFEF" | dative <small>([[datīv]])</small>
]=])
	table.insert(ret, "| " .. show_form(data.forms.dat_sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.dat_pl) .. "\n")
	table.insert(ret, [=[
|-
! style="background:#EFEFEF" | instrumental <small>([[instrumentāl]])</small>
]=])
	table.insert(ret, "| " .. show_form(data.forms.ins_sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.ins_pl) .. "\n")
	table.insert(ret, [=[
|-
! style="background:#EFEFEF" | illative <small>([[illatīv]])</small>
]=])
	table.insert(ret, "| " .. show_form(data.forms.ill_sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.ill_pl) .. "\n")
	table.insert(ret, [=[
|-
! style="background:#EFEFEF" | inessive <small>([[inesīv]])</small>
]=])
	table.insert(ret, "| " .. show_form(data.forms.ine_sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.ine_pl) .. "\n")
	table.insert(ret, [=[
|-
! style="background:#EFEFEF" | elative <small>([[elatīv]])</small>
]=])
	table.insert(ret, "| " .. show_form(data.forms.ela_sg) .. "\n")
	table.insert(ret, "| " .. show_form(data.forms.ela_pl) .. "\n")
	table.insert(ret, [=[
|-
|}</div></div>]=])

	return 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["decl"]
	
	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
	]]--
	if (args[2] == "" or not args[2]) then args[2] = args[1] end
	
	if not infl_type then
		data.forms.nom_sg = {args["nom_sg"]}; if data.forms.nom_sg[1] == "" then data.forms.nom_sg = nil end
	elseif m_infl[infl_type] then
		m_infl[infl_type](args, data)
	else
		error("Noun type " .. infl_type .. " not supported.")
	end
	
	return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end

return export