Bon, je viens d'essayer et ça coince sur des cas que j'ai passé sous silence dans ma question, comme quoi je ne sais toujours pas comment simplifier un problème quand je pose une question

Je voulais éviter de fermer la possibilité de passer à des balises un peu plus "wiki-like" un jour (sans retirer le support pour les balises actuelles, rassure-toi 0² !). Ça implique de généraliser un peu plus mon histoire de balises
[table][^] et
[^] qui sont contenues l'une dans l'autre : les balises avec plusieurs significations selon le contexte.
Par exemple, une liste pourrait être formée avec ce type de syntaxe :
* Premier point
* Deuxième point
* Troisième point
Ce qui signifie que la balise
* peut débuter une liste (premier point) ou la continuer (deuxième et troisième points). Avec l'algo du message
./14 ça fonctionne, mais avec celui de
./23 -
./34 -
./35 ça ne marche plus, la priorité est donnée au troisième point qui se met à former une liste tout seul.
Autre chose qui n'est plus géré et que j'aurais bien aimé conserver (même si j'ai également oublié d'en parler, je m'en rends compte uniquement grâce aux tests qui échouent) : les balises qui sont une sous-chaines d'une autre balise. Par exemple je pensais qu'il serait pratique de pouvoir utiliser des underscores pour _mettre en italique_ et des doubles underscores pour __souligner__, ou une configuration équivalente, je n'y ai pas encore vraiment réfléchi mais beaucoup de markups proposent ce type de syntaxe aujourd'hui (Slack, What's App, etc.) qui fait gagner pas mal de temps à l'écriture. Pour l'instant ça fonctionne avec l'algo
./14 à condition de s'interdire de résoudre un autre candidat que le 1er, c'est à dire remplacer
foreach (candidat in candidats) par
candidat = candidats[0] et parcourir une seule fois la liste de tous les candidats après avoir trouvé toutes les balises.
Dans les deux cas ce sont des choses que j'ai oubliées de mentionner dans ma question, donc désolé Meowcate ton idée était bonne et fonctionne correctement, j'ai simplement mal posé la question. Je pense que mes deux problèmes restants peuvent être résolus en retardant le remplacement des balises tant qu'il reste une ambiguïté, c'est à dire tant qu'elles sont superposées à d'autres balises dont on ne sait pas encore si elles font partie d'un candidat complet ou non.
Je vais voir comment écrire ça, merci encore d'avoir pris le temps de faire des suggestions, à force de combiner toutes les idées je devais m'en sortir
