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

Side by Side Diff: third_party/harfbuzz-ng/src/hb-shape.cc

Issue 12438036: Update harfbuzz-ng to 0.9.14 from 0.9.10 (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 8 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
OLDNEW
1 /* 1 /*
2 * Copyright © 2009 Red Hat, Inc. 2 * Copyright © 2009 Red Hat, Inc.
3 * Copyright © 2012 Google, Inc. 3 * Copyright © 2012 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
(...skipping 20 matching lines...) Expand all
31 #include "hb-shaper-private.hh" 31 #include "hb-shaper-private.hh"
32 #include "hb-shape-plan-private.hh" 32 #include "hb-shape-plan-private.hh"
33 #include "hb-buffer-private.hh" 33 #include "hb-buffer-private.hh"
34 #include "hb-font-private.hh" 34 #include "hb-font-private.hh"
35 35
36 36
37 static void 37 static void
38 parse_space (const char **pp, const char *end) 38 parse_space (const char **pp, const char *end)
39 { 39 {
40 char c; 40 char c;
41 #define ISSPACE(c) ((c)==' '||(c)=='\f'||(c)=='\n'||(c)=='\r'||(c)=='\t'||(c)==' \v')
42 while (*pp < end && (c = **pp, ISSPACE (c))) 41 while (*pp < end && (c = **pp, ISSPACE (c)))
43 (*pp)++; 42 (*pp)++;
44 #undef ISSPACE
45 } 43 }
46 44
47 static hb_bool_t 45 static hb_bool_t
48 parse_char (const char **pp, const char *end, char c) 46 parse_char (const char **pp, const char *end, char c)
49 { 47 {
50 parse_space (pp, end); 48 parse_space (pp, end);
51 49
52 if (*pp == end || **pp != c) 50 if (*pp == end || **pp != c)
53 return false; 51 return false;
54 52
55 (*pp)++; 53 (*pp)++;
56 return true; 54 return true;
57 } 55 }
58 56
59 static hb_bool_t 57 static hb_bool_t
60 parse_uint (const char **pp, const char *end, unsigned int *pv) 58 parse_uint (const char **pp, const char *end, unsigned int *pv)
61 { 59 {
62 char buf[32]; 60 char buf[32];
63 strncpy (buf, *pp, end - *pp); 61 unsigned int len = MIN (ARRAY_LENGTH (buf) - 1, (unsigned int) (end - *pp));
64 buf[ARRAY_LENGTH (buf) - 1] = '\0'; 62 strncpy (buf, *pp, len);
63 buf[len] = '\0';
65 64
66 char *p = buf; 65 char *p = buf;
67 char *pend = p; 66 char *pend = p;
68 unsigned int v; 67 unsigned int v;
69 68
69 /* Intentionally use strtol instead of strtoul, such that
70 * -1 turns into "big number"... */
71 errno = 0;
70 v = strtol (p, &pend, 0); 72 v = strtol (p, &pend, 0);
71 73 if (errno || p == pend)
72 if (p == pend)
73 return false; 74 return false;
74 75
75 *pv = v; 76 *pv = v;
76 *pp += pend - p; 77 *pp += pend - p;
77 return true; 78 return true;
78 } 79 }
79 80
80 static hb_bool_t 81 static hb_bool_t
81 parse_feature_value_prefix (const char **pp, const char *end, hb_feature_t *feat ure) 82 parse_feature_value_prefix (const char **pp, const char *end, hb_feature_t *feat ure)
82 { 83 {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 } 196 }
196 assert (len < ARRAY_LENGTH (s)); 197 assert (len < ARRAY_LENGTH (s));
197 len = MIN (len, size - 1); 198 len = MIN (len, size - 1);
198 memcpy (buf, s, len); 199 memcpy (buf, s, len);
199 s[len] = '\0'; 200 s[len] = '\0';
200 } 201 }
201 202
202 203
203 static const char **static_shaper_list; 204 static const char **static_shaper_list;
204 205
205 static 206 static inline
206 void free_static_shaper_list (void) 207 void free_static_shaper_list (void)
207 { 208 {
208 free (static_shaper_list); 209 free (static_shaper_list);
209 } 210 }
210 211
211 const char ** 212 const char **
212 hb_shape_list_shapers (void) 213 hb_shape_list_shapers (void)
213 { 214 {
214 retry: 215 retry:
215 const char **shaper_list = (const char **) hb_atomic_ptr_get (&static_shaper_l ist); 216 const char **shaper_list = (const char **) hb_atomic_ptr_get (&static_shaper_l ist);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 hb_buffer_t *buffer, 249 hb_buffer_t *buffer,
249 const hb_feature_t *features, 250 const hb_feature_t *features,
250 unsigned int num_features, 251 unsigned int num_features,
251 const char * const *shaper_list) 252 const char * const *shaper_list)
252 { 253 {
253 if (unlikely (!buffer->len)) 254 if (unlikely (!buffer->len))
254 return true; 255 return true;
255 256
256 assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE); 257 assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE);
257 258
258 buffer->guess_segment_properties ();
259
260 hb_shape_plan_t *shape_plan = hb_shape_plan_create_cached (font->face, &buffer ->props, features, num_features, shaper_list); 259 hb_shape_plan_t *shape_plan = hb_shape_plan_create_cached (font->face, &buffer ->props, features, num_features, shaper_list);
261 hb_bool_t res = hb_shape_plan_execute (shape_plan, font, buffer, features, num _features); 260 hb_bool_t res = hb_shape_plan_execute (shape_plan, font, buffer, features, num _features);
262 hb_shape_plan_destroy (shape_plan); 261 hb_shape_plan_destroy (shape_plan);
263 262
264 if (res) 263 if (res)
265 buffer->content_type = HB_BUFFER_CONTENT_TYPE_GLYPHS; 264 buffer->content_type = HB_BUFFER_CONTENT_TYPE_GLYPHS;
266 return res; 265 return res;
267 } 266 }
268 267
269 void 268 void
270 hb_shape (hb_font_t *font, 269 hb_shape (hb_font_t *font,
271 hb_buffer_t *buffer, 270 hb_buffer_t *buffer,
272 const hb_feature_t *features, 271 const hb_feature_t *features,
273 unsigned int num_features) 272 unsigned int num_features)
274 { 273 {
275 hb_shape_full (font, buffer, features, num_features, NULL); 274 hb_shape_full (font, buffer, features, num_features, NULL);
276 } 275 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698