无码色色,久久久久久免费精品喷水,美女把胸罩解开让男生摸,欧美一级在线观看视频,色亚洲天堂,色综合天天综合给合国产

咨詢電話:023-88959644    24小時(shí)服務(wù)熱線:400-023-8809
NEWS CENTER ·
新聞動(dòng)態(tài)
關(guān)注中技互聯(lián) 關(guān)注前沿

你會(huì)用m17n對(duì)各國(guó)語(yǔ)言間代碼移植轉(zhuǎn)換嗎?

發(fā)表日期:2013-03-08    文章編輯:天天    瀏覽次數(shù):19    標(biāo)簽:你會(huì)用m17n對(duì)各國(guó)語(yǔ)言間代碼移植轉(zhuǎn)換嗎?

 你會(huì)用m17n對(duì)各國(guó)語(yǔ)言間代碼移植轉(zhuǎn)換嗎?

  為了讓 Linuxreg; 應(yīng)用程序在全世界范圍都可以使用,而不會(huì)在西方語(yǔ)言與世界上其他語(yǔ)言之間產(chǎn)生任何區(qū)別,我們應(yīng)該發(fā)行一些本地化后的版本,它們可以輸入、存儲(chǔ)、提取或呈現(xiàn)任何語(yǔ)言,而不管這些語(yǔ)言是多么復(fù)雜。多語(yǔ)言庫(kù),或稱為 m17n,為類 UNIXreg; 平臺(tái)上的所有語(yǔ)言提供了一個(gè)國(guó)際化解決方案。

  在很短的時(shí)間之內(nèi) —— 總共還不到 20 年 —— 個(gè)人計(jì)算機(jī)已經(jīng)成為我們工作和生活中的一種必需設(shè)備。受到半導(dǎo)體和處理器快速發(fā)展的推動(dòng),大量的供應(yīng)商使得計(jì)算機(jī)的價(jià)格一落千丈,Internet 也已經(jīng)在全球廣為分布,個(gè)人計(jì)算機(jī)現(xiàn)在已經(jīng)不再是一種奢侈品,而是一種常見的家用電器了。

  實(shí)際上,在很多富裕的國(guó)家(例如美國(guó)、日本、英國(guó)),每?jī)蓚€(gè)家庭就會(huì)擁有一臺(tái)計(jì)算機(jī),并且會(huì)使用寬帶服務(wù)。就全世界來(lái)看,雖然家庭收入可能會(huì)有很大的不同,但是個(gè)人計(jì)算機(jī)都很容易購(gòu)買了,即使在馬爾代夫,我們也很容易購(gòu)買到筆記本。另外,如果我們碰巧說(shuō)的是 Dhivehi 方言(馬爾代夫的一種方言),微軟也為我們提供了一個(gè)這種版本的 Microsoftreg; Windowsreg; XP 操作系統(tǒng)。

  就全球廣泛接受的個(gè)人計(jì)算機(jī)來(lái)說(shuō),大部分現(xiàn)代操作系統(tǒng)都提供了一些編程庫(kù)來(lái)促進(jìn) 國(guó)際化 的發(fā)展,或者將軟件調(diào)整為支持多種語(yǔ)言的。國(guó)際化(通常簡(jiǎn)寫為 i18n,節(jié)選自 i-nternationalizatio-n)庫(kù)通常都會(huì)將應(yīng)用程序的文本資源(按鈕標(biāo)簽、用戶界面[UI] 提示和菜單選項(xiàng))保存成多種語(yǔ)言的。在啟動(dòng)國(guó)際化后的應(yīng)用程序后顯示哪種語(yǔ)言,這要取決于用戶的區(qū)域設(shè)置 —— 通常,這是一個(gè)可配置的系統(tǒng)或個(gè)人帳號(hào)首選項(xiàng)。

  理想來(lái)說(shuō) —— 至少對(duì)于獨(dú)立軟件供應(yīng)商來(lái)說(shuō) —— 相同的可執(zhí)行程序以日語(yǔ)或希臘語(yǔ)運(yùn)行時(shí)都能運(yùn)行得一樣好。然而,構(gòu)建 “本地方言” 版本的應(yīng)用程序的情況遠(yuǎn)遠(yuǎn)沒有這么理想。包括被廣泛認(rèn)可的 ISO(International Standards Organization)/IEC(International Engineering Consortium)10646 和 Unicode,沒有哪種字符編碼可以解決如何實(shí)現(xiàn)任意語(yǔ)言的輸入和呈現(xiàn)問題。ISO/IEC 10646 和 Unicode 只指定了如何存儲(chǔ)、檢索和排序字符以及字符的特殊組合。例如,這些標(biāo)準(zhǔn)并沒有規(guī)定統(tǒng)一的格式、嵌入式數(shù)據(jù)或標(biāo)識(shí)來(lái)讓使用泰國(guó)語(yǔ)書寫的文檔怎樣才能按照泰國(guó)語(yǔ)的規(guī)范規(guī)則正確地呈現(xiàn)出它們的樣子來(lái)。是的,Unicode 可以維護(hù)使用泰國(guó)語(yǔ)書寫的文檔的內(nèi)容,也可以保證這種文件在所有使用 Unicode 的平臺(tái)上都可以很好地進(jìn)行移植,但是它并不能保證我們可以正確查看文件,也不能保證文檔所呈現(xiàn)出來(lái)的樣子與作者的意圖一致。

  我們來(lái)考慮一下這種情況:盡管 Linux GNU C 庫(kù)(glibc)提供了一些函數(shù)來(lái)處理 ISO 10646 兼容的 31 位字符,但是它并不能保證這些字符可以在顯示設(shè)備上正確進(jìn)行顯示。有些 glibc 字符串函數(shù),例如 strcat() 和 strlen(),都可以正確地處理多字節(jié)的問題,但是要正確顯示阿拉伯語(yǔ),需要雙向(bidi)顯示的功能,這種功能只有在圖形用戶界面(GUI)工具包和專用字符串顯示庫(kù)中才能找到。

  例如,GNOME 需要 GTK+ 工具包和 Pango(一個(gè)文本顯示庫(kù))來(lái)實(shí)現(xiàn)對(duì) i18n 的完整支持(然而,Pango 在解決自己用途不夠廣泛方面有一些限制。請(qǐng)參看側(cè)欄 pango 的問題)。其他 GUI 工具包提供了對(duì) i18n 的支持,但卻并不總是能兼容這些標(biāo)準(zhǔn)。當(dāng)然,Linux 上的圖形應(yīng)用程序也需要 X Window System 的基本顯示庫(kù) Xlib,它提供了兩種繪圖(形狀和線條)和字符顯示原語(yǔ)。不幸的是,Xlib 只能顯示西歐語(yǔ)言。

  Pango 的問題

  Pango 可以放置(布局)并顯示一些復(fù)雜的手稿,但是不能對(duì)多字節(jié)的文本進(jìn)行排序或搜索功能。Pango 假設(shè)底層庫(kù) —— 通常是使用 C 語(yǔ)言編寫的,可以對(duì)使用 Unicode 標(biāo)準(zhǔn)指定的所有語(yǔ)言都進(jìn)行操作 —— 可以執(zhí)行基本的文本處理操作。

  一個(gè)庫(kù)顯示所有語(yǔ)言

  要讓應(yīng)用程序在全球都可以使用 —— 而不會(huì)在西方國(guó)家和世界上其他很多語(yǔ)言之間產(chǎn)生不公平的現(xiàn)象 —— 我們必須要能夠 輸入、存儲(chǔ)、提取并 顯示 任何語(yǔ)言,而不管這究竟會(huì)多么復(fù)雜。正如上面介紹的一樣,有一些廣為認(rèn)可的標(biāo)準(zhǔn)為多字節(jié)存儲(chǔ)和可移植性提供了一些便利;然而,現(xiàn)在還沒有為輸入和顯示制定標(biāo)準(zhǔn)。更加糟糕的是,即使是最好的多語(yǔ)言文本編輯器也會(huì)被迫混合使用簡(jiǎn)單的國(guó)際化庫(kù)和私有 GUI 工具包。添加一種語(yǔ)言可能會(huì)需要另外一種(很可能是新的)定制庫(kù)。

  Multilingualization Library 或 m17n 庫(kù)會(huì)盡力為類 UNIX 平臺(tái)上多種語(yǔ)言書寫的文本的輸入、處理和顯示提供一種單一的解決方案。另外,m17n 的目標(biāo)是充分利用現(xiàn)有且大家都可以很好地理解的典型 UNIX 應(yīng)用程序框架,而不是利用軟件開發(fā)人員的其他模型。

  最后,m17n 會(huì)努力使國(guó)際化的內(nèi)容更加豐富,而不僅僅是簡(jiǎn)單地從英語(yǔ)移植到另外一種語(yǔ)言上。使用 m17n,同一個(gè)二進(jìn)制文件可以在一個(gè)系統(tǒng)上顯示法語(yǔ),在另外一個(gè)系統(tǒng)上顯示蒙古語(yǔ),甚至在同一個(gè)屏幕上就可以顯示多種語(yǔ)言的文本。更好的是,m17n 可以(令人信服地)實(shí)現(xiàn)諸如文本數(shù)據(jù)庫(kù)之類的功能,這使它可以存儲(chǔ)并處理大量的國(guó)際化內(nèi)容。

  m17n 庫(kù)是在日本 Tsukuba 的 National Institute for Advanced Science and Technology 工作的 4 個(gè)日本程序員編寫的。很多年以來(lái),日本都一直走在了國(guó)際化的前端,部分原因是日語(yǔ)學(xué)者一直在試圖為人文學(xué)科探索一種百科全書式的方法 —— 尤其對(duì)世界上各種語(yǔ)言更為關(guān)注。

  m17n 庫(kù)是由 3 個(gè)庫(kù)和一個(gè)存儲(chǔ)單一腳本以及正確顯示腳本所需要的元數(shù)據(jù)的數(shù)據(jù)庫(kù)構(gòu)成的:

  m17n C 庫(kù)可以類似地實(shí)現(xiàn) glibc (以及各種風(fēng)格的 libc )的一些基本的文本處理功能。

  m17n X 庫(kù)與 Xlib 是緊密對(duì)應(yīng)的。它提供了基本的繪制字符的功能,并且對(duì)呈現(xiàn)所做的假設(shè)很少。

  m17n 工具包提供了一些功能,可以對(duì)復(fù)雜的腳本進(jìn)行處理,使它們可以準(zhǔn)備好在屏幕上進(jìn)行顯示。例如,泰國(guó)語(yǔ)在顯示之前,必須進(jìn)行排序、合成和重新排序。

  最后,m17n 數(shù)據(jù)庫(kù)存儲(chǔ)了每種語(yǔ)言所特有的一些數(shù)據(jù)。例如,某種特有語(yǔ)言可能會(huì)需要自己的字體、一種特定的編碼以及一些特殊的機(jī)制來(lái)輸入自己的數(shù)據(jù)。m17n 庫(kù)是與語(yǔ)言無(wú)關(guān)的;m17n 數(shù)據(jù)庫(kù)中保存了所有與語(yǔ)言有關(guān)的信息。

  圖 1 給出了 m17n 的 4 個(gè)部分,以及這些庫(kù)是如何與現(xiàn)有的系統(tǒng)組件對(duì)應(yīng)的。m17n 組件和傳統(tǒng) UNIX 庫(kù)之間存在驚人的類似之處并不意外:m17n 的創(chuàng)建者希望能夠讓多語(yǔ)言的應(yīng)用程序的編寫盡量簡(jiǎn)單。我們只要使用一個(gè)等效的多語(yǔ)言庫(kù)來(lái)替換相同語(yǔ)義的函數(shù)即可。

  (從側(cè)面來(lái)看,m17n C 和 X 庫(kù)就預(yù)示著 X 服務(wù)器可以提供國(guó)際化功能。不過,m17n 對(duì)底層操作系統(tǒng)和呈現(xiàn)機(jī)制的假設(shè)較少,因此我們可以將 m17n 移植到其他窗口系統(tǒng)上。實(shí)際上,將 m17n 集成到跨平臺(tái)的 GUI 工具包(例如類 UNIX 系統(tǒng)上使用的 Qt)正是當(dāng)前的工作重點(diǎn),m17n 團(tuán)隊(duì)正在將自己的代碼加入 GTK 的修正版本中。)

  字符一瞥

  添加新拼字法也非常簡(jiǎn)單:不需要改編 m17n 庫(kù)來(lái)顯示新腳本。相反,只需要?jiǎng)?chuàng)建一個(gè)新的 m17n M-text,并將 M-text 添加到 m17n 數(shù)據(jù)庫(kù)上即可。

  可以將 M-text 當(dāng)作一個(gè)泛化的 C 字符串,因?yàn)檫@就可以將任意屬性添加到通常與 C 字符串有關(guān)的字符代碼中。一個(gè)屬性可以指定語(yǔ)言要顯示的字符,而另外一個(gè)屬性則可以指定特定的字體。Bidi 信息也是使用 M-text 表示來(lái)進(jìn)行編碼的,并且基本的字形信息都可以出現(xiàn)。

  例如,圖 2(已經(jīng)得到 m17n 開發(fā)人員的許可進(jìn)行復(fù)制)展示了這些屬性如何用來(lái)修改文本字符串的外觀。這個(gè)字符串非常簡(jiǎn)單,內(nèi)容是 “This is sample text to show the property”。然而,每個(gè)字符串都有一個(gè) face 屬性 —— 或多個(gè) face 屬性 —— 它決定了要使用哪些字體來(lái)顯示字符。該圖中所顯示的 face 屬性都故意進(jìn)行了簡(jiǎn)化,但是我們可以看到這種特性所提供的靈活性,這對(duì)于世界上很多手寫語(yǔ)言來(lái)說(shuō)都是必要的。

  有很多腳本都需要復(fù)雜的過程來(lái)重新進(jìn)行排序,或重新放置各個(gè)要顯示的復(fù)雜合成圖形。諸如泰米爾語(yǔ)、緬甸語(yǔ)和泰國(guó)語(yǔ)之類的腳本在進(jìn)行顯示之前都需要這種重新排序過程。作為更為具體的一個(gè)例子,圖 3(也已經(jīng)獲得作者許可進(jìn)行復(fù)制)展示了單詞 Hindi 是如何進(jìn)行處理來(lái)使用 Devanagri 腳本正確顯示的。這需要兩個(gè)階段。第一個(gè)階段是將字符序列從字節(jié)順序(字符在內(nèi)存中如何存儲(chǔ))轉(zhuǎn)換成正確的手寫順序(字符如何在紙面上顯示)。

  第二個(gè)階段負(fù)責(zé)掃描特有的字形和讀音序列(如果存在)并將這個(gè)序列替換成 “復(fù)合” 字形(英語(yǔ)有很多這種轉(zhuǎn)換來(lái)增強(qiáng)文本的可讀性。根據(jù)所使用的字體的不同, f 和 i 序列通常都會(huì)使用一個(gè) fi 字形代替,這要取決于我們選擇的字體)。

  這個(gè)重新排序過程的通用名字是 Complex Font Layout(CFL)。通常,CFL 信息都包含在字體中,在某些情況中,已經(jīng)寫死到顯示庫(kù)中了。在 m17n 中,CFL 信息可以在 FLT(Font Layout Table)中找到。有些拼字法需要少量的 FLT 數(shù)據(jù);另外一些字符則需要很多信息來(lái)捕獲復(fù)雜的規(guī)則。

  例如, Sino-Japanese orthography 就沒有前后規(guī)則可以影響單個(gè)字形組合的復(fù)合。然而,泰國(guó)語(yǔ)的確有一些有趣的規(guī)則可以影響 orthography 的變化,但是它對(duì)于泰國(guó)口語(yǔ)不會(huì)產(chǎn)生任何影響。泰國(guó)語(yǔ)的拼字法 對(duì)于周圍的文本來(lái)說(shuō)非常敏感,但是對(duì)于口語(yǔ)來(lái)說(shuō)則并非如此。印度腳本中特定的組合規(guī)則也相當(dāng)復(fù)雜,必須使用 FLT 來(lái)顯示。

  最后,諸如字體、雙向顯示、Unicode 和語(yǔ)言之類的數(shù)據(jù)都會(huì)將文本的顯示呈現(xiàn)在屏幕上。下一個(gè)棘手的問題 —— 也可能是現(xiàn)在正出現(xiàn)在您腦海中的問題 —— 是我們?nèi)绾我苑?ASCII 字體的形式來(lái)輸入文本。

  使用有 500 個(gè)鍵的鍵盤

  對(duì)于英語(yǔ)和很多歐洲語(yǔ)言來(lái)說(shuō),一個(gè)字符映射為一個(gè)鍵(或兩個(gè)鍵)就足夠了。大寫鍵可以直接打印,鍵盤驅(qū)動(dòng)程序可以對(duì)很多更為特殊的情況進(jìn)行編碼,但是其模型是相同的:按下一個(gè)鍵就代表輸入某個(gè)特定的字符。

  那么,如果一種拼字法中有數(shù)百個(gè)字符,或者更特殊一點(diǎn),它們之間有很多組合,情況如何呢?那么我們就不能簡(jiǎn)單地使用一次擊鍵來(lái)實(shí)現(xiàn)了,而是需要使用 擊鍵序列 ,或者快速連續(xù)輸入多個(gè)鍵。有一種特別的軟件叫 輸入法,它可以將每個(gè)鍵盤序列轉(zhuǎn)換成一個(gè)字符或一系列字符。

  當(dāng)然,有些擊鍵序列可能就是一次擊鍵。另外,我們可以創(chuàng)建一種輸入法將標(biāo)準(zhǔn)的拉丁字母鍵盤 轉(zhuǎn)換 成其他語(yǔ)系的拼字法。例如,老式的日語(yǔ)鍵盤就將拉丁字母轉(zhuǎn)換成平假名和片假名。然而,試圖使用 26 個(gè)字母(A 到 Z 的拉丁字母)表示大約 46 個(gè)平假名有些困難。

  鍵盤映射、擊鍵序列以及音譯輸入法都可以使用 m17n 數(shù)據(jù)庫(kù)來(lái)表示。這種方法很大的一個(gè)優(yōu)點(diǎn)是可以將拼字法 的規(guī)則與應(yīng)用程序代碼清楚地區(qū)分開來(lái)。應(yīng)用程序代碼最適合由程序員來(lái)開發(fā);如何顯示正確的文本則是語(yǔ)言學(xué)家的工作。

  獲取 m17n 庫(kù)

  正如上面介紹的一樣,m17n 包括 3 個(gè)庫(kù)和 m17n 數(shù)據(jù)庫(kù)。現(xiàn)在,我們可以使用一個(gè) m17n libc,另外還可以使用一個(gè) Xlib 的 m17n 版本進(jìn)行編碼。開發(fā)團(tuán)隊(duì)正在努力編寫第 3 層的庫(kù)即 m17n X 工具包,它將成為 GTK+ 的一部分。m17n 開發(fā)人員也從事語(yǔ)言綁定的工作,這樣諸如 Perl 和 Ruby 之類的編程語(yǔ)言就都可以使用 m17n 了(這個(gè)工具包和綁定何時(shí)可用,尚沒有進(jìn)度表)。m17n 庫(kù)也已經(jīng)被接納為 Linux Standard Base(LSB)的一個(gè)部分,它可能會(huì)成為 Linux 國(guó)際化標(biāo)準(zhǔn)實(shí)現(xiàn)的一個(gè)很好的部分。

  m17n 庫(kù)的最新版本是 1.3.3,這是在 2006 年 2 月 22 日發(fā)布的。我們可以按照下面的方式來(lái)獲取 m17n 庫(kù):

  下載 m17n 源代碼。這個(gè)下載頁(yè)面中還提供了使用英語(yǔ)和日語(yǔ)編寫的程序員文檔包。

  如果喜歡使用 CVS(Concurrent Versions System),也可以使用下面的 CVS 命令來(lái)下載代碼:

  $ cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/m17n login

  $ cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/m17n co m17n-lib

  $ cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/m17n co m17n-db

  從源代碼開始編譯程序也非常簡(jiǎn)單:m17n 庫(kù)使用了典型的配置腳本來(lái)配置系統(tǒng),并為編譯和安裝創(chuàng)建合適的 Makefile(詳細(xì)內(nèi)容請(qǐng)參看 m17n 軟件包中的 README 文件)。

  如果碰巧使用的是 Debian 的發(fā)行版本,就可以使用非常方便的 APT 安裝工具來(lái)安裝 m17n 庫(kù)和它所依賴的庫(kù)。例如,要尋找 Debian 系統(tǒng)上所有可用的 m17n 包,就需要使用 apt-cache,例如 apt-cache search m17n。

  根據(jù) APT 所指向的 Debian 儲(chǔ)存庫(kù)的不同,可能會(huì)看到如清單 1 所示的輸出內(nèi)容。

  清單 1. apt-cache search m17n 命令的輸出結(jié)果

  libm17n-0 - a multilingual text processing library - runtime

  libm17n-dev - a multilingual text processing library - development

  m17n-db - a multilingual text processing library - database

  m17n-docs - a multilingual text processing library - documents

  m17n-env - set up multilingual X environment

  m17n-lib-bin - a multilingual text processing library - utilities

  mlterm-im-m17nlib - MultiLingual TERMinal, m17nlib input method plugin

  在找到包名之后,就可以運(yùn)行 apt-get install 來(lái)自動(dòng)下載并安裝 m17n 包了。根據(jù) m17n 開發(fā)人員的說(shuō)法,為 Fedora Core、Mandrake、SUSE Linux 和 Gentoo Linux 提供的包也都可以使用。

  m17n 庫(kù)依賴于幾個(gè)其他庫(kù),這幾個(gè)庫(kù)在您的系統(tǒng)上可能有,也可能沒有。請(qǐng)閱讀前提條件中最新的列表。

  m17n 簡(jiǎn)介

  從內(nèi)部來(lái)說(shuō),m17n 庫(kù)會(huì)被組織成幾個(gè)應(yīng)用程序接口(API):

  Core:這個(gè) API 提供了處理 M-texts 的功能。Core API 并不需要 m17n 數(shù)據(jù)庫(kù)。

  Shell:Shell API 增加了 m17n 的數(shù)據(jù)庫(kù)查找和搜索功能。Shell 包括了這個(gè) API 的所有功能和特性。

  GUI:GUI API 提供了在圖形顯示設(shè)備上輸入并顯示文本的功能。GUI 隱式地包含了 Shell 和 Core API 的所有特性。

  Miscellaneous:這個(gè) API 定義了幾個(gè)函數(shù)來(lái)幫助對(duì) m17n 庫(kù)進(jìn)行調(diào)試和跟蹤。

  m17n 庫(kù)的使用與其他 Linux 或 UNIX 的庫(kù)的使用相同。如果要使用這個(gè)庫(kù)的所有特性,就需要在程序中包含 m17n.h 頭文件,然后在鏈接選項(xiàng)中加上 -lm17n 選項(xiàng),這可以在 Makefile 中實(shí)現(xiàn)。 如果只想使用 m17n 的一部分功能,Core、Shell、GUI 以及 Miscellaneous API 每個(gè)都有單獨(dú)的包含文件。不幸的是,m17n 并沒有很多樣例代碼,很多明顯引用它們的程序,例如可以識(shí)別 m17n 的應(yīng)用程序,也只有兩年的時(shí)間。然而,m17n 的軟件開發(fā)包(SDK)確實(shí)包含了一個(gè)簡(jiǎn)單的程序,它可以使用各種編碼來(lái)顯示文件。我們可以查看一下所下載的 m17n 工具包中的 example 目錄。在這個(gè)目錄中,打開 mview.c 文件。這個(gè)文件的一部分如清單 2 所示。

  清單 2. m17n 示例文件

  ...

  325 M17N_INIT ();

  326 if (merror_code != MERROR_NONE)

  327 FATAL_ERROR ("%s\n", "Fail to initialize the m17n library.");

  328

  329 /* Decide how to decode the input stream. */

  330 if (coding_name)

  331 {

  332 coding = mconv_resolve_coding (msymbol (coding_name));

  333 if (coding == Mnil)

  334 FATAL_ERROR ("Invalid coding: %s\n", coding_name);

  335 }

  336 else

  337 coding = Mcoding_utf_8;

  338

  339 mt = mconv_decode_stream (coding, fp);

  340 fclose (fp);

  341 if (! mt)

  342 FATAL_ERROR ("%s\n", "Fail to de

  code the input file or stream!");

  343

  344 {

  345 MPlist *param = mplist ();

  346 MFace *face = mface ();

  347

  348 if (fontsize)

  349 mface_put_prop (face, Msize, (void *) fontsize);

  350 mplist_put (param, Mwidget, shell);

  351 mplist_put (param, Mface, face);

  352 frame = mframe (param);

  353 m17n_object_unref (param);

  354 m17n_object_unref (face);

  355 }

  356

  357 /* Create this widget hierarchy.

  358 Shell - form -+- quit

  359

  360 +- viewport - text */

  361

  362 form = XtCreateManagedWidget ("form", formWidgetClass, shell, NULL, 0);

  363 XtSetArg (arg[0], XtNleft, XawChainLeft);

  364 XtSetArg (arg[1], XtNright, XawChainLeft);

  365 XtSetArg (arg[2], XtNtop, XawChainTop);

  366 XtSetArg (arg[3], XtNbottom, XawChainTop);

  367 XtSetArg (arg[4], XtNaccelerators, XtParseAcceleratorTable (quit_action));

  368 quit = XtCreateManagedWidget ("quit", commandWidgetClass, form, arg, 5);

  369 XtAddCallback (quit, XtNcallback, QuitProc, NULL);

  370

  371 viewport_width = (int) mframe_get_prop (frame, Mfont_width) * 80;

  372 viewport_height

  373 = ((int) mframe_get_prop (frame, Mfont_ascent)

  374 + (int) mframe_get_prop (frame, Mfont_descent)) * 24;

  375 XtSetArg (arg[0], XtNallowVert, True);

  376 XtSetArg (arg[1], XtNforceBars, False);

  377 XtSetArg (arg[2], XtNfromVert, quit);

  378 XtSetArg (arg[3], XtNtop, XawChainTop);

  379 XtSetArg (arg[4], XtNbottom, XawChainBottom);

  380 XtSetArg (arg[5], XtNright, XawChainRight);

  381 XtSetArg (arg[6], XtNwidth, viewport_width);

  382 XtSetArg (arg[7], XtNheight, viewport_height);

  383 viewport = XtCreateManagedWidget ("viewport", viewportWidgetClass, form,

  384 arg, 8);

  385

  386 /* Before creating the text widget, we must calculate the height of

  387 the M-text to draw. */

  388 control.two_dimensional = 1;

  389 control.enable_bidi = 1;

  390 control.disable_caching = 1;

  391 control.max_line_width = viewport_width;

  392 mdraw_text_extents (frame, mt, 0, mtext_len (mt), &control,

  393 NULL, NULL, metric);

  ...

  下面對(duì)這些代碼詳細(xì)介紹一下:

  第 325 行負(fù)責(zé)對(duì) m17n 庫(kù)進(jìn)行初始化。

  第 330 行的 coding_name 變量源自于一個(gè)指定輸入文件編碼的命令行參數(shù);如果沒有提供這種命令行,就使用 UTF-8 編碼。

  第 339 行讀取到達(dá)的數(shù)據(jù),并根據(jù)編碼類型對(duì)其進(jìn)行解碼,現(xiàn)在都反應(yīng)在 coding 中。

  第 345 到 354 行設(shè)置要畫的文本框架。第 345 行從手頭的 M-text 中提取出一些屬性,而 346 行則提取出給定文本使用的適當(dāng)字體。第 348 行設(shè)置要顯示使用的字體大小(fontsize 是另外一個(gè)命令行參數(shù)),第 350 和 351 行設(shè)置該框架中要畫的其他屬性,包括要畫到哪個(gè)小部件上(前面的 shell = XtOpenApplication (&context, "M17NView", NULL, 0, argc, argv, NULL, sessionShellWidgetClass, NULL, 0) 和最后的類型定義。

  第 362 到 383 行是典型的 X 工具包調(diào)用,用來(lái)設(shè)置應(yīng)用程序的主窗口。第 371 到 372 行負(fù)責(zé)計(jì)算對(duì)于本地拼字法的一個(gè) 80 x 24 的窗口來(lái)說(shuō),視口應(yīng)該多大。

  最后,在為 M-text 呈現(xiàn)設(shè)置一些參數(shù)之后,在 392 行就會(huì)開始顯示 m17n 文本。

  總而言之,上面對(duì)這段代碼片段的簡(jiǎn)短分析就說(shuō)明了在標(biāo)準(zhǔn)的 X 應(yīng)用程序中通常要執(zhí)行哪些操作。在很多情況中,創(chuàng)建一個(gè)多語(yǔ)言的應(yīng)用程序只需要很少的額外代碼就可以實(shí)現(xiàn),這需要采用 m17n 的函數(shù),而不是傳統(tǒng)的 X 調(diào)用。

  展望

  如果沒有可以構(gòu)建 m17n 代碼的系統(tǒng),也不要煩惱。您仍然可以通過在線 m17n 呈現(xiàn)演示來(lái)體驗(yàn)這個(gè)庫(kù)的作用。

  據(jù)開發(fā)人員說(shuō),他們正在繼續(xù)在 GTK+ 中集成 m17n —— 這是擴(kuò)寬 m17n 的認(rèn)可程度以及影響力的下一個(gè)必不可少的步驟?,F(xiàn)在,m17n 項(xiàng)目缺少樣例代碼供參考和擴(kuò)展。建立更好的文檔也是另外一個(gè)需要做的工作,這與為主流平臺(tái)提供二進(jìn)制文件一樣重要。然而,m17n 確實(shí)承諾會(huì)對(duì)各個(gè)省的方言也能夠?qū)崿F(xiàn) WYSIEYG 的編輯。這對(duì)任何語(yǔ)言來(lái)說(shuō)都是個(gè)好消息。

  個(gè)人計(jì)算機(jī)已經(jīng)不再是什么新奇的東西了。實(shí)際上,在不到 20 年的時(shí)間內(nèi),計(jì)算機(jī)已經(jīng)成為了家庭的日常用品 —— 只不過它不是什么衣服之類的東西,而是用來(lái)管理信息的工具。然而,有些國(guó)家計(jì)算機(jī)的獲得和使用還并不普遍。為了平衡這種不平等,需要讓這些國(guó)家能夠獲得負(fù)擔(dān)得起的各種計(jì)算機(jī)硬件和軟件。另外,還要保證本土居民能夠以本地方言來(lái)使用計(jì)算機(jī)。

  m17n 庫(kù)構(gòu)建在 Unicode 和其他標(biāo)準(zhǔn)之上,用來(lái)根據(jù)手寫語(yǔ)言的規(guī)則畫出任意復(fù)雜的拼字法。它將代碼與字符的格式區(qū)分開來(lái),因此相同的代碼可以反復(fù)使用,甚至是在相同的應(yīng)用程序中呈現(xiàn)不同的拼字法都可以。隨著這些工作的不斷進(jìn)展,m17n 正在逐漸讓計(jì)算機(jī)語(yǔ)言變成一種全球的方言。

如沒特殊注明,文章均為中技互聯(lián)原創(chuàng),轉(zhuǎn)載請(qǐng)注明來(lái)自www.tmsmall666.cn
相關(guān)新聞

CopyrightZJCOO technology Co., LTD. All Rights Reserved.    

渝ICP 備11003429號(hào)

  • qq客服
  • 公眾號(hào)
  • 手機(jī)版
  • 新浪微博