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