15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 2012 Grigori Goronzy <greg@kinoho.net> 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Permission to use, copy, modify, and/or distribute this software for any 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * purpose with or without fee is hereby granted, provided that the above 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * copyright notice and this permission notice appear in all copies. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "hb-private.hh" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "hb-unicode-private.hh" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ucdn.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const hb_script_t ucdn_script_translate[] = 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_COMMON, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_LATIN, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_GREEK, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_CYRILLIC, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_ARMENIAN, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_HEBREW, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_ARABIC, 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_SYRIAC, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_THAANA, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_DEVANAGARI, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_BENGALI, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_GURMUKHI, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_GUJARATI, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_ORIYA, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_TAMIL, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_TELUGU, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_KANNADA, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_MALAYALAM, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_SINHALA, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_THAI, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_LAO, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_TIBETAN, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_MYANMAR, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_GEORGIAN, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_HANGUL, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_ETHIOPIC, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_CHEROKEE, 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HB_SCRIPT_CANADIAN_SYLLABICS, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_OGHAM, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_RUNIC, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_KHMER, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_MONGOLIAN, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_HIRAGANA, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_KATAKANA, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_BOPOMOFO, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_HAN, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_YI, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_OLD_ITALIC, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_GOTHIC, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_DESERET, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_INHERITED, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_TAGALOG, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_HANUNOO, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_BUHID, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_TAGBANWA, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_LIMBU, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_TAI_LE, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_LINEAR_B, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_UGARITIC, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_SHAVIAN, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_OSMANYA, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_CYPRIOT, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_BRAILLE, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_BUGINESE, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_COPTIC, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_NEW_TAI_LUE, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_GLAGOLITIC, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_TIFINAGH, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_SYLOTI_NAGRI, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_OLD_PERSIAN, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_KHAROSHTHI, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_BALINESE, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_CUNEIFORM, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_PHOENICIAN, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_PHAGS_PA, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_NKO, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_SUNDANESE, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_LEPCHA, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_OL_CHIKI, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_VAI, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_SAURASHTRA, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_KAYAH_LI, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_REJANG, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_LYCIAN, 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_CARIAN, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_LYDIAN, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_CHAM, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_TAI_THAM, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_TAI_VIET, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_AVESTAN, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_EGYPTIAN_HIEROGLYPHS, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_SAMARITAN, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_LISU, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_BAMUM, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_JAVANESE, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_MEETEI_MAYEK, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_IMPERIAL_ARAMAIC, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_OLD_SOUTH_ARABIAN, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_INSCRIPTIONAL_PARTHIAN, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_INSCRIPTIONAL_PAHLAVI, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_OLD_TURKIC, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_KAITHI, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_BATAK, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_BRAHMI, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_MANDAIC, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_CHAKMA, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_MEROITIC_CURSIVE, 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_MEROITIC_HIEROGLYPHS, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_MIAO, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_SHARADA, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_SORA_SOMPENG, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_TAKRI, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_SCRIPT_UNKNOWN, 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_BASSA_VAH, 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_CAUCASIAN_ALBANIAN, 1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_DUPLOYAN, 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_ELBASAN, 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_GRANTHA, 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_KHOJKI, 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_KHUDAWADI, 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_LINEAR_A, 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_MAHAJANI, 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_MANICHAEAN, 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_MENDE_KIKAKUI, 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_MODI, 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_MRO, 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_NABATAEAN, 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_OLD_NORTH_ARABIAN, 1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_OLD_PERMIC, 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_PAHAWH_HMONG, 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_PALMYRENE, 1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_PAU_CIN_HAU, 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_PSALTER_PAHLAVI, 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_SIDDHAM, 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_TIRHUTA, 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HB_SCRIPT_WARANG_CITI, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static hb_unicode_combining_class_t 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_ucdn_combining_class(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode, 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void *user_data HB_UNUSED) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (hb_unicode_combining_class_t) ucdn_get_combining_class(unicode); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static unsigned int 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_ucdn_eastasian_width(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode, 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void *user_data HB_UNUSED) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int w = ucdn_get_east_asian_width(unicode); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (w == UCDN_EAST_ASIAN_F || w == UCDN_EAST_ASIAN_W) ? 2 : 1; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static hb_unicode_general_category_t 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_ucdn_general_category(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode, 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void *user_data HB_UNUSED) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (hb_unicode_general_category_t)ucdn_get_general_category(unicode); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static hb_codepoint_t 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_ucdn_mirroring(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode, 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void *user_data HB_UNUSED) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ucdn_mirror(unicode); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static hb_script_t 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_ucdn_script(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode, 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void *user_data HB_UNUSED) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ucdn_script_translate[ucdn_get_script(unicode)]; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static hb_bool_t 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_ucdn_compose(hb_unicode_funcs_t *ufuncs, 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hb_codepoint_t a, hb_codepoint_t b, hb_codepoint_t *ab, 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void *user_data HB_UNUSED) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ucdn_compose(ab, a, b); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static hb_bool_t 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_ucdn_decompose(hb_unicode_funcs_t *ufuncs, 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hb_codepoint_t ab, hb_codepoint_t *a, hb_codepoint_t *b, 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void *user_data HB_UNUSED) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ucdn_decompose(ab, a, b); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static unsigned int 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_ucdn_decompose_compatibility(hb_unicode_funcs_t *ufuncs, 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hb_codepoint_t u, hb_codepoint_t *decomposed, 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void *user_data HB_UNUSED) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ucdn_compat_decompose(u, decomposed); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" HB_INTERNAL 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_t * 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_ucdn_get_unicode_funcs (void) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const hb_unicode_funcs_t _hb_ucdn_unicode_funcs = { 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_OBJECT_HEADER_STATIC, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* parent */ 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true, /* immutable */ 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_ucdn_##name, 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef HB_UNICODE_FUNC_IMPLEMENT 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return const_cast<hb_unicode_funcs_t *> (&_hb_ucdn_unicode_funcs); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 232