有人了解uiOne下阿拉伯文的显示规则及算法不。。

luolcs 2009-05-31 03:42:19
如题~
...全文
625 14 打赏 收藏 转发到动态 举报
写回复
用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,
坐标的向右缩进弄的很晕~
  • 打赏
  • 举报
回复
都可以用unicode 吧
luolcs 2009-05-31
  • 打赏
  • 举报
回复
是啊,而且还设计到shaping的问题,再加上BIDI算法...
还要考虑到在显示时,是RTL的,很晕。。
sunyymq 2009-05-31
  • 打赏
  • 举报
回复
阿拉伯文是从右向左显示的啊!

955

社区成员

发帖
与我相关
我的任务
社区描述
为开发者提供高通丰富的解决方案及全面技术下载内容。本版以AI人工智能、WoS移动笔记本、XR、IoT 物联网、Auto 汽车、生成式AI等核心板块组成,为开发者提供一个便捷及高效的学习交流平台。
人工智能物联网机器学习 企业社区 北京·东城区
社区管理员
  • Qualcomm开发
  • csdnsqst0050
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