Problème avec le gras + italique mélangé

Le problème exposé dans ce sujet a été résolu.

Il y a un petit souci dans l'interprétation du markdown quand on mélange gras et italique (comme c'est souvent le cas pour parler de langues). Si j'écris *Wein**s***, le gras+italique se poursuit au-delà de mon s, car le code généré est le suivant.

1
<em>Wein<strong>s<strong><em>

En revanche, si j'écris *Wein**s** * avec une espace entre les astérisque, ça fonctionne bien (code généré ci-dessous), mais du coup, j'ai une espace en trop dans mon texte (ce qui est un peu con quand je me fais chier à mettre une espace insécable juste derrière).

1
<em>Wein<strong>s</strong> </em>

Ça a l'air relativement nouveau comme bogue, car comme je le disais, c'est une situation qu'on rencontre très souvent pour parler de langues, donc je m'en serais rendu compte plus tôt.

+0 -0

Test testtest test

Comme tu peux le voir ça marche très bien ici. En revanche tu as, dans ton cas, probablement, d'autres étoiles qui trainent dans le paragraphe et donc il va prolonger l'italique jusqu'à cet endroit. Si tu n'a pas eu le problème avant c'est probablement que tu n'en n'avait jamais mit plusieurs dans le même paragraphe.

Le problème ici est que le markdown à une syntaxe ambiguë. Avec des suites d'étoiles il y a plusieurs combinaisons possibles et syntaxiquement correct. Il se peut aussi que le markdown déconne (un pasteur basé sur les regex avec un langage aussi ambiguë c'est une source de problème) mais dans tous les cas il y a des cas où le markdown se plantera forcément car la syntaxe est foireuses à ce niveau.

Mais j'ai une solution pour toi : utilise la syntaxe alternative à base de _. Utilise par exemple les étoiles pour le gras et les underscores pour l'italique et ça va supprimer une majorité des ambiguïtés

J'arrive à reproduire le bug inverse : mettre un bout en italique dans un mot en gras : tes*ttt* (**tes*ttt***) (le texte qui suit est d'ailleurs en gras, mais seulement si aucune ligne n'est sauté ; ça devient franchement amusant. :D – ça doit être dû à l'* qui reste, et qui recolle celle de la suite du texte).

Le contournement avec les _ marche, heu, bizarrement : tes_ttt_ (**tes_ttt_**), mais testtt (__tes*ttt*__).

+0 -0

Les règles qui s'appliquent aux * ne sont pas exactement les mêmes que celles qui s'appliquent aux _. Il faudrait retrouver les différences précises, mais en gros, le parseur considère que trouver des _ au milieu d'un mot est possible (le cas du code non mis en forme avec des identifiants en snake_case) alors qu'une * est toujours une tentative de mise en forme.

Mais comme le dit Kje, Markdown est un langage à la base un peu pourri parce que sa syntaxe est complètement floue sur bien des points… il y aura donc toujours des ambiguïtés, qui sont donc tranchées arbitrairement.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte