Dokumentation för denna modul finns på /dok (redigera), /test


Se även Wiktionary:Stilguide/Grammatik/Svenska/Adjektiv.

Syfte redigera

Stödja mallarna {{sv-adj}}, {{sv-adj-peri}}, {{sv-adj-okomp}}, {{sv-adj-alt}}, {{sv-adj-alt-peri}}, {{sv-adj-alt-okomp}}, {{sv-adj-0}}, {{sv-adj-0-peri}}, {{sv-adj-0-okomp}} och {{sv-adj-oreg}}

Grammatik redigera

Första deklinationen slutar på komparativ -are och superativ -ast (rolig roligare roligast)
Andra deklinationen slutar på komparativ -[inte a]re och superlativ -[inte a]-st (stor större störst)
För adjektiv som böjs enligt andra deklinationen, fyll i både komp= och sup=. Om komp= eller sup= inte följer mönstret ovan, tas ingen hänsyn till parametrarna. (Numrerade parametrar används som vanligt om man vill ändra en särskild ruta).

Olika utformningar av tabellen redigera

För att undertrycka komparativ- och superlativdelen av tabellen används mallar med suffixet "-okomp" för okomparabla adjektiv respektive "-peri" för adjektiv som nästan uteslutande använder perifrastisk komparation med mer och mest.
Om adjektivet kan beskriva en person eller inte påverkar hur några rutor visas.
Om adjektivet tillhör den första eller andra deklinationen kan påverka hur några rutor visas.
local gt = require("Modul:grammar-table")
local export = require("Modul:grammar")

local lang_code_param       = "sv"
local part_of_speech_param  = "adj"
local adverb_param          = "adv"
local comparative_param     = "komp"
local superlative_param     = "sup"
local neuter_param          = "neutrum"
local positive_param        = "pos"
local attributive_param     = "attr"
local predicative_param     = "pred"
local personal_param        = "pers"
local uncomparable_templatename_suffix  = "-okomp"
local periphrastic_templatename_suffix  = "-peri"
local irregular_templatename_suffix     = "-oreg"
local inflexible_positive_templatename  = "sv-adj-0"
local alternative_paradigm_templatename = "sv-adj-alt"

