如何判断复杂语言引擎支持情况

本文介绍如何判断设备是否支持特定复杂语言的字符处理引擎。通过分析语言字符编码范围及对应的处理引擎,帮助开发者了解新增语言的支持情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何判断复杂语言引擎支持情况

[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:如果是新增一种复杂语言,可以先看看这个语言的字符是不是和已经支持的语言字符一样,如果是,则不需新增引擎。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值