hb-icu.cc revision 2409d5f8d7dd8b535ce5ea29e933f7db27d33793
1d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod/* 22409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * Copyright © 2009 Red Hat, Inc. 32409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * Copyright © 2009 Keith Stribley 42409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * Copyright © 2011 Google, Inc. 5d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * 6c755cb3e3ac55156d0d2ec05adea7a650b97cc41Behdad Esfahbod * This is part of HarfBuzz, a text shaping library. 7d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * 8d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * Permission is hereby granted, without written agreement and without 9d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this 10d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * software and its documentation for any purpose, provided that the 11d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * above copyright notice and the following two paragraphs appear in 12d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * all copies of this software. 13d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * 14d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 15d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 16d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 17d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 18d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * DAMAGE. 19d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * 20d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 21d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 22d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 23d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 24d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 25d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * 26d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod * Red Hat Author(s): Behdad Esfahbod 272409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * Google Author(s): Behdad Esfahbod 28d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod */ 29d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod 30c57d454accff66e5f2c58006e8fb40bc020b6182Behdad Esfahbod#include "hb-private.hh" 31d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod 32d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod#include "hb-icu.h" 33d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod 34fb194b8794898f51eb596fa4092c26606889d376Behdad Esfahbod#include "hb-unicode-private.hh" 35d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod 364fa67f34ecc65056ce60a572213fbdae66e0423bBehdad Esfahbod#include <unicode/uversion.h> 37d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod#include <unicode/uchar.h> 38d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod 39acdba3f90b232fc12fcb200dca2584481b339118Behdad EsfahbodHB_BEGIN_DECLS 40acdba3f90b232fc12fcb200dca2584481b339118Behdad Esfahbod 41acdba3f90b232fc12fcb200dca2584481b339118Behdad Esfahbod 42f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbodhb_script_t 43f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbodhb_icu_script_to_script (UScriptCode script) 44d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod{ 454d559cddbb3b3a5c12c5167eba69598618a9f283Behdad Esfahbod if (unlikely (script == USCRIPT_INVALID_CODE)) 464d559cddbb3b3a5c12c5167eba69598618a9f283Behdad Esfahbod return HB_SCRIPT_INVALID; 474d559cddbb3b3a5c12c5167eba69598618a9f283Behdad Esfahbod 48f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod return hb_script_from_string (uscript_getShortName (script)); 49d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod} 50d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod 51f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad EsfahbodUScriptCode 52f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbodhb_icu_script_from_script (hb_script_t script) 53d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod{ 544d559cddbb3b3a5c12c5167eba69598618a9f283Behdad Esfahbod if (unlikely (script == HB_SCRIPT_INVALID)) 554d559cddbb3b3a5c12c5167eba69598618a9f283Behdad Esfahbod return USCRIPT_INVALID_CODE; 56afab01cf7caca79cf6dfabe6827d1703be1a74f7Behdad Esfahbod 574d559cddbb3b3a5c12c5167eba69598618a9f283Behdad Esfahbod for (unsigned int i = 0; i < USCRIPT_CODE_LIMIT; i++) 584d559cddbb3b3a5c12c5167eba69598618a9f283Behdad Esfahbod if (unlikely (hb_icu_script_to_script ((UScriptCode) i) == script)) 594d559cddbb3b3a5c12c5167eba69598618a9f283Behdad Esfahbod return (UScriptCode) i; 602fd0c577e322ccbf762927bc4600b3ea31db4c80Ryan Lortie 61f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod return USCRIPT_UNKNOWN; 62f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod} 63f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 64f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 65f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbodstatic unsigned int 66f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbodhb_icu_get_combining_class (hb_unicode_funcs_t *ufuncs, 67f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod hb_codepoint_t unicode, 68f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod void *user_data) 69f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 70f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod{ 71f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod return u_getCombiningClass (unicode); 72f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod} 73f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 74f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbodstatic unsigned int 75f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbodhb_icu_get_eastasian_width (hb_unicode_funcs_t *ufuncs, 76f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod hb_codepoint_t unicode, 77f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod void *user_data) 78f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod{ 79f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod switch (u_getIntPropertyValue(unicode, UCHAR_EAST_ASIAN_WIDTH)) 80f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod { 81f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_EA_WIDE: 82f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_EA_FULLWIDTH: 83f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod return 2; 84f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_EA_NEUTRAL: 85f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_EA_AMBIGUOUS: 86f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_EA_HALFWIDTH: 87f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_EA_NARROW: 88f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod return 1; 89f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod } 90f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod return 1; 91f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod} 92f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 93f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbodstatic hb_unicode_general_category_t 94f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbodhb_icu_get_general_category (hb_unicode_funcs_t *ufuncs, 95f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod hb_codepoint_t unicode, 96f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod void *user_data) 97f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod{ 98f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod switch (u_getIntPropertyValue(unicode, UCHAR_GENERAL_CATEGORY)) 99f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod { 100f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_UNASSIGNED: return HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED; 101f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 102f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_UPPERCASE_LETTER: return HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER; 103f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_LOWERCASE_LETTER: return HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER; 104f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_TITLECASE_LETTER: return HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER; 105f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_MODIFIER_LETTER: return HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER; 106f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_OTHER_LETTER: return HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER; 107f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 108f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_NON_SPACING_MARK: return HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK; 109f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_ENCLOSING_MARK: return HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK; 110f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_COMBINING_SPACING_MARK: return HB_UNICODE_GENERAL_CATEGORY_COMBINING_MARK; 111f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 112f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_DECIMAL_DIGIT_NUMBER: return HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER; 113f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_LETTER_NUMBER: return HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER; 114f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_OTHER_NUMBER: return HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER; 115f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 116f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_SPACE_SEPARATOR: return HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR; 117f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_LINE_SEPARATOR: return HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR; 118f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_PARAGRAPH_SEPARATOR: return HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR; 119f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 120f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_CONTROL_CHAR: return HB_UNICODE_GENERAL_CATEGORY_CONTROL; 121f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_FORMAT_CHAR: return HB_UNICODE_GENERAL_CATEGORY_FORMAT; 122f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_PRIVATE_USE_CHAR: return HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE; 123f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_SURROGATE: return HB_UNICODE_GENERAL_CATEGORY_SURROGATE; 124f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 125f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 126f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_DASH_PUNCTUATION: return HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION; 127f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_START_PUNCTUATION: return HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION; 128f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_END_PUNCTUATION: return HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION; 129f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_CONNECTOR_PUNCTUATION: return HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION; 130f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_OTHER_PUNCTUATION: return HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION; 131f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 132f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_MATH_SYMBOL: return HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL; 133f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_CURRENCY_SYMBOL: return HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL; 134f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_MODIFIER_SYMBOL: return HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL; 135f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_OTHER_SYMBOL: return HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL; 136f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 137f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_INITIAL_PUNCTUATION: return HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION; 138f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod case U_FINAL_PUNCTUATION: return HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION; 139f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod } 140f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 141f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod return HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED; 142f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod} 143f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 144f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbodstatic hb_codepoint_t 145f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbodhb_icu_get_mirroring (hb_unicode_funcs_t *ufuncs, 146f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod hb_codepoint_t unicode, 147f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod void *user_data) 148f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod{ 149f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod return u_charMirror(unicode); 150f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod} 151f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 152f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbodstatic hb_script_t 153f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbodhb_icu_get_script (hb_unicode_funcs_t *ufuncs, 154f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod hb_codepoint_t unicode, 155f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod void *user_data) 156f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod{ 157f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod UErrorCode status = U_ZERO_ERROR; 158f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod UScriptCode scriptCode = uscript_getScript(unicode, &status); 159f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod 160f144a8ea840c6452c1fece2fd988b42a8ea7c5a6Behdad Esfahbod return hb_icu_script_to_script (scriptCode); 161d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod} 162d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod 163d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbodstatic hb_unicode_funcs_t icu_ufuncs = { 164d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod HB_REFERENCE_COUNT_INVALID, /* ref_count */ 165fb194b8794898f51eb596fa4092c26606889d376Behdad Esfahbod NULL, /* parent */ 166d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod TRUE, /* immutable */ 167c442672ec2fb83ed41f3994b3aa4f92a097664abBehdad Esfahbod { 168fb194b8794898f51eb596fa4092c26606889d376Behdad Esfahbod hb_icu_get_combining_class, 169fb194b8794898f51eb596fa4092c26606889d376Behdad Esfahbod hb_icu_get_eastasian_width, 170fb194b8794898f51eb596fa4092c26606889d376Behdad Esfahbod hb_icu_get_general_category, 171fb194b8794898f51eb596fa4092c26606889d376Behdad Esfahbod hb_icu_get_mirroring, 172fb194b8794898f51eb596fa4092c26606889d376Behdad Esfahbod hb_icu_get_script 173c442672ec2fb83ed41f3994b3aa4f92a097664abBehdad Esfahbod } 174d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod}; 175d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod 176d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbodhb_unicode_funcs_t * 177d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbodhb_icu_get_unicode_funcs (void) 178d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod{ 179d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod return &icu_ufuncs; 180d94647e2cd187bf4a4c8fb1c0c15c3d23c1293acBehdad Esfahbod} 181acdba3f90b232fc12fcb200dca2584481b339118Behdad Esfahbod 182acdba3f90b232fc12fcb200dca2584481b339118Behdad Esfahbod 183acdba3f90b232fc12fcb200dca2584481b339118Behdad EsfahbodHB_END_DECLS 184