blob: 205e4c7f5ab11995cdc31b29d766c647d0131850 [file] [log] [blame]
Behdad Esfahbod5c441882009-08-10 20:05:16 -04001/*
Behdad Esfahbod2409d5f2011-04-21 17:14:28 -04002 * Copyright © 2009 Red Hat, Inc.
Behdad Esfahbod6af9cff2011-04-29 12:00:38 -04003 * Copyright © 2011 Codethink Limited
Behdad Esfahbod2409d5f2011-04-21 17:14:28 -04004 * Copyright © 2011 Google, Inc.
Behdad Esfahbod5c441882009-08-10 20:05:16 -04005 *
Behdad Esfahbodc755cb32010-04-22 00:11:43 -04006 * This is part of HarfBuzz, a text shaping library.
Behdad Esfahbod5c441882009-08-10 20:05:16 -04007 *
8 * Permission is hereby granted, without written agreement and without
9 * license or royalty fees, to use, copy, modify, and distribute this
10 * software and its documentation for any purpose, provided that the
11 * above copyright notice and the following two paragraphs appear in
12 * all copies of this software.
13 *
14 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
15 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
16 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
17 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
18 * DAMAGE.
19 *
20 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
21 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
22 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
23 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
24 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
25 *
26 * Red Hat Author(s): Behdad Esfahbod
Ryan Lortie2fd0c572011-04-20 00:19:20 -040027 * Codethink Author(s): Ryan Lortie
Behdad Esfahbod2409d5f2011-04-21 17:14:28 -040028 * Google Author(s): Behdad Esfahbod
Behdad Esfahbod5c441882009-08-10 20:05:16 -040029 */
30
Behdad Esfahbodd1c9eb42012-04-12 13:17:44 -040031#ifndef HB_H_IN
32#error "Include <hb.h> instead."
33#endif
34
Behdad Esfahbod5c441882009-08-10 20:05:16 -040035#ifndef HB_UNICODE_H
36#define HB_UNICODE_H
37
38#include "hb-common.h"
39
40HB_BEGIN_DECLS
41
Behdad Esfahbodacdba3f2010-07-23 15:11:18 -040042
Behdad Esfahbod5c441882009-08-10 20:05:16 -040043/*
44 * hb_unicode_funcs_t
45 */
46
47typedef struct _hb_unicode_funcs_t hb_unicode_funcs_t;
48
Behdad Esfahbodd4bee9f2011-04-27 09:24:37 -040049
50/*
51 * just give me the best implementation you've got there.
52 */
53hb_unicode_funcs_t *
54hb_unicode_funcs_get_default (void);
55
56
Behdad Esfahbod5c441882009-08-10 20:05:16 -040057hb_unicode_funcs_t *
Behdad Esfahboddefc45b2011-05-10 20:02:49 -040058hb_unicode_funcs_create (hb_unicode_funcs_t *parent);
Behdad Esfahbod5c441882009-08-10 20:05:16 -040059
60hb_unicode_funcs_t *
Behdad Esfahbod80a68332011-05-11 18:14:44 -040061hb_unicode_funcs_get_empty (void);
62
63hb_unicode_funcs_t *
Behdad Esfahbod5c441882009-08-10 20:05:16 -040064hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs);
65
Behdad Esfahbod5c441882009-08-10 20:05:16 -040066void
67hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs);
68
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -040069hb_bool_t
70hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs,
71 hb_user_data_key_t *key,
72 void * data,
Behdad Esfahbod33ccc772011-08-09 00:43:24 +020073 hb_destroy_func_t destroy,
74 hb_bool_t replace);
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -040075
76
77void *
78hb_unicode_funcs_get_user_data (hb_unicode_funcs_t *ufuncs,
79 hb_user_data_key_t *key);
80
81
Behdad Esfahbodeb27ec02009-08-10 23:25:28 -040082void
83hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs);
Behdad Esfahbod5c441882009-08-10 20:05:16 -040084
Behdad Esfahbod645f6f22010-10-04 17:01:01 -040085hb_bool_t
86hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs);
Behdad Esfahbod5c441882009-08-10 20:05:16 -040087
Behdad Esfahbodecfb7732011-04-20 01:34:51 -040088hb_unicode_funcs_t *
89hb_unicode_funcs_get_parent (hb_unicode_funcs_t *ufuncs);
90
91
Behdad Esfahbod19c0eab2010-10-04 16:45:21 -040092/*
93 * funcs
94 */
95
Behdad Esfahbod19c0eab2010-10-04 16:45:21 -040096/* typedefs */
Behdad Esfahbod5c441882009-08-10 20:05:16 -040097
Behdad Esfahbodc4641722011-07-07 23:47:19 -040098typedef unsigned int (*hb_unicode_combining_class_func_t) (hb_unicode_funcs_t *ufuncs,
Behdad Esfahbod446df9c2011-05-10 20:14:44 -040099 hb_codepoint_t unicode,
100 void *user_data);
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400101typedef unsigned int (*hb_unicode_eastasian_width_func_t) (hb_unicode_funcs_t *ufuncs,
Behdad Esfahbod446df9c2011-05-10 20:14:44 -0400102 hb_codepoint_t unicode,
103 void *user_data);
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400104typedef hb_unicode_general_category_t (*hb_unicode_general_category_func_t) (hb_unicode_funcs_t *ufuncs,
Behdad Esfahbod446df9c2011-05-10 20:14:44 -0400105 hb_codepoint_t unicode,
106 void *user_data);
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400107typedef hb_codepoint_t (*hb_unicode_mirroring_func_t) (hb_unicode_funcs_t *ufuncs,
Behdad Esfahbod446df9c2011-05-10 20:14:44 -0400108 hb_codepoint_t unicode,
109 void *user_data);
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400110typedef hb_script_t (*hb_unicode_script_func_t) (hb_unicode_funcs_t *ufuncs,
Behdad Esfahbod446df9c2011-05-10 20:14:44 -0400111 hb_codepoint_t unicode,
112 void *user_data);
Behdad Esfahbod5c441882009-08-10 20:05:16 -0400113
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400114typedef hb_bool_t (*hb_unicode_compose_func_t) (hb_unicode_funcs_t *ufuncs,
115 hb_codepoint_t a,
116 hb_codepoint_t b,
117 hb_codepoint_t *ab,
118 void *user_data);
119typedef hb_bool_t (*hb_unicode_decompose_func_t) (hb_unicode_funcs_t *ufuncs,
120 hb_codepoint_t ab,
121 hb_codepoint_t *a,
122 hb_codepoint_t *b,
123 void *user_data);
124
Behdad Esfahbod19c0eab2010-10-04 16:45:21 -0400125/* setters */
126
Behdad Esfahbod5c441882009-08-10 20:05:16 -0400127void
Behdad Esfahbod5c441882009-08-10 20:05:16 -0400128hb_unicode_funcs_set_combining_class_func (hb_unicode_funcs_t *ufuncs,
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400129 hb_unicode_combining_class_func_t combining_class_func,
Behdad Esfahbod446df9c2011-05-10 20:14:44 -0400130 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbod5c441882009-08-10 20:05:16 -0400131
132void
133hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs,
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400134 hb_unicode_eastasian_width_func_t eastasian_width_func,
Behdad Esfahbod446df9c2011-05-10 20:14:44 -0400135 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbod19c0eab2010-10-04 16:45:21 -0400136
Behdad Esfahbodfb194b82011-04-20 02:00:47 -0400137void
138hb_unicode_funcs_set_general_category_func (hb_unicode_funcs_t *ufuncs,
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400139 hb_unicode_general_category_func_t general_category_func,
Behdad Esfahbod446df9c2011-05-10 20:14:44 -0400140 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbodfb194b82011-04-20 02:00:47 -0400141
142void
143hb_unicode_funcs_set_mirroring_func (hb_unicode_funcs_t *ufuncs,
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400144 hb_unicode_mirroring_func_t mirroring_func,
Behdad Esfahbod446df9c2011-05-10 20:14:44 -0400145 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbodfb194b82011-04-20 02:00:47 -0400146
147void
148hb_unicode_funcs_set_script_func (hb_unicode_funcs_t *ufuncs,
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400149 hb_unicode_script_func_t script_func,
Behdad Esfahbod446df9c2011-05-10 20:14:44 -0400150 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbodfb194b82011-04-20 02:00:47 -0400151
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400152void
153hb_unicode_funcs_set_compose_func (hb_unicode_funcs_t *ufuncs,
154 hb_unicode_compose_func_t compose_func,
155 void *user_data, hb_destroy_func_t destroy);
156
157void
158hb_unicode_funcs_set_decompose_func (hb_unicode_funcs_t *ufuncs,
159 hb_unicode_decompose_func_t decompose_func,
160 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbodfb194b82011-04-20 02:00:47 -0400161
Behdad Esfahbod19c0eab2010-10-04 16:45:21 -0400162
163/* accessors */
164
Behdad Esfahbod5ceefa12009-12-20 15:29:16 +0100165unsigned int
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400166hb_unicode_combining_class (hb_unicode_funcs_t *ufuncs,
167 hb_codepoint_t unicode);
Behdad Esfahbod5ceefa12009-12-20 15:29:16 +0100168
169unsigned int
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400170hb_unicode_eastasian_width (hb_unicode_funcs_t *ufuncs,
171 hb_codepoint_t unicode);
Behdad Esfahbod5ceefa12009-12-20 15:29:16 +0100172
Behdad Esfahbodfb194b82011-04-20 02:00:47 -0400173hb_unicode_general_category_t
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400174hb_unicode_general_category (hb_unicode_funcs_t *ufuncs,
175 hb_codepoint_t unicode);
Behdad Esfahbodfb194b82011-04-20 02:00:47 -0400176
177hb_codepoint_t
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400178hb_unicode_mirroring (hb_unicode_funcs_t *ufuncs,
179 hb_codepoint_t unicode);
Behdad Esfahbodfb194b82011-04-20 02:00:47 -0400180
181hb_script_t
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400182hb_unicode_script (hb_unicode_funcs_t *ufuncs,
183 hb_codepoint_t unicode);
Behdad Esfahbodfb194b82011-04-20 02:00:47 -0400184
Behdad Esfahbodc4641722011-07-07 23:47:19 -0400185hb_bool_t
186hb_unicode_compose (hb_unicode_funcs_t *ufuncs,
187 hb_codepoint_t a,
188 hb_codepoint_t b,
189 hb_codepoint_t *ab);
190hb_bool_t
191hb_unicode_decompose (hb_unicode_funcs_t *ufuncs,
192 hb_codepoint_t ab,
193 hb_codepoint_t *a,
194 hb_codepoint_t *b);
Behdad Esfahbod5ceefa12009-12-20 15:29:16 +0100195
Behdad Esfahbod5c441882009-08-10 20:05:16 -0400196HB_END_DECLS
197
Behdad Esfahbod214ac7c2009-11-04 18:12:32 -0500198#endif /* HB_UNICODE_H */