基于java的蒙古文显示方法

文档序号:6367425阅读:791来源:国知局
专利名称:基于java的蒙古文显示方法
技术领域
本发明涉及ー种蒙古文显示方法,尤其涉及一种基于JAVA的蒙古文显示方法。
背景技术
蒙古文是ー种拼音文字。蒙古文中存在的独特的“一音多形,一形多音”现象,使蒙古文被世界公认为信息处理中最复杂的文本。我国从上世纪70年代末就开始了蒙古文信息处理方面的研究工作,那时的蒙古文字符编码没有统ー的国际或国家标准,一般都使用开发者自定义编码。随着国际标准IS0/IEC10646和国家标准GB13000的制定,蒙古文字符有了统ー的标准编码。如何在信息处理中应用蒙古文国际或国家标准编码,越来越受到重视。在现行的国际或国家标准中,蒙古文字母是按照读音确定的。但是蒙古文单词的书写和其它拼音文字有很大区别,蒙古文单词在书写时,不是按国际或国家标准中定义的 蒙古文字符显现的,而是由这些字母的变形显现字符显现的。通常把在国际或国家标准中定义的蒙古文字符称为“名义字符”,把用于显现的“名义字符”的变形字符称为“变形显现字符”。大多数“名义字符”都有2个以上的“变形显现字符”,最多可达9个“变形显现字符”。每个“名义字符”的形状不同,但不同的“名义字符”所对应的“变形显现字符”的形状却有字形相同的显现。如字母的变形有ぐ、力、>、ヽへへ'/、〕,字母、的变形有 >、*、へI、〕。如果不考虑相同字形,仅按照每个“名义字符”对应的“变形显现字符”计算,总共156个“名义字符”对应的“变形显现字符”的数量可达近1000个。根据蒙古文构词语法,构成蒙古文单词的字母的形状在词的不同位置(词首、词中、词末)其形状有所不同;与其相邻的字符不同,其形状也可能不一样。还有些字符在单词中相邻时,会产生ー种组合式变形,成为合体字。如e后接W会组合成& (词中)或れ(词末)。因此,在使用蒙古文标准编码时,必须明确“名义字符”在单词中出现时应该使用哪个“变形显现字符”,同时更为重要的是要有一个能够正确解释这些复杂变换的引擎。现有技术中,在Linux系统中使用一个称为Pango的函数库来实现复杂文本的显示,该技术使用解析OpenType字库的方法实现上述功能。该技术只可应用于Linux平台,并且尤其重要的是该技术不支持蒙古文的显示。

发明内容
为了解决上述技术问题,本发明提供一种基于JAVA的蒙古文显示方法,主要是通过ー种能够解析蒙古文Opentype字库名义字符和变形显现字符映射规则的处理引擎实现的。利用该引擎可在支持JAVA程序运行的手机及其它移动设备上使用符合国际或国家标准编码的蒙古文,进而实现移动设备和计算机间蒙古文信息的直接交換。其技术方案如下一种基于JAVA的蒙古文显示方法,包括以下步骤建立蒙古文字体引擎,所述字体引擎是ー个相对独立的函数,函数格式为Font.drawText (text, compatiblePath),參数text为输入的国标码字符串,函数输出字形图形至Ij compatibIePath ;提供接口来访问蒙古文OpenType字库的字体引擎将所述蒙古文字体引擎引入到应用程序中,并实现用于绘图的Path接口,调用Font. drawText (text, compatib I ePath)函数后,自动生成符合当前应用环境的字体图形,将其绘制到需要的位置即可。此外,调用者可以使用该环境下任意可行的方法对获得的图形进行旋转、缩放、及任意的字体变形,由于图形的特性,这些变换不会对字形质量带来任何影响,这可以充分满足用户的任意排版需求。字符属性标注 字符到字形编号的映射在字体文件中包含一张称为cmap (字符映射)的数据表,包含每一个字符和它对应的默认字符之间的匹配关系;字形替换第一步是查找要替换的那个或那些字形,第二步是执行替换;字形绘制定义一个绘图接口将绘图工作抽象为若干待实现的函数,填充字形时使用“奇偶规则”填充,即完成字形绘制工作。本发明确定字形中的一点是否被填充的方法为以考察点为起点,引一条射线(方向任意),初始化计数器为0,当射线穿越轮廓时(无论方向如何),计数器加1,最终当计数器为奇数时填充该点。现代字体使用轮廓描述,绘制字形时只需绘制出轮廓,再为轮廓填充颜色。由于在不同的应用环境中图形绘制的方法不尽相同,所以这里定义一个绘制图形的接口,这个接口只定义了绘制直线、曲线等基本绘图方法。实现此接口一般只需直接调用该环境下的对应方法即可。填充字形时使用“奇偶规则”填充,即完成字形绘制工作。其中确定字形中的一点是否被填充的方法如下所述以考察点为起点,引一条射线(方向任意),初始化计数器为0,当射线穿越轮廓时(无论方向如何),计数器加I,最终当计数器为奇数时填充该点。本发明的有益效果本发明可应用于支持Java程序运行的手机、移动设备,甚至网络环境中,能够实现按蒙古文国际或国家标准编码存储、显示、输出蒙古文字,实现手机等移动设备与计算机之间、移动设备之间蒙古文信息的直接交换。可以有利于蒙古文信息处理的研究与发展,有利于增进各民族之间的交流。目前大多数手机都支持Java技术,因此本发明有广泛的应用环境与潜质。


