Bon, c'est que la première version, il ne faudra donc pas m'en vouloir si elle n'est pas très complète. En effet, il me reste à résoudre le problème des balises imbriquées et des BBCodes spéciaux du genre [a href=adresse]Nom
/a. Mais ce code sera régulièrement mis à jour en même temps que je dévelloppe mon applet de création et de prévisualisation de BBCodes.
Source / Exemple :
import java.util.ArrayList;
public class Source
{
// Balisaes autorisées
public static String[] Balises = {"h2", "em", "strong", "q", "blockquote", "cite","code", "ul", "li", "p"};
// Conteneur de la source sauvée
private StringBuffer SourceSauve = new StringBuffer(65000);
// Conteneur de la source courante
private StringBuffer SourceCourante = new StringBuffer(65000);
// Tableau des balises ouvertes
private ArrayList OBal = new ArrayList();
// Tableau des balises fermées
private ArrayList FBal = new ArrayList();
// Constructeur
public Source()
{
}
// METHODES DE RECUPERATION
// Récupération de la source
public String RecupSource()
{
return SourceCourante.toString();
}
// Récupération du nombre de balises ouvertes
public int RecupNOBal()
{
return OBal.size()-FBal.size();
}
// Récupération de la source convertie en xhtml
public String RecupXHtml()
{
StringBuffer SB = new StringBuffer(SourceCourante.toString());
int Nb=0;
while(Nb<SB.length())
{
if(SB.charAt(Nb)=='[')
{
SB.setCharAt(Nb,'<');
}
if(SB.charAt(Nb)==']')
{
SB.setCharAt(Nb,'>');
}
Nb++;
}
return SB.toString();
}
// METHODES DE SAUVEGARDE
// Methode de sauvegarde de la source
public boolean Sauver()
{
if(Verifier(SourceCourante))
{
SourceSauve.replace(0, SourceCourante.length(), SourceCourante.toString());
return true;
}
else
return false;
}
// Méthode de restauration de la source sauvegardée
public void Restaurer()
{
SourceCourante.replace(0, SourceCourante.length(), SourceSauve.toString());
}
// METHODES D'EDITION
public boolean DefSource(String S)
{
SourceCourante.replace(0, SourceCourante.length(), S);
if(S!="")
{
if(Verifier(SourceCourante)) { return true; } else { return false; }
}
else return true;
}
public void Ajouter(String S)
{
SourceCourante.append(S);
}
public void AjouterBalise(String B, boolean O)
{
if(O)
{
OBal.add(OBal.size(), B);
Ajouter("[" + B + "]");
}
else
{
FBal.add(FBal.size(), B);
Ajouter("+ B + "");
}
}
// METHODES PRIVEES
boolean EstBalise(String S)
{
int i=0;
for(i=0; i<Balises.length; i++)
{
if(Balises[i].equals(S))
{
return true;
}
}
return false;
}
void RecupBalise(int pos, boolean O, StringBuffer S)
{
String var="";
if(O)
{
while((pos<S.length())&&(S.charAt(pos)!=']'))
{
var+=S.charAt(pos);
pos++;
}
if(EstBalise(var))
{
OBal.add(OBal.size(), var);
}
}
else
{
while((pos<S.length())&&(S.charAt(pos)!=']'))
{
var+=S.charAt(pos);
pos++;
}
if(EstBalise(var))
{
FBal.add(FBal.size(), var);
}
}
}
// Verification du code source
private boolean Verifier(StringBuffer S)
{
OBal.clear();
FBal.clear();
int Nb=0;
while(Nb<S.length())
{
if(S.charAt(Nb)=='[')
{
if(S.charAt(Nb+1)=='/')
{
RecupBalise(Nb+2,false,S);
}
else
{
RecupBalise(Nb+1,true,S);
}
}
Nb++;
}
if(OBal.size()==FBal.size())
{
int i;
for(i=0; i<OBal.size(); i++)
{
if(!OBal.get(i).equals(FBal.get(i)))
{
return false;
}
}
return true;
}
else
{
return false;
}
}
// Débuggage du code source
private boolean Debug(String S)
{
return false;
}
}
Conclusion :
Voilà, laissez vos commentaires et donnez moi des conseils précieux pour optimiser le code, je m'en inspirerai pour mes prochaines versions.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.