hb-unicode.cc revision f2477e01787aa58f445919b809d89e252beef54f
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) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(HAVE_ICU) 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) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#pragma message("Could not find any Unicode functions implementation, you have to provide your own.") 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#pragma message("To suppress this warnings, define HB_NO_UNICODE_FUNCS.") 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_create: (Xconstructor) 155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @parent: (allow-none): 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: (transfer full): 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_t * 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_create (hb_unicode_funcs_t *parent) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_unicode_funcs_t *ufuncs; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!(ufuncs = hb_object_create<hb_unicode_funcs_t> ())) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hb_unicode_funcs_get_empty (); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!parent) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent = hb_unicode_funcs_get_empty (); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_unicode_funcs_make_immutable (parent); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->parent = hb_unicode_funcs_reference (parent); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->func = parent->func; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* We can safely copy user_data from parent since we hold a reference 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * onto it and it's immutable. We should not copy the destroy notifiers 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * though. */ 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->user_data = parent->user_data; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ufuncs; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const hb_unicode_funcs_t _hb_unicode_funcs_nil = { 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_OBJECT_HEADER_STATIC, 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* parent */ 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true, /* immutable */ 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_unicode_##name##_nil, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef HB_UNICODE_FUNC_IMPLEMENT 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_get_empty: 202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: (transfer full): 206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_t * 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_get_empty (void) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return const_cast<hb_unicode_funcs_t *> (&_hb_unicode_funcs_nil); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_reference: (skip) 217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: (transfer full): 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_t * 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hb_object_reference (ufuncs); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_destroy: (skip) 233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!hb_object_destroy (ufuncs)) return; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_UNICODE_FUNC_IMPLEMENT(name) \ 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ufuncs->destroy.name) ufuncs->destroy.name (ufuncs->user_data.name); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef HB_UNICODE_FUNC_IMPLEMENT 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_unicode_funcs_destroy (ufuncs->parent); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) free (ufuncs); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_set_user_data: (skip) 256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @key: 258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @data: 259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @destroy: 260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @replace: 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_bool_t 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs, 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_user_data_key_t *key, 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void * data, 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_destroy_func_t destroy, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_bool_t replace) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hb_object_set_user_data (ufuncs, key, data, destroy, replace); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_get_user_data: (skip) 280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @key: 282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: (transfer none): 286f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 287f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void * 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_get_user_data (hb_unicode_funcs_t *ufuncs, 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_user_data_key_t *key) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hb_object_get_user_data (ufuncs, key); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_make_immutable: 299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (hb_object_is_inert (ufuncs)) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->immutable = true; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 315f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_is_immutable: 316f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 317f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 318f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 319f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 320f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 321f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 322f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 323f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_bool_t 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ufuncs->immutable; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 330f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_funcs_get_parent: 332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 335f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_t * 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_get_parent (hb_unicode_funcs_t *ufuncs) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ufuncs->parent ? ufuncs->parent : hb_unicode_funcs_get_empty (); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_UNICODE_FUNC_IMPLEMENT(name) \ 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) \ 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void \ 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_funcs_set_##name##_func (hb_unicode_funcs_t *ufuncs, \ 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_unicode_##name##_func_t func, \ 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *user_data, \ 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_destroy_func_t destroy) \ 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ \ 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ufuncs->immutable) \ 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; \ 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) \ 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ufuncs->destroy.name) \ 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->destroy.name (ufuncs->user_data.name); \ 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) \ 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (func) { \ 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->func.name = func; \ 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->user_data.name = user_data; \ 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->destroy.name = destroy; \ 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { \ 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->func.name = ufuncs->parent->func.name; \ 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->user_data.name = ufuncs->parent->user_data.name; \ 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ufuncs->destroy.name = NULL; \ 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } \ 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef HB_UNICODE_FUNC_IMPLEMENT 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HB_UNICODE_FUNC_IMPLEMENT(return_type, name) \ 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) \ 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)return_type \ 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_##name (hb_unicode_funcs_t *ufuncs, \ 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t unicode) \ 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ \ 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ufuncs->name (unicode); \ 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef HB_UNICODE_FUNC_IMPLEMENT 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_compose: 389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 390f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @a: 391f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @b: 392f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ab: (out): 393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 394f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 395f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 396f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 397f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 398f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 399f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_bool_t 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_compose (hb_unicode_funcs_t *ufuncs, 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t a, 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t b, 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t *ab) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ufuncs->compose (a, b, ab); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_decompose: 411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 412f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ab: 413f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @a: (out): 414f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @b: (out): 415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 421f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_bool_t 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_decompose (hb_unicode_funcs_t *ufuncs, 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t ab, 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t *a, 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t *b) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ufuncs->decompose (ab, a, b); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 431f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 432f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_unicode_decompose_compatibility: 433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ufuncs: Unicode functions. 434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @u: 435f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @decomposed: (out): 436f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 437f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 438f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 439f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 440f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 441f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 442f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)unsigned int 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_unicode_decompose_compatibility (hb_unicode_funcs_t *ufuncs, 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t u, 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t *decomposed) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ufuncs->decompose_compatibility (u, decomposed); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* See hb-unicode-private.hh for details. */ 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const uint8_t 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_hb_modified_combining_class[256] = 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, /* HB_UNICODE_COMBINING_CLASS_NOT_REORDERED */ 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, /* HB_UNICODE_COMBINING_CLASS_OVERLAY */ 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2, 3, 4, 5, 6, 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7, /* HB_UNICODE_COMBINING_CLASS_NUKTA */ 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8, /* HB_UNICODE_COMBINING_CLASS_KANA_VOICING */ 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9, /* HB_UNICODE_COMBINING_CLASS_VIRAMA */ 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Hebrew */ 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC10, 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC11, 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC12, 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC13, 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC14, 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC15, 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC16, 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC17, 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC18, 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC19, 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC20, 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC21, 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC22, 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC23, 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC24, 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC25, 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC26, 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Arabic */ 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC27, 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC28, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC29, 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC30, 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC31, 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC32, 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC33, 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC34, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC35, 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Syriac */ 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC36, 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 37, 38, 39, 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 80, 81, 82, 83, 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Telugu */ 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC84, 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85, 86, 87, 88, 89, 90, 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC91, 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Thai */ 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC103, 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 104, 105, 106, 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC107, 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Lao */ 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC118, 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 119, 120, 121, 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC122, 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 123, 124, 125, 126, 127, 128, 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Tibetan */ 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC129, 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC130, 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 131, 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_MODIFIED_COMBINING_CLASS_CCC132, 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 133, 134, 135, 136, 137, 138, 139, 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 200, /* HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT */ 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 201, 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 202, /* HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW */ 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 214, /* HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE */ 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215, 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 216, /* HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT */ 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 217, 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 218, /* HB_UNICODE_COMBINING_CLASS_BELOW_LEFT */ 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 219, 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 220, /* HB_UNICODE_COMBINING_CLASS_BELOW */ 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 221, 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 222, /* HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT */ 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 223, 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 224, /* HB_UNICODE_COMBINING_CLASS_LEFT */ 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225, 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 226, /* HB_UNICODE_COMBINING_CLASS_RIGHT */ 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 227, 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 228, /* HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT */ 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 229, 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 230, /* HB_UNICODE_COMBINING_CLASS_ABOVE */ 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 231, 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 232, /* HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT */ 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 233, /* HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW */ 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 234, /* HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE */ 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235, 236, 237, 238, 239, 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 240, /* HB_UNICODE_COMBINING_CLASS_IOTA_SUBSCRIPT */ 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255, /* HB_UNICODE_COMBINING_CLASS_INVALID */ 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 564