摘要:在介紹新疆自治區的維吾爾、哈薩克和柯爾克孜文(維哈柯文)特點的基礎上,提出了維哈柯文顯示及排版應達到的目標。提出了維哈柯文顯示及排版的模型,并對模型的關鍵處理——字符自動選形、按音節斷行和字符自動拉長等主要技術作了詳細論述。通過對比測試,此模型能使維哈柯文的顯示及排版美觀規整。同時這些技術已經應用到相關項目中,對維哈柯文軟件的開發有普遍的參考意義。
關鍵詞:維哈柯文; 顯示及排版; 字母選形; 文本斷行; 字母拉長
中圖分類號:TP311文獻標志碼:A
文章編號:1001-3695(2008)03-0836-03
新疆維吾爾自治區總人口約2 000萬。其中維吾爾族、哈薩克族和柯爾克孜族約占總人口的60%,所以維哈柯文無論在政府辦公,還是在人民日常生活中都有著廣泛應用。因此進行維哈柯文信息化技術的研究,對促進新疆的經濟發展、提升信息化水平,提高各民族的教育科學文化素質等都具有重要意義。針對維哈柯文文字特點與信息處理的應用需求,基于《信息交換用維吾爾文、哈薩克文、柯爾克孜文編碼字符集、基本集與擴展集》和《信息交換用維吾爾文、哈薩克文、柯爾克孜文字體字形》等少數民族信息標準,本文研究了維哈柯文信息處理的關鍵技術——維哈柯文的顯示及排版技術。它們是維哈柯文信息化過程中的難點和關鍵點。
1維文特點及排版目標
維哈柯文屬阿爾泰語系突厥語族,是使用阿拉伯字母的拼音字母文字,所以維哈柯文具有很多類似阿拉伯文的特點,如從右向左書寫、靠右對齊、字母自動選形、字母自動拉長等。但維哈柯文和阿拉伯文又有著很大的不同,如某些維哈柯文字母需要用兩個阿拉伯字母的組合來表示,字母的選形規則、字母的拉長規則、字母的選形方法都不一樣。另外,維哈柯文還具有可按音節斷行的特性等。
1)字母自動選形維哈柯文每個字母對應兩個、四個或八個字形字母,這些字形字母被稱做顯現形式。非字形字母被稱做名義形式。維哈柯文的字母以名義形式進行輸入、存儲、邏輯處理、交換和傳輸,以顯現形式進行顯示和打印。
維哈柯文中有一種特殊的顯示字符形式——復合字。它是在兩個特定的顯現字符同時相鄰出現時,用一個顯現字符來替換掉這兩個特定的顯現字符,該替換字符就被稱做復合字。復合字沒有對應的名義字符。維哈柯文中共有四對顯現字符的組合可以產生復合字,對應的也只有四個復合字。
維哈柯文在顯示時,需要將字母的名義形式轉換為合適的顯現形式,這一過程稱為字母選形。字母選形有一定的規則,除了要根據相關規則確定一個名義字母的顯現字形外,還要考慮復合字的變形顯示。
2)按音節斷行當文本過長,一行書寫不下時,剩余的文本要能夠接著在下一行從右向左書寫。文本從一行切換到下一行的過程稱為文本斷行。斷行分為按詞斷行和按音節斷行,它們是兩種不同的斷行規則。維哈柯文可以按音節斷行顯示。
3)字母拉長文本斷行后,為了美觀性和規整性的考慮,根據維哈柯文的相關規則需要拉長某些字母。拉長的方法是在被拉長的字母之前或之后插入拉長字符“\\u0640”。
維哈柯文的詞是由一個或多個字母組成。這些字母前后相連形成一個或幾個連體字母段。在連體字母段中,某些顯現字形需要拉長,并且所有字母要沿著同一水平線相連,此水平線被稱為基線。字母名義形式和顯現形式的對應關系如表1所示。
為了符合用戶的文化風俗和使用習慣,針對維哈柯文以上特點,維哈柯文的顯示和排版至少要達到以下目標:a)從右向左書寫,靠右對齊;b)字符能夠自動選形和拉長;c)實現維漢英文混合編輯、排版時的正確顯示。
2關鍵技術研究及其實現
維哈柯文處理中,有關維哈柯文的邏輯處理(查找、排序、比較、字符串連接、取子串、索引字符等)均可以依據維哈柯文字母順序表、相關規則及字符的Unicode編碼進行。針對維哈柯文的顯示和排版,尤其是混合漢英文字的維哈柯文的顯示及排版。
2.1維文的顯示及排版
為實現維哈柯文顯示及排版目標,本文提出維哈柯漢英文混合顯示及排版的模型如圖2所示。
圖2維哈柯漢英文混合排版模型
模型的核心處理單元為視圖部分,該部分實現了維哈柯文的特征處理。簡要說明如下:
a)文本方向調整,即將存放在模型中的文本重新排列。重排后的文本經后繼處理就是最終要顯示的文本。一段文本如果是由維哈柯文與漢英文混合書寫的,那么此文本的基本方向就是文本的主要顯示方向。例如維文中嵌套漢文,文本的基本方向就是從右向左;反之如果漢文中嵌套維文,文本的基本方向就是從左向右。文本重排將基于基本方向,根據字符的方向屬性劃分文本的run(run是具有相同方向的連續字符的最大集合)和嵌套層次;然后在BIDI算法中解析run和嵌套層次,得出重排后的文本。BIDI算法由Unicode標準組織提供。
b)字符自動選形。顯示維哈柯文時一個字符具體選用哪一種字形與此字符兩邊的其他字符相關。在處理顯示維哈柯文時需要頻繁地將一個字符的某一種形狀替換成另一種形狀。自動實現此過程的方法稱為自動選形。
c)測量定位。重排和選形后的文本最終要在屏幕上顯示出來。視圖在顯示文本時要能夠準確地測量和定位文本。解決辦法是相對計算與坐標變換相結合。文本的基本方向為從左向右時不進行坐標變換,只進行字符位置的相對計算。第一個顯現字符的位置是給定的,其字寬可根據使用的字體來確定;其后每一個顯現字符位置的確定均是根據該字符前一字符的坐標位置和字寬進行計算的結果。在本文基本方向為從右向左時進行坐標變換,相對計算的方式不變。
d)文本斷行。當文本過長甚至一行屏幕的距離均顯示不全時,為了美觀性和規整性的考慮,需要進行文本斷行,即將文本的一部分文字調整到屏幕的下一行顯示。
e)字符拉長。所有阿拉伯文單詞中的連接字形均可以在連接處插入連接符號(\\u0640)來進行拉長。字符自動拉長的目的是美觀和排版的需要。
其中:字符自動選形、文本斷行和字符拉長是與維哈柯文特性密切相關的算法過程。
2.2字母自動選形
自動選形的主要依據是維哈柯文的選形規則。維哈柯文字形按用途被分為不同的連接類型,包括右連型、雙連型、連接影響型和透明型。針對字母的連接類型,參考Unicode標準,維哈柯文的六條選形規則如表2所示。應用規則的優先級是從高到低,只有前面的規則均不適用時才應用下一規則。
a)創建整型數組attribute存放維哈柯文字符連接類型。
b)創建一個整型數組uigur_link,在此數組中存放所有名義字符在0xFE70區間的偏移量。其中偏移量的表示形式為20+25+28*0x##(雙字符類型,兩種變形)或者20+21+28*0x##(非雙字符類型,四種變形)。其中#表示1~F的十六進制整數 。同時創建整型數組result用于存放顯現字符的Unicode編碼。
c)創建一個三維整型數組shape_table[x][y][z]存放字符的變形方式。其中x,y,z是0~3的整數。數組內容為連接類型:0獨寫形;1尾寫形;2首寫形;3中寫形。
d)對輸入文本中的任一維哈柯字符作如下處理:
(a)在uifur_link中取得該字符的偏移量,將該偏移量右移8位再和0xFE70作與運算。
(b)從attribute中取得該字符前一字符和后一字符的連接類型a,b及該字符本身連接類型c。將步驟(a)的最終運算結果和shape_table[a][c][b]作與運算,得到的結果就是該字符的顯現字符的Unicode編碼,將結果存放到result中。
e)掃描result中符合字的組合。若存在復合字組合,則將組合的兩個Unicode碼替換成復合字的一個Unicode碼。退出。
例如,字符0x0622在uigur_link中的值是0x1121,右移8位為0x11,0xFE70+0x11=0xFE81;0xFE81再加上從shape ̄table中獲得變形類型,就得到了0x0622的顯現字形。
有少數維哈柯文字符比較特殊,如0x0649,它在FB區間和FE區間都有字形。可以在算法的第三步對這些特定字符進行判定后作特殊處理:字形在FE區間的正常運算;字形在FB區間進行映射處理,得到字形的Unicode碼。
2.3按音節斷行
按詞斷行對于每個字符基本等寬的文字(如中文)來說不會影響排版的美觀性。但是對于像維哈柯文這樣字形復雜、變長的文字來說,按詞斷行就不能保證排版的規整了。Microsoft公司的Word處理維哈柯文時采用的是按詞斷行,它會將最后一個單詞斷行到下一行;然后上一行拉長單詞及單詞間的空格實現兩端對齊。各行的空格寬度大小不等,導致頁面很不規整、本文所述的按音節斷行算法,斷行后排版規整,稀松一致,并具有優良的性能。
維哈柯文單詞由若干個音節構成,每個音節至少包含一個元音字母,設元音字母用Y表示,輔音字母用F表示,常用維哈柯文單詞有以下音節形式:Y式;YF式;FY式;FYF式;YFF式;FYFF式。
通過分析常用維哈柯文單詞的音節形式,總結出了維哈柯文按音節斷行的規則:
a)在多音節詞中,元音之間有一個輔音時,輔音應劃入后一個音節,如 (葡萄)。
b)在多音節詞中,元音之間有兩個輔音時,音節劃分在兩個輔音之間,如 (蘋果)。
c)多音節詞中元音之間出現連續的三個輔音時,前兩個輔音劃歸前一音節,后一個輔音劃歸后一個音節,如 (有條件的)。
d)多音節詞中連續出現的元音劃歸兩個音節,如(鐘)。
由于按音節斷行算法需要被頻繁調用,設計高效的算法對系統運行速度有很大的幫助。通過分析上面的按音節斷行規則,筆者發現,只要在元音字母處向前搜索一個字母就知道如何斷行了,顯然這比從元音字母處向前搜索到第二個元音字母后再根據按音節斷行規則作出處理更有效。根據此思想設計了下面的算法。
算法中使用的概念:
自然斷行點——在空格、tab、標點符號、中英文等處斷行的點在這里叫做自然斷行點;
最大點(max)——輸入文本行的行尾;
最小點(min)——從最大點向前搜索到自然斷行點的點。
按音節斷行算法主要過程:
a)確定文本行的最大點(max)和最小點(min)。
b)從最大點開始向前查找元音字母。如果找到元音字母,則檢查該元音字母前面的字母為元音字母還是輔音字母。如果是輔音字母,則將這個輔音劃分給后面的音節并在輔音字母前面斷行,即插入音節斷行符號(\\u0640)。隔音符號作為隔音處理。如果是元音字母則就在該元音字母后插入音節斷行符號,計算行寬,如果行寬溢出,就把該點設置為最大點,重復步驟b);如果找不到元音字母或者無法按音節斷行就返回最小點。
2.4字母自動拉長
維哈柯文排版中并不允許在所有維哈柯文連接字形的連接處插入連接符號,而是在幾個特定連接字形的左邊或右邊插入連接符號進行拉長。不同維哈柯文字形被拉長的頻率是不同的。根據有關統計數據,本文按照不同字形的拉長頻率確定了連接字形的拉長優先級(表3)。
字符拉長算法:
輸入——斷行后的每一行文本
輸出——對應的拉長后的每一行文本
過程:
a)遍歷行中的每一個字符并根據表2設置屬性。對輸入文本中的每個字符設置一個四位的屬性。低兩位表示拉長位置,如果為10則在字符左側插入拉長字符,如果為01則在字符右側插入拉長字符。高兩位表示拉長優先級,最高優先級為3用11表示;最低優先級為0用00表示,0優先級表示那些不可拉長的字符。
b)設置整數n=3。
c)從后往前遍歷行中的每一個字符查找優先級為n的字符。如果找到,計算插入拉長字符后的行寬,如果行寬溢出則退出,否則在相應位置插入一個拉長字符,并且對該字符降低一個優先級;如果找不到,執行下一步。
d)n值減1,如果n值為0,則退出;否則執行步驟c)。
3結束語
采用同一段維哈柯文字,比較微軟Word和采用此模型的顯示效果(圖3、4)。采用此模型的顯示效果要明顯優于微軟Word的顯示效果。
本文的研究主要是針對維哈柯文多語種信息處理平臺的研制及產業化等系列項目進行的。目前該技術已經在此項目中得到了成功的應用。本文論述的模型和技術不僅很好地實現了維哈柯文的特征處理,而且對與維哈柯文類似的阿拉伯語系文種的處理也具有普遍的指導作用。
參考文獻:
[1]繆成,袁保社,吾守爾·斯拉木,等.維哈柯漢英多文種處理平臺的設計和實現[J].計算機工程,2004,30(10):71-73.
[2]吾守爾·斯拉木. 對維文信息處理用三項標準的探討[J].中文信息學報,1987,1(4):63 -68.
[3]蘇國平,繆成,夏國平. Linux下維、哈、柯文多語種圖形化處理平臺的設計與實現 [J].中文信息學報,2006,20(4):90-95.
[4]熱依曼·吐爾遜,吾守爾·斯拉木. 維吾爾文手機輸入關鍵技術研究與實現[J].中文信息學報,2006,20(2):74-79.
[5]古麗拉·阿東別克,米吉提·阿布力米提.維吾爾語詞切分方法初探[J].中文信息學報,2004,18(6):61-65.
[6]The bidirectional algorithm[EB/OL].(2005-03).http://www/unicode.org/reports/tr9.
[7]Line breaking properties [EB/OL]. (2005-01). http://www.unicode.org/reports/tr14.
[8]Arabic code chart [EB/OL]. (2005-01). http://www.unicode.org/charts/PDF/U0600.pdf.
[9]Arabic presentation formsA [EB/OL].(2005-01). http://www.unicode.org/charts/PDF/UFB50.pdf.
[10]Arabic presentation formsB [EB/OL]. (2005-01). http://www.unicode.org/charts/PDF/UFE70.pdf.
[11]Arabic shaping[EB/OL]. http://www.unicode.org/versions/unicode4.0.0/ch08.pdf, 2005,1.
[12]董軍,徐春,李曉,等.永中Office辦公套件維文版的設計——多語言混合排版的設計[J].計算機應用研究,2006,23(3):202-204.
“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”