Est-ce qu’une solution ne pourrait pas être d’utiliser sphinx, et de passer une bonne fois pour toutes au ReST ? Je sais que cela serait une décision à ne pas prendre à la légère, et cela nécessiterait une conversion (unique, cela dit) en ReST de l’ensemble du Markdown actuellement sauvegardé, mais cela me semble la solution la plus simple sur le long terme.
Sphinx permet l’export en LaTeX (et de là, en PDF), en HTML et en ePub, donc précisément ce qu’on cherche à obtenir. La syntaxe ReST est assez comparable à celle du zMarkdown en termes de complexité :
- quelques trucs sont plus difficiles, comme l’insertion d’image inline, ou la mise en exposant (:sup:`texte`) ;
- un certain nombre d’autres sont équivalents, comme le gras, l’italique, les titres, les listes à puces, ou encore les tableaux « complexes » ;
- quelques trucs sont plus simples, comme les citations ou les blocs « attention » qui utilisent l’indentation plutôt que
|
en début de chaque ligne.
Quant aux fonctionnalités, voici ce que j’ai pu relever.
Fonctionnalités présentes dans le zMarkdown et qu’il est possible d’obtenir de manière parfaitement identique avec le ReST étendu de sphinx :
- gras et italique ;
- titres de toutes sortes de niveaux ;
- listes à puces, et listes numérotées, avec niveaux d’imbrication multiples ;
- exposants et indices ;
- ligne horizontale ;
- liens ;
- images inline et block : dans ce dernier cas, possibilité de la mettre à droite, au milieu ou à gauche, de réduire sa taille, de lui ajouter une légende ;
- notes de bas de page ;
- code inline et block : dans ce dernier cas, possibilité de coloration syntaxique grâce à Pygments, de numéroter les lignes et de surligner certaines lignes, et de fournir une légende ;
- blocs de citation, avec possibilité de donner l’auteur de la citation ;
- blocs de maths et maths inline, les maths étant rédigées en LaTeX : l’export peut se faire en HTML+CSS, en MathML, ou de telle manière que MathJax prenne le relai ;
- blocs "attention", "caution", "danger", "error", "hint", "important", "note", "tip", "warning", "admonition" ;
- mise en forme spécifique pour des touches de clavier (
||Espace||
chez nous) ;
- tableaux simples et tableaux complexes, avec possibilité de fournir une légende ;
- commentaires.
Fonctionnalités présentes dans le zMarkdown dont je n’ai pas trouvé d’équivalent exact :
- texte barré ;
- abréviations : il est possible de définir une abréviation en un endroit donné du texte, mais je n’ai pas l’impression qu’elle s’applique aux autres occurrences du même mot (à vérifier) ;
- mettre un bloc de texte en centré / à droite : il existe une balise pour centre du texte, mais elle est deprecated et elle ajoute du gras à la mise au centre ;
- remplacement automatique de certains caractères, comme
---
pour —
;
- smileys ;
- insertion d’une vidéo ;
- bloc secret (mais cf. ci-dessous, ça peut s’implémenter avec les blocs génériques) ;
- il ne semble pas possible d’imbriquer les balises inline, genre
***one shot*, gros !**
(c’est la principale limitation).
Fonctionnalités qui ont été demandées dans le zMarkdown sans être encore intégrées, mais disponibles en ReST sphinx :
- blocs génériques pour les théorèmes, les démonstrations, etc. ;
- liens internes au document, en particulier vers les titres intérieurs aux sections ;
- syntaxe spécifique pour les citations d’ouvrage ou d’article.
Fonctionnalités du ReST sphinx qui n’ont pas été demandées mais pourraient trouver preneur si elles étaient proposées :
- encart sur le côté ;
- les balises de code inline sont utilisées pour plein de choses qui disposent d’un marquage spécifique en ReST, notamment le nom d’un exécutable, le nom d’un fichier ou répertoire, et une série de menus à suivre pour accéder à une fonctionnalité donnée.
Par ailleurs, ReST a explicitement prévu dans sa syntaxe la possibilité de créer facilement de nouveaux types de blocs ou de syntaxe inline. J’ajouterais que ReST permet de définir des titres et sous-titres de document, et d’inclure du ReST provenant d’autres fichiers, ce qui permettrait sans doute de simplifier le regroupement des différents extraits d’un même contenu.
Bref, je pense que l’idée mérite d’être étudiée.
EDIT : je reviens sur le fait que ReST a prévu explicitement dans sa syntaxe de pouvoir créer de nouveaux types de blocs ou de syntaxe inline. Cela a pour conséquence que parmi toutes les fonctionnalités du zMarkdown qui sont manquantes à l’heure actuelle :
- le barré peut être obtenu en créant une nouvelle syntaxe inline à l’aide des moyens fournis nativement par ReST ;
- le texte centré / à droite, le bloc secret et les vidéos peuvent être obtenus en créant une nouvelle directive, là encore selon les moyens prévus nativement par ReST ;
- les abréviations (si elles ne sont réellement pas disponibles) nécessitent d’étendre la syntaxe des liens / notes de bas de page / citations d’ouvrage, qui fonctionnent toutes selon la même logique ;
- les smileys et la typo seraient plus compliquées, parce que ReST ne semble pas prévoir nativement la possibilité de modifier juste le texte brut ;
- le plus compliqué, ce serait à priori l’imbrication de différents codes inline : je soupçonne que le parseur ne refait pas un tour sur le contenu d’une « unité inline », et que c’est ça qui manque pour pouvoir faire de l’imbrication.