Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(207)

Side by Side Diff: third_party/harfbuzz-ng/src/hb-ot-map-private.hh

Issue 16053004: Update harfbuzz-ng to 0.9.17 (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/harfbuzz-ng/src/hb-ot-map.cc ('k') | third_party/harfbuzz-ng/src/hb-ot-shape.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright © 2009,2010 Red Hat, Inc. 2 * Copyright © 2009,2010 Red Hat, Inc.
3 * Copyright © 2010,2011,2012 Google, Inc. 3 * Copyright © 2010,2011,2012,2013 Google, Inc.
4 * 4 *
5 * This is part of HarfBuzz, a text shaping library. 5 * This is part of HarfBuzz, a text shaping library.
6 * 6 *
7 * Permission is hereby granted, without written agreement and without 7 * Permission is hereby granted, without written agreement and without
8 * license or royalty fees, to use, copy, modify, and distribute this 8 * license or royalty fees, to use, copy, modify, and distribute this
9 * software and its documentation for any purpose, provided that the 9 * software and its documentation for any purpose, provided that the
10 * above copyright notice and the following two paragraphs appear in 10 * above copyright notice and the following two paragraphs appear in
11 * all copies of this software. 11 * all copies of this software.
12 * 12 *
13 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 13 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
(...skipping 10 matching lines...) Expand all
24 * 24 *
25 * Red Hat Author(s): Behdad Esfahbod 25 * Red Hat Author(s): Behdad Esfahbod
26 * Google Author(s): Behdad Esfahbod 26 * Google Author(s): Behdad Esfahbod
27 */ 27 */
28 28
29 #ifndef HB_OT_MAP_PRIVATE_HH 29 #ifndef HB_OT_MAP_PRIVATE_HH
30 #define HB_OT_MAP_PRIVATE_HH 30 #define HB_OT_MAP_PRIVATE_HH
31 31
32 #include "hb-buffer-private.hh" 32 #include "hb-buffer-private.hh"
33 33
34 #include "hb-ot-layout-private.hh"
35 34
35 struct hb_ot_shape_plan_t;
36 36
37 static const hb_tag_t table_tags[2] = {HB_OT_TAG_GSUB, HB_OT_TAG_GPOS}; 37 static const hb_tag_t table_tags[2] = {HB_OT_TAG_GSUB, HB_OT_TAG_GPOS};
38 38
39 struct hb_ot_map_t 39 struct hb_ot_map_t
40 { 40 {
41 friend struct hb_ot_map_builder_t; 41 friend struct hb_ot_map_builder_t;
42 42
43 public: 43 public:
44 44
45 struct feature_map_t { 45 struct feature_map_t {
(...skipping 14 matching lines...) Expand all
60 unsigned short index; 60 unsigned short index;
61 unsigned short auto_zwj : 1; 61 unsigned short auto_zwj : 1;
62 hb_mask_t mask; 62 hb_mask_t mask;
63 63
64 static int cmp (const lookup_map_t *a, const lookup_map_t *b) 64 static int cmp (const lookup_map_t *a, const lookup_map_t *b)
65 { return a->index < b->index ? -1 : a->index > b->index ? 1 : 0; } 65 { return a->index < b->index ? -1 : a->index > b->index ? 1 : 0; }
66 }; 66 };
67 67
68 typedef void (*pause_func_t) (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer); 68 typedef void (*pause_func_t) (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer);
69 69
70 struct pause_map_t { 70 struct stage_map_t {
71 unsigned int num_lookups; /* Cumulative */ 71 unsigned int last_lookup; /* Cumulative */
72 pause_func_t callback; 72 pause_func_t pause_func;
73 }; 73 };
74 74
75 75
76 hb_ot_map_t (void) { memset (this, 0, sizeof (*this)); } 76 hb_ot_map_t (void) { memset (this, 0, sizeof (*this)); }
77 77
78 inline hb_mask_t get_global_mask (void) const { return global_mask; } 78 inline hb_mask_t get_global_mask (void) const { return global_mask; }
79 79
80 inline hb_mask_t get_mask (hb_tag_t feature_tag, unsigned int *shift = NULL) c onst { 80 inline hb_mask_t get_mask (hb_tag_t feature_tag, unsigned int *shift = NULL) c onst {
81 const feature_map_t *map = features.bsearch (&feature_tag); 81 const feature_map_t *map = features.bsearch (&feature_tag);
82 if (shift) *shift = map ? map->shift : 0; 82 if (shift) *shift = map ? map->shift : 0;
(...skipping 20 matching lines...) Expand all
103 return map ? map->stage[table_index] : (unsigned int) -1; 103 return map ? map->stage[table_index] : (unsigned int) -1;
104 } 104 }
105 105
106 inline void get_stage_lookups (unsigned int table_index, unsigned int stage, 106 inline void get_stage_lookups (unsigned int table_index, unsigned int stage,
107 const struct lookup_map_t **plookups, unsigned int *lookup_count) const { 107 const struct lookup_map_t **plookups, unsigned int *lookup_count) const {
108 if (unlikely (stage == (unsigned int) -1)) { 108 if (unlikely (stage == (unsigned int) -1)) {
109 *plookups = NULL; 109 *plookups = NULL;
110 *lookup_count = 0; 110 *lookup_count = 0;
111 return; 111 return;
112 } 112 }
113 assert (stage <= pauses[table_index].len); 113 assert (stage <= stages[table_index].len);
114 unsigned int start = stage ? pauses[table_index][stage - 1].num_lookups : 0; 114 unsigned int start = stage ? stages[table_index][stage - 1].last_lookup : 0;
115 unsigned int end = stage < pauses[table_index].len ? pauses[table_index][s tage].num_lookups : lookups[table_index].len; 115 unsigned int end = stage < stages[table_index].len ? stages[table_index][s tage].last_lookup : lookups[table_index].len;
116 *plookups = &lookups[table_index][start]; 116 *plookups = &lookups[table_index][start];
117 *lookup_count = end - start; 117 *lookup_count = end - start;
118 } 118 }
119 119
120 HB_INTERNAL void collect_lookups (unsigned int table_index, hb_set_t *lookups) const; 120 HB_INTERNAL void collect_lookups (unsigned int table_index, hb_set_t *lookups) const;
121 HB_INTERNAL inline void apply (unsigned int table_index,
122 const struct hb_ot_shape_plan_t *plan,
123 hb_font_t *font,
124 hb_buffer_t *buffer) const;
121 HB_INTERNAL void substitute (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const; 125 HB_INTERNAL void substitute (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;
122 HB_INTERNAL void position (const struct hb_ot_shape_plan_t *plan, hb_font_t *f ont, hb_buffer_t *buffer) const; 126 HB_INTERNAL void position (const struct hb_ot_shape_plan_t *plan, hb_font_t *f ont, hb_buffer_t *buffer) const;
123 127
124 inline void finish (void) { 128 inline void finish (void) {
125 features.finish (); 129 features.finish ();
126 lookups[0].finish (); 130 for (unsigned int table_index = 0; table_index < 2; table_index++)
127 lookups[1].finish (); 131 {
128 pauses[0].finish (); 132 lookups[table_index].finish ();
129 pauses[1].finish (); 133 stages[table_index].finish ();
134 }
130 } 135 }
131 136
132 public: 137 public:
133 hb_tag_t chosen_script[2]; 138 hb_tag_t chosen_script[2];
134 bool found_script[2]; 139 bool found_script[2];
135 140
136 private: 141 private:
137 142
138 HB_INTERNAL void add_lookups (hb_face_t *face, 143 HB_INTERNAL void add_lookups (hb_face_t *face,
139 unsigned int table_index, 144 unsigned int table_index,
140 unsigned int feature_index, 145 unsigned int feature_index,
141 hb_mask_t mask, 146 hb_mask_t mask,
142 bool auto_zwj); 147 bool auto_zwj);
143 148
144 hb_mask_t global_mask; 149 hb_mask_t global_mask;
145 150
146 hb_prealloced_array_t<feature_map_t, 8> features; 151 hb_prealloced_array_t<feature_map_t, 8> features;
147 hb_prealloced_array_t<lookup_map_t, 32> lookups[2]; /* GSUB/GPOS */ 152 hb_prealloced_array_t<lookup_map_t, 32> lookups[2]; /* GSUB/GPOS */
148 hb_prealloced_array_t<pause_map_t, 1> pauses[2]; /* GSUB/GPOS */ 153 hb_prealloced_array_t<stage_map_t, 4> stages[2]; /* GSUB/GPOS */
149 }; 154 };
150 155
151 enum hb_ot_map_feature_flags_t { 156 enum hb_ot_map_feature_flags_t {
152 F_NONE = 0x0000, 157 F_NONE = 0x0000,
153 F_GLOBAL = 0x0001, 158 F_GLOBAL = 0x0001,
154 F_HAS_FALLBACK = 0x0002, 159 F_HAS_FALLBACK = 0x0002,
155 F_MANUAL_ZWJ = 0x0004 160 F_MANUAL_ZWJ = 0x0004
156 }; 161 };
157 /* Macro version for where const is desired. */ 162 /* Macro version for where const is desired. */
158 #define F_COMBINE(l,r) (hb_ot_map_feature_flags_t ((unsigned int) (l) | (unsigne d int) (r))) 163 #define F_COMBINE(l,r) (hb_ot_map_feature_flags_t ((unsigned int) (l) | (unsigne d int) (r)))
(...skipping 29 matching lines...) Expand all
188 193
189 inline void add_gsub_pause (hb_ot_map_t::pause_func_t pause_func) 194 inline void add_gsub_pause (hb_ot_map_t::pause_func_t pause_func)
190 { add_pause (0, pause_func); } 195 { add_pause (0, pause_func); }
191 inline void add_gpos_pause (hb_ot_map_t::pause_func_t pause_func) 196 inline void add_gpos_pause (hb_ot_map_t::pause_func_t pause_func)
192 { add_pause (1, pause_func); } 197 { add_pause (1, pause_func); }
193 198
194 HB_INTERNAL void compile (struct hb_ot_map_t &m); 199 HB_INTERNAL void compile (struct hb_ot_map_t &m);
195 200
196 inline void finish (void) { 201 inline void finish (void) {
197 feature_infos.finish (); 202 feature_infos.finish ();
198 pauses[0].finish (); 203 for (unsigned int table_index = 0; table_index < 2; table_index++)
199 pauses[1].finish (); 204 {
205 stages[table_index].finish ();
206 }
200 } 207 }
201 208
202 private: 209 private:
203 210
204 struct feature_info_t { 211 struct feature_info_t {
205 hb_tag_t tag; 212 hb_tag_t tag;
206 unsigned int seq; /* sequence#, used for stable sorting only */ 213 unsigned int seq; /* sequence#, used for stable sorting only */
207 unsigned int max_value; 214 unsigned int max_value;
208 hb_ot_map_feature_flags_t flags; 215 hb_ot_map_feature_flags_t flags;
209 unsigned int default_value; /* for non-global features, what should the unse t glyphs take */ 216 unsigned int default_value; /* for non-global features, what should the unse t glyphs take */
210 unsigned int stage[2]; /* GSUB/GPOS */ 217 unsigned int stage[2]; /* GSUB/GPOS */
211 218
212 static int cmp (const feature_info_t *a, const feature_info_t *b) 219 static int cmp (const feature_info_t *a, const feature_info_t *b)
213 { return (a->tag != b->tag) ? (a->tag < b->tag ? -1 : 1) : (a->seq < b->seq ? -1 : 1); } 220 { return (a->tag != b->tag) ? (a->tag < b->tag ? -1 : 1) : (a->seq < b->seq ? -1 : 1); }
214 }; 221 };
215 222
216 struct pause_info_t { 223 struct stage_info_t {
217 unsigned int stage; 224 unsigned int index;
218 hb_ot_map_t::pause_func_t callback; 225 hb_ot_map_t::pause_func_t pause_func;
219 }; 226 };
220 227
221 HB_INTERNAL void add_pause (unsigned int table_index, hb_ot_map_t::pause_func_ t pause_func); 228 HB_INTERNAL void add_pause (unsigned int table_index, hb_ot_map_t::pause_func_ t pause_func);
222 229
223 public: 230 public:
224 231
225 hb_face_t *face; 232 hb_face_t *face;
226 hb_segment_properties_t props; 233 hb_segment_properties_t props;
227 234
228 hb_tag_t chosen_script[2]; 235 hb_tag_t chosen_script[2];
229 bool found_script[2]; 236 bool found_script[2];
230 unsigned int script_index[2], language_index[2]; 237 unsigned int script_index[2], language_index[2];
231 238
232 private: 239 private:
233 240
234 unsigned int current_stage[2]; /* GSUB/GPOS */ 241 unsigned int current_stage[2]; /* GSUB/GPOS */
235 hb_prealloced_array_t<feature_info_t,16> feature_infos; 242 hb_prealloced_array_t<feature_info_t, 32> feature_infos;
236 hb_prealloced_array_t<pause_info_t, 1> pauses[2]; /* GSUB/GPOS */ 243 hb_prealloced_array_t<stage_info_t, 8> stages[2]; /* GSUB/GPOS */
237 }; 244 };
238 245
239 246
240 247
241 #endif /* HB_OT_MAP_PRIVATE_HH */ 248 #endif /* HB_OT_MAP_PRIVATE_HH */
OLDNEW
« no previous file with comments | « third_party/harfbuzz-ng/src/hb-ot-map.cc ('k') | third_party/harfbuzz-ng/src/hb-ot-shape.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698