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

This commit is contained in:
Fabrice Di Meglio
2011-08-09 16:17:53 -07:00
committed by Android (Google) Code Review
2 changed files with 31 additions and 1 deletions

View File

@@ -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 \

View File

@@ -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;