15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright © 2009 Red Hat, Inc. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright © 2011 Codethink Limited 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright © 2010,2011,2012 Google, Inc. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This is part of HarfBuzz, a text shaping library. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Permission is hereby granted, without written agreement and without 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * license or royalty fees, to use, copy, modify, and distribute this 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * software and its documentation for any purpose, provided that the 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * above copyright notice and the following two paragraphs appear in 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * all copies of this software. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DAMAGE. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Red Hat Author(s): Behdad Esfahbod 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Codethink Author(s): Ryan Lortie 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Google Author(s): Behdad Esfahbod 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "hb-private.hh" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "hb-unicode-private.hh" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * hb_unicode_funcs_t 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static hb_unicode_combining_class_t 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_combining_class_nil (hb_unicode_funcs_t *ufuncs HB_UNUSED, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t unicode HB_UNUSED, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *user_data HB_UNUSED) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return HB_UNICODE_COMBINING_CLASS_NOT_REORDERED; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static unsigned int 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_eastasian_width_nil (hb_unicode_funcs_t *ufuncs HB_UNUSED, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t unicode HB_UNUSED, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *user_data HB_UNUSED) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static hb_unicode_general_category_t 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_general_category_nil (hb_unicode_funcs_t *ufuncs HB_UNUSED, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t unicode HB_UNUSED, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *user_data HB_UNUSED) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static hb_codepoint_t 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_mirroring_nil (hb_unicode_funcs_t *ufuncs HB_UNUSED, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t unicode HB_UNUSED, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *user_data HB_UNUSED) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return unicode; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static hb_script_t 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_script_nil (hb_unicode_funcs_t *ufuncs HB_UNUSED, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t unicode HB_UNUSED, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *user_data HB_UNUSED) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return HB_SCRIPT_UNKNOWN; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static hb_bool_t 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_compose_nil (hb_unicode_funcs_t *ufuncs HB_UNUSED, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t a HB_UNUSED, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t b HB_UNUSED, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t *ab HB_UNUSED, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *user_data HB_UNUSED) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static hb_bool_t 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_decompose_nil (hb_unicode_funcs_t *ufuncs HB_UNUSED, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t ab HB_UNUSED, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t *a HB_UNUSED, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t *b HB_UNUSED, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *user_data HB_UNUSED) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static unsigned int 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_decompose_compatibility_nil (hb_unicode_funcs_t *ufuncs HB_UNUSED, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t u HB_UNUSED, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t *decomposed HB_UNUSED, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *user_data HB_UNUSED) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_UNICODE_FUNCS_IMPLEMENT_SET \ 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_UNICODE_FUNCS_IMPLEMENT (glib) \ 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_UNICODE_FUNCS_IMPLEMENT (icu) \ 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_UNICODE_FUNCS_IMPLEMENT (ucdn) \ 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_UNICODE_FUNCS_IMPLEMENT (nil) \ 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* ^--- Add new callbacks before nil */ 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define hb_nil_get_unicode_funcs hb_unicode_funcs_get_empty 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Prototype them all */ 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_UNICODE_FUNCS_IMPLEMENT(set) \ 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" hb_unicode_funcs_t *hb_##set##_get_unicode_funcs (void); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HB_UNICODE_FUNCS_IMPLEMENT_SET 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef HB_UNICODE_FUNCS_IMPLEMENT 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_t * 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_get_default (void) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_UNICODE_FUNCS_IMPLEMENT(set) \ 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hb_##set##_get_unicode_funcs (); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_GLIB 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_UNICODE_FUNCS_IMPLEMENT(glib) 13623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#elif defined(HAVE_ICU) && defined(HAVE_ICU_BUILTIN) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_UNICODE_FUNCS_IMPLEMENT(icu) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(HAVE_UCDN) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_UNICODE_FUNCS_IMPLEMENT(ucdn) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_UNICODE_FUNCS_NIL 1 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_UNICODE_FUNCS_IMPLEMENT(nil) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef HB_UNICODE_FUNCS_IMPLEMENT 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(HB_NO_UNICODE_FUNCS) && defined(HB_UNICODE_FUNCS_NIL) 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef _MSC_VER 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#pragma message("Could not find any Unicode functions implementation, you have to provide your own") 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#pragma message("To suppress this warnings, define HB_NO_UNICODE_FUNCS") 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#warning "Could not find any Unicode functions implementation, you have to provide your own" 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#warning "To suppress this warning, define HB_NO_UNICODE_FUNCS" 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_create: (Xconstructor) 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @parent: (allow-none): 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: (transfer full): 165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_t * 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_create (hb_unicode_funcs_t *parent) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_unicode_funcs_t *ufuncs; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!(ufuncs = hb_object_create<hb_unicode_funcs_t> ())) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hb_unicode_funcs_get_empty (); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!parent) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent = hb_unicode_funcs_get_empty (); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_unicode_funcs_make_immutable (parent); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->parent = hb_unicode_funcs_reference (parent); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->func = parent->func; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* We can safely copy user_data from parent since we hold a reference 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * onto it and it's immutable. We should not copy the destroy notifiers 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * though. */ 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->user_data = parent->user_data; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ufuncs; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const hb_unicode_funcs_t _hb_unicode_funcs_nil = { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_OBJECT_HEADER_STATIC, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* parent */ 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true, /* immutable */ 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_unicode_##name##_nil, 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef HB_UNICODE_FUNC_IMPLEMENT 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_get_empty: 207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: (transfer full): 211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_t * 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_get_empty (void) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return const_cast<hb_unicode_funcs_t *> (&_hb_unicode_funcs_nil); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_reference: (skip) 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: (transfer full): 227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_t * 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hb_object_reference (ufuncs); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_destroy: (skip) 238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!hb_object_destroy (ufuncs)) return; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_UNICODE_FUNC_IMPLEMENT(name) \ 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ufuncs->destroy.name) ufuncs->destroy.name (ufuncs->user_data.name); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef HB_UNICODE_FUNC_IMPLEMENT 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_unicode_funcs_destroy (ufuncs->parent); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) free (ufuncs); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_set_user_data: (skip) 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @key: 263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @data: 264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @destroy: 265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @replace: 266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_bool_t 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs, 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_user_data_key_t *key, 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void * data, 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_destroy_func_t destroy, 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_bool_t replace) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hb_object_set_user_data (ufuncs, key, data, destroy, replace); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_get_user_data: (skip) 285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 286f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @key: 287f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: (transfer none): 291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void * 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_get_user_data (hb_unicode_funcs_t *ufuncs, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_user_data_key_t *key) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hb_object_get_user_data (ufuncs, key); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_make_immutable: 304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 305f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 31303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (unlikely (hb_object_is_inert (ufuncs))) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->immutable = true; 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 319f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 320f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_is_immutable: 321f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 322f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 323f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 324f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 325f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 326f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_bool_t 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ufuncs->immutable; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_get_parent: 337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 344f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_t * 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_get_parent (hb_unicode_funcs_t *ufuncs) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ufuncs->parent ? ufuncs->parent : hb_unicode_funcs_get_empty (); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_UNICODE_FUNC_IMPLEMENT(name) \ 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) \ 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void \ 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_set_##name##_func (hb_unicode_funcs_t *ufuncs, \ 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_unicode_##name##_func_t func, \ 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *user_data, \ 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_destroy_func_t destroy) \ 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ \ 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ufuncs->immutable) \ 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; \ 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) \ 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ufuncs->destroy.name) \ 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->destroy.name (ufuncs->user_data.name); \ 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) \ 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (func) { \ 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->func.name = func; \ 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->user_data.name = user_data; \ 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->destroy.name = destroy; \ 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { \ 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->func.name = ufuncs->parent->func.name; \ 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->user_data.name = ufuncs->parent->user_data.name; \ 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->destroy.name = NULL; \ 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } \ 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef HB_UNICODE_FUNC_IMPLEMENT 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_UNICODE_FUNC_IMPLEMENT(return_type, name) \ 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) \ 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)return_type \ 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_##name (hb_unicode_funcs_t *ufuncs, \ 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t unicode) \ 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ \ 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ufuncs->name (unicode); \ 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef HB_UNICODE_FUNC_IMPLEMENT 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 392f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_compose: 394f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 395f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @a: 396f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @b: 397f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ab: (out): 398f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 399f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 400f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 401f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 402f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 403f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 404f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_bool_t 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_compose (hb_unicode_funcs_t *ufuncs, 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t a, 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t b, 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t *ab) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ufuncs->compose (a, b, ab); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 414f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_decompose: 416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ab: 418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @a: (out): 419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @b: (out): 420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 421f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 422f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 423f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 424f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 425f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 426f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_bool_t 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_decompose (hb_unicode_funcs_t *ufuncs, 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t ab, 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t *a, 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t *b) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ufuncs->decompose (ab, a, b); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 436f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 437f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_decompose_compatibility: 438f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 439f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @u: 440f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @decomposed: (out): 441f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 442f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 443f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 444f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 445f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 446f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 447f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)unsigned int 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_decompose_compatibility (hb_unicode_funcs_t *ufuncs, 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t u, 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t *decomposed) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ufuncs->decompose_compatibility (u, decomposed); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* See hb-unicode-private.hh for details. */ 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint8_t 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_hb_modified_combining_class[256] = 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, /* HB_UNICODE_COMBINING_CLASS_NOT_REORDERED */ 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, /* HB_UNICODE_COMBINING_CLASS_OVERLAY */ 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2, 3, 4, 5, 6, 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7, /* HB_UNICODE_COMBINING_CLASS_NUKTA */ 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8, /* HB_UNICODE_COMBINING_CLASS_KANA_VOICING */ 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9, /* HB_UNICODE_COMBINING_CLASS_VIRAMA */ 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Hebrew */ 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC10, 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC11, 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC12, 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC13, 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC14, 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC15, 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC16, 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC17, 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC18, 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC19, 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC20, 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC21, 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC22, 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC23, 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC24, 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC25, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC26, 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Arabic */ 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC27, 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC28, 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC29, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC30, 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC31, 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC32, 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC33, 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC34, 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC35, 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Syriac */ 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC36, 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 37, 38, 39, 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 80, 81, 82, 83, 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Telugu */ 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC84, 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85, 86, 87, 88, 89, 90, 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC91, 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Thai */ 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC103, 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 104, 105, 106, 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC107, 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Lao */ 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC118, 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 119, 120, 121, 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC122, 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 123, 124, 125, 126, 127, 128, 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Tibetan */ 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC129, 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC130, 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 131, 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC132, 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 133, 134, 135, 136, 137, 138, 139, 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 200, /* HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT */ 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 201, 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 202, /* HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW */ 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 214, /* HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE */ 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215, 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 216, /* HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT */ 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 217, 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 218, /* HB_UNICODE_COMBINING_CLASS_BELOW_LEFT */ 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 219, 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 220, /* HB_UNICODE_COMBINING_CLASS_BELOW */ 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 221, 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 222, /* HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT */ 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 223, 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 224, /* HB_UNICODE_COMBINING_CLASS_LEFT */ 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225, 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 226, /* HB_UNICODE_COMBINING_CLASS_RIGHT */ 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 227, 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 228, /* HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT */ 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 229, 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 230, /* HB_UNICODE_COMBINING_CLASS_ABOVE */ 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 231, 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 232, /* HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT */ 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 233, /* HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW */ 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 234, /* HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE */ 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235, 236, 237, 238, 239, 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 240, /* HB_UNICODE_COMBINING_CLASS_IOTA_SUBSCRIPT */ 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255, /* HB_UNICODE_COMBINING_CLASS_INVALID */ 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 569