影像文本文件的活字排版方法

文档序号:6602763阅读:149来源:国知局
专利名称:影像文本文件的活字排版方法
技术领域
本发明涉及一种影像文本文件的活字排版方法,特别涉及一种可根据不同载具的阅读界面尺寸而自动排版并换行的影像文本文件的活字排版方法。
背景技术
电子书(e-books或electronic books)是指电子书阅读器(e-reader)以及其数字内容的一个统称,是近年来信息载具(information loader)的趋势,并逐渐替代传统的纸面图书。根据牛津字典(Oxford Dictionary)的定义,所谓的“电子书”是指“可供于个人计算机或者手持(hand-held)型仪器上阅读的电子版本的印刷书”。上述的硬件阅读界面一般称为“电子书阅读器”,个人计算机以及某些携带电话亦可使用为电子书阅读器。因电子书可由不同型式的电子书阅读器(或前面所称的载具)所读取,因此在数字出版上,制作出数字文件,并可适应不同电子书阅读器的阅读乃成为一个重要的关键。在过去的图书管理,因处于计算机发展之初,因此大多数旧有图书仍然使用油墨的纸面印刷方式,没有对应的可编辑电子文件格式以提供载入阅读。对于这些旧有图书,目前的一般方法是以扫描手段将图书转成影像文件后载入使用。但是,这种扫描文件如直接载入电子阅读器而显示,无法依据阅读界面的尺寸调整而自动换行,因此须经常使用到上下或左右同时滚动条(scrolls)功能或是变更观看尺寸功能,方可达到阅读整个页面的目的,因此,阅读不便且耗时。为解决该问题,现有技术将这些扫描文件经电子转译为可编辑的电子文件格式,制作出数字文件以供编辑,再行载入阅读。所述电子转译技术是配合光学字符识别(optical character recognition,简称OCR),将扫描机所截取的文字影像电子翻译 (electronicallytranslate)为可供编辑的文件,可编辑文件则可根据阅读界面尺寸而调整换行。较好的光学字符识别系统须有类似人类的阅读,对不同印刷字体具有良好的辨识度。一般而言,于英文辨识上,因英文字母以及文字符号数量有限,光学字符识别系统对排版后产生的文本文件的辨识效果较好,可预期达到近百分之百。然而,对于表意文字 (ideographic languages)或者区块文字(block languages),例如繁简体中文、日文、韩文等,因文字数据库大且字体型态复杂,光学字符识别系统的电子翻译效能皆差强人意,若要达到可阅读的正确率,则须以人工方式校对。于目前旧有图书数量庞大的情况下,如须将每一书籍扫描并电子翻译为可编辑文件,之后校正电子翻译的结果,须花费相当多的时间以及费用。再者,如需求上仅为单纯阅读需要,无须进行文件编辑的情况下,这种电子辨识并不符合现有需要。

发明内容
因此,本发明提供了一种影像文本文件的活字排版方法,其目的之一在于提供一种可根据不同载具的阅读界面尺寸而自动排版换行的影像文本文件的活字排版。
本发明提供了一种影像文本文件的活字排版方法,其另一目的在于提高显示速度及便利性;本发明的影像文本文件的活字排版方法无须通过光学字符识别系统的个别字符比对,而直接将影像文本文件进行适当切割,并快速显示于不同尺寸的阅读界面上,因此无须光学字符识别系统后处理的大量校对人力,亦无影像文本文件直接呈现的不便利及缺乏弹性。本发明所提供的影像文本文件的活字排版方法,其步骤包括根据阅读顺序,对一影像文本文件进行第一方向的切割,使该文本文件形成多个字符串影像;对每一该字符串影像进行第二方向的切割,使该影像文本文件形成多个独立字符影像;基于一阅读界面,将该些独立字符影像进行排版,使排版版面可根据该阅读界面尺寸而自动换行。在一个实施例中,本发明是记录该影像文本文件的黑色像素列阵列以及黑色像素栏阵列,借以找出每一个字符的上下左右边界,因此将影像文本文件中的每一字符分割出, 并以字符为单位进行重新排版,实现可依据阅读界面尺寸而自动换行的功效。在一个实施例中,本发明储存原始影像文本文件中的阅读顺序以及分段信息,并于排版程序中重新显示。因此,本发明无须将扫描文件电子翻译为可编辑文件,且无须校正电子翻译的结果;仍可根据阅读界面尺寸,将字符重新排版而使其可自动换行,解决一般影像文本文件无法根据不同阅读界面尺寸而自动排版换行的问题。


