社区
Qualcomm 开发者论坛
帖子详情
有人了解uiOne下阿拉伯文的显示规则及算法不。。
luolcs
2009-05-31 03:42:19
如题~
...全文
625
14
打赏
收藏
有人了解uiOne下阿拉伯文的显示规则及算法不。。
如题~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
蜗牛老嗲
2009-10-22
打赏
举报
回复
真是感激的不行,多谢分享
liujie1008_cn
2009-06-15
打赏
举报
回复
高通底层已有从 unicode 方面判断是从左到右还是从右到左,
有textlayout.c 负责换行的。
其实运行模拟器的话,如果模拟器运行的是windows字体,会运行正确。感觉可以坐在字体层
liujie1008_cn
2009-06-15
打赏
举报
回复
[Quote=引用 6 楼 luolcs 的回复:]
IDISPLAY_drawText接口用在了上层,负责draw Trig传下来的text
阿文的两个算法也加在了IDISPLAY_drawText之前,基本的显示么问题了,
细节上还是会有BUG,
TrigBuilder传参数的过程看不到,很恶心。。
[/Quote]
你说的两个算法? 主要是哪方面?
显示有问题的吧。 数据传递,就是显示的时候有麻烦。单行和多行?
luolcs
2009-06-04
打赏
举报
回复
顺便问下,你知道阿拉伯文版手机上,menulist上的英文字符串,是靠屏幕左边显示,还是像阿文一样靠右显示~
luolcs
2009-06-03
打赏
举报
回复
呵呵,阿文字形的变换以及双向算法已经弄完了,
就在是显示时,严格的RTL会有点小问题,
底层的显示控制是在TextLayout.c中吗?
杭州山不高
2009-06-03
打赏
举报
回复
我做过阿拉伯文的排版,这是我总结的:
阿拉伯语属阿非罗-亚细亚语系(闪含语系)闪语族.词一般由3个原生字母构成,可添加前缀,后缀,或使词的内部音位发生变化和插入其它音位构成新词.
阿拉伯共有28个字母,都是辅音字母,每个字母只代表一个辅音音素,每个音素只用一个字母表示.
对应unicode . 060c--06fe .
阿拉伯语共有8个元音,3个短元音,3个长元音和两个半元音,短元音是用加在辅音字母上面或下面的符号来表示.这些符号称为“动符”;长元音和软音是用动符和3个辅音字母来表示的。阿拉伯语发音符号共有12个(叠音符号不算在内)。普通书报上不加符号。
阿拉伯文字在伊斯兰教的影响下流传很广。波斯文,乌尔都文以及我国的新疆的维吾尔文等多种文字采用阿拉伯字母。阿拉伯文的字母没有大写和小写的区分,但有印刷体和书写体的区别,而且除去د ذ ر ز و五个字母以外,其他23个字母都可以和后面的字母连写,而且因其在词头,词中和词尾的位置不同,字形也有所变化。阿拉伯文字的书写方向和中文不同,它是自右向左横着写。因此,阿拉伯文的书籍和本子都是右开本的。
在换行的时候,一般的,我们需要判断一下是否是整个词,进行整个词的换行,而不能把词拆成两个部分.阿拉伯文里面的数字仍然采用从左往右的显示方式.
规则1.
阿拉伯文变形:
根据上面分法,分成first,last,middle,alone,并根据判断是否是词的前面,后面,中间或单独一个词,进行变形.
据分析,给出变形的数组:分别对应上面的情况.对于其它不在数组中的,其变形和自身相同.
const U16 Arbic_Position[][4]=/*last,first,midile,alone*/
{
{ 0xfe80, 0xfe80, 0xfe80, 0xfe80},/*0x0621*/
{ 0xfe82, 0xfe81, 0xfe82, 0xfe81},
{ 0xfe84, 0xfe83, 0xfe84, 0xfe83},
{ 0xfe86, 0xfe85, 0xfe86, 0xfe85},
{ 0xfe88, 0xfe87, 0xfe88, 0xfe87},
{ 0xfe8a, 0xfe8b, 0xfe8c, 0xfe89},/*26*/
{ 0xfe8e, 0xfe8d, 0xfe8e, 0xfe8d},
{ 0xfe90, 0xfe91, 0xfe92, 0xfe8f},
{ 0xfe94, 0xfe93, 0xfe93, 0xfe93},
{ 0xfe96, 0xfe97, 0xfe98, 0xfe95},
{ 0xfe9a, 0xfe9b, 0xfe9c, 0xfe99},
{ 0xfe9e, 0xfe9f, 0xfea0, 0xfe9d},
{ 0xfea2, 0xfea3, 0xfea4, 0xfea1},
{ 0xfea6, 0xfea7, 0xfea8, 0xfea5},
{ 0xfeaa, 0xfea9, 0xfeaa, 0xfea9},
{ 0xfeac, 0xfeab, 0xfeac, 0xfeab},
{ 0xfeae, 0xfead, 0xfeae, 0xfead},
{ 0xfeb0, 0xfeaf, 0xfeb0, 0xfeaf},
{ 0xfeb2, 0xfeb3, 0xfeb4, 0xfeb1},
{ 0xfeb6, 0xfeb7, 0xfeb8, 0xfeb5},
{ 0xfeba, 0xfebb, 0xfebc, 0xfeb9},
{ 0xfebe, 0xfebf, 0xfec0, 0xfebd},/*36*/
{ 0xfec2, 0xfec3, 0xfec4, 0xfec1},/*37*/
{ 0xfec6, 0xfec7, 0xfec8, 0xfec5},
{ 0xfeca, 0xfecb, 0xfecc, 0xfec9},
{ 0xfece, 0xfecf, 0xfed0, 0xfecd},
{ 0x63b, 0x63b, 0x63b, 0x63b},
{ 0x63c, 0x63c, 0x63c, 0x63c},
{ 0x63d, 0x63d, 0x63d, 0x63d},
{ 0x63e, 0x63e, 0x63e, 0x63e},
{ 0x63f, 0x63f, 0x63f, 0x63f},
{ 0x640, 0x640, 0x640, 0x640},/*'-'*/
{ 0xfed2, 0xfed3, 0xfed4, 0xfed1},
{ 0xfed6, 0xfed7, 0xfed8, 0xfed5},
{ 0xfeda, 0xfedb, 0xfedc, 0xfed9},
{ 0xfede, 0xfedf, 0xfee0, 0xfedd},
/*{0x644, 0xfedd, 0xfedf, 0xfee0, 0xfede},dengx add*/
{ 0xfee2, 0xfee3, 0xfee4, 0xfee1},
{ 0xfee6, 0xfee7, 0xfee8, 0xfee5},
{ 0xfeea, 0xfeeb, 0xfeec, 0xfee9},
{ 0xfeee, 0xfeed, 0xfeee, 0xfeed},
{ 0xfef0, 0xfeef, 0xfef0, 0xfeef},
{0xfef2, 0xfef3, 0xfef4, 0xfef1},/*0x64a*/
};
判断是否是连接前面的,采用判断该字符前一个字符的判定方法,方法是,看前一个字符是否在集合set1中.如果在,则是有连接前面的.集合1如下:
static U16 theSet1[23]={
0x62c, 0x62d, 0x62e, 0x647, 0x639, 0x63a, 0x641, 0x642,
0x62b, 0x635, 0x636, 0x637, 0x643, 0x645, 0x646, 0x62a,
0x644, 0x628, 0x64a, 0x633, 0x634, 0x638, 0x626};
判断是否是连接后面的,采用判断该字符后一个字符的判定方法,方法是,看后一个字符是否在集合set2中.如果在,则是有连接后面的.集合2如下:
static U16 theSet2[35]={
0x62c, 0x62d, 0x62e, 0x647, 0x639, 0x63a, 0x641, 0x642,
0x62b, 0x635, 0x636, 0x637, 0x643, 0x645, 0x646, 0x62a,
0x644, 0x628, 0x64a, 0x633, 0x634, 0x638, 0x626,
0x627, 0x623, 0x625, 0x622, 0x62f, 0x630, 0x631, 0x632,
0x648, 0x624, 0x629, 0x649};
规则2.
阿拉伯文连字符规则:
连字符是以0x644开头,后面跟的是0x622,0x623,0x625,0x627,并根据情况取下面的字符数组0或1,如果0x644前一个字符是在集合1(同上面的集合1)中间,那么取数组0,否则取数组1.
数组如下:
static U16 arabic_specs[][2]=
{
{0xFEF5,0xFEF6},
{0xFEF7,0xFEF8},
{0xFEF9,0xFEFA},
{0xFEFB,0xFEFC},
};
杭州山不高
2009-06-03
打赏
举报
回复
阿拉伯文的显示规则及算法跟uiOne没关系的。
它都是从右往左排列,但阿拉伯数字刚好相反,是从做往右排列的。
阿拉伯文,字符与字符之间,有很多组合规则。
两个字符组合起来,有可能会变形的。
发现心流
2009-06-02
打赏
举报
回复
直接去amss的oem层修改IDISPLAY的几个函数,阿文显示基本功能就可以实现了吧
这个方法是快捷的方法了吧
发现心流
2009-06-02
打赏
举报
回复
回lz,
字体显示都是这个流程吧,
trigplayer->trigapplet->widget->IDisplay
呵呵,还是在最底层修改最完美啊
luolcs
2009-06-02
打赏
举报
回复
IDISPLAY_drawText接口用在了上层,负责draw Trig传下来的text
阿文的两个算法也加在了IDISPLAY_drawText之前,基本的显示么问题了,
细节上还是会有BUG,
TrigBuilder传参数的过程看不到,很恶心。。
luolcs
2009-06-01
打赏
举报
回复
用的是unicode,字库已经加好,算法也弄的差不多了,
就是在显示时,不同的菜单环境会出现一些BUG,
坐标的向右缩进弄的很晕~
半吊子全栈工匠
2009-06-01
打赏
举报
回复
都可以用unicode 吧
luolcs
2009-05-31
打赏
举报
回复
是啊,而且还设计到shaping的问题,再加上BIDI算法...
还要考虑到在显示时,是RTL的,很晕。。
sunyymq
2009-05-31
打赏
举报
回复
阿拉伯文是从右向左显示的啊!
u
ion
e_device_framework
u
ion
e device framework
u
iON
E_SDK_Overview
BREW u
ion
e sdk overview
BREW平台u
iOn
e,TrigML全套教程(已翻译成中文)
BREW平台u
iOn
e,TrigML,对u
iOn
e,TrigML只是笼统的介绍了下,有兴趣的可以看看
BREW_Conference_2006_u
ion
e_in_netshell
BREW Conference 2006 u
ion
e in netshell
BREW_Conference_2007_u
ion
e_service_kit
BREW Conference 2007 u
ion
e service kit
Qualcomm 开发者论坛
955
社区成员
5,251
社区内容
发帖
与我相关
我的任务
Qualcomm 开发者论坛
为开发者提供高通丰富的解决方案及全面技术下载内容。本版以AI人工智能、WoS移动笔记本、XR、IoT 物联网、Auto 汽车、生成式AI等核心板块组成,为开发者提供一个便捷及高效的学习交流平台。
复制链接
扫一扫
分享
社区描述
为开发者提供高通丰富的解决方案及全面技术下载内容。本版以AI人工智能、WoS移动笔记本、XR、IoT 物联网、Auto 汽车、生成式AI等核心板块组成,为开发者提供一个便捷及高效的学习交流平台。
人工智能
物联网
机器学习
企业社区
北京·东城区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章