function export._getAcceptedParameters()
	return {adverb_param, comparative_param, superlative_param, neuter_param, positive_param, attributive_param, predicative_param, personal_param}
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 ends_with_vowel_d     = not not mw.ustring.find(last_2, "[aouåeiyäö]d")
	local ends_with_consonant_d = not not mw.ustring.find(last_2, "[bcdfghjklmnpqrstvwxz]d")
	local ends_with_vowel       = not not mw.ustring.find(last_1, "[aouåeiyäö]")
	
	local common        = pagename
	local neuter        = ends_with_vowel_d and without_last_1 .. "tt" or pagename .. "t"
	local masc          = pagename .. "e"
	local plural        = pagename .. "a"
	local comp          = pagename .. "are"
	local attr_sup      = pagename .. "aste"
	local attr_sup_masc = pagename .. "aste"
	local pred_sup      = pagename .. "ast"

	local has_alternative_inflection_pattern = meta.alt_paradigm
	local belongs_to_second_declension       = meta.second_declension
	local positive_forms_are_not_inflected   = meta.positive_uninflected

	if has_alternative_inflection_pattern then
		if last_1 == "t" then
			neuter        = pagename
		elseif last_1 == "m" then
			masc          = pagename .. "me"
			plural        = pagename .. "ma"
			comp          = pagename .. "mare"
			attr_sup      = pagename .. "maste"
			attr_sup_masc = pagename .. "maste"
			pred_sup      = pagename .. "mast"
		elseif last_4 == "mmen" or last_4 == "nnen" or last_4 == "mmal" then
			neuter        = last_1 == "n" and without_last_1 .. "t" or neuter
			masc          = without_last_3 .. last_1 .. "e"
			plural        = without_last_3 .. last_1 .. "a"
			comp          = without_last_3 .. last_1 .. "are"
			attr_sup      = without_last_3 .. last_1 .. "aste"
			attr_sup_masc = without_last_3 .. last_1 .. "aste"
			pred_sup      = without_last_3 .. last_1 .. "ast"
		elseif last_2 == "el" or last_2 == "en" or last_2 == "er" then
			neuter        = last_1 == "n" and without_last_1 .. "t" or neuter
			masc          = without_last_2 .. last_1 .. "e"
			plural        = without_last_2 .. last_1 .. "a"
			comp          = without_last_2 .. last_1 .. "are"
			attr_sup      = without_last_2 .. last_1 .. "aste"
			attr_sup_masc = without_last_2 .. last_1 .. "aste"
			pred_sup      = without_last_2 .. last_1 .. "ast"
		elseif last_2 == "dd" then
			neuter        = without_last_2 .. "tt"
		elseif last_2 == "ad" then
			neuter        = without_last_1 .. "t"
			plural        = pagename .. "e"
		elseif last_2 == "nn" or ends_with_consonant_d then
			neuter        = without_last_1 .. "t"
		elseif ends_with_vowel then
			neuter        = pagename .. "tt"
		else
			if not args[2] and not args[4] then
				meta.alt_paradigm = false
			end
		end
	end

	if belongs_to_second_declension then
		comp          = args[comparative_param]
		attr_sup      = args[superlative_param] .. "a"
		attr_sup_masc = args[superlative_param] .. "e"
		pred_sup      = args[superlative_param]
	end

	if positive_forms_are_not_inflected then 
		common = pagename
		neuter = pagename
		masc   = pagename
		plural = pagename
	end

	local forms = {}
	forms.attr_obest_sing_utrum_pos   = args[1] or common
	forms.attr_obest_sing_neutrum_pos = args[2] or neuter
	forms.attr_best_sing_mask_pos     = args[3] or masc
	forms.attr_best_sing_alla_pos     = args[4] or plural
	forms.attr_plur_pos               = args[5] or plural
	forms.attr_komp                   = args[9] or comp
	forms.attr_komp_mask              = args[10] or comp
	forms.attr_best_sing_mask_sup     = args[12] or attr_sup_masc
	forms.attr_sup                    = args[13] or attr_sup
	forms.pred_sing_utrum_pos         = args[6] or common
	forms.pred_sing_neutrum_pos       = args[7] or neuter
	forms.pred_plur_pos               = args[8] or plural
	forms.pred_komp                   = args[11] or comp
	forms.pred_sup                    = args[14] or pred_sup
	forms.x_adv                         = args[adverb_param] ~= "" and args[adverb_param] or neuter

	if format == "wikitable" or format == "export" then
		local adjective_can_not_describe_a_person      = not meta.pers
		local masculine_forms_have_not_been_cleared    = not meta.pers_clear
		local adverb_derivative_has_not_been_cleared   = not meta.adv_clear
		local neuter_needs_to_but_has_not_been_cleared = not meta.neuter_clear
		local no_positive_forms_exist                  = not meta.pos
	    local no_suffix_compared_forms_exist           = not meta.comp
		local no_superlative_forms_exist               = not meta.sup
		local no_attributive_forms_exist               = not meta.attr
		local no_predicative_forms_exist               = not meta.pred
		local no_adverb_derivative_exists              = not meta.adv

		if adjective_can_not_describe_a_person then
			forms.attr_best_sing_mask_pos     = "-"
			forms.attr_komp_mask              = "-"
			forms.attr_best_sing_mask_sup     = "-"
		else 
			if masculine_forms_have_not_been_cleared then
				forms.attr_best_sing_mask_pos = forms.attr_best_sing_mask_pos .. "?"
				forms.attr_komp_mask          = forms.attr_komp_mask .. "?"
				forms.attr_best_sing_mask_sup = forms.attr_best_sing_mask_sup .. "?"
			end
		end
	
		if neuter_needs_to_but_has_not_been_cleared then
			forms.attr_obest_sing_neutrum_pos = forms.attr_obest_sing_neutrum_pos .. "?"
			forms.pred_sing_neutrum_pos       = forms.pred_sing_neutrum_pos .. "?"
		end

		if no_positive_forms_exist then
			forms.attr_obest_sing_utrum_pos   = "-"
			forms.attr_obest_sing_neutrum_pos = "-"
			forms.attr_best_sing_mask_pos     = "-"
			forms.attr_best_sing_alla_pos     = "-"
			forms.attr_plur_pos               = "-"
			forms.pred_sing_utrum_pos         = "-"
			forms.pred_sing_neutrum_pos       = "-"
			forms.pred_plur_pos               = "-"
		end
	
		if no_suffix_compared_forms_exist then
			forms.attr_komp                   = "-"
			forms.attr_komp_mask              = "-"
			forms.pred_komp                   = "-"
		end
	
		if no_superlative_forms_exist then
			forms.attr_best_sing_mask_sup     = "-"
			forms.attr_sup                    = "-"
			forms.pred_sup                    = "-"
		end
	
		if no_attributive_forms_exist then
			forms.attr_obest_sing_utrum_pos   = "-"
			forms.attr_obest_sing_neutrum_pos = "-"
			forms.attr_best_sing_mask_pos     = "-"
			forms.attr_best_sing_alla_pos     = "-"
			forms.attr_plur_pos               = "-"
			forms.attr_komp                   = "-"
			forms.attr_komp_mask              = "-"
			forms.attr_best_sing_mask_sup     = "-"
			forms.attr_sup                    = "-"
		end
	
		if no_predicative_forms_exist then
			forms.pred_sing_utrum_pos         = "-"
			forms.pred_sing_neutrum_pos       = "-"
			forms.pred_plur_pos               = "-"
			forms.pred_komp                   = "-"
			forms.pred_sup                    = "-"
		end

		if no_adverb_derivative_exists then
			forms.x_adv                       = "-"
		else
			if adverb_derivative_has_not_been_cleared then
				forms.x_adv                   = forms.x_adv .. "?"
			end
		end
	end

	return forms
