| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright © 2007,2008,2009  Red Hat, Inc. | 2  * Copyright © 2007,2008,2009  Red Hat, Inc. | 
| 3  * Copyright © 2011,2012  Google, Inc. | 3  * Copyright © 2011,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 358 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 369 | 369 | 
| 370   inline void finish (void) | 370   inline void finish (void) | 
| 371   { | 371   { | 
| 372     if (array != static_array) | 372     if (array != static_array) | 
| 373       free (array); | 373       free (array); | 
| 374     array = NULL; | 374     array = NULL; | 
| 375     allocated = len = 0; | 375     allocated = len = 0; | 
| 376   } | 376   } | 
| 377 }; | 377 }; | 
| 378 | 378 | 
|  | 379 #define HB_AUTO_ARRAY_PREALLOCED 64 | 
|  | 380 template <typename Type> | 
|  | 381 struct hb_auto_array_t : hb_prealloced_array_t <Type, HB_AUTO_ARRAY_PREALLOCED> | 
|  | 382 { | 
|  | 383   hb_auto_array_t (void) { hb_prealloced_array_t<Type, HB_AUTO_ARRAY_PREALLOCED>
     ::init (); } | 
|  | 384   ~hb_auto_array_t (void) { hb_prealloced_array_t<Type, HB_AUTO_ARRAY_PREALLOCED
     >::finish (); } | 
|  | 385 }; | 
|  | 386 | 
| 379 | 387 | 
| 380 #define HB_LOCKABLE_SET_INIT {HB_PREALLOCED_ARRAY_INIT} | 388 #define HB_LOCKABLE_SET_INIT {HB_PREALLOCED_ARRAY_INIT} | 
| 381 template <typename item_t, typename lock_t> | 389 template <typename item_t, typename lock_t> | 
| 382 struct hb_lockable_set_t | 390 struct hb_lockable_set_t | 
| 383 { | 391 { | 
| 384   hb_prealloced_array_t <item_t, 2> items; | 392   hb_prealloced_array_t <item_t, 2> items; | 
| 385 | 393 | 
| 386   inline void init (void) { items.init (); } | 394   inline void init (void) { items.init (); } | 
| 387 | 395 | 
| 388   template <typename T> | 396   template <typename T> | 
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 509 #define hb_be_uint32_get(v)     (uint32_t) ((v[0] << 24) + (v[1] << 16) + (v[2] 
     << 8) + v[3]) | 517 #define hb_be_uint32_get(v)     (uint32_t) ((v[0] << 24) + (v[1] << 16) + (v[2] 
     << 8) + v[3]) | 
| 510 #define hb_be_uint32_eq(a,b)    (a[0] == b[0] && a[1] == b[1] && a[2] == b[2] &&
      a[3] == b[3]) | 518 #define hb_be_uint32_eq(a,b)    (a[0] == b[0] && a[1] == b[1] && a[2] == b[2] &&
      a[3] == b[3]) | 
| 511 | 519 | 
| 512 #define hb_be_uint24_put(v,V)   HB_STMT_START { v[0] = (V>>16); v[1] = (V>>8); v
     [2] (V); } HB_STMT_END | 520 #define hb_be_uint24_put(v,V)   HB_STMT_START { v[0] = (V>>16); v[1] = (V>>8); v
     [2] (V); } HB_STMT_END | 
