La documentation pour ce module peut être créée à Module:fr-flexion2/Documentation
--==============================================================================
--
-- Module:fr-flexion2
--
-- Génération des boites de flexions pour la langue française,
-- utilisé par le Modèle:fr-flexion
--
-- écrit par: Maëlan (inspiré du Module:fr-flexion écrit par GaAs fin 2014)
-- date: 2024-02
-- licence: CC-BY-SA 3.0
--
--==============================================================================
-- les bibliothèques dont on dépend:
Params = require('Module:paramètres')
Pron = require('Module:prononciation')
-- notre module:
local M = {}
-- les «types» de flexions pris en charge par le modèle:
local types = {
-- = { "", "s", "e", "es", "", "", "", "" },
= { ms="", mp="s", fs="e", fp="es",
pron_ms="", pron_mp="", pron_fs="", pron_fp="" },
-- = { "in", "ins", "ine", "ines", "ɛ̃", "ɛ̃", "in", "in" },
= { ms="in", mp="ins", fs="ine", fp="ines",
pron_ms="ɛ̃", pron_mp="ɛ̃", pron_fs="in", pron_fp="in" },
-- = { "ain", "ains", "aine", "aines", "ɛ̃", "ɛ̃", "ɛn", "ɛn" },
= { ms="ain", mp="ains", fs="aine", fp="aines",
pron_ms="ɛ̃", pron_mp="ɛ̃", pron_fs="ɛn", pron_fp="ɛn" },
-- = { "er", "ers", "ère", "ères", "e", "e", "ɛʁ", "ɛʁ" },
= { ms="er", mp="ers", fs="ère", fp="ères",
pron_ms="e", pron_mp="e", pron_fs="ɛʁ", pron_fp="ɛʁ" },
-- TODO
}
local liste_noms_types = {}
for nom, _ in pairs(types) do
table.insert(liste_noms_types, nom)
end
-- teste si une chaîne se termine par une autre chaîne
-- (cf https://stackoverflow.com/a/72921992 ):
function string:endswith(suffix)
return self:sub(-#suffix) == suffix
end
-- génère un message d’erreur en Wikicode:
function erreur(msg)
-- TODO:
local txt = '<strong class="error">Usage erroné de {{modèle|fr-flexion}} : '
txt = txt .. msg
txt = txt .. '</strong>'
txt = txt .. "]"
return txt
end
-- fonction d’entrée, invoquée par ]:
function M.boite_flexions(frame)
local args = Params.process(frame:getParent().args, {
= { enum = liste_noms_types },
= { alias_of = "type" },
= {},
= {},
= {},
= {},
= {},
= {},
= {},
= {},
= {},
= {},
= {},
= {},
= { enum = {"non", "muet", "aspiré"}, default="non" },
= { default = mw.title.getCurrentTitle().text },
})
-- pré-remplit les paramètres en fonction du type de flexion:
if args ~= nil then
local t = types]
args = t.ms
args = t.mp
args = t.fs
args = t.fp
args = t.pron_ms
args = t.pron_mp
args = t.pron_fs
args = t.pron_fp
end
-- extrait la prononciation du radical:
local pron_radic = nil
if args ~= nil then
if not args:endswith(args) then
return erreur("pron.ms ne se termine pas comme attendu")
end
pron_radic = args:sub(1, -#args-1)
end
if args ~= nil then
if not args:endswith(args) then
return erreur("pron.mp ne se termine pas comme attendu")
end
if pron_radic == nil then
pron_radic = args:sub(1, -#args-1)
elseif args ~= pron_radic .. args then
return erreur("plusieurs prononciations contradictoires")
end
end
if args ~= nil then
if not args:endswith(args) then
return erreur("pron.fs ne se termine pas comme attendu")
end
if pron_radic == nil then
pron_radic = args:sub(1, -#args-1)
elseif args ~= pron_radic .. args then
return erreur("plusieurs prononciations contradictoires")
end
end
if args ~= nil then
if not args:endswith(args) then
return erreur("pron.fp ne se termine pas comme attendu")
end
if pron_radic == nil then
pron_radic = args:sub(1, -#args-1)
elseif args ~= pron_radic .. args then
return erreur("plusieurs prononciations contradictoires")
end
end
-- TODO:
return ""
end
-- publication de notre module:
return M