Capítulo 13. Control de Vista de Texto

Tabla de contenidos

13.1. Perspectiva general de la Vista de Texto
13.2. Vistas de Texto
13.3. Buffers de Texto
13.3.1. Información de estado de un Buffer de Texto
13.3.2. Creación de Iteradores de Texto
13.3.3. Inserción, Obtención y Eliminación de Texto
13.3.4. Marcas de Texto (TextMark)
13.3.5. Creación y Uso de Etiquetas de Texto
13.3.6. Inserción de Imágenes y Controles
13.4. Iteradores de Texto
13.4.1. Atributos de los Iteradores de Texto
13.4.2. Atributos de Texto de un Iterador de Texto
13.4.3. Copiar un Iterador de Texto
13.4.4. Recuperar Texto y Objetos
13.4.5. Comprobar Condiciones en un Iterador de Texto
13.4.6. Comprobar la posición en un Texto
13.4.7. Movimiento a través del Texto
13.4.8. Moverse a una Posición Determinada
13.4.9. Búsqueda en el Texto
13.5. Marcas de Texto
13.6. Etiquetas de Texto y Tablas de Etiquetas
13.6.1. Etiquetas de Texto
13.6.2. Tablas de Etiquetas de Texto
13.7. Un ejemplo de Vista de Texto

13.1. Perspectiva general de la Vista de Texto

El control TextView y sus objetos asociados (TextBuffers, TextMarks, TextIters, TextTags y TextTagTables) proporcionan un potente marco para la edición de textos multilínea.

Un TextBuffer (Buffer de Texto) contiene el texto que se visualizará en uno o más controles TextView (Vista de Texto)

En GTK+ 2.0 el texto se codifica en UTF-8 de modo que la codificación de un caracter puede estar compuesta por varios bytes. Dentro de un TextBuffer es necesario diferenciar entre contadores de carácteres (llamados desplazamientos) y contadores de bytes (llamados índices).

Los TextIters (Iteradores de Texto) proporcionan una representación efímera de la posición entre dos carácteres dentro de un TextBuffer . Los TextIters son válidos hasta que el número de caracteres en el TextBuffer cambia; Por ejemplo, siempre que se inserten o se borren carácteres en el TextBuffer todos los TextIters se invalidan. Los TextIters son la principal forma de especificar localizaciones en un TextBuffer para manipular texto.

Los TextMarks (Marcas de Texto) se proporcionan para permitir almacenar posiciones en un TextBuffer que se mantienen entre modificaciones del buffer. Una marca es cómo un TextIter (representa una posición entre dos carácteres en un TextBuffer) pero si el texto alrededor de la marca se borra, la marca permanece donde estaba el texto borrado. De la misma forma, si se inseta texto en la marca, la marca acaba bien a la izquierda o bien a la derecha del texto insertado, dependiendo de la gravedad de la marca - gravedad a la derecha deja la marca a la derecha del texto insertado mientras que gravedad a la izquierda deja la marca a la izquierda. Las TextMarks se pueden asociar a un nombre o dejarlas anónimas si no se les da un nombre. Cada TextBuffer tiene dos marcas predefinidas llamadas insert (insertar) y selection_bound (límite de selección). Estas marcas se refieren al punto de inserción y al límite de la selección (la selección está entre las marcas insert y selection_bound).

Las TextTags (Etiquetas de Texto) son objetos que especifican un conjunto de atributos que se pueden aplicar a un rango de texto en un TextBuffer. Cada TextBuffer tiene una TextTagTable (Tabla de Etiquetas de Texto) que contiene las etiquetas disponibles en ese buffer. Las TextTagTables se pueden compartir entre TextBuffers para ofrecer consistencia. Los TextTags normalmente se usan para cambiar la apariencia de un rango de texto pero también pueden usarse para evitar que un rango de texto sea editado.