Ce module définit une fonction pour générer les tables de déclinaisons des mots en langues quechuas.
generateInflections
Génère les tables de déclinaisons du mot quechua donné.
1
(string
) : Le code de langue de la section.2
(string
, optionnel) : La forme au nominatif singulier non-possessif du mot. Le titre de la page est utilisé par défaut.string
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis la page Module:quechua-déclinaisons/Documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
local m_params = require("Module:paramètres")
local m_bases = require("Module:bases")
local p = {}
local data = mw.loadData("Module:quechua-déclinaisons/data")
local caseEndings = data.endings
local pronounsData = data.pronouns
--- Generate all inflections for the given word.
--- Normal forms:
--- * vowel ending:
--- ** sing: case
--- ** plur: "kuna" .. case
--- * consonants ending:
--- ** sing: case
--- ** plur: "kuna" .. case
--- Possessive forms:
--- * vowel ending:
--- ** 1s:
--- *** sing: "y" .. case
--- *** plur: "y" .. "kuna" .. case
--- ** 2s:
--- *** sing: "yki" .. case, except comitative, abessive, and distributive: "yki" .. case
--- *** plur: "yki" .. "kuna" .. case
--- ** 3s:
--- *** sing: "n" .. case, except comitative, and distributive: "ni" .. case
--- *** plur: "n" .. "kuna" .. case
--- ** 1pi:
--- *** sing: "nchik" .. case
--- *** plur: "nchik" .. "kuna" .. case
--- ** 1pe:
--- *** sing: "yku" .. case, except comitative, abessive, and distributive: "yku" .. case
--- *** plur: "yku" .. "kuna" .. case
--- ** 2p:
--- *** sing: "ykichik" .. case
--- *** plur: "ykichik" .. "kuna" .. case
--- ** 3p:
--- *** sing: "nku" .. case, except comitative, abessive, and distributive: "nku" .. case
--- *** plur: "nku" .. "kuna" .. case
--- * consonant ending: same as vowel but prefixed with "ni"
--- @param word string The word in its base form.
--- @param plural boolean If true, generate the plural forms. If false generate the singular form.
--- @param possessive boolean If true, generate the possessive form. If false, generate the non-possessive form.
--- @param possessivePerson number If `possessive` is true, the person from 1 to 6.
--- @param possessivePlural boolean If `possessive` is true, generate the plural form of the possessive.
--- @param inclusiveFirstPluralPerson boolean If `possessive` is true, and `possessivePerson` is 1,
--- generate the inclusive forms instead of the exclusive ones.
--- @return table A table containing the generated inflections.
local function generateInflections(
word,
plural,
possessive,
possessivePerson,
possessivePlural,
inclusiveFirstPluralPerson
)
local lastLetter = mw.ustring.sub(word, -1)
local endsWithVowel = lastLetter == "a" or lastLetter == "e" or lastLetter == "i" or
lastLetter == "o" or lastLetter == "u"
local inflections = {}
for case, endings in pairs(caseEndings) do
local ending = ""
local i = 1
if not possessive then
if not endsWithVowel and not plural then
i = 2
end
else
if not endsWithVowel then
ending = "ni"
end
if not plural then
i = 2
end
if not possessivePlural then
if possessivePerson == 1 then
ending = ending .. "y"
elseif possessivePerson == 2 then
ending = ending .. "yki"
if not plural and (case == "comitative" or case == "abessive" or case == "distributive") then
i = 1
end
elseif possessivePerson == 3 then
ending = ending .. "n"
if not plural and (case == "comitative" or case == "distributive") then
ending = ending .. "i"
i = 1
end
end
else
if possessivePerson == 1 then
if inclusiveFirstPluralPerson then
ending = ending .. "nchik"
else
ending = ending .. "yku"
if not plural and (case == "comitative" or case == "abessive" or case == "distributive") then
i = 1
end
end
elseif possessivePerson == 2 then
ending = ending .. "ykichik"
elseif possessivePerson == 3 then
ending = ending .. "nku"
if not plural and (case == "comitative" or case == "abessive" or case == "distributive") then
i = 1
end
end
end
end
if plural then
ending = ending .. "kuna"
i = 1
end
inflections = word .. ending .. endings.suffixes
end
return inflections
end
local cases = {
"nominative",
"accusative",
"dative",
"genitive",
"locative",
"terminative",
"ablative",
"instrumental",
"comitative",
"abessive",
"comparative",
"causative",
"benefactive",
"associative",
"distributive",
"exclusive",
}
--- Generate an inflections table for the given word.
--- If possessive-related arguments are set, the table will be collapsible.
--- @param langCode string The language code for the links.
--- @param word string The word.
--- @param possessivePerson number Optional. The possessive person from 1 to 6.
--- @param possessivePlural boolean Whether to generate the plural form of the possessive person.
--- @param inclusive boolean Optional. Whether to show the inclusive or exclusive forms of the 1st person plural.
--- @return string The generated table.
local function generateInflectionsTable(langCode, word, possessivePerson, possessivePlural, inclusive)
local isPossessive = possessivePerson ~= nil
local inflectionsSing, inflectionsPlur
if isPossessive then
inflectionsSing = generateInflections(word, false, true, possessivePerson, possessivePlural, inclusive)
inflectionsPlur = generateInflections(word, true, true, possessivePerson, possessivePlural, inclusive)
else
inflectionsSing = generateInflections(word, false, false)
inflectionsPlur = generateInflections(word, true, false)
end
local frame = mw.getCurrentFrame()
local wikicode = ""
if isPossessive then
local key = tostring(possessivePerson) .. (possessivePlural and "p" or "s")
if possessivePerson == 1 and possessivePlural then
key = key .. (inclusive and "i" or "e")
end
local pronounData = pronounsData
local title = mw.ustring.format(
"''%s'' (%s)",
m_bases.lien_modele(pronounData.pronoun, langCode),
pronounData.description
) .. "\n"
wikicode = frame:expandTemplate { title = "(", args = { title, fermer = "oui" } } .. "\n"
end
wikicode = wikicode .. '{| class="wikitable"\n|-\n! !! Singulier !! Pluriel\n'
for _, case in ipairs(cases) do
wikicode = wikicode .. mw.ustring.format(
"|-\n! %s\n| %s || %s\n",
caseEndings.name,
m_bases.lien_modele(inflectionsSing, langCode),
m_bases.lien_modele(inflectionsPlur, langCode)
)
end
wikicode = wikicode .. "|}\n"
if isPossessive then
wikicode = wikicode .. frame:expandTemplate { title = ")" } .. "\n"
end
return wikicode
end
--- Generate the collapsible inflections tables for the given word.
--- @param langCode string The language code for the links.
--- @param word string The word.
--- @return string The generated tables.
local function generateInflectionsTables(langCode, word)
local frame = mw.getCurrentFrame()
local wikicode = frame:expandTemplate { title = "(", args = {
mw.ustring.format("Déclisaisons de ''%s''", word),
fermer = "oui"
} } .. "\n"
wikicode = wikicode .. generateInflectionsTable(langCode, word)
wikicode = wikicode .. frame:expandTemplate { title = ")" } .. "\n"
wikicode = wikicode .. frame:expandTemplate { title = "(", args = {
mw.ustring.format("Formes possessives de ''%s''", word),
fermer = "oui"
} } .. "\n"
wikicode = wikicode .. generateInflectionsTable(langCode, word, 1, false)
wikicode = wikicode .. generateInflectionsTable(langCode, word, 2, false)
wikicode = wikicode .. generateInflectionsTable(langCode, word, 3, false)
wikicode = wikicode .. generateInflectionsTable(langCode, word, 1, true, true)
wikicode = wikicode .. generateInflectionsTable(langCode, word, 1, true, false)
wikicode = wikicode .. generateInflectionsTable(langCode, word, 2, true)
wikicode = wikicode .. generateInflectionsTable(langCode, word, 3, true)
wikicode = wikicode .. frame:expandTemplate { title = ")" }
return wikicode
end
--- Generate the collapsible inflections tables for the given word.
--- Used by the template {{quechua-déclinaisons}}
--- @param frame frame
--- Parameters:
--- args (string): The language code for the links.
--- args (string, optional): The word, defaults to the page’s title.
--- @return string The generated tables.
function p.generateInflections(frame)
local args = m_params.process(frame:getParent().args, {
= { required = true },
= { default = mw.title.getCurrentTitle().text },
})
return generateInflectionsTables(args, args)
end
return p