Mantener actualizada la TTLT en todo momento, esto es, cada vez que se inserta o borra un carácter,
supone una carga computacional excesiva. Una solución consiste en
establecer puntos de sincronización en los que realizar la actualización.
De este modo, si ha sido el último punto de sincronización alcanzado,
se debe garantizar que la información contenido en la tabla es consistente con el texto almacenado
en el editor cuando se alcanzó
. Sin embargo, entre
y
la TTLT no reflejará la situación actual del texto editado. La información de la tabla
será actualizada en cuanto se alcance
utilizando para ello los
datos viejos de la TTLT (los correspondientes a
) y cierta
información recopilada durante el intervalo transcurrido entre los dos puntos de
sincronismo consecutivos de forma que tan sólo se actualice aquella
parte de la tabla que realmente se haya visto afectada por las modificaiones introducidas en el texto
durante ese periodo.
La opción más viable con respecto a los puntos de sincronización consiste en utilizar para tal fin la terminación de cada operación de edición, puesto que una de las acciones a realizar al comienzo de la siguiente operacion consiste en encontrar el componente léxico al que pertenece el carácter señalado por el usuario. Para ello, es necesario que dispongamos de información actualizada sobre las asociaciones entre los propios componentes léxicos y el texto correspondiente.
Por consiguiente, se debe establecer un punto de sincronismo en los siguientes casos:
Para lograr una actualización consistente
es necesario disponer de la siguiente información de operación referida
a las modificaciones introducidas
en el texto desde el último punto de sincronismo:
Los tres últimos datos se pueden derivar de los dos primeros, pero se facilitan las cosas si se mantinene actualizados conforme se va modificando el texto. Para mantener actualizada la información de operación conforme se van insertando o borrando caracteres, es necesario capturar los eventos generados por el teclado.
Se deben definir dos funciones, insert-character y
delete-character, que serán llamadas cuando se produzcan
modificaciones interactivas en el editor.
Cada vez que se produce una modificación interactiva
en el texto almacenado en el editor se llama a la función
insert-character. Es importante reseñar que dicha función es invocada una vez
que el texto ya ha sido modificado. Por modificación interactiva se entiende
aquella que ha sido realizada por el usuario haciendo uso del teclado o del
ratón. Por tanto, no se consideran interactivas aquellas modificaciones
realizadas mediante funciones definidas por el programador.
Mediante set-local-binding se atrapan los eventos de teclado provocados
por la pulsación de las teclas DELETE y BACKSPACE sobre
el texto del editor. La pulsación de dichas teclas ya no
provocará el borrado de un carácter, sino que hará que se invoque a la
función delete-character.
La función insert-character recibirá como argumentos la instancia
del editor involucrada y el comando correspondiente a la acción
realizada sobre el texto. La misión de esta función será:
Por su parte, la función delete-character
tan sólo recibirá como
argumento la instancia del editor involucrada. La misión de está función será: