RText

editor di testo libero

RText è un editor di testo per programmatori ed un software libero, pubblicato rispettando le specifiche di una versione modificata del protocollo BSD License, per Windows, macOS, Linux, OS/2, Unix e OpenVMS.[1] Il programma è disponibile in inglese ed è stato tradotto anche in diversi idiomi, tra cui quello cinese della Cina continentale (usa i caratteri semplificati), spagnolo, spagnolo argentino, portoghese europeo, tedesco, francese, italiano, russo, taiwanese (fa uso dei caratteri tradizionali), olandese, giapponese, coreano, polacco, turco, ungherese ed indonesiano.

RText
software
Logo
Logo
Schermata di RText raffigurante il codice sorgente scritto in Java di una classe appartenente al progetto stesso.
Schermata di RText raffigurante il codice sorgente scritto in Java di una classe appartenente al progetto stesso.
Schermata di RText raffigurante il codice sorgente scritto in Java di una classe appartenente al progetto stesso.
GenereEditor di testo
SviluppatoreFifesoft, collaboratori su GitHub
Ultima versione2.5.8 (13 settembre 2015; 9 anni fa)
Sistema operativoMicrosoft Windows
Linux
macOS
LinguaggioMateria:Java
LicenzaBSD License (in una versione modificata)
(licenza libera)
LinguaMultilingua
Sito webbobbylight.github.io/RText

Il programma è stato creato da Fifesoft ed è stato programmato per lo più dal suo fondatore, Robert Futrell. I contributi esterni sono aumentati da quando il codice sorgente viene condiviso tramite il software di controllo di versione distribuito Git su GitHub. Le funzionalità di registrazione ed esecuzione delle macro sono state aggiunte a partire dalla versione 0.8.9.2.

Funzionalità

modifica

Le funzionalità più rilevanti di RText sono le seguenti:

  • Evidenziazione sintattica per oltre 40 linguaggi, tra quelli di programmazione e di marcatura[2][3]
  • Ricerca e sostituzione testuale per mezzo dell'utilizzo delle espressioni regolari
  • Ricerca del testo nel contenuto dei file e sostituzione testuale nel contenuto degli stessi
  • Supporto di tutte le codifiche dei caratteri previsti dalla JVM
  • Personalizzazione dell'interfaccia del documento (modalità di visualizzazione a schede, MDI o in elenco listato)
  • Supporto all'utilizzo simultaneo di molteplici famiglie di caratteri
  • Evidenziazione della parentesi corrispondente a quella selezionata[3]
  • Evidenziazione della riga correntemente selezionata
  • Interfaccia grafica personalizzabile (icone, look and feel e schemi dei colori)

Il codice sorgente è attualmente ospitato dai Server di SourceForge, Maven e GitHub.

Caratteristiche

modifica

RText è un software che segue la filosofia FOSS, supporta l'autocompletamento, la ricerca/sostituzione tramite espressioni regolari, il code folding, i segnalibri, l'evidenziazione delle parentesi e l'indentazione.[3] Supporta anche l'aggiunta di macro e plugin. Di base sono già inclusi alcuni plugin ritenuti essenziali dal fondatore, scritti dallo stesso sviluppatore del progetto (permettono, per esempio, di esplorare il File System).
RText ha un'interfaccia personalizzabile ed è possibile aprire più documenti all'interno della stessa istanza del programma tramite l'uso delle linguette. Presenta stili, font e colori a tema propri di editor di testo evoluti. Il tradizionale Blocco note incluso in bundle con il sistema operativo Windows, al contrario, non permette di scegliere il colore del font e dello sfondo. Sono presenti alcuni temi che recuperano la tradizionale modalità sfondo nero/caratteri bianchi o grigi.

Inoltre gli utenti possono definire l'evidenziazione della sintassi e l'autocompletamento per qualunque altro linguaggio, tramite un sistema di definizione basato su JFlex (The Fast Scanner Generator for Java) che rende RText estensibile, se si ha familiarità con il linguaggio di programmazione Java.

