tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

hb-unicode.h (22980B)


      1 /*
      2 * Copyright © 2009  Red Hat, Inc.
      3 * Copyright © 2011  Codethink Limited
      4 * Copyright © 2011,2012  Google, Inc.
      5 *
      6 *  This is part of HarfBuzz, a text shaping library.
      7 *
      8 * Permission is hereby granted, without written agreement and without
      9 * license or royalty fees, to use, copy, modify, and distribute this
     10 * software and its documentation for any purpose, provided that the
     11 * above copyright notice and the following two paragraphs appear in
     12 * all copies of this software.
     13 *
     14 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
     15 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
     16 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
     17 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
     18 * DAMAGE.
     19 *
     20 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
     21 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
     22 * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
     23 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
     24 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
     25 *
     26 * Red Hat Author(s): Behdad Esfahbod
     27 * Codethink Author(s): Ryan Lortie
     28 * Google Author(s): Behdad Esfahbod
     29 */
     30 
     31 #if !defined(HB_H_IN) && !defined(HB_NO_SINGLE_HEADER_ERROR)
     32 #error "Include <hb.h> instead."
     33 #endif
     34 
     35 #ifndef HB_UNICODE_H
     36 #define HB_UNICODE_H
     37 
     38 #include "hb-common.h"
     39 
     40 HB_BEGIN_DECLS
     41 
     42 
     43 /**
     44 * HB_UNICODE_MAX:
     45 *
     46 * Maximum valid Unicode code point.
     47 *
     48 * Since: 1.9.0
     49 **/
     50 #define HB_UNICODE_MAX 0x10FFFFu
     51 
     52 
     53 /**
     54 * hb_unicode_general_category_t:
     55 * @HB_UNICODE_GENERAL_CATEGORY_CONTROL:              [Cc]
     56 * @HB_UNICODE_GENERAL_CATEGORY_FORMAT:		      [Cf]
     57 * @HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED:	      [Cn]
     58 * @HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE:	      [Co]
     59 * @HB_UNICODE_GENERAL_CATEGORY_SURROGATE:	      [Cs]
     60 * @HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER:     [Ll]
     61 * @HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER:      [Lm]
     62 * @HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER:	      [Lo]
     63 * @HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER:     [Lt]
     64 * @HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER:     [Lu]
     65 * @HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK:	      [Mc]
     66 * @HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK:	      [Me]
     67 * @HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK:     [Mn]
     68 * @HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER:	      [Nd]
     69 * @HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER:	      [Nl]
     70 * @HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER:	      [No]
     71 * @HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION:  [Pc]
     72 * @HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION:     [Pd]
     73 * @HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION:    [Pe]
     74 * @HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION:    [Pf]
     75 * @HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION:  [Pi]
     76 * @HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION:    [Po]
     77 * @HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION:     [Ps]
     78 * @HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL:      [Sc]
     79 * @HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL:      [Sk]
     80 * @HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL:	      [Sm]
     81 * @HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL:	      [So]
     82 * @HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR:	      [Zl]
     83 * @HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR:  [Zp]
     84 * @HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR:      [Zs]
     85 *
     86 * Data type for the "General_Category" (gc) property from
     87 * the Unicode Character Database.
     88 **/
     89 
     90 /* Unicode Character Database property: General_Category (gc) */
     91 typedef enum
     92 {
     93  HB_UNICODE_GENERAL_CATEGORY_CONTROL,			/* Cc */
     94  HB_UNICODE_GENERAL_CATEGORY_FORMAT,			/* Cf */
     95  HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED,		/* Cn */
     96  HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE,		/* Co */
     97  HB_UNICODE_GENERAL_CATEGORY_SURROGATE,		/* Cs */
     98  HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER,		/* Ll */
     99  HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER,		/* Lm */
    100  HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER,		/* Lo */
    101  HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER,		/* Lt */
    102  HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER,		/* Lu */
    103  HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK,		/* Mc */
    104  HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK,		/* Me */
    105  HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK,		/* Mn */
    106  HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER,		/* Nd */
    107  HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER,		/* Nl */
    108  HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER,		/* No */
    109  HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION,	/* Pc */
    110  HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION,		/* Pd */
    111  HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION,	/* Pe */
    112  HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION,	/* Pf */
    113  HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION,	/* Pi */
    114  HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION,	/* Po */
    115  HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION,		/* Ps */
    116  HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL,		/* Sc */
    117  HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL,		/* Sk */
    118  HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL,		/* Sm */
    119  HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL,		/* So */
    120  HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR,		/* Zl */
    121  HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR,	/* Zp */
    122  HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR		/* Zs */
    123 } hb_unicode_general_category_t;
    124 
    125 /**
    126 * hb_unicode_combining_class_t:
    127 * @HB_UNICODE_COMBINING_CLASS_NOT_REORDERED: Spacing and enclosing marks; also many vowel and consonant signs, even if nonspacing
    128 * @HB_UNICODE_COMBINING_CLASS_OVERLAY: Marks which overlay a base letter or symbol
    129 * @HB_UNICODE_COMBINING_CLASS_NUKTA: Diacritic nukta marks in Brahmi-derived scripts
    130 * @HB_UNICODE_COMBINING_CLASS_KANA_VOICING: Hiragana/Katakana voicing marks
    131 * @HB_UNICODE_COMBINING_CLASS_VIRAMA: Viramas
    132 * @HB_UNICODE_COMBINING_CLASS_CCC10: [Hebrew]
    133 * @HB_UNICODE_COMBINING_CLASS_CCC11: [Hebrew]
    134 * @HB_UNICODE_COMBINING_CLASS_CCC12: [Hebrew]
    135 * @HB_UNICODE_COMBINING_CLASS_CCC13: [Hebrew]
    136 * @HB_UNICODE_COMBINING_CLASS_CCC14: [Hebrew]
    137 * @HB_UNICODE_COMBINING_CLASS_CCC15: [Hebrew]
    138 * @HB_UNICODE_COMBINING_CLASS_CCC16: [Hebrew]
    139 * @HB_UNICODE_COMBINING_CLASS_CCC17: [Hebrew]
    140 * @HB_UNICODE_COMBINING_CLASS_CCC18: [Hebrew]
    141 * @HB_UNICODE_COMBINING_CLASS_CCC19: [Hebrew]
    142 * @HB_UNICODE_COMBINING_CLASS_CCC20: [Hebrew]
    143 * @HB_UNICODE_COMBINING_CLASS_CCC21: [Hebrew]
    144 * @HB_UNICODE_COMBINING_CLASS_CCC22: [Hebrew]
    145 * @HB_UNICODE_COMBINING_CLASS_CCC23: [Hebrew]
    146 * @HB_UNICODE_COMBINING_CLASS_CCC24: [Hebrew]
    147 * @HB_UNICODE_COMBINING_CLASS_CCC25: [Hebrew]
    148 * @HB_UNICODE_COMBINING_CLASS_CCC26: [Hebrew]
    149 * @HB_UNICODE_COMBINING_CLASS_CCC27: [Arabic]
    150 * @HB_UNICODE_COMBINING_CLASS_CCC28: [Arabic]
    151 * @HB_UNICODE_COMBINING_CLASS_CCC29: [Arabic]
    152 * @HB_UNICODE_COMBINING_CLASS_CCC30: [Arabic]
    153 * @HB_UNICODE_COMBINING_CLASS_CCC31: [Arabic]
    154 * @HB_UNICODE_COMBINING_CLASS_CCC32: [Arabic]
    155 * @HB_UNICODE_COMBINING_CLASS_CCC33: [Arabic]
    156 * @HB_UNICODE_COMBINING_CLASS_CCC34: [Arabic]
    157 * @HB_UNICODE_COMBINING_CLASS_CCC35: [Arabic]
    158 * @HB_UNICODE_COMBINING_CLASS_CCC36: [Syriac]
    159 * @HB_UNICODE_COMBINING_CLASS_CCC84: [Telugu]
    160 * @HB_UNICODE_COMBINING_CLASS_CCC91: [Telugu]
    161 * @HB_UNICODE_COMBINING_CLASS_CCC103: [Thai]
    162 * @HB_UNICODE_COMBINING_CLASS_CCC107: [Thai]
    163 * @HB_UNICODE_COMBINING_CLASS_CCC118: [Lao]
    164 * @HB_UNICODE_COMBINING_CLASS_CCC122: [Lao]
    165 * @HB_UNICODE_COMBINING_CLASS_CCC129: [Tibetan]
    166 * @HB_UNICODE_COMBINING_CLASS_CCC130: [Tibetan]
    167 * @HB_UNICODE_COMBINING_CLASS_CCC132: [Tibetan] Since: 7.2.0
    168 * @HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT: Marks attached at the bottom left
    169 * @HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW: Marks attached directly below
    170 * @HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE: Marks attached directly above
    171 * @HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT: Marks attached at the top right
    172 * @HB_UNICODE_COMBINING_CLASS_BELOW_LEFT: Distinct marks at the bottom left
    173 * @HB_UNICODE_COMBINING_CLASS_BELOW: Distinct marks directly below
    174 * @HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT: Distinct marks at the bottom right
    175 * @HB_UNICODE_COMBINING_CLASS_LEFT: Distinct marks to the left
    176 * @HB_UNICODE_COMBINING_CLASS_RIGHT: Distinct marks to the right
    177 * @HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT: Distinct marks at the top left
    178 * @HB_UNICODE_COMBINING_CLASS_ABOVE: Distinct marks directly above
    179 * @HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT: Distinct marks at the top right
    180 * @HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW: Distinct marks subtending two bases
    181 * @HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE: Distinct marks extending above two bases
    182 * @HB_UNICODE_COMBINING_CLASS_IOTA_SUBSCRIPT: Greek iota subscript only
    183 * @HB_UNICODE_COMBINING_CLASS_INVALID: Invalid combining class
    184 *
    185 * Data type for the Canonical_Combining_Class (ccc) property
    186 * from the Unicode Character Database.
    187 *
    188 * <note>Note: newer versions of Unicode may add new values.
    189 * Client programs should be ready to handle any value in the 0..254 range
    190 * being returned from hb_unicode_combining_class().</note>
    191 *
    192 **/
    193 typedef enum
    194 {
    195  HB_UNICODE_COMBINING_CLASS_NOT_REORDERED	= 0,
    196  HB_UNICODE_COMBINING_CLASS_OVERLAY		= 1,
    197  HB_UNICODE_COMBINING_CLASS_NUKTA		= 7,
    198  HB_UNICODE_COMBINING_CLASS_KANA_VOICING	= 8,
    199  HB_UNICODE_COMBINING_CLASS_VIRAMA		= 9,
    200 
    201  /* Hebrew */
    202  HB_UNICODE_COMBINING_CLASS_CCC10	=  10,
    203  HB_UNICODE_COMBINING_CLASS_CCC11	=  11,
    204  HB_UNICODE_COMBINING_CLASS_CCC12	=  12,
    205  HB_UNICODE_COMBINING_CLASS_CCC13	=  13,
    206  HB_UNICODE_COMBINING_CLASS_CCC14	=  14,
    207  HB_UNICODE_COMBINING_CLASS_CCC15	=  15,
    208  HB_UNICODE_COMBINING_CLASS_CCC16	=  16,
    209  HB_UNICODE_COMBINING_CLASS_CCC17	=  17,
    210  HB_UNICODE_COMBINING_CLASS_CCC18	=  18,
    211  HB_UNICODE_COMBINING_CLASS_CCC19	=  19,
    212  HB_UNICODE_COMBINING_CLASS_CCC20	=  20,
    213  HB_UNICODE_COMBINING_CLASS_CCC21	=  21,
    214  HB_UNICODE_COMBINING_CLASS_CCC22	=  22,
    215  HB_UNICODE_COMBINING_CLASS_CCC23	=  23,
    216  HB_UNICODE_COMBINING_CLASS_CCC24	=  24,
    217  HB_UNICODE_COMBINING_CLASS_CCC25	=  25,
    218  HB_UNICODE_COMBINING_CLASS_CCC26	=  26,
    219 
    220  /* Arabic */
    221  HB_UNICODE_COMBINING_CLASS_CCC27	=  27,
    222  HB_UNICODE_COMBINING_CLASS_CCC28	=  28,
    223  HB_UNICODE_COMBINING_CLASS_CCC29	=  29,
    224  HB_UNICODE_COMBINING_CLASS_CCC30	=  30,
    225  HB_UNICODE_COMBINING_CLASS_CCC31	=  31,
    226  HB_UNICODE_COMBINING_CLASS_CCC32	=  32,
    227  HB_UNICODE_COMBINING_CLASS_CCC33	=  33,
    228  HB_UNICODE_COMBINING_CLASS_CCC34	=  34,
    229  HB_UNICODE_COMBINING_CLASS_CCC35	=  35,
    230 
    231  /* Syriac */
    232  HB_UNICODE_COMBINING_CLASS_CCC36	=  36,
    233 
    234  /* Telugu */
    235  HB_UNICODE_COMBINING_CLASS_CCC84	=  84,
    236  HB_UNICODE_COMBINING_CLASS_CCC91	=  91,
    237 
    238  /* Thai */
    239  HB_UNICODE_COMBINING_CLASS_CCC103	= 103,
    240  HB_UNICODE_COMBINING_CLASS_CCC107	= 107,
    241 
    242  /* Lao */
    243  HB_UNICODE_COMBINING_CLASS_CCC118	= 118,
    244  HB_UNICODE_COMBINING_CLASS_CCC122	= 122,
    245 
    246  /* Tibetan */
    247  HB_UNICODE_COMBINING_CLASS_CCC129	= 129,
    248  HB_UNICODE_COMBINING_CLASS_CCC130	= 130,
    249  HB_UNICODE_COMBINING_CLASS_CCC132	= 132,
    250 
    251 
    252  HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT	= 200,
    253  HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW		= 202,
    254  HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE		= 214,
    255  HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT	= 216,
    256  HB_UNICODE_COMBINING_CLASS_BELOW_LEFT			= 218,
    257  HB_UNICODE_COMBINING_CLASS_BELOW			= 220,
    258  HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT		= 222,
    259  HB_UNICODE_COMBINING_CLASS_LEFT			= 224,
    260  HB_UNICODE_COMBINING_CLASS_RIGHT			= 226,
    261  HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT			= 228,
    262  HB_UNICODE_COMBINING_CLASS_ABOVE			= 230,
    263  HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT		= 232,
    264  HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW		= 233,
    265  HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE		= 234,
    266 
    267  HB_UNICODE_COMBINING_CLASS_IOTA_SUBSCRIPT		= 240,
    268 
    269  HB_UNICODE_COMBINING_CLASS_INVALID	= 255
    270 } hb_unicode_combining_class_t;
    271 
    272 
    273 /*
    274 * hb_unicode_funcs_t
    275 */
    276 
    277 /**
    278 * hb_unicode_funcs_t:
    279 *
    280 * Data type containing a set of virtual methods used for
    281 * accessing various Unicode character properties.
    282 *
    283 * HarfBuzz provides a default function for each of the
    284 * methods in #hb_unicode_funcs_t. Client programs can implement
    285 * their own replacements for the individual Unicode functions, as
    286 * needed, and replace the default by calling the setter for a
    287 * method.
    288 **/
    289 typedef struct hb_unicode_funcs_t hb_unicode_funcs_t;
    290 
    291 
    292 /*
    293 * just give me the best implementation you've got there.
    294 */
    295 HB_EXTERN hb_unicode_funcs_t *
    296 hb_unicode_funcs_get_default (void);
    297 
    298 
    299 HB_EXTERN hb_unicode_funcs_t *
    300 hb_unicode_funcs_create (hb_unicode_funcs_t *parent);
    301 
    302 HB_EXTERN hb_unicode_funcs_t *
    303 hb_unicode_funcs_get_empty (void);
    304 
    305 HB_EXTERN hb_unicode_funcs_t *
    306 hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs);
    307 
    308 HB_EXTERN void
    309 hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs);
    310 
    311 HB_EXTERN hb_bool_t
    312 hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs,
    313 			hb_user_data_key_t *key,
    314 			void *              data,
    315 			hb_destroy_func_t   destroy,
    316 			hb_bool_t           replace);
    317 
    318 
    319 HB_EXTERN void *
    320 hb_unicode_funcs_get_user_data (const hb_unicode_funcs_t *ufuncs,
    321 			hb_user_data_key_t       *key);
    322 
    323 
    324 HB_EXTERN void
    325 hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs);
    326 
    327 HB_EXTERN hb_bool_t
    328 hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs);
    329 
    330 HB_EXTERN hb_unicode_funcs_t *
    331 hb_unicode_funcs_get_parent (hb_unicode_funcs_t *ufuncs);
    332 
    333 
    334 /*
    335 * funcs
    336 */
    337 
    338 /* typedefs */
    339 
    340 /**
    341 * hb_unicode_combining_class_func_t:
    342 * @ufuncs: A Unicode-functions structure
    343 * @unicode: The code point to query
    344 * @user_data: User data pointer passed by the caller
    345 *
    346 * A virtual method for the #hb_unicode_funcs_t structure.
    347 *
    348 * This method should retrieve the Canonical Combining Class (ccc)
    349 * property for a specified Unicode code point. 
    350 *
    351 * Return value: The #hb_unicode_combining_class_t of @unicode
    352 * 
    353 **/
    354 typedef hb_unicode_combining_class_t	(*hb_unicode_combining_class_func_t)	(hb_unicode_funcs_t *ufuncs,
    355 									 hb_codepoint_t      unicode,
    356 									 void               *user_data);
    357 
    358 /**
    359 * hb_unicode_general_category_func_t:
    360 * @ufuncs: A Unicode-functions structure
    361 * @unicode: The code point to query
    362 * @user_data: User data pointer passed by the caller
    363 *
    364 * A virtual method for the #hb_unicode_funcs_t structure.
    365 *
    366 * This method should retrieve the General Category property for
    367 * a specified Unicode code point.
    368 * 
    369 * Return value: The #hb_unicode_general_category_t of @unicode
    370 *
    371 **/
    372 typedef hb_unicode_general_category_t	(*hb_unicode_general_category_func_t)	(hb_unicode_funcs_t *ufuncs,
    373 									 hb_codepoint_t      unicode,
    374 									 void               *user_data);
    375 
    376 /**
    377 * hb_unicode_mirroring_func_t:
    378 * @ufuncs: A Unicode-functions structure
    379 * @unicode: The code point to query
    380 * @user_data: User data pointer passed by the caller
    381 *
    382 * A virtual method for the #hb_unicode_funcs_t structure.
    383 *
    384 * This method should retrieve the Bi-Directional Mirroring Glyph
    385 * code point for a specified Unicode code point.
    386 *
    387 * <note>Note: If a code point does not have a specified
    388 * Bi-Directional Mirroring Glyph defined, the method should
    389 * return the original code point.</note>
    390 * 
    391 * Return value: The #hb_codepoint_t of the Mirroring Glyph for @unicode
    392 *
    393 **/
    394 typedef hb_codepoint_t			(*hb_unicode_mirroring_func_t)		(hb_unicode_funcs_t *ufuncs,
    395 									 hb_codepoint_t      unicode,
    396 									 void               *user_data);
    397 
    398 /**
    399 * hb_unicode_script_func_t:
    400 * @ufuncs: A Unicode-functions structure
    401 * @unicode: The code point to query
    402 * @user_data: User data pointer passed by the caller
    403 *
    404 * A virtual method for the #hb_unicode_funcs_t structure.
    405 *
    406 * This method should retrieve the Script property for a 
    407 * specified Unicode code point.
    408 *
    409 * Return value: The #hb_script_t of @unicode
    410 * 
    411 **/
    412 typedef hb_script_t			(*hb_unicode_script_func_t)		(hb_unicode_funcs_t *ufuncs,
    413 									 hb_codepoint_t      unicode,
    414 									 void               *user_data);
    415 
    416 /**
    417 * hb_unicode_compose_func_t:
    418 * @ufuncs: A Unicode-functions structure
    419 * @a: The first code point to compose
    420 * @b: The second code point to compose
    421 * @ab: (out): The composed code point
    422 * @user_data: user data pointer passed by the caller
    423 *
    424 * A virtual method for the #hb_unicode_funcs_t structure.
    425 *
    426 * This method should compose a sequence of two input Unicode code
    427 * points by canonical equivalence, returning the composed code
    428 * point in a #hb_codepoint_t output parameter (if successful).
    429 * The method must return an #hb_bool_t indicating the success
    430 * of the composition.
    431 * 
    432 * Return value: `true` is @a,@b composed, `false` otherwise
    433 *
    434 **/
    435 typedef hb_bool_t			(*hb_unicode_compose_func_t)		(hb_unicode_funcs_t *ufuncs,
    436 									 hb_codepoint_t      a,
    437 									 hb_codepoint_t      b,
    438 									 hb_codepoint_t     *ab,
    439 									 void               *user_data);
    440 
    441 /**
    442 * hb_unicode_decompose_func_t:
    443 * @ufuncs: A Unicode-functions structure
    444 * @ab: The code point to decompose
    445 * @a: (out): The first decomposed code point
    446 * @b: (out): The second decomposed code point
    447 * @user_data: user data pointer passed by the caller
    448 *
    449 * A virtual method for the #hb_unicode_funcs_t structure.
    450 *
    451 * This method should decompose an input Unicode code point,
    452 * returning the two decomposed code points in #hb_codepoint_t
    453 * output parameters (if successful). The method must return an
    454 * #hb_bool_t indicating the success of the composition.
    455 * 
    456 * Return value: `true` if @ab decomposed, `false` otherwise
    457 *
    458 **/
    459 typedef hb_bool_t			(*hb_unicode_decompose_func_t)		(hb_unicode_funcs_t *ufuncs,
    460 									 hb_codepoint_t      ab,
    461 									 hb_codepoint_t     *a,
    462 									 hb_codepoint_t     *b,
    463 									 void               *user_data);
    464 
    465 /* func setters */
    466 
    467 /**
    468 * hb_unicode_funcs_set_combining_class_func:
    469 * @ufuncs: A Unicode-functions structure
    470 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
    471 * @user_data: Data to pass to @func
    472 * @destroy: (nullable): The function to call when @user_data is not needed anymore
    473 *
    474 * Sets the implementation function for #hb_unicode_combining_class_func_t.
    475 *
    476 * Since: 0.9.2
    477 **/
    478 HB_EXTERN void
    479 hb_unicode_funcs_set_combining_class_func (hb_unicode_funcs_t *ufuncs,
    480 				   hb_unicode_combining_class_func_t func,
    481 				   void *user_data, hb_destroy_func_t destroy);
    482 
    483 /**
    484 * hb_unicode_funcs_set_general_category_func:
    485 * @ufuncs: A Unicode-functions structure
    486 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
    487 * @user_data: Data to pass to @func
    488 * @destroy: (nullable): The function to call when @user_data is not needed anymore
    489 *
    490 * Sets the implementation function for #hb_unicode_general_category_func_t.
    491 *
    492 * Since: 0.9.2
    493 **/
    494 HB_EXTERN void
    495 hb_unicode_funcs_set_general_category_func (hb_unicode_funcs_t *ufuncs,
    496 				    hb_unicode_general_category_func_t func,
    497 				    void *user_data, hb_destroy_func_t destroy);
    498 
    499 /**
    500 * hb_unicode_funcs_set_mirroring_func:
    501 * @ufuncs: A Unicode-functions structure
    502 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
    503 * @user_data: Data to pass to @func
    504 * @destroy: (nullable): The function to call when @user_data is not needed anymore
    505 *
    506 * Sets the implementation function for #hb_unicode_mirroring_func_t.
    507 *
    508 * Since: 0.9.2
    509 **/
    510 HB_EXTERN void
    511 hb_unicode_funcs_set_mirroring_func (hb_unicode_funcs_t *ufuncs,
    512 			     hb_unicode_mirroring_func_t func,
    513 			     void *user_data, hb_destroy_func_t destroy);
    514 
    515 /**
    516 * hb_unicode_funcs_set_script_func:
    517 * @ufuncs: A Unicode-functions structure
    518 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
    519 * @user_data: Data to pass to @func
    520 * @destroy: (nullable): The function to call when @user_data is not needed anymore
    521 *
    522 * Sets the implementation function for #hb_unicode_script_func_t.
    523 *
    524 * Since: 0.9.2
    525 **/
    526 HB_EXTERN void
    527 hb_unicode_funcs_set_script_func (hb_unicode_funcs_t *ufuncs,
    528 			  hb_unicode_script_func_t func,
    529 			  void *user_data, hb_destroy_func_t destroy);
    530 
    531 /**
    532 * hb_unicode_funcs_set_compose_func:
    533 * @ufuncs: A Unicode-functions structure
    534 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
    535 * @user_data: Data to pass to @func
    536 * @destroy: (nullable): The function to call when @user_data is not needed anymore
    537 *
    538 * Sets the implementation function for #hb_unicode_compose_func_t.
    539 *
    540 * Since: 0.9.2
    541 **/
    542 HB_EXTERN void
    543 hb_unicode_funcs_set_compose_func (hb_unicode_funcs_t *ufuncs,
    544 			   hb_unicode_compose_func_t func,
    545 			   void *user_data, hb_destroy_func_t destroy);
    546 
    547 /**
    548 * hb_unicode_funcs_set_decompose_func:
    549 * @ufuncs: A Unicode-functions structure
    550 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
    551 * @user_data: Data to pass to @func
    552 * @destroy: (nullable): The function to call when @user_data is not needed anymore
    553 *
    554 * Sets the implementation function for #hb_unicode_decompose_func_t.
    555 *
    556 * Since: 0.9.2
    557 **/
    558 HB_EXTERN void
    559 hb_unicode_funcs_set_decompose_func (hb_unicode_funcs_t *ufuncs,
    560 			     hb_unicode_decompose_func_t func,
    561 			     void *user_data, hb_destroy_func_t destroy);
    562 
    563 /* accessors */
    564 
    565 /**
    566 * hb_unicode_combining_class:
    567 * @ufuncs: The Unicode-functions structure
    568 * @unicode: The code point to query
    569 *
    570 * Retrieves the Canonical Combining Class (ccc) property
    571 * of code point @unicode.
    572 *
    573 * Return value: The #hb_unicode_combining_class_t of @unicode
    574 *
    575 * Since: 0.9.2
    576 **/
    577 HB_EXTERN hb_unicode_combining_class_t
    578 hb_unicode_combining_class (hb_unicode_funcs_t *ufuncs,
    579 		    hb_codepoint_t unicode);
    580 
    581 /**
    582 * hb_unicode_general_category:
    583 * @ufuncs: The Unicode-functions structure
    584 * @unicode: The code point to query
    585 *
    586 * Retrieves the General Category (gc) property
    587 * of code point @unicode.
    588 *
    589 * Return value: The #hb_unicode_general_category_t of @unicode
    590 *
    591 * Since: 0.9.2
    592 **/
    593 HB_EXTERN hb_unicode_general_category_t
    594 hb_unicode_general_category (hb_unicode_funcs_t *ufuncs,
    595 		     hb_codepoint_t unicode);
    596 
    597 /**
    598 * hb_unicode_mirroring:
    599 * @ufuncs: The Unicode-functions structure
    600 * @unicode: The code point to query
    601 *
    602 * Retrieves the Bi-directional Mirroring Glyph code
    603 * point defined for code point @unicode.
    604 *
    605 * Return value: The #hb_codepoint_t of the Mirroring Glyph for @unicode
    606 *
    607 * Since: 0.9.2
    608 **/
    609 HB_EXTERN hb_codepoint_t
    610 hb_unicode_mirroring (hb_unicode_funcs_t *ufuncs,
    611 	      hb_codepoint_t unicode);
    612 
    613 /**
    614 * hb_unicode_script:
    615 * @ufuncs: The Unicode-functions structure
    616 * @unicode: The code point to query
    617 *
    618 * Retrieves the #hb_script_t script to which code
    619 * point @unicode belongs.
    620 *
    621 * Return value: The #hb_script_t of @unicode
    622 *
    623 * Since: 0.9.2
    624 **/
    625 HB_EXTERN hb_script_t
    626 hb_unicode_script (hb_unicode_funcs_t *ufuncs,
    627 	   hb_codepoint_t unicode);
    628 
    629 HB_EXTERN hb_bool_t
    630 hb_unicode_compose (hb_unicode_funcs_t *ufuncs,
    631 	    hb_codepoint_t      a,
    632 	    hb_codepoint_t      b,
    633 	    hb_codepoint_t     *ab);
    634 
    635 HB_EXTERN hb_bool_t
    636 hb_unicode_decompose (hb_unicode_funcs_t *ufuncs,
    637 	      hb_codepoint_t      ab,
    638 	      hb_codepoint_t     *a,
    639 	      hb_codepoint_t     *b);
    640 
    641 HB_END_DECLS
    642 
    643 #endif /* HB_UNICODE_H */