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