阿拉伯文排版规则

    阿拉伯语属阿非罗-亚细亚语系(闪含语系)闪语族。词一般由3个原生字母构成,可添加前缀,后缀,或使词的内部音位发生变化和插入其它音位构成新词。

    阿拉伯共有28个字母,都是辅音字母,每个字母只代表一个辅音音素,每个音素只用一个字母表示。对应unicode:0x060C--0x06FE。

    阿拉伯语共有8个元音,3个短元音,3个长元音和两个半元音,短元音是用加在辅音字母上面或下面的符号来表示。这些符号称为“动符”;长元音和软音是用动符和3个辅音字母来表示的。阿拉伯语发音符号共有12个(叠音符号不算在内)。普通书报上不加符号。

    阿拉伯文字在伊斯兰教的影响下流传很广。波斯文,乌尔都文以及我国的新疆的维吾尔文等多种文字采用阿拉伯字母。阿拉伯文的字母没有大写和小写的区分,但有印刷体和书写体的区别,而且除去د ذ ر ز و五个字母以外,其他23个字母都可以和后面的字母连写,而且因其在词头,词中和词尾的位置不同,字形也有所变化。阿拉伯文字的书写方向和中文不同,它是自右向左横着写。因此,阿拉伯文的书籍和本子都是右开本的。

    在换行的时候,一般的,我们需要判断一下是否是整个词,进行整个词的换行,而不能把词拆成两个部分。阿拉伯文里面的数字仍然采用从左往右的显示方式。

规则1。
阿拉伯文变形:
根据上面分法,分成first,last,middle,alone,并根据判断是否是词的前连(前面字符在集合1中),后连(后面字符在集合2中),中间(即前后连,前面字符在集合1中,后面字符在集合2中)或单独一个词,进行变形。
据分析,给出变形的数组:分别对应上面的情况。对于其它不在数组中的,其变形和自身相同。

const WORD Arbic_Position[][4]=  // first, last, middle, alone

