Vous êtes à peu près ici : Accueil  »   tutoriel PyGTK  »   PyGTK : sommaire

13.6. TextTag et TextTagTable : les balises de texte

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.

13.6.1. Les TextTag

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 :

nameLecture / ÉcritureNom de la balise de texte. None si anonyme.
backgroundÉcritureCouleur de l'arrière-plan donnée sous forme de chaine de caractères
foregroundÉcritureCouleur du premier plan donnée sous forme de chaine de caractères
background_gdkLecture / ÉcritureCouleur de l'arrière-plan donnée sous forme de GdkColor
foreground_gdkLecture / ÉcritureCouleur du premier plan donnée sous forme de GdkColor
background_stippleLecture / ÉcritureBitmap à utiliser comme masque lorsque l'on dessine le texte d'arrière-plan
foreground_stippleLecture / ÉcritureBitmap à utiliser comme masque lorsque l'on dessine le texte du premier plan
fontLecture / ÉcritureDescription de la police donnée sous forme de chaine de caractères. Ex : "Sans Italic 12"
font_descLecture / ÉcritureDescription de la police donnée sous forme de PangoFontDescription
familyLecture / ÉcritureNom de la famille de la police. Ex : Sans, Helvetica, Times, Monospace
styleLecture / ÉcritureStyle de la police donné sous forme de PangoStyle. Ex : pango.STYLE_ITALIC
variantLecture / ÉcritureVariante de police donné sous forme de PangoVariant. Ex : pango.VARIANT_SMALL_CAPS
weightLecture / ÉcritureÉpaisseur de police donnée sous forme d'entier (voir aussi les valeurs prédéfinies dans PangoWeight, ex : pango.WEIGHT_BOLD)
stretchLecture / ÉcritureÉtirement de la police donné sous forme de PangoStretch. Ex : pango.STRETCH_CONDENSED
sizeLecture / ÉcritureTaille de la police en unités Pango
size_pointsLecture / ÉcritureTaille de la police en points
scaleLecture / É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_linesLecture / ÉcritureEspacement au-dessus des paragraphes en pixels
pixels_below_linesLecture / ÉcritureEspacement au-dessous des paragraphes en pixels
pixels_inside_wrapLecture / ÉcritureEspacement entre les lignes des paragraphes en pixels
editableLecture / ÉcriturePossibilité pour l'utilisateur d'éditer le texte
wrap_modeLecture / Écrituremode 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é)
justificationLecture / ÉcritureAlignement à gauche, à droite, ou centré
directionLecture / ÉcritureDirection du texte (de gauche à droite ou de droite à gauche)
left_marginLecture / ÉcritureLargeur de la marge de gauche en pixels
indentLecture / ÉcritureIndentation du paragraphe en pixels
strikethroughLecture / ÉcritureIndique si le texte doit être barré
right_marginLecture / ÉcritureLargeur de la marge de droite en pixels
underlineLecture / ÉcritureStyle de soulignement
riseLecture / ÉcritureDécalage du texte par rapport à la ligne de base (au-dessus s'il est positif, au-dessous si négatif) en pixels
background_full_heightLecture / ÉcritureIndique si la couleur d'arrière-plan doit remplir toute la hauteur de la ligne ou seulement la hauteur des caractères balisés
languageLecture / ÉcritureLa 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.
tabsLecture / ÉcritureTabulations personnalisées
invisibleLecture / ÉcritureVisibilité 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_setLecture / Écriture
foreground_setLecture / Écriture
background_stipple_setLecture / Écriture
foreground_stipple_setLecture / Écriture
family_setLecture / Écriture
style_setLecture / Écriture
variant_setLecture / Écriture
weight_setLecture / Écriture
stretch_setLecture / Écriture
size_setLecture / Écriture
scale_setLecture / Écriture
pixels_above_lines_setLecture / Écriture
pixels_below_lines_setLecture / Écriture
pixels_inside_wrap_setLecture / Écriture
editable_setLecture / Écriture
wrap_mode_setLecture / Écriture
justification_setLecture / Écriture
direction_setLecture / Écriture
left_margin_setLecture / Écriture
indent_setLecture / Écriture
strikethrough_setLecture / Écriture
right_margin_setLecture / Écriture
underline_setLecture / Écriture
rise_setLecture / Écriture
background_full_height_setLecture / Écriture
language_setLecture / Écriture
tabs_setLecture / Écriture
invisible_setLecture / É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.

13.6.2. La TextTagTable

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()