Index: third_party/harfbuzz/contrib/harfbuzz-unicode.c |
diff --git a/third_party/harfbuzz/contrib/harfbuzz-unicode.c b/third_party/harfbuzz/contrib/harfbuzz-unicode.c |
deleted file mode 100644 |
index f2185dc6fb693967910777f6b7504139ca9e06da..0000000000000000000000000000000000000000 |
--- a/third_party/harfbuzz/contrib/harfbuzz-unicode.c |
+++ /dev/null |
@@ -1,287 +0,0 @@ |
-#include <stdint.h> |
-#include <stdlib.h> |
- |
-#include <harfbuzz-external.h> |
-#include <harfbuzz-impl.h> |
-#include <harfbuzz-shaper.h> |
-#include "harfbuzz-unicode.h" |
- |
-#include "tables/grapheme-break-properties.h" |
-#include "tables/mirroring-properties.h" |
-#include "tables/script-properties.h" |
- |
-uint32_t |
-utf16_to_code_point(const uint16_t *chars, size_t len, ssize_t *iter) { |
- const uint16_t v = chars[(*iter)++]; |
- if (HB_IsHighSurrogate(v)) { |
- // surrogate pair |
- if (*iter >= len) { |
- // the surrogate is incomplete. |
- return HB_InvalidCodePoint; |
- } |
- const uint16_t v2 = chars[(*iter)++]; |
- if (!HB_IsLowSurrogate(v2)) { |
- // invalidate surrogate pair. |
- return HB_InvalidCodePoint; |
- } |
- |
- return HB_SurrogateToUcs4(v, v2); |
- } |
- |
- if (HB_IsLowSurrogate(v)) { |
- // this isn't a valid code point |
- return HB_InvalidCodePoint; |
- } |
- |
- return v; |
-} |
- |
-uint32_t |
-utf16_to_code_point_prev(const uint16_t *chars, size_t len, ssize_t *iter) { |
- const uint16_t v = chars[(*iter)--]; |
- if (HB_IsLowSurrogate(v)) { |
- // surrogate pair |
- if (*iter < 0) { |
- // the surrogate is incomplete. |
- return HB_InvalidCodePoint; |
- } |
- const uint16_t v2 = chars[(*iter)--]; |
- if (!HB_IsHighSurrogate(v2)) { |
- // invalidate surrogate pair. |
- return HB_InvalidCodePoint; |
- } |
- |
- return HB_SurrogateToUcs4(v2, v); |
- } |
- |
- if (HB_IsHighSurrogate(v)) { |
- // this isn't a valid code point |
- return HB_InvalidCodePoint; |
- } |
- |
- return v; |
-} |
- |
-static int |
-script_property_cmp(const void *vkey, const void *vcandidate) { |
- const uint32_t key = (uint32_t) (intptr_t) vkey; |
- const struct script_property *candidate = vcandidate; |
- |
- if (key < candidate->range_start) { |
- return -1; |
- } else if (key > candidate->range_end) { |
- return 1; |
- } else { |
- return 0; |
- } |
-} |
- |
-HB_Script |
-code_point_to_script(uint32_t cp) { |
- const void *vprop = bsearch((void *) (intptr_t) cp, script_properties, |
- script_properties_count, |
- sizeof(struct script_property), |
- script_property_cmp); |
- if (!vprop) |
- return HB_Script_Common; |
- |
- return ((const struct script_property *) vprop)->script; |
-} |
- |
-char |
-hb_utf16_script_run_next(unsigned *num_code_points, HB_ScriptItem *output, |
- const uint16_t *chars, size_t len, ssize_t *iter) { |
- if (*iter == len) |
- return 0; |
- |
- output->pos = *iter; |
- const uint32_t init_cp = utf16_to_code_point(chars, len, iter); |
- unsigned cps = 1; |
- if (init_cp == HB_InvalidCodePoint) |
- return 0; |
- const HB_Script init_script = code_point_to_script(init_cp); |
- HB_Script current_script = init_script; |
- output->script = init_script; |
- |
- for (;;) { |
- if (*iter == len) |
- break; |
- const ssize_t prev_iter = *iter; |
- const uint32_t cp = utf16_to_code_point(chars, len, iter); |
- if (cp == HB_InvalidCodePoint) |
- return 0; |
- cps++; |
- const HB_Script script = code_point_to_script(cp); |
- |
- if (script != current_script) { |
- if (current_script == init_script == HB_Script_Inherited) { |
- // If we started off as inherited, we take whatever we can find. |
- output->script = script; |
- current_script = script; |
- continue; |
- } else if (script == HB_Script_Inherited) { |
- continue; |
- } else { |
- *iter = prev_iter; |
- cps--; |
- break; |
- } |
- } |
- } |
- |
- if (output->script == HB_Script_Inherited) |
- output->script = HB_Script_Common; |
- |
- output->length = *iter - output->pos; |
- if (num_code_points) |
- *num_code_points = cps; |
- return 1; |
-} |
- |
-char |
-hb_utf16_script_run_prev(unsigned *num_code_points, HB_ScriptItem *output, |
- const uint16_t *chars, size_t len, ssize_t *iter) { |
- if (*iter == (size_t) -1) |
- return 0; |
- |
- const size_t ending_index = *iter; |
- const uint32_t init_cp = utf16_to_code_point_prev(chars, len, iter); |
- unsigned cps = 1; |
- if (init_cp == HB_InvalidCodePoint) |
- return 0; |
- const HB_Script init_script = code_point_to_script(init_cp); |
- HB_Script current_script = init_script; |
- output->script = init_script; |
- |
- for (;;) { |
- if (*iter < 0) |
- break; |
- const ssize_t prev_iter = *iter; |
- const uint32_t cp = utf16_to_code_point_prev(chars, len, iter); |
- if (cp == HB_InvalidCodePoint) |
- return 0; |
- cps++; |
- const HB_Script script = code_point_to_script(cp); |
- |
- if (script != current_script) { |
- if (current_script == init_script == HB_Script_Inherited) { |
- // If we started off as inherited, we take whatever we can find. |
- output->script = script; |
- current_script = script; |
- continue; |
- } else if (script == HB_Script_Inherited) { |
- // Just assume that whatever follows this combining character is within |
- // the same script. This is incorrect if you had language1 + combining |
- // char + language 2, but that is rare and this code is suspicious |
- // anyway. |
- continue; |
- } else { |
- *iter = prev_iter; |
- cps--; |
- break; |
- } |
- } |
- } |
- |
- if (output->script == HB_Script_Inherited) |
- output->script = HB_Script_Common; |
- |
- output->pos = *iter + 1; |
- output->length = ending_index - *iter; |
- if (num_code_points) |
- *num_code_points = cps; |
- return 1; |
-} |
- |
-static int |
-grapheme_break_property_cmp(const void *vkey, const void *vcandidate) { |
- const uint32_t key = (uint32_t) (intptr_t) vkey; |
- const struct grapheme_break_property *candidate = vcandidate; |
- |
- if (key < candidate->range_start) { |
- return -1; |
- } else if (key > candidate->range_end) { |
- return 1; |
- } else { |
- return 0; |
- } |
-} |
- |
-HB_GraphemeClass |
-HB_GetGraphemeClass(HB_UChar32 ch) { |
- const void *vprop = bsearch((void *) (intptr_t) ch, grapheme_break_properties, |
- grapheme_break_properties_count, |
- sizeof(struct grapheme_break_property), |
- grapheme_break_property_cmp); |
- if (!vprop) |
- return HB_Grapheme_Other; |
- |
- return ((const struct grapheme_break_property *) vprop)->klass; |
-} |
- |
-HB_WordClass |
-HB_GetWordClass(HB_UChar32 ch) { |
- abort(); |
- return 0; |
-} |
- |
-HB_SentenceClass |
-HB_GetSentenceClass(HB_UChar32 ch) { |
- abort(); |
- return 0; |
-} |
- |
-void |
-HB_GetGraphemeAndLineBreakClass(HB_UChar32 ch, HB_GraphemeClass *gclass, HB_LineBreakClass *breakclass) { |
- *gclass = HB_GetGraphemeClass(ch); |
- *breakclass = HB_GetLineBreakClass(ch); |
-} |
- |
-static int |
-mirroring_property_cmp(const void *vkey, const void *vcandidate) { |
- const uint32_t key = (uint32_t) (intptr_t) vkey; |
- const struct mirroring_property *candidate = vcandidate; |
- |
- if (key < candidate->a) { |
- return -1; |
- } else if (key > candidate->a) { |
- return 1; |
- } else { |
- return 0; |
- } |
-} |
- |
-HB_UChar16 |
-HB_GetMirroredChar(HB_UChar16 ch) { |
- const void *mprop = bsearch((void *) (intptr_t) ch, mirroring_properties, |
- mirroring_properties_count, |
- sizeof(struct mirroring_property), |
- mirroring_property_cmp); |
- if (!mprop) |
- return ch; |
- |
- return ((const struct mirroring_property *) mprop)->b; |
-} |
- |
-void * |
-HB_Library_Resolve(const char *library, const char *symbol) { |
- abort(); |
- return NULL; |
-} |
- |
-void * |
-HB_TextCodecForMib(int mib) { |
- abort(); |
- return NULL; |
-} |
- |
-char * |
-HB_TextCodec_ConvertFromUnicode(void *codec, const HB_UChar16 *unicode, hb_uint32 length, hb_uint32 *outputLength) { |
- abort(); |
- return NULL; |
-} |
- |
-void |
-HB_TextCodec_FreeResult(char *v) { |
- abort(); |
-} |