Les TextTag (balises de texte) spécifient les attributs qui peuvent être appliqués à une portion du texte d'un TextBuffer. Chaque TextBuffer a une TextTagTable (table des balises de texte) qui contient les balises pouvant être appliquées à l'intérieur du TextBuffer. Les TextTagTables peuvent être partagées par plusieurs TextBuffer, offrant par là une meilleure homogénéité des styles de texte.
Les TextTag peuvent porter un nom ou bien être anonymes. On crée une TextTag en utilisant la fonction :
balise = gtk.TextTag(name=None)
Si aucun name (nom) n'est donné ou s'il vaut None, la balise sera anonyme. Il peut être plus commode de créer des TextTag avec la méthode de TextBuffer create_tag(), celle-ci permettant aussi de spécifier les attributs de la balise et de l'ajouter à la table des balises du buffer (cf. la section TextBuffer)
Les attributs que peut porter une TextTag sont :
name | Lecture / Écriture | Nom de la balise de texte. None si anonyme. |
background | Écriture | Couleur de l'arrière-plan donnée sous forme de chaine de caractères |
foreground | Écriture | Couleur du premier plan donnée sous forme de chaine de caractères |
background_gdk | Lecture / Écriture | Couleur de l'arrière-plan donnée sous forme de GdkColor |
foreground_gdk | Lecture / Écriture | Couleur du premier plan donnée sous forme de GdkColor |
background_stipple | Lecture / Écriture | Bitmap à utiliser comme masque lorsque l'on dessine le texte d'arrière-plan |
foreground_stipple | Lecture / Écriture | Bitmap à utiliser comme masque lorsque l'on dessine le texte du premier plan |
font | Lecture / Écriture | Description de la police donnée sous forme de chaine de caractères. Ex : "Sans Italic 12" |
font_desc | Lecture / Écriture | Description de la police donnée sous forme de PangoFontDescription |
family | Lecture / Écriture | Nom de la famille de la police. Ex : Sans, Helvetica, Times, Monospace |
style | Lecture / Écriture | Style de la police donné sous forme de PangoStyle. Ex : pango.STYLE_ITALIC |
variant | Lecture / Écriture | Variante de police donné sous forme de PangoVariant. Ex : pango.VARIANT_SMALL_CAPS |
weight | Lecture / Écriture | Épaisseur de police donnée sous forme d'entier (voir aussi les valeurs prédéfinies dans PangoWeight, ex : pango.WEIGHT_BOLD) |
stretch | Lecture / Écriture | Étirement de la police donné sous forme de PangoStretch. Ex : pango.STRETCH_CONDENSED |
size | Lecture / Écriture | Taille de la police en unités Pango |
size_points | Lecture / Écriture | Taille de la police en points |
scale | Lecture / Écriture | Taille de la police donnée sous forme de facteur d'échelle par rapport à la taille de la police par défaut. Recommandé car très bonne adaptation aux changements de thème, etc. Pango possède quelques échelles prédéfinies, comme pango.SCALE_X_LARGE |
pixels_above_lines | Lecture / Écriture | Espacement au-dessus des paragraphes en pixels |
pixels_below_lines | Lecture / Écriture | Espacement au-dessous des paragraphes en pixels |
pixels_inside_wrap | Lecture / Écriture | Espacement entre les lignes des paragraphes en pixels |
editable | Lecture / Écriture | Possibilité pour l'utilisateur d'éditer le texte |
wrap_mode | Lecture / Écriture | mode de retour à la ligne automatique (après le dernier mot de la ligne, après le dernier caractère de la ligne, ou désactivé) |
justification | Lecture / Écriture | Alignement à gauche, à droite, ou centré |
direction | Lecture / Écriture | Direction du texte (de gauche à droite ou de droite à gauche) |
left_margin | Lecture / Écriture | Largeur de la marge de gauche en pixels |
indent | Lecture / Écriture | Indentation du paragraphe en pixels |
strikethrough | Lecture / Écriture | Indique si le texte doit être barré |
right_margin | Lecture / Écriture | Largeur de la marge de droite en pixels |
underline | Lecture / Écriture | Style de soulignement |
rise | Lecture / Écriture | Décalage du texte par rapport à la ligne de base (au-dessus s'il est positif, au-dessous si négatif) en pixels |
background_full_height | Lecture / Écriture | Indique si la couleur d'arrière-plan doit remplir toute la hauteur de la ligne ou seulement la hauteur des caractères balisés |
language | Lecture / Écriture | La langue du texte, donnée sous forme de code ISO. Ceci peut aider Pango pour le rendu du texte. Si vous ne comprenez pas ce paramètre, vous n'en avez probablement pas besoin. |
tabs | Lecture / Écriture | Tabulations personnalisées |
invisible | Lecture / Écriture | Visibilité du texte (Non implémenté dans GTK 2.0) |
On peut définir les attributs d'une balise avec la méthode :
balise.set_property(nom_attr, valeur)
dans laquelle nom_attr est une chaine contenant le nom de l'attribut et valeur la valeur qui doit lui être affectée.
De la même manière, on peut récupérer la valeur de l'attribut avec la méthode :
valeur = balise.get_property(nom_attr)
Du fait qu'une balise ne contient pas forcément tous les attributs précédemment cités, un certain nombre de propriétés booléennes ont été créées, qui permettent simplement de savoir si la balise est porteuse ou pas de tel attribut :
background_set | Lecture / Écriture |
foreground_set | Lecture / Écriture |
background_stipple_set | Lecture / Écriture |
foreground_stipple_set | Lecture / Écriture |
family_set | Lecture / Écriture |
style_set | Lecture / Écriture |
variant_set | Lecture / Écriture |
weight_set | Lecture / Écriture |
stretch_set | Lecture / Écriture |
size_set | Lecture / Écriture |
scale_set | Lecture / Écriture |
pixels_above_lines_set | Lecture / Écriture |
pixels_below_lines_set | Lecture / Écriture |
pixels_inside_wrap_set | Lecture / Écriture |
editable_set | Lecture / Écriture |
wrap_mode_set | Lecture / Écriture |
justification_set | Lecture / Écriture |
direction_set | Lecture / Écriture |
left_margin_set | Lecture / Écriture |
indent_set | Lecture / Écriture |
strikethrough_set | Lecture / Écriture |
right_margin_set | Lecture / Écriture |
underline_set | Lecture / Écriture |
rise_set | Lecture / Écriture |
background_full_height_set | Lecture / Écriture |
language_set | Lecture / Écriture |
tabs_set | Lecture / Écriture |
invisible_set | Lecture / Écriture |
Pour récupérer un attribut d'une balise, vous devez donc d'abord vérifier s'il est bien défini dans cette balise. Par exemple, pour obtenir un attribut valide d'alignement, vous pourriez procéder comme suit :
if balise.get_property("justification_set"): alignement = balise.get_property("justification")
Par défaut, la priorité des balises correspond à l'ordre dans lequel elles sont ajoutées à la TextTagTable. La balise qui a la plus haute priorité prend l'avantage dans le cas où plusieurs tentent de définir le même attribut pour une portion de texte. La priorité se récupère et se définit avec les méthodes suivantes :
priorite = balise.get_priority() balise.set_priority(priorite)
La priorité d'une balise doit être comprise entre 0 et la taille de la TextTagTable moins 1.
Par défaut, une TextTagTable est créée avec la création d'un TextBuffer. Mais elle peut tout aussi bien être créée par la fonction :
table = TextTagTable()
On ajoute une TextTag a une TextTagTable avec la méthode :
table.add(balise)
La balise ne doit pas déjà être dans la table et ne doit pas porter le même nom qu'une balise s'y trouvant déjà.
On peut chercher une TextTag dans une TextTagTable en utilisant la méthode :
balise = table.lookup(nom)
La méthode renvoie la balise qui porte ce nom dans la table, ou None si aucune balise ne porte ce nom.
On peut retirer une TextTag d'une TextTagTable avec la méthode :
table.remove(balise)
Enfin, la taille d'une TextTagTable peut être récupérée par :
taille_table = table.get_size()