Projet:Scribunto/Guide/Exemple 3

Introduction

modifier

Il 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).

local 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

modifier

Remarques

modifier

On 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")