| #include <stdlib.h> |
| #include <stdint.h> |
| |
| #include <harfbuzz-external.h> |
| |
| #include "tables/category-properties.h" |
| #include "tables/combining-properties.h" |
| |
| HB_LineBreakClass |
| HB_GetLineBreakClass(HB_UChar32 ch) { |
| abort(); |
| return 0; |
| } |
| |
| static int |
| combining_property_cmp(const void *vkey, const void *vcandidate) { |
| const uint32_t key = (uint32_t) (intptr_t) vkey; |
| const struct combining_property *candidate = vcandidate; |
| |
| if (key < candidate->range_start) { |
| return -1; |
| } else if (key > candidate->range_end) { |
| return 1; |
| } else { |
| return 0; |
| } |
| } |
| |
| static int |
| code_point_to_combining_class(HB_UChar32 cp) { |
| const void *vprop = bsearch((void *) (intptr_t) cp, combining_properties, |
| combining_properties_count, |
| sizeof(struct combining_property), |
| combining_property_cmp); |
| if (!vprop) |
| return 0; |
| |
| return ((const struct combining_property *) vprop)->klass; |
| } |
| |
| int |
| HB_GetUnicodeCharCombiningClass(HB_UChar32 ch) { |
| return code_point_to_combining_class(ch); |
| return 0; |
| } |
| |
| static int |
| category_property_cmp(const void *vkey, const void *vcandidate) { |
| const uint32_t key = (uint32_t) (intptr_t) vkey; |
| const struct category_property *candidate = vcandidate; |
| |
| if (key < candidate->range_start) { |
| return -1; |
| } else if (key > candidate->range_end) { |
| return 1; |
| } else { |
| return 0; |
| } |
| } |
| |
| static HB_CharCategory |
| code_point_to_category(HB_UChar32 cp) { |
| const void *vprop = bsearch((void *) (intptr_t) cp, category_properties, |
| category_properties_count, |
| sizeof(struct category_property), |
| category_property_cmp); |
| if (!vprop) |
| return HB_NoCategory; |
| |
| return ((const struct category_property *) vprop)->category; |
| } |
| |
| void |
| HB_GetUnicodeCharProperties(HB_UChar32 ch, |
| HB_CharCategory *category, |
| int *combiningClass) { |
| *category = code_point_to_category(ch); |
| *combiningClass = code_point_to_combining_class(ch); |
| } |
| |
| HB_CharCategory |
| HB_GetUnicodeCharCategory(HB_UChar32 ch) { |
| return code_point_to_category(ch); |
| } |