Salut,
Ces derniers temps, je m’intéresse au comportement du Markdown quand on imbrique plusieurs styles (le but est d’avoir des cas à tester pour le Markdown, mais aussi pour le LaTeX qu’il permet de générer). Je tombe sur quelques problèmes, généralement liés à une ambiguïté du Markdown. Pour la plupart d’entre eux, on sait « intuitivement » quel comportement on aimerait, pour d’autres c’est un peu plus compliqué.
La démarche est la suivante : on a sept choses qu’on pourrait qualifier de style : le gras, l'italique, le barré, les touches, les indices, les exposants, et les liens. Et on a également différents éléments que je vais tester : les mentions avec des pseudos simples @Karnaj, les mentions avec des pseudos composés @Karnaj-test, les abréviations ZdS, les notes de bas de page 1, les smileys et les maths 2+2=4.
Avec un seul style
gras @Karnaj gras
gras @Karnaj-test gras
gras ZdS gras
gras 1 gras
gras gras
gras 2+2=4 gras
italique @Karnaj italique
italique @Karnaj-test italique
italique ZdS italique
italique 1 italique
italique italique
italique 2+2=4 italique
barré @Karnaj barré
barré @Karnaj-test barré
barré ZdS barré
barré 1 barré
barré barré
barré 2+2=4 barré
touche @Karnaj touche
touche @Karnaj-test touche
touche ZdS touche
touche 1 touche
touche touche
touche 2+2=4 touche
indice @Karnaj indice
indice @Karnaj-test indice
indice ZdS indice
indice 1 indice
indice indice
indice 2+2=4 indice
exposant @Karnaj exposant
exposant @Karnaj-test exposant
exposant ZdS exposant
exposant [mdown] exposant^
exposant exposant
exposant 2+2=4 exposant
Avec un seul style, quelques petits soucis apparaissent déjà.
Gras et mentions composées
La syntaxe pour les pseudos composés est **@pseudo-composé**
ce qui pose problème à l’intérieur d’un contenu en gras.
**gras @**Karnaj-test** gras**
Nous donne gras @Karnaj-test gras.
D’ailleurs, le comportement est très bizarre. On a l’impression que zmd comprend qu’il y a un premier texte en gras (donc le **gras @Karnaj, @**
et un second (le ** gras**
)… Sauf que le deuxième @
n’est pas en gras !
Exposant et notes
Là, c’est le ^
présent pour indiquer une note de bas de page qui interfère avec la syntaxe pour les exposants.
^exposant [^mdown] exposant^
Nous donne exposant [mdown] exposant^.
Le ^
utilisé pour mettre en forme la note est compris comme un ^
qui termine la note de bas de page.
Liens et notes de bas de page
Et le ]
utilisé pour indiquer une note pose problème lorsqu’il est placé dans un lien.
[lien [^mdown] lien](./)
Nous donne lien 1 lien
Là encore, le comportement actuel est assez bizarre ; alors que le ]
du Markdown semble arrêter le lien (ce qui signifierait que zmd le considère comme la fin du lien et pas de la note), la note de bas de page, elle est bien prise en compte !
À ce niveau, on peut également se demander ce que l’on veut comme résultat pour le lien de la note de bas de page. Mène-il-toujours au bas de la page ou pas ? (Et comment bien traduire le comportement en LaTeX ?). Ce problème se pose également lorsqu’on a une mention dans un lien. Le comportement actuel, certainement le plus simple à tout point de vue, est qu’il n’y a pas de lien vers le profil mentionné.
On remarque de plus que les styles gras, italique et barré ne s’appliquent pas aux mathématiques, ce qui est, il me semble, voulu.
Les images des smileys, elles, gardent toujours la même taille et ne sont pas barrées. D’ailleurs, tant qu’on parle des smileys, il y a d’autres soucis qu’on peut observer. Par exemple, le smiley ^^
ne passe pas en exposant ; ^exposant ^^ exposant^
donne exposant ^ exposant^. Il faudrait regarder plus en détail ce qui peut poser problème du côté des smileys.
Avec deux styles
Lorsqu’on imbrique deux styles, il y a généralement deux types de problèmes. Les premiers sont liés aux problèmes que l’on a obtenu avec un seul style, et les deuxièmes à des ambigüités entre les deux styles.
gras italique @Karnaj italique gras
gras *italique @Karnaj-test italique* gras
gras italique ZdS italique gras
gras italique 1 italique gras
gras italique italique gras
gras italique 2+2=4 italique gras
italique gras @Karnaj gras italique
italique gras @Karnaj-test gras italique
italique gras ZdS gras italique
italique gras 1 gras italique
italique gras gras italique
italique gras 2+2=4 gras italique
gras barré @Karnaj barré gras
gras ~~barré @Karnaj-test barré~~ gras
gras barré ZdS barré gras
gras barré 1 barré gras
gras barré barré gras
gras barré 2+2=4 barré gras
barré gras @Karnaj gras barré
barré gras @Karnaj-test gras barré
barré gras ZdS gras barré
barré gras 1 gras barré
barré gras gras barré
barré gras 2+2=4 gras barré
gras touche @Karnaj touche gras
gras ||touche @Karnaj-test touche|| gras
gras touche ZdS touche gras
gras touche 1 touche gras
gras touche touche gras
gras touche 2+2=4 touche gras
touche gras @Karnaj gras touche
touche gras @Karnaj-test gras touche
touche gras ZdS gras touche
touche gras 1 gras touche
touche gras gras touche
touche gras 2+2=4 gras touche
gras indice @Karnaj indice gras
gras ~indice @Karnaj-test indice~ gras
gras indice ZdS indice gras
gras indice 1 indice gras
gras indice indice gras
gras indice 2+2=4 indice gras
indice gras @Karnaj gras indice
indice gras @Karnaj-test gras indice
indice gras ZdS gras indice
indice gras 1 gras indice
indice gras gras indice
indice gras 2+2=4 gras indice
gras exposant @Karnaj exposant gras
gras ^exposant @Karnaj-test exposant^ gras
gras exposant ZdS exposant gras
gras exposant [mdown] exposant^ gras
gras exposant exposant gras
gras exposant 2+2=4 exposant gras
exposant gras @Karnaj gras exposant
exposant gras @Karnaj-test gras exposant
exposant gras ZdS gras exposant
exposant **gras [mdown] gras** exposant^
exposant gras gras exposant
exposant gras 2+2=4 gras exposant
gras lien @Karnaj lien gras
gras [lien @Karnaj-test lien](./) gras
gras lien ZdS lien gras
gras lien 1 lien gras
gras lien lien gras
gras lien 2+2=4 lien gras
lien gras @Karnaj-test gras lien
italique barré @Karnaj barré italique
italique barré @Karnaj-test barré italique
italique barré ZdS barré italique
italique barré 1 barré italique
italique barré barré italique
italique barré 2+2=4 barré italique
barré italique @Karnaj italique barré
barré italique @Karnaj-test italique barré
barré italique ZdS italique barré
barré italique 1 italique barré
barré italique italique barré
barré italique 2+2=4 italique barré
italique touche @Karnaj touche italique
italique touche @Karnaj-test touche italique
italique touche ZdS touche italique
italique touche 1 touche italique
italique touche touche italique
italique touche 2+2=4 touche italique
touche italique @Karnaj italique touche
touche italique @Karnaj-test italique touche
touche italique ZdS italique touche
touche italique 1 italique touche
touche italique italique touche
touche italique 2+2=4 italique touche
italique indice @Karnaj indice italique
italique indice @Karnaj-test indice italique
italique indice ZdS indice italique
italique indice 1 indice italique
italique indice indice italique
italique indice 2+2=4 indice italique
indice italique @Karnaj italique indice
indice italique @Karnaj-test italique indice
indice italique ZdS italique indice
indice italique 1 italique indice
indice italique italique indice
indice italique 2+2=4 italique indice
italique exposant @Karnaj exposant italique
italique exposant @Karnaj-test exposant italique
italique exposant ZdS exposant italique
italique exposant [mdown] exposant^ italique
italique exposant exposant italique
italique exposant 2+2=4 exposant italique
exposant italique @Karnaj italique exposant
exposant italique @Karnaj-test italique exposant
exposant italique ZdS italique exposant
exposant *italique [mdown] italique* exposant^
exposant italique italique exposant
exposant italique 2+2=4 italique exposant
italique lien @Karnaj lien italique
italique lien @Karnaj-test lien italique
italique lien ZdS lien italique
italique lien 1 lien italique
italique lien lien italique
italique lien 2+2=4 lien italique
lien italique @Karnaj italique lien
lien italique @Karnaj-test italique lien
lien italique ZdS italique lien
lien italique 2+2=4 italique lien
barré touche @Karnaj touche barré
barré touche @Karnaj-test touche barré
barré touche ZdS touche barré
barré touche 1 touche barré
barré touche touche barré
barré touche 2+2=4 touche barré
touche barré @Karnaj barré touche
touche barré @Karnaj-test barré touche
touche barré ZdS barré touche
touche barré 1 barré touche
touche barré barré touche
touche barré 2+2=4 barré touche
barré indice @Karnaj indice barré
barré indice @Karnaj-test indice barré
barré indice ZdS indice barré
barré indice 1 indice barré
barré indice indice barré
barré indice 2+2=4 indice barré
indice barré @Karnaj barré~ indice~
indice barré @Karnaj-test barré~ indice~
indice barré ZdS barré~ indice~
indice barré 1 barré~ indice~
indice barré barré~ indice~
indice barré 2+2=4 barré~ indice~
barré exposant @Karnaj exposant barré
barré exposant @Karnaj-test exposant barré
barré exposant ZdS exposant barré
barré exposant [mdown] exposant^ barré
barré exposant exposant barré
barré exposant 2+2=4 exposant barré
exposant barré @Karnaj barré exposant
exposant barré @Karnaj-test barré exposant
exposant barré ZdS barré exposant
exposant ~~barré [mdown] barré~~ exposant^
exposant barré barré exposant
exposant barré 2+2=4 barré exposant
barré lien @Karnaj lien barré
barré lien @Karnaj-test lien barré
barré lien ZdS lien barré
barré lien 1 lien barré
barré lien lien barré
barré lien 2+2=4 lien barré
lien barré @Karnaj-test barré lien
touche indice @Karnaj indice touche
touche indice @Karnaj-test indice touche
touche indice ZdS indice touche
touche indice 1 indice touche
touche indice indice touche
touche indice 2+2=4 indice touche
indice touche @Karnaj touche indice
indice touche @Karnaj-test touche indice
indice touche ZdS touche indice
indice touche 1 touche indice
indice touche touche indice
indice touche 2+2=4 touche indice
touche exposant @Karnaj exposant touche
touche exposant @Karnaj-test exposant touche
touche exposant ZdS exposant touche
touche exposant [mdown] exposant^ touche
touche exposant exposant touche
touche exposant 2+2=4 exposant touche
exposant touche @Karnaj touche exposant
exposant touche @Karnaj-test touche exposant
exposant touche ZdS touche exposant
exposant ||touche [mdown] touche|| exposant^
exposant touche touche exposant
exposant touche 2+2=4 touche exposant
touche lien @Karnaj lien touche
touche lien @Karnaj-test lien touche
touche lien ZdS lien touche
touche lien 1 lien touche
touche lien lien touche
touche lien 2+2=4 lien touche
lien touche @Karnaj touche lien
lien touche @Karnaj-test touche lien
indice exposant @Karnaj exposant indice
indice exposant @Karnaj-test exposant indice
indice exposant ZdS exposant indice
indice exposant [mdown] exposant^ indice
indice exposant exposant indice
indice exposant 2+2=4 exposant indice
exposant indice @Karnaj indice exposant
exposant indice @Karnaj-test indice exposant
exposant indice ZdS indice exposant
exposant ~indice [mdown] indice~ exposant^
exposant indice indice exposant
exposant indice 2+2=4 indice exposant
indice lien @Karnaj lien indice
indice lien @Karnaj-test lien indice
indice lien ZdS lien indice
indice lien 1 lien indice
indice lien lien indice
indice lien 2+2=4 lien indice
lien indice @Karnaj indice lien
lien indice @Karnaj-test indice lien
exposant lien @Karnaj lien exposant
exposant lien @Karnaj-test lien exposant
exposant lien ZdS lien exposant
exposant [lien [mdown] lien](./) exposant^
exposant lien lien exposant
exposant lien 2+2=4 lien exposant
lien exposant @Karnaj exposant lien
lien exposant @Karnaj-test exposant lien
lien exposant ZdS exposant lien
Mention composée dans style dans gras
Sûrement une conséquence du problème de mention composée dans du gras.
**gras *italique @**Karnaj-test** italique* gras**
Nous donne gras *italique @Karnaj-test italique* gras.
On perd l’italique, sûrement parce que le premier *
est dans le premier texte en gras, et le second dans le second texte en gras (donc une superposition).
On a ce problème avec tous les styles dans du gras, pas seulement l’italique.
Bien sûr on a également des soucis avec une mention composée dans du gras dans un autre style, mais c’est le problème de la mention composée dans du gras, on ne va pas la renoter.
Notes dans style dans exposant
On a le même soucis avec les notes et les exposants.
^exposant ~~barré [^mdown] barré~~ exposant^
Nous donne exposant ~~barré [mdown] barré~~ exposant^.
Notes dans style dans lien
Et on l’a avec les liens et les exposants.
[lien **gras [^mdown] gras** lien](./)
Nous donne lien gras 1 gras lien.
Indices et barré
Et une nouvelle ambiguïté avec les indices ~
et le texte barré ~~
. Des indices dans du texte barré ne posent pas de problème, mais l’inverse si.
~indice ~~barré ZdS barré~~ indice~
Nous donne indice barré ZdS barré~ indice~.