构建超大字库的方法及装置、字符显示方法及装置制造方法

文档序号:6505455阅读:157来源:国知局
构建超大字库的方法及装置、字符显示方法及装置制造方法
【专利摘要】本发明属于计算机文字输入【技术领域】,公开了一种构建超大字库的方法及装置、以及一种字符显示方法及装置。所述字符显示方法包括:字体引擎中间件拦截系统字体引擎发送的字体调用消息,所述字体调用消息中包含所述应用程序需要显示的字符对应的字符编码及字体名称;根据所述字符编码及字体名称从超大字库中获取对应所述字符的轮廓数据,所述超大字库为非标准格式的字库;将所述字符的轮廓数据返回给所述系统字体引擎,以使所述系统字体引擎根据所述字符轮廓数据显示所述字符。利用本发明,不仅提高了字库的容量,而且能够简单方便地识别非标准格式超大字库中的字符,提高字符检索及显示效率。
【专利说明】构建超大字库的方法及装置、字符显示方法及装置

【技术领域】
[0001]本发明属于计算机文字输入【技术领域】,具体涉及一种构建超大字库的方法及装置、以及一种字符显示方法及装置。

【背景技术】
[0002]在我们通常使用的字库中,字符的个数往往比较少,一般在6千多个,所以放到一个字库文件中不会有任何问题,即使是GBK或18030编码的字库,字符数也就在两三万左右,用一个字库文件来装载和显示都是没有问题的。但有的时候需要使用的字符数可能不止这些,这些字符可能会用于一些特殊领域,这时候需要存放到字库中的字符数可能会超过6万多。由于字库格式本身数据结构的限制,在一个字库中无法存入这么多的字符,即使存入了,可能在显示的时候也会遇到问题。这样就不得不把这些字符分成两部分,分别放到两个甚至更多个字库文件中。虽然微软提供了一种叫做“字体链接”的方法,此方法可以将两个字库链接到一起,例如:字库A和字库B,它们分别存放了一部分字符,当我们选择字体的时候选中了字库A,此时如果我们输入字库B中的字符时,仍然能够通过字体链接的机制使其显示出来。这种方式虽然简单易行,但其有许多不尽人意的地方,尤其是在显示非零平面的字符(零平面的字符就是字符Unicode编码在0x0000 - OxFFFF的范围内。0x10000 - OxIFFFF为I平面的字符,0x20000 - 0x2FFFF为2平面的字符,以此类推)时,有时候无法调用和显示。而且,随着编码字数的增加,需链接字库的数量越来越多,字符检索及显示的效率问题将越来越突出。


【发明内容】

