Dimitri De Franciscis

Consulente software freelance

Primary links

  • Homepage
  • Chi sono
  • Pubblicazioni
  • Curriculum Vitae
  • Libri e guide
  • Fotografia
  • Pittura
  • Contattami
Home Blog dimitri's blog

JEdit + Beanshell = Super Macro Bros

Submitted by dimitri on Ven, 14/11/2008 - 12:58
  • Informatica
  • beanshell
  • html
  • java
  • jedit
  • macro
  • xml

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
& &
< &lt;
> &gt;
" &quot;

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("&", "&amp;");
text = text.replaceAll("<", "&lt;");
text = text.replaceAll(">", "&gt;");
text = text.replaceAll("\"", "&quot;");
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 &lt; &gt; &amp; &quot;
</elemento>
</root>

e clicchiamo su "macros --> mymacros --> EscapeXML.bsh": et voilà. il nostro sorgente XML è stato "accomodato":

&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;
&lt;root&gt;
&lt;elemento attributo=&quot;valore&quot;&gt;
Prova caratteri escape &amp;lt; &amp;gt; &amp;amp; &amp;quot;
&lt;/elemento&gt;
&lt;/root&gt;

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
  • Share this
  • English

Potresti essere interessato anche a...

  • JEdit + Beanshell = Super Macro Bros
  • JEdit: aggiungere funzionalità con le macro
  • JEdit + Regular expressions. On steroids...
  • How to clean up "strange" Microsoft Word characters with a JEdit macro
  • Come ripulire i caratteri "strani" di Word con una macro JEdit

Navigazione

  • Contenuti recenti
  • Cerca
  • Tags
  • Articoli più letti

Seguimi

Follow @megadix

Dimitri De Franciscis - Consulente software freelance

Secondary links

  • Note legali
  • Pubblicità su www.megadix.it

Copyright De Franciscis Dimitri - p.iva 05327790969

RoopleTheme