Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / third_party / harfbuzz / contrib / harfbuzz-unicode-tables.c
1 #include <stdlib.h>
2 #include <stdint.h>
3
4 #include <harfbuzz-external.h>
5
6 #include "tables/category-properties.h"
7 #include "tables/combining-properties.h"
8
9 HB_LineBreakClass
10 HB_GetLineBreakClass(HB_UChar32 ch) {
11   abort();
12   return 0;
13 }
14
15 static int
16 combining_property_cmp(const void *vkey, const void *vcandidate) {
17   const uint32_t key = (uint32_t) (intptr_t) vkey;
18   const struct combining_property *candidate = vcandidate;
19
20   if (key < candidate->range_start) {
21     return -1;
22   } else if (key > candidate->range_end) {
23     return 1;
24   } else {
25     return 0;
26   }
27 }
28
29 static int
30 code_point_to_combining_class(HB_UChar32 cp) {
31   const void *vprop = bsearch((void *) (intptr_t) cp, combining_properties,
32                               combining_properties_count,
33                               sizeof(struct combining_property),
34                               combining_property_cmp);
35   if (!vprop)
36     return 0;
37
38   return ((const struct combining_property *) vprop)->klass;
39 }
40
41 int
42 HB_GetUnicodeCharCombiningClass(HB_UChar32 ch) {
43   return code_point_to_combining_class(ch);
44   return 0;
45 }
46
47 static int
48 category_property_cmp(const void *vkey, const void *vcandidate) {
49   const uint32_t key = (uint32_t) (intptr_t) vkey;
50   const struct category_property *candidate = vcandidate;
51
52   if (key < candidate->range_start) {
53     return -1;
54   } else if (key > candidate->range_end) {
55     return 1;
56   } else {
57     return 0;
58   }
59 }
60
61 static HB_CharCategory
62 code_point_to_category(HB_UChar32 cp) {
63   const void *vprop = bsearch((void *) (intptr_t) cp, category_properties,
64                               category_properties_count,
65                               sizeof(struct category_property),
66                               category_property_cmp);
67   if (!vprop)
68     return HB_NoCategory;
69
70   return ((const struct category_property *) vprop)->category;
71 }
72
73 void
74 HB_GetUnicodeCharProperties(HB_UChar32 ch,
75                             HB_CharCategory *category,
76                             int *combiningClass) {
77   *category = code_point_to_category(ch);
78   *combiningClass = code_point_to_combining_class(ch);
79 }
80
81 HB_CharCategory
82 HB_GetUnicodeCharCategory(HB_UChar32 ch) {
83   return code_point_to_category(ch);
84 }