Classe de gestion de bbcodes v1.0 a

Contenu du snippet

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.

A voir également

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.