#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);
}