| 513 #define hb_be_uint24_get(v)     (uint32_t) ((v[0] << 16) + (v[1] << 8) + v[2]) | 521 #define hb_be_uint24_get(v)     (uint32_t) ((v[0] << 16) + (v[1] << 8) + v[2]) | 
| 514 #define hb_be_uint24_eq(a,b)    (a[0] == b[0] && a[1] == b[1] && a[2] == b[2]) | 522 #define hb_be_uint24_eq(a,b)    (a[0] == b[0] && a[1] == b[1] && a[2] == b[2]) | 
| 515 | 523 | 
| 516 | 524 | 
| 517 /* ASCII tag/character handling */ | 525 /* ASCII tag/character handling */ | 
| 518 | 526 | 
| 519 static inline unsigned char ISALPHA (unsigned char c) | 527 static inline bool ISALPHA (unsigned char c) | 
| 520 { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); } | 528 { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); } | 
| 521 static inline unsigned char ISALNUM (unsigned char c) | 529 static inline bool ISALNUM (unsigned char c) | 
| 522 { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '
     9'); } | 530 { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '
     9'); } | 
|  | 531 static inline bool ISSPACE (unsigned char c) | 
|  | 532 { return c == ' ' || c =='\f'|| c =='\n'|| c =='\r'|| c =='\t'|| c =='\v'; } | 
| 523 static inline unsigned char TOUPPER (unsigned char c) | 533 static inline unsigned char TOUPPER (unsigned char c) | 
| 524 { return (c >= 'a' && c <= 'z') ? c - 'a' + 'A' : c; } | 534 { return (c >= 'a' && c <= 'z') ? c - 'a' + 'A' : c; } | 
| 525 static inline unsigned char TOLOWER (unsigned char c) | 535 static inline unsigned char TOLOWER (unsigned char c) | 
| 526 { return (c >= 'A' && c <= 'Z') ? c - 'A' + 'a' : c; } | 536 { return (c >= 'A' && c <= 'Z') ? c - 'A' + 'a' : c; } | 
| 527 | 537 | 
| 528 #define HB_TAG_CHAR4(s)   (HB_TAG(((const char *) s)[0], \ | 538 #define HB_TAG_CHAR4(s)   (HB_TAG(((const char *) s)[0], \ | 
| 529                                   ((const char *) s)[1], \ | 539                                   ((const char *) s)[1], \ | 
| 530                                   ((const char *) s)[2], \ | 540                                   ((const char *) s)[2], \ | 
| 531                                   ((const char *) s)[3])) | 541                                   ((const char *) s)[3])) | 
| 532 | 542 | 
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 587     static const char bars[] = VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
      VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
      VBAR VBAR VBAR VBAR; | 597     static const char bars[] = VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
      VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
      VBAR VBAR VBAR VBAR; | 