[0003]本发明一方面提供一种构建超大字库的方法及装置,以解决现有技术中由于字库格式中数据结构的限制,使得字库中容纳字符数量受限的问题。
[0004]本发明另一方面提供一种字符显示方法及装置,以简单方便地识别非标准格式超大字库中的字符,提高字符检索及显示效率。
[0005]为此,本发明提供如下技术方案:
[0006]一种构建超大字库的方法,包括:
[0007]构建引导字库;
[0008]构建非标准格式的超大字库;
[0009]建立用于解释所述超大字库的字体引擎中间件。
[0010]优选地,所述引导字库只包含基本的ASCII符号。
[0011]优选地,所述非标准格式的超大字库编码的字节数为4字节。
[0012]优选地,所述非标准格式的超大字库包括:用于存储字符编码和索引对照关系的码表、用于存储索引和字符数据偏移量对照关系的位置信息表、用于存储字符轮廓数据的字形表。
[0013]一种字符显示方法,包括:
[0014]字体引擎中间件拦截系统字体引擎发送的字体调用消息,所述字体调用消息中包含所述应用程序需要显示的字符对应的字符编码及字体名称;
[0015]根据所述字符编码及字体名称从超大字库中获取对应所述字符的轮廓数据,所述超大字库为非标准格式的字库;
[0016]将所述字符的轮廓数据返回给所述系统字体引擎,以使所述系统字体引擎根据所述字符轮廓数据显示所述字符。
[0017]优选地,所述字体引擎中间件拦截系统字体引擎发送的字体调用消息包括:
[0018]所述字体引擎中间件利用钩子函数来拦截字体调用消息,并获得所述字符编码及子体名称。
[0019]优选地,所述根据所述字符编码及字体名称从超大字库中获取对应所述字符的轮廓数据包括:
[0020]根据所述字体名称从所述超大字库中查找字体文件;
[0021]根据所述字符编码从查找到的字体文件中获取所述字符编码对应的索引值;
[0022]根据所述索引值从字符轮廓数据表中获取所述字符的轮廓数据。
[0023]一种构建超大字库的装置,包括:
[0024]引导字库构建单元,用于构建引导字库;
[0025]超大字库构建单元,用于构建非标准格式的超大字库;
[0026]中间件构建单元,用于建立用于解释所述超大字库的字体引擎中间件。
[0027]一种字符显示装置,包括:
[0028]拦截单元,用于拦截系统字体引擎发送的字体调用消息,所述字体调用消息中包含所述应用程序需要显示的字符对应的字符编码及字体名称;
[0029]轮廓数据获取单元,用于根据所述字符编码及字体名称从超大字库中获取对应所述字符的轮廓数据,所述超大字库为非标准格式的字库;
[0030]传送单元,用于将所述字符的轮廓数据返回给所述系统字体引擎,以使所述系统字体引擎根据所述字符轮廓数据显示所述字符。
[0031]优选地,所述拦截单元,具体用于利用钩子函数来拦截字体调用消息,并获得所述字符编码及字体名称。
[0032]优选地,所述轮廓数据获取单元包括:
[0033]字体文件查找子单元,用于根据所述字体名称从所述超大字库中查找字体文件;
[0034]索引值查找子单元,用于根据所述字符编码从查找到的字体文件中获取所述字符编码对应的索引值;
[0035]获取子单元,用于根据所述索引值从字符轮廓数据表中获取所述字符的轮廓数据。
[0036]本发明实施例提供的构建超大字库的方法及装置,采用非标准格式的超大字库,从而使其可以容纳更多的字符。同时,为了使系统字体引擎能够识别所述超大字库中的字符,构建相应的字体引擎中间件和引导字库。
[0037]基于上述的引导字库及字体引擎中间件,本发明实施例提供的字符显示方法及装置,由字体引擎中间件协助系统字体引擎解释超大字库,并将所需显示的字符相关信息从超大字库中提取出来并按照系统字体引擎所需的信息格式整理好,然后回传给系统字体引擎,最终由系统字体引擎将其显示到用户界面上。从而解决了现有技术通过链接调用方式效率低、不能互相调用不同字库中字符的问题。
[0038]利用本发明,不仅提高了字库的容量,而且能够简单方便地识别非标准格式超大字库中的字符,提高字符检索及显示效率。

【专利附图】

【附图说明】
[0039]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
[0040]图1是本发明实施例构建超大字库的方法的流程图;
[0041]图2是本发明实施例构建超大字库的装置的结构示意图;
[0042]图3是现有技术中显示字库中字符的流程图;
[0043]图4是本发明实施例字符显示方法的流程图;
[0044]图5是本发明实施例字符显示装置的结构示意图。

