Module:Thésaurus
La documentation pour ce module peut être créée à Module:Thésaurus/Documentation
-- Module de démonstration de construction d'une page de thesaurus à partir de données lua
local p = {}
local cadre = {}
-- renvoie le wikicode du lien vers la page de `entree` si il s’agit d’un titre
-- valide, ou le texte brut sinon
function wikifier(entree)
local code = ''
local page = mw.title.new(entree)
if not page or page.exits == false then
return entree
--return cadre:expandTemplate{ title = entree } --
end
local valeurs = {lien = page.prefixedText, label = entree}
return formater('[[${lien}|${label}]]', valeurs)
end
-- Renvoie une version formaté en wikicode de liste aborescente des entrées founies
function lister(entrees, profondeur)
local code = ''
local indenteur = string.rep('*', profondeur)
for entree, valeur in pairs(entrees) do
if type( entree ) == 'number' then
-- simple entrée sans sous-entrée
code = string.format('%s%s %s\n', code, indenteur, wikifier(valeur))
else
-- entrée avec des sous entrées
code = string.format('%s%s %s\n%s', code, indenteur, wikifier(entree), lister(valeur, profondeur + 1))
end
end
return code
end
-- Renvoie l’interpolation de la chaîne `texte` avec les variable nommé de `tableau`
--cf : http://lua-users.org/wiki/StringInterpolation
function formater(texte, tableau)
return (texte:gsub('($%b{})', function(mot) return tableau[mot:sub(3, -2)] or mot end))
end
-- Renvoie le patron de wikitexte à utiliser pour formater chaque section
function formatage_html_section()
-- à noter que ${liste} n'est pas indenté pour que le wikicode soit convenablement
-- interprété
return [==[
== ${titre} ==
<div class="boite">
<div class="liste-colonnes" style="column-width: 26em; -webkit-column-width: 26em; -moz-column-width: 26em; vertical-align: top; text-align: left;">
${liste}
<div style="clear:both"></div>
</div>
</div>
]==]
end
-- Renvoie une version formaté en sections et listes de wikicode du `thesaurus`
function sectionner(thesaurus)
local format = formatage_html_section()
local sections = {}
for section, entrees in pairs(thesaurus) do
local valeurs = {titre = section, liste = lister(entrees, 1)}
local texte = formater(format, valeurs)
table.insert(sections, texte)
end
return table.concat(sections)
end
-- Renvoie le titre du module où devraient être stocker les données du thésaurus
-- pour le `theme` et la `langue` fournie
function titre_module(theme, langue)
return string.format('Module:Thésaurus:%s/%s/données', theme, langue )
end
-- Renvoie une version formaté en wikicode du thesaurus demandé
function p.wikicode(frame)
cadre = frame
local contexte = frame:getParent()
local theme = contexte.args[1]
local langue = contexte.args[2] or 'français'
local titre = titre_module(theme, langue)
local donnees = mw.loadData(titre)
local entete = frame:expandTemplate{ title = 'en-tête thésaurus', args = { theme }}
return string.format('%s\n%s', entete, sectionner(donnees.thesaurus))
end
return p