| 1 | /* Pango | 
| 2 |  * pango-attributes.h: Attributed text | 
| 3 |  * | 
| 4 |  * Copyright (C) 2000 Red Hat Software | 
| 5 |  * | 
| 6 |  * This library is free software; you can redistribute it and/or | 
| 7 |  * modify it under the terms of the GNU Library General Public | 
| 8 |  * License as published by the Free Software Foundation; either | 
| 9 |  * version 2 of the License, or (at your option) any later version. | 
| 10 |  * | 
| 11 |  * This library is distributed in the hope that it will be useful, | 
| 12 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 13 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
| 14 |  * Library General Public License for more details. | 
| 15 |  * | 
| 16 |  * You should have received a copy of the GNU Library General Public | 
| 17 |  * License along with this library; if not, write to the | 
| 18 |  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 
| 19 |  * Boston, MA 02111-1307, USA. | 
| 20 |  */ | 
| 21 |  | 
| 22 | #ifndef __PANGO_ATTRIBUTES_H__ | 
| 23 | #define __PANGO_ATTRIBUTES_H__ | 
| 24 |  | 
| 25 | #include <pango/pango-font.h> | 
| 26 | #include <pango/pango-color.h> | 
| 27 | #include <glib-object.h> | 
| 28 |  | 
| 29 | G_BEGIN_DECLS | 
| 30 |  | 
| 31 |  | 
| 32 | typedef struct _PangoAttribute        PangoAttribute; | 
| 33 | typedef struct _PangoAttrClass        PangoAttrClass; | 
| 34 |  | 
| 35 | typedef struct _PangoAttrString       PangoAttrString; | 
| 36 | typedef struct _PangoAttrLanguage     PangoAttrLanguage; | 
| 37 | typedef struct _PangoAttrInt          PangoAttrInt; | 
| 38 | typedef struct _PangoAttrSize         PangoAttrSize; | 
| 39 | typedef struct _PangoAttrFloat        PangoAttrFloat; | 
| 40 | typedef struct _PangoAttrColor        PangoAttrColor; | 
| 41 | typedef struct _PangoAttrFontDesc     PangoAttrFontDesc; | 
| 42 | typedef struct _PangoAttrShape        PangoAttrShape; | 
| 43 | typedef struct _PangoAttrFontFeatures PangoAttrFontFeatures; | 
| 44 |  | 
| 45 | /** | 
| 46 |  * PangoAttrType: | 
| 47 |  * @PANGO_ATTR_INVALID: does not happen | 
| 48 |  * @PANGO_ATTR_LANGUAGE: language ([struct@Pango.AttrLanguage]) | 
| 49 |  * @PANGO_ATTR_FAMILY: font family name list ([struct@Pango.AttrString]) | 
| 50 |  * @PANGO_ATTR_STYLE: font slant style ([struct@Pango.AttrInt]) | 
| 51 |  * @PANGO_ATTR_WEIGHT: font weight ([struct@Pango.AttrInt]) | 
| 52 |  * @PANGO_ATTR_VARIANT: font variant (normal or small caps) ([struct@Pango.AttrInt]) | 
| 53 |  * @PANGO_ATTR_STRETCH: font stretch ([struct@Pango.AttrInt]) | 
| 54 |  * @PANGO_ATTR_SIZE: font size in points scaled by %PANGO_SCALE ([struct@Pango.AttrInt]) | 
| 55 |  * @PANGO_ATTR_FONT_DESC: font description ([struct@Pango.AttrFontDesc]) | 
| 56 |  * @PANGO_ATTR_FOREGROUND: foreground color ([struct@Pango.AttrColor]) | 
| 57 |  * @PANGO_ATTR_BACKGROUND: background color ([struct@Pango.AttrColor]) | 
| 58 |  * @PANGO_ATTR_UNDERLINE: whether the text has an underline ([struct@Pango.AttrInt]) | 
| 59 |  * @PANGO_ATTR_STRIKETHROUGH: whether the text is struck-through ([struct@Pango.AttrInt]) | 
| 60 |  * @PANGO_ATTR_RISE: baseline displacement ([struct@Pango.AttrInt]) | 
| 61 |  * @PANGO_ATTR_SHAPE: shape ([struct@Pango.AttrShape]) | 
| 62 |  * @PANGO_ATTR_SCALE: font size scale factor ([struct@Pango.AttrFloat]) | 
| 63 |  * @PANGO_ATTR_FALLBACK: whether fallback is enabled ([struct@Pango.AttrInt]) | 
| 64 |  * @PANGO_ATTR_LETTER_SPACING: letter spacing ([struct@PangoAttrInt]) | 
| 65 |  * @PANGO_ATTR_UNDERLINE_COLOR: underline color ([struct@Pango.AttrColor]) | 
| 66 |  * @PANGO_ATTR_STRIKETHROUGH_COLOR: strikethrough color ([struct@Pango.AttrColor]) | 
| 67 |  * @PANGO_ATTR_ABSOLUTE_SIZE: font size in pixels scaled by %PANGO_SCALE ([struct@Pango.AttrInt]) | 
| 68 |  * @PANGO_ATTR_GRAVITY: base text gravity ([struct@Pango.AttrInt]) | 
| 69 |  * @PANGO_ATTR_GRAVITY_HINT: gravity hint ([struct@Pango.AttrInt]) | 
| 70 |  * @PANGO_ATTR_FONT_FEATURES: OpenType font features ([struct@Pango.AttrFontFeatures]). Since 1.38 | 
| 71 |  * @PANGO_ATTR_FOREGROUND_ALPHA: foreground alpha ([struct@Pango.AttrInt]). Since 1.38 | 
| 72 |  * @PANGO_ATTR_BACKGROUND_ALPHA: background alpha ([struct@Pango.AttrInt]). Since 1.38 | 
| 73 |  * @PANGO_ATTR_ALLOW_BREAKS: whether breaks are allowed ([struct@Pango.AttrInt]). Since 1.44 | 
| 74 |  * @PANGO_ATTR_SHOW: how to render invisible characters ([struct@Pango.AttrInt]). Since 1.44 | 
| 75 |  * @PANGO_ATTR_INSERT_HYPHENS: whether to insert hyphens at intra-word line breaks ([struct@Pango.AttrInt]). Since 1.44 | 
| 76 |  * @PANGO_ATTR_OVERLINE: whether the text has an overline ([struct@Pango.AttrInt]). Since 1.46 | 
| 77 |  * @PANGO_ATTR_OVERLINE_COLOR: overline color ([struct@Pango.AttrColor]). Since 1.46 | 
| 78 |  * @PANGO_ATTR_LINE_HEIGHT: line height factor ([struct@Pango.AttrFloat]). Since: 1.50 | 
| 79 |  * @PANGO_ATTR_ABSOLUTE_LINE_HEIGHT: line height ([struct@Pango.AttrInt]). Since: 1.50 | 
| 80 |  * @PANGO_ATTR_WORD: override segmentation to classify the range of the attribute as a single word ([struct@Pango.AttrInt]). Since 1.50 | 
| 81 |  * @PANGO_ATTR_SENTENCE: override segmentation to classify the range of the attribute as a single sentence ([struct@Pango.AttrInt]). Since 1.50 | 
| 82 |  * @PANGO_ATTR_BASELINE_SHIFT: baseline displacement ([struct@Pango.AttrInt]). Since 1.50 | 
| 83 |  * @PANGO_ATTR_FONT_SCALE: font-relative size change ([struct@Pango.AttrInt]). Since 1.50 | 
| 84 |  * | 
| 85 |  * The `PangoAttrType` distinguishes between different types of attributes. | 
| 86 |  * | 
| 87 |  * Along with the predefined values, it is possible to allocate additional | 
| 88 |  * values for custom attributes using [func@AttrType.register]. The predefined | 
| 89 |  * values are given below. The type of structure used to store the attribute is | 
| 90 |  * listed in parentheses after the description. | 
| 91 |  */ | 
| 92 | typedef enum | 
| 93 | { | 
| 94 |   PANGO_ATTR_INVALID,           /* 0 is an invalid attribute type */ | 
| 95 |   PANGO_ATTR_LANGUAGE,          /* PangoAttrLanguage */ | 
| 96 |   PANGO_ATTR_FAMILY,            /* PangoAttrString */ | 
| 97 |   PANGO_ATTR_STYLE,             /* PangoAttrInt */ | 
| 98 |   PANGO_ATTR_WEIGHT,            /* PangoAttrInt */ | 
| 99 |   PANGO_ATTR_VARIANT,           /* PangoAttrInt */ | 
| 100 |   PANGO_ATTR_STRETCH,           /* PangoAttrInt */ | 
| 101 |   PANGO_ATTR_SIZE,              /* PangoAttrSize */ | 
| 102 |   PANGO_ATTR_FONT_DESC,         /* PangoAttrFontDesc */ | 
| 103 |   PANGO_ATTR_FOREGROUND,        /* PangoAttrColor */ | 
| 104 |   PANGO_ATTR_BACKGROUND,        /* PangoAttrColor */ | 
| 105 |   PANGO_ATTR_UNDERLINE,         /* PangoAttrInt */ | 
| 106 |   PANGO_ATTR_STRIKETHROUGH,     /* PangoAttrInt */ | 
| 107 |   PANGO_ATTR_RISE,              /* PangoAttrInt */ | 
| 108 |   PANGO_ATTR_SHAPE,             /* PangoAttrShape */ | 
| 109 |   PANGO_ATTR_SCALE,             /* PangoAttrFloat */ | 
| 110 |   PANGO_ATTR_FALLBACK,          /* PangoAttrInt */ | 
| 111 |   PANGO_ATTR_LETTER_SPACING,    /* PangoAttrInt */ | 
| 112 |   PANGO_ATTR_UNDERLINE_COLOR,   /* PangoAttrColor */ | 
| 113 |   PANGO_ATTR_STRIKETHROUGH_COLOR,/* PangoAttrColor */ | 
| 114 |   PANGO_ATTR_ABSOLUTE_SIZE,     /* PangoAttrSize */ | 
| 115 |   PANGO_ATTR_GRAVITY,           /* PangoAttrInt */ | 
| 116 |   PANGO_ATTR_GRAVITY_HINT,      /* PangoAttrInt */ | 
| 117 |   PANGO_ATTR_FONT_FEATURES,     /* PangoAttrFontFeatures */ | 
| 118 |   PANGO_ATTR_FOREGROUND_ALPHA,  /* PangoAttrInt */ | 
| 119 |   PANGO_ATTR_BACKGROUND_ALPHA,  /* PangoAttrInt */ | 
| 120 |   PANGO_ATTR_ALLOW_BREAKS,      /* PangoAttrInt */ | 
| 121 |   PANGO_ATTR_SHOW,              /* PangoAttrInt */ | 
| 122 |   PANGO_ATTR_INSERT_HYPHENS,    /* PangoAttrInt */ | 
| 123 |   PANGO_ATTR_OVERLINE,          /* PangoAttrInt */ | 
| 124 |   PANGO_ATTR_OVERLINE_COLOR,    /* PangoAttrColor */ | 
| 125 |   PANGO_ATTR_LINE_HEIGHT,       /* PangoAttrFloat */ | 
| 126 |   PANGO_ATTR_ABSOLUTE_LINE_HEIGHT, /* PangoAttrInt */ | 
| 127 |   PANGO_ATTR_TEXT_TRANSFORM,    /* PangoAttrInt */ | 
| 128 |   PANGO_ATTR_WORD,              /* PangoAttrInt */ | 
| 129 |   PANGO_ATTR_SENTENCE,          /* PangoAttrInt */ | 
| 130 |   PANGO_ATTR_BASELINE_SHIFT,    /* PangoAttrSize */ | 
| 131 |   PANGO_ATTR_FONT_SCALE,        /* PangoAttrInt */ | 
| 132 | } PangoAttrType; | 
| 133 |  | 
| 134 | /** | 
| 135 |  * PangoUnderline: | 
| 136 |  * @PANGO_UNDERLINE_NONE: no underline should be drawn | 
| 137 |  * @PANGO_UNDERLINE_SINGLE: a single underline should be drawn | 
| 138 |  * @PANGO_UNDERLINE_DOUBLE: a double underline should be drawn | 
| 139 |  * @PANGO_UNDERLINE_LOW: a single underline should be drawn at a | 
| 140 |  *   position beneath the ink extents of the text being | 
| 141 |  *   underlined. This should be used only for underlining | 
| 142 |  *   single characters, such as for keyboard accelerators. | 
| 143 |  *   %PANGO_UNDERLINE_SINGLE should be used for extended | 
| 144 |  *   portions of text. | 
| 145 |  * @PANGO_UNDERLINE_ERROR: an underline indicating an error should | 
| 146 |  *   be drawn below. The exact style of rendering is up to the | 
| 147 |  *   `PangoRenderer` in use, but typical styles include wavy | 
| 148 |  *   or dotted lines. | 
| 149 |  *   This underline is typically used to indicate an error such | 
| 150 |  *   as a possible mispelling; in some cases a contrasting color | 
| 151 |  *   may automatically be used. This type of underlining is | 
| 152 |  *   available since Pango 1.4. | 
| 153 |  * @PANGO_UNDERLINE_SINGLE_LINE: Like @PANGO_UNDERLINE_SINGLE, but | 
| 154 |  *   drawn continuously across multiple runs. This type | 
| 155 |  *   of underlining is available since Pango 1.46. | 
| 156 |  * @PANGO_UNDERLINE_DOUBLE_LINE: Like @PANGO_UNDERLINE_DOUBLE, but | 
| 157 |  *   drawn continuously across multiple runs. This type | 
| 158 |  *   of underlining is available since Pango 1.46. | 
| 159 |  * @PANGO_UNDERLINE_ERROR_LINE: Like @PANGO_UNDERLINE_ERROR, but | 
| 160 |  *   drawn continuously across multiple runs. This type | 
| 161 |  *   of underlining is available since Pango 1.46. | 
| 162 |  * | 
| 163 |  * The `PangoUnderline` enumeration is used to specify whether text | 
| 164 |  * should be underlined, and if so, the type of underlining. | 
| 165 |  */ | 
| 166 | typedef enum { | 
| 167 |   PANGO_UNDERLINE_NONE, | 
| 168 |   PANGO_UNDERLINE_SINGLE, | 
| 169 |   PANGO_UNDERLINE_DOUBLE, | 
| 170 |   PANGO_UNDERLINE_LOW, | 
| 171 |   PANGO_UNDERLINE_ERROR, | 
| 172 |   PANGO_UNDERLINE_SINGLE_LINE, | 
| 173 |   PANGO_UNDERLINE_DOUBLE_LINE, | 
| 174 |   PANGO_UNDERLINE_ERROR_LINE | 
| 175 | } PangoUnderline; | 
| 176 |  | 
| 177 |  | 
| 178 | /** | 
| 179 |  * PangoOverline: | 
| 180 |  * @PANGO_OVERLINE_NONE: no overline should be drawn | 
| 181 |  * @PANGO_OVERLINE_SINGLE: Draw a single line above the ink | 
| 182 |  *   extents of the text being underlined. | 
| 183 |  * | 
| 184 |  * The `PangoOverline` enumeration is used to specify whether text | 
| 185 |  * should be overlined, and if so, the type of line. | 
| 186 |  * | 
| 187 |  * Since: 1.46 | 
| 188 |  */ | 
| 189 | typedef enum { | 
| 190 |   PANGO_OVERLINE_NONE, | 
| 191 |   PANGO_OVERLINE_SINGLE | 
| 192 | } PangoOverline; | 
| 193 |  | 
| 194 | /** | 
| 195 |  * PangoShowFlags: | 
| 196 |  * @PANGO_SHOW_NONE: No special treatment for invisible characters | 
| 197 |  * @PANGO_SHOW_SPACES: Render spaces, tabs and newlines visibly | 
| 198 |  * @PANGO_SHOW_LINE_BREAKS: Render line breaks visibly | 
| 199 |  * @PANGO_SHOW_IGNORABLES: Render default-ignorable Unicode | 
| 200 |  *   characters visibly | 
| 201 |  * | 
| 202 |  * These flags affect how Pango treats characters that are normally | 
| 203 |  * not visible in the output. | 
| 204 |  * | 
| 205 |  * Since: 1.44 | 
| 206 |  */ | 
| 207 | typedef enum { | 
| 208 |   PANGO_SHOW_NONE        = 0, | 
| 209 |   PANGO_SHOW_SPACES      = 1 << 0, | 
| 210 |   PANGO_SHOW_LINE_BREAKS = 1 << 1, | 
| 211 |   PANGO_SHOW_IGNORABLES  = 1 << 2 | 
| 212 | } PangoShowFlags; | 
| 213 |  | 
| 214 | /** | 
| 215 |  * PangoTextTransform: | 
| 216 |  * @PANGO_TEXT_TRANSFORM_NONE: Leave text unchanged | 
| 217 |  * @PANGO_TEXT_TRANSFORM_LOWERCASE: Display letters and numbers as lowercase | 
| 218 |  * @PANGO_TEXT_TRANSFORM_UPPERCASE: Display letters and numbers as uppercase | 
| 219 |  * @PANGO_TEXT_TRANSFORM_CAPITALIZE: Display the first character of a word | 
| 220 |  *   in titlecase | 
| 221 |  * | 
| 222 |  * An enumeration that affects how Pango treats characters during shaping. | 
| 223 |  * | 
| 224 |  * Since: 1.50 | 
| 225 |  */ | 
| 226 | typedef enum { | 
| 227 |   PANGO_TEXT_TRANSFORM_NONE, | 
| 228 |   PANGO_TEXT_TRANSFORM_LOWERCASE, | 
| 229 |   PANGO_TEXT_TRANSFORM_UPPERCASE, | 
| 230 |   PANGO_TEXT_TRANSFORM_CAPITALIZE, | 
| 231 | } PangoTextTransform; | 
| 232 |  | 
| 233 | /** | 
| 234 |  * PangoBaselineShift: | 
| 235 |  * @PANGO_BASELINE_SHIFT_NONE: Leave the baseline unchanged | 
| 236 |  * @PANGO_BASELINE_SHIFT_SUPERSCRIPT: Shift the baseline to the superscript position, | 
| 237 |  *   relative to the previous run | 
| 238 |  * @PANGO_BASELINE_SHIFT_SUBSCRIPT: Shift the baseline to the subscript position, | 
| 239 |  *   relative to the previous run | 
| 240 |  * | 
| 241 |  * An enumeration that affects baseline shifts between runs. | 
| 242 |  * | 
| 243 |  * Since: 1.50 | 
| 244 |  */ | 
| 245 | typedef enum { | 
| 246 |   PANGO_BASELINE_SHIFT_NONE, | 
| 247 |   PANGO_BASELINE_SHIFT_SUPERSCRIPT, | 
| 248 |   PANGO_BASELINE_SHIFT_SUBSCRIPT, | 
| 249 | } PangoBaselineShift; | 
| 250 |  | 
| 251 | /** | 
| 252 |  * PangoFontScale: | 
| 253 |  * @PANGO_FONT_SCALE_NONE: Leave the font size unchanged | 
| 254 |  * @PANGO_FONT_SCALE_SUPERSCRIPT: Change the font to a size suitable for superscripts | 
| 255 |  * @PANGO_FONT_SCALE_SUBSCRIPT: Change the font to a size suitable for subscripts | 
| 256 |  * @PANGO_FONT_SCALE_SMALL_CAPS: Change the font to a size suitable for Small Caps | 
| 257 |  * | 
| 258 |  * An enumeration that affects font sizes for superscript | 
| 259 |  * and subscript positioning and for (emulated) Small Caps. | 
| 260 |  * | 
| 261 |  * Since: 1.50 | 
| 262 |  */ | 
| 263 | typedef enum { | 
| 264 |   PANGO_FONT_SCALE_NONE, | 
| 265 |   PANGO_FONT_SCALE_SUPERSCRIPT, | 
| 266 |   PANGO_FONT_SCALE_SUBSCRIPT, | 
| 267 |   PANGO_FONT_SCALE_SMALL_CAPS, | 
| 268 | } PangoFontScale; | 
| 269 |  | 
| 270 | /** | 
| 271 |  * PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING: | 
| 272 |  * | 
| 273 |  * Value for @start_index in `PangoAttribute` that indicates | 
| 274 |  * the beginning of the text. | 
| 275 |  * | 
| 276 |  * Since: 1.24 | 
| 277 |  */ | 
| 278 | #define PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING ((guint)0) | 
| 279 |  | 
| 280 | /** | 
| 281 |  * PANGO_ATTR_INDEX_TO_TEXT_END: (value 4294967295) | 
| 282 |  * | 
| 283 |  * Value for @end_index in `PangoAttribute` that indicates | 
| 284 |  * the end of the text. | 
| 285 |  * | 
| 286 |  * Since: 1.24 | 
| 287 |  */ | 
| 288 | #define PANGO_ATTR_INDEX_TO_TEXT_END ((guint)(G_MAXUINT + 0)) | 
| 289 |  | 
| 290 | /** | 
| 291 |  * PangoAttribute: | 
| 292 |  * @klass: the class structure holding information about the type of the attribute | 
| 293 |  * @start_index: the start index of the range (in bytes). | 
| 294 |  * @end_index: end index of the range (in bytes). The character at this index | 
| 295 |  *   is not included in the range. | 
| 296 |  * | 
| 297 |  * The `PangoAttribute` structure represents the common portions of all | 
| 298 |  * attributes. | 
| 299 |  * | 
| 300 |  * Particular types of attributes include this structure as their initial | 
| 301 |  * portion. The common portion of the attribute holds the range to which | 
| 302 |  * the value in the type-specific part of the attribute applies and should | 
| 303 |  * be initialized using [method@Pango.Attribute.init]. By default, an attribute | 
| 304 |  * will have an all-inclusive range of [0,%G_MAXUINT]. | 
| 305 |  */ | 
| 306 | struct _PangoAttribute | 
| 307 | { | 
| 308 |   const PangoAttrClass *klass; | 
| 309 |   guint start_index; | 
| 310 |   guint end_index; | 
| 311 | }; | 
| 312 |  | 
| 313 | /** | 
| 314 |  * PangoAttrFilterFunc: | 
| 315 |  * @attribute: a Pango attribute | 
| 316 |  * @user_data: user data passed to the function | 
| 317 |  * | 
| 318 |  * Type of a function filtering a list of attributes. | 
| 319 |  * | 
| 320 |  * Return value: %TRUE if the attribute should be selected for | 
| 321 |  *   filtering, %FALSE otherwise. | 
| 322 |  */ | 
| 323 | typedef gboolean (*PangoAttrFilterFunc) (PangoAttribute *attribute, | 
| 324 |                                          gpointer        user_data); | 
| 325 |  | 
| 326 | /** | 
| 327 |  * PangoAttrDataCopyFunc: | 
| 328 |  * @user_data: user data to copy | 
| 329 |  * | 
| 330 |  * Type of a function that can duplicate user data for an attribute. | 
| 331 |  * | 
| 332 |  * Return value: new copy of @user_data. | 
| 333 |  **/ | 
| 334 | typedef gpointer (*PangoAttrDataCopyFunc) (gconstpointer user_data); | 
| 335 |  | 
| 336 | /** | 
| 337 |  * PangoAttrClass: | 
| 338 |  * @type: the type ID for this attribute | 
| 339 |  * @copy: function to duplicate an attribute of this type | 
| 340 |  *   (see [method@Pango.Attribute.copy]) | 
| 341 |  * @destroy: function to free an attribute of this type | 
| 342 |  *   (see [method@Pango.Attribute.destroy]) | 
| 343 |  * @equal: function to check two attributes of this type for equality | 
| 344 |  *   (see [method@Pango.Attribute.equal]) | 
| 345 |  * | 
| 346 |  * The `PangoAttrClass` structure stores the type and operations for | 
| 347 |  * a particular type of attribute. | 
| 348 |  * | 
| 349 |  * The functions in this structure should not be called directly. Instead, | 
| 350 |  * one should use the wrapper functions provided for `PangoAttribute`. | 
| 351 |  */ | 
| 352 | struct _PangoAttrClass | 
| 353 | { | 
| 354 |   /*< public >*/ | 
| 355 |   PangoAttrType type; | 
| 356 |   PangoAttribute * (*copy) (const PangoAttribute *attr); | 
| 357 |   void             (*destroy) (PangoAttribute *attr); | 
| 358 |   gboolean         (*equal) (const PangoAttribute *attr1, const PangoAttribute *attr2); | 
| 359 | }; | 
| 360 |  | 
| 361 | /** | 
| 362 |  * PangoAttrString: | 
| 363 |  * @attr: the common portion of the attribute | 
| 364 |  * @value: the string which is the value of the attribute | 
| 365 |  * | 
| 366 |  * The `PangoAttrString` structure is used to represent attributes with | 
| 367 |  * a string value. | 
| 368 |  */ | 
| 369 | struct _PangoAttrString | 
| 370 | { | 
| 371 |   PangoAttribute attr; | 
| 372 |   char *value; | 
| 373 | }; | 
| 374 | /** | 
| 375 |  * PangoAttrLanguage: | 
| 376 |  * @attr: the common portion of the attribute | 
| 377 |  * @value: the `PangoLanguage` which is the value of the attribute | 
| 378 |  * | 
| 379 |  * The `PangoAttrLanguage` structure is used to represent attributes that | 
| 380 |  * are languages. | 
| 381 |  */ | 
| 382 | struct _PangoAttrLanguage | 
| 383 | { | 
| 384 |   PangoAttribute attr; | 
| 385 |   PangoLanguage *value; | 
| 386 | }; | 
| 387 | /** | 
| 388 |  * PangoAttrInt: | 
| 389 |  * @attr: the common portion of the attribute | 
| 390 |  * @value: the value of the attribute | 
| 391 |  * | 
| 392 |  * The `PangoAttrInt` structure is used to represent attributes with | 
| 393 |  * an integer or enumeration value. | 
| 394 |  */ | 
| 395 | struct _PangoAttrInt | 
| 396 | { | 
| 397 |   PangoAttribute attr; | 
| 398 |   int value; | 
| 399 | }; | 
| 400 | /** | 
| 401 |  * PangoAttrFloat: | 
| 402 |  * @attr: the common portion of the attribute | 
| 403 |  * @value: the value of the attribute | 
| 404 |  * | 
| 405 |  * The `PangoAttrFloat` structure is used to represent attributes with | 
| 406 |  * a float or double value. | 
| 407 |  */ | 
| 408 | struct _PangoAttrFloat | 
| 409 | { | 
| 410 |   PangoAttribute attr; | 
| 411 |   double value; | 
| 412 | }; | 
| 413 | /** | 
| 414 |  * PangoAttrColor: | 
| 415 |  * @attr: the common portion of the attribute | 
| 416 |  * @color: the `PangoColor` which is the value of the attribute | 
| 417 |  * | 
| 418 |  * The `PangoAttrColor` structure is used to represent attributes that | 
| 419 |  * are colors. | 
| 420 |  */ | 
| 421 | struct _PangoAttrColor | 
| 422 | { | 
| 423 |   PangoAttribute attr; | 
| 424 |   PangoColor color; | 
| 425 | }; | 
| 426 |  | 
| 427 | /** | 
| 428 |  * PangoAttrSize: | 
| 429 |  * @attr: the common portion of the attribute | 
| 430 |  * @size: size of font, in units of 1/%PANGO_SCALE of a point (for | 
| 431 |  *   %PANGO_ATTR_SIZE) or of a device unit (for %PANGO_ATTR_ABSOLUTE_SIZE) | 
| 432 |  * @absolute: whether the font size is in device units or points. | 
| 433 |  *   This field is only present for compatibility with Pango-1.8.0 | 
| 434 |  *   (%PANGO_ATTR_ABSOLUTE_SIZE was added in 1.8.1); and always will | 
| 435 |  *   be %FALSE for %PANGO_ATTR_SIZE and %TRUE for %PANGO_ATTR_ABSOLUTE_SIZE. | 
| 436 |  * | 
| 437 |  * The `PangoAttrSize` structure is used to represent attributes which | 
| 438 |  * set font size. | 
| 439 |  */ | 
| 440 | struct _PangoAttrSize | 
| 441 | { | 
| 442 |   PangoAttribute attr; | 
| 443 |   int size; | 
| 444 |   guint absolute : 1; | 
| 445 | }; | 
| 446 |  | 
| 447 | /** | 
| 448 |  * PangoAttrShape: | 
| 449 |  * @attr: the common portion of the attribute | 
| 450 |  * @ink_rect: the ink rectangle to restrict to | 
| 451 |  * @logical_rect: the logical rectangle to restrict to | 
| 452 |  * @data: user data set (see [func@Pango.AttrShape.new_with_data]) | 
| 453 |  * @copy_func: copy function for the user data | 
| 454 |  * @destroy_func: destroy function for the user data | 
| 455 |  * | 
| 456 |  * The `PangoAttrShape` structure is used to represent attributes which | 
| 457 |  * impose shape restrictions. | 
| 458 |  */ | 
| 459 | struct _PangoAttrShape | 
| 460 | { | 
| 461 |   PangoAttribute attr; | 
| 462 |   PangoRectangle ink_rect; | 
| 463 |   PangoRectangle logical_rect; | 
| 464 |  | 
| 465 |   gpointer              data; | 
| 466 |   PangoAttrDataCopyFunc copy_func; | 
| 467 |   GDestroyNotify        destroy_func; | 
| 468 | }; | 
| 469 |  | 
| 470 | /** | 
| 471 |  * PangoAttrFontDesc: | 
| 472 |  * @attr: the common portion of the attribute | 
| 473 |  * @desc: the font description which is the value of this attribute | 
| 474 |  * | 
| 475 |  * The `PangoAttrFontDesc` structure is used to store an attribute that | 
| 476 |  * sets all aspects of the font description at once. | 
| 477 |  */ | 
| 478 | struct _PangoAttrFontDesc | 
| 479 | { | 
| 480 |   PangoAttribute attr; | 
| 481 |   PangoFontDescription *desc; | 
| 482 | }; | 
| 483 |  | 
| 484 | /** | 
| 485 |  * PangoAttrFontFeatures: | 
| 486 |  * @attr: the common portion of the attribute | 
| 487 |  * @features: the features, as a string in CSS syntax | 
| 488 |  * | 
| 489 |  * The `PangoAttrFontFeatures` structure is used to represent OpenType | 
| 490 |  * font features as an attribute. | 
| 491 |  * | 
| 492 |  * Since: 1.38 | 
| 493 |  */ | 
| 494 | struct _PangoAttrFontFeatures | 
| 495 | { | 
| 496 |   PangoAttribute attr; | 
| 497 |   gchar *features; | 
| 498 | }; | 
| 499 |  | 
| 500 | PANGO_AVAILABLE_IN_ALL | 
| 501 | GType                   pango_attribute_get_type                (void) G_GNUC_CONST; | 
| 502 |  | 
| 503 | PANGO_AVAILABLE_IN_ALL | 
| 504 | PangoAttrType           pango_attr_type_register                (const char                 *name); | 
| 505 | PANGO_AVAILABLE_IN_1_22 | 
| 506 | const char *            pango_attr_type_get_name                (PangoAttrType               type) G_GNUC_CONST; | 
| 507 | PANGO_AVAILABLE_IN_1_20 | 
| 508 | void                    pango_attribute_init                    (PangoAttribute             *attr, | 
| 509 |                                                                  const PangoAttrClass       *klass); | 
| 510 | PANGO_AVAILABLE_IN_ALL | 
| 511 | PangoAttribute *        pango_attribute_copy                    (const PangoAttribute       *attr); | 
| 512 | PANGO_AVAILABLE_IN_ALL | 
| 513 | void                    pango_attribute_destroy                 (PangoAttribute             *attr); | 
| 514 | PANGO_AVAILABLE_IN_ALL | 
| 515 | gboolean                pango_attribute_equal                   (const PangoAttribute       *attr1, | 
| 516 |                                                                  const PangoAttribute       *attr2) G_GNUC_PURE; | 
| 517 |  | 
| 518 | PANGO_AVAILABLE_IN_ALL | 
| 519 | PangoAttribute *        pango_attr_language_new                 (PangoLanguage              *language); | 
| 520 | PANGO_AVAILABLE_IN_ALL | 
| 521 | PangoAttribute *        pango_attr_family_new                   (const char                 *family); | 
| 522 | PANGO_AVAILABLE_IN_ALL | 
| 523 | PangoAttribute *        pango_attr_foreground_new               (guint16                     red, | 
| 524 |                                                                  guint16                     green, | 
| 525 |                                                                  guint16                     blue); | 
| 526 | PANGO_AVAILABLE_IN_ALL | 
| 527 | PangoAttribute *        pango_attr_background_new               (guint16                     red, | 
| 528 |                                                                  guint16                     green, | 
| 529 |                                                                  guint16                     blue); | 
| 530 | PANGO_AVAILABLE_IN_ALL | 
| 531 | PangoAttribute *        pango_attr_size_new                     (int                         size); | 
| 532 | PANGO_AVAILABLE_IN_1_8 | 
| 533 | PangoAttribute *        pango_attr_size_new_absolute            (int                         size); | 
| 534 | PANGO_AVAILABLE_IN_ALL | 
| 535 | PangoAttribute *        pango_attr_style_new                    (PangoStyle                  style); | 
| 536 | PANGO_AVAILABLE_IN_ALL | 
| 537 | PangoAttribute *        pango_attr_weight_new                   (PangoWeight                 weight); | 
| 538 | PANGO_AVAILABLE_IN_ALL | 
| 539 | PangoAttribute *        pango_attr_variant_new                  (PangoVariant                variant); | 
| 540 | PANGO_AVAILABLE_IN_ALL | 
| 541 | PangoAttribute *        pango_attr_stretch_new                  (PangoStretch                stretch); | 
| 542 | PANGO_AVAILABLE_IN_ALL | 
| 543 | PangoAttribute *        pango_attr_font_desc_new                (const PangoFontDescription *desc); | 
| 544 |  | 
| 545 | PANGO_AVAILABLE_IN_ALL | 
| 546 | PangoAttribute *        pango_attr_underline_new                (PangoUnderline              underline); | 
| 547 | PANGO_AVAILABLE_IN_1_8 | 
| 548 | PangoAttribute *        pango_attr_underline_color_new          (guint16                     red, | 
| 549 |                                                                  guint16                     green, | 
| 550 |                                                                  guint16                     blue); | 
| 551 | PANGO_AVAILABLE_IN_ALL | 
| 552 | PangoAttribute *        pango_attr_strikethrough_new            (gboolean                    strikethrough); | 
| 553 | PANGO_AVAILABLE_IN_1_8 | 
| 554 | PangoAttribute *        pango_attr_strikethrough_color_new      (guint16                     red, | 
| 555 |                                                                  guint16                     green, | 
| 556 |                                                                  guint16                     blue); | 
| 557 | PANGO_AVAILABLE_IN_ALL | 
| 558 | PangoAttribute *        pango_attr_rise_new                     (int                         rise); | 
| 559 | PANGO_AVAILABLE_IN_1_50 | 
| 560 | PangoAttribute *        pango_attr_baseline_shift_new           (int                         shift); | 
| 561 | PANGO_AVAILABLE_IN_1_50 | 
| 562 | PangoAttribute *        pango_attr_font_scale_new               (PangoFontScale              scale); | 
| 563 | PANGO_AVAILABLE_IN_ALL | 
| 564 | PangoAttribute *        pango_attr_scale_new                    (double                      scale_factor); | 
| 565 | PANGO_AVAILABLE_IN_1_4 | 
| 566 | PangoAttribute *        pango_attr_fallback_new                 (gboolean                    enable_fallback); | 
| 567 | PANGO_AVAILABLE_IN_1_6 | 
| 568 | PangoAttribute *        pango_attr_letter_spacing_new           (int                         letter_spacing); | 
| 569 | PANGO_AVAILABLE_IN_ALL | 
| 570 | PangoAttribute *        pango_attr_shape_new                    (const PangoRectangle        *ink_rect, | 
| 571 |                                                                  const PangoRectangle        *logical_rect); | 
| 572 | PANGO_AVAILABLE_IN_1_8 | 
| 573 | PangoAttribute *        pango_attr_shape_new_with_data          (const PangoRectangle        *ink_rect, | 
| 574 |                                                                  const PangoRectangle        *logical_rect, | 
| 575 |                                                                  gpointer                     data, | 
| 576 |                                                                  PangoAttrDataCopyFunc        copy_func, | 
| 577 |                                                                  GDestroyNotify               destroy_func); | 
| 578 | PANGO_AVAILABLE_IN_1_16 | 
| 579 | PangoAttribute *        pango_attr_gravity_new                  (PangoGravity                 gravity); | 
| 580 | PANGO_AVAILABLE_IN_1_16 | 
| 581 | PangoAttribute *        pango_attr_gravity_hint_new             (PangoGravityHint             hint); | 
| 582 | PANGO_AVAILABLE_IN_1_38 | 
| 583 | PangoAttribute *        pango_attr_font_features_new            (const char                  *features); | 
| 584 | PANGO_AVAILABLE_IN_1_38 | 
| 585 | PangoAttribute *        pango_attr_foreground_alpha_new         (guint16                      alpha); | 
| 586 | PANGO_AVAILABLE_IN_1_38 | 
| 587 | PangoAttribute *        pango_attr_background_alpha_new         (guint16                      alpha); | 
| 588 | PANGO_AVAILABLE_IN_1_44 | 
| 589 | PangoAttribute *        pango_attr_allow_breaks_new             (gboolean                     allow_breaks); | 
| 590 |  | 
| 591 | PANGO_AVAILABLE_IN_1_50 | 
| 592 | PangoAttribute *        pango_attr_word_new                     (void); | 
| 593 | PANGO_AVAILABLE_IN_1_50 | 
| 594 | PangoAttribute *        pango_attr_sentence_new                 (void); | 
| 595 |  | 
| 596 | PANGO_AVAILABLE_IN_1_44 | 
| 597 | PangoAttribute *        pango_attr_insert_hyphens_new           (gboolean                     insert_hyphens); | 
| 598 | PANGO_AVAILABLE_IN_1_46 | 
| 599 | PangoAttribute *        pango_attr_overline_new                 (PangoOverline                overline); | 
| 600 | PANGO_AVAILABLE_IN_1_46 | 
| 601 | PangoAttribute *        pango_attr_overline_color_new           (guint16                      red, | 
| 602 |                                                                  guint16                      green, | 
| 603 |                                                                  guint16                      blue); | 
| 604 | PANGO_AVAILABLE_IN_1_44 | 
| 605 | PangoAttribute *        pango_attr_show_new                     (PangoShowFlags               flags); | 
| 606 | PANGO_AVAILABLE_IN_1_50 | 
| 607 | PangoAttribute *        pango_attr_line_height_new              (double                       factor); | 
| 608 | PANGO_AVAILABLE_IN_1_50 | 
| 609 | PangoAttribute *        pango_attr_line_height_new_absolute     (int                          height); | 
| 610 | PANGO_AVAILABLE_IN_1_50 | 
| 611 | PangoAttribute *        pango_attr_text_transform_new           (PangoTextTransform transform); | 
| 612 |  | 
| 613 | PANGO_AVAILABLE_IN_1_50 | 
| 614 | PangoAttrString       * pango_attribute_as_string               (PangoAttribute              *attr); | 
| 615 | PANGO_AVAILABLE_IN_1_50 | 
| 616 | PangoAttrLanguage     * pango_attribute_as_language             (PangoAttribute              *attr); | 
| 617 | PANGO_AVAILABLE_IN_1_50 | 
| 618 | PangoAttrInt          * pango_attribute_as_int                  (PangoAttribute              *attr); | 
| 619 | PANGO_AVAILABLE_IN_1_50 | 
| 620 | PangoAttrSize         * pango_attribute_as_size                 (PangoAttribute              *attr); | 
| 621 | PANGO_AVAILABLE_IN_1_50 | 
| 622 | PangoAttrFloat        * pango_attribute_as_float                (PangoAttribute              *attr); | 
| 623 | PANGO_AVAILABLE_IN_1_50 | 
| 624 | PangoAttrColor        * pango_attribute_as_color                (PangoAttribute              *attr); | 
| 625 | PANGO_AVAILABLE_IN_1_50 | 
| 626 | PangoAttrFontDesc     * pango_attribute_as_font_desc            (PangoAttribute              *attr); | 
| 627 | PANGO_AVAILABLE_IN_1_50 | 
| 628 | PangoAttrShape        * pango_attribute_as_shape                (PangoAttribute              *attr); | 
| 629 | PANGO_AVAILABLE_IN_1_50 | 
| 630 | PangoAttrFontFeatures * pango_attribute_as_font_features        (PangoAttribute              *attr); | 
| 631 |  | 
| 632 | /* Attribute lists */ | 
| 633 |  | 
| 634 | typedef struct _PangoAttrList     PangoAttrList; | 
| 635 | typedef struct _PangoAttrIterator PangoAttrIterator; | 
| 636 |  | 
| 637 | #define PANGO_TYPE_ATTR_LIST pango_attr_list_get_type () | 
| 638 |  | 
| 639 | /** | 
| 640 |  * PangoAttrIterator: | 
| 641 |  * | 
| 642 |  * A `PangoAttrIterator` is used to iterate through a `PangoAttrList`. | 
| 643 |  * | 
| 644 |  * A new iterator is created with [method@Pango.AttrList.get_iterator]. | 
| 645 |  * Once the iterator is created, it can be advanced through the style | 
| 646 |  * changes in the text using [method@Pango.AttrIterator.next]. At each | 
| 647 |  * style change, the range of the current style segment and the attributes | 
| 648 |  * currently in effect can be queried. | 
| 649 |  */ | 
| 650 |  | 
| 651 | /** | 
| 652 |  * PangoAttrList: | 
| 653 |  * | 
| 654 |  * A `PangoAttrList` represents a list of attributes that apply to a section | 
| 655 |  * of text. | 
| 656 |  * | 
| 657 |  * The attributes in a `PangoAttrList` are, in general, allowed to overlap in | 
| 658 |  * an arbitrary fashion. However, if the attributes are manipulated only through | 
| 659 |  * [method@Pango.AttrList.change], the overlap between properties will meet | 
| 660 |  * stricter criteria. | 
| 661 |  * | 
| 662 |  * Since the `PangoAttrList` structure is stored as a linear list, it is not | 
| 663 |  * suitable for storing attributes for large amounts of text. In general, you | 
| 664 |  * should not use a single `PangoAttrList` for more than one paragraph of text. | 
| 665 |  */ | 
| 666 |  | 
| 667 | PANGO_AVAILABLE_IN_ALL | 
| 668 | GType                   pango_attr_list_get_type        (void) G_GNUC_CONST; | 
| 669 |  | 
| 670 | PANGO_AVAILABLE_IN_ALL | 
| 671 | PangoAttrList *         pango_attr_list_new             (void); | 
| 672 | PANGO_AVAILABLE_IN_1_10 | 
| 673 | PangoAttrList *         pango_attr_list_ref             (PangoAttrList         *list); | 
| 674 | PANGO_AVAILABLE_IN_ALL | 
| 675 | void                    pango_attr_list_unref           (PangoAttrList         *list); | 
| 676 | PANGO_AVAILABLE_IN_ALL | 
| 677 | PangoAttrList *         pango_attr_list_copy            (PangoAttrList         *list); | 
| 678 | PANGO_AVAILABLE_IN_ALL | 
| 679 | void                    pango_attr_list_insert          (PangoAttrList         *list, | 
| 680 |                                                          PangoAttribute        *attr); | 
| 681 | PANGO_AVAILABLE_IN_ALL | 
| 682 | void                    pango_attr_list_insert_before   (PangoAttrList         *list, | 
| 683 |                                                          PangoAttribute        *attr); | 
| 684 | PANGO_AVAILABLE_IN_ALL | 
| 685 | void                    pango_attr_list_change          (PangoAttrList         *list, | 
| 686 |                                                          PangoAttribute        *attr); | 
| 687 | PANGO_AVAILABLE_IN_ALL | 
| 688 | void                    pango_attr_list_splice          (PangoAttrList         *list, | 
| 689 |                                                          PangoAttrList         *other, | 
| 690 |                                                          int                    pos, | 
| 691 |                                                          int                    len); | 
| 692 | PANGO_AVAILABLE_IN_1_44 | 
| 693 | void                    pango_attr_list_update          (PangoAttrList         *list, | 
| 694 |                                                          int                    pos, | 
| 695 |                                                          int                    remove, | 
| 696 |                                                          int                    add); | 
| 697 |  | 
| 698 | PANGO_AVAILABLE_IN_1_2 | 
| 699 | PangoAttrList *         pango_attr_list_filter          (PangoAttrList         *list, | 
| 700 |                                                          PangoAttrFilterFunc    func, | 
| 701 |                                                          gpointer               data); | 
| 702 |  | 
| 703 | PANGO_AVAILABLE_IN_1_44 | 
| 704 | GSList *                pango_attr_list_get_attributes  (PangoAttrList         *list); | 
| 705 |  | 
| 706 | PANGO_AVAILABLE_IN_1_46 | 
| 707 | gboolean                pango_attr_list_equal           (PangoAttrList         *list, | 
| 708 |                                                          PangoAttrList         *other_list); | 
| 709 |  | 
| 710 | PANGO_AVAILABLE_IN_1_50 | 
| 711 | char *                  pango_attr_list_to_string       (PangoAttrList         *list); | 
| 712 | PANGO_AVAILABLE_IN_1_50 | 
| 713 | PangoAttrList *         pango_attr_list_from_string     (const char            *text); | 
| 714 |  | 
| 715 | PANGO_AVAILABLE_IN_1_44 | 
| 716 | GType                   pango_attr_iterator_get_type    (void) G_GNUC_CONST; | 
| 717 |  | 
| 718 | PANGO_AVAILABLE_IN_ALL | 
| 719 | PangoAttrIterator *     pango_attr_list_get_iterator    (PangoAttrList         *list); | 
| 720 |  | 
| 721 | PANGO_AVAILABLE_IN_ALL | 
| 722 | void                    pango_attr_iterator_range       (PangoAttrIterator     *iterator, | 
| 723 |                                                          int                   *start, | 
| 724 |                                                          int                   *end); | 
| 725 | PANGO_AVAILABLE_IN_ALL | 
| 726 | gboolean                pango_attr_iterator_next        (PangoAttrIterator     *iterator); | 
| 727 | PANGO_AVAILABLE_IN_ALL | 
| 728 | PangoAttrIterator *     pango_attr_iterator_copy        (PangoAttrIterator     *iterator); | 
| 729 | PANGO_AVAILABLE_IN_ALL | 
| 730 | void                    pango_attr_iterator_destroy     (PangoAttrIterator     *iterator); | 
| 731 | PANGO_AVAILABLE_IN_ALL | 
| 732 | PangoAttribute *        pango_attr_iterator_get         (PangoAttrIterator     *iterator, | 
| 733 |                                                          PangoAttrType          type); | 
| 734 | PANGO_AVAILABLE_IN_ALL | 
| 735 | void                    pango_attr_iterator_get_font    (PangoAttrIterator     *iterator, | 
| 736 |                                                          PangoFontDescription  *desc, | 
| 737 |                                                          PangoLanguage        **language, | 
| 738 |                                                          GSList               **); | 
| 739 | PANGO_AVAILABLE_IN_1_2 | 
| 740 | GSList *                pango_attr_iterator_get_attrs   (PangoAttrIterator     *iterator); | 
| 741 |  | 
| 742 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoAttribute, pango_attribute_destroy) | 
| 743 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoAttrList, pango_attr_list_unref) | 
| 744 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoAttrIterator, pango_attr_iterator_destroy) | 
| 745 |  | 
| 746 | G_END_DECLS | 
| 747 |  | 
| 748 | #endif /* __PANGO_ATTRIBUTES_H__ */ | 
| 749 |  |