【具体实施方式】
[0045]为了使本【技术领域】的人员更好地理解本发明实施例的方案,下面结合附图和实施方式对本发明实施例作进一步的详细说明。
[0046]由于目前操作系统中常用的TrueType字库,无法直接构建可用的超过65535个字符的超大字库,字库格式中的数据结构决定了其无法容纳超过65535个字符,即使在字库中存放了更多的字符,也无法通过操作系统的字体引擎来调用,甚至会被认为是无效的字库。所以,目前解决此问题的方法大多是采用字体链接的方式,通过将两个或两个以上的字库链接起来以实现显示更多字符的目的。但是此方法仍然有其不完善的地方,例如:目前的操作系统中,含有IS0/IEC10646编码字符集中CJK-ExtB区字符的字库,通过字体链接以后可以录入并显示含有CJK-Ext A区的字库的字符,反过来却不行;或者同时含有ISO/IEC10646编码字符集基本平面和二平面的两个字库通过字体链接后无法互相调用对方二平面的字符,等等。随着编码字数的增加,IS0/IEC10646编码字符集将会有更多的平面被应用,需链接字库的数量越来越多,字符检索效率问题将越来越突出。
[0047]为此,本发明实施例提供了一种构建超大字库的方法及装置,在已有字库格式和显示方式的基础上,建立基于TrueType的可容纳更多字符的超大字库,并针对目前操作系统不支持这种非标准格式的情况,构建字体引擎中间件和引导字库。
[0048]相应地,基于这种超大字库,本发明实施例还提供了一种字符显示方法及装置,由字体引擎中间件协助系统字体引擎解释非标准格式的超大字库,并将所需显示的字符相关信息从超大字库中提取出来并按照系统字体引擎所需的信息格式整理好,然后回传给系统字体引擎,最终由系统字体引擎将其显示到用户界面上。
[0049]如图1所示,是本发明实施例构建超大字库的方法的流程图,包括以下步骤:
[0050]步骤201,构建引导字库。
[0051]与现有的标准格式的字库相比,所述引导字库可以是标准格式的字库,但其只包含基本的ASCII符号,并不包含真正的汉字字符。
[0052]步骤202,构建非标准格式的超大字库。
[0053]在组织超大字库的时候,由于字符数量很庞大,标准的字库组织格式无法容纳,所以以一种非标准的字库格式来存储。也就是说,所述超大字库是一种非标准格式的字库。具体地,可以在现有的标准格式之上做一些修改,比如:编码的字节数由2字节变成4字节,这样原来最多只能存储OxFFFF个字符,现在则可以存储OxFFFFFFFF个字符,满足了超大字库的需求。
[0054]每个字体厂商或个人可以根据需要,将需要加入字库的字符组织成字库。由于字符数目的关系,可以不完全按照字库标准格式来组织,在解释的时候会由专用的字体引擎来进行解释。
[0055]非标准格式的超大字库主要包括:用于存储字符编码和索引对照关系的码表,用于存储索引和字符数据偏移量对照关系的位置信息表,用于存储字符轮廓数据的字形表等。相对于现有的标准字库,在超大字库中对编码和索引以及偏移量进行改进,扩大了其范围,使得超大字库能够存储更多的字符。
[0056]步骤203,建立用于解释所述超大字库的字体引擎中间件。
[0057]由于只有标准格式的字库才能直接被系统字体引擎所解释,非标准格式的字库会被系统字体引擎认为是无效字体。因此,为了能够识别所述超大字库中的字符,在本发明实施例中,建立字体引擎中间件,以使所述系统字体引擎通过调用所述字体引擎中间件,使其协助系统字体引擎解释超大字库,并将所需显示的字符相关信息从超大字库中提取出来,然后按照系统字体引擎所需的信息格式整理好,传给系统字体引擎,最终由系统字体引擎将其显示到用户界面上。
[0058]本发明实施例中所述的超大字库特别适用于需要在一个字库中存放超过6万多字符的公司和个人。
[0059]可见,利用本发明实施例的方法,可以提高现有字库的容量,方便用户对不同字符的使用需求。
[0060]相应地,本发明实施例还提供一种构建超大字库的装置,如图2所示,是该装置的一种结构不意图。
[0061]在该实施例中,所述装置200包括:引导字库构建单元201,超大字库构建单元202和中间件构建单元203。其中:
[0062]弓I导字库构建单元201,用于构建弓I导字库;
[0063]超大字库构建单元202,用于构建非标准格式的超大字库;
[0064]中间件构建单元203,用于建立用于解释所述超大字库的字体引擎中间件。
[0065]相应地,基于上述这种非标准格式的超大字库,本发明实施例还提供了一种字符显示方法。为了使本【技术领域】的人员更好地理解本发明实施例的方案、以及本发明实施例的方案与现有技术的区别,下面首先对现有技术中字符显示的流程进行简要说明。
[0066]如图3所示,是现有技术中显示字库中字符的流程图,包括以下步骤:
[0067]步骤301,应用程序需要显示某个字符时,将该字符对应的字符编码以及字体名称传给系统字体引擎。
[0068]步骤302,系统字体引擎根据所述字体名称查找字体文件。
[0069]步骤303,系统字体引擎根据所述字符编码在查找到的字体文件中查找所述字符。
[0070]具体根据字库文件中的编码索引对照表查找。
[0071]步骤304,如果在所述字体文件中找到所述字符,则根据对应的索引值到字符轮廓数据表中获取该字符的轮廓数据。
[0072]步骤305,系统字体引擎根据获取到的轮廓数据显示所述字符。
[0073]由于上述这种超大字库的存储范围超过了标准范围,目前操作系统不支持这种非标准格式的超大字库,为此,本发明实施例提供的字符显示方法,由系统字体引擎调用字体引擎中间件,简单方便地实现对超大字库中字符的检索及显示,并大大提高字符显示效率。
[0074]如图4所示,是本发明实施例字符显示方法的流程图,包括以下步骤:
[0075]步骤401,字体引擎中间件拦截系统字体引擎向引导字库发送的字体调用消息,所述字体调用消息中包含所述应用程序需要显示的字符对应的字符编码及字体名称。
[0076]具体地,所述字体引擎中间件可以利用WINDOWS的钩子函数来拦截字体调用消息,并获得所述字符编码及字体名称。利用钩子函数既可以截获windows中的消息,也可以截获函数的调用,包括应用程序对函数的调用和系统对函数的调用。
[0077]步骤402,所述字体引擎中间件根据所述字符编码及字体名称从非标准格式的超大字库中获取对应所述字符的轮廓数据。
[0078]与现有的标准格式的字库相比,所述超大字库中可以容纳更多的字符编码信息及轮廓数据信息。
[0079]在具体实现时,可以在引导字库和超大字库之间建立一个一一对应的关系,将该对应关系引入字体引擎中间件中,当字体引擎中间件得知系统字体引擎要调用引导字库时,就可以根据该对应关系将系统字体引擎对引导字库的读取转向对超大字库的读取。
[0080]字体引擎中间件从超大字库中获取轮廓数据的过程与现有的系统字体引擎从引导字库中获取轮廓数据的过程类似,首先根据截获的字体名称确定需要读取的字体文件,然后根据截获的字符编码、以及所述字体文件中CMAP表(字符编码和索引对照表)来获取该字符编码所对应的索引,然后再根据该索引到LOCA表中查找该索引所对应的字符在GLFY表中的偏移量,有了这个偏移量,就可以直接在GLYF表中读取字形轮廓数据,所有字符的字形轮廓数据都存储在GLYF表中。
[0081]需要说明的是,上述CMAP表、LOCA表和GLFY表与现有技术的字库中的相应表类似,在此不再详细描述。
[0082]步骤403,将所述字符的轮廓数据返回给所述系统字体引擎,以使所述系统字体引擎根据所述字符轮廓数据显示所述字符。
[0083]本发明实施例字符显示方法,利用字体引擎中间件拦截系统字体引擎向引导字库发送的字体调用消息,从而将系统字体引擎对引导字库的读取转为由字体引擎中间件对超大字库的读取,读取完毕将得到的字形轮廓数据返回给系统字体引擎,从而简单方便地实现对超大字库中字符的检索及显示,并大大提高字符显示效率。而且在应用层上看来,感觉也是系统字体引擎自己进行读取,不会影响用户体验。
[0084]相应地,本发明实施例还提供一种字符显示装置,如图5所示,是该装置的一种结构示意图。
[0085]在该实施例中,所述装置包括:
[0086]拦截单元501,用于拦截系统字体引擎发送的字体调用消息,所述字体调用消息中包含所述应用程序需要显示的字符对应的字符编码及字体名称;
[0087]轮廓数据获取单元502,用于根据所述字符编码及字体名称从超大字库中获取对应所述字符的轮廓数据,所述超大字库为非标准格式的字库;
[0088]传送单元503,用于将所述字符的轮廓数据返回给所述系统字体引擎,以使所述系统字体引擎根据所述字符轮廓数据显示所述字符。
[0089]所述超大字库与现有的标准格式的字库相比,可以容纳更多的字符编码信息及轮廓数据信息,其具体内容与标准格式的字库类似,在前面已有详细说明,在此不再追述。
[0090]在实际应用中,所述拦截单元501可以利用钩子函数来拦截字体调用消息,并获得所述字符编码及字体名称。
[0091]所述轮廓数据获取单元502包括:字体文件查找子单元、索引值查找子单元和获取子单元(未图示)。其中:
[0092]所述字体文件查找子单元,用于根据所述字体名称从所述超大字库中查找字体文件;
[0093]所述索引值查找子单元,用于根据所述字符编码从查找到的字体文件中获取所述字符编码对应的索引值;
[0094]所述获取子单元,用于根据所述索引值从字符轮廓数据表中获取所述字符的轮廓数据。
[0095]本发明实施例字符显示装置,通过拦截系统字体引擎向引导字库发送的字体调用消息,从而将系统字体引擎对引导字库的读取转为由字体引擎中间件对超大字库的读取,读取完毕将得到的字形轮廓数据返回给系统字体引擎,从而简单方便地实现对超大字库中字符的检索及显示,并大大提高字符显示效率。而且在应用层上看来,感觉也是系统字体引擎自己进行读取,不会影响用户体验。
[0096]需要说明的是,本发明实施例字符显示方法及装置,可以应用于各种不同应用程序,满足应用程序对字符显示的多种需求,并且效率高、速度快。
[0097]本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0098]以上对本发明实施例进行了详细介绍,本文中应用了【具体实施方式】对本发明进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及设备;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种构建超大字库的方法,其特征在于,包括: 构建引导字库; 构建非标准格式的超大字库; 建立用于解释所述超大字库的字体引擎中间件。
2.根据权利要求1所述的方法,其特征在于,所述引导字库只包含基本的ASCII符号。
3.根据权利要求1或2所述的方法,其特征在于,所述非标准格式的超大字库编码的字节数为4字节。
4.根据权利要求3所述的方法,其特征在于,所述非标准格式的超大字库包括:用于存储字符编码和索引对照关系的码表、用于存储索引和字符数据偏移量对照关系的位置信息表、用于存储字符轮廓数据的字形表。
5.一种字符显示方法,其特征在于,包括: 字体引擎中间件拦截系统字体引擎发送的字体调用消息,所述字体调用消息中包含所述应用程序需要显示的字符对应的字符编码及字体名称; 根据所述字符编码及字体名称从超大字库中获取对应所述字符的轮廓数据,所述超大字库为非标准格式的字库; 将所述字符的轮廓数据返回给所述系统字体引擎,以使所述系统字体引擎根据所述字符轮廓数据显示所述字符。
6.根据权利要求5所述的方法,其特征在于,所述字体引擎中间件拦截系统字体引擎发送的字体调用消息包括: 所述字体引擎中间件利用钩子函数来拦截字体调用消息,并获得所述字符编码及字体名称。
7.根据权利要求5或6所述的方法,其特征在于,所述根据所述字符编码及字体名称从超大字库中获取对应所述字符的轮廓数据包括: 根据所述字体名称从所述超大字库中查找字体文件; 根据所述字符编码从查找到的字体文件中获取所述字符编码对应的索引值; 根据所述索引值从字符轮廓数据表中获取所述字符的轮廓数据。
8.—种构建超大字库的装置,其特征在于,包括: 引导字库构建单元,用于构建引导字库; 超大字库构建单元,用于构建非标准格式的超大字库; 中间件构建单元,用于建立用于解释所述超大字库的字体引擎中间件。
9.一种字符显示装置,其特征在于,包括: 拦截单元,用于拦截系统字体引擎发送的字体调用消息,所述字体调用消息中包含所述应用程序需要显示的字符对应的字符编码及字体名称; 轮廓数据获取单元,用于根据所述字符编码及字体名称从超大字库中获取对应所述字符的轮廓数据,所述超大字库为非标准格式的字库; 传送单元,用于将所述字符的轮廓数据返回给所述系统字体引擎,以使所述系统字体弓I擎根据所述字符轮廓数据显示所述字符。
10.根据权利要求9所述的装置,其特征在于, 所述拦截单元,具体用于利用钩子函数来拦截字体调用消息,并获得所述字符编码及子体名称。
11.根据权利要求9或10所述的装置,其特征在于,所述轮廓数据获取单元包括: 字体文件查找子单元,用于根据所述字体名称从所述超大字库中查找字体文件; 索引值查找子单元,用于根据所述字符编码从查找到的字体文件中获取所述字符编码对应的索引值; 获取子单元,用于根据所述索引值从字符轮廓数据表中获取所述字符的轮廓数据。
【文档编号】G06F17/21GK104281601SQ201310282313
【公开日】2015年1月14日 申请日期:2013年7月5日 优先权日:2013年7月5日
【发明者】夏立宁, 唐英敏 申请人:北大方正集团有限公司, 方正信息产业控股有限公司, 北京北大方正电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1