如何判断复杂语言引擎支持情况
时间:10-02
整理:3721RD
点击:
[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:如果是新增一种复杂语言,可以先看看这个语言的字符是不是和已经支持的语言字符一样,如果是,则不需新增引擎。
对于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:如果是新增一种复杂语言,可以先看看这个语言的字符是不是和已经支持的语言字符一样,如果是,则不需新增引擎。
学习了