Skip to content
Librería de utilidades para la creación de editores con resaltado sintaxis usando el componente SynEdit de Lazarus.
Pascal Shell
Branch: 1.21
Clone or download
Pull request Compare This branch is 3 commits ahead, 6 commits behind t-edson:1.21.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Editor_Muestra
Simple Editor
languages
Cambios.txt
FormSelFuente.lfm
FormSelFuente.pas
LICENSE
README.md
SynFacilBasic.pas
SynFacilCompletion.pas
SynFacilHighlighter.pas
SynFacilUtils.pas
Term.DOS_UTF8.txt
Term.DOS_UTF8_BOM.txt
Term.UNIX1.txt

README.md

SynFacilUtils 1.21

#Descripción

Librería para implementación de las funcionalidades típicas de un editor de texto usando el componente SynEdit. Está basado en el resaltador de sintaxis 'SynFacilSyn'.

Incluye funciones para el manejo de los formatos de salto de línea más comunes (UNIX, DOS, MAC) y maneja diversas codificaciones de texto como UTF8, win-1252, etc.

Permite la implementación Sencilla de las funciones de Apertura, Cierre, Nuevo archivo, etc.

Maneja las verificaciones de existencia de archivo, o archivo modificado, mostrando los diálogos apropiados, en cada caso.

Puede manejar diversos mensajes de estado del editor, usando una barra de estado.

También permite guardar un histórico de los archivos abiertos recientemente.

Para usar la librería, se debe incluir obligatoriamente un control TSynEdit (el paquete SynEdit para ser estrictos) y opcionalmente los diálogos TOpenDialog y TSaveDialog, si se desea utilizar las funcionalidades de apertura y grabado de archivos.

