Modul:no-sub

Fra Wiktionary

Dokumentasjon for denne modulen kan opprettes på Modul:no-sub/dok

local gt = require("Modul:grammar-table")
local export = require("Modul:grammar")

local lang_code_param                   = "no"
local part_of_speech_param              = "sub"
local nynorsk_param                     = "n"
local bokmal_param                      = "b"
local riksmal_param                     = "r"
local unregularized_param               = "u"
local singular_param                    = "entall"
local plural_param                      = "flertall"
local uncountable_templatename_suffix   = "-utel"
local masculine_templatename            = "no-sub-m"
local feminine_templatename             = "no-sub-f"
local neuter_templatename               = "no-sub-n"

local lang_tags = {
	n  = "Nynorsk",
	b  = "Bokmål",
	r  = "Riksmål",
	u  = "Unormert"
}

function export._getAcceptedParameters()
	return {nynorsk_param, bokmal_param, riksmal_param, unregularized_param, singular_param, plural_param, uncountable_templatename_suffix, masculine_templatename, feminine_templatename, neuter_templatename}
end

function export._getForms(pagename, templatename, args, meta, format)
	local last_1                = mw.ustring.sub(pagename, -1, -1)
	local last_2                = mw.ustring.sub(pagename, -2, -1)
	local last_4                = mw.ustring.sub(pagename, -4, -1)
	local without_last_1        = mw.ustring.sub(pagename, 1, -2)
	local without_last_2        = mw.ustring.sub(pagename, 1, -3)
	local without_last_3        = mw.ustring.sub(pagename, 1, -4)
	local third_from_end        = mw.ustring.sub(pagename, -3, -3)
	local fourth_from_end       = mw.ustring.sub(pagename, -4, -4)
	local is_double_consonant   = third_from_end == fourth_from_end
	local last_1                = mw.ustring.sub(pagename, -1, -1)
	local clitic                = (last_1 == "s" or last_1 == "z" or last_1 == "x") and "'" or "s"

	local gender                = meta.gender
	local stem                  = pagename
	local plural_stem           = pagename
	local include_bokmal        = meta.b
	local include_nynorsk       = meta.n
	local include_riksmal       = meta.r
	local bokmal_plural_suffix  = meta.b_plural_suffix
	local nynorsk_plural_suffix = meta.n_plural_suffix
	local riksmal_plural_suffix = meta.r_plural_suffix
	local forms                 = {}

	if last_2 == "er" then
		stem        = pagename
		if is_double_consonant then
			plural_stem = without_last_3 .. "r"
		else
			plural_stem = without_last_2
		end
	elseif last_1 == "e" then
		stem        = without_last_1
		plural_stem = without_last_1
	elseif last_2 == "el" then
		stem        = pagename
		if is_double_consonant then
			plural_stem = without_last_3 .. "l"
		else
			plural_stem = without_last_2 .. "l"
		end
	elseif last_1 == "m" and last_2 ~= "um" then
		stem        = pagename .. "m"
		plural_stem = pagename .. "m"
	end
	-- and "um"/"ium"? (will definitely fail)


	if include_bokmal then
		if gender == "m" then
			if bokmal_plural_suffix == "er" then
				forms.b_undet_sing_nom = pagename
				forms.b_det_sing_nom   = stem .. "en"
				forms.b_undet_plur_nom = plural_stem .. "er"
				forms.b_det_plur_nom   = plural_stem .. "ene"
				forms.b_undet_sing_gen = pagename .. clitic
				forms.b_det_sing_gen   = stem .. "ens"
				forms.b_undet_plur_gen = plural_stem .. "ers"
				forms.b_det_plur_gen   = plural_stem .. "enes"
			elseif bokmal_plural_suffix == "ere" then
				forms.b_undet_sing_nom = pagename
				forms.b_det_sing_nom   = pagename .. "en"
				forms.b_undet_plur_nom = plural_stem .. "ere"
				forms.b_det_plur_nom   = plural_stem .. "erne"
				forms.b_undet_sing_gen = pagename .. clitic
				forms.b_det_sing_gen   = pagename .. "ens"
				forms.b_undet_plur_gen = plural_stem .. "eres"
				forms.b_det_plur_gen   = plural_stem .. "ernes"
			elseif bokmal_plural_suffix == "0" then
				forms.b_undet_sing_nom = pagename
				forms.b_det_sing_nom   = stem .. "en"
				forms.b_undet_plur_nom = pagename
				forms.b_undet_sing_gen = pagename .. clitic
				forms.b_det_sing_gen   = stem .. "ens"
				forms.b_undet_plur_gen = pagename .. clitic
				forms.b_det_plur_nom = plural_stem .. "ene, " .. plural_stem .. "a"
				forms.b_det_plur_gen = plural_stem .. "enes, " .. plural_stem .. "as"
			elseif bokmal_plural_suffix == "re" then
				forms.b_undet_sing_nom = pagename
				forms.b_det_sing_nom   = stem .. "en"
				forms.b_undet_plur_nom = plural_stem .. "re"
				forms.b_undet_sing_gen = pagename .. clitic
				forms.b_det_sing_gen   = stem .. "ens"
				forms.b_undet_plur_gen = plural_stem .. "res"
				forms.b_det_plur_nom = plural_stem .. "rene, " .. plural_stem .. "ra"
				forms.b_det_plur_gen = plural_stem .. "renes, " .. plural_stem .. "ras"
			elseif bokmal_plural_suffix == "er/ere/re" then
				forms.b_undet_sing_nom = pagename
				forms.b_det_sing_nom   = stem .. "en"
				forms.b_undet_plur_nom = plural_stem .. "er, " .. plural_stem .. "ere, " .. plural_stem .. "re"
				forms.b_det_plur_nom   = plural_stem .. "erne, " .. plural_stem .. "rene, " .. plural_stem .. "ra"
				forms.b_undet_sing_gen = pagename .. clitic
				forms.b_det_sing_gen   = stem .. "ens"
				forms.b_undet_plur_gen = plural_stem .. "ers, " .. plural_stem .. "eres, " .. plural_stem .. "res"
				forms.b_det_plur_gen   = plural_stem .. "ernes, " .. plural_stem .. "renes, " .. plural_stem .. "ras"
			end
		elseif gender == "f" then
			if bokmal_plural_suffix == "er" then
				forms.b_undet_sing_nom = pagename
				forms.b_undet_plur_nom = plural_stem .. "er"
				forms.b_det_plur_nom   = plural_stem .. "ene"
				forms.b_undet_sing_gen = pagename .. clitic
				forms.b_undet_plur_gen = plural_stem .. "ers"
				forms.b_det_plur_gen   = plural_stem .. "enes"
				forms.b_det_sing_nom   = stem .. "en, " .. stem .. "a"
				forms.b_det_sing_gen   = stem .. "ens, " .. stem .. "as"
			end
		elseif gender == "n" then
			if bokmal_plural_suffix == "0" then
				forms.b_undet_sing_nom = pagename
				forms.b_det_sing_nom   = stem .. "et"
				forms.b_undet_plur_nom = pagename
				forms.b_undet_sing_gen = pagename .. clitic
				forms.b_det_sing_gen   = stem .. "ets"
				forms.b_undet_plur_gen = pagename .. clitic
				forms.b_det_plur_nom   = plural_stem .. "ene, " .. plural_stem .. "a"
				forms.b_det_plur_gen   = plural_stem .. "enes, " .. plural_stem .. "as"
			elseif bokmal_plural_suffix == "er" then
				forms.b_undet_sing_nom = pagename
				forms.b_det_sing_nom   = stem .. "et"
				forms.b_undet_plur_nom = plural_stem .. "er"
				forms.b_undet_sing_gen = pagename .. clitic
				forms.b_det_sing_gen   = stem .. "ets"
				forms.b_undet_plur_gen = plural_stem .. "ers"
				forms.b_det_plur_nom   = plural_stem .. "ene, " .. plural_stem .. "a"
				forms.b_det_plur_gen   = plural_stem .. "enes, " ..  plural_stem .. "as"
			elseif bokmal_plural_suffix == "0/er" then
				forms.b_undet_sing_nom = pagename
				forms.b_det_sing_nom   = stem .. "et"
				forms.b_undet_plur_nom = pagename .. ", " .. plural_stem .. "er"
				forms.b_undet_sing_gen = pagename .. clitic
				forms.b_det_sing_gen   = stem .. "ets"
				forms.b_undet_plur_gen = pagename .. clitic .. ", " .. plural_stem .. "ers"
				forms.b_det_plur_nom   = plural_stem .. "ene, " .. plural_stem .. "a"
				forms.b_det_plur_gen   = plural_stem .. "enes, " ..  plural_stem .. "as"
			end
		end
	end

	if include_nynorsk then
		forms.n_undet_sing_nom  = "?"
		forms.n_det_sing_nom    = "?"
		forms.n_undet_plur_nom  = "?"
		forms.n_det_plur_nom    = "?"
	end
	
	if include_riksmal then
		forms.r_undet_sing_nom  = "?"
		forms.r_det_sing_nom    = "?"
		forms.r_undet_plur_nom  = "?"
		forms.r_det_plur_nom    = "?"
		forms.r_undet_sing_gen  = "?"
		forms.r_det_sing_gen    = "?"
		forms.r_undet_plur_gen  = "?"
		forms.r_det_plur_gen    = "?"
	end

	forms.b_undet_sing_nom = args[1]  or forms.b_undet_sing_nom
	forms.b_det_sing_nom   = args[2]  or forms.b_det_sing_nom
	forms.b_undet_plur_nom = args[3]  or forms.b_undet_plur_nom
	forms.b_det_plur_nom   = args[4]  or forms.b_det_plur_nom
	forms.b_undet_sing_gen = args[5]  or forms.b_undet_sing_gen
	forms.b_det_sing_gen   = args[6]  or forms.b_det_sing_gen
	forms.b_undet_plur_gen = args[7]  or forms.b_undet_plur_gen
	forms.b_det_plur_gen   = args[8]  or forms.b_det_plur_gen
	forms.n_undet_sing_nom = args[9]  or forms.n_undet_sing_nom
	forms.n_det_sing_nom   = args[10] or forms.n_det_sing_nom
	forms.n_undet_plur_nom = args[11] or forms.n_undet_plur_nom
	forms.n_det_plur_nom   = args[12] or forms.n_det_plur_nom
	forms.r_undet_sing_nom = args[13] or forms.r_undet_sing_nom
	forms.r_det_sing_nom   = args[14] or forms.r_det_sing_nom
	forms.r_undet_plur_nom = args[15] or forms.r_undet_plur_nom
	forms.r_det_plur_nom   = args[16] or forms.r_det_plur_nom
	forms.r_undet_sing_gen = args[17] or forms.r_undet_sing_gen
	forms.r_det_sing_gen   = args[18] or forms.r_det_sing_gen
	forms.r_undet_plur_gen = args[19] or forms.r_undet_plur_gen
	forms.r_det_plur_gen   = args[20] or forms.r_det_plur_gen

	if format == "wikitable" or format == "export" then
		local not_exists_representation = format == "wikitable" and "-" or nil
		local some_condition_is_true    = true        -- exempel
		
		if some_condition_is_true then                -- exempel
			forms.form_4 = not_exists_representation  -- exempel
		end                                           -- exempel
	end

	return forms