end

function export._getMeta(pagename, templatename, args)
	local function isSecondDeclension(comp, sup)
		comp = comp or ""
		sup  = sup or ""
		local comp_last_3 = mw.ustring.sub(comp, -3, -1)
		local sup_last_3  = mw.ustring.sub(sup, -3, -1)
		local has_second_declension_comp_ending = not not mw.ustring.match(comp_last_3, "[^a]re")
		local has_second_declension_sup_ending  = not not mw.ustring.match(sup_last_3, "[^a]st")

		return has_second_declension_comp_ending and has_second_declension_sup_ending
	end

	local positive_forms_are_not_inflected     = mw.ustring.sub(templatename, 1, mw.ustring.len(inflexible_positive_templatename)) == inflexible_positive_templatename
	local has_alternative_inflection_pattern   = mw.ustring.sub(templatename, 1, mw.ustring.len(alternative_paradigm_templatename)) == alternative_paradigm_templatename
	local ends_with_vowel_t                    = not not mw.ustring.match(pagename, "[aouåeiyäö]t$")
	local does_not_need_neuter_comfirmation    = not ends_with_vowel_t
	local neuter_is_confirmed                  = args[neuter_param] == ""
	local can_not_be_compared                  = mw.ustring.sub(templatename, -mw.ustring.len(uncomparable_templatename_suffix), -1) == uncomparable_templatename_suffix
	local uses_mainly_periphrastic_comparation = mw.ustring.sub(templatename, -mw.ustring.len(periphrastic_templatename_suffix), -1) == periphrastic_templatename_suffix
	local uses_suffix_comparation              = not (uses_mainly_periphrastic_comparation or can_not_be_compared)
	local uses_irregular_template              = mw.ustring.sub(templatename, -mw.ustring.len(irregular_templatename_suffix), -1) == irregular_templatename_suffix

	local meta = {}
	meta.numbered_cells       = 14
	meta.named_cells          = {adverb_param}
	meta.pos                  = args[positive_param]  ~= "-"
	meta.comp                 = uses_suffix_comparation and args[comparative_param] ~= "-"
	meta.sup                  = uses_suffix_comparation and args[superlative_param]  ~= "-"
	meta.attr                 = args[attributive_param] ~= "-"
	meta.pred                 = args[predicative_param] ~= "-"
	meta.pers                 = args[personal_param] ~= "-"
	meta.adv                  = args[adverb_param]  ~= "-"
	meta.adv_clear            = not not args[adverb_param]
	meta.pers_clear           = args[personal_param] == "" or args[personal_param] == "-"
	meta.neuter_clear         = does_not_need_neuter_comfirmation or neuter_is_confirmed
	meta.second_declension    = isSecondDeclension(args[comparative_param], args[superlative_param])
	meta.positive_uninflected = positive_forms_are_not_inflected
	meta.alt_paradigm         = has_alternative_inflection_pattern
	meta.suffix_comparison    = uses_suffix_comparation
	meta.uncomp               = can_not_be_compared
	meta.peri                 = uses_mainly_periphrastic_comparation
	meta.irregular            = uses_irregular_template
	
	return meta;
