next up previous contents
Next: 3.8.2 La inserción de Up: 3.8 El comportamiento del Previous: 3.8 El comportamiento del

3.8.1 Activación del editor de componentes léxicos

En la interacción del usuario con el editor se pueden distinguir los dos casos siguientes:

El interés de esta sección se centra en el segundo caso, naturalmente, puesto que es el que está directamente relacionado con el mantenimineto de la consistencia entre la información de análisis y el texto del editor y en la que están involucradas las capacidades incrementales del analizador subyacente.

El usuario puede interactuar con todos los elementos que constituyen ICEeditor en cualquier orden. Para determinar cuándo se deben activar las funciones propias del editor se deben capturar los eventos de ratón.

El siguiente fragmento de código captura los eventos producidos por la pulsación del botón izquierdo del ratón en el editor:

(te-set-local-binding texteditor 'down0 'modify-parsered-text)

La función modify-parsered-text toma como argumento una instancia de un objeto {textedit} y realiza las siguientes acciones:

  1. Terminar la operación de edición anterior.
  2. Obtener la posición (en caracteres) en la que se pulsó el ratón sobre el texto.
  3. Buscar el componente léxico cuyo texto está situado más cerca de dicha posición.
  4. Se comprueba que dicho componente léxico no había sido borrrado con enterioridad, en cuyo caso se emite una advertencia sonoragif.
  5. Si dicho componente léxico no había sido previamente borrado, entonces se establecen adecuadamente los valores de las variables de operación, dependiendo del tipo de opración que se vaya a realizar:
    1. Inserción
      1. Se establece el texto inicial de la operación a la cadena nula y el nuevo texto al valor ()gif.
      2. Se sitúan los cursores #:ICEeditor:te-begin-op-cursor y #:ICEeditor:
        te-end-op-cursor y el cursor de inserción del editor al principio del texto correspondiente al componente léxicogif.
      3. Se calcula la distancia horizontal y vertical existente entre el primer carácter y el último del componente léxico señalado por el usuario al pulsar con el ratóngif.
      4. Se establece a cero la longitud del texto incluido inicialmente en la operación, mediante la asignación de este valor a la variable #:ICEeditor:te-op-length.
      5. Se cambia la forma del cursor del editor al valor contenido en #:ICEeditor:cursor-for-insert.
    2. Borrado
      1. Se establece como texto inicial el texto almacenado en la TTLT y como texto final la cadena vacía.
      2. La longitud de la operación se toma de la longitud del texto del componente léxico.
      3. Se utiliza la selección #:ICEeditor:te-delete-sel para resaltar el texto borrado.
      4. La foma del cursor se cambia al valor almacenado en #:ICEeditor:
        cursor-for-delete.
    3. Modificación
      1. Se establece el texto inicial de la operación como el texto almacenado en la TTLT. Esta es una acción correcta aunque se realicen múltiples modificaciones de un mismo componente léxico, puesto que en el parser incremental se parte del texto utilizado en el análisis anterior.
      2. Se establce el texto final al valor () para indicar que no se ha establecido aún ningún valor para esta variable. No se puede utilizar la cadena vacía por las mismas razones expuestas en el caso de la inserción.
      3. Se sitúa el cursor #:ICEeditor:te-begin-op-cursor en la posición inicial del texto correspondiente al componente léxico.
      4. Se sitúa el cursor #:ICEeditor:te-end-op-cursor en la posición siguiente al último carácter del texto del componente léxico.
      5. Se almacena el desplazamiento horizontal y vertical existente entre el primer carácter y el último en las variables #:ICEeditor:te-end-item-x y #:ICEeditor:te-end-item-y, respectivamente.
      6. Se establece la longitud de la operación a la longitud del componente léxico.
      7. Se incluye en la selección #:ICEeditor:te-modify-sel el texto actual del componente léxico.
      8. Se cambia la forma del cursor a la almacenada en #:ICEeditor:
        te-cursor-for-modify.
    4. información
      1. Se incluye dentro de la selección #:ICEeditor:te-info-sel el texto del componente léxico señalado por el usuario, para que aparezca resaltado en las fuentes y colores correspondientes a la operación de información.
      2. Se muestra al usuario una ventana con los datos relevantes del componente léxico.
      3. Se elimina el texto de la seleccióngif.
      4. Se cambia la forma del cursor a #:ICEeditor:cursor-for-info.
  6. Se almacena en un array asignado a la variable #:ICEeditor:current-op la siguiente información que será utilizada por las otras funciones que tratan con la edición interactiva de componentes léxicos:
  7. Se utiliza la forma funcall para realizar una llamada a la función normal utilizada en los editores textedit cuando tiene lugar un evento provocado por la pulsación del botón izquierdo del ratón.

Con ello se consigue establecer toda la información necesaria para tratar correctamente el proceso de edición de los componentes léxicos. Dicho proceso consta de dos operaciones básicas:


next up previous contents
Next: 3.8.2 La inserción de Up: 3.8 El comportamiento del Previous: 3.8 El comportamiento del

Miguel A. Alonso Pardo
Thu Nov 20 16:47:01 CET 1997