Outils pour utilisateurs

Outils du site


public:specs_editeur_txt

Éditeur TXT

Objectif

Aider l'utilisateur à éditer des fichiers texte brut TXT (puis XML) dans TXM.

Cela fait partie de l’environnement d'assistance à la préparation des sources SW (Source Workbench).

Méthode

Utiliser l'éditeur de texte d'Eclipse et ajouter des commandes spécifiques à TXM.

Éditeur

Il est disponible depuis le plugin “org.eclipse.ui.editors” : L'éditeur de TXM peut étendre l'éditeur de texte d'eclipse d'id “org.eclipse.ui.DefaultTextEditor” et de classe “org.eclipse.ui.editors.text.TextEditor” (implémentation de org.eclipse.ui.texteditor.AbstractTextEditor).

Les différents types d'éditeurs de la plate-forme sont gérées par l'IEditorRegistry.

Architecture

L'architecture est décrite ICI et (avec des exemples de code source de manipulation d'éditeurs).

Il y a de bonnes synthèses :

La variable globale 'editor' de TXM pointe vers l'éditeur actif, qui est un objet répondant à l'API ITextEditor (implémentée notamment par la classe org.eclipse.ui.editors.text.TextEditor).

Un objet de type TextEditor :

Le contrôleur permet de manipuler le curseur :

  • avec setSelection(offset)

L'editor permet de connaître la position du curseur :

  • avec getSelectionProvider().getSelection().getOffset()

La vue permet de savoir quelles lignes sont affichées :

  • avec getTopIndex()

Le modèle permet :

  • d'accéder au contenu du texte, avec get(doc.getLineOffset(line), doc.getLineLength(line))
  • de faire des chercher/remplacer, avec l'aide d'un adaptateur : new FindReplaceDocumentAdapter(doc)

Le package org.eclipse.jface.text contient des dizaines d'interfaces (API) pour manipuler les éditeurs de texte.

Exemple de manipulation d'un éditeur depuis Groovy (chercher la chaine 'fait' dans l'éditeur actif et insérer la chaine '<insertedString>' devant) :

import org.eclipse.jface.text.FindReplaceDocumentAdapter

dprov = editor.getDocumentProvider()
doc = dprov.getDocument(editor.getEditorInput())
redoc = new FindReplaceDocumentAdapter(doc)

searchString = "fait"
region = redoc.find(0, searchString, true, false, false, false)
if (region == null) { println "** '"+searchString+"' not found, aborting"; return }
redoc.replace("<insertedString>"+searchString, false)

// find(start, findString, forwardSearch, caseSensitive, wholeWord, regExSearch)
// start         - document offset at which search starts
// findString    - the string to find
// forwardSearch - the search direction
// caseSensitive - indicates whether lower and upper case should be distinguished
// wholeWord     - indicates whether the findString should be limited by white spaces as defined by Character.isWhiteSpace. Must not be used in combination with regExSearch.
// regExSearch   - if true findString represents a regular expression Must not be used in combination with wholeWord.

// replace(text, regExReplace)
// text          - the substitution text
// regExReplace  - if true text represents a regular expression

Voir aussi :

Exemple d'AbstractEditor :

Commandes

Un certain nombre de commandes sont déclarées dans le plugin “org.eclipse.ui.workbench.texteditor”, d'autres dans “org.eclipse.ui.editors” et celles de base (copier, coller, supprimer) dans “org.eclipse.ui” :

cat : org.eclipse.ui.category.edit

  • org.eclipse.ui.edit.delete : déclarée mais pas de handler assosié
  • org.eclipse.ui.edit.redo : déclarée mais pas de handler assosié
  • org.eclipse.ui.edit.undo : déclarée mais pas de handler assosié
  • org.eclipse.ui.file.refresh : déclarée mais pas de handler assosié
  • org.eclipse.ui.edit.findReplace : idem

cat : org.eclipse.ui.category.file

  • org.eclipse.ui.file.save : déclarée avec un handler
  • org.eclipse.ui.file.saveAs : déclarée avec un handler

Il est déclaré dans la méthode TextEditor.initializeEditor() :

setEditorContextMenuId("#TextEditorContext"); //$NON-NLS-1$
setRulerContextMenuId("#TextRulerContext"); //$NON-NLS-1$
setHelpContextId(ITextEditorHelpContextIds.TEXT_EDITOR);

TODO: trouver comment le menu est rempli (actions, entrée de menus d'un fichier plugin.xml

Raccourcis claviers

L'éditeur déclare utiliser le contexte “org.eclipse.ui.textEditorScope” dans sa méthode abstractDecoratedTextEditor.initializeKeyBindingScopes().

Toolbar

État de la plateforme

Avancement dans l'élaboration de la solution

Solution

État de l'art

TXM 0.7.7

L'éditeur texte de TXM hérite de toutes les fonctionnalités de celui d'Eclipse.

Sont rajoutées des commandes liées au scriptage de la plateforme.

Prototypes

Version finale

Documentation

Utilisateur

Développeur

Recette

Protocole de test

Alpha

Beta

État courant

Qui Quand Quoi

public/specs_editeur_txt.txt · Dernière modification : 02/09/2016 13:36 de slh@ens-lyon.fr