为使本发明的上述和其它目的、特征、优点与实施例可容易了解,所附附图的详细说明如下图1显示了本发明的影像文本文件的活字排版方法中“文字切割”的一实施例的流程图;图2显示了本发明对影像文本文件进行第一方向的切割以形成多个字符串的一实施例的流程图;图3显示了本发明将影像文本文件切割为独立字符后,活字排版于一阅读界面的一实施例的流程图;图4显示了本发明“写入显示缓冲区”步骤中所包括的子步骤的一实施例的流程图;图5显示了本发明“打印显示缓冲区”步骤中所包括的子步骤的一实施例的流程图;图6A显示了缓冲区数据到底时的显示缓冲区范围;以及图6B显示了缓冲区数据未到底时的显示缓冲区范围。
具体实施例方式以下的说明以及范例用以解释本发明的细节。然而,本领域的技术人员应该轻易了解,于本发明的实施例所涵盖下,所述及的这些实施例应有相当的变化以及改良。因此, 后载的实施例并非用于限制本发明的保护范围。本发明的影像文本文件的活字排版方法,实质上可包括“文字切割”以及“活字排版”两个主要程序。在首先的“文字切割”程序中,本发明将影像文本文件切割为多个独立字符,并将每一该些字符以影像格式和相关信息加以储存。在后面的“活字排版”程序中, 本发明以字符为单位,针对该些切割后的字符进行活字排版,因此可针对不同尺寸的阅读界面进行排版并自动换行调整,以实现快速且方便阅读的显示。本发明所述的“影像文本文件”定义为无法直接编辑的文件格式,举例说明,例如 Pdf文件或者tiff文件,但不以所举例者为限。此外,本发明的名称虽以影像文本文件为标的,但实务上并不以整体文件格式皆为文字为限。请参见图1,其显示了本发明的影像文本文件的活字排版方法中“文字切割”的一实施例的流程图,其包括步骤1 “取得一影像文本文件”;步骤2 “对该影像文本文件进行第一方向的切割,以形成多个字符串影像”;步骤3 “对每一该字符串进行第二方向的切割, 以形成多个字符”;步骤4 “将每一该字符储存为影像,并且保留阅读顺序以及分段信息”; 以及步骤5 “进行活字排版”。首先,本发明的影像文本文件的活字排版方法必须取得一影像文本文件(步骤 1),并于取得该影像文本文件时,同时撷取该影像的宽度Wl以及高度HI。之后,根据阅读的顺序,对该影像文本文件进行第一方向的切割,以形成多个字符串影像(步骤幻,接着再度根据该字符串阅读的顺序,对每一该字符串进行第二方向的切割,以形成多个字符(步骤 3)。于切割后,可将每一该字符储存为影像,并且保留原阅读顺序以及分段信息(步骤4), 并以字符为单位,针对切割后的个别字符进行活字排版(步骤5)。本发明于一实施例中,为减小储存容量以及处理时间,可于步骤1 “取得一影像文本文件”后,增加一步骤11 “将影像文件转为黑白二元图”的步骤,减小文件的尺寸,仅针对黑白二元文件进行处理。所述的“黑白二元图”,是将影像中所有的色彩分为黑色或白色两种颜色,因此称为黑白二元图。再者,为简化切割处理程序,使无论竖向或横向文件的切割顺序皆相同,即先进行横向切割,再行竖向切割;于步骤2的切割以前,可包括一步骤12 “确认文字排版方向”的程序,并根据该确认后的文字排版方向,进行一步骤13 “对影像文本文件进行一适当角度的旋转”。所述的“一适当角度的旋转”,举例说明,如原始的影像文本文件为竖向,且为由右至左的字符串阅读顺序,则该“适当角度的旋转”可为逆时针旋转九十度。因此,于进行该适当旋转角度后,使无论原始文字排版方向为竖向或是横向,皆可统一以横向作为该“第一方向”,而以竖向作为“第二方向”,以利于切割程序的简化。然而,在其它的实施例中,步骤2以及步骤3中所述的“第一方向”以及“第二方向”是可自由根据排版方向而定义,并未受到限制。举例说明,如原始影像文本文件的文字排版为横向,则该第一方向可定义为横向,而第二方向可为竖向。反之,如原始影像文本文件的文字排版为竖向,则该第一方向可定义为竖向,而第二方向则可为横向。因此,无论竖向排版或横向排版,于经过“第一方向”以及“第二方向”切割后,一影像文本文件可形成多个独立的字符影像。请参考图2,其显示了本发明对一影像文本文件进行第一方向切割以形成多个字符串的一实施例的流程图。在该实施例中,本发明扫描并读取影像中的黑色部分,借此界定每一字符串的上下边界,并以该上下边界将该影像文本文件分割成为多个字符串;但是,实务上可使用其它方式进行实质上相等的分割,如读取影像中的白色部分进行分割,本发明并不以所公开的实施例的分割为限。再者,为方便描述,于图2中,假定对影像文本文件所进行的第一方向切割为横向切割,且经过步骤11的黑白二元图转换。参见图2,首先如步骤21 进行初始化,并且将影像中每一个像素(pixel)列的黑色像素数量储存至一阵列,表示为黑色像素列阵列BR(i),其中i为像素列的索引号,索引号的增加顺序是根据阅读顺序而决定。举例说明,BR(8) = 1000代表i = 8的像素列中所储存黑色像素数量为1000个。根据记录影像中黑色像素的数量,可得知影像文件中字符的分布位置以及其边界。于本发明的一实施例中,考虑旧有书籍上或出现污渍等干扰(noises), 可于进行该黑色像素数量记录之前,先行对文件进行一前置处理,将该干扰减小,使其不致影响正确字符的读取。接着,为将影像文件切割为多个文字列,必须找出每一字符串的上下边界。依序考虑影像中的每一个像素列的BR(i)值(步骤221),如其中一像素列的BR(i)值为零(亦即为BR(i)阵列均为空白,以下称此情况为零元素),且其下一个像素列的值BR(i+l)大于零 (步骤22 ,意即表示索引号(i+Ι)的像素列是于全白像素列后所紧接着的第一个黑色像素列,因此可将该像素列视为第j个字符串的起始边界,并将该像素列的信息记录为上边界U(j)(步骤224);其中j为一个字符串的索引号。但是,如未能满足步骤222的条件,则继续进行下一个像素列的确认(步骤22 。此外,如一影像文本文件已经过步骤11的黑白二元图转换且经前置去干扰处理,于步骤222中,可考虑将找出BR矩阵于零元素之后大于零的元素,简化为找出BR矩阵于零元素之后的非零元素。在找到第j个字符串的上边界后,可以相似的方式寻找该字符串的下边界依序考虑找到上边界后影像中每一个像素列的BR(i)值(步骤231),如其中一像素列的BR(i) 值大于零,且下一个像素列的值BR(i+l)恰为零(步骤232),则代表索引号(i+Ι)像素列为于黑色像素列后所紧接着的第一个全白像素列(零元素),因此可将该像素列视为第j个字符串的结束边界,并将该像素列的信息记录为下边界L(j)(步骤234)。但是,如未能满足步骤232的条件,则继续进行下一个像素列的确认(步骤233)。之后考虑所有的像素列, 直到文件末(步骤对),结束每一个字符串上下边界的确认(步骤25)。相似于找出上边界的程序,如一影像文本文件已经过步骤11的黑白二元图转换且经前置去干扰处理,于步骤 232中,可考虑将找出BR矩阵于大于零元素之后的零元素,简化为找出BR矩阵于非零元素之后的零元素。为了应对影像文件中的污渍等干扰问题,亦可将上述条件放宽,以设定一临界值 (thresholcOk,于决定像素列的上下边界时,如BR(i) < k即可视为是不含文字的全白像素列,而无须限定必须为零元素(亦即BR(i) =0)。对于第二方向的切割,可以一相似于前面公开的图2中第一方向的切割进行对于每一个字符串影像,依序记录该字符串每一栏(column)的黑色像素至一阵列,表示为黑色像素栏阵列BC(m),其中m为一字符串的栏索引号。依阅读顺序考虑m,假设一字符串的字符阅读顺序为由左至右,于m满足BC(m) =0且BC(m+l) > 0,则可找出一字符的左边界 L ;考虑该字符右侧影像η > m,其中η亦为该字符串的栏索引号,如η满足BC(η) > 0且 BC(n+l) = 0,则可找出该字符的右边界R。配合前述文字列的上下边界,则可定义并切割出一独立字符。考虑某些特殊字符情况,本发明可加入某些后置处理,以校正误差切割,使输出结果正确。例如于输出某些合并区块文字,例如“北”,因“北”字符中央空白的部分可能产生分割误差的情况,因此于本发明的一实施例中,可设定一合并系数,进行该些特殊字符的合并调整。举例说明,于字符切割后,如某一字符的左右边界为L、R,而上下边界为U、L,且(R-L) < aX (L-U),亦即该分割字符的左右宽度较上下高度的一比例为小;其中a为一合并系数, 例如3/4。而该字符的下一个字符,其左右边界为L’、R’和上下边界为U’、L’,且(R’ -L') <a X (L’-U’),亦即该字符的下一字符的左右宽度亦较上下高度的比例为小。换言之,如前后两字符的左右宽度皆较上下高度某一比例为小,则可考虑将前后两个字符合并输出。于本发明的步骤4,将影像切割为独立字符后,须考虑并记录字符阅读顺序以及原始的段落信息,以期于步骤5的“活字排版”中,重新将字符阅读顺序以及分段信息保留呈现。一般而言,一个新的段落的出现,举例说明,可能与下列情况相关(a) —个字符串与前一个字符串的间距较大;(b) —个字符串的起始包括空白缩排;或者(c) 一个字符串的结尾包括空白等,但不以所举例者为限。于(a)的情况中,本发明可判读下一个字符串的上边界U(i+1)与其上一个字符串的下边界L(i)的差值是否大于一定限(thresholcOtl,表示为U(i+1)-L(i) >11,其中11 可设定一定值,例如为一出现频率最高的字符串的影像高度。换言之,亦即如一个字符串与前一个字符串的间距大于出现频率最高的字符串的影像高度,则将两个字符串视为属于两个段落,并且于两个字符串中输出一段落符号。或者,可选择于(b)的情况中输出分段数据于第i个字符串中找出第一个出现的字符,亦即首先出现黑色像素使BC(m) > 0者,设定一空白定限12,如!11> t2X(L(i)-U(i)),亦即该字符串开始的空白大于该字符串影像高度的t2倍,则可考虑输出一段落符号。或者,可选择于(C)的情况中输出分段数据首先找到第i个字符串的结尾,亦即 BC(η) >0且BC(n+l) = 0者,并定义一末尾定限t3。如影像宽度Wl (由图1的步骤1中所得)减去字符串中字符的部分,亦即一个字符串中末尾空白的部分,如该部分大于字符串影像高度的t3倍,表示为Wl-m >t3X(L(i) -U(i)),则可考虑输出一段落符号。至此,本发明已将一影像文本文件切割为多个独立字符,并储存所需的阅读顺序、 边界信息、以及段落信息等,以供步骤5的活字排版使用。图3显示了本发明将影像文本文件切割为独立字符后,重新排版于一阅读界面的一实施例的流程图,其为图1中步骤5的子步骤。首先,为使本发明可根据不同载具的阅读界面尺寸而自动排版换行,必须先取得该阅读界面的宽度w和高度h(步骤51),以及一显示缓冲区(display buffer)的宽度w和高度H ;其中,该载具阅读界面的宽度是指手持阅读状态时的宽度,而显示缓冲区是指其滚动条(scroll)作用下(enable)的显示随机存取存储器(RAM)尺寸。此处,为方便说明,假定载具阅读界面的宽度与显示缓冲区的宽度一致, 同为ι此外,载具的阅读界面尺寸亦可于使用者变更其设定后立刻取得并更新。于取得载具阅读界面以及显示缓冲区的宽度以及高度后(步骤51),须将欲显示的影像数据写入显示缓冲区(步骤52,连接至图4),之后打印至显示缓冲区(步骤53,连接至图幻,并更新影像显示的范围(步骤M)。接着,确认是否所有的数据皆已经完成显示或者接收到终止指示(步骤55),如是,则结束排版显示程序(步骤56);如否,则须确认改变后的影像显示范围是否超出显示缓冲区(步骤57)。如改变后的影像显示范围已超过显示缓冲区,表示显示缓冲区中所储存的数据已不足提供并显示于阅读界面的一完整页面,因此必重新回到步骤52,继续将数据写入缓冲区,以供显示,并形成一回路,直到所有数据已显示或需要终止(步骤54),则停止(步骤55)。接续至图4,于步骤52中,本发明将分割后的字符影像数据依序写入显示缓冲区。 请参考图4,其显示了步骤52所包括的子步骤的一实施例的流程图。于步骤51之后,首先依序取得目前须显示的字符影像数据(步骤521),将该字符影像数据以A表示。由一原始页面的起始影像开始,将该字符影像数据A初始为第一个须写入的影像数据。此处,为简化说明,图4以横向排版为范例,但实际上并不以此为限制。于取得显示字符影像A(步骤521)后,确认目前的写入是否须分段(步骤522)。 如须分段,则于显示影像A之前必须先分段换行(步骤523)。如无须换行,则须确认于缓冲区的同一行空间是否有足够宽度再写入字符影像数据A(步骤524),如无空间亦必须换行(步骤523)。反之,如缓冲区的宽度足够写入字符影像数据A,则直接由原来已写入的初始影像旁继续写入非分段的影像数据A (步骤52 ,再重新回到步骤521,以形成一个回路 (loop)。如于步骤522的确认后,须分段或缓冲区宽度不足而须换行,则于换行(步骤523) 后,确认显示区高度于写入影像A后是否将大于缓冲区的容许高度H(步骤526),其中,显示缓冲区高度H为于步骤51中取得。如写入影像A后的缓冲区高度小于缓冲区的容许高度 H,则代表可继续写入,因此可至步骤525继续写入。否则,代表显示缓冲区的空间已不足继续写入,必须停止目前的写入动作,并记录目前的字符影像A(步骤527),使下一次的写入动作可由该字符影像A起始。于步骤527之后,接续步骤53 打印缓冲区的数据。请参考图5,其显示步骤53所包括的子步骤的一实施例的流程图。于完成显示缓冲区的写入后(步骤52),须确认目前于显示缓冲区的数据高度是否与阅读界面同一高度(步骤531)。如两者同高度,则可直接于阅读界面上打印出缓冲区范围内的数据(步骤 532)。否则,则必须进一步确认缓冲区的数据是否已经到底(步骤533),并且根据阅读界面以及缓冲区的尺寸关系,决定缓冲区的打印范围。如缓冲区的数据已经到底部,如图6A所显示,假设上一次显示高度范围至y位置(如图6A中的点状区域所显示),缓冲区的高度为 H(如图6A中的点状区域加上白色区域所显示),而阅读界面的高度为h (如图6A中的白色区域加上斜线区域所显示),则阅读界面可显示的高度h大于本次需要的显示高度(H-y), 表示为h>H-y,换言之,亦即数据显示已经到底,因此,本次打印的缓冲区范围为由(0,y)、 (w,y)、(0,H)以及(w,H)四个坐标点所定义的区域(步骤534),该些坐标点的位置是相对于图6A中所显示的坐标轴X与Y。如缓冲区的数据尚未到达底部,如图6B所显示,如缓冲区的高度为H(如图6B中的点状区域加上白色区域和斜线区域),因缓冲区的数据尚未到底,亦即缓冲区高度H将大于已显示区域高度y加上阅读界面的高度h,表示H > y+h,则本次打印的缓冲区范围为该阅读界面范围(如第六B图中白色区域所显示),亦即由(0,y)、(w,y), (0,y+h)以及(w, y+h)四个坐标点所定义的区域(步骤53 。在打印出缓冲显示区后,紧接着更新影像显示的范围(步骤M)。于本发明中,更新影像显示的方式并未限定,其可使用上下滚动条的滚动或是触动“下一页(next page), (page down) ”的功能,并且根据以上所选择的方式更新影像的显示范围。以滚动条为例说明,于滚动下滚动条下,假定每一次滚动使阅读界面往下移动d范围,如阅读界面的起始坐标为(0,y),则改变影像显示后阅读界面的起始坐标往下更新为 (0,y+d)。本发明的影像文本文件的活字排版方法包括“文字切割”以及“活字排版”两个主要程序。于“文字切割”程序,本发明将影像文本文件切割为多个独立字符,并将每一该些字符以影像格式加以储存。在后面的“活字排版”程序中,本发明以此字符为单位,针对该些切割后的字符进行活字排版,因此,可针对不同尺寸的阅读界面进行排版并自动换行,以实现快速且方便阅读的显示。对于本领域的技术人员,受惠于前述说明以及相关附图的教导,于不脱离本发明的精神以及范围内,应可推得本发明各种实质上相等的变更以及其它具体实施例。因此,本发明应不受限于前面公开的特定实施例,并应将该等实质上相等的变更以及其它具体实施例纳入所附的权利要求书的范围内。
权利要求
1.一种影像文本文件的活字排版方法,其步骤包括(a)对一影像文本文件进行第一方向的切割,使所述影像文本文件形成多个字符串影像;(b)对每一所述字符串影像进行第二方向的切割,使所述影像文本文件形成多个独立字符影像;(c)基于一阅读界面,依照阅读顺序,将所述这些独立字符影像进行排版,使排版版面能够根据所述阅读界面的尺寸而自动换行。
2.根据权利要求1所述的影像文本文件的活字排版方法,在(a)步骤前还包括一步骤 (a0)将所述影像文本文件转为黑白二元图。
3.根据权利要求2所述的影像文本文件的活字排版方法,其中,所述第一方向为横向, 且第二方向为竖向。
4.根据权利要求3所述的影像文本文件的活字排版方法,其中,所述(a)步骤包括 (al)将所述影像文本文件中每一像素列的黑色像素数量储存至一黑色像素列阵列; (a2)以所述黑色像素列阵列中零元素和非零元素为交界,找出每一所述字符串的上下边界,借以进行所述第一方向的切割。
5.根据权利要求3所述的影像文本文件的活字排版方法,其中,所述(b)步骤包括 (bl)将每一字符串中每一像素栏的黑色像素数量储存至一黑色像素栏阵列;(b2)以所述黑色像素栏阵列中零元素和非零元素为交界,找出所述字符串中每一字符的左右边界,借以进行所述第二方向的切割。
6.根据权利要求4所述的影像文本文件的活字排版方法,其中,于(^)步骤和(b)步骤之间,还包括一步骤(M)如所述这些字符串影像的其中一字符串影像的上边界与其前一字符串影像的下边界的间距大于一定限,则于所述两字符串之间记录一分段信息。
7.根据权利要求1所述的影像文本文件的活字排版方法,其中,所述(c)步骤包括 (cl)取得所述阅读界面的宽度和高度以及一显示缓冲区可写入的宽度和高度;(c2)根据所述显示缓冲区的宽度和高度,将影像文本文件切割后的每一所述字符影像写入所述显示缓冲区;(c3)根据所述阅读界面的宽度和高度,打印所述显示缓冲区至阅读界面;(c4)更新阅读界面的影像显示范围;(c5)重复(cl)至(c4)步骤直到一结束指示输入。
8.根据权利要求7所述的影像文本文件的活字排版方法,其中,于所述(U)步骤中,如同一行中已写入缓冲区的影像宽度加上其中一字符的宽度大于所述阅读界面宽度,则于下一行写入所述字符影像。
9.根据权利要求7所述的影像文本文件的活字排版方法,其中,于(c2)步骤中,如已写入缓冲区的字符影像高度加上所述字符的高度大于缓冲区高度,则停止写入,并进入步骤 (c3)。
10.根据权利要求7所述的影像文本文件的活字排版方法,其中,于所述(c4)步骤中, 更新影像显示范围的方式可为上下滚动滚动条或触动上下页面功能。
全文摘要
本发明提供了一种影像文本文件的活字排版方法,其步骤包括根据阅读顺序,将影像文本文件进行第一方向的切割,使该文本文件形成多个字符串影像;将每一字符串进行第二方向的切割,使最终该影像文本文件形成多个独立的字符影像;根据阅读界面的尺寸,将该些字符重新排版而使其可自动换行,借以解决一般影像文本文件无法根据不同阅读界面的尺寸而自动排版换行的问题。
文档编号G06F17/21GK102243621SQ20101017827
公开日2011年11月16日 申请日期2010年5月11日 优先权日2010年5月11日
发明者项洁 申请人:项洁
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1