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
9HB_LineBreakClass
10HB_GetLineBreakClass(HB_UChar32 ch) {
11  abort();
12  return 0;
13}
14
15static int
16combining_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
29static int
30code_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
41int
42HB_GetUnicodeCharCombiningClass(HB_UChar32 ch) {
43  return code_point_to_combining_class(ch);
44  return 0;
45}
46
47static int
48category_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
61static HB_CharCategory
62code_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
73void
74HB_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
81HB_CharCategory
82HB_GetUnicodeCharCategory(HB_UChar32 ch) {
83  return code_point_to_category(ch);
84}
85