Bonjour à tous,
Je suis en train de développer un éditeur de texte dédié à un langage particulier (essentiellement des mots-clés).
Cet éditeur doit pouvoir supporter les opérations les plus usuelles : couper/copier/coller, coloration syntaxique et undo/redo.
J'ai donc choisi un JTextPane pour l'implémentation.
Pour la coloration syntaxique j'utilise un DefautStyledDocument sur lequel je surcharge les méthodes insertString, remove et replace.
Sur l'appel de ces méthodes, je parse mon texte et je colorise les différents tokens trouvés.
Le problème survient lors de la gestion du undo/redo.
Il existe dans Swing une implémentation toute faite du undo/redo via UndoableEditListener et UndoManager.
Mais lorsque je dépile les évènements enregistrés lors de la saisie de mon texte, je m'aperçois qu'il prend en compte également les évènements de parsing et de coloration.
Exemple concret :
Si on considère que le mot 'IF' est un mot-clé que l'éditeur doit coloriser en rouge.
J'éxécute la séquence suivante :
- je tape la lettre 'I'
- je tape la lettre 'F' => l'éditeur parse le texte, détecte le mot-clé 'IF' et le colorise en rouge.
- je fais UNDO (via un raccourci-clavier) => l'éditeur décolorise le texte 'IF'.
- je re-fais UNDO => l'éditeur bouge le curseur (caret) vers la gauche (il dépile l'action parsing)
- je re-re-fais UNDO => l'éditeur supprime enfin la lettre 'F'.
Ma question est donc la suivante :
Y'a t-il un moyen de filtrer les évènements que le undoableListener doit enregistrer ?
Quand je fais UNDO après avoir entré une lettre, je veux qu'il supprime la lettre tout simplement.
J'espère avoir été assez clair dans mes explications
Merci de vos réponses.
Partager