| /* | 
 |  * Copyright © 2009  Red Hat, Inc. | 
 |  * Copyright © 2011  Codethink Limited | 
 |  * Copyright © 2011,2012  Google, Inc. | 
 |  * | 
 |  *  This is part of HarfBuzz, a text shaping library. | 
 |  * | 
 |  * Permission is hereby granted, without written agreement and without | 
 |  * license or royalty fees, to use, copy, modify, and distribute this | 
 |  * software and its documentation for any purpose, provided that the | 
 |  * above copyright notice and the following two paragraphs appear in | 
 |  * all copies of this software. | 
 |  * | 
 |  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR | 
 |  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES | 
 |  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN | 
 |  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH | 
 |  * DAMAGE. | 
 |  * | 
 |  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, | 
 |  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND | 
 |  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS | 
 |  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO | 
 |  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. | 
 |  * | 
 |  * Red Hat Author(s): Behdad Esfahbod | 
 |  * Codethink Author(s): Ryan Lortie | 
 |  * Google Author(s): Behdad Esfahbod | 
 |  */ | 
 |  | 
 | #if !defined(HB_H_IN) && !defined(HB_NO_SINGLE_HEADER_ERROR) | 
 | #error "Include <hb.h> instead." | 
 | #endif | 
 |  | 
 | #ifndef HB_UNICODE_H | 
 | #define HB_UNICODE_H | 
 |  | 
 | #include "hb-common.h" | 
 |  | 
 | HB_BEGIN_DECLS | 
 |  | 
 |  | 
 | /** | 
 |  * HB_UNICODE_MAX: | 
 |  * | 
 |  * Maximum valid Unicode code point. | 
 |  * | 
 |  * Since: 1.9.0 | 
 |  **/ | 
 | #define HB_UNICODE_MAX 0x10FFFFu | 
 |  | 
 |  | 
 | /** | 
 |  * hb_unicode_general_category_t: | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_CONTROL:              [Cc] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_FORMAT:		      [Cf] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED:	      [Cn] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE:	      [Co] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_SURROGATE:	      [Cs] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER:     [Ll] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER:      [Lm] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER:	      [Lo] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER:     [Lt] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER:     [Lu] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK:	      [Mc] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK:	      [Me] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK:     [Mn] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER:	      [Nd] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER:	      [Nl] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER:	      [No] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION:  [Pc] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION:     [Pd] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION:    [Pe] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION:    [Pf] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION:  [Pi] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION:    [Po] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION:     [Ps] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL:      [Sc] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL:      [Sk] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL:	      [Sm] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL:	      [So] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR:	      [Zl] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR:  [Zp] | 
 |  * @HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR:      [Zs] | 
 |  * | 
 |  * Data type for the "General_Category" (gc) property from | 
 |  * the Unicode Character Database. | 
 |  **/ | 
 |  | 
 | /* Unicode Character Database property: General_Category (gc) */ | 
 | typedef enum | 
 | { | 
 |   HB_UNICODE_GENERAL_CATEGORY_CONTROL,			/* Cc */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_FORMAT,			/* Cf */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED,		/* Cn */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE,		/* Co */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_SURROGATE,		/* Cs */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER,		/* Ll */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER,		/* Lm */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER,		/* Lo */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER,		/* Lt */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER,		/* Lu */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK,		/* Mc */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK,		/* Me */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK,		/* Mn */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER,		/* Nd */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER,		/* Nl */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER,		/* No */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION,	/* Pc */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION,		/* Pd */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION,	/* Pe */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION,	/* Pf */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION,	/* Pi */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION,	/* Po */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION,		/* Ps */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL,		/* Sc */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL,		/* Sk */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL,		/* Sm */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL,		/* So */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR,		/* Zl */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR,	/* Zp */ | 
 |   HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR		/* Zs */ | 
 | } hb_unicode_general_category_t; | 
 |  | 
 | /** | 
 |  * hb_unicode_combining_class_t: | 
 |  * @HB_UNICODE_COMBINING_CLASS_NOT_REORDERED: Spacing and enclosing marks; also many vowel and consonant signs, even if nonspacing | 
 |  * @HB_UNICODE_COMBINING_CLASS_OVERLAY: Marks which overlay a base letter or symbol | 
 |  * @HB_UNICODE_COMBINING_CLASS_NUKTA: Diacritic nukta marks in Brahmi-derived scripts | 
 |  * @HB_UNICODE_COMBINING_CLASS_KANA_VOICING: Hiragana/Katakana voicing marks | 
 |  * @HB_UNICODE_COMBINING_CLASS_VIRAMA: Viramas | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC10: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC11: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC12: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC13: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC14: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC15: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC16: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC17: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC18: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC19: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC20: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC21: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC22: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC23: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC24: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC25: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC26: [Hebrew] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC27: [Arabic] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC28: [Arabic] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC29: [Arabic] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC30: [Arabic] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC31: [Arabic] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC32: [Arabic] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC33: [Arabic] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC34: [Arabic] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC35: [Arabic] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC36: [Syriac] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC84: [Telugu] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC91: [Telugu] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC103: [Thai] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC107: [Thai] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC118: [Lao] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC122: [Lao] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC129: [Tibetan] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC130: [Tibetan] | 
 |  * @HB_UNICODE_COMBINING_CLASS_CCC133: [Tibetan] | 
 |  * @HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT: Marks attached at the bottom left | 
 |  * @HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW: Marks attached directly below | 
 |  * @HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE: Marks attached directly above | 
 |  * @HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT: Marks attached at the top right | 
 |  * @HB_UNICODE_COMBINING_CLASS_BELOW_LEFT: Distinct marks at the bottom left | 
 |  * @HB_UNICODE_COMBINING_CLASS_BELOW: Distinct marks directly below | 
 |  * @HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT: Distinct marks at the bottom right | 
 |  * @HB_UNICODE_COMBINING_CLASS_LEFT: Distinct marks to the left | 
 |  * @HB_UNICODE_COMBINING_CLASS_RIGHT: Distinct marks to the right | 
 |  * @HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT: Distinct marks at the top left | 
 |  * @HB_UNICODE_COMBINING_CLASS_ABOVE: Distinct marks directly above | 
 |  * @HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT: Distinct marks at the top right | 
 |  * @HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW: Distinct marks subtending two bases | 
 |  * @HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE: Distinct marks extending above two bases | 
 |  * @HB_UNICODE_COMBINING_CLASS_IOTA_SUBSCRIPT: Greek iota subscript only | 
 |  * @HB_UNICODE_COMBINING_CLASS_INVALID: Invalid combining class | 
 |  * | 
 |  * Data type for the Canonical_Combining_Class (ccc) property | 
 |  * from the Unicode Character Database. | 
 |  * | 
 |  * <note>Note: newer versions of Unicode may add new values. | 
 |  * Client programs should be ready to handle any value in the 0..254 range | 
 |  * being returned from hb_unicode_combining_class().</note> | 
 |  * | 
 |  **/ | 
 | typedef enum | 
 | { | 
 |   HB_UNICODE_COMBINING_CLASS_NOT_REORDERED	= 0, | 
 |   HB_UNICODE_COMBINING_CLASS_OVERLAY		= 1, | 
 |   HB_UNICODE_COMBINING_CLASS_NUKTA		= 7, | 
 |   HB_UNICODE_COMBINING_CLASS_KANA_VOICING	= 8, | 
 |   HB_UNICODE_COMBINING_CLASS_VIRAMA		= 9, | 
 |  | 
 |   /* Hebrew */ | 
 |   HB_UNICODE_COMBINING_CLASS_CCC10	=  10, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC11	=  11, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC12	=  12, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC13	=  13, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC14	=  14, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC15	=  15, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC16	=  16, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC17	=  17, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC18	=  18, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC19	=  19, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC20	=  20, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC21	=  21, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC22	=  22, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC23	=  23, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC24	=  24, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC25	=  25, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC26	=  26, | 
 |  | 
 |   /* Arabic */ | 
 |   HB_UNICODE_COMBINING_CLASS_CCC27	=  27, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC28	=  28, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC29	=  29, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC30	=  30, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC31	=  31, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC32	=  32, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC33	=  33, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC34	=  34, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC35	=  35, | 
 |  | 
 |   /* Syriac */ | 
 |   HB_UNICODE_COMBINING_CLASS_CCC36	=  36, | 
 |  | 
 |   /* Telugu */ | 
 |   HB_UNICODE_COMBINING_CLASS_CCC84	=  84, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC91	=  91, | 
 |  | 
 |   /* Thai */ | 
 |   HB_UNICODE_COMBINING_CLASS_CCC103	= 103, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC107	= 107, | 
 |  | 
 |   /* Lao */ | 
 |   HB_UNICODE_COMBINING_CLASS_CCC118	= 118, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC122	= 122, | 
 |  | 
 |   /* Tibetan */ | 
 |   HB_UNICODE_COMBINING_CLASS_CCC129	= 129, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC130	= 130, | 
 |   HB_UNICODE_COMBINING_CLASS_CCC133	= 132, | 
 |  | 
 |  | 
 |   HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT	= 200, | 
 |   HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW		= 202, | 
 |   HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE		= 214, | 
 |   HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT	= 216, | 
 |   HB_UNICODE_COMBINING_CLASS_BELOW_LEFT			= 218, | 
 |   HB_UNICODE_COMBINING_CLASS_BELOW			= 220, | 
 |   HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT		= 222, | 
 |   HB_UNICODE_COMBINING_CLASS_LEFT			= 224, | 
 |   HB_UNICODE_COMBINING_CLASS_RIGHT			= 226, | 
 |   HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT			= 228, | 
 |   HB_UNICODE_COMBINING_CLASS_ABOVE			= 230, | 
 |   HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT		= 232, | 
 |   HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW		= 233, | 
 |   HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE		= 234, | 
 |  | 
 |   HB_UNICODE_COMBINING_CLASS_IOTA_SUBSCRIPT		= 240, | 
 |  | 
 |   HB_UNICODE_COMBINING_CLASS_INVALID	= 255 | 
 | } hb_unicode_combining_class_t; | 
 |  | 
 |  | 
 | /* | 
 |  * hb_unicode_funcs_t | 
 |  */ | 
 |  | 
 | /** | 
 |  * hb_unicode_funcs_t: | 
 |  * | 
 |  * Data type containing a set of virtual methods used for | 
 |  * accessing various Unicode character properties. | 
 |  * | 
 |  * HarfBuzz provides a default function for each of the | 
 |  * methods in #hb_unicode_funcs_t. Client programs can implement | 
 |  * their own replacements for the individual Unicode functions, as | 
 |  * needed, and replace the default by calling the setter for a | 
 |  * method. | 
 |  **/ | 
 | typedef struct hb_unicode_funcs_t hb_unicode_funcs_t; | 
 |  | 
 |  | 
 | /* | 
 |  * just give me the best implementation you've got there. | 
 |  */ | 
 | HB_EXTERN hb_unicode_funcs_t * | 
 | hb_unicode_funcs_get_default (void); | 
 |  | 
 |  | 
 | HB_EXTERN hb_unicode_funcs_t * | 
 | hb_unicode_funcs_create (hb_unicode_funcs_t *parent); | 
 |  | 
 | HB_EXTERN hb_unicode_funcs_t * | 
 | hb_unicode_funcs_get_empty (void); | 
 |  | 
 | HB_EXTERN hb_unicode_funcs_t * | 
 | hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs); | 
 |  | 
 | HB_EXTERN void | 
 | hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs); | 
 |  | 
 | HB_EXTERN hb_bool_t | 
 | hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs, | 
 | 				hb_user_data_key_t *key, | 
 | 				void *              data, | 
 | 				hb_destroy_func_t   destroy, | 
 | 				hb_bool_t           replace); | 
 |  | 
 |  | 
 | HB_EXTERN void * | 
 | hb_unicode_funcs_get_user_data (hb_unicode_funcs_t *ufuncs, | 
 | 				hb_user_data_key_t *key); | 
 |  | 
 |  | 
 | HB_EXTERN void | 
 | hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs); | 
 |  | 
 | HB_EXTERN hb_bool_t | 
 | hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs); | 
 |  | 
 | HB_EXTERN hb_unicode_funcs_t * | 
 | hb_unicode_funcs_get_parent (hb_unicode_funcs_t *ufuncs); | 
 |  | 
 |  | 
 | /* | 
 |  * funcs | 
 |  */ | 
 |  | 
 | /* typedefs */ | 
 |  | 
 | /** | 
 |  * hb_unicode_combining_class_func_t: | 
 |  * @ufuncs: A Unicode-functions structure | 
 |  * @unicode: The code point to query | 
 |  * @user_data: User data pointer passed by the caller | 
 |  * | 
 |  * A virtual method for the #hb_unicode_funcs_t structure. | 
 |  * | 
 |  * This method should retrieve the Canonical Combining Class (ccc) | 
 |  * property for a specified Unicode code point.  | 
 |  * | 
 |  * Return value: The #hb_unicode_combining_class_t of @unicode | 
 |  *  | 
 |  **/ | 
 | typedef hb_unicode_combining_class_t	(*hb_unicode_combining_class_func_t)	(hb_unicode_funcs_t *ufuncs, | 
 | 										 hb_codepoint_t      unicode, | 
 | 										 void               *user_data); | 
 |  | 
 | /** | 
 |  * hb_unicode_general_category_func_t: | 
 |  * @ufuncs: A Unicode-functions structure | 
 |  * @unicode: The code point to query | 
 |  * @user_data: User data pointer passed by the caller | 
 |  * | 
 |  * A virtual method for the #hb_unicode_funcs_t structure. | 
 |  * | 
 |  * This method should retrieve the General Category property for | 
 |  * a specified Unicode code point. | 
 |  *  | 
 |  * Return value: The #hb_unicode_general_category_t of @unicode | 
 |  * | 
 |  **/ | 
 | typedef hb_unicode_general_category_t	(*hb_unicode_general_category_func_t)	(hb_unicode_funcs_t *ufuncs, | 
 | 										 hb_codepoint_t      unicode, | 
 | 										 void               *user_data); | 
 |  | 
 | /** | 
 |  * hb_unicode_mirroring_func_t: | 
 |  * @ufuncs: A Unicode-functions structure | 
 |  * @unicode: The code point to query | 
 |  * @user_data: User data pointer passed by the caller | 
 |  * | 
 |  * A virtual method for the #hb_unicode_funcs_t structure. | 
 |  * | 
 |  * This method should retrieve the Bi-Directional Mirroring Glyph | 
 |  * code point for a specified Unicode code point. | 
 |  * | 
 |  * <note>Note: If a code point does not have a specified | 
 |  * Bi-Directional Mirroring Glyph defined, the method should | 
 |  * return the original code point.</note> | 
 |  *  | 
 |  * Return value: The #hb_codepoint_t of the Mirroring Glyph for @unicode | 
 |  * | 
 |  **/ | 
 | typedef hb_codepoint_t			(*hb_unicode_mirroring_func_t)		(hb_unicode_funcs_t *ufuncs, | 
 | 										 hb_codepoint_t      unicode, | 
 | 										 void               *user_data); | 
 |  | 
 | /** | 
 |  * hb_unicode_script_func_t: | 
 |  * @ufuncs: A Unicode-functions structure | 
 |  * @unicode: The code point to query | 
 |  * @user_data: User data pointer passed by the caller | 
 |  * | 
 |  * A virtual method for the #hb_unicode_funcs_t structure. | 
 |  * | 
 |  * This method should retrieve the Script property for a  | 
 |  * specified Unicode code point. | 
 |  * | 
 |  * Return value: The #hb_script_t of @unicode | 
 |  *  | 
 |  **/ | 
 | typedef hb_script_t			(*hb_unicode_script_func_t)		(hb_unicode_funcs_t *ufuncs, | 
 | 										 hb_codepoint_t      unicode, | 
 | 										 void               *user_data); | 
 |  | 
 | /** | 
 |  * hb_unicode_compose_func_t: | 
 |  * @ufuncs: A Unicode-functions structure | 
 |  * @a: The first code point to compose | 
 |  * @b: The second code point to compose | 
 |  * @ab: (out): The composed code point | 
 |  * @user_data: user data pointer passed by the caller | 
 |  * | 
 |  * A virtual method for the #hb_unicode_funcs_t structure. | 
 |  * | 
 |  * This method should compose a sequence of two input Unicode code | 
 |  * points by canonical equivalence, returning the composed code | 
 |  * point in a #hb_codepoint_t output parameter (if successful). | 
 |  * The method must return an #hb_bool_t indicating the success | 
 |  * of the composition. | 
 |  *  | 
 |  * Return value: %true is @a,@b composed, %false otherwise | 
 |  * | 
 |  **/ | 
 | typedef hb_bool_t			(*hb_unicode_compose_func_t)		(hb_unicode_funcs_t *ufuncs, | 
 | 										 hb_codepoint_t      a, | 
 | 										 hb_codepoint_t      b, | 
 | 										 hb_codepoint_t     *ab, | 
 | 										 void               *user_data); | 
 |  | 
 | /** | 
 |  * hb_unicode_decompose_func_t: | 
 |  * @ufuncs: A Unicode-functions structure | 
 |  * @ab: The code point to decompose | 
 |  * @a: (out): The first decomposed code point | 
 |  * @b: (out): The second decomposed code point | 
 |  * @user_data: user data pointer passed by the caller | 
 |  * | 
 |  * A virtual method for the #hb_unicode_funcs_t structure. | 
 |  * | 
 |  * This method should decompose an input Unicode code point, | 
 |  * returning the two decomposed code points in #hb_codepoint_t | 
 |  * output parameters (if successful). The method must return an | 
 |  * #hb_bool_t indicating the success of the composition. | 
 |  *  | 
 |  * Return value: %true if @ab decomposed, %false otherwise | 
 |  * | 
 |  **/ | 
 | typedef hb_bool_t			(*hb_unicode_decompose_func_t)		(hb_unicode_funcs_t *ufuncs, | 
 | 										 hb_codepoint_t      ab, | 
 | 										 hb_codepoint_t     *a, | 
 | 										 hb_codepoint_t     *b, | 
 | 										 void               *user_data); | 
 |  | 
 | /* func setters */ | 
 |  | 
 | /** | 
 |  * hb_unicode_funcs_set_combining_class_func: | 
 |  * @ufuncs: A Unicode-functions structure | 
 |  * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign | 
 |  * @user_data: Data to pass to @func | 
 |  * @destroy: (nullable): The function to call when @user_data is not needed anymore | 
 |  * | 
 |  * Sets the implementation function for #hb_unicode_combining_class_func_t. | 
 |  * | 
 |  * Since: 0.9.2 | 
 |  **/ | 
 | HB_EXTERN void | 
 | hb_unicode_funcs_set_combining_class_func (hb_unicode_funcs_t *ufuncs, | 
 | 					   hb_unicode_combining_class_func_t func, | 
 | 					   void *user_data, hb_destroy_func_t destroy); | 
 |  | 
 | /** | 
 |  * hb_unicode_funcs_set_general_category_func: | 
 |  * @ufuncs: A Unicode-functions structure | 
 |  * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign | 
 |  * @user_data: Data to pass to @func | 
 |  * @destroy: (nullable): The function to call when @user_data is not needed anymore | 
 |  * | 
 |  * Sets the implementation function for #hb_unicode_general_category_func_t. | 
 |  * | 
 |  * Since: 0.9.2 | 
 |  **/ | 
 | HB_EXTERN void | 
 | hb_unicode_funcs_set_general_category_func (hb_unicode_funcs_t *ufuncs, | 
 | 					    hb_unicode_general_category_func_t func, | 
 | 					    void *user_data, hb_destroy_func_t destroy); | 
 |  | 
 | /** | 
 |  * hb_unicode_funcs_set_mirroring_func: | 
 |  * @ufuncs: A Unicode-functions structure | 
 |  * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign | 
 |  * @user_data: Data to pass to @func | 
 |  * @destroy: (nullable): The function to call when @user_data is not needed anymore | 
 |  * | 
 |  * Sets the implementation function for #hb_unicode_mirroring_func_t. | 
 |  * | 
 |  * Since: 0.9.2 | 
 |  **/ | 
 | HB_EXTERN void | 
 | hb_unicode_funcs_set_mirroring_func (hb_unicode_funcs_t *ufuncs, | 
 | 				     hb_unicode_mirroring_func_t func, | 
 | 				     void *user_data, hb_destroy_func_t destroy); | 
 |  | 
 | /** | 
 |  * hb_unicode_funcs_set_script_func: | 
 |  * @ufuncs: A Unicode-functions structure | 
 |  * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign | 
 |  * @user_data: Data to pass to @func | 
 |  * @destroy: (nullable): The function to call when @user_data is not needed anymore | 
 |  * | 
 |  * Sets the implementation function for #hb_unicode_script_func_t. | 
 |  * | 
 |  * Since: 0.9.2 | 
 |  **/ | 
 | HB_EXTERN void | 
 | hb_unicode_funcs_set_script_func (hb_unicode_funcs_t *ufuncs, | 
 | 				  hb_unicode_script_func_t func, | 
 | 				  void *user_data, hb_destroy_func_t destroy); | 
 |  | 
 | /** | 
 |  * hb_unicode_funcs_set_compose_func: | 
 |  * @ufuncs: A Unicode-functions structure | 
 |  * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign | 
 |  * @user_data: Data to pass to @func | 
 |  * @destroy: (nullable): The function to call when @user_data is not needed anymore | 
 |  * | 
 |  * Sets the implementation function for #hb_unicode_compose_func_t. | 
 |  * | 
 |  * Since: 0.9.2 | 
 |  **/ | 
 | HB_EXTERN void | 
 | hb_unicode_funcs_set_compose_func (hb_unicode_funcs_t *ufuncs, | 
 | 				   hb_unicode_compose_func_t func, | 
 | 				   void *user_data, hb_destroy_func_t destroy); | 
 |  | 
 | /** | 
 |  * hb_unicode_funcs_set_decompose_func: | 
 |  * @ufuncs: A Unicode-functions structure | 
 |  * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign | 
 |  * @user_data: Data to pass to @func | 
 |  * @destroy: (nullable): The function to call when @user_data is not needed anymore | 
 |  * | 
 |  * Sets the implementation function for #hb_unicode_decompose_func_t. | 
 |  * | 
 |  * Since: 0.9.2 | 
 |  **/ | 
 | HB_EXTERN void | 
 | hb_unicode_funcs_set_decompose_func (hb_unicode_funcs_t *ufuncs, | 
 | 				     hb_unicode_decompose_func_t func, | 
 | 				     void *user_data, hb_destroy_func_t destroy); | 
 |  | 
 | /* accessors */ | 
 |  | 
 | /** | 
 |  * hb_unicode_combining_class: | 
 |  * @ufuncs: The Unicode-functions structure | 
 |  * @unicode: The code point to query | 
 |  * | 
 |  * Retrieves the Canonical Combining Class (ccc) property | 
 |  * of code point @unicode. | 
 |  * | 
 |  * Return value: The #hb_unicode_combining_class_t of @unicode | 
 |  * | 
 |  * Since: 0.9.2 | 
 |  **/ | 
 | HB_EXTERN hb_unicode_combining_class_t | 
 | hb_unicode_combining_class (hb_unicode_funcs_t *ufuncs, | 
 | 			    hb_codepoint_t unicode); | 
 |  | 
 | /** | 
 |  * hb_unicode_general_category: | 
 |  * @ufuncs: The Unicode-functions structure | 
 |  * @unicode: The code point to query | 
 |  * | 
 |  * Retrieves the General Category (gc) property | 
 |  * of code point @unicode. | 
 |  * | 
 |  * Return value: The #hb_unicode_general_category_t of @unicode | 
 |  * | 
 |  * Since: 0.9.2 | 
 |  **/ | 
 | HB_EXTERN hb_unicode_general_category_t | 
 | hb_unicode_general_category (hb_unicode_funcs_t *ufuncs, | 
 | 			     hb_codepoint_t unicode); | 
 |  | 
 | /** | 
 |  * hb_unicode_mirroring: | 
 |  * @ufuncs: The Unicode-functions structure | 
 |  * @unicode: The code point to query | 
 |  * | 
 |  * Retrieves the Bi-directional Mirroring Glyph code | 
 |  * point defined for code point @unicode. | 
 |  * | 
 |  * Return value: The #hb_codepoint_t of the Mirroring Glyph for @unicode | 
 |  * | 
 |  * Since: 0.9.2 | 
 |  **/ | 
 | HB_EXTERN hb_codepoint_t | 
 | hb_unicode_mirroring (hb_unicode_funcs_t *ufuncs, | 
 | 		      hb_codepoint_t unicode); | 
 |  | 
 | /** | 
 |  * hb_unicode_script: | 
 |  * @ufuncs: The Unicode-functions structure | 
 |  * @unicode: The code point to query | 
 |  * | 
 |  * Retrieves the #hb_script_t script to which code | 
 |  * point @unicode belongs. | 
 |  * | 
 |  * Return value: The #hb_script_t of @unicode | 
 |  * | 
 |  * Since: 0.9.2 | 
 |  **/ | 
 | HB_EXTERN hb_script_t | 
 | hb_unicode_script (hb_unicode_funcs_t *ufuncs, | 
 | 		   hb_codepoint_t unicode); | 
 |  | 
 | HB_EXTERN hb_bool_t | 
 | hb_unicode_compose (hb_unicode_funcs_t *ufuncs, | 
 | 		    hb_codepoint_t      a, | 
 | 		    hb_codepoint_t      b, | 
 | 		    hb_codepoint_t     *ab); | 
 |  | 
 | HB_EXTERN hb_bool_t | 
 | hb_unicode_decompose (hb_unicode_funcs_t *ufuncs, | 
 | 		      hb_codepoint_t      ab, | 
 | 		      hb_codepoint_t     *a, | 
 | 		      hb_codepoint_t     *b); | 
 |  | 
 | HB_END_DECLS | 
 |  | 
 | #endif /* HB_UNICODE_H */ |