end

function export._getMeta(pagename, templatename, args)
	local meta = {}
	meta.numbered_cells       = 16 -- it depends
	meta.named_cells          = {}
	
	meta.gender               = ""
	local default_n_plural_suffix = ""
	local default_b_plural_suffix = ""
	local default_r_plural_suffix = ""
	if templatename == masculine_templatename then
		meta.gender = "m"
		default_n_plural_suffix = "ar"
		default_b_plural_suffix = "er"
		default_r_plural_suffix = "er"
	elseif templatename == feminine_templatename then
		meta.gender = "f"
		default_n_plural_suffix = "er"
		default_b_plural_suffix = "er"
		default_r_plural_suffix = "er"
	elseif templatename == neuter_templatename then
		meta.gender = "n"
		default_n_plural_suffix = "0"
		default_b_plural_suffix = "0"
		default_r_plural_suffix = "0"
	end

	meta.n                    = args[nynorsk_param] ~= "-"
	meta.b                    = args[bokmal_param]  ~= "-"
	meta.r                    = args[riksmal_param] ~= "-"
	meta.n_plural_suffix      = meta.n and args[nynorsk_param] ~= "" and args[nynorsk_param] or default_n_plural_suffix
	meta.b_plural_suffix      = meta.b and args[bokmal_param]  ~= "" and args[bokmal_param]  or default_b_plural_suffix
	meta.r_plural_suffix      = meta.r and args[riksmal_param] ~= "" and args[riksmal_param] or default_r_plural_suffix

	return meta;
