2 * Copyright (C) 2009 Red Hat, Inc.
4 * This is part of HarfBuzz, a text shaping library.
6 * Permission is hereby granted, without written agreement and without
7 * license or royalty fees, to use, copy, modify, and distribute this
8 * software and its documentation for any purpose, provided that the
9 * above copyright notice and the following two paragraphs appear in
10 * all copies of this software.
12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
24 * Red Hat Author(s): Behdad Esfahbod
27 #include "hb-private.hh"
31 #include "hb-unicode-private.hh"
37 static const hb_script_t
38 glib_script_to_script[] =
80 HB_SCRIPT_CANADIAN_ABORIGINAL,
87 /* Unicode-4.0 additions */
97 /* Unicode-4.1 additions */
98 HB_SCRIPT_NEW_TAI_LUE,
100 HB_SCRIPT_GLAGOLITIC,
102 HB_SCRIPT_SYLOTI_NAGRI,
103 HB_SCRIPT_OLD_PERSIAN,
104 HB_SCRIPT_KHAROSHTHI,
106 /* Unicode-5.0 additions */
110 HB_SCRIPT_PHOENICIAN,
114 /* Unicode-5.1 additions */
119 HB_SCRIPT_SAURASHTRA,
127 /* Unicode-5.2 additions */
130 HB_SCRIPT_EGYPTIAN_HIEROGLYPHS,
131 HB_SCRIPT_IMPERIAL_ARAMAIC,
132 HB_SCRIPT_INSCRIPTIONAL_PAHLAVI,
133 HB_SCRIPT_INSCRIPTIONAL_PARTHIAN,
138 HB_SCRIPT_MEETEI_MAYEK,
139 HB_SCRIPT_OLD_SOUTH_ARABIAN,
140 HB_SCRIPT_OLD_TURKIC,
144 /* Unicode-6.0 additions */
151 hb_glib_script_to_script (GUnicodeScript script)
153 if (likely ((unsigned int) script < ARRAY_LENGTH (glib_script_to_script)))
154 return glib_script_to_script[script];
156 if (unlikely (script == G_UNICODE_SCRIPT_INVALID_CODE))
157 return HB_SCRIPT_INVALID;
159 return HB_SCRIPT_UNKNOWN;
163 hb_glib_script_from_script (hb_script_t script)
165 unsigned int count = ARRAY_LENGTH (glib_script_to_script);
166 for (unsigned int i = 0; i < count; i++)
167 if (glib_script_to_script[i] == script)
168 return (GUnicodeScript) i;
170 if (unlikely (script == HB_SCRIPT_INVALID))
171 return G_UNICODE_SCRIPT_INVALID_CODE;
173 return G_UNICODE_SCRIPT_UNKNOWN;
178 hb_glib_get_combining_class (hb_unicode_funcs_t *ufuncs,
179 hb_codepoint_t unicode,
183 return g_unichar_combining_class (unicode);
187 hb_glib_get_eastasian_width (hb_unicode_funcs_t *ufuncs,
188 hb_codepoint_t unicode,
191 return g_unichar_iswide (unicode) ? 2 : 1;
194 static hb_unicode_general_category_t
195 hb_glib_get_general_category (hb_unicode_funcs_t *ufuncs,
196 hb_codepoint_t unicode,
200 /* hb_unicode_general_category_t and GUnicodeType are identical */
201 return (hb_unicode_general_category_t) g_unichar_type (unicode);
204 static hb_codepoint_t
205 hb_glib_get_mirroring (hb_unicode_funcs_t *ufuncs,
206 hb_codepoint_t unicode,
209 g_unichar_get_mirror_char (unicode, &unicode);
214 hb_glib_get_script (hb_unicode_funcs_t *ufuncs,
215 hb_codepoint_t unicode,
218 return hb_glib_script_to_script (g_unichar_get_script (unicode));
221 static hb_unicode_funcs_t glib_ufuncs = {
222 HB_REFERENCE_COUNT_INVALID, /* ref_count */
224 TRUE, /* immutable */
226 hb_glib_get_combining_class,
227 hb_glib_get_eastasian_width,
228 hb_glib_get_general_category,
229 hb_glib_get_mirroring,
235 hb_glib_get_unicode_funcs (void)