Estas clases modelan operaciones de edición sobre un texto (de una o múltiples líneas). Pueden usarse para construir editores de texto completos o embebidos (lineas de prompt, cajas de texto, etc.). No es una intrfaz de edición, solo provee operaciones que modifican el texto como rutinas.
LINE_EDITOR es un editor para textos de una sola línea (por ej., prompts). La línea se almacena en una TEXT_LINE, que se pasa al momento de creación.
MULTILINE_EDITOR es un editor para textos multilínea. el texto se almacena en un TEXT, que se pasa al momento de creación. Notar que sigue trabajando sobre una TEXT_LINE, pero en este caso debe ser una MULTI_TEXT_LINE perteneciente al TEXT dado.
Estos editores pueden verse como un objeto que se posiciona en un punto del texto, y puede irse desplazando y realizando cambios; es decir como un cursor activo. De hecho, ambos heredan de TEXT_MARK; MULTILINE_EDITOR hereda de LINE_EDITOR. Este texto habla de ambas excepto cuando se especifica lo contrario.
El editor esta desacoplado del texto, con lo que pueden usarse muchos editores simultaneamente sobre el mismo texto.
Además de comportarse como un cursor, el editor provee un area de selección (independiente del cursor), con algunas operaciones de clipboard
Un editor, al heredar de TEXT_MARK tiene una posición en el texto. Puede conocerse la posición a través de los atributos `line' y `position'. En LINE_EDITOR, `line' es la línea con que el editor fue creado (o seteado con `set_line'). En MULTILINE_EDITOR, comienza con la primer línea del texto y va cambiando con las operaciones de movimiento vertical de cursor.
Puede moverse el cursor con las operaciones `go_xxx'. También se puede controlar directamente la posición con `set_line'y `set_position'.
La posición del cursor puede caer fuera de la cadena editada. Las operaciones usualmente se realizan sobre la "posición efectiva" (que puede obtenerse con el query `effective_position'), que es una posición que cae dentro de la línea.
Para más detalles sobre el comportamiento del cursor, ver TEXT_MARK
Los editores proveen opraciones primitivas de edición.
Las operaciones simples para agregar texto son `insert' y `put'. La primera inserta un caracter donde esta el cursor. La segunda sobreescribe el caracter a la derecha del cursor.
Las operaciones de borrado son `remove', que borra el caracter a la derecha del cursor, y `remove_left' que borra el caracter a la izquierda. En un editor normal estarían asociadas a las teclas delete y backspace respectivamente.
La operación `set_text' modifica el contenido de la línea por una nueva cadena.
Notar que muchas de las operaciones de edición mueven el cursor (de la forma esperada en un programa de edición de texto)
MULTILINE_EDITOR agrega algunas operaciones de edición multilínea. `delete_line' borra la línea actual, y `split' parte la línea actual en dos justo en el punto de cursor.
Los editores proveen de un area de selección con operaciones de clipboard. El área de selección es persistente, es decir, se preserva aunque el cursor se mueva.
Un editor controla dos TEXT_MARK, llamados `begin_selection' y `end_selection'. Si ambos son Void, no hay un área seleccionada. Si no, ambos son no Void, y `begin_selection' esta a la izquierda o coincide con `end_selection'. El area de selección es la comprendida entre ambas marcas en ese caso (puede ser vacía).
El query `has_selection' puede usarse para decidir si hay un área de selección no vacía. Las operaciones que trabajan con el area usualmente no hacen nada si `has_selection' es False.
Para setear el área de selección, se usan las operaciones `set_begin_selection', y `set_end_selection', que mueven la marca indicada a la posición del cursor. Notar que esto puede resultar en que begin_selection quede a la derecha de end_selection, en cuyo caso se intercambian las marcas. Si estas operaciones se realizan cuando no hay selección, se crea una nueva selección vacía donde esta el cursor.
Puede deseleccionarse el area usando la operación `unselect'.
Las operaciones que operan con el área de selección son `delete', `cut', y `copy_to_clipboard'. La operación `paste' no opera con el area de selección, sólo inserta el texto en la posición del cursor. Todas estas operaciones mueven el cursor.