CN1117160A - 产生未知字母之字模的方法与*** - Google Patents
产生未知字母之字模的方法与*** Download PDFInfo
- Publication number
- CN1117160A CN1117160A CN94113598A CN94113598A CN1117160A CN 1117160 A CN1117160 A CN 1117160A CN 94113598 A CN94113598 A CN 94113598A CN 94113598 A CN94113598 A CN 94113598A CN 1117160 A CN1117160 A CN 1117160A
- Authority
- CN
- China
- Prior art keywords
- character
- type matrix
- code
- text element
- point
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/14—Digital output to display device ; Cooperation and interconnection of the display device with other functional units
- G06F3/153—Digital output to display device ; Cooperation and interconnection of the display device with other functional units using cathode-ray tubes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K7/00—Methods or arrangements for sensing record carriers, e.g. for reading patterns
- G06K7/10—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
- G06K7/14—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
- G06K7/1404—Methods for optical code recognition
- G06K7/1408—Methods for optical code recognition the method being specifically adapted for the type of code
- G06K7/143—Glyph-codes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K19/00—Record carriers for use with machines and with at least a part designed to carry digital markings
- G06K19/06—Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code
- G06K19/06009—Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking
- G06K19/06037—Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking multi-dimensional coding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/20—Drawing from basic elements, e.g. lines or circles
- G06T11/203—Drawing of straight lines or curves
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Electromagnetism (AREA)
- Health & Medical Sciences (AREA)
- Toxicology (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Human Computer Interaction (AREA)
- General Engineering & Computer Science (AREA)
- Controls And Circuits For Display Device (AREA)
- Document Processing Apparatus (AREA)
Abstract
一种用于对文本元素产生字模的方法和设备。每一个文本元素至少包括一个码点,通常是几个码点。***在表内寻找代表一个被输入文本元素的字模,且如果字模未被找到同时***地产生文本元素的子集,并且在表内寻找代表每一子集的字模。对不在表中的码点产生缺省字符。***对每一码点进行分类,如统一码分类,并且采用根据其类别对未知码点进行处理的方式。
Description
随着计算机在世界各地使用的激增,绝大多数语言民族的人们目前经常性地使用计算机和工作站产生文件和进行国际间交流,这就使得使用不同语言的人们之间传递的信息能在再现这些语言的打印和显示***内相互兼容变得日益重要,现在有一种国际标准,尽管还不是非常广泛,但已覆盖了世界上大多数书写字母表;这一标准就是:统一码标准/国际字符编码(Addison—Wesley,ISBN 0—201—56788—1),(此申请中所讨论的每一出版物在此均附作参考)统一码对其所覆盖语言的每一字母、发音符号、语调记号或其它特殊字符均赋与一个编码。欲获得有关统一码的更多信息,可参见G.Adams著《统一码介绍》(Introduction toUnicode),见由高等专业研究学院,剑桥,马萨诸塞(Institutefor Advanced Professional Studies,Cambridge,Massachusetts)创立的“统一码实施者研讨会”(Unicode ImplementersWorkshop)(8月6日,1992年)及“统一码联盟”,(UnicodeConsortium)/统一码实施者研讨会(Unicode,Inc.和Taligent)的会议录,尤其是下列研究室的会议录:《无间隔记号》,2号统一码实施者研讨会(Merrimack,新罕布什尔州,3月12—13日,1993年);M.Davis的《处理无间隔记号的策略》(Strategies for Handling Non—spacing Marks)以及T.Yamasaki著的《打印服务器的统一码》(Unicode on Print Servers),此二文均出自3号统一码实施者研讨会(圣何塞,加利福尼亚州,8月6—7日,1992年)。
另一可获得的编码***为通用串(Universal String)或10646串(10646 String),它包括通用字符集编码ISO/IEC10646(Universal Character Set Code ISO/IEC10646),就如ISO和IEC联合技术委员会ISO/IEC JTCI(ISO and IEC JointTechnical Committee)以通用标题“信息技术—通用八重编码字符集”(UCS)(1993)(Information technology—UniversalMultiple—Octet Coded Character Set)制备的“ISO/IEC国际标准(10646—1”1993)(ISO/IEC International Standard)中所描述的那样,10646码集的大部分与统一码的相似,其缺点也和统一码的缺点相似,本申请中的讨论与这两种及其它编码***相关。
当一计算机***翻译一由统一码、10646码或其它方法编码的字符串时,它执行一再现过程以显示或打印那些字符。三种传统再现过程单独或以某种联合使用一核心表,一查找表和一连字表,再现***的输入是一长串编码点(即字符的二进制码表示),输出是每一输入字符编码的字模编码,一个字模是一个字符在单独显示或一打印单元里的表现形式,有可能是几个可能的独立字符的组合;例如,下面是七种不同的字模:
a ′ à à ¨ _ 其中最后的一个是由三个码点即“a”的码点,变音符号的码点和下加横线的码点来表示。在目前***中,这三个码点被结合并显示成一个单一字模。
当一个查找表被使用,再现***将编码点与表中的那些相比较;如果某一特定码点组合被找到,那么输出仅仅是在查找表入口所找到的字模。
***可能会附加查找连字表以对字母的一些特定组合形成连字,许多语言(如***语)有相当多的连字;英语只有几个连字,如以“fi”代替“fi”,“ffi”代替“ffi”及“fl”代替“fl”。这些连字在英语中是可选件,而在其它语言字母表中,连字是书写语言必需的一个特性,一个关于计算机对再现***连字及类似问题处理的分析可见J.Becker所著《“多连字文字处理”(Multilingual Word Processing)《科学美国人》(ScientificAmerican)1984年7月号和J.Becker著的“***文字处理”《Communications of the acm》1987年7月号(第30卷,第七号)。
再现***还可查对核心表,在此决定对某些特定字模组合的分离,即对显示出或打印出的字符之间的分隔。
上述三种***可被结合使用以适应多种语言。拉丁语系的字母表处理起来非常简单。然而,许多语言关于字母、语调记号和其它字符的组合相互间有很复杂的规则,不能很好适应上述这些方法。
核心表和连字表在大多数***中是很小的,不能容纳哪怕是一门简单语言的表达所必需的上千种可能的字符组合;例如,泰语有2700种可能的字符组合,已足以使查找表、连字表和核心表大到无法接受,而且将使每一组合的查对占据过长的处理器时间。
类似地,***文字可以有至少三种不同的组合方式,具有初期、中期和最后形式,且其它的还会有除此之外的第四种(独立)形式,这些字母在书面语言中形成复杂的连字,且每种语言形式通常有一种不同的形状。如果建立一个连字表来容纳所有这些,此表将十分庞大,还需要成千上万的入口以存入28个字母的字母表中可能的组合。
其它语言,如朝鲜语和越南语,具有类似数量众多且复杂的字母组合。而为一种将出现此问题的语言建立其专门的表将防碍这些表的标准化和规模缩小化,占用过多内存,且需要大量处理时间对其检索,这样,在一个必需处理不只一种书面字母表或字符集的***中,也就是说,实质上用于国际目的的***中,使用包含***语、朝鲜语、泰国语、越南语、英语等语言中所有可能字母组合的核心表和连字表是不切实际的。一种可工作的国际再现***应当能够在所有这些***内显示字符时处理各种变化,而不需要对每一字母的组合有一个表的入口。
当用户输入一不能在表中特定查找到的字符时,另一个问题产生了。例如,为某种原因,一个用户可能想输入一个y(也就是,一个“y”和一变音符号或分音符)而其可能未被给定***定义,或者想创造某些其它字符,如用一个拉丁式发音创造一个非拉丁字母表字符。后者的一个实例是
(泰语字符“kokai”和其上的一个音调符号),这是一个不存在于任一预先规定的字母表中的组合。这些特别的字符不能被传统的***所处理,这些传统***遇到未预设定的字符时,典型做法是仅以一个空格或一个缺省记号替代不知的码点。
现需要一种能通过分析码点和再现尽可能相似的字模来提供用户创造的未预先设置于***的表中的字模的***,这些要在无需建立庞大的特殊字符表的基础上完成。更确切地说,需要这样一种***,它能够容纳在泰语、***语、朝语等语言中找到的如此大量的字符组合,同时要使如连字表和核心表等字符表的规模最小化。
图1显示了一个用于改进传统方法以再现字符的***的一部分,再现***10是位于中央处理单元的存贮器内的一个常驻应用程序,且存取一个包括核心表50、字模查找表60和连字表70的字体资源40。这些表也贮存在存贮器中,被编码为码点20的字符被输入再现***10,而再现***10输出字模30,字模30取决于码点如何映射到表50、60和70中的一个或几个。
作为字符的2进制缩码表示的码点20被一个用户输入或从一文件或其它文本资源中获得,对统一码来说,每一码点代表一个16位(2字节)的词。下面的例子将采用统一码,然而本发明可适用于任一字符编码方案。
对某些语言来说,用于处理输入字符中的三个公共程序(相应于表50—70)中的每一个均有特定作用。再现***把输入的码点与表的入口进行匹配。例如,单词“finds”可能被输入,并将被统一码以如下码点表示:
f J i n d s
U+0066 U+200D U+0069 U+006E U+0064 U+0073;“f”的码点是“U+0066”,“U+”表示这是一个统一码的码点,“0066”是字母的十六进制表示。下一个是“J”,并被第二个字母“i”跟随。“J”在此代表一个特殊的统一码表示的字符,意思是“join”,指示两个字母应合并成一个连字:如fi(非连字)变成fi(连字),可选择的连接字符“J”可以由应用程序自动产生,在此文本元素“finds”是原先产生的,或者可由用户特意输入。“J”后面是单词剩余部分的码点。
再现***10可被具体配置以使用表50,60和/或70中任何部分来处理这个单词。例如,它可先查对连字表70,然后是查找表60,最后是核心表50。一个连字,如“fi”,可能仅被存于连字表中,但在其它字母表中,字母组合有可能被存在连字表、查找表和核心表中的任意一个。例如,泰语就是如此,其中字母组合为数极多,包括元音和单调符号。
连字表70表示了一个可能的码点集(CP6,CP9,…,CPx,CPy,Cpz),它们被选择是因其显示了所讨论的特定字母表的连字例。例如,CP6可能代表一“f”,CP9可能代表一“i”,从而CP6—CP6—CP9就是代表“ffi”的码点。再现***将此顺序置于表70,从而代替一个替换字模“ffi”而不是将字序“ffi”输出。其它的特别例子也存贮在连字表中。
上述例子中,“finds”可能通过先查找查找表并定位字母“f”而被分析。此后,***查询连字表70以看是否有以“f”起始的连字,并找出入口“CP6—CP9”(相应于序列0066—0069(代表“fi”。连接字符“J”指示需要连字,因而字模“fi”被输出。
下一代表串“nds”的码点位于查找表60中。查找表60对每一码点均包含一字模形状和字模宽度。最终,输入码点20全部以字模30被输出。
另外码点也可在被设计用于在预设定字符序列中处理间隔的核心表50中被找到。例如,“f”和“i”之间的间隔可通过在核心表中找出序列“CP6—CP9”而确定(忽略连接符号)。这些表可以组合使用,且查找表恢复字模形状和字模宽度,而核心表恢复字符间间隔。
从上例将看出,再现***可恢复的字模受限于表的容量。此外,对那些通过组合连接二个或两个以上字符而形成的字模,宽度/间隔法不能使字模形状最优化;例如大写
(U和变音符号)可能仅被表示为一个大写U和一个重叠的变音符号:
尽管连字表可提供字型优化处理,但如前所述,没有一个表能容纳现存的成千上万可能的字母组合,更不要说那些非正规使用的大量可能组合了,而一位用户却可能为某特别目的而想打印(如前面提到的组合
)。需要一种处理这些特殊情况又不过度增加表的规模的***。
本发明包括用于根据一系列输入码点重现字模的设备和方法,而输入码点可从输入设备、存贮的文件或类似手段获得。码点被划分为一或几种预先规定的类,而码点系列的子集被组合、为采取预定规则表达方式的文本元素。分类和组合均由Lex,YACC或其它类似的结构分析器完成,并经过改进以接受统一码或其它国际兼容字符码。
许多这样的文本元素被从码点集中被建立,每一个通常包括一间隔(基)字符和一个或多个将与此基字符共享一显示或打印单元的组合字符、如音调符号、重音或其它发音符号。也许还有附加或代替之的一个或多个连接字符与此基字符形成连字或间隔。
图1是显示传统再现字模***的框图。
图2是用于显示和打印字模的设备的框图。
图3是依据本发明的再现字模***的框图。
图4是显示本发明***形成规则表示的状态图。
图5是表示此发明涉及方法的流程图。
图6是描述本发明中撤退再现过程的流程图。
图7是图6改进形式的流程图。
图8是本发明中撤退处理程序的一个实施例的框图。
本发明***可用具有图2所示的模块的软件来实施,并应用于图3所示的设备。图3中的再现***应用程序120以码点190作为输入,并产生字模200作为输出,然后此输出被再现模块260再现而显示出来。
图2显示了一个具有显示和打印能力的计算机***80,包括拥有传统处理器100和存贮器110的计算机90。存贮器存贮再现***120,字符表130,一个用于控制监视器150的显示驱动140和控制打印机170的打印机驱动160,字符以码串的形式从可以是键盘、具文本文件的磁盘存贮器、调制解调器或其它任何编码文本源之类的输入设备180输入,代表输入字符的字模被再现显示于监视器150或打印于打印机170上,也可输出到某些其它设备。
图3是构成再现***的120的软件模块的详图。图5是本发明方法的总体流程图,图6是本发明中撤退处理程序的流程图,图4是表示本发明生成规则表达的状态图。
下面是对本发明的一般讨论,然后是对图2—6***的详细描述,之后是在字模不能在字体资源中找到时,在撤退处理程序里用于处理字模的一种本发明的较概略的处理方法。
本发明中的***与图1所示的传统***是兼容的,但其可以使表的规模大大缩小,尤其是连字表和核心表,如下面所要看到的,本发明方法的一般描述。
在码点被再现之前,它们必须被分类,且分类结果被用于规定***的规则表达,如下面将要详细讨论的,这些分类和规则表达被用作如Lex或YACC的改进形式的编译器的输入,从而产生一个图3所示的分析器220。参见Stephen Johnson(史蒂芬·约翰逊)所著“YACC:还有另一编译器的编译器(Yet AnotherCompiler Compiler),Bell实验室(Murray Hill,新泽西州)(YACC在大多数UNIX文件中也有讨论)。
Lex在位于新泽西州Murray Hill的Bell实验室的M.E.Lesk和E.Schmidt所著的“Lex:一种语法分析程序产生器”(Lex:A Lexical Analyzer Generator)中有所讨论。另可参见SantaCruz Operation,Inc.(Sco.PH:014—036—900)出版的“SCOUNIXR***V/386开发***程序员指南”(SCO UNIXR SystemV/386 Development System Programmer’s Guide)(尤其是第二章:Lex编程综述)。
无论是Lex还是YACC被使用,它被用于传统方法以产生一具有对确定输入码点分类的测试能力的分析器,并被改进以读统一码字符和类,对Lex做这种改进是很容易的(主要涉及增加可能被读入的码点的长度);否则Lex就被象在传统方法中那样被使用。
从输入设备180(见图2)接收到的码点190(见图3)被在图5所示的步骤330中输入给分析器220。最初的码点被读入(步骤340),并被命令码滤波器210(看图3)滤波(步骤350),命令码滤波器抽出代表***或应用命令的码点,因为它们与将被显示的字模无关,命令码滤波器可按传统设计。
如果码点是一个将要被显示或打印的,那么方法继续进行至步骤360,此步确定一个完整的文本元素,如前面产生的规则表达所定义的,是否已被接收到,这一判断由分析器220结合分类规则和表230完成。如果答案是否定的,方法返回步骤340,另一码点被读入并在步骤350被滤波,从而再回到步骤360。
规则和表230被分析器220使用以确定对输入码最的分类,每一码点1均有一分类,即使某一给定***不具备所需的字体资源(包括查找表)来再现一特定字母表,书写***等,它也应存有标准化码点的全部分类规则。这样,当遇到一个不认识的字符时,即便***不能再现该字符,它也可依据其分类,如其属于一连接字符还是组合字符,来对字符进行不同处理,下面讨论中的例子将说明这种处理方式。
一旦一个完整的文本元素(如一个单字母,或由连结起来的字符组成的字母,如U)被建立,查找处理程序240就在步骤370里从字体资源中查找文本元素(也就是表集130),如果找到了相应的字模(步骤380),该字模被在步骤410中显示或打印,否则,一个撤退过程将通过撤退处理程序250被引用而找到一个可再现的合适字模相应于输入的文本元素,如步骤390中那样。
字符或查找表130被用于传统方式的在一特定字体中对给定码进行寻找字模之中。根据用户指定何种字型,一特定码可能导致找到不同的字模,字体资源130的n个查找表代表n种字型。
如果在步骤400中撤退过程开始未获成功,方法将返回步骤390以试另一种策略,这相当于对一给定撤退处理程序模块的重新重复,如图6中步骤670—710所示的循环的重复(下面将讨论);或者相当于试图为输入文本元素产生字模的另一种方法的尝试,例如从下面的撤退处理程序软件模块实施程序4转换到实施程序5,不同的策略将在下面详细讨论。
一旦撤退程序成功或耗尽,被选择的字模即在步骤410中被输出以再现和显示,再现由图3所示的再现模块260执行,再现和显示均由传统程序实施,其细节取决于所使用的特定硬件(处理器、总线、监视器、打印机等)。;
如果输入中含更多的码点(步骤420),方法返回步骤340以处理剩余字模。否则,方法结束并在步骤430退出。
上述步骤的顺序也可以改动,例如,码点可以同时被输入、读入和滤波,然后被送给查找处理程序,或者它们可在被接收到的同时被读入并输入查找处理程序以加快处理速度。在输出一侧,字模可如图5所示的方法那样在产生的同时被显示,或者字模(例如位图或Postscript输出)可被确认,字模或是它们的确认码可被适情地存贮于RAM、VRAM或其它易失性或非易失性存贮器中。
图3对查找处理程序和撤退处理程序作为单独软件模块加以显示,以表明传统查找处理程序与新的撤退处理程序之间的显著差别,查找处理程序240大部分是传统的,条件是未成功的字模寻找应转向撤退处理程序250以求进一步处理。在实际中,查找处理程序240和撤退处理程序250可以构成独立的字模恢复模块或被作为单一字模恢复模块来实施;只要具有下面所述功能,它们之间的区别是无关紧要的。步骤300:码点的一般分类。
被输入本发明***的码点最好能被标准化以符合某种国际化村准,在本实施例中是统一码标准,本实施例中码点的分类因此与统一码标准中的那些相同,对于下面讨论的例子,这些分类是
表1:码点的分类
1.间隔:这是最典型的分类,表明一个字模所代表的一个字母或其它字符占取一个单一显示或打印单元,一个间隔字符包括字模形状和一个指示被再现者应与下一单元留有间隔的指示,大多数拉丁或以汉语为基础的(如中文和日文)字符是有间隔的字符。
2.组合:此码点有一与之相联系的字模,但它通常不在显示文本元素中单独出现;它指示一个通常与一个“间隔”字模组合的字模,组合字符是第二种最普通的,且通常是前面间隔字符的修饰语。在拉丁语系的书写***中,组合字符包括发音符号(重音,颚化符号,元音变音符号/分音符号,变音符等),它们在其它书写***,如泰语中更为普遍,在那里它们代表元音和语调记号。
3.控制:控制码点用于应用程序或操作***的命令,通常不被再现显示,没有与之相对应的字模,码点也不会影响邻近码点的字模映射,控制字符被滤波掉并被一个前端模块解译。
4.连结:这是一种特殊字符类,它使两个相邻的文本元素被作为一个文本元素对待。连结字符较其它类少见,尤其是在拉丁字母表中,但是很重要,在拉丁语系的书写***中,连结字符迫使两个字符间形成连字(如f和i)或者使“3/4”被以分数形式
显示而不是日期形式(3/4)。
5.非连结:这是一个特殊的字符类,它使两个相邻字符被作为分离的文本元素对待,而它们通常被作为组合或连结的文本元素处理,非连结字符是最少见的,但在一些书写***中很重要。例如,在***语中字母“lam”和“alif”在相邻时通常被定作一个字模,且连结通常由再现***自动完成。如果意欲分离它们,例如在打印***字母表时,那么其间的一个非连结字符会迫使形成单独(非组合的)字模。
一个字符可以属于不只一种类别,每一字符的分类可表示为一个四标志的位字段,如下:
typedef struct{ Boolean control flag:1 Boolean spacing/combining flag:1; Boolean joining flag:1; Boolean nonjoining flag:1; }CharClasses;
这些标志的每一个均有一个值,1代表真,0代表假,结合和间隔性质是相互排斥的,故可以用一个“间隔”标志代表此两个性质(1=间隔,0=结合)。这样,具有分类0100(假—真—假—假)的一个字符即为一个正常的间隔字符。
连接和非连接性质是相互排斥的,必须由分别的标志代表。例如,***字母“alif”本身既非连接地非非连接。它将与字母“lam”连接,但不能与其它字符连接,如数字9。由于它不促成任一总行为,不把它归为连接或不连结中的任一种(因此,“alif”joining=假,nonjoining=假)。
给定CharClasses码点分类后,每一码点的类别就可通过在一个CharClass排列内设置适当的标志来确定,如下所示:(“∥”表示注解)
static CharClasses UnicodeClasses[]={ {TRUE,FALSE,FALSE,FALSE}, //U+0000 NUL {TRUE,FALSE,FALSE,FALSE}, //U+0001 SOH · · · {TRUE,FALSE,FALSE,FALSE}, //U+0020 US {FALSE,TRUE,FALSE,FALSE}, //U+0021 SPACE {FALSE,TRUE,FALSE,FALSE}, //U+0222 ! {FALSE,TRUE,FALSE,FALSE}, //U+0023 " {FALSE,TRUE,FALSE,FALSE}, //U+OOFF <paragraph id="d65"> <image width="8" height="11" src="A9411359800221.gif"/> </paragraph> · · · {FALSE,TRUE,FALSE,FALSE}, //U+OEOl Thai consonant "ko kai":<paragraph id="d66"> <image width="7" height="9" src="A9411359800222.gif"/> </paragraph> {FALSE,TRUE,FALSE,FALSE}, //U+OE02 Thai consonant "khO khai":<paragraph id="d67"> <image width="7" height="9" src="A9411359800223.gif"/> </paragraph> · · · {FALSE,TRUE,FALSE,FALSE}, //U+0E30 Thai spacing vowel "sara a":<paragraph id="d68"> <image width="5" height="7" src="A9411359800224.gif"/> </paragraph> {FALSE,FALSE,FALSE,FALSE}, //U+OE31 Thai non-spacing vowel "mai han-akat":<paragraph id="d69"> <image width="6" height="2" src="A9411359800225.gif"/> </paragraph> · · · {FALSE,FALSE,FALSE,TRUE}, //U+200C Punctuation: zero-width non-joiner {FALSE,FALSE,TRUE,FALSE}, //U+200D Punctuation: zero-width joiner · · · {FALSE,TRUE,FALSE,FALSE}, //U+FFE5 Han-based character (in this case,Japanese), a full-width"yen":¥ {FALSE,TRUE,FALSE,FALSE}, //U+FFE6 Han character,a full-width"won":<paragraph id="d70"> <image width="16" height="10" src="A9411359800226.gif"/> </paragraph> }; · · ·
上面的码显示了统一码分类的整个表的结构。“…”(“豆点”)表示在此省略了成块的码;整个码序列有上万行的长度,对大多数已知的书写***进行了分类,其中大部分分类用于数量极大的汉语语系字符,如中文和日文。
前面的标志集被用作CharClasses位字段的屏蔽。因此可以看出泰语中辅音字母“ko kai”(n)被归类为一个间隔字符(因为只有第二个标志取真值),而泰语中的非间隔元音“mai han—akat”(—)是一个结合字符(因为所有的标志均为假,尤其是“间隔”标志)。
为扩展上面的分类表到其它语言,附加类别被定义。例如,朝鲜语书写***中包括叫做“jamos”的字符集,它们被结合于代表音节的单元内。对这些字符进行结合的规则取决于jamo是起始、继续还是终止音节。三个这样的附加类别(起始、中间和末尾)对朝语来说就是需要的,且一个合法规则表达(见步骤310的讨论)可能被表示成,举例说,IM*F,在此不对朝鲜语和其它书写体系详细探讨,因为原理与本实施中那些例子的原理是相同的。一个相对较小的类别集可以处理世界上大多数书写体系。步骤310:产生规则表达:
本发明使用了基于上述分类的语法,其中“规则表达”被定义为特指文本元素。在这种类似Lex的语法中,有如下的原子类型:
C:匹配于任何控制为真值的码点。
S:匹配于任何间隔取真值的码点。
c:匹配于任何间隔取假值的码点。
J:匹配于任何连接取真值的码点。
N:匹配于任何非连接取真值的码点。可以使用规则表达操作程序,包括:
+:一个或多个
*:零或更多
|:或者来将这些原子类别结合成规则表达记号:
{控制}C+
{单元}Sc*|C+N*
{元素}{单元}(J{单元})*
这样,一个控制字符被用“C+”表示,它指示这是一个控制字符且一个或多个控制字符可在这个串内合法出现。
“单元”是一个事例“Sc*”或一个或多个事例“C+N*”的出现。“Sc*”表示一个单一间隔字符,其后是零或多个结合字符;因此“Sccc”表示由一个间隔字符和其后的三个结合字符组成的一个串,且是形式“Sc*”的一种规则表达。串“cc”和“cN”都是“c+N*”形式的规则表达,“c+N*总是有一个或多个“c”字符,其后是零个或多个“N”(非连结)字符。
阵列“元素”指一个完整的文本元素,且被定义为一个包括一单元和其后一连结字符的一个或多个事例加上另一单元的一个系列。因此,不计其数的单元可以通过使用连接字符连接入一个文本元素。
本发明涉及的***用这些规则表达来指示分析器在其识别出一合法记号时执行的动作程序。在本优选实施例中,一个类似Lex的语法被使用。步骤320:分析器的生成
类别、规则表达和动作程序被用作分析器生成器的输入,该生成器可以与Lex实质上相同,但被改进过以读入统一码字符,如前面所讨论的。改进Lex使其完成能读入统一码字符是一件很容易的事;不然它将被象在传统方式中那样被使用。
经改进的Lex即可用于产生分析器。分析器实质上是一优化的状态机,它可读输入的字符串,将它们与规则表达相比较并输出完整的文本元素。图4中显示了一个前面定义的规则表达的状态图,这些规则表达可被认与规则表达定义的文本形式完全相同的方式被读入。图4是一张传统状态图:状态由长方形框表示(并以整数参考号500,510等标引),而转移被表示为状态之间的箭头,并以小数形式参考号标引,小数点前面反映起始状态,小数点后表终结状态。例如,转移500.10是从起始态500到“局部单元1”状态510。
每一转移都标有一个字母来指示若经历这些转移所要加的字符。例如,转移500.10代表给一个单元增加一间隔字符(如“S”表示的),而转移510.10表示增加了一个结合字符(“c”)。其它转移被标以“J”表示连接或“N”表示非连结,和那些“S”和“c”的事例一样。转移510.20和540.20不增加字符,而只是终止一个给定的文本元素。
这样,从一个起始态500开始且沿着转移500.10—510.10—510.10(再次)—510.30—530.10—5l0.20进行将建立一个单元“SccJS”,如前面定义的,这是一个合法的文本元素。一个包含“ccNJS”的文本元素也是合法的,并由途径转移500.40—540.40—540.50—550.30—530.10—510.20而被表示。通过考察可以看出图4的状态图与前面定义的规则表达表是等效的。退出转移510.20和540.20并不直接进入一字符串,但一旦分析器在一个串内遇到的下一个元素不是一个合法的跟随字符,例如一个“S”字符被另一个“S”字符紧跟其后(这是英语是最常出现的),此两转移就被执行;在这种情况下,分析器自动在两字符之间***一个结束码。步骤330—360:输入、读入和过滤码点;产生文本元素。
图2和图3所示的再现***120读入一系列所要再现的码点。输入的码点首先被读入和滤波(如图5中步骤340和350所示)以除去控制字符。然后进行图5中步骤340—420的循环,在此每一文本元素被检查以看它是否存在于字体资源中(步骤380)。如果是,该文本元素被显示或打印(步骤410),且下一文本元素,如果存在的话,被检查(步骤420和340—370)。如果文本元素未在字体资源中找到,撤退过程(步骤390—400)被执行。步骤340—420的循环反复进行,直到所有输入的码点均被再现或被以其它方法处理,然后方法在步骤430退出。
码点在步骤340—350被读入和滤波,直到一个完整的文本元素在步骤360被确认,也就是如前面定义和图5所示的一个合法规则表达。步骤340—360被分析器220参照分类规则和表230执行。这样,分析器就可以在结果被送到查找处理程序240之前对整个文本元素的文件进行预处理。
下面的动作过程是滤波过程的核心,指明当分析器遇到一个控制字符序列:
{控制};//忽略控制字符时不应执行任何操作(由不带其它指令的分号指示)。这可以被读作:“如果找到一个控制字符,不要采取(再现)行动”。通常,在这类陈述中,分析器将在行的右边执行伪码表达,如果它在左边的大括号内找到并识别出规则表达。
步骤340—360一起组成了过程440(见图5),分析器通过它建立文本元素,前面讨论的规则表达使文本元素的形成得以实现。是这些完整的文本元素而不是单个码点,被送到查找处理程序240和撤退处理程序250,对输入码点的分析是在一个不同于以往的再现***的水平上进行的。步骤370等
分析器的核心是一动作程序,它一旦识别出一个完整的文本元素就获得且显示一个或多个字模。这可由下面的伪码表示:
程序1:找到和显示文本元素(步骤370—410)
{element} { UniChar element[8]; // Declare element buffer GlyphID glyphs[8]; // Declare glyph id buffer find_glyph(element,glyphs); // Routine 2,below. display(glyphs); // Display located or default glyph(s) };
软件执行程序1是图2和图3显示的再现***的应用程序的一部分,并作为图3所示的应用模块210—260的控制码运行。根据程序1,一旦遇到文本元素,两个被缓冲的阵列“element”和“glyph”被宣布,且程序“find—glyph”(见下)和“display”被执行。“display”程序可以是任一传统程序,用于在屏幕上再现和显示文本或其它字符等字模,或是打印或将它们以其它方式输出以观察。步骤370—380:查找文本元素
一旦一个合法文本元素被找到,它就被传送到查找处理程序240(见图3),查找处理程序再在图5所示的步骤370中执行查找过程,在字体资源中寻找元素其本身是一传统的数据库查找。查找的寻找关键字是输入的文本元素,由被分析器识别为记号的一个或多个被编码字符组成。如果文本元素存在于数据库中,那么查找功能返回到字模识别程序。如果不是,那么查找功能启动撤退处理程序,如下面所讨论的。
适于实施字模查找的伪码是这样的:
程序2:寻找字模(步骤370—400)
void find_glyph( const UniChar *element, // Text (display) element GlyphID *glyphs ); // Resulting glyph id(s) { // If the element is found in the database,then use it.Otherwise,invoke the fallback handler: if(search(element,glyphs)==NULL) //(Routine3) find_fallback(element,glyphs);//(Routine 4 or 5) }
软件在图3所示的查找处理程序240里实施这一伪码。
以一显示元素(也就是如程序1所定义的“element”)作为输入时,程序2宣布“find—glyph”。这被定义为一个“UniChar”类型的常数(因为程序不改变它),这种“UniChar”类型是为指明一统一码字符矩阵而对统一码的类型定义。其名字“*element”指示有一指向“UniChar”矩阵的第一个元素的指针,而此“UniChar”矩阵通常被存贮在分析器的缓冲存贮器中。缓冲存贮器的一个八统一码字符(16字节)的块被陈述“UniChar element〔8〕”作为文本元素矩阵而存贮在程序1中。
程序2的结果是,对于每个初次尝试时在查找表中找到的文本元素再现和显示一单一字模。如果调用了find—fallback程序,可以输出几个字模。
输出是存贮于矩阵“GlyphID”和缓冲存贮器里的一个字模识别码;为这一矩阵的缓冲存贮器块被陈述“GlyphID glyphs〔8〕”保留于程序1中,并且在大小上也是八个统一码字符(16字节)。指针“*glyphs”指向矩阵“GlyphID”的另一个地址。
“search”过程是一传统的寻找功能,用于在字体资源130中找到被输入的文本元素,如:
程序3:寻找文本元素(步骤370)
void search(element,glyphs); { if element is located in resource,return glyphs; else return NULL; }
它确定文本元素是否存在于字体资源中,如果是,就相应于输入的文本元素将代表字模的码返回,并将其置于缓冲存贮器里在程序1中保留的字模位置上。被查找的特定查找表取决于用户为特定输入字符选定的字体。
如果查找处理程序240在查找表130中找到了这一文本元素,它就将代表文本元素的字模的码做为输入传递给再现模块260;以便象在图5的步骤410那样再现和显示或打印。然后,***在步骤420判断是否还有更多码点;如果有,(比如由缺乏一个文件结束指示而指出),那么方法返回步骤340以寻找下一文本元素。
如果文本元素未被找到,那么程序3返回—NULL,它将导致调用撤退程序,“find一fallback”。步骤390—400:撤退程序
撤退处理程序250接收一个完整的文本元素做为输入,且能以许多不同方式处理它。通常,策略的选择依赖于应用;下面将描述几种策略。一个商业应用典型地将这些策略的一些子集包括于一个单一撤退处理程序中,以对于此应用获得最佳取代字模。
对所有撤退程序都相同的是,它们从由分析器在步骤340—360产生的一完整文本元素开始,并且试图在分析子元素,也就是文本元素的子集时尽可能保持文本元素的完整,以判断任一子元素是否可被***显示。一般性撤退方法如图6所示,并在后面加以讨论。
一个简单的撤退程序可以以一个长方框口或其它缺省字符(或空格)替代任何数据库中未找到的显示元素。这种方法需要被用在在遇到未知文本元素时不具备情况处理结构的当前***上。
然而本发明使用一种根据文本元素的内容,即单个码点和它们的顺序,分析被输入的文本元素并产生输出的撤退处理程序。
下面所要讨论的每一种撤退程序都有其一定的优点和在特定场合下的作用。下面各程序表示的撤退程序的重要公共特征被结合于流程图6所描述的普遍化撤退程序中,并将在对程序4和5的讨论之后加以讨论。程序4的撤退方法
下面是程序4的伪码,用于实施本发明的撤退过程。
程序4:撤退过程(步骤390—400)
void find_fallback( const UniChar *element // text element GlyphID *glyphs); // resulting glyph id(s) Unichar subelement[8]=element; { do{ element[Length(element)-1]=0x0000; // This strips the last character from the text element. if(search(element,glyphs)!=NULL) return; // If the element is in the look-up table,the fallback procedure is complete for the moment. Otherwise,keep stripping until a subset of “element” is located as a valid glyph,or until nothing is left. }while(Length(element)>1); //If the procedure reaches this point, not even the base character is recognized. A default character (such as a box□) must be used. glyphs[0]=FALLBACK_GLYPHID; // Just make it a box glyphs[1]=0x0000; // Terminate string }
表达式“Length(element)—1”表示构成文本元素的矩阵的最后一个位置。另一个位置被(以标准方式)认为是位置0,另二个为位置1,以此类推,所以“element”的长度减1是最后的位置。设定这一元素为“0x0000”使矩阵“element”在那一点上终止,从而自动减短了矩阵并去除了终止码点。象下面所描述的;当这一行又被碰到时,(已被缩短)矩阵末位的下一码点将被去除,以此类推。
程序4的撤退程序去除结合记号,从而缩减了输入的文本元素,直到剩下的文本子元素是可在查找表中找到的一个文本元素。例如,字符应被表示为一个三字符文本元素由U,其后的变音符号(是一个结合字符)和再其后的下加横线(也是一个结合字符)组成,它在大多数字体中不是一个字模。此文本元素是“Scc”形式的规则表达,相应于三个字符“U¨__”。
如果查找处理程序240不能在查找表130中找到该文本元素,它就将此文本元素送至撤退处理程序250,如步骤380和390所示。撤退程序从去除文本元素中最后的字符(码点)开始,在本例中就是下横线。这样只剩下了文本子元素“U¨”,它可由撤退处理程序250在表130中找到。然后,它被作为输出(框200)送至再现模块260,此模块将再现“”。
当下横线字符被从文本元素“U¨__”中除去之后,如果文本子元素“U”在表中找不到,那么撤退处理程序删除变音符号。“U”即被找到。
如果在查找表中不能把变音符号作为一个单独文本元素找到,就会用一已知字符产生一个子替换,如双引号”,它将与“U”结合形成字符“U”。这并不理想,但至少是对“U”一个合理的子替换。
类似的子替换可被建立在撤退处理程序软件模块中,因而***可以移作许多不同的应用,它不需要将任何关于“unknown”的字符,如变音符¨的信息存贮;取而代之的是,当一文本元素未被找到,一个替代字符已被指明,且替代字符存在于查找表中,那么撤退程序就会在需要时进行替换。
替换字符可能是不只一个字符;例如,如果碰到日元符号(¥)而其不在查找表内,它可以由一个Y和两短横结合在一个单元内来形成,看起来象一个“¥”,这又不理想,但可以被认出是所欲表现的字符。另一类有用的替换是从非拉丁语字母表如中文、日文、西里尔字母等中音译过来的字符,这样用户至少可以得到一个实际字模不存贮于***中的文本的语音表示。
如果文本元素“U”的变音符号和下横线都已被去除而最后一个剩余码点(“U”)仍未找到,但不能获得任何替代字符,那么最后一次撤退仍是缺省字符,如□字模,即便如此,一个空格也可和变音符号和下横线结合,当然此时最好是结合字符,使读者至少可以获得一些包括在最初文本元素内的信息。同理,如果变音符号不被撤退处理程序认识,那么它可被忽略,但不管怎样“U”和下横线被显示出来。
当撤退程序被执行一次之后,至少有一个码点被从尾部删去。这个被删去的部分最好作为将被显示的新元素被保存和处理。在“U”的例子中,仅管文本元素作为整体不能在查找表中找到,但独立的子元素通常是合法的。这样,最好将元素被删去的部分保存,并在程序4之后设置“element”与这个被删去的部分相等,且在程序1中再次调用“find—glyph”程序。
相对于上面的程序4,在程序4A中,“U”和下横线字符均被存贮以再现;又由于后者被归类为一个结合字符(“c”类),它被与“U”结合在同一显示单元内,且输出“U”与完整的文本元素完全相同,就好象文本元素一开始就在查找表中被找到一样。
为保存文本元素的剩余部分可以采用下面的方法:最后一个字符被从文本元素中移去(如程序4中那样),且剩余部分的字模被找到。如果最后一个字符本身也对应一个字模,它将与其它被找到的字模连接在一起。程序4A:
void fallback_handler( const UniChar *element, // Text element GlyphID *glyphs ) // Glyph id′s { // Declarations int index; // Index of last character UniChar last[2]; // Last character from element GlyphID lastid[8]; // Glyph(s) for last character // Remove the last character and save it. index=Length(element)-1; last[0]=element[index]; last[l]=0x0000; element[index]=0x0000; // Get the glyph id′s for the rest of the string. // Note:this may recurse if the element is not in the table. lookup_glyphs(element,glyphs); // If the last character is in the lookup table: if(search(last,lastid)!=NULL) // Concatenate the glyph for the last character. concatenate(glyphs,lastid)
如果,举例来说,原始的文本元素对应字模
也就是U—变音符号加上一个重音符号,且当前字体的查找表中既无整个字模也没有无重音符号的,前面所述的伪码就要递归调用。此程序的最初调用移去重音符号,并试图寻找U。这一尝试失败,程序被再次调用。
此程序的第二次调用移去变音符号,且寻找代表“U”本身的字模。然后一个代替变音符号的字模(也许是一个双引号,作为撤退)被结合给字模“U”。这两个字符的实际重叠打印是由硬件特别控制的;它有可能需要回格(在某打印机或终端上),或是特殊的换码程序等等。程序5的撤退方法:
一种可选择的撤退程序用独立的元素替代含连结字符的元素。这可以代替程序4或附加于程序4。例如,一个包含“3J/4J”的元素,它将对应于四分之三的分数形式
如果它存在于可获得的字库中,如果不存在,它将被分解成“3/4”。
程序5:可供选择的另一种撤退程序
void find_fallback( const UniChar *element, // Display element GlyphID *glyphs ) // Resulting glyph(s) { // Declarations: int i: // Index into element UniChar subelem[8]; // Subelement int len=0; // Length of “subelem” int glen=0; // Number of glyphs {// Scan the element for a joining character. for (i=0;i<Length(element);i++) { // If it is a joining character,look up this part: if(element[i]==JOINING){ // Terminate the subelement. <dp n="d35"/> subelem[len++]=0x0000; //Look up the glyph(s) for the subelement. find_glyph(subelem,glyphs+glen); // Prepare for the next subelement. glen=glen+Length(glyphs); len=0; } // Otherwise just add the character. else{ subelem[len++]=element[i]; } } // Look up any remaining subelement. if(len>0){ // Terminate the subelement. subelem[ln++]=0x0000; // Look up the glyph(s) for the subelement. find_glyph(subelem,glyphs+glen); // Prepare for the next subelement. glen=glen+Length(glyphs); len=0; } }
程序5在“joining”字符处将文本元素分解成子元素;这样,“SccJS”将变成“Scc”和“S”,“J”被丢掉了。当一特定***没有所需要的连字集但是有基本字符时,这种方法尤为有用。例如,如果一个用户的***不包括***语中可能存在的数千种连字但是包括基本***字母,那么***语文本仍可被再现和显示,只不过字母之间是彼此分离的。仅管这不是语言显示的常用形式,但是比另一种丢弃全部信息以选择要理想。此外,当用户想打印单个字母,例如在列字母表或在用***(或其它语言)字母表达数学方程式时,这种方法确实很理想。
程序5的过程有其优点,即它省却了在其它情况下需要存贮的上千个连字表和核心表的入口。尽管在某些书面体系,如***语中,连字会显著改变字母的形状,在其它书面体系,如泰语和越南语中,通过在显示单元某些预先确定的地方为结合字符定位可以形成上千种可能的结合。这些体系中的元音记号、声调记号和其它结合字符就象英语中的发音符号(重音等),因其不会改变要被读的潜在字符的基本形状。一般化的撤回策略
图6显示了用于处理程序4和5所涉及情况的程序的流程图,一般来说就是处理含有一个或多个未知码点(即未在字库中找到)的任何文本元素,尤其是含有J和c的文本元素。
图6所示程序由查找处理程序240和退回处理程序250结合起来执行,并且说明实施图5所示步骤390—400的优先方法,并把重点放在由退回处理程序使用的方法。在步骤620—660中,除去不认识的连结(J)字符,而在其它情况下将被连接的字符加到一字模表中以便分别再现。在步骤670—730中,结合(c)字符被找到并除去,且剩余的字符象在文本单元中指定的那样加到字模表中。对整个文本单元有条理地寻找不认识字符,除掉不认识字符,而保持结合字符信息,并且把文本元素中认识的部分显示之。下面的例子将清楚地对其说明:范例1:S1JUJS2
现考虑一个S1JUJS2形式的输入文本单元,其中S和J代表它们的正常含义(分别为一个间隔字符和一个连接字符),S1和S2代表认识的间隔字符,U代表不认识的间隔字符。J表示输出的字模应将所有三个字符S1和S2全部连接(如果它们都是认识的字符)。
这种情况可以出现于:最初产生文本的***含有一个有三个连接起来的间隔字符的字模(以S1JSunkJS2)的形式),但中间的“S”(Sunk)对于现在试图再现文本元素的***是未知的;也就是,“Sunk”不能进入查找表中,J指示输出字模将包含对所有3个字符S1,Sunk,S2的连接(如果它们都是已知字符)。
被连结字符的例子在英语中较为少见,但在其它一些语言中常见。通过在两个f间和第二个f与i之间使用连接字符“J”有可能形成有效的“ffi”连字(但这不符合上面的SJUJS模式,因为如果其一个字符被认识,中间的字符也认识)。
一个更为可能的情况是用连接字符表示通过三个***字母alif—lam—sin形式的连字。Aif和lam被连接成一个连字,然后alif—lam连字被与Sin连接起来以形成一个三字母连字。
如果所有三个字符均是认识的,文本元素将采取SJSJS的形式,而如果三字符字模和alif—lam字模均不在查找表中,那么本***打印出三个分离的字符alif,lam和sin。
在这种情况下,如果alif和sin是可获得的,中间字符“lam”也将被假设为是***可获得的,但是有可能出现一个不被认识的新字符。本范例对相对稍复杂的后一种情况进行分析。
本发明的方法使得***可从文本元素“S1JUJS2”中抽出和显示认识的信息,而不是象现存***所做的那样只把整个文本元素处理。因此,最理想的是显示“S1S2”(第一个和最后一个S),而把“JUJ”从中间删除。
在步骤380(图5),文本元素“S1JUJS2”将找不到相应字模;所以方法继续进行到步骤390,也就是图6显示的步骤610。步骤610判断出文本元素不是空的。在步骤620,先根据(但不包括)J的第一次出现将一子元素设置为文本的一部分,且第一个J被去除。在本例中,这步剩下子元素S1。此外,此子元素被作为TEMP保存。
子元素是非空的(步骤630),且已假设它包括在查找表中,所以在步骤660,S1被附加在字模表上(且是此字模表中唯一的成分)。
在步骤740,子元素和任何紧跟在连接字符J后面的,如果有的话,被从原始的文本元素中移走。这相当于从A“S1JUJS2”中移走“S1J”,剩下“UJS2”为文本元素。返回步骤610,这是非空的,所以在步骤620产生一新的子元素,由“U”组成;剩余的J被在步骤610(1)(a)中去除。在步骤620(2)中,子元素作为TEMP保存。
子元素是非空的(步骤630),且它不能在表中找到(步骤650)。它不包含一个c(步骤670),所以一个缺省字模(一个长方框,一空白等)被加于字模表中,使其现在具有“S1□”。在步骤730中,表示在堆栈中任何c的字模(到现在还没有)被加到字模表中,而在步骤740中,“U”码点(现已被保存为TEMP)被和紧随其后的“J”一起被除去。这样在原始文本元素中就只剩下“S2”。
经变化的文本元素是非空的(步骤610)。在步骤620,文本中没有J,所以整个文本元素S2被认为为子元素(步骤620(1)(b))并被作为TEMP保存(步骤620(2))。子元素是非空的(步骤630),且可在表中找到(步骤650),所以其字模码被加到字模表中(步骤660),使其现在具有值“S1□S2”。在步骤740,TEMP的值(“S2”)被从原始文本元素中除去,而原始文本至此已被缩减得只剩“S2”,故文本元素只剩下空串。
在步骤610,由于文本元素已空,字模表被返回(步骤750)。然后回到步骤410(图5),在此步骤字模表被正常显示。
由前面可清楚看出,只有“S1□S2”被从原始文本元素“S1JUJS2”中保留在字模表中用于再现。这是合理的:由于“U”是不认识的,它不能被显示,且由于同样原因,不能确定S1,U和S2是被如何连接的,所以连接信息被处理,且只有认识的字符S1和S2被显示,其间有一长方框(□)表示不认识的字符(“U”)。
在上面的“alif—lam—sin”一例中,如果假设字符“lam”不被认出(也就是不在表130中),那么显示的字模表将为alif—□—sin,其中缺省符号代表“lam”。范例2:S1c1uc2
此例采取Sccc形式,其中第二个结合字符c(由U表示)是不认识的,但是其它字符可以在表中独立找到。Sccc形式的一个例子可以是
也就是一个U一变音符号加一个重音符号和一下横线,其中码点按
___的顺序出现(U,变音符号,重音符号,下横线)。这一不寻常的字符组合被用于说明本***能够处理的情况类型。假设试图再现此文本元素的***不认识重音记号
即它不出现于查找表中。这可能发生在,例如,一个纯德文***中,它包含变音符号和下横线,但是不合法语类型的重音记号。
然后如图5中的步骤380,假设完整的文本元素S1c1uc2未被找到,所以方法转到图6中的步骤610。继续进行至步骤620时,子元素被设置为完整的文本元素,因为它不包含J。步骤630和650为假,而步骤670为真,所以在步骤690,子元素变成S1c1u,且c2入栈。
此子元素仍不在表中(步骤710),返回步骤670确定该子元素仍包含至少一个C。在步骤690,子元素只有在不含最后一个C时被设置为当前的子元素,在此例中是一不认识的结合字符U。(如前面所讨论的,分析器220(图3)可以确定字符U的分类,即使查找表可能不包含关于U的适当字模的信息,因为所遇到的所***点的类别都存在表230中)。
现在子元素包括串S1C1,且在步骤700不认识的字符U入栈,使其现在具有形式:字符栈UC2
在步骤710中,假设剩余子元素S1C1在查找表130中找到,因而在步骤720中对应S1C1的结合字模作为第一个元素加到字模表中。对应剩余结合字符的字模也被加到字模表中(步骤730)。在此例中即为U和C2。U应当在保留其“结合”状态的同时被赋与一个空白空缺字符,从而使代表C2的已知字模和已知字模S1C1结合,形成代表S1C1C2的结合字模。这导致一个字符U被显示,而丢弃了代表重音符号的未知码点。
如果未知字符(重音符号)的结合类别既不知道也未被保存,则得到的U的显示应为U—,即U与变音符号结合,后面是一个代替重音记号的非结合空白,下横线跟在U后面而不是与之结合(而是与前面的空白结合)。这样,本***就可以尽可能多地保留包括信息的原始信息,仅丢掉无法再恢复的信息。
这就形成了本***的又一优势,即众多的字母和符号的不同结合形式不必存在查找表中。由于本***能够在重现时结合字符,结合字符表的众多入口就能免除。这使得***有高度适应性而无需花费任何力气或为产生和存贮表而扩展存贮器。它还可使新的字符和不存在某一标准码(如统一码)集的字母表中的字符能被使用。重排输入的文本序列
当一个文本元素被***读入时,它可能不是一种可被识别的字符顺序,因而在前面的例子中字模U可能在查找表中被存为U(U,变音符号,下横线),而不是以输入的码点序列U__¨(U,下横线,变音符号)出现。在这种情况下,前一种码点顺序可能被找到(在图5的步骤380中),而后者则不能。
为防止这种现象的不必要发生,分析程序和撤回处理程序将输入码点重排成理想的顺序。在此情况下,***可以保证一元音的变音符号紧跟元音,且/或所有下横线码点都在文本元素的最后。在本例中,此两规则的任一个都将把U__¨(U,下横线,变音符号)重排成U¨__(U,变音符号,下横线),从而防止返回处理程序执行步骤610到750的过程。
图7显示了这一改进,其中步骤760检验给定文本元素中的码点是否为预先设定的顺序。如果不是,文本元素在被送到撤回程序的其它部分(步骤780)之前就被重新排列(步骤770)。
许多不同的排序方案可被使用,且分析程序和撤回处理程序可用不同方案编程,这不影响码点或它们的类别,也不会影响实际表达式的定义。
这对于处理从非用户的***输入的非传统输入是一个有效的办法,同时也可适应在同一码标准单独出现的字母的新组合;人们只需简单的修改分析程序和撤回处理程序而无需重新生成查找表。范例3:S1c1u1u2Juc2JS2
现考虑一个如上形式的文本元素串,其中小写字母U代表未知结合字符,其它字符则按前面的例子定义,在本发明的一般类型记号中,这是一个ScccJScJs形的文本元素,即一个间隔字符,后面是三个结合字符,然后是一个连起来的间隔字符,然后是另一个结合字符,最后是又一个连接的间隔字符。
尽管这个例子是一个不太可能的高度复杂的文本元素,它对于在此说明是有用的,通过观察,很清楚***将返回
S1c1u1u2Juc2JS2<S1c1><□c2><S2>,其中<Sic1>是一个结合字模(由于c),<□c2>是一个连接字模(由于c2的结合特性)。缺省框□作为U的替代被打印,而未知的结合字符U1和U2被丢弃。S2独立存在(其前面的J被丢弃)。
参照图6所示方法,步骤620将子元素设置成S1c1u1u2,即查找到但不包括第一个J,并将其保存为TEMP。步骤630和650均为负,步骤670为正,故在步骤690子元素变成S1c1u1(当前子集查找但不包括最后一个c,即最后一个结合字符)。最后那个结合字符是u2,并被作为第一个元素入栈。
步骤710取假值,步骤670仍为正,所以现在子元素变成S1C1(步骤690),且最后的结合字符U1入栈(步骤700),这个栈现在看起来象:
字符栈
u1
u2假设S1c1的字模对于选定字体(图3中表130中的一个)在字库中被找到,那个字模就被在步骤720中存于字模表中,且U1和U2从字符栈出栈并同样加到字模表中(步骤730)。现在字符栈是空的,而字模表是:
字模表
S1c1
u1
u2
在步骤740,TEMP串S1c1u1u2和紧跟其后的J被从原始文本元素S1c1u1u2Juc2JS2中除去,只剩下Uc2JS2作为新的“原始”文本元素。步骤610取假值,故步骤620设置子元素(和TEMP)为Uc2。步骤630和650均取假值,步骤670取真值,故步骤690设置子元素为U,而步骤700将c2入字符栈(目前空着)。
步骤710和步骤670一样产生负值。在步骤680和730,缺省框和代表C2的字模码被加到字模表中,该表现在是:
字模表
S1c1
u1
u2
□
c2
在步骤740,TEMP(Uc2)的当前值和其后的J被从文本元素Uc2JS2中除去,剩下S2作为新的文本元素。处理步骤610时,文本元素仍不是空的,故在步骤620(1)(b)中子元素被设置为S2,在步骤620(2)中它被作为TEMP存贮。步骤630为负,步骤650为正,故步骤660把代表S2的字模加到字模表中,使其现在包括:
字模表
S1c1
u1
u2
□
c2
S2现在,在步骤740,TEMP(S2)的值被从本身已被设置为S2的原始文本元素中除去,从而剩下一个空串。步骤610现在为正。它将上述字模表返回到步骤410(见图5),在此步骤字模被再现和显示。S1c1将被一起显示,其后是与c2结合在一起的缺省字符(在此是长方框),然后是代表S2的字模。象前面一样,对未知的结合字符不显示任何字符,因为它们结合分类被保存它们可以用与前面字模结合的空白来表示。
图3所示的退回处理程序250在图8的框图中有详尽说明,并且显示了一个实施上述在图6—7的流程图中所描述方法的软件的适当结构。通过J—子元素模块800对含J的子元素进行处理,而含C的子元素由模块830处理。参照图6,步骤620—650和步骤740可以用软件模块800实施,而步骤670,690—710和740可以用软件模块830实施。反过来,J—和C—模块控制字模表模块810来产生和保持字模表(步骤660,720和730)。
模块800和830与一个查找模块820相互配合,模块820存贮查找表130(比较图3)以在表内寻找字模如果它们能被找到(见步骤650和710),恢复它们。
任何缺省字模最好在有关的子元素模块800或830中由一个子模块产生;例如,J—模块800可以产生代表空字符的缺省字符来代替连接字符,C—模块830可以产生空白结合字符代替未知的结合字符,且两者均可为未知的间隔字符产生一长方框□。当然,这也可以在一个单独的缺省字符产生模块中被处理。
一旦图6的过程被执行,结果步骤610为真值,撤回处理程序250就将字模表从字模表模块810输出到再现模块260(见图3)。范例4:S1J1J2S2
一种可能碰到的不常见情况是两个J连续出现,例如,一个在某种字母表中通常有一连接字符跟随其后的字母的后面可能有来自另一种字母表、通常在其前面有连接字符的一个字母。在步骤620,S1成为第一个子元素(和TEMP的值),且J1被删除(如前面例1中)。在步骤650,S1被找到;在步骤660,它的字模被加到字模表中;且在步骤740中,S1和J1被从串S1J1J2S2中去除,只剩下J2S2。
继续返回步骤610(真),然后到步骤620(1),现在子元素被设定在一个空串(到“第一个J”)且J2被删除。因为子元素是空的,步骤630的结果为正,所以在步骤640子元素(和在它后面的J2)被从文本元素中除去,只剩下S2。字符S1和S2就这样被以常规形式再现。
用图6的程序,当用户的***不具有给定字符的字模的表信息和当一个少见或未知的字符组合或字符类型被作为文本元素输入时的许多情况就可被处理。所能解决的情况类型视预设定的常规表达而定,此常规表达被选择以解决上述问题和保持较大字库中的问题。
其它撤退方案可能还考虑了对于某特定输出设备的显示特性。例如,如果输出设备定一个Post Script激光打印机,撤退处理程序可以使用Post Script操作程序对所需文本元素构成近似值。这种方法的细节过于复杂和具有机器特性,在此不做详细描述。然而作为一个范例,在将7J/J8形式的任何文本元素(数字,连接符,斜杠,连接符,数字)映射到分数形式时它是很有用的,无论这样的文本元素在何时出现。这可以使任何***都能产生最优化的分数,而不是只限于数字编辑器。
①将字形大小缩减三分之二。
②移到下一单元的上半部分。
③显示第一个数字(7)的字模。
④在第一个数字(7)的下面划一水平线。
⑤移到单元的下半部
⑥显示第二个数字(8)的字模。
⑦恢复字形尺寸。
尽管针对这一特定问题还可能有许多其它办法,关键是图5所示的撤退处理程序和方法允许这一变化。有了这种方法就不再需要一个包括了数千种可能有的分数的表;在需要的时候,任何分数都可被产生。用于不同情况的其它规则集也可被产生,且在需要某一种特定的输出中含不同独立成分输出形式(如一个分数)时尤为有用。
Claims (12)
1. 一种从包含许多码点的文本元素产生字模的方法,上述每个码点代表一个所述字模;本方法由存贮在含有用于控制存贮器的处理器的计算机的程序执行,且存贮器中至少存有一个查找表与预先设定的含所述字模的预设定集的所述码点集对应,此办法包括步骤有:
(1)确定文本元素是否与表中一个字模相对应;如果是,继续进行到步骤4,否则进行到步骤2;
(2)通过移去第一个预先设定的文本元素的子集来修改文本元素;
(3)判断在表中是否存在与修改后的文本元素相应的字模,如果有,处理步骤(4),且:
(4)输出相应字模。
2.权利要求1的方法,其中,如果判断步骤(3)为负,步骤(3)包括的步骤有:
(5)返回步骤(2)以进一步修改文本元素,进行用修改后的文本元素执行步骤(3),且
(6)用进一步修改后的文本元素重复步骤(2)—(3)—(5),直到一个经修改的文本元素在表中有与之相对应的字模,然后处理步骤(4)。
3.权利要求2的方法,其中步骤(6)包括的步骤有:
如果在经修改文本元素所对应的字模在表中被找到之前已达到一个预先确定的标准,那么在达到此预定标准的同时停止对文本元素的修改,并为修改过的文本元素产生一个缺省字模作为其对应字模。
4.权利要求3的方法,其中步骤(2)包括从基本元素中至少除去一个码点的步骤,而预先确定的标准包括一个文本元素为空的判断;本方法还包括的步骤有:
在从文本元素中至少除去一个码点的同时产生一个文本元素剩余部分;且
在用与经修改的文本元素对应的字模执行了步骤(4)之后,将剩余文本元素作为文本元素。
5.权利要求1的方法,其中步骤(2)包括从文本元素除去一个码点的步骤;方法还包括的步骤有:
在从文本元素至少除去一个码点的同时产生一个文本元素剩余量;且
在用与经修改的文本元素对应的字模执行了步骤(4)之后返回到步骤(1),将剩余量作为文本元素使用。
6.权利要求6的方法,其中被除去的码点是一个在表中无对应字模的结合字符的码点,而步骤(3)包括的步骤有:
用一个缺省结合字符代替结合字符。
7.一种由一串字符码产生字模的方法,字符码被输入一计算机***,该***有一个与存贮实施此法的软件的存贮器耦合的处理器和一个与处理器耦合的输出设备;本方法还包括的步骤有:
(1)从输入串产生包括字符码最初子集的第一个正常表达法此正常表达法相应于预先设定的语法;
(2)判断第一个正常表达法是否存在于查找表中,如果是,找到与第一个正常表达法相应的字模,并且继续进行到步骤(8);
(3)如果在查找表中未找到第一个正常表达法,产生初始字符码集的第一个子集作为当前子集,并且把初始字符码集的剩余量作为当前的剩余量,这个输入字符码的第一个剩余量至少包括一个不包括在第一个子集中的码;
(4)判断字符码的当前子集是否能在查找表中找到;如果是,找出与当前子集相对应的字模处理步骤7,否则处理步骤(5);
(5)产生输入字符码的一个新子集作为当前子集,产生输入字符码的一个新剩余量做为当前剩余量,此当前剩余量至少包括一个不包括在当前子集中的码;
(6)判断预先确定的标准是否达到,如果没有,回到步骤(4),如果达到,处理步骤(7);
(7)如果被产生的子集都不能在查找表中找到,指定至少一个缺省字符做为找到的字模并继续进行到步骤(8);
(8)将找到的字符输出到输出设备。
8.一种相应于包括代表要显示的字符的许多码点的输入文本元素而产生输出字模的***,包括一台具有存贮至少一个字模表的存贮器的计算机;本***包括:
查找处理程序,它用于寻找表找出代表文本元素的正确字模位置,
撤退处理程序,如果代表文本元素的正确字模不能由查找处理程序找到时对文本元素进行处理,它包括
第一产生装置,它至少产生一种构成文本元素的码点的一个子集;
定位装置,用于在表中寻找代表子集的正确字模的位置;和
第二产生装置,当代表子集的正确字模不能由定位装置定位时,为子集产生一个缺省字模;
程序还包括输入装置和输出装置,输入装置从所说撤退处理程序接收所说的正确和缺省字模输出装置用于输出所说的正确和缺省字模以显示之。
9.权利要求8的***,其中
每个码点都有一预先设定的类别,且
***还包括分析器装置,它对本文元素中每一码点确定分类并将类别与文本元素一起送到查找处理程序。
10.权利要求9的***,其中
一个所说类别相应于一个连接码点,表明其前面一个和后面一个码点将被由连接在一起的字模表示。
11.权利要求10的***,其中
输入文本元素的另一个子集包括代表第一个字符的码点,其后是代表一连接字符的码点,再后面是代表第三个字符的码点;且
第二种产生装置包括用于当表达第一个子集整体的字模在查找表中找不到时产生一个空白的缺省字符以替代连接字符,并把代表第一和第三个字符的码点送给定位装置,以确定分别代表第一和第三个字符的字模经所说的输出装置输出。
12.权利要求10的***,其中
输入文本元素的第一个子集包括对应第一个字符的码点,其后是第二个字符的码点,再后是第三个字符的码点,且第二和第三个字符中的每一个都包含一个结合字符,在此第一和第三个字符被表示在查找表中而第二个字符则没有;且
第二种产生装置包括用于将代表第一和第三个字符的码点送至定位装置以为第一个字符找出第一个字模和为第三个字符找出第二个字模,并且第一和第二个字模结合成代表第一和第三个字符的结合字模,以及将此结合字模送至上述输出装置以输出该结合字模的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/177,041 US5526477A (en) | 1994-01-04 | 1994-01-04 | System and method for generating glyphs of unknown characters |
US177,041 | 1994-01-04 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1117160A true CN1117160A (zh) | 1996-02-21 |
Family
ID=22646945
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN94113598A Pending CN1117160A (zh) | 1994-01-04 | 1994-12-29 | 产生未知字母之字模的方法与*** |
Country Status (5)
Country | Link |
---|---|
US (1) | US5526477A (zh) |
EP (1) | EP0661670A3 (zh) |
JP (1) | JPH07244661A (zh) |
KR (1) | KR950033795A (zh) |
CN (1) | CN1117160A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508822A (zh) * | 2011-11-09 | 2012-06-20 | 北京赛科世纪数码科技有限公司 | 泰语显示方法、装置和*** |
CN104794142A (zh) * | 2014-01-20 | 2015-07-22 | 文鼎科技开发股份有限公司 | 字型处理方法及字型处理*** |
Families Citing this family (61)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5926189A (en) * | 1996-03-29 | 1999-07-20 | Apple Computer, Inc. | Method and apparatus for typographic glyph construction including a glyph server |
KR0172581B1 (ko) | 1996-04-02 | 1999-03-30 | 이진기 | 단계적 표현 가능형 폰트 그 변환 방법 및 렌더링 방법 |
US5758314A (en) * | 1996-05-21 | 1998-05-26 | Sybase, Inc. | Client/server database system with methods for improved soundex processing in a heterogeneous language environment |
US5909223A (en) * | 1996-09-04 | 1999-06-01 | Apple Computer, Inc. | Text face scaler |
US5870084A (en) * | 1996-11-12 | 1999-02-09 | Thomson Consumer Electronics, Inc. | System and method for efficiently storing and quickly retrieving glyphs for large character set languages in a set top box |
AU5258798A (en) * | 1996-11-12 | 1998-06-03 | Thomson Consumer Electronics, Inc | System and method for receiving and rendering multi-lingual text on a set top box |
US5831636A (en) * | 1996-11-26 | 1998-11-03 | Motorola | Method for compressing ideographic characters for storage decompression and display and a communication device therefor |
US6522330B2 (en) | 1997-02-17 | 2003-02-18 | Justsystem Corporation | Character processing system and method |
EP0902378A3 (en) * | 1997-09-15 | 2003-07-16 | Canon Kabushiki Kaisha | A font architecture and creation tool for producing richer text |
US6216131B1 (en) * | 1998-02-06 | 2001-04-10 | Starfish Software, Inc. | Methods for mapping data fields from one data set to another in a data processing environment |
US6170000B1 (en) * | 1998-08-26 | 2001-01-02 | Nokia Mobile Phones Ltd. | User interface, and associated method, permitting entry of Hangul sound symbols |
US6754875B1 (en) * | 1998-11-17 | 2004-06-22 | Adobe Systems Incorporated | Applying a computer-implemented test to determine whether to replace adjacent characters in a word with a ligature glyph |
US6678410B1 (en) | 1999-02-17 | 2004-01-13 | Adobe Systems Incorporated | Generating a glyph |
EP1048456B1 (en) * | 1999-02-17 | 2007-10-31 | Adobe Systems Incorporated | Generating a glyph |
US6738526B1 (en) * | 1999-07-30 | 2004-05-18 | Microsoft Corporation | Method and apparatus for filtering and caching data representing images |
US6771267B1 (en) * | 2000-03-22 | 2004-08-03 | Adobe Systems Incorporated | Merging digital fonts |
US7278100B1 (en) * | 2000-07-10 | 2007-10-02 | International Business Machines Corporation | Translating a non-unicode string stored in a constant into unicode, and storing the unicode into the constant |
KR100363170B1 (ko) * | 2000-12-04 | 2002-12-05 | 삼성전자 주식회사 | 기록매체, 그 재생장치, 및 그 텍스트 디스플레이방법 |
US7493250B2 (en) | 2000-12-18 | 2009-02-17 | Xerox Corporation | System and method for distributing multilingual documents |
US6826629B2 (en) * | 2001-09-06 | 2004-11-30 | Hewlett-Packard Development Company, L.P. | Apparatus and method for enhancing learning ability and behavior for a computer peripheral device |
US7228501B2 (en) * | 2002-11-01 | 2007-06-05 | Microsoft Corporation | Method for selecting a font |
US7236980B2 (en) * | 2003-02-28 | 2007-06-26 | Microsoft Corporation | Unicode normalization |
US7310769B1 (en) | 2003-03-12 | 2007-12-18 | Adobe Systems Incorporated | Text encoding using dummy font |
US7586628B2 (en) * | 2003-06-20 | 2009-09-08 | Infoprint Solutions Company, Llc | Method and system for rendering Unicode complex text data in a printer |
US7707575B2 (en) * | 2004-09-20 | 2010-04-27 | Hewlett-Packard Development Company, L.P. | System and method for selecting a portfolio of resources in a heterogeneous data center |
US8930400B2 (en) * | 2004-11-22 | 2015-01-06 | Hewlett-Packard Development Company, L. P. | System and method for discovering knowledge communities |
US7408556B2 (en) * | 2005-01-31 | 2008-08-05 | Microsoft Corporation | System and method for using device dependent fonts in a graphical display interface |
US8781977B1 (en) | 2005-03-29 | 2014-07-15 | Hewlett-Packard Development Company, L.P. | System and method of pricing resources |
US7623130B1 (en) * | 2005-04-25 | 2009-11-24 | Apple Inc. | Text rendering with improved command stream operations |
US7599829B2 (en) * | 2005-07-29 | 2009-10-06 | Microsoft Corporation | Phonetic searching using partial characters |
US7853869B2 (en) * | 2005-12-14 | 2010-12-14 | Microsoft Corporation | Creation of semantic objects for providing logical structure to markup language representations of documents |
JP2007240848A (ja) * | 2006-03-08 | 2007-09-20 | Seiko Epson Corp | 表示プログラム、データ構造及び表示装置 |
US20070211062A1 (en) * | 2006-03-13 | 2007-09-13 | International Business Machines Corporation | Methods and systems for rendering complex text using glyph identifiers in a presentation data stream |
US20070262991A1 (en) * | 2006-05-15 | 2007-11-15 | Abulhab Saad D | Arabic input output method and font model |
US8201088B2 (en) * | 2006-07-25 | 2012-06-12 | Monotype Imaging Inc. | Method and apparatus for associating with an electronic document a font subset containing select character forms which are different depending on location |
US7786994B2 (en) * | 2006-10-26 | 2010-08-31 | Microsoft Corporation | Determination of unicode points from glyph elements |
US8559624B1 (en) | 2006-12-29 | 2013-10-15 | Edward J Zajac | Cyphometry consisting of ciferglifs, chaotiglyphs and word auras |
US7925091B2 (en) * | 2007-03-30 | 2011-04-12 | Microsoft Corporation | Displaying text of a writing system using syntax-directed translation |
US20080244511A1 (en) * | 2007-03-30 | 2008-10-02 | Microsoft Corporation | Developing a writing system analyzer using syntax-directed translation |
US7818311B2 (en) * | 2007-09-25 | 2010-10-19 | Microsoft Corporation | Complex regular expression construction |
US9195837B2 (en) * | 2007-11-30 | 2015-11-24 | Hewlett-Packard Development Company, L.P. | Method and system for securely transmitting deterrent data |
US8799268B2 (en) * | 2008-12-17 | 2014-08-05 | International Business Machines Corporation | Consolidating tags |
US9319444B2 (en) | 2009-06-22 | 2016-04-19 | Monotype Imaging Inc. | Font data streaming |
US8615709B2 (en) | 2010-04-29 | 2013-12-24 | Monotype Imaging Inc. | Initiating font subsets |
US8542235B2 (en) | 2010-10-13 | 2013-09-24 | Marlborough Software Development Holdings Inc. | System and method for displaying complex scripts with a cloud computing architecture |
US9442898B2 (en) * | 2012-07-17 | 2016-09-13 | Oracle International Corporation | Electronic document that inhibits automatic text extraction |
US9817615B2 (en) | 2012-12-03 | 2017-11-14 | Monotype Imaging Inc. | Network based font management for imaging devices |
WO2014100582A2 (en) | 2012-12-21 | 2014-06-26 | Monotype Imaging Inc. | Supporting color fonts |
WO2014110206A2 (en) | 2013-01-09 | 2014-07-17 | Monotype Imaging Inc. | Advanced text editor |
EP2763051B1 (en) * | 2013-01-31 | 2019-08-14 | Google LLC | Serving font glyphs |
US20140320527A1 (en) * | 2013-04-30 | 2014-10-30 | Microsoft Corporation | Hardware glyph cache |
US9317777B2 (en) | 2013-10-04 | 2016-04-19 | Monotype Imaging Inc. | Analyzing font similarity for presentation |
US9691169B2 (en) | 2014-05-29 | 2017-06-27 | Monotype Imaging Inc. | Compact font hinting |
CN104965830B (zh) * | 2014-06-06 | 2018-07-17 | 腾讯科技(深圳)有限公司 | 一种字符更新方法及装置 |
CN104317663B (zh) * | 2014-09-29 | 2017-11-21 | 广东欧珀移动通信有限公司 | 自动化字符测试方法和装置 |
US10115215B2 (en) | 2015-04-17 | 2018-10-30 | Monotype Imaging Inc. | Pairing fonts for presentation |
US11537262B1 (en) | 2015-07-21 | 2022-12-27 | Monotype Imaging Inc. | Using attributes for font recommendations |
US11334750B2 (en) | 2017-09-07 | 2022-05-17 | Monotype Imaging Inc. | Using attributes for predicting imagery performance |
US10909429B2 (en) | 2017-09-27 | 2021-02-02 | Monotype Imaging Inc. | Using attributes for identifying imagery for selection |
US11657602B2 (en) | 2017-10-30 | 2023-05-23 | Monotype Imaging Inc. | Font identification from imagery |
KR102329116B1 (ko) * | 2019-12-09 | 2021-11-19 | 숭실대학교 산학협력단 | 부분 글자 스타일 변경이 가능한 폰트 생성 장치 및 방법 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4730269A (en) * | 1983-02-18 | 1988-03-08 | Houghton Mifflin Company | Method and apparatus for generating word skeletons utilizing alpha set replacement and omission |
JPS6077222A (ja) * | 1983-10-04 | 1985-05-01 | Kanaasu Data Kk | 多種文字処理端末装置 |
JPH0762848B2 (ja) * | 1985-03-23 | 1995-07-05 | ブラザー工業株式会社 | 電子辞書 |
US4833627A (en) * | 1986-08-29 | 1989-05-23 | The Toles Group | Computerized typesetting correction system |
JP2756292B2 (ja) * | 1989-02-07 | 1998-05-25 | キヤノン株式会社 | 文書出力装置 |
US5416898A (en) * | 1992-05-12 | 1995-05-16 | Apple Computer, Inc. | Apparatus and method for generating textual lines layouts |
-
1994
- 1994-01-04 US US08/177,041 patent/US5526477A/en not_active Expired - Lifetime
- 1994-12-14 EP EP94119776A patent/EP0661670A3/en not_active Withdrawn
- 1994-12-28 JP JP6341035A patent/JPH07244661A/ja active Pending
- 1994-12-29 CN CN94113598A patent/CN1117160A/zh active Pending
-
1995
- 1995-01-04 KR KR1019950000034A patent/KR950033795A/ko not_active Application Discontinuation
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508822A (zh) * | 2011-11-09 | 2012-06-20 | 北京赛科世纪数码科技有限公司 | 泰语显示方法、装置和*** |
CN104794142A (zh) * | 2014-01-20 | 2015-07-22 | 文鼎科技开发股份有限公司 | 字型处理方法及字型处理*** |
Also Published As
Publication number | Publication date |
---|---|
EP0661670A3 (en) | 1996-06-05 |
KR950033795A (ko) | 1995-12-26 |
US5526477A (en) | 1996-06-11 |
EP0661670A2 (en) | 1995-07-05 |
JPH07244661A (ja) | 1995-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1117160A (zh) | 产生未知字母之字模的方法与*** | |
CN1248138C (zh) | 图像处理方法与图像处理*** | |
CN1158627C (zh) | 用于字符识别的方法和装置 | |
CN1161701C (zh) | 语言识别装置和语言识别方法 | |
CN1139884C (zh) | 信息处理方法和装置 | |
CN1174332C (zh) | 转换表达方式的方法和装置 | |
JP5623079B2 (ja) | ハード・コピーの書式からの書式定義の自動発生 | |
CN1542655A (zh) | 信息处理装置和信息处理方法、以及存储媒体、程序 | |
US20060217958A1 (en) | Electronic device and recording medium | |
CN1368693A (zh) | 用于全球化软件的方法和设备 | |
CN1719864A (zh) | 图像处理***及图像处理方法 | |
CN1379882A (zh) | 将二维数据转换为标准形式的方法 | |
CN1815435A (zh) | 文档处理装置和文档处理方法 | |
CN1419211A (zh) | 文件转换***、转换方法和存储文件转换程序的可读介质 | |
CN1519753A (zh) | 程序、字符输入编辑方法、装置及记录媒体 | |
CN1542649A (zh) | 自然语言生成***中用于句子实现中排序的成分结构的语言信息统计模型 | |
CN1758241A (zh) | 具有字体信息嵌入功能的信息处理装置及其信息处理方法 | |
CN1297208A (zh) | 文件编辑处理方法和设备以及程序装载介质 | |
CN1925541A (zh) | 图像处理装置及其方法 | |
CN1627786A (zh) | 图像处理***以及图像处理方法 | |
CN1286445A (zh) | 电子邮件设备 | |
CN1194504A (zh) | 数据压缩/解压设备/方法及程序记录媒体 | |
CN1959678A (zh) | 信息处理方法及其设备 | |
CN1786947A (zh) | 基于网页页面布局提取网页核心内容的***、方法和程序 | |
CN1151558A (zh) | 信息检索方法和*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |