Simplifier la rédaction d’articles dans Boop!

Fin octobre j’inaugurais la refonte de mon site web personnel en promettant d’expliquer pas à pas les étapes qui mèneraient à une nouvelle version de celui-ci. Le mois de novembre a cependant défilé bien plus vite que je ne le pensais. Mon chômage ayant débuté début décembre, je peux enfin replacer mes priorités sur les projets qui me tiennent à cœur. Alors reprenons.

Simplifier le balisage avec Markdown

La première chose qui m’a émerveillé lorsque j’ai appris à faire du web il y a quelques années, c’est qu’il suffisait d’écrire du texte dans un fichier et de l’ouvrir dans un navigateur pour avoir un site fonctionnel. Mais pour rendre ce site Internet lisible par les navigateurs, il est aussi nécessaire de structurer vos fichiers au format HTML. En soi rien de bien compliqué, mais cela peut vite devenir lourd. Un paragraphe, par exemple, doit être entouré de « balises » <p> :

<p>Mon paragraphe.</p>

Une liste quant à elle se définit de cette manière :

<ul>
    <li>Un élément de la liste</li>
    <li>Un autre élément</li>
    <li>Et un troisième</li>
</ul>

Personnellement, j’ai autre chose à faire que de toujours penser à définir correctement mes balises. C’est là que le Markdown rentre en jeu. Il s’agit aussi d’un langage de balisage, mais celui-ci se veut plus léger et naturel pour un humain. Mes deux exemples précédents deviennent ainsi :

Mon paragraphe.

Il n’y a aucun balisage, c’est normal. Et pour la liste :

- Un élément de la liste
- Un autre élément
- Et un troisième

De simples tirets, c’est beaucoup plus simple, non ? Ce fut donc la première amélioration que j’ai apporté à Boop!, mon générateur de sites statiques. Pour cela, il me suffit de tester l’extension d’un fichier, si celui-ci se termine par .md, je passe le contenu du fichier au parseur Markdown pour qu’il le transforme en HTML, puis j’écris enfin le résultat dans un nouveau fichier (voir le commit introduisant le changement).

Ce fut aussi l’occasion de déroger à ma règle non-officielle de ne reposer sur aucun code extérieur : j’avais mieux à faire que de réécrire un parseur complet de Markdown depuis zéro. Je me base donc sur le paquet Markdown, disponible via la commande pip.

Boopsy, mon système de templating

J’avais ensuite un autre soucis. En effet, je souhaitais que tous les articles partagent la même structure HTML et notamment :

  • le même fichier de style CSS ;
  • le titre de l’article dans la balise <title /> ainsi que dans une balise <h1 /> ;
  • l’affichage de la date de publication de l’article ;
  • des liens pour revenir à l’accueil en haut et en bas de page.

Pour cela j’ai pas mal tergiversé sur la meilleure manière de faire afin de répondre du mieux possible à mon besoin tout en limitant le plus possible le code à écrire. J’aurais pu me baser sur un système de templating déjà existant tel que Jinja2, mais j’avais envie de créer quelque chose de plus simple.

Après avoir longuement lu l’article de Ned Batchelder, « A template engine » sur AOSA, et avoir joué un petit peu de mon côté, j’ai sorti un système de template (nommé Boopsy) très simplifié par rapport à l’original : en à peine 60 lignes de code, j’avais déjà un système fonctionnel (voir le commit introduisant le changement).

Ce système est évidemment largement améliorable mais constitue une bonne première étape qui fait exactement ce dont j’ai besoin.

Encore un petit effort

Il va me rester une dernière petite étape à terminer avant de commencer à réfléchir au contenu du site : la génération du flux RSS des articles pour permettre de suivre ce blog facilement. Le reste des fonctionnalités que je pourrais envisager ensuite sont plutôt de l’ordre du confort et pourront attendre.

Je devrais en principe mettre moins de temps cette fois-ci pour donner des nouvelles !

Revenir à la série