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