莫禮平,周愷卿
吉首大學 信息科學與工程學院,湖南 吉首 416000
方塊苗文創制于清朝末年,包括老寨苗文、古丈苗文和板塘苗文三套,是武陵山片區民間苗族文化的主要載體。方塊苗文的信息化對于推進以張家界旅游區和鳳凰景區為依托的武陵山片區民族文化旅游產業的迅速發展,以及苗族文化非物質遺產數字化保護進程有著重要作用。至今,國內苗文信息化研究工作和成果少見報道。文獻[1]報道了余樂等研制的計算機苗文處理系統和吳光州等研制的云南規范苗文計算機處理系統。這兩個系統僅限于DOS操作系統下對拼音苗文進行輸入和簡單的編輯排版,無法處理方塊苗文。2005年,朱文光等[2]研制了苗文TrueType字庫和輸入法軟件,有效解決了Windows XP操作系統下滇東北次方言等拼音苗文的計算機存儲、輸入和顯示問題,但同樣不適用于方塊苗文。近年來,莫禮平等[3-6]針對方塊苗文的計算機編碼表示、存儲、鍵盤輸入、字形生成顯示、字體設計及字庫制作等字信息處理技術開展了一系列研究工作,取得了若干階段性成果,為實現方塊苗文信息化奠定了良好的基礎。
字庫是方塊苗文信息化需要解決的首要問題。方塊苗文的輸入、識別等計算機處理均離不開字庫。文獻[3]以板塘苗文為例,給出了基于Unicode標準的方塊苗文計算機編碼設計方案,探討了使用Photoshop CS 5.0和FontCreator 4.1軟件創建方塊苗文TrueType字庫的具體步驟。但這種字庫不支持構件復用,需要對苗文字符逐一編碼存儲。文獻[5]提出了僅需對名義字符(獨體字和構件)進行編碼存儲的方塊苗文OpenType字庫的設計思想,并采用抽象函數和謂詞規則對構件組合替換得到方塊苗文所涉及的構件字形位置布局及字形變換相關操作符及操作規則進行了形式化描述,為支持構件復用的方塊苗文字庫開發做好了鋪墊。
本文以文獻[5]給出的操作符及操作規則為基礎,結合方塊苗文構成表示的形式化描述技術,探討支持構件復用的方塊苗文字庫的具體開發方法。
據文獻[7-8],方塊苗文是一種仿漢字結構的方塊文字,它以假借漢字為主,創造性地運用了形聲、會意、假借、象形等手段進行造字,直接取一些易認易記的漢字、漢字部首和極個別無音無義的純粹符號(如“~”,“X”)作為義符、聲符或形符構件,采用一字一音節的方法來標記一個語素或詞。方塊苗文幾乎全是合體字,其結構大致分為圖1所示的四類:左右型、上下型、側圍型和內外型。其中,側圍型又分為左上包、左下包和右上包三種。當一個方塊苗文由三個及三個以上部分構成時,其中的某兩個或三個部分通常可組成一個簡單漢字。此時,宜將此簡單漢字視為一個構件。

圖1 不同結構方塊苗文字例及其漢義
對目前已整理出的1 129個方塊苗文進行統計的結果表明,大部分方塊苗文均可視為二構件型合體字,僅個別左右型和上下型的苗文需當作三構件型處理。方塊苗文的構件可歸為表1所示的16類。
根據方塊苗文的構字方式,利用表1中的16類構件,可用確定有窮自動機DFA(Deterministic FiniteAutomata)對方塊苗文的構成表示進行形式化描述。該DFA用五元組表示為M=(K,A,F,S,Z),其中:

表1 方塊苗文構件的類別及其符號表示
(1)K是狀態有窮集,K={0,1,2,3,4,5,6,7,8,9};
(2)A是對應16類構件字符的輸入符號有窮集,A={cl,cu,colu,cold,coru,coa,cr,cd,cird,ciru,cild,cia,crl,cdl,crr,cdr};
(3)F是K×A→K上的映射集,F={f(0,cl)=1,f(0,cu)=2,f(0,colu)=3,f(0,cold)=4,f(0,coru)=5,f(0,coa)=6,f(1,crl)=7,f(1,cr)=9,f(2,cdl)=8,f(2,cu)=9,f(3,cird)=9,f(4,ciru)=9,f(5,cild)=9,f(6,cia)=9,f(7,crr)=9,f(8,cdr)=9};
(4)S∈K,是初態,取值唯一,S=0;
(5)Z?K,是終態(也稱為結束態、可接受態或可識別態)集,Z={9}。
圖2給出了該DFA的狀態圖表示。圖2中,從初態0出發,到達終態9的任意路徑上的構件字符序列都可組合成一個方塊苗文。

