Question sur un filtre... [Radeox] - Java - Programmation
MarshPosté le 19-04-2007 à 11:09:08
Salut,
J'aurais bien posé ma question sur un topic spécifique regex parce que je pense que la réponse se résumera à cela. Mais je n'en ai pas trouvé et y aura peut-être une solution plus élégante/simple. Voilà, je tâche de développer un système qui convertit le langage Dokuwiki (ou tout du moins un équivalent plus simple) en HTML grâce à l'API Radeox. Jusque là, j'ai déjà fait quelques filtres, avec plus ou moins de difficulté et plus ou moins de réussite (ça en acquerra au fur-et-à-mesure). Je ne maîtrise pas tout à fait les regex, du coup je tâtonne. Actuellement, j'essaie de faire le filtre qui équivaut à la balise <pre> de HTML. Une ligne commençant par deux espaces est alors reconnue et tTout ce qui est dedans doit apparaître sous sa forme non interprétée... Pour le HTML, ça passe. Pour le langage Wiki, ça casse. Pour reprendre le lien plus haut, dans :
Texte avant DokuWiki supporte les textes en **gras**, //italique//, __souligné__ et ''à espace fixe''. Bien sûr, vous pouvez tous les **__//''combiner''//__**. Texte après
il va interpréter les filtres qui se trouvent à l'intérieur, ce que je ne veux pas. Quatre possibilités s'offrent à moi, mais je ne sais pas laquelle choisir : 1. Je modifie tous les filtres pour leur faire comprendre que s'ils se trouvent sur une ligne commençant par deux espaces (et sans * ni - ensuite, vu que ça serait alors une liste), ils ne doivent pas réagir. Solution très lourde à mettre en place mais c'est la seule qui me semble envisageable dans l'état actuel de mes connaissances 2. J'arrive à trouver une formulation propre aux regex qui fait la même chose en ne manipulant que le filtre <pre/>, de manière simple. Je ne sais absolument pas si ce système existe mais pourquoi pas? 3. Je trouve une fonctionnalité propre à radeox (ordre des filtres dans le fichier, fonction particulière dans la classe associée au filtre,...) qui réalise ce tour de passe-passe : quand je tombe sur ce filtre, je n'interprète rien de ce qui se trouve à l'intérieur. 4. Autre possibilité à laquelle je n'aurais pas pensé.
J'imagine que le problème a déjà dû être rencontré par d'autres utilisateurs de Radeox et qu'il ne doit pas être si compliqué que ça vu qu'il n'a rien de bien exotique. Mais je sèche un peu, là... Et j'ai la flemme d'adopter la solution 1, du coup, j'aimerais me l'épargner
Si quelqu'un peut m'aiguiller sur la voie qui mène à la solution, je lui en serais fort reconnaissant
--------------- Soyons ouverts d'esprit, mais pas au point de laisser notre cerveau s'enfuir.
Marsh Posté le 19-04-2007 à 11:09:08
Salut,
J'aurais bien posé ma question sur un topic spécifique regex parce que je pense que la réponse se résumera à cela. Mais je n'en ai pas trouvé et y aura peut-être une solution plus élégante/simple.
Voilà, je tâche de développer un système qui convertit le langage Dokuwiki (ou tout du moins un équivalent plus simple) en HTML grâce à l'API Radeox.
Jusque là, j'ai déjà fait quelques filtres, avec plus ou moins de difficulté et plus ou moins de réussite (ça en acquerra au fur-et-à-mesure). Je ne maîtrise pas tout à fait les regex, du coup je tâtonne.
Actuellement, j'essaie de faire le filtre qui équivaut à la balise <pre> de HTML. Une ligne commençant par deux espaces est alors reconnue et tTout ce qui est dedans doit apparaître sous sa forme non interprétée... Pour le HTML, ça passe. Pour le langage Wiki, ça casse. Pour reprendre le lien plus haut, dans :
Texte avant
DokuWiki supporte les textes en **gras**, //italique//, __souligné__ et ''à espace fixe''.
Bien sûr, vous pouvez tous les **__//''combiner''//__**.
Texte après
il va interpréter les filtres qui se trouvent à l'intérieur, ce que je ne veux pas.
Quatre possibilités s'offrent à moi, mais je ne sais pas laquelle choisir :
1. Je modifie tous les filtres pour leur faire comprendre que s'ils se trouvent sur une ligne commençant par deux espaces (et sans * ni - ensuite, vu que ça serait alors une liste), ils ne doivent pas réagir. Solution très lourde à mettre en place mais c'est la seule qui me semble envisageable dans l'état actuel de mes connaissances
2. J'arrive à trouver une formulation propre aux regex qui fait la même chose en ne manipulant que le filtre <pre/>, de manière simple. Je ne sais absolument pas si ce système existe mais pourquoi pas?
3. Je trouve une fonctionnalité propre à radeox (ordre des filtres dans le fichier, fonction particulière dans la classe associée au filtre,...) qui réalise ce tour de passe-passe : quand je tombe sur ce filtre, je n'interprète rien de ce qui se trouve à l'intérieur.
4. Autre possibilité à laquelle je n'aurais pas pensé.
J'imagine que le problème a déjà dû être rencontré par d'autres utilisateurs de Radeox et qu'il ne doit pas être si compliqué que ça vu qu'il n'a rien de bien exotique. Mais je sèche un peu, là... Et j'ai la flemme d'adopter la solution 1, du coup, j'aimerais me l'épargner
Si quelqu'un peut m'aiguiller sur la voie qui mène à la solution, je lui en serais fort reconnaissant
---------------
Soyons ouverts d'esprit, mais pas au point de laisser notre cerveau s'enfuir.