如何判断复杂语言引擎支持情况
发布日期:2021-06-29 15:24:28 浏览次数:2 分类:技术文章

本文共 1391 字,大约阅读时间需要 4 分钟。

[DESCRIPTION]
对于mtk支持的复杂语言,默认是带有处理引擎的。如果新增一种复杂语言如何知道现在版本是否支持这个字符处理引擎呢?
[SOLUTION]
复杂语言处理引擎都是按照各个语言字符分别处理的,即如果2种语言字符相同,则他们可以共用一套引擎,
比如阿拉伯语、波斯语、乌尔都语使用同一套引擎;印度语、孟加拉语使用一套引擎。
系统在处理字串时先是根据字串编码范围把字串分成若干小段,比如“asbc中国نحنddf”会分成“asbc”、“中国”、"نحن"、“ddf”4个子串,每个字串用一个Script标记这个字串是属于哪种语言。后面再根据这个Script变量分别调用不同的harfbuzz引擎对这些子串进行处理。
如下是KK版本支持的语言引擎接口。
harfbuzz-shaper.cpp(external\harfbuzz_ng\src\hb-old)

const HB_ScriptEngine HB_ScriptEngines[] = {

    // Common

    { HB_BasicShape},

    // Greek

    { HB_GreekShape},

    // Cyrillic

    { HB_BasicShape},

    // Armenian

    { HB_BasicShape},

    // Hebrew

    { HB_HebrewShape},

    // Arabic

    { HB_ArabicShape},

    // Syriac

    { HB_ArabicShape},

    // Thaana

    { HB_BasicShape},

    // Devanagari

    { HB_IndicShape},

    // Bengali

    { HB_IndicShape},

    // Gurmukhi

    { HB_IndicShape},

    // Gujarati

    { HB_IndicShape},

    // Oriya

    { HB_IndicShape},

    // Tamil

    { HB_IndicShape},

    // Telugu

    { HB_IndicShape},

    // Kannada

    { HB_IndicShape},

    // Malayalam

    { HB_IndicShape},

    // Sinhala

    { HB_IndicShape},

    // Thai

    { HB_BasicShape},

    // Lao

    { HB_BasicShape},

    // Tibetan

    { HB_TibetanShape},

    // Myanmar

#ifdef ZAWGYI_SUPPORT

    { HB_ZawgyiShape },

#else

    {HB_MyanmarShape},

#endif

    // GeorgianRecents

    { HB_BasicShape},

    // Hangul

    { HB_HangulShape},

    // Ogham

    { HB_BasicShape},

    // Runic

    { HB_BasicShape},

    // Khmer

    { HB_KhmerShape},

    // N'Ko

    { HB_ArabicShape}

};
JB版本的文件目录external\harfbuzz\src\,结构稍有不同。
PS:如果是新增一种复杂语言,可以先看看这个语言的字符是不是和已经支持的语言字符一样,如果是,则不需新增引擎。

转载地址:https://codegg.blog.csdn.net/article/details/48574683 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android Text Layout 框架
下一篇:Android 如何编译ICU资源

发表评论

最新留言

很好
[***.229.124.182]2024年04月07日 17时01分34秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章