圖2 識別方塊苗文的DFA狀態圖
圖2所示的DFA實際上建立了由構件字符組合得到方塊苗文的變換映射關系。圖2中,從初態到終態的所有路徑的長度均為2或3,表明方塊苗文是由分屬不同類別的2~3個構件字符經組合變換得到的。某一類別的任意一個構件字符通過與同一條路徑上其他類別的任意一個構件字符進行自由組合,即可以生成相同類型的多個方塊苗文,從而達到構件復用之目的。例如,一個左下外包構件字符“色”,可與“白”“黑”“青”“紅”等右上內含構件字符自由組合,生成表示不同顏色的一組側圍型結構的方塊苗文;一個上構件字符“雨”,可與“奴”“送”“號”“者”“朽”“氣”“風”“白”等下構件字符自由組合,生成表示天氣的一組上下型結構的方塊苗文。
根據方塊苗文構成的DFA表示,支持構件復用的方塊苗文字庫需用2~3個構件字符碼點的組合序列來表示一個方塊苗文,以體現由構件字符自由組合得到不同方塊苗文的字形變換映射關系。這要求所采用的字庫技術必須支持碼點到字形的多對一映射。OpenType技術正好滿足這一要求。
OpenType技術是一種支持Unicode字符集和多語種多文字高級編排功能的開放式字庫技術,具有跨平臺性、易擴充性、適用范圍廣等優點[9]。該技術在融合TrueType和PostScript兩種字體技術的基礎上,借助字庫標簽和布局表來實現文字的高級編排功能,允許同一個語言的字符和字形之間建立映射關系以靈活控制字體,為字形的自由變換處理,以及復雜文本字體的高質量顯示和打印提供了捷徑。目前,維文[10]、藏文[11-12]、蒙古文[13-14]等少數民族文字的OpenType字庫已應用于Windows、Linux操作系統和網絡環境中,取得了良好的社會效益和經濟效益。
OpenType布局表包括5張表[9]:字形定義表GDEF、字形替換表GSUB、字形置位表GPOS、字形調整表JSTF和字形基線對齊表BASE。GSUB和GPOS兩張表定義了文字(Script)、語言(Language)、特征(Feature)和基線(Baseline)四種字庫標簽值,存儲了與字形及位置替換特征相關的全部信息,幾乎覆蓋了所有復雜文本的處理要求。四種字庫標簽在這兩張表中以文字表(ScriptList)、語言表(LanguageList)、特征表(FeatureList)和查找表(LookUpList)的形式出現。特征表是核心,每個特征索引值均關聯到一個或多個查找表。查找表中定義了實現字形組合替換及組合置位所需要的查找數據(即特征腳本)。
采用OpenType技術開發支持構件復用的方塊苗文字庫的關鍵,就是根據方塊苗文的結構特征規劃OpenType布局表,并以構件的字形矢量數據(字模)為基礎,設計構件字形自由組合變換所需特征腳本。
下面從字形矢量數據生成、字庫標簽設置、特征腳本添加、字庫數字簽名等方面介紹支持構件復用的方塊苗文OpenType字庫的具體開發方法。
操作系統顯示字符時,由其內置的字形解釋器根據字符的編碼從字庫中自動提取字形矢量數據,并繪制輸出。生成構件字符目標字形矢量數據是開發支持構件復用的方塊苗文字庫的第一步。以楷體為例,生成方塊苗文構件字符目標字形矢量數據的步驟如下:
(1)采用Microsoft Word 2010建立一個Word新文檔。在文檔中輸入已整理出的所有方塊苗文構件字符并進行復制。逐一選擇復制的構件字符,按Alt+X鍵,將其轉換成Unicode碼位。
(2)打開字體制作軟件FontCreator 6.5漢化版,新建一個基于Unicode字符集的名為“方塊苗文楷體(構件)”的TrueType字體文件。
(3)在FontCreator中,打開Windows文件夾Fonts下的漢字楷體TrueType文件。從中選擇回車、換行、空字符、空格控制字符,0~9數字符號,A~Z、a~z英文字母符號,常用運算符、標點符號,以及表意文字描述符[U+2FF0…U+2FFB]的字模,將其復制到新建文件中;再根據Word文檔中方塊苗文構件字符的Unicode碼位,找到所有構件字符的原始字形字模,將其逐一復制至新建文件中。
(4)利用FontCreator提供的字形輪廓曲線增刪、移動、變形、旋轉、縮放等工具,根據16類構件字符在方塊苗文合體字中所處的位置,確定其像素點取值范圍,并對各個構件字符原始字模進行編輯調整,生成相應構件字符的目標字形矢量數據。
(5)為各個構件字符目標字形添加Unicode碼位(從用戶自定義區間的E000處開始編碼)。
(6)將新建文件另存為“方塊苗文楷體(構件)”文件保存,得到存儲方塊苗文構件字符目標字形矢量數據的TTF文件。
方塊苗文OpenType字庫使用Microsoft公司的可視化OpenType字體特征表格布局工具VOLT(Visual OpenType Layout Tool)[15]Version 1.4.273 開發。
在VOLT中,打開存儲方塊苗文構件字符目標字形矢量數據的TTF文件,將其另存為OpenType格式的“方塊苗文楷體”字庫后進行字庫標簽信息設置。因方塊苗文屬于表意文字,故字庫的文字標簽設置為“CJK Ideographic
根據構件位置布局及字形變換映射的實際需要,在方塊苗文OpenType字庫的特征標簽“Standard Ligatures
編寫特征腳本實質上就是填寫Lookup表數據,即將具體的替換規則和置位規則用OpenType腳本語言寫入GSUB和GPOS兩張布局表中。
為了提高腳本編寫效率,先根據表1建立構件字形組,將各個構件字符目標字形按所屬類別組織到不同的字形組中,以便統一處理。在VOLT中,使用“Glyph Groups”面板的“Add Glyph Group”按鈕建立字形組,并通過逐行添加字形名稱,將同類別的構件字符目標字形加入到同一個字形組中。圖3為左下外包字形組LeftDownOutside Member和右上內含字形組Right-UpInside Member的部分截圖。

