Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5de5b1a9 authored by Fabrice Di Meglio's avatar Fabrice Di Meglio
Browse files

Fix Harbuzz shaper for being able to do select other scripts than Common or Arabic

- need to take care of diacritics marks that return HB_Script_Inherited for a script

Change-Id: Icbfea46b305e15849b25410fed07d9cd5dfeb818
parent 6ab90ed0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -178,6 +178,7 @@ LOCAL_C_INCLUDES += \
	external/icu4c/i18n \
	external/icu4c/common \
	external/jpeg \
	external/harfbuzz/contrib \
	external/harfbuzz/src \
	external/zlib \
	frameworks/opt/emoji \
+30 −1
Original line number Diff line number Diff line
@@ -17,6 +17,10 @@
#include "TextLayoutCache.h"
#include "TextLayout.h"

extern "C" {
  #include "harfbuzz-unicode.h"
}

namespace android {

TextLayoutCache::TextLayoutCache() :
@@ -355,7 +359,32 @@ void TextLayoutCacheValue::setupShaperItem(HB_ShaperItem* shaperItem, HB_FontRec
    shaperItem->item.pos = start;
    shaperItem->item.length = count;
    shaperItem->item.bidiLevel = isRTL;
    shaperItem->item.script = isRTL ? HB_Script_Arabic : HB_Script_Common;

    ssize_t nextCodePoint = 0;
    uint32_t codePoint = utf16_to_code_point(chars, count, &nextCodePoint);

    HB_Script script = code_point_to_script(codePoint);

    if (script == HB_Script_Inherited) {
#if DEBUG_GLYPHS
        LOGD("Cannot find a correct script for code point=%d "
                " Need to look at the next code points.", codePoint);
#endif
        while (script == HB_Script_Inherited && nextCodePoint < count) {
            codePoint = utf16_to_code_point(chars, count, &nextCodePoint);
            script = code_point_to_script(codePoint);
        }
    }

    if (script == HB_Script_Inherited) {
#if DEBUG_GLYPHS
        LOGD("Cannot find a correct script from the text."
                " Need to select a default script depending on the passed text direction.");
#endif
        script = isRTL ? HB_Script_Arabic : HB_Script_Common;
    }

    shaperItem->item.script = script;

    shaperItem->string = chars;
    shaperItem->stringLength = contextCount;