| 588     fprintf (stderr, "%2d %s" VRBAR "%s", | 598     fprintf (stderr, "%2d %s" VRBAR "%s", | 
| 589              level, | 599              level, | 
| 590              bars + sizeof (bars) - 1 - MIN ((unsigned int) sizeof (bars), (unsi
     gned int) (sizeof (VBAR) - 1) * level), | 600              bars + sizeof (bars) - 1 - MIN ((unsigned int) sizeof (bars), (unsi
     gned int) (sizeof (VBAR) - 1) * level), | 
| 591              level_dir ? (level_dir > 0 ? DLBAR : ULBAR) : LBAR); | 601              level_dir ? (level_dir > 0 ? DLBAR : ULBAR) : LBAR); | 
| 592   } else | 602   } else | 
| 593     fprintf (stderr, "   " VRBAR LBAR); | 603     fprintf (stderr, "   " VRBAR LBAR); | 
| 594 | 604 | 
| 595   if (func) | 605   if (func) | 
| 596   { | 606   { | 
|  | 607     unsigned int func_len = strlen (func); | 
|  | 608 #ifndef HB_DEBUG_VERBOSE | 
| 597     /* Skip "typename" */ | 609     /* Skip "typename" */ | 
| 598     if (0 == strncmp (func, "typename ", 9)) | 610     if (0 == strncmp (func, "typename ", 9)) | 
| 599       func += 9; | 611       func += 9; | 
| 600     /* Skip return type */ | 612     /* Skip return type */ | 
| 601     const char *space = strchr (func, ' '); | 613     const char *space = strchr (func, ' '); | 
| 602     if (space) | 614     if (space) | 
| 603       func = space + 1; | 615       func = space + 1; | 
| 604     /* Skip parameter list */ | 616     /* Skip parameter list */ | 
| 605     const char *paren = strchr (func, '('); | 617     const char *paren = strchr (func, '('); | 
| 606     unsigned int func_len = paren ? paren - func : strlen (func); | 618     if (paren) | 
|  | 619       func_len = paren - func; | 
|  | 620 #endif | 
| 607     fprintf (stderr, "%.*s: ", func_len, func); | 621     fprintf (stderr, "%.*s: ", func_len, func); | 
| 608   } | 622   } | 
| 609 | 623 | 
| 610   if (message) | 624   if (message) | 
| 611     vfprintf (stderr, message, ap); | 625     vfprintf (stderr, message, ap); | 
| 612 | 626 | 
| 613   fprintf (stderr, "\n"); | 627   fprintf (stderr, "\n"); | 
| 614 } | 628 } | 
| 615 template <> inline void | 629 template <> inline void | 
| 616 _hb_debug_msg_va<0> (const char *what HB_UNUSED, | 630 _hb_debug_msg_va<0> (const char *what HB_UNUSED, | 
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 834 hb_bubble_sort (T *array, unsigned int len, int(*compar)(const T *, const T *)) | 848 hb_bubble_sort (T *array, unsigned int len, int(*compar)(const T *, const T *)) | 
| 835 { | 849 { | 
| 836   hb_bubble_sort (array, len, compar, (int *) NULL); | 850   hb_bubble_sort (array, len, compar, (int *) NULL); | 
| 837 } | 851 } | 
| 838 | 852 | 
| 839 static inline hb_bool_t | 853 static inline hb_bool_t | 
| 840 hb_codepoint_parse (const char *s, unsigned int len, int base, hb_codepoint_t *o
     ut) | 854 hb_codepoint_parse (const char *s, unsigned int len, int base, hb_codepoint_t *o
     ut) | 
| 841 { | 855 { | 
| 842   /* Pain because we don't know whether s is nul-terminated. */ | 856   /* Pain because we don't know whether s is nul-terminated. */ | 
| 843   char buf[64]; | 857   char buf[64]; | 
| 844   strncpy (buf, s, MIN (ARRAY_LENGTH (buf) - 1, len)); | 858   len = MIN (ARRAY_LENGTH (buf) - 1, len); | 
| 845   buf[MIN (ARRAY_LENGTH (buf) - 1, len)] = '\0'; | 859   strncpy (buf, s, len); | 
|  | 860   buf[len] = '\0'; | 
| 846 | 861 | 
| 847   char *end; | 862   char *end; | 
| 848   errno = 0; | 863   errno = 0; | 
| 849   unsigned long v = strtoul (buf, &end, base); | 864   unsigned long v = strtoul (buf, &end, base); | 
| 850   if (errno) return false; | 865   if (errno) return false; | 
| 851   if (*end) return false; | 866   if (*end) return false; | 
| 852   *out = v; | 867   *out = v; | 
| 853   return true; | 868   return true; | 
| 854 } | 869 } | 
| 855 | 870 | 
| 856 | 871 | 
|  | 872 /* Global runtime options. */ | 
|  | 873 | 
|  | 874 struct hb_options_t | 
|  | 875 { | 
|  | 876   int initialized : 1; | 
|  | 877   int uniscribe_bug_compatible : 1; | 
|  | 878 }; | 
|  | 879 | 
|  | 880 union hb_options_union_t { | 
|  | 881   int i; | 
|  | 882   hb_options_t opts; | 
|  | 883 }; | 
|  | 884 ASSERT_STATIC (sizeof (int) == sizeof (hb_options_union_t)); | 
|  | 885 | 
|  | 886 HB_INTERNAL void | 
|  | 887 _hb_options_init (void); | 
|  | 888 | 
|  | 889 extern HB_INTERNAL hb_options_union_t _hb_options; | 
|  | 890 | 
|  | 891 static inline hb_options_t | 
|  | 892 hb_options (void) | 
|  | 893 { | 
|  | 894   if (unlikely (!_hb_options.i)) | 
|  | 895     _hb_options_init (); | 
|  | 896 | 
|  | 897   return _hb_options.opts; | 
|  | 898 } | 
|  | 899 | 
|  | 900 | 
| 857 #endif /* HB_PRIVATE_HH */ | 901 #endif /* HB_PRIVATE_HH */ | 
| OLD | NEW | 
|---|