end
	
function export._getWikitable(forms, meta)
	local number_of_columns         = 6
	local contains_a_quality_notice = not not meta.quality_notice
	local note                      = meta.note
	local as_first_part             = meta.as_first_part
	local bokmal_lang_tag           = lang_tags[bokmal_param]
	local nynorsk_lang_tag          = lang_tags[nynorsk_param]
	local riksmal_lang_tag          = lang_tags[riksmal_param]
	local case_cell_nom             = {'!', "Nominativ"}
	local case_cell_gen             = {'!', "Genitiv"}

	gt.setLanguage("no")
	
	local str = ""
	    .. gt.getStart(number_of_columns, lang_code_param, part_of_speech_param, contains_a_quality_notice)
		.. gt.getRow({'!class="main min" rowspan="2" colspan="2"', 'Bøyninger av ' .. meta.pagename .. ' ' .. meta.meanings}, {'!colspan="2"', 'Entall'}, {'!colspan="2"', 'Flertall'})
		.. gt.getRow({'!', 'Ubestemt'}, {'!', 'Bestemt'},{'!', 'Ubestemt'}, {'!', 'Bestemt'})
	
	if meta.b then
	    local lang_rowspan = 2
	    local lang_tag_cell = {'!rowspan="' .. lang_rowspan .. '" class="main min"', bokmal_lang_tag}
		--mw.log("<" .. forms.b_det_plur_gen .. ">")

		str = str
		.. gt.getRow(lang_tag_cell, case_cell_nom, forms.b_undet_sing_nom, forms.b_det_sing_nom, forms.b_undet_plur_nom, forms.b_det_plur_nom)
		.. gt.getRow(               case_cell_gen, forms.b_undet_sing_gen, forms.b_det_sing_gen, forms.b_undet_plur_gen, forms.b_det_plur_gen)
	end

	if meta.n then
	    local lang_rowspan  = 1
	    local lang_tag_cell = {'!rowspan="' .. lang_rowspan .. '" class="main min"', nynorsk_lang_tag}

		str = str
		.. gt.getRow(lang_tag_cell, case_cell_nom, forms.n_undet_sing_nom, forms.n_det_sing_nom, forms.n_undet_plur_nom, forms.n_det_plur_nom)
	end

	if meta.r then
	    local lang_rowspan  = 2
	    local lang_tag_cell = {'!rowspan="' .. lang_rowspan .. '" class="main min"', riksmal_lang_tag}

		--str = str
		--.. gt.getRow(lang_tag_cell, case_cell_nom, forms.r_undet_sing_nom, forms.r_det_sing_nom, forms.r_undet_plur_nom, forms.r_det_plur_nom)
		--.. gt.getRow(               case_cell_gen, forms.r_undet_sing_gen, forms.r_det_sing_gen, forms.r_undet_plur_gen, forms.r_det_plur_gen)
	end

    str = str .. gt.getEnd(number_of_columns, note, as_first_part)

	return str
end

function export._getCategories(form_sets, meta)
	local str = ""

	return str
end

return export