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