圖3 字形組示例
圖4給出了基于LeftDownOutside Member和Right-UpInside Member兩個字形組添加的左下包含(Left-DownContain)置位特征腳本及所生成的方塊苗文的字形示例。

圖4 左下包含置位特征腳本及所生成的方塊苗文字形示例
圖5給出了基于表意文字描述符和構件字符原始字形進行左右連接(LRL_Liga)替換的特征腳本及所生成的方塊苗文字形示例。

圖5 左右連接操作特征腳本及所生成的方塊苗文字形示例
將“Lookups”面板下添加了特征腳本的各個Lookup子表拖拽至特征標簽“Standard Ligatures

圖6 包含字體布局特征的方塊苗文字庫
數字簽名為字庫提供一種可靠的身份證明,能夠保證字庫的完整性、安全性、真實性和可信性。4.3節得到的方塊苗文楷體OpenType字庫顯示為TrueType字庫默認圖標,而非OpenType字庫默認圖標。這是因為Windows操作系統以是否包含數字簽名DSIG(Digital Signature)表來判定字庫是否為OpenType字庫。為此,需要通過數字簽名將DSIG表追加到方塊苗文楷體OpenType字庫中。
為了簡化字庫的數字簽名工作,Microsoft官網上提供了可免費下載的字庫數字簽名程序[16]。這些程序包括證書(.cer)和密鑰(.pvk)生成程序MAKECERT、公鑰(.spc)生成程序CERT2SPC、簽名程序 SIGNCODE和簽名檢驗程序CHKTRUST。采用這些程序簽名方塊苗文楷體OpenType字庫的步驟如下:
(1)復制mssipotf.dll至操作系統文件夾windowssystem32下,使用regsvr32命令注冊mssipotf.dll。
(2)運行makecert命令,生成證書和密鑰。
(3)運行cert2spc命令,生成證書文件(.cer)對應的公鑰。
(4)運行signcode命令,簽名方塊苗文楷體字庫,并選擇性加入時間戳標簽、字庫名稱、廠商等信息。
(5)運行chktrust命令,檢驗字庫簽名正確性。
簽名成功的方塊苗文楷體字庫的顯示圖標變成OpenType字庫默認圖標,且文件屬性面板中出現包含證書詳細信息及其時間戳的“數字簽名”選項卡。打開字庫文件可以看到“已數字簽名”的信息(見圖7)。

圖7 已數字簽名的方塊苗文字庫信息
在Microsoft Windows 8.1操作系統中,將方塊苗文字庫安裝至Windows文件夾的Fonts目錄后,使用Microsoft Word 2010對字庫進行實用測試。測試字庫時,先選擇Windows自帶的漢字楷體四號字輸入由漢字、英文組成的文檔,再將字體設置為該字庫對應的方塊苗文楷體四號字,并借助自行研制的方塊苗文輸入法軟件輸入方塊苗文,插入到文檔中,得到苗漢英三種文字混排效果如圖8所示。

