13.6. Etiquetas de Texto y Tablas de Etiquetas

Las etiquetas de texto TextTags especifican atributos que se pueden aplicar a un rango de texto en un buffer de texto. Cada buffer de texto TextBuffer tiene una tabla de etiquetas de texto TextTagTable que contiene las etiquetas de texto TextTags que se pueden aplicar dentro del buffer TextBuffer. Las tablas de etiquetas de texto TextTagTable se pueden usar en más de un buffer de texto para ofrecer estilos de texto consistentes.

13.6.1. Etiquetas de Texto

Las TextTags (Etiquetas de Texto) pueden tener nombre o ser anónimas. Una TextTag se crea usando la función:

  tag = gtk.TextTag(name=None)

Si el name (nombre) no se especifica o si es None la tag (etiqueta) será anónima. Las TextTags también se pueden crear usando el método de TextBuffer create_tag() que también te permite especificar los atributos y añade la etiqueta a la tabla de etiquetas del buffer (veáse la subsección TextBuffer).

Los atributos que pueden aparecer en una TextTag son:

nameLectura / EscrituraNombre de la etiqueta de texto. None si es anónima.
backgroundEscrituraColor de fondo como una cadena de texto
foregroundEscrituraColor de frente como una cadena de texto
background-gdkLectura / EscrituraColor de fondo como un GdkColor
foreground-gdkLectura / EscrituraColor de frente como un GdkColor
background-stippleLectura / EscrituraBitmap a usar como una máscara cuando se dibuje el texto de fondo
foreground-stippleLectura / EscrituraBitmap a usar como una máscara cuando se dibuje el texto de frente
fontLectura / EscrituraDescripción de la fuente como una cadena de texto, por ejemplo, "Sans Italic 12"
font-descLectura / EscrituraDescripción de la feunte como un objeto PangoFontDescription
familyLectura / EscrituraNombre de la familia de la fuente, por ejemplo, Sans, Helvetica, Times, Monospace
styleLectura / EscrituraEstilo de la fuente como un PangoStyle, por ejemplo, pango.STYLE_ITALIC.
variantLectura / EscrituraVariante de la fuente como un PangoVariant, por ejemplo, pango.VARIANT_SMALL_CAPS.
weightLectura / EscrituraPeso de la fuente como un entero, mira los valores predefinidos en PangoWeight; por ejemplo, pango.WEIGHT_BOLD.
stretchLectura / EscrituraEstrechamiento de la fuente como un PangoStretch, por ejemplo, pango.STRETCH_CONDENSED.
sizeLectura / EscrituraTamaño de fuente en unidades Pango.
size-pointsLectura / EscrituraTamaño de fuente en puntos
scaleLectura / EscrituraTamaño de fuente como un factor de escala relativo al tamaño de fuente predeterminado. Esta propiedad se adapta a los cambios en el tema, etc, por tanto se recomienda su uso. Pango tiene algunos valores predefinidos tales como pango.SCALE_X_LARGE.
pixels-above-linesLectura / EscrituraPíxeles de espacio blanco por encima de los párrafos
pixels-below-linesLectura / EscrituraPíxeles de espacio blanco por debajo de los párrafos
pixels-inside-wrapLectura / EscrituraPíxeles de espacio blanco entre las líneas de un párrafo
editableLectura / EscrituraSi el texto puede modificarse por el usuario
wrap-modeLectura / EscrituraSi las líneas no se ajustan, se ajustan en limites de palabra o se ajustan en limites de caracteres
justificationLectura / EscrituraJustificación izquierda, derecha o central
directionLectura / EscrituraDirección del Texto, por ejemplo, derecha a izquierda o izquierda a derecha
left-marginLectura / EscrituraAncho del márgen izquierdo en píxeles
indentLectura / EscrituraCantidad de indentado para los párrafos, en píxeles
strikethroughLectura / EscrituraSi hay que tachar el texto
right-marginLectura / EscrituraAncho del márgen derecho en píxeles
underlineLectura / EscrituraEstilo de subrayado para este texto
riseLectura / EscrituraDesplazamiento del texto por encima de la línea base (por debajo de la línea base si es negativo) en píxeles
background-full-heightLectura / EscrituraSi el color de fondo rellena la altura completa de la línea o sólo la altura de los caracteres marcados
languageLectura / EscrituraEl idioma en el que está el texto, como un código ISO. Pango puede usar esto como una ayuda para visualizar el texto. Si no entiendes este parámetro, probablemente no lo necesitas.
tabsLectura / EscrituraTabulaciones personalizadas para el texto
invisibleLectura / EscrituraSi el texto está oculto. No implementado en GTK 2.0

Se pueden establecer los atributos con este método:

  tag.set_property(name, value)

Donde name es una cadena de texto que contiene el nombre de la propiedad y value es el valor que se le va a poner.

De la misma forma, el valor de un atributo se puede recuperar con el método:

  value = tag.get_property(name)

Ya que la etiqueta no tiene un valor para cada atributo hay una serie de propiedades booleanas que indican si el atributo ha sido establecido:

background-setLectura / Escritura
foreground-setLectura / Escritura
background-stipple-setLectura / Escritura
foreground-stipple-setLectura / Escritura
family-setLectura / Escritura
style-setLectura / Escritura
variant-setLectura / Escritura
weight-setLectura / Escritura
stretch-setLectura / Escritura
size-setLectura / Escritura
scale-setLectura / Escritura
pixels-above-lines-setLectura / Escritura
pixels-below-lines-setLectura / Escritura
pixels-inside-wrap-setLectura / Escritura
editable-setLectura / Escritura
wrap-mode-setLectura / Escritura
justification-setLectura / Escritura
direction-setLectura / Escritura
left-margin-setLectura / Escritura
indent-setLectura / Escritura
strikethrough-setLectura / Escritura
right-margin-setLectura / Escritura
underline-setLectura / Escritura
rise-setLectura / Escritura
background-full-height-setLectura / Escritura
language-setLectura / Escritura
tabs-setLectura / Escritura
invisible-setLectura / Escritura

Por tanto, para obtener el atributo de una etiqueta, primero tienes que comprobar si el atributo ha sido establecido en la etiqueta. Por ejemplo, para obtener un valor correcto de justificación tienes que hacer algo así como:

  if tag.get_property("justification-set"):
	justification = tag.get_property("justification")

La prioridad predeterminada de una etiqueta es el orden en el que se añade a la TextTagTable. Las etiquetas con prioridad más alta tienen preferencia si hay múltiples etiquetas para establecer el mismo atributo para un rango de texto. La prioridad se puede obtener y fijar con los métodos:

  priority = tag.get_priority()

  tag.set_priority(priority)

La prioridad de una etiqueta debe estar entre 0 y uno menos del tamaño de la TextTagTable.

13.6.2. Tablas de Etiquetas de Texto

Una TextTagTable (Tabla de Etiquetas de Texto) se crea al crear un TextBuffer . También se puede crear una TextTagTable con la función:

  table = TextTagTable()

Se puede añadir una TextTag (Etiqueta de Texto) a una TextTagTable usando el método:

  table.add(tag)

La etiqueta tag no puede estar ya en la tabla y no puede tener el mismo nombre que otra etiqueta en la tabla.

Es posible buscar una etiqueta en una tabla con el método:

  tag = table.lookup(name)

Este método devuelve la etiqueta tag en la tabla que tenga el nombre name o None si no hay ninguna etiqueta con ese nombre.

Se puede borrar una TextTag de una TextTagTable con el método:

  table.remove(tag)

El tamaño de la TextTagTable se puede consultar con el método:

  size = table.get_size()