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_CCC133: [Tibetan] 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_CCC133 = 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 */ 644