1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module pango.c.types;
26 
27 public import cairo.c.types;
28 public import glib.c.types;
29 public import gobject.c.types;
30 
31 alias void* FTLibrary;
32 
33 /**
34  * A #PangoGlyph represents a single glyph in the output form of a string.
35  */
36 public alias uint PangoGlyph;
37 
38 /**
39  * The #PangoGlyphUnit type is used to store dimensions within
40  * Pango. Dimensions are stored in 1/%PANGO_SCALE of a device unit.
41  * (A device unit might be a pixel for screen display, or
42  * a point on a printer.) %PANGO_SCALE is currently 1024, and
43  * may change in the future (unlikely though), but you should not
44  * depend on its exact value. The PANGO_PIXELS() macro can be used
45  * to convert from glyph units into device units with correct rounding.
46  */
47 public alias int PangoGlyphUnit;
48 
49 /**
50  * The #PangoLayoutRun structure represents a single run within
51  * a #PangoLayoutLine; it is simply an alternate name for
52  * #PangoGlyphItem.
53  * See the #PangoGlyphItem docs for details on the fields.
54  */
55 public alias PangoGlyphItem PangoLayoutRun;
56 
57 /**
58  * A #PangoAlignment describes how to align the lines of a #PangoLayout within the
59  * available space. If the #PangoLayout is set to justify
60  * using pango_layout_set_justify(), this only has effect for partial lines.
61  */
62 public enum PangoAlignment
63 {
64 	/**
65 	 * Put all available space on the right
66 	 */
67 	LEFT = 0,
68 	/**
69 	 * Center the line within the available space
70 	 */
71 	CENTER = 1,
72 	/**
73 	 * Put all available space on the left
74 	 */
75 	RIGHT = 2,
76 }
77 
78 /**
79  * The #PangoAttrType
80  * distinguishes between different types of attributes. Along with the
81  * predefined values, it is possible to allocate additional values
82  * for custom attributes using pango_attr_type_register(). The predefined
83  * values are given below. The type of structure used to store the
84  * attribute is listed in parentheses after the description.
85  */
86 public enum PangoAttrType
87 {
88 	/**
89 	 * does not happen
90 	 */
91 	INVALID = 0,
92 	/**
93 	 * language (#PangoAttrLanguage)
94 	 */
95 	LANGUAGE = 1,
96 	/**
97 	 * font family name list (#PangoAttrString)
98 	 */
99 	FAMILY = 2,
100 	/**
101 	 * font slant style (#PangoAttrInt)
102 	 */
103 	STYLE = 3,
104 	/**
105 	 * font weight (#PangoAttrInt)
106 	 */
107 	WEIGHT = 4,
108 	/**
109 	 * font variant (normal or small caps) (#PangoAttrInt)
110 	 */
111 	VARIANT = 5,
112 	/**
113 	 * font stretch (#PangoAttrInt)
114 	 */
115 	STRETCH = 6,
116 	/**
117 	 * font size in points scaled by %PANGO_SCALE (#PangoAttrInt)
118 	 */
119 	SIZE = 7,
120 	/**
121 	 * font description (#PangoAttrFontDesc)
122 	 */
123 	FONT_DESC = 8,
124 	/**
125 	 * foreground color (#PangoAttrColor)
126 	 */
127 	FOREGROUND = 9,
128 	/**
129 	 * background color (#PangoAttrColor)
130 	 */
131 	BACKGROUND = 10,
132 	/**
133 	 * whether the text has an underline (#PangoAttrInt)
134 	 */
135 	UNDERLINE = 11,
136 	/**
137 	 * whether the text is struck-through (#PangoAttrInt)
138 	 */
139 	STRIKETHROUGH = 12,
140 	/**
141 	 * baseline displacement (#PangoAttrInt)
142 	 */
143 	RISE = 13,
144 	/**
145 	 * shape (#PangoAttrShape)
146 	 */
147 	SHAPE = 14,
148 	/**
149 	 * font size scale factor (#PangoAttrFloat)
150 	 */
151 	SCALE = 15,
152 	/**
153 	 * whether fallback is enabled (#PangoAttrInt)
154 	 */
155 	FALLBACK = 16,
156 	/**
157 	 * letter spacing (#PangoAttrInt)
158 	 */
159 	LETTER_SPACING = 17,
160 	/**
161 	 * underline color (#PangoAttrColor)
162 	 */
163 	UNDERLINE_COLOR = 18,
164 	/**
165 	 * strikethrough color (#PangoAttrColor)
166 	 */
167 	STRIKETHROUGH_COLOR = 19,
168 	/**
169 	 * font size in pixels scaled by %PANGO_SCALE (#PangoAttrInt)
170 	 */
171 	ABSOLUTE_SIZE = 20,
172 	/**
173 	 * base text gravity (#PangoAttrInt)
174 	 */
175 	GRAVITY = 21,
176 	/**
177 	 * gravity hint (#PangoAttrInt)
178 	 */
179 	GRAVITY_HINT = 22,
180 	/**
181 	 * OpenType font features (#PangoAttrString). Since 1.38
182 	 */
183 	FONT_FEATURES = 23,
184 	/**
185 	 * foreground alpha (#PangoAttrInt). Since 1.38
186 	 */
187 	FOREGROUND_ALPHA = 24,
188 	/**
189 	 * background alpha (#PangoAttrInt). Since 1.38
190 	 */
191 	BACKGROUND_ALPHA = 25,
192 }
193 
194 /**
195  * The #PangoBidiType type represents the bidirectional character
196  * type of a Unicode character as specified by the
197  * <ulink url="http://www.unicode.org/reports/tr9/">Unicode bidirectional algorithm</ulink>.
198  *
199  * Deprecated: Use fribidi for this information
200  *
201  * Since: 1.22
202  */
203 public enum PangoBidiType
204 {
205 	/**
206 	 * Left-to-Right
207 	 */
208 	L = 0,
209 	/**
210 	 * Left-to-Right Embedding
211 	 */
212 	LRE = 1,
213 	/**
214 	 * Left-to-Right Override
215 	 */
216 	LRO = 2,
217 	/**
218 	 * Right-to-Left
219 	 */
220 	R = 3,
221 	/**
222 	 * Right-to-Left Arabic
223 	 */
224 	AL = 4,
225 	/**
226 	 * Right-to-Left Embedding
227 	 */
228 	RLE = 5,
229 	/**
230 	 * Right-to-Left Override
231 	 */
232 	RLO = 6,
233 	/**
234 	 * Pop Directional Format
235 	 */
236 	PDF = 7,
237 	/**
238 	 * European Number
239 	 */
240 	EN = 8,
241 	/**
242 	 * European Number Separator
243 	 */
244 	ES = 9,
245 	/**
246 	 * European Number Terminator
247 	 */
248 	ET = 10,
249 	/**
250 	 * Arabic Number
251 	 */
252 	AN = 11,
253 	/**
254 	 * Common Number Separator
255 	 */
256 	CS = 12,
257 	/**
258 	 * Nonspacing Mark
259 	 */
260 	NSM = 13,
261 	/**
262 	 * Boundary Neutral
263 	 */
264 	BN = 14,
265 	/**
266 	 * Paragraph Separator
267 	 */
268 	B = 15,
269 	/**
270 	 * Segment Separator
271 	 */
272 	S = 16,
273 	/**
274 	 * Whitespace
275 	 */
276 	WS = 17,
277 	/**
278 	 * Other Neutrals
279 	 */
280 	ON = 18,
281 }
282 
283 /**
284  * Used to indicate how well a font can represent a particular Unicode
285  * character point for a particular script.
286  */
287 public enum PangoCoverageLevel
288 {
289 	/**
290 	 * The character is not representable with the font.
291 	 */
292 	NONE = 0,
293 	/**
294 	 * The character is represented in a way that may be
295 	 * comprehensible but is not the correct graphical form.
296 	 * For instance, a Hangul character represented as a
297 	 * a sequence of Jamos, or a Latin transliteration of a Cyrillic word.
298 	 */
299 	FALLBACK = 1,
300 	/**
301 	 * The character is represented as basically the correct
302 	 * graphical form, but with a stylistic variant inappropriate for
303 	 * the current script.
304 	 */
305 	APPROXIMATE = 2,
306 	/**
307 	 * The character is represented as the correct graphical form.
308 	 */
309 	EXACT = 3,
310 }
311 
312 /**
313  * The #PangoDirection type represents a direction in the
314  * Unicode bidirectional algorithm; not every value in this
315  * enumeration makes sense for every usage of #PangoDirection;
316  * for example, the return value of pango_unichar_direction()
317  * and pango_find_base_dir() cannot be %PANGO_DIRECTION_WEAK_LTR
318  * or %PANGO_DIRECTION_WEAK_RTL, since every character is either
319  * neutral or has a strong direction; on the other hand
320  * %PANGO_DIRECTION_NEUTRAL doesn't make sense to pass
321  * to pango_itemize_with_base_dir().
322  *
323  * The %PANGO_DIRECTION_TTB_LTR, %PANGO_DIRECTION_TTB_RTL
324  * values come from an earlier interpretation of this
325  * enumeration as the writing direction of a block of
326  * text and are no longer used; See #PangoGravity for how
327  * vertical text is handled in Pango.
328  *
329  * If you are interested in text direction, you should
330  * really use fribidi directly. PangoDirection is only
331  * retained because it is used in some public apis.
332  */
333 public enum PangoDirection
334 {
335 	/**
336 	 * A strong left-to-right direction
337 	 */
338 	LTR = 0,
339 	/**
340 	 * A strong right-to-left direction
341 	 */
342 	RTL = 1,
343 	/**
344 	 * Deprecated value; treated the
345 	 * same as %PANGO_DIRECTION_RTL.
346 	 */
347 	TTB_LTR = 2,
348 	/**
349 	 * Deprecated value; treated the
350 	 * same as %PANGO_DIRECTION_LTR
351 	 */
352 	TTB_RTL = 3,
353 	/**
354 	 * A weak left-to-right direction
355 	 */
356 	WEAK_LTR = 4,
357 	/**
358 	 * A weak right-to-left direction
359 	 */
360 	WEAK_RTL = 5,
361 	/**
362 	 * No direction specified
363 	 */
364 	NEUTRAL = 6,
365 }
366 
367 /**
368  * The #PangoEllipsizeMode type describes what sort of (if any)
369  * ellipsization should be applied to a line of text. In
370  * the ellipsization process characters are removed from the
371  * text in order to make it fit to a given width and replaced
372  * with an ellipsis.
373  */
374 public enum PangoEllipsizeMode
375 {
376 	/**
377 	 * No ellipsization
378 	 */
379 	NONE = 0,
380 	/**
381 	 * Omit characters at the start of the text
382 	 */
383 	START = 1,
384 	/**
385 	 * Omit characters in the middle of the text
386 	 */
387 	MIDDLE = 2,
388 	/**
389 	 * Omit characters at the end of the text
390 	 */
391 	END = 3,
392 }
393 
394 /**
395  * The bits in a #PangoFontMask correspond to fields in a
396  * #PangoFontDescription that have been set.
397  */
398 public enum PangoFontMask
399 {
400 	/**
401 	 * the font family is specified.
402 	 */
403 	FAMILY = 1,
404 	/**
405 	 * the font style is specified.
406 	 */
407 	STYLE = 2,
408 	/**
409 	 * the font variant is specified.
410 	 */
411 	VARIANT = 4,
412 	/**
413 	 * the font weight is specified.
414 	 */
415 	WEIGHT = 8,
416 	/**
417 	 * the font stretch is specified.
418 	 */
419 	STRETCH = 16,
420 	/**
421 	 * the font size is specified.
422 	 */
423 	SIZE = 32,
424 	/**
425 	 * the font gravity is specified (Since: 1.16.)
426 	 */
427 	GRAVITY = 64,
428 	/**
429 	 * OpenType font variations are specified (Since: 1.42)
430 	 */
431 	VARIATIONS = 128,
432 }
433 
434 /**
435  * The #PangoGravity type represents the orientation of glyphs in a segment
436  * of text.  This is useful when rendering vertical text layouts.  In
437  * those situations, the layout is rotated using a non-identity PangoMatrix,
438  * and then glyph orientation is controlled using #PangoGravity.
439  * Not every value in this enumeration makes sense for every usage of
440  * #PangoGravity; for example, %PANGO_GRAVITY_AUTO only can be passed to
441  * pango_context_set_base_gravity() and can only be returned by
442  * pango_context_get_base_gravity().
443  *
444  * See also: #PangoGravityHint
445  *
446  * Since: 1.16
447  */
448 public enum PangoGravity
449 {
450 	/**
451 	 * Glyphs stand upright (default)
452 	 */
453 	SOUTH = 0,
454 	/**
455 	 * Glyphs are rotated 90 degrees clockwise
456 	 */
457 	EAST = 1,
458 	/**
459 	 * Glyphs are upside-down
460 	 */
461 	NORTH = 2,
462 	/**
463 	 * Glyphs are rotated 90 degrees counter-clockwise
464 	 */
465 	WEST = 3,
466 	/**
467 	 * Gravity is resolved from the context matrix
468 	 */
469 	AUTO = 4,
470 }
471 
472 /**
473  * The #PangoGravityHint defines how horizontal scripts should behave in a
474  * vertical context.  That is, English excerpt in a vertical paragraph for
475  * example.
476  *
477  * See #PangoGravity.
478  *
479  * Since: 1.16
480  */
481 public enum PangoGravityHint
482 {
483 	/**
484 	 * scripts will take their natural gravity based
485 	 * on the base gravity and the script.  This is the default.
486 	 */
487 	NATURAL = 0,
488 	/**
489 	 * always use the base gravity set, regardless of
490 	 * the script.
491 	 */
492 	STRONG = 1,
493 	/**
494 	 * for scripts not in their natural direction (eg.
495 	 * Latin in East gravity), choose per-script gravity such that every script
496 	 * respects the line progression.  This means, Latin and Arabic will take
497 	 * opposite gravities and both flow top-to-bottom for example.
498 	 */
499 	LINE = 2,
500 }
501 
502 /**
503  * #PangoRenderPart defines different items to render for such
504  * purposes as setting colors.
505  *
506  * Since: 1.8
507  */
508 public enum PangoRenderPart
509 {
510 	/**
511 	 * the text itself
512 	 */
513 	FOREGROUND = 0,
514 	/**
515 	 * the area behind the text
516 	 */
517 	BACKGROUND = 1,
518 	/**
519 	 * underlines
520 	 */
521 	UNDERLINE = 2,
522 	/**
523 	 * strikethrough lines
524 	 */
525 	STRIKETHROUGH = 3,
526 }
527 
528 /**
529  * The #PangoScript enumeration identifies different writing
530  * systems. The values correspond to the names as defined in the
531  * Unicode standard.
532  * Note that new types may be added in the future. Applications should be ready
533  * to handle unknown values.  This enumeration is interchangeable with
534  * #GUnicodeScript.  See <ulink
535  * url="http://www.unicode.org/reports/tr24/">Unicode Standard Annex
536  * #24: Script names</ulink>.
537  */
538 public enum PangoScript
539 {
540 	/**
541 	 * a value never returned from pango_script_for_unichar()
542 	 */
543 	INVALID_CODE = -1,
544 	/**
545 	 * a character used by multiple different scripts
546 	 */
547 	COMMON = 0,
548 	/**
549 	 * a mark glyph that takes its script from the
550 	 * base glyph to which it is attached
551 	 */
552 	INHERITED = 1,
553 	/**
554 	 * Arabic
555 	 */
556 	ARABIC = 2,
557 	/**
558 	 * Armenian
559 	 */
560 	ARMENIAN = 3,
561 	/**
562 	 * Bengali
563 	 */
564 	BENGALI = 4,
565 	/**
566 	 * Bopomofo
567 	 */
568 	BOPOMOFO = 5,
569 	/**
570 	 * Cherokee
571 	 */
572 	CHEROKEE = 6,
573 	/**
574 	 * Coptic
575 	 */
576 	COPTIC = 7,
577 	/**
578 	 * Cyrillic
579 	 */
580 	CYRILLIC = 8,
581 	/**
582 	 * Deseret
583 	 */
584 	DESERET = 9,
585 	/**
586 	 * Devanagari
587 	 */
588 	DEVANAGARI = 10,
589 	/**
590 	 * Ethiopic
591 	 */
592 	ETHIOPIC = 11,
593 	/**
594 	 * Georgian
595 	 */
596 	GEORGIAN = 12,
597 	/**
598 	 * Gothic
599 	 */
600 	GOTHIC = 13,
601 	/**
602 	 * Greek
603 	 */
604 	GREEK = 14,
605 	/**
606 	 * Gujarati
607 	 */
608 	GUJARATI = 15,
609 	/**
610 	 * Gurmukhi
611 	 */
612 	GURMUKHI = 16,
613 	/**
614 	 * Han
615 	 */
616 	HAN = 17,
617 	/**
618 	 * Hangul
619 	 */
620 	HANGUL = 18,
621 	/**
622 	 * Hebrew
623 	 */
624 	HEBREW = 19,
625 	/**
626 	 * Hiragana
627 	 */
628 	HIRAGANA = 20,
629 	/**
630 	 * Kannada
631 	 */
632 	KANNADA = 21,
633 	/**
634 	 * Katakana
635 	 */
636 	KATAKANA = 22,
637 	/**
638 	 * Khmer
639 	 */
640 	KHMER = 23,
641 	/**
642 	 * Lao
643 	 */
644 	LAO = 24,
645 	/**
646 	 * Latin
647 	 */
648 	LATIN = 25,
649 	/**
650 	 * Malayalam
651 	 */
652 	MALAYALAM = 26,
653 	/**
654 	 * Mongolian
655 	 */
656 	MONGOLIAN = 27,
657 	/**
658 	 * Myanmar
659 	 */
660 	MYANMAR = 28,
661 	/**
662 	 * Ogham
663 	 */
664 	OGHAM = 29,
665 	/**
666 	 * Old Italic
667 	 */
668 	OLD_ITALIC = 30,
669 	/**
670 	 * Oriya
671 	 */
672 	ORIYA = 31,
673 	/**
674 	 * Runic
675 	 */
676 	RUNIC = 32,
677 	/**
678 	 * Sinhala
679 	 */
680 	SINHALA = 33,
681 	/**
682 	 * Syriac
683 	 */
684 	SYRIAC = 34,
685 	/**
686 	 * Tamil
687 	 */
688 	TAMIL = 35,
689 	/**
690 	 * Telugu
691 	 */
692 	TELUGU = 36,
693 	/**
694 	 * Thaana
695 	 */
696 	THAANA = 37,
697 	/**
698 	 * Thai
699 	 */
700 	THAI = 38,
701 	/**
702 	 * Tibetan
703 	 */
704 	TIBETAN = 39,
705 	/**
706 	 * Canadian Aboriginal
707 	 */
708 	CANADIAN_ABORIGINAL = 40,
709 	/**
710 	 * Yi
711 	 */
712 	YI = 41,
713 	/**
714 	 * Tagalog
715 	 */
716 	TAGALOG = 42,
717 	/**
718 	 * Hanunoo
719 	 */
720 	HANUNOO = 43,
721 	/**
722 	 * Buhid
723 	 */
724 	BUHID = 44,
725 	/**
726 	 * Tagbanwa
727 	 */
728 	TAGBANWA = 45,
729 	/**
730 	 * Braille
731 	 */
732 	BRAILLE = 46,
733 	/**
734 	 * Cypriot
735 	 */
736 	CYPRIOT = 47,
737 	/**
738 	 * Limbu
739 	 */
740 	LIMBU = 48,
741 	/**
742 	 * Osmanya
743 	 */
744 	OSMANYA = 49,
745 	/**
746 	 * Shavian
747 	 */
748 	SHAVIAN = 50,
749 	/**
750 	 * Linear B
751 	 */
752 	LINEAR_B = 51,
753 	/**
754 	 * Tai Le
755 	 */
756 	TAI_LE = 52,
757 	/**
758 	 * Ugaritic
759 	 */
760 	UGARITIC = 53,
761 	/**
762 	 * New Tai Lue. Since 1.10
763 	 */
764 	NEW_TAI_LUE = 54,
765 	/**
766 	 * Buginese. Since 1.10
767 	 */
768 	BUGINESE = 55,
769 	/**
770 	 * Glagolitic. Since 1.10
771 	 */
772 	GLAGOLITIC = 56,
773 	/**
774 	 * Tifinagh. Since 1.10
775 	 */
776 	TIFINAGH = 57,
777 	/**
778 	 * Syloti Nagri. Since 1.10
779 	 */
780 	SYLOTI_NAGRI = 58,
781 	/**
782 	 * Old Persian. Since 1.10
783 	 */
784 	OLD_PERSIAN = 59,
785 	/**
786 	 * Kharoshthi. Since 1.10
787 	 */
788 	KHAROSHTHI = 60,
789 	/**
790 	 * an unassigned code point. Since 1.14
791 	 */
792 	UNKNOWN = 61,
793 	/**
794 	 * Balinese. Since 1.14
795 	 */
796 	BALINESE = 62,
797 	/**
798 	 * Cuneiform. Since 1.14
799 	 */
800 	CUNEIFORM = 63,
801 	/**
802 	 * Phoenician. Since 1.14
803 	 */
804 	PHOENICIAN = 64,
805 	/**
806 	 * Phags-pa. Since 1.14
807 	 */
808 	PHAGS_PA = 65,
809 	/**
810 	 * N'Ko. Since 1.14
811 	 */
812 	NKO = 66,
813 	/**
814 	 * Kayah Li. Since 1.20.1
815 	 */
816 	KAYAH_LI = 67,
817 	/**
818 	 * Lepcha. Since 1.20.1
819 	 */
820 	LEPCHA = 68,
821 	/**
822 	 * Rejang. Since 1.20.1
823 	 */
824 	REJANG = 69,
825 	/**
826 	 * Sundanese. Since 1.20.1
827 	 */
828 	SUNDANESE = 70,
829 	/**
830 	 * Saurashtra. Since 1.20.1
831 	 */
832 	SAURASHTRA = 71,
833 	/**
834 	 * Cham. Since 1.20.1
835 	 */
836 	CHAM = 72,
837 	/**
838 	 * Ol Chiki. Since 1.20.1
839 	 */
840 	OL_CHIKI = 73,
841 	/**
842 	 * Vai. Since 1.20.1
843 	 */
844 	VAI = 74,
845 	/**
846 	 * Carian. Since 1.20.1
847 	 */
848 	CARIAN = 75,
849 	/**
850 	 * Lycian. Since 1.20.1
851 	 */
852 	LYCIAN = 76,
853 	/**
854 	 * Lydian. Since 1.20.1
855 	 */
856 	LYDIAN = 77,
857 	/**
858 	 * Batak. Since 1.32
859 	 */
860 	BATAK = 78,
861 	/**
862 	 * Brahmi. Since 1.32
863 	 */
864 	BRAHMI = 79,
865 	/**
866 	 * Mandaic. Since 1.32
867 	 */
868 	MANDAIC = 80,
869 	/**
870 	 * Chakma. Since: 1.32
871 	 */
872 	CHAKMA = 81,
873 	/**
874 	 * Meroitic Cursive. Since: 1.32
875 	 */
876 	MEROITIC_CURSIVE = 82,
877 	/**
878 	 * Meroitic Hieroglyphs. Since: 1.32
879 	 */
880 	MEROITIC_HIEROGLYPHS = 83,
881 	/**
882 	 * Miao. Since: 1.32
883 	 */
884 	MIAO = 84,
885 	/**
886 	 * Sharada. Since: 1.32
887 	 */
888 	SHARADA = 85,
889 	/**
890 	 * Sora Sompeng. Since: 1.32
891 	 */
892 	SORA_SOMPENG = 86,
893 	/**
894 	 * Takri. Since: 1.32
895 	 */
896 	TAKRI = 87,
897 	/**
898 	 * Bassa. Since: 1.40
899 	 */
900 	BASSA_VAH = 88,
901 	/**
902 	 * Caucasian Albanian. Since: 1.40
903 	 */
904 	CAUCASIAN_ALBANIAN = 89,
905 	/**
906 	 * Duployan. Since: 1.40
907 	 */
908 	DUPLOYAN = 90,
909 	/**
910 	 * Elbasan. Since: 1.40
911 	 */
912 	ELBASAN = 91,
913 	/**
914 	 * Grantha. Since: 1.40
915 	 */
916 	GRANTHA = 92,
917 	/**
918 	 * Kjohki. Since: 1.40
919 	 */
920 	KHOJKI = 93,
921 	/**
922 	 * Khudawadi, Sindhi. Since: 1.40
923 	 */
924 	KHUDAWADI = 94,
925 	/**
926 	 * Linear A. Since: 1.40
927 	 */
928 	LINEAR_A = 95,
929 	/**
930 	 * Mahajani. Since: 1.40
931 	 */
932 	MAHAJANI = 96,
933 	/**
934 	 * Manichaean. Since: 1.40
935 	 */
936 	MANICHAEAN = 97,
937 	/**
938 	 * Mende Kikakui. Since: 1.40
939 	 */
940 	MENDE_KIKAKUI = 98,
941 	/**
942 	 * Modi. Since: 1.40
943 	 */
944 	MODI = 99,
945 	/**
946 	 * Mro. Since: 1.40
947 	 */
948 	MRO = 100,
949 	/**
950 	 * Nabataean. Since: 1.40
951 	 */
952 	NABATAEAN = 101,
953 	/**
954 	 * Old North Arabian. Since: 1.40
955 	 */
956 	OLD_NORTH_ARABIAN = 102,
957 	/**
958 	 * Old Permic. Since: 1.40
959 	 */
960 	OLD_PERMIC = 103,
961 	/**
962 	 * Pahawh Hmong. Since: 1.40
963 	 */
964 	PAHAWH_HMONG = 104,
965 	/**
966 	 * Palmyrene. Since: 1.40
967 	 */
968 	PALMYRENE = 105,
969 	/**
970 	 * Pau Cin Hau. Since: 1.40
971 	 */
972 	PAU_CIN_HAU = 106,
973 	/**
974 	 * Psalter Pahlavi. Since: 1.40
975 	 */
976 	PSALTER_PAHLAVI = 107,
977 	/**
978 	 * Siddham. Since: 1.40
979 	 */
980 	SIDDHAM = 108,
981 	/**
982 	 * Tirhuta. Since: 1.40
983 	 */
984 	TIRHUTA = 109,
985 	/**
986 	 * Warang Citi. Since: 1.40
987 	 */
988 	WARANG_CITI = 110,
989 	/**
990 	 * Ahom. Since: 1.40
991 	 */
992 	AHOM = 111,
993 	/**
994 	 * Anatolian Hieroglyphs. Since: 1.40
995 	 */
996 	ANATOLIAN_HIEROGLYPHS = 112,
997 	/**
998 	 * Hatran. Since: 1.40
999 	 */
1000 	HATRAN = 113,
1001 	/**
1002 	 * Multani. Since: 1.40
1003 	 */
1004 	MULTANI = 114,
1005 	/**
1006 	 * Old Hungarian. Since: 1.40
1007 	 */
1008 	OLD_HUNGARIAN = 115,
1009 	/**
1010 	 * Signwriting. Since: 1.40
1011 	 */
1012 	SIGNWRITING = 116,
1013 }
1014 
1015 /**
1016  * An enumeration specifying the width of the font relative to other designs
1017  * within a family.
1018  */
1019 public enum PangoStretch
1020 {
1021 	/**
1022 	 * ultra condensed width
1023 	 */
1024 	ULTRA_CONDENSED = 0,
1025 	/**
1026 	 * extra condensed width
1027 	 */
1028 	EXTRA_CONDENSED = 1,
1029 	/**
1030 	 * condensed width
1031 	 */
1032 	CONDENSED = 2,
1033 	/**
1034 	 * semi condensed width
1035 	 */
1036 	SEMI_CONDENSED = 3,
1037 	/**
1038 	 * the normal width
1039 	 */
1040 	NORMAL = 4,
1041 	/**
1042 	 * semi expanded width
1043 	 */
1044 	SEMI_EXPANDED = 5,
1045 	/**
1046 	 * expanded width
1047 	 */
1048 	EXPANDED = 6,
1049 	/**
1050 	 * extra expanded width
1051 	 */
1052 	EXTRA_EXPANDED = 7,
1053 	/**
1054 	 * ultra expanded width
1055 	 */
1056 	ULTRA_EXPANDED = 8,
1057 }
1058 
1059 /**
1060  * An enumeration specifying the various slant styles possible for a font.
1061  */
1062 public enum PangoStyle
1063 {
1064 	/**
1065 	 * the font is upright.
1066 	 */
1067 	NORMAL = 0,
1068 	/**
1069 	 * the font is slanted, but in a roman style.
1070 	 */
1071 	OBLIQUE = 1,
1072 	/**
1073 	 * the font is slanted in an italic style.
1074 	 */
1075 	ITALIC = 2,
1076 }
1077 
1078 /**
1079  * A #PangoTabAlign specifies where a tab stop appears relative to the text.
1080  */
1081 public enum PangoTabAlign
1082 {
1083 	/**
1084 	 * the tab stop appears to the left of the text.
1085 	 */
1086 	LEFT = 0,
1087 }
1088 
1089 /**
1090  * The #PangoUnderline enumeration is used to specify
1091  * whether text should be underlined, and if so, the type
1092  * of underlining.
1093  */
1094 public enum PangoUnderline
1095 {
1096 	/**
1097 	 * no underline should be drawn
1098 	 */
1099 	NONE = 0,
1100 	/**
1101 	 * a single underline should be drawn
1102 	 */
1103 	SINGLE = 1,
1104 	/**
1105 	 * a double underline should be drawn
1106 	 */
1107 	DOUBLE = 2,
1108 	/**
1109 	 * a single underline should be drawn at a position
1110 	 * beneath the ink extents of the text being
1111 	 * underlined. This should be used only for underlining
1112 	 * single characters, such as for keyboard
1113 	 * accelerators. %PANGO_UNDERLINE_SINGLE should
1114 	 * be used for extended portions of text.
1115 	 */
1116 	LOW = 3,
1117 	/**
1118 	 * a wavy underline should be drawn below.
1119 	 * This underline is typically used to indicate
1120 	 * an error such as a possilble mispelling; in some
1121 	 * cases a contrasting color may automatically
1122 	 * be used. This type of underlining is available since Pango 1.4.
1123 	 */
1124 	ERROR = 4,
1125 }
1126 
1127 /**
1128  * An enumeration specifying capitalization variant of the font.
1129  */
1130 public enum PangoVariant
1131 {
1132 	/**
1133 	 * A normal font.
1134 	 */
1135 	NORMAL = 0,
1136 	/**
1137 	 * A font with the lower case characters
1138 	 * replaced by smaller variants of the capital characters.
1139 	 */
1140 	SMALL_CAPS = 1,
1141 }
1142 
1143 /**
1144  * An enumeration specifying the weight (boldness) of a font. This is a numerical
1145  * value ranging from 100 to 1000, but there are some predefined values:
1146  */
1147 public enum PangoWeight
1148 {
1149 	/**
1150 	 * the thin weight (= 100; Since: 1.24)
1151 	 */
1152 	THIN = 100,
1153 	/**
1154 	 * the ultralight weight (= 200)
1155 	 */
1156 	ULTRALIGHT = 200,
1157 	/**
1158 	 * the light weight (= 300)
1159 	 */
1160 	LIGHT = 300,
1161 	/**
1162 	 * the semilight weight (= 350; Since: 1.36.7)
1163 	 */
1164 	SEMILIGHT = 350,
1165 	/**
1166 	 * the book weight (= 380; Since: 1.24)
1167 	 */
1168 	BOOK = 380,
1169 	/**
1170 	 * the default weight (= 400)
1171 	 */
1172 	NORMAL = 400,
1173 	/**
1174 	 * the normal weight (= 500; Since: 1.24)
1175 	 */
1176 	MEDIUM = 500,
1177 	/**
1178 	 * the semibold weight (= 600)
1179 	 */
1180 	SEMIBOLD = 600,
1181 	/**
1182 	 * the bold weight (= 700)
1183 	 */
1184 	BOLD = 700,
1185 	/**
1186 	 * the ultrabold weight (= 800)
1187 	 */
1188 	ULTRABOLD = 800,
1189 	/**
1190 	 * the heavy weight (= 900)
1191 	 */
1192 	HEAVY = 900,
1193 	/**
1194 	 * the ultraheavy weight (= 1000; Since: 1.24)
1195 	 */
1196 	ULTRAHEAVY = 1000,
1197 }
1198 
1199 /**
1200  * A #PangoWrapMode describes how to wrap the lines of a #PangoLayout to the desired width.
1201  */
1202 public enum PangoWrapMode
1203 {
1204 	/**
1205 	 * wrap lines at word boundaries.
1206 	 */
1207 	WORD = 0,
1208 	/**
1209 	 * wrap lines at character boundaries.
1210 	 */
1211 	CHAR = 1,
1212 	/**
1213 	 * wrap lines at word boundaries, but fall back to character boundaries if there is not
1214 	 * enough space for a full word.
1215 	 */
1216 	WORD_CHAR = 2,
1217 }
1218 
1219 struct PangoFcFontMap
1220 {
1221 	PangoFontMap parentInstance;
1222 	void* priv;
1223 }
1224 
1225 struct PangoCairoFont;
1226 
1227 
1228 /**
1229  * The #PangoAnalysis structure stores information about
1230  * the properties of a segment of text.
1231  */
1232 struct PangoAnalysis
1233 {
1234 	/**
1235 	 * the engine for doing rendering-system-dependent processing.
1236 	 */
1237 	PangoEngineShape* shapeEngine;
1238 	/**
1239 	 * the engine for doing rendering-system-independent processing.
1240 	 */
1241 	PangoEngineLang* langEngine;
1242 	/**
1243 	 * the font for this segment.
1244 	 */
1245 	PangoFont* font;
1246 	/**
1247 	 * the bidirectional level for this segment.
1248 	 */
1249 	ubyte level;
1250 	/**
1251 	 * the glyph orientation for this segment (A #PangoGravity).
1252 	 */
1253 	ubyte gravity;
1254 	/**
1255 	 * boolean flags for this segment (currently only one) (Since: 1.16).
1256 	 */
1257 	ubyte flags;
1258 	/**
1259 	 * the detected script for this segment (A #PangoScript) (Since: 1.18).
1260 	 */
1261 	ubyte script;
1262 	/**
1263 	 * the detected language for this segment.
1264 	 */
1265 	PangoLanguage* language;
1266 	/**
1267 	 * extra attributes for this segment.
1268 	 */
1269 	GSList* extraAttrs;
1270 }
1271 
1272 /**
1273  * The #PangoAttrClass structure stores the type and operations for
1274  * a particular type of attribute. The functions in this structure should
1275  * not be called directly. Instead, one should use the wrapper functions
1276  * provided for #PangoAttribute.
1277  */
1278 struct PangoAttrClass
1279 {
1280 	/**
1281 	 * the type ID for this attribute
1282 	 */
1283 	PangoAttrType type;
1284 	/** */
1285 	extern(C) PangoAttribute* function(PangoAttribute* attr) copy;
1286 	/** */
1287 	extern(C) void function(PangoAttribute* attr) destroy;
1288 	/** */
1289 	extern(C) int function(PangoAttribute* attr1, PangoAttribute* attr2) equal;
1290 }
1291 
1292 /**
1293  * The #PangoAttrColor structure is used to represent attributes that
1294  * are colors.
1295  */
1296 struct PangoAttrColor
1297 {
1298 	/**
1299 	 * the common portion of the attribute
1300 	 */
1301 	PangoAttribute attr;
1302 	/**
1303 	 * the #PangoColor which is the value of the attribute
1304 	 */
1305 	PangoColor color;
1306 }
1307 
1308 /**
1309  * The #PangoAttrFloat structure is used to represent attributes with
1310  * a float or double value.
1311  */
1312 struct PangoAttrFloat
1313 {
1314 	/**
1315 	 * the common portion of the attribute
1316 	 */
1317 	PangoAttribute attr;
1318 	/**
1319 	 * the value of the attribute
1320 	 */
1321 	double value;
1322 }
1323 
1324 /**
1325  * The #PangoAttrFontDesc structure is used to store an attribute that
1326  * sets all aspects of the font description at once.
1327  */
1328 struct PangoAttrFontDesc
1329 {
1330 	/**
1331 	 * the common portion of the attribute
1332 	 */
1333 	PangoAttribute attr;
1334 	/**
1335 	 * the font description which is the value of this attribute
1336 	 */
1337 	PangoFontDescription* desc;
1338 }
1339 
1340 /**
1341  * The #PangoAttrFontFeatures structure is used to represent OpenType
1342  * font features as an attribute.
1343  *
1344  * Since: 1.38
1345  */
1346 struct PangoAttrFontFeatures
1347 {
1348 	/**
1349 	 * the common portion of the attribute
1350 	 */
1351 	PangoAttribute attr;
1352 	/**
1353 	 * the featues, as a string in CSS syntax
1354 	 */
1355 	char* features;
1356 }
1357 
1358 /**
1359  * The #PangoAttrInt structure is used to represent attributes with
1360  * an integer or enumeration value.
1361  */
1362 struct PangoAttrInt
1363 {
1364 	/**
1365 	 * the common portion of the attribute
1366 	 */
1367 	PangoAttribute attr;
1368 	/**
1369 	 * the value of the attribute
1370 	 */
1371 	int value;
1372 }
1373 
1374 struct PangoAttrIterator;
1375 
1376 /**
1377  * The #PangoAttrLanguage structure is used to represent attributes that
1378  * are languages.
1379  */
1380 struct PangoAttrLanguage
1381 {
1382 	/**
1383 	 * the common portion of the attribute
1384 	 */
1385 	PangoAttribute attr;
1386 	/**
1387 	 * the #PangoLanguage which is the value of the attribute
1388 	 */
1389 	PangoLanguage* value;
1390 }
1391 
1392 struct PangoAttrList;
1393 
1394 /**
1395  * The #PangoAttrShape structure is used to represent attributes which
1396  * impose shape restrictions.
1397  */
1398 struct PangoAttrShape
1399 {
1400 	/**
1401 	 * the common portion of the attribute
1402 	 */
1403 	PangoAttribute attr;
1404 	/**
1405 	 * the ink rectangle to restrict to
1406 	 */
1407 	PangoRectangle inkRect;
1408 	/**
1409 	 * the logical rectangle to restrict to
1410 	 */
1411 	PangoRectangle logicalRect;
1412 	/**
1413 	 * user data set (see pango_attr_shape_new_with_data())
1414 	 */
1415 	void* data;
1416 	/**
1417 	 * copy function for the user data
1418 	 */
1419 	PangoAttrDataCopyFunc copyFunc;
1420 	/**
1421 	 * destroy function for the user data
1422 	 */
1423 	GDestroyNotify destroyFunc;
1424 }
1425 
1426 /**
1427  * The #PangoAttrSize structure is used to represent attributes which
1428  * set font size.
1429  */
1430 struct PangoAttrSize
1431 {
1432 	/**
1433 	 * the common portion of the attribute
1434 	 */
1435 	PangoAttribute attr;
1436 	/**
1437 	 * size of font, in units of 1/%PANGO_SCALE of a point (for
1438 	 * %PANGO_ATTR_SIZE) or of a device uni (for %PANGO_ATTR_ABSOLUTE_SIZE)
1439 	 */
1440 	int size;
1441 	import std.bitmanip: bitfields;
1442 	mixin(bitfields!(
1443 		uint, "absolute", 1,
1444 		uint, "", 31
1445 	));
1446 }
1447 
1448 /**
1449  * The #PangoAttrString structure is used to represent attributes with
1450  * a string value.
1451  */
1452 struct PangoAttrString
1453 {
1454 	/**
1455 	 * the common portion of the attribute
1456 	 */
1457 	PangoAttribute attr;
1458 	/**
1459 	 * the string which is the value of the attribute
1460 	 */
1461 	char* value;
1462 }
1463 
1464 struct PangoAttribute
1465 {
1466 	/**
1467 	 * the class structure holding information about the type of the attribute
1468 	 */
1469 	PangoAttrClass* klass;
1470 	/**
1471 	 * the start index of the range (in bytes).
1472 	 */
1473 	uint startIndex;
1474 	/**
1475 	 * end index of the range (in bytes). The character at this index
1476 	 * is not included in the range.
1477 	 */
1478 	uint endIndex;
1479 }
1480 
1481 struct PangoColor
1482 {
1483 	/**
1484 	 * value of red component
1485 	 */
1486 	ushort red;
1487 	/**
1488 	 * value of green component
1489 	 */
1490 	ushort green;
1491 	/**
1492 	 * value of blue component
1493 	 */
1494 	ushort blue;
1495 }
1496 
1497 struct PangoContext;
1498 
1499 struct PangoContextClass;
1500 
1501 struct PangoCoverage;
1502 
1503 struct PangoEngine
1504 {
1505 	GObject parentInstance;
1506 }
1507 
1508 /**
1509  * Class structure for #PangoEngine
1510  */
1511 struct PangoEngineClass
1512 {
1513 	GObjectClass parentClass;
1514 }
1515 
1516 /**
1517  * The #PangoEngineInfo structure contains information about a particular
1518  * engine. It contains the following fields:
1519  */
1520 struct PangoEngineInfo
1521 {
1522 	/**
1523 	 * a unique string ID for the engine.
1524 	 */
1525 	const(char)* id;
1526 	/**
1527 	 * a string identifying the engine type.
1528 	 */
1529 	const(char)* engineType;
1530 	/**
1531 	 * a string identifying the render type.
1532 	 */
1533 	const(char)* renderType;
1534 	/**
1535 	 * array of scripts this engine supports.
1536 	 */
1537 	PangoEngineScriptInfo* scripts;
1538 	/**
1539 	 * number of items in @scripts.
1540 	 */
1541 	int nScripts;
1542 }
1543 
1544 struct PangoEngineLang
1545 {
1546 	PangoEngine parentInstance;
1547 }
1548 
1549 /**
1550  * Class structure for #PangoEngineLang
1551  */
1552 struct PangoEngineLangClass
1553 {
1554 	PangoEngineClass parentClass;
1555 	/** */
1556 	extern(C) void function(PangoEngineLang* engine, const(char)* text, int len, PangoAnalysis* analysis, PangoLogAttr* attrs, int attrsLen) scriptBreak;
1557 }
1558 
1559 /**
1560  * The #PangoEngineScriptInfo structure contains
1561  * information about how the shaper covers a particular script.
1562  */
1563 struct PangoEngineScriptInfo
1564 {
1565 	/**
1566 	 * a #PangoScript. The value %PANGO_SCRIPT_COMMON has
1567 	 * the special meaning here of "all scripts"
1568 	 */
1569 	PangoScript script;
1570 	/**
1571 	 * a semicolon separated list of languages that this
1572 	 * engine handles for this script. This may be empty,
1573 	 * in which case the engine is saying that it is a
1574 	 * fallback choice for all languages for this range,
1575 	 * but should not be used if another engine
1576 	 * indicates that it is specific for the language for
1577 	 * a given code point. An entry in this list of "*"
1578 	 * indicates that this engine is specific to all
1579 	 * languages for this range.
1580 	 */
1581 	const(char)* langs;
1582 }
1583 
1584 struct PangoEngineShape
1585 {
1586 	PangoEngine parentInstance;
1587 }
1588 
1589 /**
1590  * Class structure for #PangoEngineShape
1591  */
1592 struct PangoEngineShapeClass
1593 {
1594 	PangoEngineClass parentClass;
1595 	/** */
1596 	extern(C) void function(PangoEngineShape* engine, PangoFont* font, const(char)* itemText, uint itemLength, PangoAnalysis* analysis, PangoGlyphString* glyphs, const(char)* paragraphText, uint paragraphLength) scriptShape;
1597 	/** */
1598 	extern(C) PangoCoverageLevel function(PangoEngineShape* engine, PangoFont* font, PangoLanguage* language, dchar wc) covers;
1599 }
1600 
1601 struct PangoFont
1602 {
1603 	GObject parentInstance;
1604 }
1605 
1606 struct PangoFontClass
1607 {
1608 	GObjectClass parentClass;
1609 	/**
1610 	 *
1611 	 * Params:
1612 	 *     font = a #PangoFont
1613 	 * Returns: a newly-allocated #PangoFontDescription object.
1614 	 */
1615 	extern(C) PangoFontDescription* function(PangoFont* font) describe;
1616 	/**
1617 	 *
1618 	 * Params:
1619 	 *     font = a #PangoFont
1620 	 *     language = the language tag
1621 	 * Returns: a newly-allocated #PangoCoverage
1622 	 *     object.
1623 	 */
1624 	extern(C) PangoCoverage* function(PangoFont* font, PangoLanguage* language) getCoverage;
1625 	/**
1626 	 *
1627 	 * Params:
1628 	 *     font = a #PangoFont
1629 	 *     language = the language tag
1630 	 *     ch = a Unicode character.
1631 	 * Returns: the best matching shaper.
1632 	 */
1633 	extern(C) PangoEngineShape* function(PangoFont* font, PangoLanguage* language, uint ch) findShaper;
1634 	/** */
1635 	extern(C) void function(PangoFont* font, PangoGlyph glyph, PangoRectangle* inkRect, PangoRectangle* logicalRect) getGlyphExtents;
1636 	/**
1637 	 *
1638 	 * Params:
1639 	 *     font = a #PangoFont
1640 	 *     language = language tag used to determine which script to get the metrics
1641 	 *         for, or %NULL to indicate to get the metrics for the entire font.
1642 	 * Returns: a #PangoFontMetrics object. The caller must call pango_font_metrics_unref()
1643 	 *     when finished using the object.
1644 	 */
1645 	extern(C) PangoFontMetrics* function(PangoFont* font, PangoLanguage* language) getMetrics;
1646 	/**
1647 	 *
1648 	 * Params:
1649 	 *     font = a #PangoFont, or %NULL
1650 	 * Returns: the #PangoFontMap for the
1651 	 *     font, or %NULL if @font is %NULL.
1652 	 */
1653 	extern(C) PangoFontMap* function(PangoFont* font) getFontMap;
1654 	/** */
1655 	extern(C) PangoFontDescription* function(PangoFont* font) describeAbsolute;
1656 	/** */
1657 	extern(C) void function() PangoReserved1;
1658 	/** */
1659 	extern(C) void function() PangoReserved2;
1660 }
1661 
1662 struct PangoFontDescription;
1663 
1664 struct PangoFontFace
1665 {
1666 	GObject parentInstance;
1667 }
1668 
1669 struct PangoFontFaceClass
1670 {
1671 	GObjectClass parentClass;
1672 	/**
1673 	 *
1674 	 * Params:
1675 	 *     face = a #PangoFontFace.
1676 	 * Returns: the face name for the face. This string is
1677 	 *     owned by the face object and must not be modified or freed.
1678 	 */
1679 	extern(C) const(char)* function(PangoFontFace* face) getFaceName;
1680 	/**
1681 	 *
1682 	 * Params:
1683 	 *     face = a #PangoFontFace
1684 	 * Returns: a newly-created #PangoFontDescription structure
1685 	 *     holding the description of the face. Use pango_font_description_free()
1686 	 *     to free the result.
1687 	 */
1688 	extern(C) PangoFontDescription* function(PangoFontFace* face) describe;
1689 	/** */
1690 	extern(C) void function(PangoFontFace* face, int** sizes, int* nSizes) listSizes;
1691 	/**
1692 	 *
1693 	 * Params:
1694 	 *     face = a #PangoFontFace
1695 	 * Returns: whether @face is synthesized.
1696 	 */
1697 	extern(C) int function(PangoFontFace* face) isSynthesized;
1698 	/** */
1699 	extern(C) void function() PangoReserved3;
1700 	/** */
1701 	extern(C) void function() PangoReserved4;
1702 }
1703 
1704 struct PangoFontFamily
1705 {
1706 	GObject parentInstance;
1707 }
1708 
1709 struct PangoFontFamilyClass
1710 {
1711 	GObjectClass parentClass;
1712 	/** */
1713 	extern(C) void function(PangoFontFamily* family, PangoFontFace*** faces, int* nFaces) listFaces;
1714 	/**
1715 	 *
1716 	 * Params:
1717 	 *     family = a #PangoFontFamily
1718 	 * Returns: the name of the family. This string is owned
1719 	 *     by the family object and must not be modified or freed.
1720 	 */
1721 	extern(C) const(char)* function(PangoFontFamily* family) getName;
1722 	/**
1723 	 *
1724 	 * Params:
1725 	 *     family = a #PangoFontFamily
1726 	 * Returns: %TRUE if the family is monospace.
1727 	 */
1728 	extern(C) int function(PangoFontFamily* family) isMonospace;
1729 	/**
1730 	 *
1731 	 * Params:
1732 	 *     family = a #PangoFontFamily
1733 	 * Returns: %TRUE if the family is variable
1734 	 */
1735 	extern(C) int function(PangoFontFamily* family) isVariable;
1736 	/** */
1737 	extern(C) void function() PangoReserved2;
1738 	/** */
1739 	extern(C) void function() PangoReserved3;
1740 }
1741 
1742 struct PangoFontMap
1743 {
1744 	GObject parentInstance;
1745 }
1746 
1747 /**
1748  * The #PangoFontMapClass structure holds the virtual functions for
1749  * a particular #PangoFontMap implementation.
1750  */
1751 struct PangoFontMapClass
1752 {
1753 	/**
1754 	 * parent #GObjectClass.
1755 	 */
1756 	GObjectClass parentClass;
1757 	/**
1758 	 *
1759 	 * Params:
1760 	 *     fontmap = a #PangoFontMap
1761 	 *     context = the #PangoContext the font will be used with
1762 	 *     desc = a #PangoFontDescription describing the font to load
1763 	 * Returns: the newly allocated #PangoFont
1764 	 *     loaded, or %NULL if no font matched.
1765 	 */
1766 	extern(C) PangoFont* function(PangoFontMap* fontmap, PangoContext* context, PangoFontDescription* desc) loadFont;
1767 	/** */
1768 	extern(C) void function(PangoFontMap* fontmap, PangoFontFamily*** families, int* nFamilies) listFamilies;
1769 	/**
1770 	 *
1771 	 * Params:
1772 	 *     fontmap = a #PangoFontMap
1773 	 *     context = the #PangoContext the font will be used with
1774 	 *     desc = a #PangoFontDescription describing the font to load
1775 	 *     language = a #PangoLanguage the fonts will be used for
1776 	 * Returns: the newly allocated
1777 	 *     #PangoFontset loaded, or %NULL if no font matched.
1778 	 */
1779 	extern(C) PangoFontset* function(PangoFontMap* fontmap, PangoContext* context, PangoFontDescription* desc, PangoLanguage* language) loadFontset;
1780 	/**
1781 	 * the type of rendering-system-dependent engines that
1782 	 * can handle fonts of this fonts loaded with this fontmap.
1783 	 */
1784 	const(char)* shapeEngineType;
1785 	/**
1786 	 *
1787 	 * Params:
1788 	 *     fontmap = a #PangoFontMap
1789 	 * Returns: The current serial number of @fontmap.
1790 	 */
1791 	extern(C) uint function(PangoFontMap* fontmap) getSerial;
1792 	/** */
1793 	extern(C) void function(PangoFontMap* fontmap) changed;
1794 	/** */
1795 	extern(C) void function() PangoReserved1;
1796 	/** */
1797 	extern(C) void function() PangoReserved2;
1798 }
1799 
1800 struct PangoFontMetrics
1801 {
1802 	uint refCount;
1803 	int ascent;
1804 	int descent;
1805 	int approximateCharWidth;
1806 	int approximateDigitWidth;
1807 	int underlinePosition;
1808 	int underlineThickness;
1809 	int strikethroughPosition;
1810 	int strikethroughThickness;
1811 }
1812 
1813 struct PangoFontset
1814 {
1815 	GObject parentInstance;
1816 }
1817 
1818 /**
1819  * The #PangoFontsetClass structure holds the virtual functions for
1820  * a particular #PangoFontset implementation.
1821  */
1822 struct PangoFontsetClass
1823 {
1824 	/**
1825 	 * parent #GObjectClass.
1826 	 */
1827 	GObjectClass parentClass;
1828 	/**
1829 	 *
1830 	 * Params:
1831 	 *     fontset = a #PangoFontset
1832 	 *     wc = a Unicode character
1833 	 * Returns: a #PangoFont. The caller must call
1834 	 *     g_object_unref when finished with the font.
1835 	 */
1836 	extern(C) PangoFont* function(PangoFontset* fontset, uint wc) getFont;
1837 	/**
1838 	 *
1839 	 * Params:
1840 	 *     fontset = a #PangoFontset
1841 	 * Returns: a #PangoFontMetrics object. The caller must call pango_font_metrics_unref()
1842 	 *     when finished using the object.
1843 	 */
1844 	extern(C) PangoFontMetrics* function(PangoFontset* fontset) getMetrics;
1845 	/** */
1846 	extern(C) PangoLanguage* function(PangoFontset* fontset) getLanguage;
1847 	/** */
1848 	extern(C) void function(PangoFontset* fontset, PangoFontsetForeachFunc func, void* data) foreach_;
1849 	/** */
1850 	extern(C) void function() PangoReserved1;
1851 	/** */
1852 	extern(C) void function() PangoReserved2;
1853 	/** */
1854 	extern(C) void function() PangoReserved3;
1855 	/** */
1856 	extern(C) void function() PangoReserved4;
1857 }
1858 
1859 struct PangoFontsetSimple;
1860 
1861 struct PangoFontsetSimpleClass;
1862 
1863 /**
1864  * The #PangoGlyphGeometry structure contains width and positioning
1865  * information for a single glyph.
1866  */
1867 struct PangoGlyphGeometry
1868 {
1869 	/**
1870 	 * the logical width to use for the the character.
1871 	 */
1872 	PangoGlyphUnit width;
1873 	/**
1874 	 * horizontal offset from nominal character position.
1875 	 */
1876 	PangoGlyphUnit xOffset;
1877 	/**
1878 	 * vertical offset from nominal character position.
1879 	 */
1880 	PangoGlyphUnit yOffset;
1881 }
1882 
1883 /**
1884  * The #PangoGlyphInfo structure represents a single glyph together with
1885  * positioning information and visual attributes.
1886  * It contains the following fields.
1887  */
1888 struct PangoGlyphInfo
1889 {
1890 	/**
1891 	 * the glyph itself.
1892 	 */
1893 	PangoGlyph glyph;
1894 	/**
1895 	 * the positional information about the glyph.
1896 	 */
1897 	PangoGlyphGeometry geometry;
1898 	/**
1899 	 * the visual attributes of the glyph.
1900 	 */
1901 	PangoGlyphVisAttr attr;
1902 }
1903 
1904 struct PangoGlyphItem
1905 {
1906 	/**
1907 	 * corresponding #PangoItem.
1908 	 */
1909 	PangoItem* item;
1910 	/**
1911 	 * corresponding #PangoGlyphString.
1912 	 */
1913 	PangoGlyphString* glyphs;
1914 }
1915 
1916 struct PangoGlyphItemIter
1917 {
1918 	PangoGlyphItem* glyphItem;
1919 	const(char)* text;
1920 	int startGlyph;
1921 	int startIndex;
1922 	int startChar;
1923 	int endGlyph;
1924 	int endIndex;
1925 	int endChar;
1926 }
1927 
1928 struct PangoGlyphString
1929 {
1930 	/**
1931 	 * number of the glyphs in this glyph string.
1932 	 */
1933 	int numGlyphs;
1934 	/**
1935 	 * array of glyph information
1936 	 * for the glyph string.
1937 	 */
1938 	PangoGlyphInfo* glyphs;
1939 	/**
1940 	 * logical cluster info, indexed by the byte index
1941 	 * within the text corresponding to the glyph string.
1942 	 */
1943 	int* logClusters;
1944 	int space;
1945 }
1946 
1947 /**
1948  * The PangoGlyphVisAttr is used to communicate information between
1949  * the shaping phase and the rendering phase.  More attributes may be
1950  * added in the future.
1951  */
1952 struct PangoGlyphVisAttr
1953 {
1954 	import std.bitmanip: bitfields;
1955 	mixin(bitfields!(
1956 		uint, "isClusterStart", 1,
1957 		uint, "", 31
1958 	));
1959 }
1960 
1961 /**
1962  * The #PangoIncludedModule structure for a statically linked module
1963  * contains the functions that would otherwise be loaded from a dynamically
1964  * loaded module.
1965  */
1966 struct PangoIncludedModule
1967 {
1968 	/** */
1969 	extern(C) void function(PangoEngineInfo** engines, int* nEngines) list;
1970 	/** */
1971 	extern(C) void function(GTypeModule* module_) init;
1972 	/** */
1973 	extern(C) void function() exit;
1974 	/** */
1975 	extern(C) PangoEngine* function(const(char)* id) create;
1976 }
1977 
1978 struct PangoItem
1979 {
1980 	/**
1981 	 * byte offset of the start of this item in text.
1982 	 */
1983 	int offset;
1984 	/**
1985 	 * length of this item in bytes.
1986 	 */
1987 	int length;
1988 	/**
1989 	 * number of Unicode characters in the item.
1990 	 */
1991 	int numChars;
1992 	/**
1993 	 * analysis results for the item.
1994 	 */
1995 	PangoAnalysis analysis;
1996 }
1997 
1998 struct PangoLanguage;
1999 
2000 struct PangoLayout;
2001 
2002 struct PangoLayoutClass;
2003 
2004 struct PangoLayoutIter;
2005 
2006 struct PangoLayoutLine
2007 {
2008 	/**
2009 	 * the layout this line belongs to, might be %NULL
2010 	 */
2011 	PangoLayout* layout;
2012 	/**
2013 	 * start of line as byte index into layout->text
2014 	 */
2015 	int startIndex;
2016 	/**
2017 	 * length of line in bytes
2018 	 */
2019 	int length;
2020 	/**
2021 	 * list of runs in the
2022 	 * line, from left to right
2023 	 */
2024 	GSList* runs;
2025 	import std.bitmanip: bitfields;
2026 	mixin(bitfields!(
2027 		uint, "isParagraphStart", 1,
2028 		uint, "resolvedDir", 3,
2029 		uint, "", 28
2030 	));
2031 }
2032 
2033 /**
2034  * The #PangoLogAttr structure stores information
2035  * about the attributes of a single character.
2036  */
2037 struct PangoLogAttr
2038 {
2039 	import std.bitmanip: bitfields;
2040 	mixin(bitfields!(
2041 		uint, "isLineBreak", 1,
2042 		uint, "isMandatoryBreak", 1,
2043 		uint, "isCharBreak", 1,
2044 		uint, "isWhite", 1,
2045 		uint, "isCursorPosition", 1,
2046 		uint, "isWordStart", 1,
2047 		uint, "isWordEnd", 1,
2048 		uint, "isSentenceBoundary", 1,
2049 		uint, "isSentenceStart", 1,
2050 		uint, "isSentenceEnd", 1,
2051 		uint, "backspaceDeletesCharacter", 1,
2052 		uint, "isExpandableSpace", 1,
2053 		uint, "isWordBoundary", 1,
2054 		uint, "", 19
2055 	));
2056 }
2057 
2058 struct PangoMap;
2059 
2060 struct PangoMapEntry;
2061 
2062 struct PangoMatrix
2063 {
2064 	/**
2065 	 * 1st component of the transformation matrix
2066 	 */
2067 	double xx;
2068 	/**
2069 	 * 2nd component of the transformation matrix
2070 	 */
2071 	double xy;
2072 	/**
2073 	 * 3rd component of the transformation matrix
2074 	 */
2075 	double yx;
2076 	/**
2077 	 * 4th component of the transformation matrix
2078 	 */
2079 	double yy;
2080 	/**
2081 	 * x translation
2082 	 */
2083 	double x0;
2084 	/**
2085 	 * y translation
2086 	 */
2087 	double y0;
2088 }
2089 
2090 /**
2091  * The #PangoRectangle structure represents a rectangle. It is frequently
2092  * used to represent the logical or ink extents of a single glyph or section
2093  * of text. (See, for instance, pango_font_get_glyph_extents())
2094  */
2095 struct PangoRectangle
2096 {
2097 	/**
2098 	 * X coordinate of the left side of the rectangle.
2099 	 */
2100 	int x;
2101 	/**
2102 	 * Y coordinate of the the top side of the rectangle.
2103 	 */
2104 	int y;
2105 	/**
2106 	 * width of the rectangle.
2107 	 */
2108 	int width;
2109 	/**
2110 	 * height of the rectangle.
2111 	 */
2112 	int height;
2113 }
2114 
2115 struct PangoRenderer
2116 {
2117 	GObject parentInstance;
2118 	PangoUnderline underline;
2119 	bool strikethrough;
2120 	int activeCount;
2121 	/**
2122 	 * the current transformation matrix for
2123 	 * the Renderer; may be %NULL, which should be treated the
2124 	 * same as the identity matrix.
2125 	 */
2126 	PangoMatrix* matrix;
2127 	PangoRendererPrivate* priv;
2128 }
2129 
2130 /**
2131  * Class structure for #PangoRenderer.
2132  *
2133  * Since: 1.8
2134  */
2135 struct PangoRendererClass
2136 {
2137 	GObjectClass parentClass;
2138 	/** */
2139 	extern(C) void function(PangoRenderer* renderer, PangoFont* font, PangoGlyphString* glyphs, int x, int y) drawGlyphs;
2140 	/** */
2141 	extern(C) void function(PangoRenderer* renderer, PangoRenderPart part, int x, int y, int width, int height) drawRectangle;
2142 	/** */
2143 	extern(C) void function(PangoRenderer* renderer, int x, int y, int width, int height) drawErrorUnderline;
2144 	/** */
2145 	extern(C) void function(PangoRenderer* renderer, PangoAttrShape* attr, int x, int y) drawShape;
2146 	/** */
2147 	extern(C) void function(PangoRenderer* renderer, PangoRenderPart part, double y1, double x11, double x21, double y2, double x12, double x22) drawTrapezoid;
2148 	/** */
2149 	extern(C) void function(PangoRenderer* renderer, PangoFont* font, PangoGlyph glyph, double x, double y) drawGlyph;
2150 	/** */
2151 	extern(C) void function(PangoRenderer* renderer, PangoRenderPart part) partChanged;
2152 	/** */
2153 	extern(C) void function(PangoRenderer* renderer) begin;
2154 	/** */
2155 	extern(C) void function(PangoRenderer* renderer) end;
2156 	/** */
2157 	extern(C) void function(PangoRenderer* renderer, PangoLayoutRun* run) prepareRun;
2158 	/** */
2159 	extern(C) void function(PangoRenderer* renderer, const(char)* text, PangoGlyphItem* glyphItem, int x, int y) drawGlyphItem;
2160 	/** */
2161 	extern(C) void function() PangoReserved2;
2162 	/** */
2163 	extern(C) void function() PangoReserved3;
2164 	/** */
2165 	extern(C) void function() PangoReserved4;
2166 }
2167 
2168 struct PangoRendererPrivate;
2169 
2170 struct PangoScriptIter;
2171 
2172 struct PangoTabArray;
2173 
2174 struct PangoCairoFontMap;
2175 
2176 /**
2177  * Type of a function that can duplicate user data for an attribute.
2178  *
2179  * Params:
2180  *     userData = user data to copy
2181  *
2182  * Returns: new copy of @user_data.
2183  */
2184 public alias extern(C) void* function(void* userData) PangoAttrDataCopyFunc;
2185 
2186 /**
2187  * Type of a function filtering a list of attributes.
2188  *
2189  * Params:
2190  *     attribute = a Pango attribute
2191  *     userData = user data passed to the function
2192  *
2193  * Returns: %TRUE if the attribute should be selected for
2194  *     filtering, %FALSE otherwise.
2195  */
2196 public alias extern(C) int function(PangoAttribute* attribute, void* userData) PangoAttrFilterFunc;
2197 
2198 /**
2199  * A callback function used by pango_fontset_foreach() when enumerating
2200  * the fonts in a fontset.
2201  *
2202  * Params:
2203  *     fontset = a #PangoFontset
2204  *     font = a font from @fontset
2205  *     userData = callback data
2206  *
2207  * Returns: if %TRUE, stop iteration and return immediately.
2208  *
2209  * Since: 1.4
2210  */
2211 public alias extern(C) int function(PangoFontset* fontset, PangoFont* font, void* userData) PangoFontsetForeachFunc;
2212 
2213 /**
2214  * Function type for rendering attributes of type %PANGO_ATTR_SHAPE
2215  * with Pango's Cairo renderer.
2216  *
2217  * Params:
2218  *     cr = a Cairo context with current point set to where the shape should
2219  *         be rendered
2220  *     attr = the %PANGO_ATTR_SHAPE to render
2221  *     doPath = whether only the shape path should be appended to current
2222  *         path of @cr and no filling/stroking done.  This will be set
2223  *         to %TRUE when called from pango_cairo_layout_path() and
2224  *         pango_cairo_layout_line_path() rendering functions.
2225  *     data = user data passed to pango_cairo_context_set_shape_renderer()
2226  */
2227 public alias extern(C) void function(cairo_t* cr, PangoAttrShape* attr, int doPath, void* data) PangoCairoShapeRendererFunc;
2228 
2229 enum PANGO_SCALE_XX_SMALL = 0.5787037037037;  /// The scale factor for three shrinking steps (1 / (1.2 * 1.2 * 1.2)).
2230 enum PANGO_SCALE_X_SMALL  = 0.6444444444444;  /// The scale factor for two shrinking steps (1 / (1.2 * 1.2)).
2231 enum PANGO_SCALE_SMALL    = 0.8333333333333;  /// The scale factor for one shrinking step (1 / 1.2).
2232 enum PANGO_SCALE_MEDIUM   = 1.0;              /// The scale factor for normal size (1.0).
2233 enum PANGO_SCALE_LARGE    = 1.2;              /// The scale factor for one magnification step (1.2)
2234 enum PANGO_SCALE_X_LARGE  = 1.4399999999999;  /// The scale factor for two magnification steps (1.2 * 1.2).
2235 enum PANGO_SCALE_XX_LARGE = 1.728;            /// The scale factor for three magnification steps (1.2 * 1.2 * 1.2).
2236 
2237 
2238 /**
2239  * Whether the segment should be shifted to center around the baseline.
2240  * Used in vertical writing directions mostly.
2241  */
2242 enum ANALYSIS_FLAG_CENTERED_BASELINE = 1;
2243 alias PANGO_ANALYSIS_FLAG_CENTERED_BASELINE = ANALYSIS_FLAG_CENTERED_BASELINE;
2244 
2245 /**
2246  * This flag is used to mark runs that hold ellipsized text,
2247  * in an ellipsized layout.
2248  */
2249 enum ANALYSIS_FLAG_IS_ELLIPSIS = 2;
2250 alias PANGO_ANALYSIS_FLAG_IS_ELLIPSIS = ANALYSIS_FLAG_IS_ELLIPSIS;
2251 
2252 /**
2253  * This value can be used to set the start_index member of a #PangoAttribute
2254  * such that the attribute covers from the beginning of the text.
2255  */
2256 enum ATTR_INDEX_FROM_TEXT_BEGINNING = 0;
2257 alias PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING = ATTR_INDEX_FROM_TEXT_BEGINNING;
2258 
2259 /**
2260  * A string constant defining the engine type for language engines.
2261  * These engines derive from #PangoEngineLang.
2262  */
2263 enum ENGINE_TYPE_LANG = "PangoEngineLang";
2264 alias PANGO_ENGINE_TYPE_LANG = ENGINE_TYPE_LANG;
2265 
2266 /**
2267  * A string constant defining the engine type for shaping engines.
2268  * These engines derive from #PangoEngineShape.
2269  */
2270 enum ENGINE_TYPE_SHAPE = "PangoEngineShape";
2271 alias PANGO_ENGINE_TYPE_SHAPE = ENGINE_TYPE_SHAPE;
2272 
2273 /**
2274  * The %PANGO_GLYPH_EMPTY macro represents a #PangoGlyph value that has a
2275  * special meaning, which is a zero-width empty glyph.  This is useful for
2276  * example in shaper modules, to use as the glyph for various zero-width
2277  * Unicode characters (those passing pango_is_zero_width()).
2278  */
2279 enum GLYPH_EMPTY = 268435455;
2280 alias PANGO_GLYPH_EMPTY = GLYPH_EMPTY;
2281 
2282 /**
2283  * The %PANGO_GLYPH_INVALID_INPUT macro represents a #PangoGlyph value that has a
2284  * special meaning of invalid input.  #PangoLayout produces one such glyph
2285  * per invalid input UTF-8 byte and such a glyph is rendered as a crossed
2286  * box.
2287  *
2288  * Note that this value is defined such that it has the %PANGO_GLYPH_UNKNOWN_FLAG
2289  * on.
2290  */
2291 enum GLYPH_INVALID_INPUT = 4294967295;
2292 alias PANGO_GLYPH_INVALID_INPUT = GLYPH_INVALID_INPUT;
2293 
2294 /**
2295  * The %PANGO_GLYPH_UNKNOWN_FLAG macro is a flag value that can be added to
2296  * a #gunichar value of a valid Unicode character, to produce a #PangoGlyph
2297  * value, representing an unknown-character glyph for the respective #gunichar.
2298  */
2299 enum GLYPH_UNKNOWN_FLAG = 268435456;
2300 alias PANGO_GLYPH_UNKNOWN_FLAG = GLYPH_UNKNOWN_FLAG;
2301 
2302 /**
2303  * A string constant defining the render type
2304  * for engines that are not rendering-system specific.
2305  */
2306 enum RENDER_TYPE_NONE = "PangoRenderNone";
2307 alias PANGO_RENDER_TYPE_NONE = RENDER_TYPE_NONE;
2308 
2309 /**
2310  * The %PANGO_SCALE macro represents the scale between dimensions used
2311  * for Pango distances and device units. (The definition of device
2312  * units is dependent on the output device; it will typically be pixels
2313  * for a screen, and points for a printer.) %PANGO_SCALE is currently
2314  * 1024, but this may be changed in the future.
2315  *
2316  * When setting font sizes, device units are always considered to be
2317  * points (as in "12 point font"), rather than pixels.
2318  */
2319 enum SCALE = 1024;
2320 alias PANGO_SCALE = SCALE;
2321 
2322 enum UNKNOWN_GLYPH_HEIGHT = 14;
2323 alias PANGO_UNKNOWN_GLYPH_HEIGHT = UNKNOWN_GLYPH_HEIGHT;
2324 
2325 enum UNKNOWN_GLYPH_WIDTH = 10;
2326 alias PANGO_UNKNOWN_GLYPH_WIDTH = UNKNOWN_GLYPH_WIDTH;
2327 
2328 /**
2329  * A macro that should be defined by the user prior to including
2330  * the pango.h header.
2331  * The definition should be one of the predefined Pango version
2332  * macros: %PANGO_VERSION_1_2, %PANGO_VERSION_1_4,...
2333  *
2334  * This macro defines the earliest version of Pango that the package is
2335  * required to be able to compile against.
2336  *
2337  * If the compiler is configured to warn about the use of deprecated
2338  * functions, then using functions that were deprecated in version
2339  * %PANGO_VERSION_MIN_REQUIRED or earlier will cause warnings (but
2340  * using functions deprecated in later releases will not).
2341  */
2342 enum VERSION_MIN_REQUIRED = 2;
2343 alias PANGO_VERSION_MIN_REQUIRED = VERSION_MIN_REQUIRED;