Remove verbose comments
[framework/uifw/harfbuzz.git] / src / hb-glib.cc
1 /*
2  * Copyright (C) 2009  Red Hat, Inc.
3  *
4  *  This is part of HarfBuzz, a text shaping library.
5  *
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.
11  *
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
16  * DAMAGE.
17  *
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.
23  *
24  * Red Hat Author(s): Behdad Esfahbod
25  */
26
27 #include "hb-private.h"
28
29 #include "hb-glib.h"
30
31 #include "hb-unicode-private.hh"
32
33 #include <glib.h>
34
35 HB_BEGIN_DECLS
36
37
38 static unsigned int
39 hb_glib_get_combining_class (hb_unicode_funcs_t *ufuncs,
40                              hb_codepoint_t      unicode,
41                              void               *user_data)
42
43 {
44   return g_unichar_combining_class (unicode);
45 }
46
47 static unsigned int
48 hb_glib_get_eastasian_width (hb_unicode_funcs_t *ufuncs,
49                              hb_codepoint_t      unicode,
50                              void               *user_data)
51 {
52   return g_unichar_iswide (unicode) ? 2 : 1;
53 }
54
55 static hb_unicode_general_category_t
56 hb_glib_get_general_category (hb_unicode_funcs_t *ufuncs,
57                               hb_codepoint_t      unicode,
58                               void               *user_data)
59
60 {
61   /* hb_unicode_general_category_t and GUnicodeType are identical */
62   return (hb_unicode_general_category_t) g_unichar_type (unicode);
63 }
64
65 static hb_codepoint_t
66 hb_glib_get_mirroring (hb_unicode_funcs_t *ufuncs,
67                        hb_codepoint_t      unicode,
68                        void               *user_data)
69 {
70   g_unichar_get_mirror_char (unicode, &unicode);
71   return unicode;
72 }
73
74 static hb_script_t
75 hb_glib_get_script (hb_unicode_funcs_t *ufuncs,
76                     hb_codepoint_t      unicode,
77                     void               *user_data)
78 {
79   GUnicodeScript script = g_unichar_get_script (unicode);
80   switch (script)
81   {
82 #define MATCH_SCRIPT(C) case G_UNICODE_SCRIPT_##C: return HB_SCRIPT_##C
83 #define MATCH_SCRIPT2(C1, C2) case G_UNICODE_SCRIPT_##C1: return HB_SCRIPT_##C2
84
85   MATCH_SCRIPT2(INVALID_CODE, INVALID);
86
87   MATCH_SCRIPT (COMMON);
88   MATCH_SCRIPT (INHERITED);
89   MATCH_SCRIPT (ARABIC);
90   MATCH_SCRIPT (ARMENIAN);
91   MATCH_SCRIPT (BENGALI);
92   MATCH_SCRIPT (BOPOMOFO);
93   MATCH_SCRIPT (CHEROKEE);
94   MATCH_SCRIPT (COPTIC);
95   MATCH_SCRIPT (CYRILLIC);
96   MATCH_SCRIPT (DESERET);
97   MATCH_SCRIPT (DEVANAGARI);
98   MATCH_SCRIPT (ETHIOPIC);
99   MATCH_SCRIPT (GEORGIAN);
100   MATCH_SCRIPT (GOTHIC);
101   MATCH_SCRIPT (GREEK);
102   MATCH_SCRIPT (GUJARATI);
103   MATCH_SCRIPT (GURMUKHI);
104   MATCH_SCRIPT (HAN);
105   MATCH_SCRIPT (HANGUL);
106   MATCH_SCRIPT (HEBREW);
107   MATCH_SCRIPT (HIRAGANA);
108   MATCH_SCRIPT (KANNADA);
109   MATCH_SCRIPT (KATAKANA);
110   MATCH_SCRIPT (KHMER);
111   MATCH_SCRIPT (LAO);
112   MATCH_SCRIPT (LATIN);
113   MATCH_SCRIPT (MALAYALAM);
114   MATCH_SCRIPT (MONGOLIAN);
115   MATCH_SCRIPT (MYANMAR);
116   MATCH_SCRIPT (OGHAM);
117   MATCH_SCRIPT (OLD_ITALIC);
118   MATCH_SCRIPT (ORIYA);
119   MATCH_SCRIPT (RUNIC);
120   MATCH_SCRIPT (SINHALA);
121   MATCH_SCRIPT (SYRIAC);
122   MATCH_SCRIPT (TAMIL);
123   MATCH_SCRIPT (TELUGU);
124   MATCH_SCRIPT (THAANA);
125   MATCH_SCRIPT (THAI);
126   MATCH_SCRIPT (TIBETAN);
127   MATCH_SCRIPT (CANADIAN_ABORIGINAL);
128   MATCH_SCRIPT (YI);
129   MATCH_SCRIPT (TAGALOG);
130   MATCH_SCRIPT (HANUNOO);
131   MATCH_SCRIPT (BUHID);
132   MATCH_SCRIPT (TAGBANWA);
133
134   /* Unicode-4.0 additions */
135   MATCH_SCRIPT (BRAILLE);
136   MATCH_SCRIPT (CYPRIOT);
137   MATCH_SCRIPT (LIMBU);
138   MATCH_SCRIPT (OSMANYA);
139   MATCH_SCRIPT (SHAVIAN);
140   MATCH_SCRIPT (LINEAR_B);
141   MATCH_SCRIPT (TAI_LE);
142   MATCH_SCRIPT (UGARITIC);
143
144   /* Unicode-4.1 additions */
145   MATCH_SCRIPT (NEW_TAI_LUE);
146   MATCH_SCRIPT (BUGINESE);
147   MATCH_SCRIPT (GLAGOLITIC);
148   MATCH_SCRIPT (TIFINAGH);
149   MATCH_SCRIPT (SYLOTI_NAGRI);
150   MATCH_SCRIPT (OLD_PERSIAN);
151   MATCH_SCRIPT (KHAROSHTHI);
152
153   /* Unicode-5.0 additions */
154   MATCH_SCRIPT (UNKNOWN);
155   MATCH_SCRIPT (BALINESE);
156   MATCH_SCRIPT (CUNEIFORM);
157   MATCH_SCRIPT (PHOENICIAN);
158   MATCH_SCRIPT (PHAGS_PA);
159   MATCH_SCRIPT (NKO);
160
161   /* Unicode-5.1 additions */
162   MATCH_SCRIPT (KAYAH_LI);
163   MATCH_SCRIPT (LEPCHA);
164   MATCH_SCRIPT (REJANG);
165   MATCH_SCRIPT (SUNDANESE);
166   MATCH_SCRIPT (SAURASHTRA);
167   MATCH_SCRIPT (CHAM);
168   MATCH_SCRIPT (OL_CHIKI);
169   MATCH_SCRIPT (VAI);
170   MATCH_SCRIPT (CARIAN);
171   MATCH_SCRIPT (LYCIAN);
172   MATCH_SCRIPT (LYDIAN);
173
174   /* Unicode-5.2 additions */
175 #if GLIB_CHECK_VERSION(2,26,0)
176   MATCH_SCRIPT (AVESTAN);
177   MATCH_SCRIPT (BAMUM);
178   MATCH_SCRIPT (EGYPTIAN_HIEROGLYPHS);
179   MATCH_SCRIPT (IMPERIAL_ARAMAIC);
180   MATCH_SCRIPT (INSCRIPTIONAL_PAHLAVI);
181   MATCH_SCRIPT (INSCRIPTIONAL_PARTHIAN);
182   MATCH_SCRIPT (JAVANESE);
183   MATCH_SCRIPT (KAITHI);
184   MATCH_SCRIPT (TAI_THAM);
185   MATCH_SCRIPT (LISU);
186   MATCH_SCRIPT (MEETEI_MAYEK);
187   MATCH_SCRIPT (OLD_SOUTH_ARABIAN);
188 #if GLIB_CHECK_VERSION(2,27,92)
189   MATCH_SCRIPT (OLD_TURKIC);
190 #else
191   MATCH_SCRIPT2(OLD_TURKISH, OLD_TURKIC);
192 #endif
193   MATCH_SCRIPT (SAMARITAN);
194   MATCH_SCRIPT (TAI_VIET);
195 #endif
196
197   /* Unicode-6.0 additions */
198 #if GLIB_CHECK_VERSION(2,28,0)
199   MATCH_SCRIPT (BATAK);
200   MATCH_SCRIPT (BRAHMI);
201   MATCH_SCRIPT (MANDAIC);
202 #endif
203
204 #undef MATCH_SCRIPT
205 #undef MATCH_SCRIPT2
206   }
207
208   return HB_SCRIPT_UNKNOWN;
209 }
210
211 static hb_unicode_funcs_t glib_ufuncs = {
212   HB_REFERENCE_COUNT_INVALID, /* ref_count */
213   NULL, /* parent */
214   TRUE, /* immutable */
215   {
216     hb_glib_get_combining_class,
217     hb_glib_get_eastasian_width,
218     hb_glib_get_general_category,
219     hb_glib_get_mirroring,
220     hb_glib_get_script
221   }
222 };
223
224 hb_unicode_funcs_t *
225 hb_glib_get_unicode_funcs (void)
226 {
227   return &glib_ufuncs;
228 }
229
230
231 HB_END_DECLS