OLD | NEW |
1 /* | 1 /* |
2 * Copyright © 2011 Google, Inc. | 2 * Copyright © 2011 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. |
11 * | 11 * |
12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR | 12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR |
13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES | 13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES |
14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN | 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 | 15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH |
16 * DAMAGE. | 16 * DAMAGE. |
17 * | 17 * |
18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, | 18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND | 19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND |
20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS | 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 | 21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO |
22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. | 22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
23 * | 23 * |
24 * Google Author(s): Behdad Esfahbod | 24 * Google Author(s): Behdad Esfahbod |
25 */ | 25 */ |
26 | 26 |
27 #include "hb-fallback-shape-private.hh" | 27 #define HB_SHAPER fallback |
| 28 #include "hb-shaper-impl-private.hh" |
28 | 29 |
29 #include "hb-buffer-private.hh" | 30 |
| 31 /* |
| 32 * shaper face data |
| 33 */ |
| 34 |
| 35 struct hb_fallback_shaper_face_data_t {}; |
| 36 |
| 37 hb_fallback_shaper_face_data_t * |
| 38 _hb_fallback_shaper_face_data_create (hb_face_t *face) |
| 39 { |
| 40 return (hb_fallback_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED; |
| 41 } |
| 42 |
| 43 void |
| 44 _hb_fallback_shaper_face_data_destroy (hb_fallback_shaper_face_data_t *data) |
| 45 { |
| 46 } |
| 47 |
| 48 |
| 49 /* |
| 50 * shaper font data |
| 51 */ |
| 52 |
| 53 struct hb_fallback_shaper_font_data_t {}; |
| 54 |
| 55 hb_fallback_shaper_font_data_t * |
| 56 _hb_fallback_shaper_font_data_create (hb_font_t *font) |
| 57 { |
| 58 return (hb_fallback_shaper_font_data_t *) HB_SHAPER_DATA_SUCCEEDED; |
| 59 } |
| 60 |
| 61 void |
| 62 _hb_fallback_shaper_font_data_destroy (hb_fallback_shaper_font_data_t *data) |
| 63 { |
| 64 } |
| 65 |
| 66 |
| 67 /* |
| 68 * shaper shape_plan data |
| 69 */ |
| 70 |
| 71 struct hb_fallback_shaper_shape_plan_data_t {}; |
| 72 |
| 73 hb_fallback_shaper_shape_plan_data_t * |
| 74 _hb_fallback_shaper_shape_plan_data_create (hb_shape_plan_t *shape_plan HB_UN
USED, |
| 75 » » » » » const hb_feature_t *user_features HB
_UNUSED, |
| 76 » » » » » unsigned int num_user_feature
s HB_UNUSED) |
| 77 { |
| 78 return (hb_fallback_shaper_shape_plan_data_t *) HB_SHAPER_DATA_SUCCEEDED; |
| 79 } |
| 80 |
| 81 void |
| 82 _hb_fallback_shaper_shape_plan_data_destroy (hb_fallback_shaper_shape_plan_data_
t *data HB_UNUSED) |
| 83 { |
| 84 } |
| 85 |
| 86 |
| 87 /* |
| 88 * shaper |
| 89 */ |
30 | 90 |
31 hb_bool_t | 91 hb_bool_t |
32 _hb_fallback_shape (hb_font_t *font, | 92 _hb_fallback_shape (hb_shape_plan_t *shape_plan, |
| 93 » » hb_font_t *font, |
33 hb_buffer_t *buffer, | 94 hb_buffer_t *buffer, |
34 const hb_feature_t *features HB_UNUSED, | 95 const hb_feature_t *features HB_UNUSED, |
35 unsigned int num_features HB_UNUSED) | 96 unsigned int num_features HB_UNUSED) |
36 { | 97 { |
| 98 hb_codepoint_t space; |
| 99 font->get_glyph (' ', 0, &space); |
| 100 |
37 buffer->guess_properties (); | 101 buffer->guess_properties (); |
| 102 buffer->clear_positions (); |
38 | 103 |
39 unsigned int count = buffer->len; | 104 unsigned int count = buffer->len; |
40 | 105 |
41 for (unsigned int i = 0; i < count; i++) | 106 for (unsigned int i = 0; i < count; i++) |
42 hb_font_get_glyph (font, buffer->info[i].codepoint, 0, &buffer->info[i].code
point); | 107 { |
43 | 108 if (buffer->unicode->is_zero_width (buffer->info[i].codepoint)) { |
44 buffer->clear_positions (); | 109 buffer->info[i].codepoint = space; |
45 | 110 buffer->pos[i].x_advance = 0; |
46 for (unsigned int i = 0; i < count; i++) { | 111 buffer->pos[i].y_advance = 0; |
47 hb_font_get_glyph_advance_for_direction (font, buffer->info[i].codepoint, | 112 continue; |
48 » » » » » buffer->props.direction, | 113 } |
49 » » » » » &buffer->pos[i].x_advance, | 114 font->get_glyph (buffer->info[i].codepoint, 0, &buffer->info[i].codepoint); |
50 » » » » » &buffer->pos[i].y_advance); | 115 font->get_glyph_advance_for_direction (buffer->info[i].codepoint, |
51 hb_font_subtract_glyph_origin_for_direction (font, buffer->info[i].codepoint
, | 116 » » » » » buffer->props.direction, |
52 » » » » » » buffer->props.direction, | 117 » » » » » &buffer->pos[i].x_advance, |
53 » » » » » » &buffer->pos[i].x_offset, | 118 » » » » » &buffer->pos[i].y_advance); |
54 » » » » » » &buffer->pos[i].y_offset); | 119 font->subtract_glyph_origin_for_direction (buffer->info[i].codepoint, |
| 120 » » » » » buffer->props.direction, |
| 121 » » » » » &buffer->pos[i].x_offset, |
| 122 » » » » » &buffer->pos[i].y_offset); |
55 } | 123 } |
56 | 124 |
57 if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction)) | 125 if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction)) |
58 hb_buffer_reverse (buffer); | 126 hb_buffer_reverse (buffer); |
59 | 127 |
60 return true; | 128 return true; |
61 } | 129 } |
OLD | NEW |