• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
HB_GetLineBreakClass(HB_UChar32 ch)10 HB_GetLineBreakClass(HB_UChar32 ch) {
11   abort();
12   return 0;
13 }
14 
15 static int
combining_property_cmp(const void * vkey,const void * vcandidate)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
code_point_to_combining_class(HB_UChar32 cp)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
HB_GetUnicodeCharCombiningClass(HB_UChar32 ch)42 HB_GetUnicodeCharCombiningClass(HB_UChar32 ch) {
43   return code_point_to_combining_class(ch);
44   return 0;
45 }
46 
47 static int
category_property_cmp(const void * vkey,const void * vcandidate)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
code_point_to_category(HB_UChar32 cp)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
HB_GetUnicodeCharProperties(HB_UChar32 ch,HB_CharCategory * category,int * combiningClass)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
HB_GetUnicodeCharCategory(HB_UChar32 ch)82 HB_GetUnicodeCharCategory(HB_UChar32 ch) {
83   return code_point_to_category(ch);
84 }
85