圖8 方塊苗文同其他文字混排的測試效果
上述混排文檔測試時,因需選擇不同字庫的字體,必須頻繁設置字體。這無疑會增大系統開銷。此外,采用記事本等應用程序編輯混排文檔時,只能使用一種字體,無法實現方塊苗文和漢字英文的混合顯示。字庫鏈接技術為解決上述問題提供了一種有效途徑。字庫鏈接把一個或多個字庫(稱“被鏈接字庫”)鏈接到其他字庫(稱“基本字庫”)。用戶只需設置與基本字庫對應的字體,即可顯示被鏈接字庫中編碼點對應的字符,從而實現同一文檔中的多語言多文種字符的同時混合顯示。
將方塊苗文字庫鏈接到Windows自帶漢字楷體字庫可通過修改注冊表來實現。首先,打開注冊表,找到“HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrent VersionFont LinkSystem Link”子項。然后,打開System Link子項,從右邊窗口中顯示的所有可設置字體鏈接的系統基本字體中,找到漢字楷體字庫對應的子鍵Simkai,在該子鍵編輯窗口的數值數據窗口中,添加“方塊苗文楷體.ttf,方塊苗文楷體”新項。最后,保存注冊表,重啟計算機,在記事本、Word或其他文本編輯軟件中將當前文檔的字體設置為“漢字楷體”,就可實現方塊苗文、漢字和英文的同時混合顯示了。
由圖8可見,所開發的方塊苗文楷體字庫支持構件復用,由構件組合替換規則和組合置位規則對應的特征腳本所生成的字形整齊規范,且同漢字、英文的混合顯示效果良好。顯然,字庫在實用性方面能夠達到用戶要求。
目前,采用本文提出的方法所開發的基于楷體、宋體、黑體、仿宋四種字體的方塊苗文OpenTypep字庫已在方塊苗文的實際編輯處理中得到應用。這些字庫都具有文件小、易擴充等特點。日后收集到方塊苗文新構件字符時,只需在生成新構件字符的目標字形數據后,在原字庫中針對新構件字符的字形數據和特征腳本進行添加和修改,即可實現新添構件的復用,從而讓方塊苗文字庫得到不斷的擴充和完善。
[1]龍德義.計算機苗文處理系統研制成功[J].今日民族,1995(5):16.
[2]趙書勇,吳曉霞.安寧學者研發苗文輸入法[N].昆明日報,2013-08-26(6).
[3]莫禮平,周愷卿,蔣效會.板塘苗文的計算機編碼及字庫創建[J].吉首大學學報:自然科學版,2013,34(2):31-35.
[4]莫禮平,曾水玲,周愷卿.音形結合的方塊苗文輸入編碼方案研究[J].計算機科學與探索,2014,8(8):1017-1024.
[5]莫禮平,周愷卿,蔣效會.基于OpenType技術的方塊苗文字庫研究[J].中文信息學報,2015,29(2):150-156.
[6]莫禮平,周愷卿.一種湘西民間苗文字形的動態生成方法及其實現途徑[J].北京大學學報:自然科學版,2016,52(1):141-147.
[7] 趙麗明,劉自齊.湘西方塊苗文[J].民族語文,1990,12(1):44-49.
[8]楊再彪,羅紅源.湘西苗族民間苗文造字體系[J].吉首大學學報:社會科學版,2008,29(6):130-134.
[9]Microsoft Corporation.OpenType specification version 1.6[EB/OL].(2009-09-21)[2016-01-02].http://www.microsoft.com/typography/otspec.
[10]蘇國平,繆成,夏國平.基于Open Type的維哈柯文自動選形引擎的設計與實現[J].中文信息學報,2007,21(4):116-121.
[11]曹暉.藏文OpenType字體技術研究及實現[J].西北民族大學學報:自然科學版,2008,29(3):24-28.
[12]劉永宏,張成英.Opentype技術在藏文教育網站頁面顯示中的實現與應用[J].中國遠程教育,2011(8):85-87.
[13]田寄遠,趙小兵.Linux-GNOME平臺下基于OpenType的蒙古文自動選形引擎的設計與實現[J].內蒙古大學學報:自然科學版,2008,40(3):320-325.
[14]斯日古楞,呼斯勒.基于蒙古文編碼國家標準的OpenType字庫研究與實現[J].內蒙古師范大學學報:哲學社會科學版,2016,49(4):86-89.
[15]Microsoft Corporation.Visual OpenType Layout Tool(VOLT)[EB/OL].(2009-01-15)[2016-01-16].http://www.microsoft.com/typography/VOLT.mspx.
[16]Microsoft Corporation.OpenType font signing tool[EB/OL].(2003-01-30)[2016-03-28].http://www.microsoft.com/typography/developers/dsig/dsig.htm.