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