支持构件复用的方块苗文字库开发方法
2018-06-26莫礼平周恺卿
莫礼平,周恺卿
吉首大学 信息科学与工程学院,湖南 吉首 416000
1 引言
方块苗文创制于清朝末年,包括老寨苗文、古丈苗文和板塘苗文三套,是武陵山片区民间苗族文化的主要载体。方块苗文的信息化对于推进以张家界旅游区和凤凰景区为依托的武陵山片区民族文化旅游产业的迅速发展,以及苗族文化非物质遗产数字化保护进程有着重要作用。至今,国内苗文信息化研究工作和成果少见报道。文献[1]报道了余乐等研制的计算机苗文处理系统和吴光州等研制的云南规范苗文计算机处理系统。这两个系统仅限于DOS操作系统下对拼音苗文进行输入和简单的编辑排版,无法处理方块苗文。2005年,朱文光等[2]研制了苗文TrueType字库和输入法软件,有效解决了Windows XP操作系统下滇东北次方言等拼音苗文的计算机存储、输入和显示问题,但同样不适用于方块苗文。近年来,莫礼平等[3-6]针对方块苗文的计算机编码表示、存储、键盘输入、字形生成显示、字体设计及字库制作等字信息处理技术开展了一系列研究工作,取得了若干阶段性成果,为实现方块苗文信息化奠定了良好的基础。
字库是方块苗文信息化需要解决的首要问题。方块苗文的输入、识别等计算机处理均离不开字库。文献[3]以板塘苗文为例,给出了基于Unicode标准的方块苗文计算机编码设计方案,探讨了使用Photoshop CS 5.0和FontCreator 4.1软件创建方块苗文TrueType字库的具体步骤。但这种字库不支持构件复用,需要对苗文字符逐一编码存储。文献[5]提出了仅需对名义字符(独体字和构件)进行编码存储的方块苗文OpenType字库的设计思想,并采用抽象函数和谓词规则对构件组合替换得到方块苗文所涉及的构件字形位置布局及字形变换相关操作符及操作规则进行了形式化描述,为支持构件复用的方块苗文字库开发做好了铺垫。
本文以文献[5]给出的操作符及操作规则为基础,结合方块苗文构成表示的形式化描述技术,探讨支持构件复用的方块苗文字库的具体开发方法。
2 方块苗文及其构成的形式化描述
2.1 方块苗文的构字方式及结构特点
据文献[7-8],方块苗文是一种仿汉字结构的方块文字,它以假借汉字为主,创造性地运用了形声、会意、假借、象形等手段进行造字,直接取一些易认易记的汉字、汉字部首和极个别无音无义的纯粹符号(如“~”,“X”)作为义符、声符或形符构件,采用一字一音节的方法来标记一个语素或词。方块苗文几乎全是合体字,其结构大致分为图1所示的四类:左右型、上下型、侧围型和内外型。其中,侧围型又分为左上包、左下包和右上包三种。当一个方块苗文由三个及三个以上部分构成时,其中的某两个或三个部分通常可组成一个简单汉字。此时,宜将此简单汉字视为一个构件。
图1 不同结构方块苗文字例及其汉义
对目前已整理出的1 129个方块苗文进行统计的结果表明,大部分方块苗文均可视为二构件型合体字,仅个别左右型和上下型的苗文需当作三构件型处理。方块苗文的构件可归为表1所示的16类。
2.2 方块苗文构成的DFA表示
根据方块苗文的构字方式,利用表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个构件字符经组合变换得到的。某一类别的任意一个构件字符通过与同一条路径上其他类别的任意一个构件字符进行自由组合,即可以生成相同类型的多个方块苗文,从而达到构件复用之目的。例如,一个左下外包构件字符“色”,可与“白”“黑”“青”“红”等右上内含构件字符自由组合,生成表示不同颜色的一组侧围型结构的方块苗文;一个上构件字符“雨”,可与“奴”“送”“号”“者”“朽”“气”“风”“白”等下构件字符自由组合,生成表示天气的一组上下型结构的方块苗文。
3 OpenType技术简介
根据方块苗文构成的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)的形式出现。特征表是核心,每个特征索引值均关联到一个或多个查找表。查找表中定义了实现字形组合替换及组合置位所需要的查找数据(即特征脚本)。
4 方块苗文字库开发过程
采用OpenType技术开发支持构件复用的方块苗文字库的关键,就是根据方块苗文的结构特征规划OpenType布局表,并以构件的字形矢量数据(字模)为基础,设计构件字形自由组合变换所需特征脚本。
下面从字形矢量数据生成、字库标签设置、特征脚本添加、字库数字签名等方面介绍支持构件复用的方块苗文OpenType字库的具体开发方法。
4.1 字形矢量数据的生成
操作系统显示字符时,由其内置的字形解释器根据字符的编码从字库中自动提取字形矢量数据,并绘制输出。生成构件字符目标字形矢量数据是开发支持构件复用的方块苗文字库的第一步。以楷体为例,生成方块苗文构件字符目标字形矢量数据的步骤如下:
(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文件。
4.2 字库标签的设置
方块苗文OpenType字库使用Microsoft公司的可视化OpenType字体特征表格布局工具VOLT(Visual OpenType Layout Tool)[15]Version 1.4.273 开发。
在VOLT中,打开存储方块苗文构件字符目标字形矢量数据的TTF文件,将其另存为OpenType格式的“方块苗文楷体”字库后进行字库标签信息设置。因方块苗文属于表意文字,故字库的文字标签设置为“CJK Ideographic
根据构件位置布局及字形变换映射的实际需要,在方块苗文OpenType字库的特征标签“Standard Ligatures
4.3 特征脚本的添加
编写特征脚本实质上就是填写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.4 字库的数字签名
数字签名为字库提供一种可靠的身份证明,能够保证字库的完整性、安全性、真实性和可信性。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 已数字签名的方块苗文字库信息
5 方块苗文字库的测试和链接
在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或其他文本编辑软件中将当前文档的字体设置为“汉字楷体”,就可实现方块苗文、汉字和英文的同时混合显示了。
6 结束语
由图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.