微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > mt2503 阿拉伯语和波斯语同时开的时候阿拉伯语下“默罕默德”等字符...

mt2503 阿拉伯语和波斯语同时开的时候阿拉伯语下“默罕默德”等字符...

时间:10-02 整理:3721RD 点击:
[ShapeEngine]阿拉伯语和波斯语同时开的时候阿拉伯语下“默罕默德”等字符显示不对
[DESCRIPTION]
只开阿拉伯语的时候“默罕默德”可以正常输入,如果同时打开波斯语就会导致编辑“默罕默德”时输出不正确,且影响理解。
[SOLUTION]
阿拉伯语系的拼写都是使用字符集中的字符字符,而在显示的时候会经过shaping将其转换成Forms-A或者Forms-B中的字符来进行输出显示。
Shaping中存在一些变形规则(也就是两个或者三个字符组合成另一个字符的规则),这些变形规则如果不同的语言有可能不同。比如阿拉伯语下
A+B=A+B或者A+B=C,波斯语的规则可能就是A+B=D。
由于两种语言使用的基本字符集相同(也就是组合的字元相同),所以没办法区分开应该使用哪种语言的规则来显示,而波斯语的规则比阿拉伯语多
,字符集也比阿拉伯语大,所以在这两种语言同时打开的情况下我们选择了使用波斯语的规则来处理。也就是说有很多组合在阿拉伯语规则下不会做
变形处理,但是在波斯语规则下却会进行变形处理,这就导致了两者显示的不一致。

波斯语和阿拉伯语同时打开时,阿拉伯语下这种显示问题无法避免。所以如非必要,建议尽量不要同时打开这两种语言。以上说明对阿拉伯语和乌尔
都语也一样。

更改的基本思想是通过判断当前系统设置的语言来决定使用哪种语言的规则,也就是说在设置为阿拉伯语的时候使用阿拉伯语的规则,但是这种修改
仍然存在一定风险,比如系统语言为阿拉伯语就没有办法输入任何波斯语的字符。所以请自行评估选择哪种做法。
更改如下:
在ArabicShapingEngine.c中做以下修改:
1、
//要保证这里定义三种语言的ssc码和fontres.c中定义的这几种语言的ssc码相同,请确认。
#defineARABIC_SSC"ar-SA"
#definePERSIAN_SSC"ps-IR"
#defineURDU_SSC"ur-PK"
externU8*Get_Current_Lang_CountryCode(void);
//新增函数ArabicShapeEngine_get_lang
/*****************************************************************************
*FUNCTION
*ArabicShapeEngine_get_lang
*DESCRIPTION
*
*PARAMETERS
*RETURNS
*****************************************************************************/
staticARABIC_LANGUAGE_ENUMArabicShapeEngine_get_lang(void){
/*----------------------------------------------------------------*/
/*LocalVariables*/
/*----------------------------------------------------------------*/
U8*lcc=Get_Current_Lang_CountryCode();
ARABIC_LANGUAGE_ENUMlang=ARABIC_LIGATURE_NONE;
/*----------------------------------------------------------------*/
/*CodeBody*/
/*----------------------------------------------------------------*/
lang=
#ifdefined(__MMI_LANG_ARABIC__)
ARABIC_LIGATURE_ARABIC|
#endif
#ifdefined(__MMI_LANG_PERSIAN__)
ARABIC_LIGATURE_PERSIAN|
#endif
#ifdefined(__MMI_LANG_URDU__)
ARABIC_LIGATURE_URDU|
#endif
ARABIC_LIGATURE_NONE;
#ifdefined(__MMI_LANG_ARABIC__)
if(strcmp(lcc,ARABIC_SSC)==0)
{
lang=ARABIC_LIGATURE_ARABIC;
}
#endif
returnlang;
}
voidArabicShapeEngine_ext(PU16nLen,PU16buffer){
ArabicShapeEngine(
ArabicShapeEngine_get_lang()
,nLen,
buffer);/*outputwillreplacetheinputstringafterreturning*/
}

2、
在mmi_lm_arabic_get_current_cluster函数中调用arabic_ligature_rules中
Language传入的参数,修改与上面的一样。

3、
在ArabicShapeEngine2_ext函数也要做同样的处理

牛人!学习

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top