阿拉伯字母及阿拉伯文排版規則

2021-06-18 13:25:27 字數 2047 閱讀 7377

阿拉伯語屬阿非羅-亞細亞語系(閃含語系)閃語族。詞一般由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

,  // 0x621 ,

, ,

, ,

,,  

//0x628 ,

,  //0x62a ,

, ,

, ,

,  // 0x630  ,

, ,

, ,

, ,

,  //0x638 ,

,  //0x63a ,

, ,

, ,

,  // 0x640 ,

, ,

, ,

, ,

,  //0x648 ,

,  //0x64a

};

判斷是否是連線前面的,採用判斷該字元前乙個字元的判定方法,方法是,看前乙個字元是否在集合set1中。如果在,則是有連線前面的。集合1如下:

static u16 theset1[23]=;

判斷是否是連線後面的,採用判斷該字元後乙個字元的判定方法,方法是,看後乙個字元是否在集合set2中。如果在,則是有連線後面的。集合2如下:

static u16 theset2[35]=;

規則2。

阿拉伯文連字元規則:

連字元是以0x644開頭,後面跟的是0x622,0x623,0x625,0x627,並根據情況取下面的字元陣列0或1,如果0x644前乙個字元是在集合1(同上面的集合1)中間,那麼取陣列1,否則取陣列0。

陣列如下:

static u16 arabic_specs[2]=,,

,,};

例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軟體理解該文件,將達到事半功倍的效果。   

非常感謝 高金山先生 的指點! 

阿拉伯文顯示

在很多嵌入式系統產品中,需要支援阿拉伯語言,可很多人卻為之煩惱。原因 1.不知阿拉伯文的排版規則 連寫變形規則 2.沒法找到支援阿拉伯文的字型檔。一。阿拉伯文的排版規則。請參閱 阿拉伯文排版規則詳解 二。阿拉伯文字型檔。阿拉伯文字型檔生成工具 guitool 首先,阿拉伯文的unicode編碼範圍 ...

Unity遊戲ugui適配阿拉伯文本顯示

首先介紹下阿拉伯文,阿拉伯文的顯示是右對齊 從右到左的,不僅是語序從右到左,就連乙個單詞的每個字元都是從右到左顯示的。打個比方,用大寫英文本母來代表阿拉伯字元,我們理解的 abcd efg 約定下文都用斜粗體表示我們理解的順序 在阿拉伯文中就會顯示成 gfe dcba 另外,當阿拉伯文和英文 數字混...

阿拉伯數值轉中文數值

public static void main string args string chines string level string string 607030030 不算進製,直接將阿拉伯數值轉中文數字 for int i 0 i nums.length i system.out.print...