Pollen

2023-08-31

https://docs.racket-lang.org/pollen/

Pollen est un système de publication créé par Matthew Butterick. En fait, j’appellerais volontiers ça un système de programmation éditoriale. Je m’explique : Pollen est un système de publication dans lequel la dimension programmatique n’est pas annexe mais centrale, parce qu’il repose sur un langage de programmation orienté balisage.

Pour utiliser un point de comparaison, dans un système de publication comme Quarto, on a des fichiers de contenu, et on peut utiliser un langage de programmation (Lua) pour modifier le comportement du système via des scripts rédigés dans des fichiers à part. C’est le fonctionnement de Pandoc, le moteur de Quarto.

Pollen, lui, repose sur un langage de programmation (Racket) qui permet d’inclure du code directement dans les contenus. Si on veut utiliser Pollen pour convertir du Markdown en autre chose, on fait d’abord tourner un pré-processeur qui traite le code inclus dans les fichiers, puis on convertit vers le format désiré.

Pollen permet ainsi (entre autres) de définir une variable quelque part, et de l’utiliser partout ailleurs. Pour bien se représenter la souplesse de ce système, voici encore un point de comparaison. Le mécanisme de templating de Pandoc permet de définir une variable à certains endroits seulement : dans la commande Pandoc, ou bien en YAML (dans un fichier de métadonnées ou dans l’en-tête d’un fichier Markdown). Et on ne peut utiliser cette variable que dans un fichier de template. Exemple :

Métadonnées :

lang: en
author:
- Jane Doe
- John Smith

Template HTML :

<html lang="$if(lang)$$lang$$else$fr$endif$">
$for(author)$
<meta name="author" content"$author$">
$endfor$

HTML exporté :

<html lang="en">
<meta name="author" content"Jane Doe">
<meta name="author" content"John Smith">

Avec Pollen, on peut utiliser la variable n’importe où : dans un fichier de contenu, de template, de styles… Un exemple : imaginons qu’on fabrique un livre en html et pdf via Paged.js. Avec Pollen, on peut définir le titre courant dans les métadonnées et l’utiliser dans la feuille de styles CSS :

◊(define running-title "Titre courant")

CSS :

@page {
    @top-center {
        content: '◊running-title'
    }
}

CSS après avoir exécuté le pré-processeur de Pollen :

@page {
    @top-center {
        content: 'Titre courant'
    }
}

Le système est donc très séduisant conceptuellement pour qui voudrait créer des publications multi-formats avec une logique de programmation éditoriale poussée. Là où je m’interroge, c’est sur la syntaxe. Matthew Butterick défend avec conviction la syntaxe de Pollen, qui ressemble à celle de LaTeX, et qui constitue selon lui le meilleur compromis entre la verbosité d’un XML et l’économie d’un Markdown. C’est un choix défendable mais je pense qu’il restreint les possibilités de collaboration : on aura plus de difficulté à faire écrire des auteurs en Pollen qu’en Markdown ou en AsciiDoc, et donc à reproduire des expériences collaboratives comme celles décrites notamment par Julie Blanc et Nicolas Taffin.