Projet:Scribunto/Guide/Exemple 3
Introduction
modifierIl existe des articles pour différents éléments de date. Par exemple le « 12 septembre 2012 » peut pointer sur : 12 septembre, sur Septembre 2012 et sur 2012.
Le propos du modèle/module est de recevoir en paramètre (d'appel) une date comme "12 septembre 2012" et de générer la forme suivante : [[12 septembre|12]] [[septembre 2012|septembre]] [[2012]].
On suppose ici qu'on donne en paramètre une date valide (composée de 3 éléments, un jour, un mois et une année).
Code
modifierlocal z = {}
z.datifie(frame)
local pframe = frame:getParent() -- on recupère le parent (le modèle)
local args = pframe.args -- les paramètres passés au modèle
local result -- pour stocker le résultat en construction
-- le jour (note : il faudrait valider qu'on a bien un paramètre)
local jour = string.gsub(args[1], "(%w)%s*(%w)%s*(%w)", "%1")
-- le mois
local mois = string.gsub(args[1], "(%w)%s*(%w)%s*(%w)", "%2")
-- l'année
local année = string.gsub(args[1], "(%w)%s*(%w)%s*(%w)", "%3")
-- mettre ici les vérifications sur les paramètres
-- on ajoute le jour
result = "[[" .. jour .. " " .. mois .. "|" .. jour .. "]] [["
-- on ajoute le mois
result = result .. mois .. " " .. annee .. "|" .. mois .. "]] [["
-- on ajoute l'année
result = result .. annee .. "]]"
return result
end
return z
Commentaires
modifierRemarques
modifierOn se reportera encore une fois au String Manipulation du Reference Manual de Lua pour mieux comprendre les fonctions liées à string (manipulation de chaînes de caractères).
Limitations de ce code
modifier- le code ci-dessus ne fait aucune vérification
- il ne vérifie pas qu'il y a effectivement un paramètre
- il ne vérifie pas qu'il y a effectivement 3 « mots » dans ce paramètres (ni plus, ni moins)
- il ne vérifie pas la validité des éléments → on peut avoir une table des mois valides, on peut vérifier que le jour et l'année sont des nombres, on peut vérifier que le mois est compris entre 1 et 12…
Évolution du code
modifierÀ titre d'exercice vous pouvez ensuite ajouter :
- une option permettant de choisir la forme à créer (par exemple ne pas faire de lien vers l'année, vers le jour…)
- effectuer une vérification (au moins sommaire) des données :
- la validité du jour (compris entre 1 et 31), voire en fonction du mois (jusqu'à 28, 29, 30 ou 31 selon les cas)
- la validité du mois (correspondant à un mois existant, via une table des mois existants)
- de gérer des mois numériques (convertion numéro du mois → nom du mois) ou des formats de date du type "12/12/2012" (séparateur "/" et non espace)
- de prendre la précaution de mettre les lettres du mois en minuscule (Janvier → janvier)
- de supporter les mois sous forme abrégée ("janv." → "janvier")