OLD | NEW |
1 /* | 1 /* |
2 * Copyright © 2012 Google, Inc. | 2 * Copyright © 2012 Google, Inc. |
3 * | 3 * |
4 * This is part of HarfBuzz, a text shaping library. | 4 * This is part of HarfBuzz, a text shaping library. |
5 * | 5 * |
6 * Permission is hereby granted, without written agreement and without | 6 * Permission is hereby granted, without written agreement and without |
7 * license or royalty fees, to use, copy, modify, and distribute this | 7 * license or royalty fees, to use, copy, modify, and distribute this |
8 * software and its documentation for any purpose, provided that the | 8 * software and its documentation for any purpose, provided that the |
9 * above copyright notice and the following two paragraphs appear in | 9 * above copyright notice and the following two paragraphs appear in |
10 * all copies of this software. | 10 * all copies of this software. |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 } | 76 } |
77 | 77 |
78 #undef HB_SHAPER_PLAN | 78 #undef HB_SHAPER_PLAN |
79 } | 79 } |
80 | 80 |
81 | 81 |
82 /* | 82 /* |
83 * hb_shape_plan_t | 83 * hb_shape_plan_t |
84 */ | 84 */ |
85 | 85 |
| 86 /** |
| 87 * hb_shape_plan_create: (Xconstructor) |
| 88 * @face: |
| 89 * @props: |
| 90 * @user_features: (array length=num_user_features): |
| 91 * @num_user_features: |
| 92 * @shaper_list: (array zero-terminated=1): |
| 93 * |
| 94 * |
| 95 * |
| 96 * Return value: (transfer full): |
| 97 * |
| 98 * Since: 1.0 |
| 99 **/ |
86 hb_shape_plan_t * | 100 hb_shape_plan_t * |
87 hb_shape_plan_create (hb_face_t *face, | 101 hb_shape_plan_create (hb_face_t *face, |
88 const hb_segment_properties_t *props, | 102 const hb_segment_properties_t *props, |
89 const hb_feature_t *user_features, | 103 const hb_feature_t *user_features, |
90 unsigned int num_user_features, | 104 unsigned int num_user_features, |
91 const char * const *shaper_list) | 105 const char * const *shaper_list) |
92 { | 106 { |
93 assert (props->direction != HB_DIRECTION_INVALID); | 107 assert (props->direction != HB_DIRECTION_INVALID); |
94 | 108 |
95 hb_shape_plan_t *shape_plan; | 109 hb_shape_plan_t *shape_plan; |
96 | 110 |
97 if (unlikely (!face)) | 111 if (unlikely (!face)) |
98 face = hb_face_get_empty (); | 112 face = hb_face_get_empty (); |
99 if (unlikely (!props || hb_object_is_inert (face))) | 113 if (unlikely (!props || hb_object_is_inert (face))) |
100 return hb_shape_plan_get_empty (); | 114 return hb_shape_plan_get_empty (); |
101 if (!(shape_plan = hb_object_create<hb_shape_plan_t> ())) | 115 if (!(shape_plan = hb_object_create<hb_shape_plan_t> ())) |
102 return hb_shape_plan_get_empty (); | 116 return hb_shape_plan_get_empty (); |
103 | 117 |
104 hb_face_make_immutable (face); | 118 hb_face_make_immutable (face); |
105 shape_plan->default_shaper_list = shaper_list == NULL; | 119 shape_plan->default_shaper_list = shaper_list == NULL; |
106 shape_plan->face = hb_face_reference (face); | 120 shape_plan->face = hb_face_reference (face); |
107 shape_plan->props = *props; | 121 shape_plan->props = *props; |
108 | 122 |
109 hb_shape_plan_plan (shape_plan, user_features, num_user_features, shaper_list)
; | 123 hb_shape_plan_plan (shape_plan, user_features, num_user_features, shaper_list)
; |
110 | 124 |
111 return shape_plan; | 125 return shape_plan; |
112 } | 126 } |
113 | 127 |
| 128 /** |
| 129 * hb_shape_plan_get_empty: |
| 130 * |
| 131 * |
| 132 * |
| 133 * Return value: (transfer full): |
| 134 * |
| 135 * Since: 1.0 |
| 136 **/ |
114 hb_shape_plan_t * | 137 hb_shape_plan_t * |
115 hb_shape_plan_get_empty (void) | 138 hb_shape_plan_get_empty (void) |
116 { | 139 { |
117 static const hb_shape_plan_t _hb_shape_plan_nil = { | 140 static const hb_shape_plan_t _hb_shape_plan_nil = { |
118 HB_OBJECT_HEADER_STATIC, | 141 HB_OBJECT_HEADER_STATIC, |
119 | 142 |
120 true, /* default_shaper_list */ | 143 true, /* default_shaper_list */ |
121 NULL, /* face */ | 144 NULL, /* face */ |
122 HB_SEGMENT_PROPERTIES_DEFAULT, /* props */ | 145 HB_SEGMENT_PROPERTIES_DEFAULT, /* props */ |
123 | 146 |
124 NULL, /* shaper_func */ | 147 NULL, /* shaper_func */ |
125 NULL, /* shaper_name */ | 148 NULL, /* shaper_name */ |
126 | 149 |
127 { | 150 { |
128 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID, | 151 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID, |
129 #include "hb-shaper-list.hh" | 152 #include "hb-shaper-list.hh" |
130 #undef HB_SHAPER_IMPLEMENT | 153 #undef HB_SHAPER_IMPLEMENT |
131 } | 154 } |
132 }; | 155 }; |
133 | 156 |
134 return const_cast<hb_shape_plan_t *> (&_hb_shape_plan_nil); | 157 return const_cast<hb_shape_plan_t *> (&_hb_shape_plan_nil); |
135 } | 158 } |
136 | 159 |
| 160 /** |
| 161 * hb_shape_plan_reference: (skip) |
| 162 * @shape_plan: a shape plan. |
| 163 * |
| 164 * |
| 165 * |
| 166 * Return value: (transfer full): |
| 167 * |
| 168 * Since: 1.0 |
| 169 **/ |
137 hb_shape_plan_t * | 170 hb_shape_plan_t * |
138 hb_shape_plan_reference (hb_shape_plan_t *shape_plan) | 171 hb_shape_plan_reference (hb_shape_plan_t *shape_plan) |
139 { | 172 { |
140 return hb_object_reference (shape_plan); | 173 return hb_object_reference (shape_plan); |
141 } | 174 } |
142 | 175 |
| 176 /** |
| 177 * hb_shape_plan_destroy: (skip) |
| 178 * @shape_plan: a shape plan. |
| 179 * |
| 180 * |
| 181 * |
| 182 * Since: 1.0 |
| 183 **/ |
143 void | 184 void |
144 hb_shape_plan_destroy (hb_shape_plan_t *shape_plan) | 185 hb_shape_plan_destroy (hb_shape_plan_t *shape_plan) |
145 { | 186 { |
146 if (!hb_object_destroy (shape_plan)) return; | 187 if (!hb_object_destroy (shape_plan)) return; |
147 | 188 |
148 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_DESTROY(shaper, shape_plan); | 189 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_DESTROY(shaper, shape_plan); |
149 #include "hb-shaper-list.hh" | 190 #include "hb-shaper-list.hh" |
150 #undef HB_SHAPER_IMPLEMENT | 191 #undef HB_SHAPER_IMPLEMENT |
151 | 192 |
152 hb_face_destroy (shape_plan->face); | 193 hb_face_destroy (shape_plan->face); |
153 | 194 |
154 free (shape_plan); | 195 free (shape_plan); |
155 } | 196 } |
156 | 197 |
| 198 /** |
| 199 * hb_shape_plan_set_user_data: (skip) |
| 200 * @shape_plan: a shape plan. |
| 201 * @key: |
| 202 * @data: |
| 203 * @destroy: |
| 204 * @replace: |
| 205 * |
| 206 * |
| 207 * |
| 208 * Return value: |
| 209 * |
| 210 * Since: 1.0 |
| 211 **/ |
157 hb_bool_t | 212 hb_bool_t |
158 hb_shape_plan_set_user_data (hb_shape_plan_t *shape_plan, | 213 hb_shape_plan_set_user_data (hb_shape_plan_t *shape_plan, |
159 hb_user_data_key_t *key, | 214 hb_user_data_key_t *key, |
160 void * data, | 215 void * data, |
161 hb_destroy_func_t destroy, | 216 hb_destroy_func_t destroy, |
162 hb_bool_t replace) | 217 hb_bool_t replace) |
163 { | 218 { |
164 return hb_object_set_user_data (shape_plan, key, data, destroy, replace); | 219 return hb_object_set_user_data (shape_plan, key, data, destroy, replace); |
165 } | 220 } |
166 | 221 |
| 222 /** |
| 223 * hb_shape_plan_get_user_data: (skip) |
| 224 * @shape_plan: a shape plan. |
| 225 * @key: |
| 226 * |
| 227 * |
| 228 * |
| 229 * Return value: (transfer none): |
| 230 * |
| 231 * Since: 1.0 |
| 232 **/ |
167 void * | 233 void * |
168 hb_shape_plan_get_user_data (hb_shape_plan_t *shape_plan, | 234 hb_shape_plan_get_user_data (hb_shape_plan_t *shape_plan, |
169 hb_user_data_key_t *key) | 235 hb_user_data_key_t *key) |
170 { | 236 { |
171 return hb_object_get_user_data (shape_plan, key); | 237 return hb_object_get_user_data (shape_plan, key); |
172 } | 238 } |
173 | 239 |
174 | 240 |
| 241 /** |
| 242 * hb_shape_plan_execute: |
| 243 * @shape_plan: a shape plan. |
| 244 * @font: a font. |
| 245 * @buffer: a buffer. |
| 246 * @features: (array length=num_features): |
| 247 * @num_features: |
| 248 * |
| 249 * |
| 250 * |
| 251 * Return value: |
| 252 * |
| 253 * Since: 1.0 |
| 254 **/ |
175 hb_bool_t | 255 hb_bool_t |
176 hb_shape_plan_execute (hb_shape_plan_t *shape_plan, | 256 hb_shape_plan_execute (hb_shape_plan_t *shape_plan, |
177 hb_font_t *font, | 257 hb_font_t *font, |
178 hb_buffer_t *buffer, | 258 hb_buffer_t *buffer, |
179 const hb_feature_t *features, | 259 const hb_feature_t *features, |
180 unsigned int num_features) | 260 unsigned int num_features) |
181 { | 261 { |
182 if (unlikely (hb_object_is_inert (shape_plan) || | 262 if (unlikely (hb_object_is_inert (shape_plan) || |
183 hb_object_is_inert (font) || | 263 hb_object_is_inert (font) || |
184 hb_object_is_inert (buffer))) | 264 hb_object_is_inert (buffer))) |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 | 311 |
232 static hb_bool_t | 312 static hb_bool_t |
233 hb_shape_plan_matches (const hb_shape_plan_t *shape_plan, | 313 hb_shape_plan_matches (const hb_shape_plan_t *shape_plan, |
234 const hb_shape_plan_proposal_t *proposal) | 314 const hb_shape_plan_proposal_t *proposal) |
235 { | 315 { |
236 return hb_segment_properties_equal (&shape_plan->props, &proposal->props) && | 316 return hb_segment_properties_equal (&shape_plan->props, &proposal->props) && |
237 ((shape_plan->default_shaper_list && proposal->shaper_list == NULL) || | 317 ((shape_plan->default_shaper_list && proposal->shaper_list == NULL) || |
238 (shape_plan->shaper_func == proposal->shaper_func)); | 318 (shape_plan->shaper_func == proposal->shaper_func)); |
239 } | 319 } |
240 | 320 |
| 321 /** |
| 322 * hb_shape_plan_create_cached: |
| 323 * @face: |
| 324 * @props: |
| 325 * @user_features: (array length=num_user_features): |
| 326 * @num_user_features: |
| 327 * @shaper_list: (array zero-terminated=1): |
| 328 * |
| 329 * |
| 330 * |
| 331 * Return value: (transfer full): |
| 332 * |
| 333 * Since: 1.0 |
| 334 **/ |
241 hb_shape_plan_t * | 335 hb_shape_plan_t * |
242 hb_shape_plan_create_cached (hb_face_t *face, | 336 hb_shape_plan_create_cached (hb_face_t *face, |
243 const hb_segment_properties_t *props, | 337 const hb_segment_properties_t *props, |
244 const hb_feature_t *user_features, | 338 const hb_feature_t *user_features, |
245 unsigned int num_user_features, | 339 unsigned int num_user_features, |
246 const char * const *shaper_list) | 340 const char * const *shaper_list) |
247 { | 341 { |
248 if (num_user_features) | 342 if (num_user_features) |
249 return hb_shape_plan_create (face, props, user_features, num_user_features,
shaper_list); | 343 return hb_shape_plan_create (face, props, user_features, num_user_features,
shaper_list); |
250 | 344 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 free (node); | 394 free (node); |
301 goto retry; | 395 goto retry; |
302 } | 396 } |
303 | 397 |
304 /* Release our reference on face. */ | 398 /* Release our reference on face. */ |
305 hb_face_destroy (face); | 399 hb_face_destroy (face); |
306 | 400 |
307 return hb_shape_plan_reference (shape_plan); | 401 return hb_shape_plan_reference (shape_plan); |
308 } | 402 } |
309 | 403 |
| 404 /** |
| 405 * hb_shape_plan_get_shaper: |
| 406 * @shape_plan: a shape plan. |
| 407 * |
| 408 * |
| 409 * |
| 410 * Return value: (transfer none): |
| 411 * |
| 412 * Since: 1.0 |
| 413 **/ |
310 const char * | 414 const char * |
311 hb_shape_plan_get_shaper (hb_shape_plan_t *shape_plan) | 415 hb_shape_plan_get_shaper (hb_shape_plan_t *shape_plan) |
312 { | 416 { |
313 return shape_plan->shaper_name; | 417 return shape_plan->shaper_name; |
314 } | 418 } |
OLD | NEW |