Ce programme permet de transformer un texte balisé avec BBcode en un texte XHTML standard strict. Il offre une grande souplesse d'utilisation grâce à la possibilité de définir des balises et des comportements personnalisés.
La plupart des outils équivalents ne produisent pas du code XHTML strict, notamment lorsque l'utilisateur superpose ou croise des balises (exemple : Ceci [b]est mon[i]texte[/b] ![/i]), ou encore lorsqu'il oublie d'en fermer certaines.
Les sources du programme sont distribuées sous les termes de la licence GNU GPL.
Pré-requis :
Lancement de la compilation :
$ make
Un fichier exécutable 'bbcode' est créé.
Un programme de test nommé 'bbcode' est fourni dans le paquetage. Le texte
source est lu sur l'entrée standard et le résultat (XHTML) est dirigé sur la sortie standard.
Vous pouvez utiliser les commandes et les opérateurs standards pour rediriger l'une ou l'autre vers/depuis un fichier :
$ echo "Mon [b]texte[/b] en BBcode" | ./bbcode $ ./bbcode < mon-fichier-bbcode
Vous pouvez également intégrer le code source dans votre propre programme C++ :
#include <iostream>
#include <ostream>
#include "bbcode.hpp"
// ...
int main()
{
bbcode::tagPool pool;
bbcode::defaultTag* tag;
// [b]
pool.add("b", tag = new bbcode::simpleReplaceTag("b"));
tag->addAutoClose("");
// [i]
pool.add("i", tag = new bbcode::simpleReplaceTag("i"));
tag->addAutoClose("");
// [u]
pool.add("u", tag = new bbcode::simpleReplaceTag("u"));
tag->addAutoClose("");
std::cout << bbcode::bbcodeTransformer(bbcode::htmlSpecialTransformer(text), pool);
}
Pour un exemple d'utilisation plus poussée, consultez les fichiers sources du
paquetage (notamment test.cpp), les commentaires sont souvent très instructifs.
Le texte généré est conforme à XHTML strict.
Fermeture automatique des balises : utilisation de la chaîne vide avec addAutoClose().
pool.add("b", tag = new bbcode::simpleReplaceTag("b"));
tag->addAutoClose("");
donnera en sortie :
Test de <b>sortie<i> XHTML</i></b> strict
pour le texte BBcode suivant :
Test de [b]sortie[i] XHTML[/b] strict
La fermeture automatique peut également se produire dès qu'une certaine balise est trouvée : il
suffit d'indiquer le nom de la balise en paramètre de addAutoClose(). Par exemple,
le code suivant fermera automatiquement une balise [*] à l'ouverture d'une autre balise [*] ou
à la fermeture d'une balise [/list] :
pool.add("*", tag = new bbcode::simpleReplaceTag("b"));
tag->addAutoClose("*");
tag->addAutoClose("/list");
tag->addAutoClose("");
pool.add("list", tag = new bbcode::simpleReplaceTag("ul"));
Possibilité de spécifier quelles balises sont autorisées/interdites à l'intérieur
d'un certain ensemble de balises (allowedParentTags et forbiddenParentTags).
Pour plus d'informations, consultez le fichier bbcode.hpp.
Ajout de balises personnalisées et de traitements personnalisés : il suffit de créer
une nouvelle spécialisation de la classe bbcode::tag ou bbcode::defaultTag.
Pour un exemple d'utilisation, consultez les classes customTag_XXX dans le
fichier test.cpp.
Version 0.1.1. Transformation automatique des URL en liens (classe magicLinkTransformer). Le point (.)
ou la virgule (,) finale est également retiré. Possibilité de spécifier une longueur maximale d'affichage
pour les liens (paramètre maxLength du constructeur).
Version 0.1.2. Transformation automatique des adresses commençant par "www.".