summaryrefslogtreecommitdiffstats
path: root/third_party/harfbuzz/chromium.patch
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/harfbuzz/chromium.patch')
-rw-r--r--third_party/harfbuzz/chromium.patch93
1 files changed, 20 insertions, 73 deletions
diff --git a/third_party/harfbuzz/chromium.patch b/third_party/harfbuzz/chromium.patch
index 8e0c827..0f20dfd1 100644
--- a/third_party/harfbuzz/chromium.patch
+++ b/third_party/harfbuzz/chromium.patch
@@ -1,55 +1,23 @@
-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
+diff --git a/contrib/harfbuzz-unicode.c b/contrib/harfbuzz-unicode.c
+index 51dd4ea..cb7a85b 100644
+--- a/contrib/harfbuzz-unicode.c
++++ b/contrib/harfbuzz-unicode.c
+@@ -171,7 +171,10 @@ hb_utf16_script_run_prev(unsigned *num_code_points, HB_ScriptItem *output,
+ current_script = script;
+ continue;
+ } else if (script == HB_Script_Inherited) {
+- current_script = script;
++ // 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;
+diff --git a/src/harfbuzz-shaper.cpp b/src/harfbuzz-shaper.cpp
+index f3ec8e1..2b0dfde 100644
+--- a/src/harfbuzz-shaper.cpp
++++ b/src/harfbuzz-shaper.cpp
@@ -433,7 +433,7 @@ void HB_HeuristicSetGlyphAttributes(HB_ShaperItem *item)
// ### zeroWidth and justification are missing here!!!!!
@@ -67,24 +35,3 @@ index 36b9282..3628c88 100644
// first char in a run is never (treated as) a mark
int cStart = 0;
-diff --git a/third_party/harfbuzz/src/harfbuzz-hebrew.c b/third_party/harfbuzz/src/harfbuzz-hebrew.c
-index 533a063..2bda386 100644
---- a/third_party/harfbuzz/src/harfbuzz-hebrew.c
-+++ b/third_party/harfbuzz/src/harfbuzz-hebrew.c
-@@ -56,6 +56,8 @@ HB_Bool HB_HebrewShape(HB_ShaperItem *shaper_item)
-
- assert(shaper_item->item.script == HB_Script_Hebrew);
-
-+ HB_HeuristicSetGlyphAttributes(shaper_item);
-+
- #ifndef NO_OPENTYPE
- if (HB_SelectScript(shaper_item, hebrew_features)) {
-
-@@ -64,7 +66,6 @@ HB_Bool HB_HebrewShape(HB_ShaperItem *shaper_item)
- return FALSE;
-
-
-- HB_HeuristicSetGlyphAttributes(shaper_item);
- HB_OpenTypeShape(shaper_item, /*properties*/0);
- return HB_OpenTypePosition(shaper_item, availableGlyphs, /*doLogClusters*/TRUE);
- }