Appliquer un style sur du texte, par reconnaissance syntaxique

Appliquer un style sur du texte, par reconnaissance syntaxique - Java - Programmation

Marsh Posté le 06-05-2003 à 09:29:21    

Voilà, dans un TextComponent à définir (JEditorPane à première vue), je souhaite afficher du XML. J'aimerais afficher de manière distincte les commentaires, les clés, les valeurs, les chaînes "<", ">" et "</"... Bref formater mon XML pour en faciliter la lecture, y compris pendant l'édition.
 
J'ai survelé le Java Tutorial, mais c'est un peu léger comme ressource sur le sujet. Pourriez-vous me fournir quelques pistes ?


---------------
Le site de ma maman
Reply

Marsh Posté le 06-05-2003 à 09:29:21   

Reply

Marsh Posté le 06-05-2003 à 10:19:33    

[:drapo]
 
tu cherches des renseignements sur quoi : le parsing ou l'embedding, ou les deux ?


---------------
get amaroK plugin
Reply

Marsh Posté le 06-05-2003 à 10:25:52    

Les deux, je suppose. L'analyse du document doit être facilitée par quelques classes fournies par Sun, de même que la mise à jour de l'affichage. C'est encore un peu flou pour moi.


---------------
Le site de ma maman
Reply

Marsh Posté le 06-05-2003 à 15:09:39    

[:drasche]


---------------
Le site de ma maman
Reply

Marsh Posté le 06-05-2003 à 15:11:00    

y'avait deja eu un topic la dessus, mais j'arrive pas a le retrouver.
 
Perso j'en avais fait, mais c'etait juste de la reconnaissance de mot cle, et non de zone comme tu le souhaite la (mais si tu veux je peux te developper comment j'avais fait)

Reply

Marsh Posté le 06-05-2003 à 15:14:50    

j'avais un code qui faisait ça, mais j'arrive pas à remettre la main dessus :(
vais chercher encore.


---------------
NP :
Reply

Marsh Posté le 06-05-2003 à 15:16:16    

Alors je connais à peine le sujet mais vala ce que je vais pouvoir en dire :
* effectivement, un JEditorPane ou un JTextPane semblent appropriés pour l'affichage et les définitions de styles ;
* pour le traitement, c'est toi qui vas devoir te le palucher. Les regexp font des merveilles dans ce domaine.
 
Bref : java.util.regex, javax.swing.text pour les Styles, StyleConstraints, etc... qui vont pouvoir donner à un texte spécifié l'affichage et le format désirés.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 06-05-2003 à 15:54:53    

Hum... Intéressant. chrisbk, walli, Taiche > avez-vous des sources d'inspiration ? J'imagine qu'il doit y avoir une notion de refreshrate pour recalculer l'affichage, de même que des optimisations locales par rapport au curseur...


---------------
Le site de ma maman
Reply

Marsh Posté le 06-05-2003 à 15:59:45    

Bin moi je parlais surtout lors du premier affichage. Après, lors de l'édition, je me baserais sur un système d'événements plutôt que de faire du refresh, ça me semble plus adapté.
Si tu veux un bon exemple, t'as Jext ( http://www.jext.org ) qui est un éditeur de code Open Source et où tu pourras trouver des exemples. Je sais pas si ça correspondra à tes besoins mais ça fait déjà un exemple.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 06-05-2003 à 16:08:04    

Cherrytree a écrit :

Hum... Intéressant. chrisbk, walli, Taiche > avez-vous des sources d'inspiration ? J'imagine qu'il doit y avoir une notion de refreshrate pour recalculer l'affichage, de même que des optimisations locales par rapport au curseur...


 
bon moi c'etait vraiment QUE pour les mots cles. C'etait en C++ sans aucune lib mais bon, C++ ou java ca changera rien...
 
J'etais parti sur un arbre N-aire. Chaque noeud contenait un caractere, et un boolean indiquant si le noeud etait terminal ou non (et bien sur une liste de fils)
 

  • l'utilisateur tape quelque chose :

je recup le caractere, regarde dans mon arbre si il y a un fils contenant ce caractere. si oui et si le noeud est marque comme terminal je colorie, sinon ben rien (je decolorie, meme)
 
 

  • a deplacer le curseur

j'analyse  le mot sur lequel il se trouve, et envoie le debut du mot dans l'arbre
 
ca necessite pas mal de reglage pour marcher comme il faut (par exemple faire gaffe a ne pas colorier "int" dans "integer" si "int" est un mot cle), faire gaffe aussi aux blagues possibles (espace en milieu d'un mot cle deja colorie, backspace, saut de ligne et tout ca), mais dans l'ensemble ca marchait bien
 
niveau optim, en C++ j'avais la possibilite de desactiver le rafraichissement de la fenetre pendant mes calculs / changement de couleur. En java je sais pas (je connais bpc trop peu java pour te dire si oui ou non c possible)
 
edit : pour les zones ca doit etre plus complexe puisqu'il faut retrouver le "contexte" dans lequel se situe le mot..... avec un parser ok, mais ca m'etonnerait que ca soit viable niveau perf
 


Message édité par chrisbk le 06-05-2003 à 16:10:16
Reply

Marsh Posté le 06-05-2003 à 16:08:04   

Reply

Marsh Posté le 06-05-2003 à 16:14:00    

Merci en tous cas.


---------------
Le site de ma maman
Reply

Marsh Posté le 06-05-2003 à 19:17:15    

moi je vien de faire un projet de traduction et d'annimation d'algo et pour mettre en forme g utilisé se bon vieu html c cool et c facil pour l'utilisateur de paramètrer mais le xml ça doit commencer à devenir coton ... :jap:

Reply

Marsh Posté le 07-05-2003 à 16:37:56    

artemice a écrit :

moi je vien de faire un projet de traduction et d'annimation d'algo et pour mettre en forme g utilisé se bon vieu html c cool et c facil pour l'utilisateur de paramètrer mais le xml ça doit commencer à devenir coton ... :jap:  


Génial !


---------------
Le site de ma maman
Reply

Marsh Posté le 07-05-2003 à 17:13:09    

:pfff:  :kaola: facile c******

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed