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[voir] [modifier] [historique] [purger]

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