{

{ 0xfe80, 0xfe80, 0xfe80, 0xfe80},    // 0x621

{ 0xfe82, 0xfe81, 0xfe82, 0xfe81},

{ 0xfe84, 0xfe83, 0xfe84, 0xfe83},

{ 0xfe86, 0xfe85, 0xfe86, 0xfe85},

{ 0xfe88, 0xfe87, 0xfe88, 0xfe87},

{ 0xfe8a, 0xfe8b, 0xfe8c, 0xfe89},

{ 0xfe8e, 0xfe8d, 0xfe8e, 0xfe8d},

{ 0xfe90, 0xfe91, 0xfe92, 0xfe8f},   // 0x628

{ 0xfe94, 0xfe93, 0xfe93, 0xfe93},

{ 0xfe96, 0xfe97, 0xfe98, 0xfe95},   // 0x62A

{ 0xfe9a, 0xfe9b, 0xfe9c, 0xfe99},

{ 0xfe9e, 0xfe9f, 0xfea0, 0xfe9d},

{ 0xfea2, 0xfea3, 0xfea4, 0xfea1},

{ 0xfea6, 0xfea7, 0xfea8, 0xfea5},

{ 0xfeaa, 0xfea9, 0xfeaa, 0xfea9},

{ 0xfeac, 0xfeab, 0xfeac, 0xfeab},   // 0x630  

{ 0xfeae, 0xfead, 0xfeae, 0xfead},

{ 0xfeb0, 0xfeaf, 0xfeb0, 0xfeaf},

{ 0xfeb2, 0xfeb3, 0xfeb4, 0xfeb1},

{ 0xfeb6, 0xfeb7, 0xfeb8, 0xfeb5},

{ 0xfeba, 0xfebb, 0xfebc, 0xfeb9},

{ 0xfebe, 0xfebf, 0xfec0, 0xfebd},

{ 0xfec2, 0xfec3, 0xfec4, 0xfec1},

{ 0xfec6, 0xfec7, 0xfec8, 0xfec5},  // 0x638

{ 0xfeca, 0xfecb, 0xfecc, 0xfec9},

{ 0xfece, 0xfecf, 0xfed0, 0xfecd},  //0x63A

{ 0x63b, 0x63b, 0x63b, 0x63b},

{ 0x63c, 0x63c, 0x63c, 0x63c},

{ 0x63d, 0x63d, 0x63d, 0x63d},

{ 0x63e, 0x63e, 0x63e, 0x63e},

{ 0x63f, 0x63f, 0x63f, 0x63f},

{ 0x640, 0x640, 0x640, 0x640},   // 0x640

{ 0xfed2, 0xfed3, 0xfed4, 0xfed1},

{ 0xfed6, 0xfed7, 0xfed8, 0xfed5},

{ 0xfeda, 0xfedb, 0xfedc, 0xfed9},

{ 0xfede, 0xfedf, 0xfee0, 0xfedd},

{ 0xfee2, 0xfee3, 0xfee4, 0xfee1},

{ 0xfee6, 0xfee7, 0xfee8, 0xfee5},

{ 0xfeea, 0xfeeb, 0xfeec, 0xfee9},

{ 0xfeee, 0xfeed, 0xfeee, 0xfeed},   // 0x648

{ 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)中间,那么取数组1,否则取数组0。
数组如下:
static U16 arabic_specs[][2]=
{
{0xFEF5,0xFEF6},
{0xFEF7,0xFEF8},
{0xFEF9,0xFEFA},
{0xFEFB,0xFEFC},
};

例1: 0x064A, 0x0644, 0x0622。。。
      0x064A 的后面一个字符 0x0644 在集合2中,根据编码规则1得出它是后连字符(last),故转换成: 0xFEF3.  
      而0x064A在集合1 中,故用 0xFEF6 替代 0x0644 0x0622 这两个编码。     
       
例2: 0x0632, 0x0644, 0x0622。。。
      0x0632 的后面一个字符 0x0644 在集合2中,根据编码规则1得出它是后连字符(last), 故转换成: 0xFEAF.  
      而 0x0632 不在集合1 中,故用 0xFEF5 替代 0x0644 0x0622 这两个编码。  

建议大家配合 Ultrledit 软件理解该文档,将达到事半功倍的效果。       

祝大家好运!


 非常感谢 高金山先生 的指点! 阿拉伯文排版规则阿拉伯文排版规则
v1.13 (10/19/2012) + 增加 (BDF) 字体合并功能。 + 增加自动校准基线功能。 + 增加对BDF V2.2 的支持。 * 完善越南文unicode编码字库(增加扩展码和附加码) v1.12 (09/17/2012) + 增加自动升级功能(由于增加了网络下载功能,可能会被杀毒软件拦截,但请放心,绝对安全)。 + 增加usbkey注册。 + 增加字体加粗功能。 * 修改字体文件,以及输出文件路径不能保持的bug。 * 修改scanmode为Horb0~b7的bug。 * 完善多语言文本提示。 v1.11 (08/14/2012) + 增加注册年限选择。 * 修改获取机器码失败的bug。 v1.10 (06/26/2012) * 精简字库检索表。 + 增加 GBK 字库输出。 + 增加一种点阵数据存储格式(只存有效像素数据--not fixed, 不支持MBCS编码格式的中日韩), 对泰文,缅甸文等特殊语种显示非常便捷。 v1.09 (06/15/2012) + 增加输出 C 语言(数组) 字体格式。 V1.08 (05/17/2012) + 增加了两个版本(免费和试用版) 免费版 只对 16点阵有效。 试用版 对所有点阵有效,但是会缺部分字符。 + 增加热键功能。 * 修改了多国语言生成.h文件时,start 与 end 不匹配的bug。 * 完善文档《GuiTool 使用说明》, 增加更多图解说明。 文档下载地址: http://ishare.iask.sina.com.cn/f/24472766.html v1.07 (05/02/2012) * 修改注册方式(改为文件)。 + 增加bdf格式编码过滤功能,主要是为了支持 MTK 手机点阵字库。 + 增加xp控件属性。 + 增加扫描模式图解。 * 修改了 bdf 2 bin 的一个bug。(选择输出位图时,会输出n个位图文件) * 修改了 BDF 文件中当字符显示宽度为0,存位图(所有字符存一张图片)失败的错误。 v1.06 (04/10/2012) + 增加系统字体支持,操作更简便,快捷。 枚举所有已安装系统字体,直接选择即可。 v1.05 (03/24/2012) Fontmaker(点阵字库) * 修正了字符对齐问题。 + 增加了单个字符或多个字符输出成位图文件设定。 * 完善了阿拉伯文字库(unicode 字库有效)。 + 增加自定义字符功能(unicode 字库有效)。 Multi-language(多国语言) + 增加输出编码格式 (mbcs, utf16-lb, utf8)设置 + 增加数组格式输出。 Image Manager(图像管理) + 该页为新增功能,支持图片图像的数据转换。主要应用在做产品logo图片方面。 V1.04 (07/16/2011) + 增加了一个字符串mbcs2unicode(内码转统一码)的功能。 (支持转:U16-LE, U16-BE, UTF8) V1.03 (07/05/2011) * 修改了 Example 中点阵字库解析源码,更加便于移植。(基本做到只需修改font_file.c 即可) * 修改了内码(MBCS)字库点阵信息读取的一个错误。 + 增加了多语言支持(简中,英文),还有待完善。。。 V1.02 (07/01/2011) 1. FontMaker V2.03 + 增加字符宽高比调节(HorR & VerR) + 增加对*.ttc 字库的支持。 + 增加bdf(*.bdf)文件格式转Simple Unicode编码格式的bin文件。 V1.01 (06/29/2011) 1. FontMaker V2.02 + 增加了 Simple Unicode功能。(适合小字库) + 增加了 “扫描方向及反显”设置。 2. Multi-Language V1.01 * 修改了除 office 2000 外,其它不能支持的问题。 V1.00: (2007-2011) * 继承 FontMaker V2.01 的所有功能。 + 增加了一个 Multi-Languge V1.00 的打包转换功能。 FontMaker 基本功能: 1.支持所有 windows 字符集:CP932(日文Shift-JIS)CP936(简体中文GBK)CP949(韩文)CP950(繁体中文 Big5),CP874(泰文),CP1250(中欧)CP1251(西里尔文),CP1252(西欧--"拉丁文I"),CP1253(希腊文), CP1254(土耳其文),CP1255(希伯来文),CP1256(阿拉伯文),CP1257(波罗的海文),CP1258(越南) 2.支持非等宽字库。 3.支持BIN,TXT,BMP,BDF 文件输出。 4.支持unicode字库输出,即可以做到在一个窗口中同时显示多国语言(文字) 5.支持单个字符编辑,预览(所见即所得)。 6.支持字库文件和输出路径记忆功能. 7. 支持从bdf格式转换自定义字库(bin文件)格式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值