end

function export._getWikitable(forms, meta)
	local number_of_columns                    = meta.suffix_comparison and 5 or 3
	local contains_a_quality_notice            = not not meta.quality_notice
	local uses_suffix_comparation              = meta.suffix_comparison
	local can_be_used_to_describe_a_person     = meta.pers and meta.pers_clear
	local uses_second_declension               = meta.second_declension
	local note                                 = meta.note
	local as_first_part                        = meta.as_first_part
	local adv_cell                             = type(forms.x_adv) == "string" and {'|', forms.x_adv, type='adv'} or forms.x_adv
	local comparation_text                     = ""
	local is_uncomparable                      = meta.uncomp
	local uses_mainly_periphrastic_comparation = meta.peri
	local merge_some_cells                     = not meta.irregular
	
	if uses_suffix_comparation then
		adv_cell[1] = '|colspan="3"'
		comparation_text = "Kompareras alternativt med '''mer''' och '''mest'''."
	else
		if is_uncomparable then
			comparation_text = "Kompareras inte."
		elseif uses_mainly_periphrastic_comparation then
			comparation_text = "Kompareras med '''mer''' och '''mest'''."
		end
	end

	gt.setLanguage(lang_code_param)

	local str = gt.getStart(number_of_columns, lang_code_param, part_of_speech_param, contains_a_quality_notice)
	
	if uses_suffix_comparation then
		str = str
		.. gt.getRow({'!class="main min" rowspan="2" colspan="2"', 'Böjningar av ' .. meta.pagename .. ' ' .. meta.meanings}, {'!', 'Positiv'}, {'!', 'Komparativ'}, {'!', 'Superlativ'})
		.. gt.getRow({'!colspan="3"', 'Attributivt'})

		if merge_some_cells and can_be_used_to_describe_a_person then
			if uses_second_declension then
				str = str
				.. gt.getRow({'!rowspan="2"', 'Obestämd<br/>singular'}, {'!', 'Utrum'},      forms.attr_obest_sing_utrum_pos,   {'|rowspan="5"', forms.attr_komp},     {'!rowspan="2"'})
				.. gt.getRow(                                           {'!', 'Neutrum'},    forms.attr_obest_sing_neutrum_pos)
				.. gt.getRow({'!rowspan="2"', 'Bestämd<br/>singular'},  {'!', 'Maskulinum'}, forms.attr_best_sing_mask_pos,                                            forms.attr_best_sing_mask_sup)
				.. gt.getRow(                                           {'!', 'Alla'},       forms.attr_best_sing_alla_pos,                                            {'|rowspan="2"', forms.attr_sup})
				.. gt.getRow({'!colspan="2"', 'Plural'},                                     forms.attr_plur_pos)
			else
				str = str
				.. gt.getRow({'!rowspan="2"', 'Obestämd<br/>singular'}, {'!', 'Utrum'},      forms.attr_obest_sing_utrum_pos,   {'|rowspan="5"', forms.attr_komp},     {'!rowspan="2"'})
				.. gt.getRow(                                           {'!', 'Neutrum'},    forms.attr_obest_sing_neutrum_pos)
				.. gt.getRow({'!rowspan="2"', 'Bestämd<br/>singular'},  {'!', 'Maskulinum'}, forms.attr_best_sing_mask_pos,                                            {'|rowspan="3"', forms.attr_sup})
				.. gt.getRow(                                           {'!', 'Alla'},       forms.attr_best_sing_alla_pos)
				.. gt.getRow({'!colspan="2"', 'Plural'},                                     forms.attr_plur_pos)
			end
		else
			str = str
			.. gt.getRow({'!rowspan="2"', 'Obestämd<br/>singular'}, {'!', 'Utrum'},      forms.attr_obest_sing_utrum_pos,   {'|rowspan="2"', forms.attr_komp},     {'!rowspan="2"'})
			.. gt.getRow(                                           {'!', 'Neutrum'},    forms.attr_obest_sing_neutrum_pos)
			.. gt.getRow({'!rowspan="2"', 'Bestämd<br/>singular'},  {'!', 'Maskulinum'}, forms.attr_best_sing_mask_pos,     forms.attr_komp_mask,                  forms.attr_best_sing_mask_sup)
			.. gt.getRow(                                           {'!', 'Alla'},       forms.attr_best_sing_alla_pos,     {'|rowspan="2"', forms.attr_komp},     {'|rowspan="2"', forms.attr_sup})
			.. gt.getRow({'!colspan="2"', 'Plural'},                                     forms.attr_plur_pos)
		end

		str = str
		.. gt.getRow({'!colspan="2"'},                                               {'!colspan="3"', 'Predikativt'})
		.. gt.getRow({'!rowspan="2"', 'Singular'},              {'!', 'Utrum'},      forms.pred_sing_utrum_pos,         {'|rowspan="3"', forms.pred_komp},     {'|rowspan="3"', forms.pred_sup})
		.. gt.getRow(                                           {'!', 'Neutrum'},    forms.pred_sing_neutrum_pos)
		.. gt.getRow({'!colspan="2"', 'Plural'},                                     forms.pred_plur_pos)
		.. gt.getRow({'!colspan="5"', comparation_text})
		.. gt.getRow({'!colspan="2" class="min"', 'Adverbavledning'},                adv_cell)
	else
		str = str
		.. gt.getRow({'!class="main min" rowspan="2" colspan="2"', 'Böjningar&nbsp;av ' .. meta.pagename .. '&nbsp;' .. meta.meanings}, {'!', 'Positiv'})
		.. gt.getRow({'!', 'Attributivt'})
		.. gt.getRow({'!rowspan="2"', 'Obestämd<br/>singular'}, {'!', 'Utrum'},      forms.attr_obest_sing_utrum_pos)
		.. gt.getRow(                                           {'!', 'Neutrum'},    forms.attr_obest_sing_neutrum_pos)
		.. gt.getRow({'!rowspan="2"', 'Bestämd<br/>singular'},  {'!', 'Maskulinum'}, forms.attr_best_sing_mask_pos)
		.. gt.getRow(                                           {'!', 'Alla'},       forms.attr_best_sing_alla_pos)
		.. gt.getRow({'!colspan="2"', 'Plural'},                                     forms.attr_plur_pos)
		.. gt.getRow({'!colspan="2"'},                                               {'!', 'Predikativt'})
		.. gt.getRow({'!rowspan="2"', 'Singular'},              {'!', 'Utrum'},      forms.pred_sing_utrum_pos)
		.. gt.getRow(                                           {'!', 'Neutrum'},    forms.pred_sing_neutrum_pos)
		.. gt.getRow({'!colspan="2"', 'Plural'},                                     forms.pred_plur_pos)
		.. gt.getRow({'!colspan="3"', comparation_text})
		.. gt.getRow({'!colspan="2" class="min"', 'Adverbavledning'},                adv_cell)
	end

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

	return str
