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 gtkc.pangotypes;
26 
27 public import gtkc.cairotypes;
28 public import gtkc.glibtypes;
29 public import gtkc.gobjecttypes;
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 struct PangoCairoFontMap;
1218 
1219 
1220 /**
1221  * The #PangoAnalysis structure stores information about
1222  * the properties of a segment of text.
1223  */
1224 struct PangoAnalysis
1225 {
1226 	/**
1227 	 * the engine for doing rendering-system-dependent processing.
1228 	 */
1229 	PangoEngineShape* shapeEngine;
1230 	/**
1231 	 * the engine for doing rendering-system-independent processing.
1232 	 */
1233 	PangoEngineLang* langEngine;
1234 	/**
1235 	 * the font for this segment.
1236 	 */
1237 	PangoFont* font;
1238 	/**
1239 	 * the bidirectional level for this segment.
1240 	 */
1241 	ubyte level;
1242 	/**
1243 	 * the glyph orientation for this segment (A #PangoGravity).
1244 	 */
1245 	ubyte gravity;
1246 	/**
1247 	 * boolean flags for this segment (currently only one) (Since: 1.16).
1248 	 */
1249 	ubyte flags;
1250 	/**
1251 	 * the detected script for this segment (A #PangoScript) (Since: 1.18).
1252 	 */
1253 	ubyte script;
1254 	/**
1255 	 * the detected language for this segment.
1256 	 */
1257 	PangoLanguage* language;
1258 	/**
1259 	 * extra attributes for this segment.
1260 	 */
1261 	GSList* extraAttrs;
1262 }
1263 
1264 /**
1265  * The #PangoAttrClass structure stores the type and operations for
1266  * a particular type of attribute. The functions in this structure should
1267  * not be called directly. Instead, one should use the wrapper functions
1268  * provided for #PangoAttribute.
1269  */
1270 struct PangoAttrClass
1271 {
1272 	/**
1273 	 * the type ID for this attribute
1274 	 */
1275 	PangoAttrType type;
1276 	/** */
1277 	extern(C) PangoAttribute* function(PangoAttribute* attr) copy;
1278 	/** */
1279 	extern(C) void function(PangoAttribute* attr) destroy;
1280 	/** */
1281 	extern(C) int function(PangoAttribute* attr1, PangoAttribute* attr2) equal;
1282 }
1283 
1284 /**
1285  * The #PangoAttrColor structure is used to represent attributes that
1286  * are colors.
1287  */
1288 struct PangoAttrColor
1289 {
1290 	/**
1291 	 * the common portion of the attribute
1292 	 */
1293 	PangoAttribute attr;
1294 	/**
1295 	 * the #PangoColor which is the value of the attribute
1296 	 */
1297 	PangoColor color;
1298 }
1299 
1300 /**
1301  * The #PangoAttrFloat structure is used to represent attributes with
1302  * a float or double value.
1303  */
1304 struct PangoAttrFloat
1305 {
1306 	/**
1307 	 * the common portion of the attribute
1308 	 */
1309 	PangoAttribute attr;
1310 	/**
1311 	 * the value of the attribute
1312 	 */
1313 	double value;
1314 }
1315 
1316 /**
1317  * The #PangoAttrFontDesc structure is used to store an attribute that
1318  * sets all aspects of the font description at once.
1319  */
1320 struct PangoAttrFontDesc
1321 {
1322 	/**
1323 	 * the common portion of the attribute
1324 	 */
1325 	PangoAttribute attr;
1326 	/**
1327 	 * the font description which is the value of this attribute
1328 	 */
1329 	PangoFontDescription* desc;
1330 }
1331 
1332 /**
1333  * The #PangoAttrFontFeatures structure is used to represent OpenType
1334  * font features as an attribute.
1335  *
1336  * Since: 1.38
1337  */
1338 struct PangoAttrFontFeatures
1339 {
1340 	/**
1341 	 * the common portion of the attribute
1342 	 */
1343 	PangoAttribute attr;
1344 	/**
1345 	 * the featues, as a string in CSS syntax
1346 	 */
1347 	char* features;
1348 }
1349 
1350 /**
1351  * The #PangoAttrInt structure is used to represent attributes with
1352  * an integer or enumeration value.
1353  */
1354 struct PangoAttrInt
1355 {
1356 	/**
1357 	 * the common portion of the attribute
1358 	 */
1359 	PangoAttribute attr;
1360 	/**
1361 	 * the value of the attribute
1362 	 */
1363 	int value;
1364 }
1365 
1366 struct PangoAttrIterator;
1367 
1368 /**
1369  * The #PangoAttrLanguage structure is used to represent attributes that
1370  * are languages.
1371  */
1372 struct PangoAttrLanguage
1373 {
1374 	/**
1375 	 * the common portion of the attribute
1376 	 */
1377 	PangoAttribute attr;
1378 	/**
1379 	 * the #PangoLanguage which is the value of the attribute
1380 	 */
1381 	PangoLanguage* value;
1382 }
1383 
1384 struct PangoAttrList;
1385 
1386 /**
1387  * The #PangoAttrShape structure is used to represent attributes which
1388  * impose shape restrictions.
1389  */
1390 struct PangoAttrShape
1391 {
1392 	/**
1393 	 * the common portion of the attribute
1394 	 */
1395 	PangoAttribute attr;
1396 	/**
1397 	 * the ink rectangle to restrict to
1398 	 */
1399 	PangoRectangle inkRect;
1400 	/**
1401 	 * the logical rectangle to restrict to
1402 	 */
1403 	PangoRectangle logicalRect;
1404 	/**
1405 	 * user data set (see pango_attr_shape_new_with_data())
1406 	 */
1407 	void* data;
1408 	/**
1409 	 * copy function for the user data
1410 	 */
1411 	PangoAttrDataCopyFunc copyFunc;
1412 	/**
1413 	 * destroy function for the user data
1414 	 */
1415 	GDestroyNotify destroyFunc;
1416 }
1417 
1418 /**
1419  * The #PangoAttrSize structure is used to represent attributes which
1420  * set font size.
1421  */
1422 struct PangoAttrSize
1423 {
1424 	/**
1425 	 * the common portion of the attribute
1426 	 */
1427 	PangoAttribute attr;
1428 	/**
1429 	 * size of font, in units of 1/%PANGO_SCALE of a point (for
1430 	 * %PANGO_ATTR_SIZE) or of a device uni (for %PANGO_ATTR_ABSOLUTE_SIZE)
1431 	 */
1432 	int size;
1433 	import std.bitmanip: bitfields;
1434 	mixin(bitfields!(
1435 		uint, "absolute", 1,
1436 		uint, "", 31
1437 	));
1438 }
1439 
1440 /**
1441  * The #PangoAttrString structure is used to represent attributes with
1442  * a string value.
1443  */
1444 struct PangoAttrString
1445 {
1446 	/**
1447 	 * the common portion of the attribute
1448 	 */
1449 	PangoAttribute attr;
1450 	/**
1451 	 * the string which is the value of the attribute
1452 	 */
1453 	char* value;
1454 }
1455 
1456 struct PangoAttribute
1457 {
1458 	/**
1459 	 * the class structure holding information about the type of the attribute
1460 	 */
1461 	PangoAttrClass* klass;
1462 	/**
1463 	 * the start index of the range (in bytes).
1464 	 */
1465 	uint startIndex;
1466 	/**
1467 	 * end index of the range (in bytes). The character at this index
1468 	 * is not included in the range.
1469 	 */
1470 	uint endIndex;
1471 }
1472 
1473 struct PangoColor
1474 {
1475 	/**
1476 	 * value of red component
1477 	 */
1478 	ushort red;
1479 	/**
1480 	 * value of green component
1481 	 */
1482 	ushort green;
1483 	/**
1484 	 * value of blue component
1485 	 */
1486 	ushort blue;
1487 }
1488 
1489 struct PangoContext;
1490 
1491 struct PangoContextClass;
1492 
1493 struct PangoCoverage;
1494 
1495 struct PangoEngine
1496 {
1497 	GObject parentInstance;
1498 }
1499 
1500 /**
1501  * Class structure for #PangoEngine
1502  */
1503 struct PangoEngineClass
1504 {
1505 	GObjectClass parentClass;
1506 }
1507 
1508 /**
1509  * The #PangoEngineInfo structure contains information about a particular
1510  * engine. It contains the following fields:
1511  */
1512 struct PangoEngineInfo
1513 {
1514 	/**
1515 	 * a unique string ID for the engine.
1516 	 */
1517 	const(char)* id;
1518 	/**
1519 	 * a string identifying the engine type.
1520 	 */
1521 	const(char)* engineType;
1522 	/**
1523 	 * a string identifying the render type.
1524 	 */
1525 	const(char)* renderType;
1526 	/**
1527 	 * array of scripts this engine supports.
1528 	 */
1529 	PangoEngineScriptInfo* scripts;
1530 	/**
1531 	 * number of items in @scripts.
1532 	 */
1533 	int nScripts;
1534 }
1535 
1536 struct PangoEngineLang
1537 {
1538 	PangoEngine parentInstance;
1539 }
1540 
1541 /**
1542  * Class structure for #PangoEngineLang
1543  */
1544 struct PangoEngineLangClass
1545 {
1546 	PangoEngineClass parentClass;
1547 	/** */
1548 	extern(C) void function(PangoEngineLang* engine, const(char)* text, int len, PangoAnalysis* analysis, PangoLogAttr* attrs, int attrsLen) scriptBreak;
1549 }
1550 
1551 /**
1552  * The #PangoEngineScriptInfo structure contains
1553  * information about how the shaper covers a particular script.
1554  */
1555 struct PangoEngineScriptInfo
1556 {
1557 	/**
1558 	 * a #PangoScript. The value %PANGO_SCRIPT_COMMON has
1559 	 * the special meaning here of "all scripts"
1560 	 */
1561 	PangoScript script;
1562 	/**
1563 	 * a semicolon separated list of languages that this
1564 	 * engine handles for this script. This may be empty,
1565 	 * in which case the engine is saying that it is a
1566 	 * fallback choice for all languages for this range,
1567 	 * but should not be used if another engine
1568 	 * indicates that it is specific for the language for
1569 	 * a given code point. An entry in this list of "*"
1570 	 * indicates that this engine is specific to all
1571 	 * languages for this range.
1572 	 */
1573 	const(char)* langs;
1574 }
1575 
1576 struct PangoEngineShape
1577 {
1578 	PangoEngine parentInstance;
1579 }
1580 
1581 /**
1582  * Class structure for #PangoEngineShape
1583  */
1584 struct PangoEngineShapeClass
1585 {
1586 	PangoEngineClass parentClass;
1587 	/** */
1588 	extern(C) void function(PangoEngineShape* engine, PangoFont* font, const(char)* itemText, uint itemLength, PangoAnalysis* analysis, PangoGlyphString* glyphs, const(char)* paragraphText, uint paragraphLength) scriptShape;
1589 	/** */
1590 	extern(C) PangoCoverageLevel function(PangoEngineShape* engine, PangoFont* font, PangoLanguage* language, dchar wc) covers;
1591 }
1592 
1593 struct PangoFont
1594 {
1595 	GObject parentInstance;
1596 }
1597 
1598 struct PangoFontClass
1599 {
1600 	GObjectClass parentClass;
1601 	/**
1602 	 *
1603 	 * Params:
1604 	 *     font = a #PangoFont
1605 	 * Return: a newly-allocated #PangoFontDescription object.
1606 	 */
1607 	extern(C) PangoFontDescription* function(PangoFont* font) describe;
1608 	/**
1609 	 *
1610 	 * Params:
1611 	 *     font = a #PangoFont
1612 	 * Return: a newly-allocated #PangoCoverage
1613 	 *     object.
1614 	 */
1615 	extern(C) PangoCoverage* function(PangoFont* font, PangoLanguage* lang) getCoverage;
1616 	/**
1617 	 *
1618 	 * Params:
1619 	 *     font = a #PangoFont
1620 	 *     ch = a Unicode character.
1621 	 * Return: the best matching shaper.
1622 	 */
1623 	extern(C) PangoEngineShape* function(PangoFont* font, PangoLanguage* lang, 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 	 * Return: 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 	 * Return: 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 	 * Return: 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 	 * Return: 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 	 * Return: 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 	 * Return: 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 	 * Return: %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 	 * Return: 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 	 * Return: 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 	 * Return: 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 	 * Return: 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 	 * Return: 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 PangoScriptForLang
2156 {
2157 	char[7] lang;
2158 	PangoScript[3] scripts;
2159 }
2160 
2161 struct PangoScriptIter;
2162 
2163 struct PangoTabArray;
2164 
2165 struct PangoCairoFcFontMap
2166 {
2167 	PangoFcFontMap parentInstance;
2168 	uint serial;
2169 	double dpi;
2170 	FTLibrary library;
2171 }
2172 
2173 /**
2174  * Type of a function that can duplicate user data for an attribute.
2175  *
2176  * Params:
2177  *     userData = user data to copy
2178  *
2179  * Return: new copy of @user_data.
2180  */
2181 public alias extern(C) void* function(void* userData) PangoAttrDataCopyFunc;
2182 
2183 /**
2184  * Type of a function filtering a list of attributes.
2185  *
2186  * Params:
2187  *     attribute = a Pango attribute
2188  *     userData = user data passed to the function
2189  *
2190  * Return: %TRUE if the attribute should be selected for
2191  *     filtering, %FALSE otherwise.
2192  */
2193 public alias extern(C) int function(PangoAttribute* attribute, void* userData) PangoAttrFilterFunc;
2194 
2195 /**
2196  * A callback function used by pango_fontset_foreach() when enumerating
2197  * the fonts in a fontset.
2198  *
2199  * Params:
2200  *     fontset = a #PangoFontset
2201  *     font = a font from @fontset
2202  *     userData = callback data
2203  *
2204  * Return: if %TRUE, stop iteration and return immediately.
2205  *
2206  * Since: 1.4
2207  */
2208 public alias extern(C) int function(PangoFontset* fontset, PangoFont* font, void* userData) PangoFontsetForeachFunc;
2209 
2210 /**
2211  * Function type for rendering attributes of type %PANGO_ATTR_SHAPE
2212  * with Pango's Cairo renderer.
2213  *
2214  * Params:
2215  *     cr = a Cairo context with current point set to where the shape should
2216  *         be rendered
2217  *     attr = the %PANGO_ATTR_SHAPE to render
2218  *     doPath = whether only the shape path should be appended to current
2219  *         path of @cr and no filling/stroking done.  This will be set
2220  *         to %TRUE when called from pango_cairo_layout_path() and
2221  *         pango_cairo_layout_line_path() rendering functions.
2222  *     data = user data passed to pango_cairo_context_set_shape_renderer()
2223  */
2224 public alias extern(C) void function(cairo_t* cr, PangoAttrShape* attr, int doPath, void* data) PangoCairoShapeRendererFunc;
2225 
2226 const int PANGO_SCALE = 1024;
2227 const double PANGO_SCALE_XX_SMALL = 0.5787037037037;	/// The scale factor for three shrinking steps (1 / (1.2 * 1.2 * 1.2)).
2228 const double PANGO_SCALE_X_SMALL  = 0.6444444444444;	/// The scale factor for two shrinking steps (1 / (1.2 * 1.2)).
2229 const double PANGO_SCALE_SMALL    = 0.8333333333333;	/// The scale factor for one shrinking step (1 / 1.2).
2230 const double PANGO_SCALE_MEDIUM   = 1.0;	/// The scale factor for normal size (1.0).
2231 const double PANGO_SCALE_LARGE    = 1.2;	/// The scale factor for one magnification step (1.2)
2232 const double PANGO_SCALE_X_LARGE  = 1.4399999999999;	/// The scale factor for two magnification steps (1.2 * 1.2).
2233 const double PANGO_SCALE_XX_LARGE = 1.728;	/// The scale factor for three magnification steps (1.2 * 1.2 * 1.2).
2234