JEdit + Beanshell = Super Macro Bros
Impariamo a realizzare in pochi minuti delle macro per il popolare editor.
JEdit
Questo fantastico editor, scritto in Java, rappresenta un'ottima scelta per il programmatore in cerca di uno strumento super-flessibile per l'editing di sorgenti:
- supporta la colorazione della sintassi per centinaia di linguaggi;
- ha tantissimi plug-in creati appositamente per i programmatori;
- utilizza Java (tramite Beanshell) come linguaggio di macro;
- la funzione di search & replace utilizza le espressioni regolari di Java.
Beanshell
Beanshell è una libreria che consente di utilizzare Java come linguaggio di scripting, con tutti i vantaggi del caso:
- sintassi più "accondiscendente": è possibile omettere il tipo delle variabili e ci sono alcune scorciatoie sintattiche rispetto al linguaggio compilato;
- è possibile far interagire gli oggetti della propria applicazione con gli oggetti Beanshell e viceversa;
- è possibile utilizzare librerie esterne e API come in un qualsiasi programma Java compilato.
Tutorial da 1 minuto
Dopo aver installato JEdit (consigliata la versione 4.2 "stable"), procediamo alla creazione del nostro primo script.
Vogliamo realizzare una macro che sostituisca i caratteri speciali dell'xml con la loro rappresentazione codificata; questo processo si chiama "escape", e serve per poter inserire spezzoni di codice (HTML o altro) in pagine HTML: senza questo passaggio si avrebbero moltissimi errori di sintassi. Si tratta in sostanza di effettuare queste traduzioni (in ordine):
| Carattere | Tradotto con |
|---|---|
| & | & |
| < | < |
| > | > |
| " | " |
Come potrete immaginare questo processo è molto lungo, noioso e a grande rischio di errore.
Apriamo quindi JEdit e creiamo un nuovo file di testo contenente queste righe:
JEditTextArea textArea = view.getTextArea();
String text = textArea.getText();
text = text.replaceAll("&", "&");
text = text.replaceAll("<", "<");
text = text.replaceAll(">", ">");
text = text.replaceAll("\"", """);
textArea.setText(text);
Da notare:
- utilizzo delle API pubbliche (ben documentate) di JEdit: la classe
JEditTextAreaè una di queste; - utilizzo delle regular expression di Java, disponibili dalla 1.4 in su;
Nella directory root di JEdit si trova una sottodirectory nominata "macros": qui si trovano tutte le macro utilizzabili dall'editor. Salviamo qui il file che abbiamo appena creato, chiamandolo "EscapeXML.bsh", e clicchiamo su "Macros --> Rescan Macros": nel menu "Macros" comparirà il nostro script. La macro è pronta per essere utilizzata!
Per testarla, creiamo un nuovo file con questo contenuto:
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<elemento attributo="valore">
Prova caratteri escape < > & "
</elemento>
</root>
e clicchiamo su "macros --> mymacros --> EscapeXML.bsh": et voilà. il nostro sorgente XML è stato "accomodato":
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<elemento attributo="valore">
Prova caratteri escape &lt; &gt; &amp; &quot;
</elemento>
</root>
La cosa buffa è che per realizzare questo articolo (in HTML) è stata utilizzata la macro stessa, applicandola ai sorgenti in modo che potessero essere inseriti nella pagina!
Undo / redo
Ci dispiace deludervi, ma JEdit fornisce già da sè un meccanismo per undo/redo: non c'è nessun sorgente da scrivere...
Sviluppi
Ovviamente l'esempio mostrato può essere ampiamente migliorato:
- performance: come gestire file di grosse dimensioni? (suggerimento: si potrebbe tradurre linea per linea...)
- si potrebbe gestire l'escape solamente della selezione corrente (selezione normale e rettangolare, multipla...);
- perché non fare una macro per l'escape di Java, Javascript o altro? (altro suggerimento: installare il plugin "JakartaCommons").
- dimitri's blog
- Aggiungi un commento
- 1543 letture
-
- English
