J'ai déjà pu m'exprimer dans le passé sur mon enthousiasme pour txt2tags, le langage de markup léger qui a moins la côte que markdown, mais qui est plus pratique à tous les points de vue. Je viens encore d'en avoir la démonstration il y a 5 minutes.
Sur mon projet "lionwiki-t2t", que j'utilise comme wiki pour consigner mes notes au quotidien, j'avais besoin d'un petit système pour afficher l'avancée de certains projets. Je me suis dit qu'il y aurait peut-être un petit module php à créer, ou faire des modifications dans le moteur principal ainsi que bidouiller le CSS ou que sais-je encore.
Bon, pourquoi pas. Et puis je me suis souvenu qu'il y avait txt2tags derrière tout ça, pourquoi s'embêter ? Le moteur de wiki contient en effet un fichier de configuration txt2tags qui permet d'avoir un préprocesseur et un postprocesseur pour modifier le texte entré à l'infini.
Je décide d'une nouvelle balise simple pour mon wiki : crochet ouvrant, valeur en pourcentage, signe pourcent, crochet fermant, ce qui donnera pour une valeur de 10 % :
Du coup j'ouvre le fichier config.t2t à la racine de mon site et j'entre simplement :
%% progress bar
%!postproc: '\[(\d+)%\]' '<progress value="\1" max="100"></progress>'
c'est une expression régulière "postproc" (qui effectue cela à la fin de la convertion html), calquée sur la syntaxe perl, qui prend en entrée la syntaxe définie plus haut, et qui va donner en sortie la syntaxe html pour créer une simple barre de progression.
Décortiquons un peu le code, pour ceux qui ne connaitraient pas bien les regex (ça peut impressionner au début mais c'est assez logique au final) :
%postproc:
est pour signifier à txt2tags que c'est une instruction de postprocesseur.
'\[(\d+)%\]'
est la partie en entrée. L'antislash est pour indiquer que le crochet ouvrant n'est pas un symbole spécial (un set de caractères à choisir dans une liste), mais un "vrai" crochet qui se retrouvera dans le texte à analyser. Dans les regex les parenthèses sont pour les substitutions. Ici on va substituer n'importe quel nombre décimal (symbolisé par \d+), et le remplacer en sortie par le \1. Ensuite le % est le % dans notre syntaxe customisée, puis il y a le crochet fermant.
'<progress value="\1" max="100"></progress>'
est la partie en sortie. C'est du code html, et on a juste rajouté le \1 qui signifie comme on a dit plus haut que c'est là qu'on va mettre la substitution demandée.
Donc maintenant dans lionwiki-t2t si on tape :
- Projet 1 [4%]
- Projet 2 [25%]
- Projet 3 [18%]
Au final on obtient ça :
C'est très souple, parce que si jamais je veux rajouter en fin de ligne la valeur de pourcentage pour l'avoir immédiatement à l'oeil, il suffit juste de rajouter une substitution comme ça, à la fin de ligne :
%!postproc: '[(\d+)%]' '<progress value="\1" max="100"></progress> (\1%)'
et on aura :
Voilà pourquoi je préfère txt2tags à tous les autres systèmes.