end

function export._getCategories(forms, meta)
	local str                                             = ""
	local neuter_needs_to_but_has_not_been_cleared        = not meta.neuter_clear and meta.attr and meta.pos
	local undecided_if_adjective_can_describe_a_person    = not meta.pers_clear
	local undecided_if_adjective_has_an_adverb_derivative = not meta.adv_clear
	local has_common_inflection_pattern                   = not meta.alt_paradigm
	local uses_alternative_template                       = mw.ustring.sub(meta.templatename, 1, mw.ustring.len(alternative_paradigm_templatename)) == alternative_paradigm_templatename
	
	if neuter_needs_to_but_has_not_been_cleared then
		str = str .. "[[Kategori:Wiktionary:sv-adj/Saknar neutrum-parameter]]"
	end

	if undecided_if_adjective_can_describe_a_person then
		str = str .. "[[Kategori:Wiktionary:sv-adj/Saknar pers-parameter]]"
	end

	if undecided_if_adjective_has_an_adverb_derivative then
		str = str .. "[[Kategori:Wiktionary:sv-adj/Saknar adv-parameter]]"
	end

	if has_common_inflection_pattern and uses_alternative_template then
		str = str .. "[[Kategori:Wiktionary:sv-adj/Använder fel mall]]"
	end
	
	return str
end

return export