Modul:sv-adj
Fra sv:Modul:sv-adj.
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 = "-usam"
local periphrastic_templatename_suffix = "-peri"
local irregular_templatename_suffix = "-ureg"
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 = "Kan også gradbøyes med '''mer''' og '''mest'''."
else
if is_uncomparable then
comparation_text = "Gradbøyes ikke."
elseif uses_mainly_periphrastic_comparation then
comparation_text = "Gradbøyes med '''mer''' og '''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øyning 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"', 'Ubestemt<br/>entall'}, {'!', 'Felleskjønn'}, forms.attr_obest_sing_utrum_pos, {'|rowspan="5"', forms.attr_komp}, {'!rowspan="2"'})
.. gt.getRow( {'!', 'Intetkjønn'}, forms.attr_obest_sing_neutrum_pos)
.. gt.getRow({'!rowspan="2"', 'Bestemt<br/>entall'}, {'!', 'Hankjønn'}, forms.attr_best_sing_mask_pos, forms.attr_best_sing_mask_sup)
.. gt.getRow( {'!', 'Alle'}, forms.attr_best_sing_alla_pos, {'|rowspan="2"', forms.attr_sup})
.. gt.getRow({'!colspan="2"', 'Flertall'}, forms.attr_plur_pos)
else
str = str
.. gt.getRow({'!rowspan="2"', 'Ubestemt<br/>entall'}, {'!', 'Felleskjønn'}, forms.attr_obest_sing_utrum_pos, {'|rowspan="5"', forms.attr_komp}, {'!rowspan="2"'})
.. gt.getRow( {'!', 'Intetkjønn'}, forms.attr_obest_sing_neutrum_pos)
.. gt.getRow({'!rowspan="2"', 'Bestemt<br/>entall'}, {'!', 'Hankjønn'}, forms.attr_best_sing_mask_pos, {'|rowspan="3"', forms.attr_sup})
.. gt.getRow( {'!', 'Alle'}, forms.attr_best_sing_alla_pos)
.. gt.getRow({'!colspan="2"', 'Flertall'}, forms.attr_plur_pos)
end
else
str = str
.. gt.getRow({'!rowspan="2"', 'Ubestemt<br/>entall'}, {'!', 'Felleskjønn'}, forms.attr_obest_sing_utrum_pos, {'|rowspan="2"', forms.attr_komp}, {'!rowspan="2"'})
.. gt.getRow( {'!', 'Intetkjønn'}, forms.attr_obest_sing_neutrum_pos)
.. gt.getRow({'!rowspan="2"', 'Bestemt<br/>flertall'}, {'!', 'Hankjønn'}, forms.attr_best_sing_mask_pos, forms.attr_komp_mask, forms.attr_best_sing_mask_sup)
.. gt.getRow( {'!', 'Alle'}, forms.attr_best_sing_alla_pos, {'|rowspan="2"', forms.attr_komp}, {'|rowspan="2"', forms.attr_sup})
.. gt.getRow({'!colspan="2"', 'Flertall'}, forms.attr_plur_pos)
end
str = str
.. gt.getRow({'!colspan="2"'}, {'!colspan="3"', 'Predikativt'})
.. gt.getRow({'!rowspan="2"', 'Entall'}, {'!', 'Felleskjønn'}, forms.pred_sing_utrum_pos, {'|rowspan="3"', forms.pred_komp}, {'|rowspan="3"', forms.pred_sup})
.. gt.getRow( {'!', 'Intetkjønn'}, forms.pred_sing_neutrum_pos)
.. gt.getRow({'!colspan="2"', 'Flertall'}, forms.pred_plur_pos)
.. gt.getRow({'!colspan="5"', comparation_text})
.. gt.getRow({'!colspan="2" class="min"', 'Adverbsavledning'}, adv_cell)
else
str = str
.. gt.getRow({'!class="main min" rowspan="2" colspan="2"', 'Bøyning av ' .. meta.pagename .. ' ' .. meta.meanings}, {'!', 'Positiv'})
.. gt.getRow({'!', 'Attributivt'})
.. gt.getRow({'!rowspan="2"', 'Ubestemt<br/>entall'}, {'!', 'Felleskjønn'}, forms.attr_obest_sing_utrum_pos)
.. gt.getRow( {'!', 'Intetkjønn'}, forms.attr_obest_sing_neutrum_pos)
.. gt.getRow({'!rowspan="2"', 'Bestemt<br/>entall'}, {'!', 'Hankjønn'}, forms.attr_best_sing_mask_pos)
.. gt.getRow( {'!', 'Alle'}, forms.attr_best_sing_alla_pos)
.. gt.getRow({'!colspan="2"', 'Flertall'}, forms.attr_plur_pos)
.. gt.getRow({'!colspan="2"'}, {'!', 'Predikativt'})
.. gt.getRow({'!rowspan="2"', 'Entall'}, {'!', 'Felleskjønn'}, forms.pred_sing_utrum_pos)
.. gt.getRow( {'!', 'Intetkjønn'}, forms.pred_sing_neutrum_pos)
.. gt.getRow({'!colspan="2"', 'Flertall'}, 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/Mangler intetkjønnsparameter]]"
end
if undecided_if_adjective_can_describe_a_person then
str = str .. "[[Kategori:Wiktionary:sv-adj/Mangler personparameter]]"
end
if undecided_if_adjective_has_an_adverb_derivative then
str = str .. "[[Kategori:Wiktionary:sv-adj/Mangler adverbparameter]]"
end
if has_common_inflection_pattern and uses_alternative_template then
str = str .. "[[Kategori:Wiktionary:sv-adj/Bruker feil mal]]"
end
return str
end
return export