图I为本发明字体引擎处理流程图;图2为本发明替换规则逻辑结构图。
具体实施例方式下面结合附图和具体实施方式
对本发明的方法作进一步详细地说明。由于蒙古文词中普遍存在的“一音多形,一形多音”现象,使得对蒙古文的处理相对其它文字要复杂的多。蒙古文字符的字形会随着其在词中位置的不同而变化,且多数变化有一定的规律性,有些变化规律存在二义性,可以通过专用控制符加以区别。通常人们对字库的理解是字库中仅包含字符形状的数据及其对应的编码,程序把字符编码送入字库,字库返回对应的字形数据。蒙古文Opentype字库中不仅存放字符的字形数据和名义字符编码,同时还包括蒙古文名义字符和其变形显现字符间的映射关系的描述,其中只有名义字符才有编码,变形显现字符是没有编码的。每个名义字符在词的不同位置使用哪个变形、一个字符后接某个字符或接哪些字符(串)后使用哪个变形、一个字符在词中强制使用哪个形状等都需要给出完备的信息描述。图I是本发明的处理流程示意图。本发明是用JAVA语言编写的一个能够提供接ロ来访问蒙古文OpenType字库的字体引擎。它对外表现为输入符合国家标准的蒙古文字母编码串,输出对应的蒙古文变形显现字符图形。该字体引擎是ー个相对独立的函数,函数格式为Font. drawText (text, compatiblePath), text为输入的国标码字符串,函数输出字形图形到compatiblePath。该函数可以应用在所有支持Java的环境中。首先读入要绘制的字符串,分析输入的字符串,确定其中各个字符的属性,并对其进行标注;再将字符编码映射到字形序号;然后根据字体替换规则及第一步标注的字符属性,将组成字符串的各个字形变成正确的形式;最后将需要的字形绘制输出。这样就完成整个处理过程。技术实现方案如下 字符属性标注在蒙古文中,字母会随着它出现在词中的位置不同而有不同的字形,而控制符的加入又使之更加复杂,在将字符转换为默认的字形编号时,其中的一些信息可能会丢失,因此在转换为字形编号之前标注字符的属性,这些属性包括SUBST_N0D0 = I ; // 非蒙古文SUBST_MEDI = I << I ;// 词中SUBST_INIT = I << 2 ;// 词头SUBST_FINA = I << 3 ;// 词尾SUBST_IS0L = I << 4 ;// 独立体上面列出的属性值的大小是有意义的。在字形合体替换过程中,字符在词中出现的位置可能会发生改变,因此需要有判定合体之后字形最終属性的方法。规定(除特殊情形外)參与合体所有字形的最大属性值为合体后字形的属性值。字符的属性也是对应字形的属性。例如字串“外,,国标码为“0x1836 0x1821 0x182c 0x1821”,则根据字符所在位置标注属性如表I所示
国标码0x1836 「0x1821 l' 0x182c I 0x1821
属性SUBST—INIT SUBST—MEDI SUBST—MEDI SUBST—FINA表I字符到字形编号的映射字形编号是字形替换的输入数据,也是从字体文件中提取字形轮廓数据的唯一參数,若想进ー步处理必须完成这ー步转换。在字体文件中包含一张称为cmap (字符映射)的数据表,它包含姆ー个字符和它对应的默认字符之间的匹配关系。在逻辑上它是ー个数据字典。cmap的逻辑结构为cmap {
0x1820: 4〇2,
0x1821: 403,
}所以要完成字符到字形编号的映射只需按照上表一一对应即可。如上例中执行映射结果可能如表2所示
权利要求
1.一种基于JAVA的蒙古文显示方法,其特征在于,包括以下步骤 建立蒙古文处理字体引擎,所述字体引擎是一个相对独立的函数,函数格式为Font.drawText (text, compatiblePath), text为输入的国标码字符串,函数输出字形图形到compatiblePath ; 提供接口来访问蒙古文OpenType字库的字体引擎 将所述蒙古文处理字体引擎引入到应用程序中,并实现用于绘图的Path接口,调用Font. drawText (text, compatiblePath)函数后,自动生成符合当前应用环境的字体图形;字符属性标注 字符到字形编号的映射在字体文件中包含一张称为字符映射(cmap)的数据表,包含每一个字符和它对应的默认字符之间的匹配关系; 字形替换第一步是查找要替换的那个或那些字形,第二步是执行替换; 字形绘制定义一个绘图接口将绘图工作抽象为若干待实现的函数,填充字形时使用“奇偶规则”填充,即完成字形绘制工作。
2.根据权利要求I所述的基于JAVA的蒙古文显示方法,其特征在于,在字形绘制中,确定字形中的一点是否被填充的方法为以考察点为起点,引一条射线,初始化计数器为0,当射线穿越轮廓时,计数器加1,最终当计数器为奇数时填充该点。
全文摘要
本发明公开了一种基于JAVA的蒙古文显示方法,用JAVA语言编写的一个能够提供接口来访问蒙古文OpenType字库的字体引擎。对外表现为输入符合国家标准的蒙古文字母编码串,输出对应的蒙古文变形显现字符图形。该字体引擎是一个相对独立的函数,函数格式为Font.drawText(text,compatiblePath),text为输入的Unicode字符串,函数输出字形图形到compatiblePath。该函数可以应用在所有支持Java的环境中。本发明应用范围广,有利于蒙古文信息处理的研究与发展。
文档编号G06F17/21GK102768655SQ201210091390
公开日2012年11月7日 申请日期2012年3月31日 优先权日2012年3月31日
发明者侯宏旭, 吴伟, 孟和吉雅, 巩政, 庞滨, 张晖, 阮宏伟, 高光来 申请人:内蒙古大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1