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