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
29G_BEGIN_DECLS
30
31
32typedef struct _PangoAttribute PangoAttribute;
33typedef struct _PangoAttrClass PangoAttrClass;
34
35typedef struct _PangoAttrString PangoAttrString;
36typedef struct _PangoAttrLanguage PangoAttrLanguage;
37typedef struct _PangoAttrInt PangoAttrInt;
38typedef struct _PangoAttrSize PangoAttrSize;
39typedef struct _PangoAttrFloat PangoAttrFloat;
40typedef struct _PangoAttrColor PangoAttrColor;
41typedef struct _PangoAttrFontDesc PangoAttrFontDesc;
42typedef struct _PangoAttrShape PangoAttrShape;
43typedef 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 */
92typedef 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 */
166typedef 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 */
189typedef 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 */
207typedef 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 */
226typedef 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 */
245typedef 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 */
263typedef 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 */
306struct _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 */
323typedef 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 **/
334typedef 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 */
352struct _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 */
369struct _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 */
382struct _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 */
395struct _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 */
408struct _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 */
421struct _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 */
440struct _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 */
459struct _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 */
478struct _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 */
494struct _PangoAttrFontFeatures
495{
496 PangoAttribute attr;
497 gchar *features;
498};
499
500PANGO_AVAILABLE_IN_ALL
501GType pango_attribute_get_type (void) G_GNUC_CONST;
502
503PANGO_AVAILABLE_IN_ALL
504PangoAttrType pango_attr_type_register (const char *name);
505PANGO_AVAILABLE_IN_1_22
506const char * pango_attr_type_get_name (PangoAttrType type) G_GNUC_CONST;
507PANGO_AVAILABLE_IN_1_20
508void pango_attribute_init (PangoAttribute *attr,
509 const PangoAttrClass *klass);
510PANGO_AVAILABLE_IN_ALL
511PangoAttribute * pango_attribute_copy (const PangoAttribute *attr);
512PANGO_AVAILABLE_IN_ALL
513void pango_attribute_destroy (PangoAttribute *attr);
514PANGO_AVAILABLE_IN_ALL
515gboolean pango_attribute_equal (const PangoAttribute *attr1,
516 const PangoAttribute *attr2) G_GNUC_PURE;
517
518PANGO_AVAILABLE_IN_ALL
519PangoAttribute * pango_attr_language_new (PangoLanguage *language);
520PANGO_AVAILABLE_IN_ALL
521PangoAttribute * pango_attr_family_new (const char *family);
522PANGO_AVAILABLE_IN_ALL
523PangoAttribute * pango_attr_foreground_new (guint16 red,
524 guint16 green,
525 guint16 blue);
526PANGO_AVAILABLE_IN_ALL
527PangoAttribute * pango_attr_background_new (guint16 red,
528 guint16 green,
529 guint16 blue);
530PANGO_AVAILABLE_IN_ALL
531PangoAttribute * pango_attr_size_new (int size);
532PANGO_AVAILABLE_IN_1_8
533PangoAttribute * pango_attr_size_new_absolute (int size);
534PANGO_AVAILABLE_IN_ALL
535PangoAttribute * pango_attr_style_new (PangoStyle style);
536PANGO_AVAILABLE_IN_ALL
537PangoAttribute * pango_attr_weight_new (PangoWeight weight);
538PANGO_AVAILABLE_IN_ALL
539PangoAttribute * pango_attr_variant_new (PangoVariant variant);
540PANGO_AVAILABLE_IN_ALL
541PangoAttribute * pango_attr_stretch_new (PangoStretch stretch);
542PANGO_AVAILABLE_IN_ALL
543PangoAttribute * pango_attr_font_desc_new (const PangoFontDescription *desc);
544
545PANGO_AVAILABLE_IN_ALL
546PangoAttribute * pango_attr_underline_new (PangoUnderline underline);
547PANGO_AVAILABLE_IN_1_8
548PangoAttribute * pango_attr_underline_color_new (guint16 red,
549 guint16 green,
550 guint16 blue);
551PANGO_AVAILABLE_IN_ALL
552PangoAttribute * pango_attr_strikethrough_new (gboolean strikethrough);
553PANGO_AVAILABLE_IN_1_8
554PangoAttribute * pango_attr_strikethrough_color_new (guint16 red,
555 guint16 green,
556 guint16 blue);
557PANGO_AVAILABLE_IN_ALL
558PangoAttribute * pango_attr_rise_new (int rise);
559PANGO_AVAILABLE_IN_1_50
560PangoAttribute * pango_attr_baseline_shift_new (int shift);
561PANGO_AVAILABLE_IN_1_50
562PangoAttribute * pango_attr_font_scale_new (PangoFontScale scale);
563PANGO_AVAILABLE_IN_ALL
564PangoAttribute * pango_attr_scale_new (double scale_factor);
565PANGO_AVAILABLE_IN_1_4
566PangoAttribute * pango_attr_fallback_new (gboolean enable_fallback);
567PANGO_AVAILABLE_IN_1_6
568PangoAttribute * pango_attr_letter_spacing_new (int letter_spacing);
569PANGO_AVAILABLE_IN_ALL
570PangoAttribute * pango_attr_shape_new (const PangoRectangle *ink_rect,
571 const PangoRectangle *logical_rect);
572PANGO_AVAILABLE_IN_1_8
573PangoAttribute * 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);
578PANGO_AVAILABLE_IN_1_16
579PangoAttribute * pango_attr_gravity_new (PangoGravity gravity);
580PANGO_AVAILABLE_IN_1_16
581PangoAttribute * pango_attr_gravity_hint_new (PangoGravityHint hint);
582PANGO_AVAILABLE_IN_1_38
583PangoAttribute * pango_attr_font_features_new (const char *features);
584PANGO_AVAILABLE_IN_1_38
585PangoAttribute * pango_attr_foreground_alpha_new (guint16 alpha);
586PANGO_AVAILABLE_IN_1_38
587PangoAttribute * pango_attr_background_alpha_new (guint16 alpha);
588PANGO_AVAILABLE_IN_1_44
589PangoAttribute * pango_attr_allow_breaks_new (gboolean allow_breaks);
590
591PANGO_AVAILABLE_IN_1_50
592PangoAttribute * pango_attr_word_new (void);
593PANGO_AVAILABLE_IN_1_50
594PangoAttribute * pango_attr_sentence_new (void);
595
596PANGO_AVAILABLE_IN_1_44
597PangoAttribute * pango_attr_insert_hyphens_new (gboolean insert_hyphens);
598PANGO_AVAILABLE_IN_1_46
599PangoAttribute * pango_attr_overline_new (PangoOverline overline);
600PANGO_AVAILABLE_IN_1_46
601PangoAttribute * pango_attr_overline_color_new (guint16 red,
602 guint16 green,
603 guint16 blue);
604PANGO_AVAILABLE_IN_1_44
605PangoAttribute * pango_attr_show_new (PangoShowFlags flags);
606PANGO_AVAILABLE_IN_1_50
607PangoAttribute * pango_attr_line_height_new (double factor);
608PANGO_AVAILABLE_IN_1_50
609PangoAttribute * pango_attr_line_height_new_absolute (int height);
610PANGO_AVAILABLE_IN_1_50
611PangoAttribute * pango_attr_text_transform_new (PangoTextTransform transform);
612
613PANGO_AVAILABLE_IN_1_50
614PangoAttrString * pango_attribute_as_string (PangoAttribute *attr);
615PANGO_AVAILABLE_IN_1_50
616PangoAttrLanguage * pango_attribute_as_language (PangoAttribute *attr);
617PANGO_AVAILABLE_IN_1_50
618PangoAttrInt * pango_attribute_as_int (PangoAttribute *attr);
619PANGO_AVAILABLE_IN_1_50
620PangoAttrSize * pango_attribute_as_size (PangoAttribute *attr);
621PANGO_AVAILABLE_IN_1_50
622PangoAttrFloat * pango_attribute_as_float (PangoAttribute *attr);
623PANGO_AVAILABLE_IN_1_50
624PangoAttrColor * pango_attribute_as_color (PangoAttribute *attr);
625PANGO_AVAILABLE_IN_1_50
626PangoAttrFontDesc * pango_attribute_as_font_desc (PangoAttribute *attr);
627PANGO_AVAILABLE_IN_1_50
628PangoAttrShape * pango_attribute_as_shape (PangoAttribute *attr);
629PANGO_AVAILABLE_IN_1_50
630PangoAttrFontFeatures * pango_attribute_as_font_features (PangoAttribute *attr);
631
632/* Attribute lists */
633
634typedef struct _PangoAttrList PangoAttrList;
635typedef 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
667PANGO_AVAILABLE_IN_ALL
668GType pango_attr_list_get_type (void) G_GNUC_CONST;
669
670PANGO_AVAILABLE_IN_ALL
671PangoAttrList * pango_attr_list_new (void);
672PANGO_AVAILABLE_IN_1_10
673PangoAttrList * pango_attr_list_ref (PangoAttrList *list);
674PANGO_AVAILABLE_IN_ALL
675void pango_attr_list_unref (PangoAttrList *list);
676PANGO_AVAILABLE_IN_ALL
677PangoAttrList * pango_attr_list_copy (PangoAttrList *list);
678PANGO_AVAILABLE_IN_ALL
679void pango_attr_list_insert (PangoAttrList *list,
680 PangoAttribute *attr);
681PANGO_AVAILABLE_IN_ALL
682void pango_attr_list_insert_before (PangoAttrList *list,
683 PangoAttribute *attr);
684PANGO_AVAILABLE_IN_ALL
685void pango_attr_list_change (PangoAttrList *list,
686 PangoAttribute *attr);
687PANGO_AVAILABLE_IN_ALL
688void pango_attr_list_splice (PangoAttrList *list,
689 PangoAttrList *other,
690 int pos,
691 int len);
692PANGO_AVAILABLE_IN_1_44
693void pango_attr_list_update (PangoAttrList *list,
694 int pos,
695 int remove,
696 int add);
697
698PANGO_AVAILABLE_IN_1_2
699PangoAttrList * pango_attr_list_filter (PangoAttrList *list,
700 PangoAttrFilterFunc func,
701 gpointer data);
702
703PANGO_AVAILABLE_IN_1_44
704GSList * pango_attr_list_get_attributes (PangoAttrList *list);
705
706PANGO_AVAILABLE_IN_1_46
707gboolean pango_attr_list_equal (PangoAttrList *list,
708 PangoAttrList *other_list);
709
710PANGO_AVAILABLE_IN_1_50
711char * pango_attr_list_to_string (PangoAttrList *list);
712PANGO_AVAILABLE_IN_1_50
713PangoAttrList * pango_attr_list_from_string (const char *text);
714
715PANGO_AVAILABLE_IN_1_44
716GType pango_attr_iterator_get_type (void) G_GNUC_CONST;
717
718PANGO_AVAILABLE_IN_ALL
719PangoAttrIterator * pango_attr_list_get_iterator (PangoAttrList *list);
720
721PANGO_AVAILABLE_IN_ALL
722void pango_attr_iterator_range (PangoAttrIterator *iterator,
723 int *start,
724 int *end);
725PANGO_AVAILABLE_IN_ALL
726gboolean pango_attr_iterator_next (PangoAttrIterator *iterator);
727PANGO_AVAILABLE_IN_ALL
728PangoAttrIterator * pango_attr_iterator_copy (PangoAttrIterator *iterator);
729PANGO_AVAILABLE_IN_ALL
730void pango_attr_iterator_destroy (PangoAttrIterator *iterator);
731PANGO_AVAILABLE_IN_ALL
732PangoAttribute * pango_attr_iterator_get (PangoAttrIterator *iterator,
733 PangoAttrType type);
734PANGO_AVAILABLE_IN_ALL
735void pango_attr_iterator_get_font (PangoAttrIterator *iterator,
736 PangoFontDescription *desc,
737 PangoLanguage **language,
738 GSList **extra_attrs);
739PANGO_AVAILABLE_IN_1_2
740GSList * pango_attr_iterator_get_attrs (PangoAttrIterator *iterator);
741
742G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoAttribute, pango_attribute_destroy)
743G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoAttrList, pango_attr_list_unref)
744G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoAttrIterator, pango_attr_iterator_destroy)
745
746G_END_DECLS
747
748#endif /* __PANGO_ATTRIBUTES_H__ */
749

source code of gtk/subprojects/pango/pango/pango-attributes.h