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 
1218 /**
1219  * The #PangoAnalysis structure stores information about
1220  * the properties of a segment of text.
1221  */
1222 struct PangoAnalysis
1223 {
1224 	/**
1225 	 * the engine for doing rendering-system-dependent processing.
1226 	 */
1227 	PangoEngineShape* shapeEngine;
1228 	/**
1229 	 * the engine for doing rendering-system-independent processing.
1230 	 */
1231 	PangoEngineLang* langEngine;
1232 	/**
1233 	 * the font for this segment.
1234 	 */
1235 	PangoFont* font;
1236 	/**
1237 	 * the bidirectional level for this segment.
1238 	 */
1239 	ubyte level;
1240 	/**
1241 	 * the glyph orientation for this segment (A #PangoGravity).
1242 	 */
1243 	ubyte gravity;
1244 	/**
1245 	 * boolean flags for this segment (currently only one) (Since: 1.16).
1246 	 */
1247 	ubyte flags;
1248 	/**
1249 	 * the detected script for this segment (A #PangoScript) (Since: 1.18).
1250 	 */
1251 	ubyte script;
1252 	/**
1253 	 * the detected language for this segment.
1254 	 */
1255 	PangoLanguage* language;
1256 	/**
1257 	 * extra attributes for this segment.
1258 	 */
1259 	GSList* extraAttrs;
1260 }
1261 
1262 /**
1263  * The #PangoAttrClass structure stores the type and operations for
1264  * a particular type of attribute. The functions in this structure should
1265  * not be called directly. Instead, one should use the wrapper functions
1266  * provided for #PangoAttribute.
1267  */
1268 struct PangoAttrClass
1269 {
1270 	/**
1271 	 * the type ID for this attribute
1272 	 */
1273 	PangoAttrType type;
1274 	/** */
1275 	extern(C) PangoAttribute* function(PangoAttribute* attr) copy;
1276 	/** */
1277 	extern(C) void function(PangoAttribute* attr) destroy;
1278 	/** */
1279 	extern(C) int function(PangoAttribute* attr1, PangoAttribute* attr2) equal;
1280 }
1281 
1282 /**
1283  * The #PangoAttrColor structure is used to represent attributes that
1284  * are colors.
1285  */
1286 struct PangoAttrColor
1287 {
1288 	/**
1289 	 * the common portion of the attribute
1290 	 */
1291 	PangoAttribute attr;
1292 	/**
1293 	 * the #PangoColor which is the value of the attribute
1294 	 */
1295 	PangoColor color;
1296 }
1297 
1298 /**
1299  * The #PangoAttrFloat structure is used to represent attributes with
1300  * a float or double value.
1301  */
1302 struct PangoAttrFloat
1303 {
1304 	/**
1305 	 * the common portion of the attribute
1306 	 */
1307 	PangoAttribute attr;
1308 	/**
1309 	 * the value of the attribute
1310 	 */
1311 	double value;
1312 }
1313 
1314 /**
1315  * The #PangoAttrFontDesc structure is used to store an attribute that
1316  * sets all aspects of the font description at once.
1317  */
1318 struct PangoAttrFontDesc
1319 {
1320 	/**
1321 	 * the common portion of the attribute
1322 	 */
1323 	PangoAttribute attr;
1324 	/**
1325 	 * the font description which is the value of this attribute
1326 	 */
1327 	PangoFontDescription* desc;
1328 }
1329 
1330 /**
1331  * The #PangoAttrFontFeatures structure is used to represent OpenType
1332  * font features as an attribute.
1333  *
1334  * Since: 1.38
1335  */
1336 struct PangoAttrFontFeatures
1337 {
1338 	/**
1339 	 * the common portion of the attribute
1340 	 */
1341 	PangoAttribute attr;
1342 	/**
1343 	 * the featues, as a string in CSS syntax
1344 	 */
1345 	char* features;
1346 }
1347 
1348 /**
1349  * The #PangoAttrInt structure is used to represent attributes with
1350  * an integer or enumeration value.
1351  */
1352 struct PangoAttrInt
1353 {
1354 	/**
1355 	 * the common portion of the attribute
1356 	 */
1357 	PangoAttribute attr;
1358 	/**
1359 	 * the value of the attribute
1360 	 */
1361 	int value;
1362 }
1363 
1364 struct PangoAttrIterator;
1365 
1366 /**
1367  * The #PangoAttrLanguage structure is used to represent attributes that
1368  * are languages.
1369  */
1370 struct PangoAttrLanguage
1371 {
1372 	/**
1373 	 * the common portion of the attribute
1374 	 */
1375 	PangoAttribute attr;
1376 	/**
1377 	 * the #PangoLanguage which is the value of the attribute
1378 	 */
1379 	PangoLanguage* value;
1380 }
1381 
1382 struct PangoAttrList;
1383 
1384 /**
1385  * The #PangoAttrShape structure is used to represent attributes which
1386  * impose shape restrictions.
1387  */
1388 struct PangoAttrShape
1389 {
1390 	/**
1391 	 * the common portion of the attribute
1392 	 */
1393 	PangoAttribute attr;
1394 	/**
1395 	 * the ink rectangle to restrict to
1396 	 */
1397 	PangoRectangle inkRect;
1398 	/**
1399 	 * the logical rectangle to restrict to
1400 	 */
1401 	PangoRectangle logicalRect;
1402 	/**
1403 	 * user data set (see pango_attr_shape_new_with_data())
1404 	 */
1405 	void* data;
1406 	/**
1407 	 * copy function for the user data
1408 	 */
1409 	PangoAttrDataCopyFunc copyFunc;
1410 	/**
1411 	 * destroy function for the user data
1412 	 */
1413 	GDestroyNotify destroyFunc;
1414 }
1415 
1416 /**
1417  * The #PangoAttrSize structure is used to represent attributes which
1418  * set font size.
1419  */
1420 struct PangoAttrSize
1421 {
1422 	/**
1423 	 * the common portion of the attribute
1424 	 */
1425 	PangoAttribute attr;
1426 	/**
1427 	 * size of font, in units of 1/%PANGO_SCALE of a point (for
1428 	 * %PANGO_ATTR_SIZE) or of a device uni (for %PANGO_ATTR_ABSOLUTE_SIZE)
1429 	 */
1430 	int size;
1431 	import std.bitmanip: bitfields;
1432 	mixin(bitfields!(
1433 		uint, "absolute", 1,
1434 		uint, "", 31
1435 	));
1436 }
1437 
1438 /**
1439  * The #PangoAttrString structure is used to represent attributes with
1440  * a string value.
1441  */
1442 struct PangoAttrString
1443 {
1444 	/**
1445 	 * the common portion of the attribute
1446 	 */
1447 	PangoAttribute attr;
1448 	/**
1449 	 * the string which is the value of the attribute
1450 	 */
1451 	char* value;
1452 }
1453 
1454 struct PangoAttribute
1455 {
1456 	/**
1457 	 * the class structure holding information about the type of the attribute
1458 	 */
1459 	PangoAttrClass* klass;
1460 	/**
1461 	 * the start index of the range (in bytes).
1462 	 */
1463 	uint startIndex;
1464 	/**
1465 	 * end index of the range (in bytes). The character at this index
1466 	 * is not included in the range.
1467 	 */
1468 	uint endIndex;
1469 }
1470 
1471 struct PangoColor
1472 {
1473 	/**
1474 	 * value of red component
1475 	 */
1476 	ushort red;
1477 	/**
1478 	 * value of green component
1479 	 */
1480 	ushort green;
1481 	/**
1482 	 * value of blue component
1483 	 */
1484 	ushort blue;
1485 }
1486 
1487 struct PangoContext;
1488 
1489 struct PangoContextClass;
1490 
1491 struct PangoCoverage;
1492 
1493 struct PangoEngine
1494 {
1495 	GObject parentInstance;
1496 }
1497 
1498 /**
1499  * Class structure for #PangoEngine
1500  */
1501 struct PangoEngineClass
1502 {
1503 	GObjectClass parentClass;
1504 }
1505 
1506 /**
1507  * The #PangoEngineInfo structure contains information about a particular
1508  * engine. It contains the following fields:
1509  */
1510 struct PangoEngineInfo
1511 {
1512 	/**
1513 	 * a unique string ID for the engine.
1514 	 */
1515 	const(char)* id;
1516 	/**
1517 	 * a string identifying the engine type.
1518 	 */
1519 	const(char)* engineType;
1520 	/**
1521 	 * a string identifying the render type.
1522 	 */
1523 	const(char)* renderType;
1524 	/**
1525 	 * array of scripts this engine supports.
1526 	 */
1527 	PangoEngineScriptInfo* scripts;
1528 	/**
1529 	 * number of items in @scripts.
1530 	 */
1531 	int nScripts;
1532 }
1533 
1534 struct PangoEngineLang
1535 {
1536 	PangoEngine parentInstance;
1537 }
1538 
1539 /**
1540  * Class structure for #PangoEngineLang
1541  */
1542 struct PangoEngineLangClass
1543 {
1544 	PangoEngineClass parentClass;
1545 	/** */
1546 	extern(C) void function(PangoEngineLang* engine, const(char)* text, int len, PangoAnalysis* analysis, PangoLogAttr* attrs, int attrsLen) scriptBreak;
1547 }
1548 
1549 /**
1550  * The #PangoEngineScriptInfo structure contains
1551  * information about how the shaper covers a particular script.
1552  */
1553 struct PangoEngineScriptInfo
1554 {
1555 	/**
1556 	 * a #PangoScript. The value %PANGO_SCRIPT_COMMON has
1557 	 * the special meaning here of "all scripts"
1558 	 */
1559 	PangoScript script;
1560 	/**
1561 	 * a semicolon separated list of languages that this
1562 	 * engine handles for this script. This may be empty,
1563 	 * in which case the engine is saying that it is a
1564 	 * fallback choice for all languages for this range,
1565 	 * but should not be used if another engine
1566 	 * indicates that it is specific for the language for
1567 	 * a given code point. An entry in this list of "*"
1568 	 * indicates that this engine is specific to all
1569 	 * languages for this range.
1570 	 */
1571 	const(char)* langs;
1572 }
1573 
1574 struct PangoEngineShape
1575 {
1576 	PangoEngine parentInstance;
1577 }
1578 
1579 /**
1580  * Class structure for #PangoEngineShape
1581  */
1582 struct PangoEngineShapeClass
1583 {
1584 	PangoEngineClass parentClass;
1585 	/** */
1586 	extern(C) void function(PangoEngineShape* engine, PangoFont* font, const(char)* itemText, uint itemLength, PangoAnalysis* analysis, PangoGlyphString* glyphs, const(char)* paragraphText, uint paragraphLength) scriptShape;
1587 	/** */
1588 	extern(C) PangoCoverageLevel function(PangoEngineShape* engine, PangoFont* font, PangoLanguage* language, dchar wc) covers;
1589 }
1590 
1591 struct PangoFont
1592 {
1593 	GObject parentInstance;
1594 }
1595 
1596 struct PangoFontClass
1597 {
1598 	GObjectClass parentClass;
1599 	/**
1600 	 *
1601 	 * Params:
1602 	 *     font = a #PangoFont
1603 	 * Returns: a newly-allocated #PangoFontDescription object.
1604 	 */
1605 	extern(C) PangoFontDescription* function(PangoFont* font) describe;
1606 	/**
1607 	 *
1608 	 * Params:
1609 	 *     font = a #PangoFont
1610 	 * Returns: a newly-allocated #PangoCoverage
1611 	 *     object.
1612 	 */
1613 	extern(C) PangoCoverage* function(PangoFont* font, PangoLanguage* lang) getCoverage;
1614 	/**
1615 	 *
1616 	 * Params:
1617 	 *     font = a #PangoFont
1618 	 *     ch = a Unicode character.
1619 	 * Returns: the best matching shaper.
1620 	 */
1621 	extern(C) PangoEngineShape* function(PangoFont* font, PangoLanguage* lang, uint ch) findShaper;
1622 	/** */
1623 	extern(C) void function(PangoFont* font, PangoGlyph glyph, PangoRectangle* inkRect, PangoRectangle* logicalRect) getGlyphExtents;
1624 	/**
1625 	 *
1626 	 * Params:
1627 	 *     font = a #PangoFont
1628 	 *     language = language tag used to determine which script to get the metrics
1629 	 *         for, or %NULL to indicate to get the metrics for the entire font.
1630 	 * Returns: a #PangoFontMetrics object. The caller must call pango_font_metrics_unref()
1631 	 *     when finished using the object.
1632 	 */
1633 	extern(C) PangoFontMetrics* function(PangoFont* font, PangoLanguage* language) getMetrics;
1634 	/**
1635 	 *
1636 	 * Params:
1637 	 *     font = a #PangoFont, or %NULL
1638 	 * Returns: the #PangoFontMap for the
1639 	 *     font, or %NULL if @font is %NULL.
1640 	 */
1641 	extern(C) PangoFontMap* function(PangoFont* font) getFontMap;
1642 	/** */
1643 	extern(C) PangoFontDescription* function(PangoFont* font) describeAbsolute;
1644 	/** */
1645 	extern(C) void function() PangoReserved1;
1646 	/** */
1647 	extern(C) void function() PangoReserved2;
1648 }
1649 
1650 struct PangoFontDescription;
1651 
1652 struct PangoFontFace
1653 {
1654 	GObject parentInstance;
1655 }
1656 
1657 struct PangoFontFaceClass
1658 {
1659 	GObjectClass parentClass;
1660 	/**
1661 	 *
1662 	 * Params:
1663 	 *     face = a #PangoFontFace.
1664 	 * Returns: the face name for the face. This string is
1665 	 *     owned by the face object and must not be modified or freed.
1666 	 */
1667 	extern(C) const(char)* function(PangoFontFace* face) getFaceName;
1668 	/**
1669 	 *
1670 	 * Params:
1671 	 *     face = a #PangoFontFace
1672 	 * Returns: a newly-created #PangoFontDescription structure
1673 	 *     holding the description of the face. Use pango_font_description_free()
1674 	 *     to free the result.
1675 	 */
1676 	extern(C) PangoFontDescription* function(PangoFontFace* face) describe;
1677 	/** */
1678 	extern(C) void function(PangoFontFace* face, int** sizes, int* nSizes) listSizes;
1679 	/**
1680 	 *
1681 	 * Params:
1682 	 *     face = a #PangoFontFace
1683 	 * Returns: whether @face is synthesized.
1684 	 */
1685 	extern(C) int function(PangoFontFace* face) isSynthesized;
1686 	/** */
1687 	extern(C) void function() PangoReserved3;
1688 	/** */
1689 	extern(C) void function() PangoReserved4;
1690 }
1691 
1692 struct PangoFontFamily
1693 {
1694 	GObject parentInstance;
1695 }
1696 
1697 struct PangoFontFamilyClass
1698 {
1699 	GObjectClass parentClass;
1700 	/** */
1701 	extern(C) void function(PangoFontFamily* family, PangoFontFace*** faces, int* nFaces) listFaces;
1702 	/**
1703 	 *
1704 	 * Params:
1705 	 *     family = a #PangoFontFamily
1706 	 * Returns: the name of the family. This string is owned
1707 	 *     by the family object and must not be modified or freed.
1708 	 */
1709 	extern(C) const(char)* function(PangoFontFamily* family) getName;
1710 	/**
1711 	 *
1712 	 * Params:
1713 	 *     family = a #PangoFontFamily
1714 	 * Returns: %TRUE if the family is monospace.
1715 	 */
1716 	extern(C) int function(PangoFontFamily* family) isMonospace;
1717 	/** */
1718 	extern(C) void function() PangoReserved2;
1719 	/** */
1720 	extern(C) void function() PangoReserved3;
1721 	/** */
1722 	extern(C) void function() PangoReserved4;
1723 }
1724 
1725 struct PangoFontMap
1726 {
1727 	GObject parentInstance;
1728 }
1729 
1730 /**
1731  * The #PangoFontMapClass structure holds the virtual functions for
1732  * a particular #PangoFontMap implementation.
1733  */
1734 struct PangoFontMapClass
1735 {
1736 	/**
1737 	 * parent #GObjectClass.
1738 	 */
1739 	GObjectClass parentClass;
1740 	/**
1741 	 *
1742 	 * Params:
1743 	 *     fontmap = a #PangoFontMap
1744 	 *     context = the #PangoContext the font will be used with
1745 	 *     desc = a #PangoFontDescription describing the font to load
1746 	 * Returns: the newly allocated #PangoFont
1747 	 *     loaded, or %NULL if no font matched.
1748 	 */
1749 	extern(C) PangoFont* function(PangoFontMap* fontmap, PangoContext* context, PangoFontDescription* desc) loadFont;
1750 	/** */
1751 	extern(C) void function(PangoFontMap* fontmap, PangoFontFamily*** families, int* nFamilies) listFamilies;
1752 	/**
1753 	 *
1754 	 * Params:
1755 	 *     fontmap = a #PangoFontMap
1756 	 *     context = the #PangoContext the font will be used with
1757 	 *     desc = a #PangoFontDescription describing the font to load
1758 	 *     language = a #PangoLanguage the fonts will be used for
1759 	 * Returns: the newly allocated
1760 	 *     #PangoFontset loaded, or %NULL if no font matched.
1761 	 */
1762 	extern(C) PangoFontset* function(PangoFontMap* fontmap, PangoContext* context, PangoFontDescription* desc, PangoLanguage* language) loadFontset;
1763 	/**
1764 	 * the type of rendering-system-dependent engines that
1765 	 * can handle fonts of this fonts loaded with this fontmap.
1766 	 */
1767 	const(char)* shapeEngineType;
1768 	/**
1769 	 *
1770 	 * Params:
1771 	 *     fontmap = a #PangoFontMap
1772 	 * Returns: The current serial number of @fontmap.
1773 	 */
1774 	extern(C) uint function(PangoFontMap* fontmap) getSerial;
1775 	/** */
1776 	extern(C) void function(PangoFontMap* fontmap) changed;
1777 	/** */
1778 	extern(C) void function() PangoReserved1;
1779 	/** */
1780 	extern(C) void function() PangoReserved2;
1781 }
1782 
1783 struct PangoFontMetrics
1784 {
1785 	uint refCount;
1786 	int ascent;
1787 	int descent;
1788 	int approximateCharWidth;
1789 	int approximateDigitWidth;
1790 	int underlinePosition;
1791 	int underlineThickness;
1792 	int strikethroughPosition;
1793 	int strikethroughThickness;
1794 }
1795 
1796 struct PangoFontset
1797 {
1798 	GObject parentInstance;
1799 }
1800 
1801 /**
1802  * The #PangoFontsetClass structure holds the virtual functions for
1803  * a particular #PangoFontset implementation.
1804  */
1805 struct PangoFontsetClass
1806 {
1807 	/**
1808 	 * parent #GObjectClass.
1809 	 */
1810 	GObjectClass parentClass;
1811 	/**
1812 	 *
1813 	 * Params:
1814 	 *     fontset = a #PangoFontset
1815 	 *     wc = a Unicode character
1816 	 * Returns: a #PangoFont. The caller must call
1817 	 *     g_object_unref when finished with the font.
1818 	 */
1819 	extern(C) PangoFont* function(PangoFontset* fontset, uint wc) getFont;
1820 	/**
1821 	 *
1822 	 * Params:
1823 	 *     fontset = a #PangoFontset
1824 	 * Returns: a #PangoFontMetrics object. The caller must call pango_font_metrics_unref()
1825 	 *     when finished using the object.
1826 	 */
1827 	extern(C) PangoFontMetrics* function(PangoFontset* fontset) getMetrics;
1828 	/** */
1829 	extern(C) PangoLanguage* function(PangoFontset* fontset) getLanguage;
1830 	/** */
1831 	extern(C) void function(PangoFontset* fontset, PangoFontsetForeachFunc func, void* data) foreac;
1832 	/** */
1833 	extern(C) void function() PangoReserved1;
1834 	/** */
1835 	extern(C) void function() PangoReserved2;
1836 	/** */
1837 	extern(C) void function() PangoReserved3;
1838 	/** */
1839 	extern(C) void function() PangoReserved4;
1840 }
1841 
1842 struct PangoFontsetSimple;
1843 
1844 struct PangoFontsetSimpleClass;
1845 
1846 /**
1847  * The #PangoGlyphGeometry structure contains width and positioning
1848  * information for a single glyph.
1849  */
1850 struct PangoGlyphGeometry
1851 {
1852 	/**
1853 	 * the logical width to use for the the character.
1854 	 */
1855 	PangoGlyphUnit width;
1856 	/**
1857 	 * horizontal offset from nominal character position.
1858 	 */
1859 	PangoGlyphUnit xOffset;
1860 	/**
1861 	 * vertical offset from nominal character position.
1862 	 */
1863 	PangoGlyphUnit yOffset;
1864 }
1865 
1866 /**
1867  * The #PangoGlyphInfo structure represents a single glyph together with
1868  * positioning information and visual attributes.
1869  * It contains the following fields.
1870  */
1871 struct PangoGlyphInfo
1872 {
1873 	/**
1874 	 * the glyph itself.
1875 	 */
1876 	PangoGlyph glyph;
1877 	/**
1878 	 * the positional information about the glyph.
1879 	 */
1880 	PangoGlyphGeometry geometry;
1881 	/**
1882 	 * the visual attributes of the glyph.
1883 	 */
1884 	PangoGlyphVisAttr attr;
1885 }
1886 
1887 struct PangoGlyphItem
1888 {
1889 	/**
1890 	 * corresponding #PangoItem.
1891 	 */
1892 	PangoItem* item;
1893 	/**
1894 	 * corresponding #PangoGlyphString.
1895 	 */
1896 	PangoGlyphString* glyphs;
1897 }
1898 
1899 struct PangoGlyphItemIter
1900 {
1901 	PangoGlyphItem* glyphItem;
1902 	const(char)* text;
1903 	int startGlyph;
1904 	int startIndex;
1905 	int startChar;
1906 	int endGlyph;
1907 	int endIndex;
1908 	int endChar;
1909 }
1910 
1911 struct PangoGlyphString
1912 {
1913 	/**
1914 	 * number of the glyphs in this glyph string.
1915 	 */
1916 	int numGlyphs;
1917 	/**
1918 	 * array of glyph information
1919 	 * for the glyph string.
1920 	 */
1921 	PangoGlyphInfo* glyphs;
1922 	/**
1923 	 * logical cluster info, indexed by the byte index
1924 	 * within the text corresponding to the glyph string.
1925 	 */
1926 	int* logClusters;
1927 	int space;
1928 }
1929 
1930 /**
1931  * The PangoGlyphVisAttr is used to communicate information between
1932  * the shaping phase and the rendering phase.  More attributes may be
1933  * added in the future.
1934  */
1935 struct PangoGlyphVisAttr
1936 {
1937 	import std.bitmanip: bitfields;
1938 	mixin(bitfields!(
1939 		uint, "isClusterStart", 1,
1940 		uint, "", 31
1941 	));
1942 }
1943 
1944 /**
1945  * The #PangoIncludedModule structure for a statically linked module
1946  * contains the functions that would otherwise be loaded from a dynamically
1947  * loaded module.
1948  */
1949 struct PangoIncludedModule
1950 {
1951 	/** */
1952 	extern(C) void function(PangoEngineInfo** engines, int* nEngines) list;
1953 	/** */
1954 	extern(C) void function(GTypeModule* modul) init;
1955 	/** */
1956 	extern(C) void function() exit;
1957 	/** */
1958 	extern(C) PangoEngine* function(const(char)* id) create;
1959 }
1960 
1961 struct PangoItem
1962 {
1963 	/**
1964 	 * byte offset of the start of this item in text.
1965 	 */
1966 	int offset;
1967 	/**
1968 	 * length of this item in bytes.
1969 	 */
1970 	int length;
1971 	/**
1972 	 * number of Unicode characters in the item.
1973 	 */
1974 	int numChars;
1975 	/**
1976 	 * analysis results for the item.
1977 	 */
1978 	PangoAnalysis analysis;
1979 }
1980 
1981 struct PangoLanguage;
1982 
1983 struct PangoLayout;
1984 
1985 struct PangoLayoutClass;
1986 
1987 struct PangoLayoutIter;
1988 
1989 struct PangoLayoutLine
1990 {
1991 	/**
1992 	 * the layout this line belongs to, might be %NULL
1993 	 */
1994 	PangoLayout* layout;
1995 	/**
1996 	 * start of line as byte index into layout->text
1997 	 */
1998 	int startIndex;
1999 	/**
2000 	 * length of line in bytes
2001 	 */
2002 	int length;
2003 	/**
2004 	 * list of runs in the
2005 	 * line, from left to right
2006 	 */
2007 	GSList* runs;
2008 	import std.bitmanip: bitfields;
2009 	mixin(bitfields!(
2010 		uint, "isParagraphStart", 1,
2011 		uint, "resolvedDir", 3,
2012 		uint, "", 28
2013 	));
2014 }
2015 
2016 /**
2017  * The #PangoLogAttr structure stores information
2018  * about the attributes of a single character.
2019  */
2020 struct PangoLogAttr
2021 {
2022 	import std.bitmanip: bitfields;
2023 	mixin(bitfields!(
2024 		uint, "isLineBreak", 1,
2025 		uint, "isMandatoryBreak", 1,
2026 		uint, "isCharBreak", 1,
2027 		uint, "isWhite", 1,
2028 		uint, "isCursorPosition", 1,
2029 		uint, "isWordStart", 1,
2030 		uint, "isWordEnd", 1,
2031 		uint, "isSentenceBoundary", 1,
2032 		uint, "isSentenceStart", 1,
2033 		uint, "isSentenceEnd", 1,
2034 		uint, "backspaceDeletesCharacter", 1,
2035 		uint, "isExpandableSpace", 1,
2036 		uint, "isWordBoundary", 1,
2037 		uint, "", 19
2038 	));
2039 }
2040 
2041 struct PangoMap;
2042 
2043 struct PangoMapEntry;
2044 
2045 struct PangoMatrix
2046 {
2047 	/**
2048 	 * 1st component of the transformation matrix
2049 	 */
2050 	double xx;
2051 	/**
2052 	 * 2nd component of the transformation matrix
2053 	 */
2054 	double xy;
2055 	/**
2056 	 * 3rd component of the transformation matrix
2057 	 */
2058 	double yx;
2059 	/**
2060 	 * 4th component of the transformation matrix
2061 	 */
2062 	double yy;
2063 	/**
2064 	 * x translation
2065 	 */
2066 	double x0;
2067 	/**
2068 	 * y translation
2069 	 */
2070 	double y0;
2071 }
2072 
2073 /**
2074  * The #PangoRectangle structure represents a rectangle. It is frequently
2075  * used to represent the logical or ink extents of a single glyph or section
2076  * of text. (See, for instance, pango_font_get_glyph_extents())
2077  */
2078 struct PangoRectangle
2079 {
2080 	/**
2081 	 * X coordinate of the left side of the rectangle.
2082 	 */
2083 	int x;
2084 	/**
2085 	 * Y coordinate of the the top side of the rectangle.
2086 	 */
2087 	int y;
2088 	/**
2089 	 * width of the rectangle.
2090 	 */
2091 	int width;
2092 	/**
2093 	 * height of the rectangle.
2094 	 */
2095 	int height;
2096 }
2097 
2098 struct PangoRenderer
2099 {
2100 	GObject parentInstance;
2101 	PangoUnderline underline;
2102 	bool strikethrough;
2103 	int activeCount;
2104 	/**
2105 	 * the current transformation matrix for
2106 	 * the Renderer; may be %NULL, which should be treated the
2107 	 * same as the identity matrix.
2108 	 */
2109 	PangoMatrix* matrix;
2110 	PangoRendererPrivate* priv;
2111 }
2112 
2113 /**
2114  * Class structure for #PangoRenderer.
2115  *
2116  * Since: 1.8
2117  */
2118 struct PangoRendererClass
2119 {
2120 	GObjectClass parentClass;
2121 	/** */
2122 	extern(C) void function(PangoRenderer* renderer, PangoFont* font, PangoGlyphString* glyphs, int x, int y) drawGlyphs;
2123 	/** */
2124 	extern(C) void function(PangoRenderer* renderer, PangoRenderPart part, int x, int y, int width, int height) drawRectangle;
2125 	/** */
2126 	extern(C) void function(PangoRenderer* renderer, int x, int y, int width, int height) drawErrorUnderline;
2127 	/** */
2128 	extern(C) void function(PangoRenderer* renderer, PangoAttrShape* attr, int x, int y) drawShape;
2129 	/** */
2130 	extern(C) void function(PangoRenderer* renderer, PangoRenderPart part, double y1, double x11, double x21, double y2, double x12, double x22) drawTrapezoid;
2131 	/** */
2132 	extern(C) void function(PangoRenderer* renderer, PangoFont* font, PangoGlyph glyph, double x, double y) drawGlyph;
2133 	/** */
2134 	extern(C) void function(PangoRenderer* renderer, PangoRenderPart part) partChanged;
2135 	/** */
2136 	extern(C) void function(PangoRenderer* renderer) begin;
2137 	/** */
2138 	extern(C) void function(PangoRenderer* renderer) end;
2139 	/** */
2140 	extern(C) void function(PangoRenderer* renderer, PangoLayoutRun* run) prepareRun;
2141 	/** */
2142 	extern(C) void function(PangoRenderer* renderer, const(char)* text, PangoGlyphItem* glyphItem, int x, int y) drawGlyphItem;
2143 	/** */
2144 	extern(C) void function() PangoReserved2;
2145 	/** */
2146 	extern(C) void function() PangoReserved3;
2147 	/** */
2148 	extern(C) void function() PangoReserved4;
2149 }
2150 
2151 struct PangoRendererPrivate;
2152 
2153 struct PangoScriptIter;
2154 
2155 struct PangoTabArray;
2156 
2157 struct PangoCairoFontMap;
2158 
2159 /**
2160  * Type of a function that can duplicate user data for an attribute.
2161  *
2162  * Params:
2163  *     userData = user data to copy
2164  *
2165  * Returns: new copy of @user_data.
2166  */
2167 public alias extern(C) void* function(void* userData) PangoAttrDataCopyFunc;
2168 
2169 /**
2170  * Type of a function filtering a list of attributes.
2171  *
2172  * Params:
2173  *     attribute = a Pango attribute
2174  *     userData = user data passed to the function
2175  *
2176  * Returns: %TRUE if the attribute should be selected for
2177  *     filtering, %FALSE otherwise.
2178  */
2179 public alias extern(C) int function(PangoAttribute* attribute, void* userData) PangoAttrFilterFunc;
2180 
2181 /**
2182  * A callback function used by pango_fontset_foreach() when enumerating
2183  * the fonts in a fontset.
2184  *
2185  * Params:
2186  *     fontset = a #PangoFontset
2187  *     font = a font from @fontset
2188  *     userData = callback data
2189  *
2190  * Returns: if %TRUE, stop iteration and return immediately.
2191  *
2192  * Since: 1.4
2193  */
2194 public alias extern(C) int function(PangoFontset* fontset, PangoFont* font, void* userData) PangoFontsetForeachFunc;
2195 
2196 /**
2197  * Function type for rendering attributes of type %PANGO_ATTR_SHAPE
2198  * with Pango's Cairo renderer.
2199  *
2200  * Params:
2201  *     cr = a Cairo context with current point set to where the shape should
2202  *         be rendered
2203  *     attr = the %PANGO_ATTR_SHAPE to render
2204  *     doPath = whether only the shape path should be appended to current
2205  *         path of @cr and no filling/stroking done.  This will be set
2206  *         to %TRUE when called from pango_cairo_layout_path() and
2207  *         pango_cairo_layout_line_path() rendering functions.
2208  *     data = user data passed to pango_cairo_context_set_shape_renderer()
2209  */
2210 public alias extern(C) void function(cairo_t* cr, PangoAttrShape* attr, int doPath, void* data) PangoCairoShapeRendererFunc;
2211 
2212 const int PANGO_SCALE = 1024;
2213 const double PANGO_SCALE_XX_SMALL = 0.5787037037037;	/// The scale factor for three shrinking steps (1 / (1.2 * 1.2 * 1.2)).
2214 const double PANGO_SCALE_X_SMALL  = 0.6444444444444;	/// The scale factor for two shrinking steps (1 / (1.2 * 1.2)).
2215 const double PANGO_SCALE_SMALL    = 0.8333333333333;	/// The scale factor for one shrinking step (1 / 1.2).
2216 const double PANGO_SCALE_MEDIUM   = 1.0;	/// The scale factor for normal size (1.0).
2217 const double PANGO_SCALE_LARGE    = 1.2;	/// The scale factor for one magnification step (1.2)
2218 const double PANGO_SCALE_X_LARGE  = 1.4399999999999;	/// The scale factor for two magnification steps (1.2 * 1.2).
2219 const double PANGO_SCALE_XX_LARGE = 1.728;	/// The scale factor for three magnification steps (1.2 * 1.2 * 1.2).
2220