La librería requiere los siguientes archivos:

  • MisUtils.pas -> Librería de utilidades para trabajar con Lazarus (Ver https://github.com/t-edson/MisUtils).

  • SynFacilHighlighter.pas -> Es el resaltador de sintaxis que usa SynFacilCompletion. Debe ser de la versión 1.0 o superior (Ver https://github.com/t-edson/SynFacilSyn).

  • SynFacilCompletion -> Donde se define el resaltador con autocompletado. Se espera que todos los editores, usados por 'SynFacilUtils', usen este resaltdor por defecto (Ver https://github.com/t-edson/SynFacilCompletion).

  • SynFacilUtils.pas -> Es la librería donde se define el objeto 'TSynFacilEditor' que es el objeto principal de trabajo. Incluye además utilidades para la implementación de editores de texto.

El archivo que contiene a la librería es "SynFacilUtils.pas", pero se incluye también, por comodidad, a los archivos "SynFacilHighlighter.pas" y "SynFacilCompletion", para evitar tener que descargarlos independientemente.

Por lo general solo será necesario incluir "SynFacilUtils" en la sección de unidades.

Para su uso, declarar un objeto Editor y crearlo y destruirlo apropiadamente:

edit: TSynFacilEditor;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  edit := TSynFacilEditor.Create(SynEdit1, 'SinNombre', 'txt');

  //inicia control de paneles
  edit.PanFileSaved := StatusBar1.Panels[0]; //panel para mensaje "Guardado"
  edit.PanCursorPos := StatusBar1.Panels[1];  //panel para la posición del cursor

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  edit.Free;
end;

El primer parámetro del constructor de TSynFacilEditor, es el editor de trabajo. Solo debe haber un editor asociado a un objeto SynFacilEditor.

El segundo parámetro del cosntructor, es el nombre del archivo por defecto que se usará cuando se inicie el editor o se cree un nuevo archivo. La librería espera que todo contenido del editor esté asociado a un nombre de archivo, auqnue no se grabe nunca.

El tercer parámetro del cosntructor, es la extensión del archivo por defecto.

Para que el editor sea funcional, se debe interceptarse los eventos para abrir, guardar, etc.

procedure TForm1.mnNewClick(Sender: TObject);
begin
  edit.NewFile;
end;

procedure TForm1.mnOpenClick(Sender: TObject);
begin
  OpenDialog1.Filter:='Text files|*.txt|All files|*.*';
  edit.OpenDialog(OpenDialog1);
end;

procedure TForm1.mnSaveClick(Sender: TObject);
begin
  edit.SaveFile;
end;

procedure TForm1.mnSaveAsClick(Sender: TObject);
begin
  edit.SaveAsDialog(SaveDialog1);
end;

La idea es pasar el control de las acciones, o eventos de menú al nuevo objeto "TSynFacilEditor" creado, en lugar de manejar al SynEdit.

#Resaltado de sintaxis

La librería SynFacilUtils, está pensada para trabajar con editores con resaltado de sintaxis, usando el resaltador 'SynFacilCompletion'.

Configurar el resaltado de sintaxis es fácil, con SynFacilUtils. Basta con usar el método LoadSyntaxFromFile(), para indicar el archivo de sintaxis que se debe usar.

En el siguiente código, se muestra como iniciar un editor con un archivo XML de sintaxis para el resaltador:

procedure TForm1.FormCreate(Sender: TObject);
begin
  edit := TSynFacilEditor.Create(SynEdit1, 'SinNombre', 'c');
  edit.LoadSyntaxFromFile('.\languages\c.xml');
end;

Si se desea usar un menú para elegir uno de varios lenguajes, se debe primero tener una carpeta especial donde se encuentren los archivos XML de sintaxis. Luego se debe crear un menú vacío en la aplicación y la configuración con SynFacilUtils, es casi automática:

procedure TForm1.FormCreate(Sender: TObject);
begin
  edit := TSynFacilEditor.Create(SynEdit1, 'SinNombre', 'pas');
  edit.InitMenuLanguages(mnLenguajes, '.\languages');
  edit.LoadSyntaxFromPath;  //para que busque el archivo apropiado
end;

Con este código se leerá la carpeta '.\languages', y se creará un ítem en el menú 'mnLenguajes' por cada archivo XML, que se encuentre allí. Además se caragrá el archivo de sintaxis elegido, cuando se seleccione alguno de los ítems del menú.

El método LoadSyntaxFromPath(), carga un archivo de sintaxis, usando la extensión del archivo actual para decidir el archivo a usar.

IMPORTANTE. La librería toma el control de los eventos OnChange(), OnStatusChange(), OnMouseDown(), OnKeyDown(), OnKeyUp(), OnKeyPress(), OnUTF8KeyPress y OnCommandProcessed().

Si se necesita usar los eventos OnChange(), OnMouseDown(), OnKeyDown(), OnKeyUp() u OnKeyPress(), se debe usar sus equivalentes en TSynFacilEditor.

Para un ejemplo más completo de uso, ver los proyecto de muestra adjuntos.

#Menú de archivos recientes

SynFacilUtils, incluye la opción de mostrar un menú con una lista de los archivos abiertos recientemente. Para habilitar esta opción, se usa el método InitMenuRecents():

  edit.InitMenuRecents(mnRecientes, listaRecientes);

El primer parámetro es el ítem del menú (que ya debe exitir), que se usará para poner la lista de archivos recientes. El segundo parámetro es una lista que se usará para almacenar los nombres de los archivos a usar.

El método espera a que se le proporcione un TStringList ya creado como segundo parámetro. SynFacilUtils no creará ni destruirá esta lista.

Cada vez que la librería detecte que se está usando un nuevo archivo (como cuando se abre uno nuevo), actualizará el menú asociado. No hay trabajo adicional que se deba hacer una vez que se ha configurado el menú de archivos recientes.

Tampoco es necesario, definir el "Caption" del ítem del menú usado, ya que la librería usará los nombres 'Recientes' o 'Recents", dependiendo del idioma en que se encuentre configurado.

#Accesorios

Adicionalmente se incluye el formulario 'FormSelFuente.pas', que es un diálogo que permite seleccionar tres opciones:

  • Todo el texto
  • Selección
  • Línea Actual

Este formulario es útil cuando se quiere realizar tareas sobre el contenido del editor, con la posibilidad de elegir el alcance de la tarea.

You can’t perform that action at this time.