Skip to content

Entries tagged "perl".

Chronicle: générateur de blog statique

Voilà, ce premier billet va donc présenter le moteur de blog utilisé: Chronicle. En effet, je souhaitait un moteur de blog assez simple et qui génère du contenu statique (comme nanoblogger, utilisé par heaumer), et après de nombreuses recherches je suis resté sur Chronicle qui était le seul, excepté nanoblogger, à générer un blog statique (en plus y a même un script cgi si jamais je veux activer les commentaires).

Le principe est donc simple: vous écrivez vos billets dans un des langages de formattage disponibles, c'est-à-dire Markdown, Textile, ou directement du HTML. Une fois votre article écrit, vous lancez chronicle avec les options kivonbien, et votre blog est généré en html statique, et il ne reste plus qu'à le rendre accessible via n'importe que serveur web.

Néanmoins, il a fallu modifier quelques petites choses pour avoir le fonctionnement voulu. Heureusement c'est du perl et ça se laisse tripoter facilement.

Le thème

Les cinq thèmes fournis avec Chronicle ne sont pas parfait, en fait ils sont tous moches, sauf le thème « simple », mais qui a certains défauts (les liens en jaune clair quand on passe dessus, c'est immonde). Je suis donc parti de ce thème que j'ai légèrement modifié. La modification se fait très facilement, quelques valeurs à changer dans les CSS, quelques modifications dans les .templates utilisés pour générer l'html et le travail est fait. Le thème final est disponible ici.

Coloration syntaxique

Ensuite vient le problème de la coloration syntaxique, qui est assez indispensable au niveau esthétique pour un blog qui est destiné à parler programmation. Hélas, il n'y a pas de coloration syntaxique dans Chronicle, mais ça peut s'ajouter facilement.

Au niveau du logiciel utilisé pour la coloration, mon choix s'est d'abord porté vers Pygments via XML-RPC (le serveur XML-RPC doit avoir une fonction highlight_code qui prends en premier paramètre le code à colorer et en second paramètre le langage, ce qui est par exemple le cas du script écrit par delroth), mais finalement j'utilise la coloration syntaxique de Vim (via Text::VimColor), que j'avais d'abord éliminé car dans mes souvenirs ça ne convenait pas, ce qui était le cas pour paste.pl, qui devait éxécuter Vim pour colorer le texte (ce qui n'est pas génial niveau sécu pour un script CGI), mais dans ce cas-ci, le script étant éxécuté par l'utilisateur uniquement à la génération, ça ne pose aucun problème.

J'ai aussi ajouté la possibilitée d'utiliser Kate, un autre module de coloration syntaxique directement implémenté en Perl. L'utilisateur peut donc choisir la méthode qu'il préfère en l'indiquant dans le fichier de configuration (paramètre highlight qui est mis soit à kate, vim ou pygments).

Pour ma part, j'utilise donc la coloration avec Vim, car plus de langages sont supportés (520 fichiers dans /usr/local/share/vim/vim72/syntax/), et dans le cas de langages peu utilisés, il y a peu de chances d'avoir une coloration dans Pygments ou avec Kate, tandis que dans Vim, oui (c'est par exemple le cas de arc).

Pour spécifier du code à colorer, il doit commencer par "highlight:langage", avec langage qui est un langage supporté par la méthode de coloration que vous avez choisie.

Je mets à votre disposition le diff, pour que vous puissiez patcher Chronicle si jamais vous avez envie d'avoir une coloration syntaxique de dingue, et voilà le résultat:

(defun hello (who)
  (format t "Hello, ~a!~%" who))

Autres améliorations possibles

On pourrait aussi ajouter un paramètre qui permettrait à l'utilisateur d'utiliser une commande shell de son choix pour formatter le code (un script python pour utiliser Pygments par exemple, c'est plus simple que d'utiliser XML-RPC), et on pourrait faire de même pour le formattage du texte (pour utiliser mdown ou d'autres logiciels). Je le ferait peut être un jour si l'envie me vient.