diff options
Diffstat (limited to 'third_party/harfbuzz/chromium.patch')
-rw-r--r-- | third_party/harfbuzz/chromium.patch | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/third_party/harfbuzz/chromium.patch b/third_party/harfbuzz/chromium.patch new file mode 100644 index 0000000..3e26566 --- /dev/null +++ b/third_party/harfbuzz/chromium.patch @@ -0,0 +1,69 @@ +diff --git a/third_party/harfbuzz/contrib/harfbuzz-unicode.c b/third_party/harfbuzz/contrib/harfbuzz-unicode.c +index 9b3c43e..51dd4ea 100644 +--- a/third_party/harfbuzz/contrib/harfbuzz-unicode.c ++++ b/third_party/harfbuzz/contrib/harfbuzz-unicode.c +@@ -6,8 +6,9 @@ + #include <harfbuzz-shaper.h> + #include "harfbuzz-unicode.h" + +-#include "tables/script-properties.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) { +@@ -234,10 +235,30 @@ HB_GetGraphemeAndLineBreakClass(HB_UChar32 ch, HB_GraphemeClass *gclass, HB_Line + *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) { +- abort(); +- return 0; ++ 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 * +diff --git a/third_party/harfbuzz/src/harfbuzz-shaper.cpp b/third_party/harfbuzz/src/harfbuzz-shaper.cpp +index 36b9282..3628c88 100644 +--- a/third_party/harfbuzz/src/harfbuzz-shaper.cpp ++++ b/third_party/harfbuzz/src/harfbuzz-shaper.cpp +@@ -433,7 +433,7 @@ void HB_HeuristicSetGlyphAttributes(HB_ShaperItem *item) + + // ### zeroWidth and justification are missing here!!!!! + +- assert(item->num_glyphs <= length); ++ assert(length <= item->num_glyphs); + + // qDebug("QScriptEngine::heuristicSetGlyphAttributes, num_glyphs=%d", item->num_glyphs); + HB_GlyphAttributes *attributes = item->attributes; +@@ -451,7 +451,6 @@ void HB_HeuristicSetGlyphAttributes(HB_ShaperItem *item) + } + ++glyph_pos; + } +- assert(glyph_pos == item->num_glyphs); + + // first char in a run is never (treated as) a mark + int cStart = 0; |