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