Altre caratteristiche sono:

  • Code folding ed evidenziazione del codice (anche personalizzata)
  • Auto-completamento
  • Visualizzazione a schede (per aprire più documenti)
  • Zoom in e zoom out
  • Supporto Windows Cinese, Giapponese e Koreano
  • Copia del testo selezionato negli appunti del sistema operativo, sotto forma di RTF[3][4]
  • Stampa ed anteprima di stampa[5]
  • Esportazione del contenuto dell'area testuale sotto forma di codice HTML, con conseguente conservazione dello stile sintattico impostato.
  • Gestore appunti integrato nell'area testuale (attivabile premendo la combinazione di tasti Ctrl+Shift+V).
  • Restituzione di frammenti di codice sorgente esemplificativi (snippet) nei linguaggi usati per programmare le macro.
  • Collegamenti ipertestuali cliccabili (se il motore analitico del linguaggio lo consente).[3]

Nella barra di stato della finestra principale è presente l'indicatore della quantità di memoria occupata dall'applicazione nell'area di memoria heap.

Linguaggi supportati

modifica

Supporta diversi linguaggi di programmazione e di marcatura[3].

Al momento sono:

Aspetti tecnici

modifica

Il progetto è basato su un componente, l'area testuale RSyntaxTextArea, anch'esso open source e scritto in Java, e non ricorre in alcun caso all'invocazione delle API Win32, quindi non impiega Microsoft Foundation Classes (MFC) o librerie simili, il che assicura la portabilità del programma in ambito multipiattaforma, in quanto nativo Java. È distribuito rispettando le specifiche di una versione modificata del protocollo BSD License.

Dettagli di RSyntaxTextArea

modifica

