Module:quechua-déclinaisons

Bonjour, vous êtes venu ici pour chercher la signification du mot Module:quechua-déclinaisons. Dans DICTIOUS, vous trouverez non seulement toutes les significations du dictionnaire pour le mot Module:quechua-déclinaisons, mais vous apprendrez également son étymologie, ses caractéristiques et comment dire Module:quechua-déclinaisons au singulier et au pluriel. Tout ce que vous devez savoir sur le mot Module:quechua-déclinaisons est ici. La définition du mot Module:quechua-déclinaisons vous aidera à être plus précis et correct lorsque vous parlerez ou écrirez vos textes. Connaître la définition deModule:quechua-déclinaisons, ainsi que celles d'autres mots, enrichit votre vocabulaire et vous fournit des ressources linguistiques plus nombreuses et de meilleure qualité.

 Documentation

Ce module définit une fonction pour générer les tables de déclinaisons des mots en langues quechuas.

Fonction pour modèles

generateInflections

Génère les tables de déclinaisons du mot quechua donné.

Paramètres
  • 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.
Type de retour
string

Liste des sous-pages

Voir aussi


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