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

Commit f3c345cc authored by Fabrice Di Meglio's avatar Fabrice Di Meglio Committed by Android (Google) Code Review
Browse files

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

parents f52d7134 5de5b1a9
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;