Dato che RSyntaxTextArea supporta internamente la ricerca di testo con espressioni regolari su più righe, RText permette tale modalità di ricerca. RSyntaxTextArea è un'estensione della più diffusa JTextArea contenuta nel package Swing di Java. Tra le caratteristiche aggiunte compaiono:

  • Modalità di inserimento / sovrascrittura (viene attivata premendo il tasto Insert).
  • Un menù contestuale, a comparsa, con le opzioni di modifica standard.
  • Supporto per le macro.
  • Funzionalità "Marca tutto", applicabile durante la ricerca testuale.
  • Un modo per modificare lo sfondo dell'area testuale con un'immagine (i formati supportati sono gif / png / jpg)
  • Evidenziazione della riga correntemente selezionata (può essere disattivata).
  • Un modo facile per stampare il suo contenuto testuale (viene estesa l'interfaccia Printable, contenuta nel package AWT di Java)
  • Differenti modalità di aggiunta dei caratteri di tabulazione (soft e hard, rispettivamente emulati o meno dagli spazi)
  • Viene corretto un baco tuttora presente nel metodo setTabSize di JTextArea.

Se lo sfondo di una RTextArea (classe estesa da RSyntaxTextArea) fosse impostato con un determinato colore, la sua proprietà opaque (opaco) verrebbe impostata a true (vero) per ragioni prestazionali. Viceversa, se lo sfondo fosse impostato con un'immagine, allora la proprietà opaque sarebbe valorizzata con false (falso). Tutto ciò peggiora le prestazioni ma, se così non fosse, l'utente vedrebbe comparire dei difetti grafici sullo schermo, nella zona occupata dall'area testuale, mentre scorre un documento usando i tasti direzionali (lo stesso problema non si verifica premendo i tasti Pagina Su/Giù). Fifesoft ha sconsigliato di modificare il valore della proprietà opaque, giacché viene fatto dalle logiche in essere, quando opportuno.

Fifesoft raccomanda di inglobare l'area testuale internamente ad un'istanza di RTextScrollPane, anziché nel più noto JScrollPane (componente contenuto nel package Swing di Java), qualora si decidesse di includere RSyntaxTextArea in un programma sviluppato autonomamente, dato che questa classe consente l'aggiunta dei numeri della linea e dei segnalibri all'area di testo.

Dettagli sulle macro

modifica

Le macro vengono programmate alternativamente nel linguaggio di scripting orientato agli oggetti ed agli eventi JavaScript, sfruttando l'interprete JavaScript Rhino, oppure nel linguaggio di programmazione ad oggetti per la piattaforma Java Groovy.

Esempio di una macro che apre un file

modifica

L'esempio che segue mostra lo script JavaScript di una macro che apre un file. Il nome del file da aprire viene ricavato sulla base della selezione nel foglio di lavoro attivo dell'editor RText; se disponibile, il file viene aperto in un nuovo foglio di lavoro di RText:

textArea.beginAtomicEdit();
try {
	var fileName = textArea.selectedText;
	if (fileName==null || fileName.length()==0) {
		javax.swing.JOptionPane.showMessageDialog(rtext,
				"Couldn't open file:  No selection.\n" +
				"A file name must be selected in the active editor to open a file.",
				"Error", javax.swing.JOptionPane.ERROR_MESSAGE);
	}
	else {
		var isUrl = fileName.startsWith("http://");

		var file = new java.io.File(fileName);
		if (!file.isAbsolute()) {
			var parentDir = new java.io.File(textArea.fileFullPath).parentFile;
			file = new java.io.File(parentDir, fileName);
		}

		// Easter egg - if this is a URL, open it in a browser
		if (isUrl) {
			java.awt.Desktop.getDesktop().browse(new java.net.URL(fileName).toURI());
		}
		else if (file.isFile()) {
			rtext.openFile(file.absolutePath);
		}
		else if (file.isDirectory()) {
			var chooser = rtext.fileChooser;
			chooser.currentDirectory = file;
			rtext.getAction(org.fife.rtext.RTextActionInfo.OPEN_ACTION).actionPerformed(null);
		}
		else {
			javax.swing.JOptionPane.showMessageDialog(rtext,
					"File does not exist:\n" + file.absolutePath, "Error",
					javax.swing.JOptionPane.ERROR_MESSAGE);
		}
	}
} finally {
	textArea.endAtomicEdit();
}

Lo stesso esempio programmato in linguaggio Groovy:

import java.awt.*
import javax.swing.*
import org.fife.rtext.*

textArea.beginAtomicEdit()
try {
	def fileName = textArea.selectedText
	if (fileName==null || fileName.length()==0) {
		JOptionPane.showMessageDialog(rtext,
				"""Couldn't open file:  No selection.
A file name must be selected in the active editor to open a file.""",
				"Error", JOptionPane.ERROR_MESSAGE)
	}
	else {
		def isUrl = fileName.startsWith("http://")

		def file = new File(fileName)
		if (!file.isAbsolute()) {
			def parentDir = new File(textArea.fileFullPath).parentFile
			file = new File(parentDir, fileName)
		}

		// Easter egg - if this is a URL, open it in a browser
		if (isUrl) {
			Desktop.desktop.browse(new URL(fileName).toURI())
		}
		else if (file.isFile()) {
			rtext.openFile(file.absolutePath)
		}
		else if (file.isDirectory()) {
			def chooser = rtext.fileChooser
			chooser.currentDirectory = file
			rtext.getAction(RTextActionInfo.OPEN_ACTION).actionPerformed(null)
		}
		else {
			JOptionPane.showMessageDialog(rtext,
					"File does not exist:\n" + file.absolutePath, "Error",
					JOptionPane.ERROR_MESSAGE)
		}
	}
} finally {
	textArea.endAtomicEdit()
}

Esempio di una macro che converte i caratteri speciali per il linguaggio HTML

modifica

L'esempio che segue mostra lo script JavaScript di una macro che sostituisce qualsiasi testo selezionato con una versione di quel testo formattato in HTML:

function replaceMultipleSpaces(text) {
	var p = java.util.regex.Pattern.compile("  +");
	var m = p.matcher(text);
	var sb = new java.lang.StringBuffer();
	while (m.find()) {
		var spaces = m.group();
		m.appendReplacement(sb, spaces.replace(" ", " "));
	}
	m.appendTail(sb);
	return sb.toString();
}

textArea.beginAtomicEdit();
try {
	var text = textArea.selectedText;
	if (text==null || text.length()==0) {
		javax.swing.JOptionPane.showMessageDialog(rtext,
				"Error:  No selection.\n" +
				"Text must be selected to HTML-ify.",
				"Error", javax.swing.JOptionPane.ERROR_MESSAGE);
	}
	else {
		text = text.replace("&", "&").replace("\"", """).
				replace("<", "&lt;").replace(">", "&gt;").
				replace("\t", "&#009;").replace("\n", "<br />\n");
		if (text.contains("  ")) { // Replace multiple spaces with &nbsp; sequences
			text = replaceMultipleSpaces(text);
		}
		var start = textArea.getSelectionStart();
		textArea.replaceSelection(text);
		textArea.setSelectionStart(start);
		textArea.setSelectionEnd(start+text.length());
	}
} finally {
	textArea.endAtomicEdit();
}

Esempio di una macro che ordina alfabeticamente gli elementi di una lista

modifica

L'esempio che segue mostra lo script JavaScript di una macro che ordina tutte le righe nel foglio di lavoro attivo di RText:

var removeDuplicates = true; // Change to "false" if you want to keep duplicates

function join(lines) {
	var sb = new java.lang.StringBuffer();
	if (lines!=null && lines.length>0) {
		for (var i=0; i<lines.length; i++) {
			//System.out.println(lines[i]);
			sb.append(lines[i]).append('\n');
		}
	}
	return sb.toString();
}

// Note: You'll want to consider wrapping your scripts inside calls to
// beginAtomicEdit() and endAtomicEdit(), so the actions they perform can
// be undone with a single Undo action.
textArea.beginAtomicEdit();
try {
	var lines = textArea.text.split("\n");

	if (removeDuplicates) {
		var ts = new java.util.TreeSet();
		for (var i=0; i<lines.length; i++) {
			ts.add(lines[i]);
		}
		lines = ts.toArray();
	}

	java.util.Arrays.sort(lines);
	textArea.text = join(lines);

} finally {
	textArea.endAtomicEdit();
}

Lo stesso esempio programmato in linguaggio Groovy:

final def removeDuplicates = true // Change to "false" if you want to keep duplicates

// Note: You'll want to consider wrapping your scripts inside calls to
// beginAtomicEdit() and endAtomicEdit(), so the actions they perform can
// be undone with a single Undo action.
textArea.beginAtomicEdit()
try {
	def lines = textArea.text.split("\n")

	if (removeDuplicates) {
		def ts = new TreeSet()
		lines.each {
			ts.add(it)
		}
		lines = ts.toArray()
	}

	Arrays.sort(lines)
	textArea.text = lines.join("\n")
} finally {
	textArea.endAtomicEdit()
}
  1. ^ (EN) Sito Web ufficiale di RText, su fifesoft.com, Fifesoft, 16 agosto 2008. URL consultato il 16 agosto 2008 (archiviato dall'url originale il 21 aprile 2015).
  2. ^ (EN) File Leggimi di RSyntaxTextArea, componente usato da RText, pubblicato su GitHub, su github.com, Repository ufficiale GIT di RSyntaxTextArea, 15 aprile 2015. URL consultato il 15 aprile 2015 (archiviato il 17 aprile 2015).
  3. ^ a b c d e f (EN) Documentazione API della classe RSyntaxTextArea, su jtstand.codehaus.org, Fifesoft (documentazione API reperita dal sito Web di JTStand), 11 dicembre 2014. URL consultato l'11 dicembre 2014 (archiviato dall'url originale il 24 aprile 2015).
  4. ^ (EN) Recensione di RText pubblicata su Softpedia, su softpedia.com, Elena Opris, 31 dicembre 2014. URL consultato il 31 dicembre 2014 (archiviato il 20 aprile 2015).
  5. ^ Recensione di RText pubblicata su HTML.it, su download.html.it, Redazione di HTML.it, 15 luglio 2008. URL consultato il 15 luglio 2008 (archiviato il 20 aprile 2015).

Voci correlate

modifica

Altri progetti

modifica

Collegamenti esterni

modifica