亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

文本排版方法及排版引擎的制作方法

文檔序號(hào):6358176閱讀:394來(lái)源:國(guó)知局
專利名稱:文本排版方法及排版引擎的制作方法
技術(shù)領(lǐng)域
本發(fā)明實(shí)施例涉及計(jì)算機(jī)技術(shù),尤其涉及一種文本排版方法及排版弓I擎。
背景技術(shù)
EPub是一種開(kāi)放式的電子書(shū)格式標(biāo)準(zhǔn),能支持多種裝置應(yīng)用,可以“自動(dòng)重新編 排”的內(nèi)容。Epub電子書(shū)的關(guān)鍵技術(shù)之一是排版技術(shù),其排版的速度直接關(guān)系到使用者的 體驗(yàn),特別是對(duì)于章節(jié)很長(zhǎng)的Epub電子書(shū),如果排版時(shí)間很長(zhǎng)會(huì)造成用戶承受不了長(zhǎng)時(shí)間 的等待,從而決定放棄閱讀。因此,實(shí)現(xiàn)一種高性能的排版系統(tǒng)對(duì)于提升Epub電子書(shū)的閱 讀體驗(yàn)是至關(guān)重要的。由于目前Epub電子書(shū)中的內(nèi)容95%以上是文本,提高文本排版算法 的性能就成為提高整個(gè)Epub電子書(shū)展現(xiàn)性能的關(guān)鍵技術(shù)。絕大多數(shù)軟件的文字排版引擎對(duì)一段文本T進(jìn)行排版時(shí),先將文本T輸出給操 作系統(tǒng)提供的文本寬度計(jì)算函數(shù),根據(jù)操作系統(tǒng)提供的文本寬度計(jì)算函數(shù)計(jì)算出的文 本寬度,對(duì)文本T進(jìn)行斷行。例如Windows平臺(tái)提供了用于文本寬度計(jì)算的API函數(shù) GetTextExtentPoint, Android 平臺(tái)提供了函數(shù) Paint. measureText,在其它帶有 GUI 庫(kù)的 操作系統(tǒng),都有對(duì)應(yīng)的文本寬度計(jì)算函數(shù)。各操作系統(tǒng)提供的文本寬度計(jì)算函數(shù)功能強(qiáng)大, 可適應(yīng)各種字體,目前大多數(shù)Epub書(shū)閱讀軟件在排版時(shí)都會(huì)頻繁調(diào)用操作系統(tǒng)提供的文 本寬度計(jì)算函數(shù)。然而,采用操作系統(tǒng)提供的文本寬度計(jì)算函數(shù)需依賴于構(gòu)建在驅(qū)動(dòng)一級(jí)的GUI 庫(kù),而Epub電子書(shū)閱讀軟件是構(gòu)建在用戶層的,每調(diào)用一次GUI庫(kù)提供的文本尺寸計(jì)算函 數(shù)相當(dāng)于一次系統(tǒng)調(diào)用。而調(diào)用文本尺寸計(jì)算函數(shù)在整個(gè)Epub電子書(shū)的文字排版過(guò)程是 非常頻繁的,這些頻繁的系統(tǒng)調(diào)用嚴(yán)重影響了排版性能。

發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種文本排版方法及排版引擎,用以解決文本排版過(guò)程中需頻 繁調(diào)用系統(tǒng)提供的文本寬度計(jì)算函數(shù)的缺陷,有效提高了電子書(shū)閱讀過(guò)程中的排版性能。本發(fā)明實(shí)施例提供一種文本排版方法,包括獲取解析后的文本后,排版引擎從所述文本中逐個(gè)讀取字符;在所述字符為方塊字符時(shí),根據(jù)所述字符所屬的語(yǔ)種和字號(hào)在方塊字符寬度表中 查找所述字符的字符寬度;在所述字符為非方塊字符時(shí),根據(jù)所述字符的字體,在非方塊字 符寬度表中查找所述字符的字符寬度;所述排版引擎根據(jù)文本顯示區(qū)的寬度、所述文本中非方塊字符的字符寬度和所述 文本中方塊字符的字符寬度,對(duì)所述文本進(jìn)行斷行;調(diào)用操作系統(tǒng)提供的文本輸出函數(shù)在所述文本顯示區(qū)輸出斷行后的所述文本。本發(fā)明實(shí)施例提供一種排版引擎,包括讀取模塊,用于獲取解析后的文本后,排版引擎從所述文本中逐個(gè)讀取字符;寬度確定模塊,用于在所述字符為方塊字符時(shí),根據(jù)所述字符所屬的語(yǔ)種和字號(hào)在方塊字符寬度表中查找所述字符的字符寬度;在所述字符為非方塊字符時(shí),根據(jù)所述字 符的字體,在非方塊字符寬度表中查找所述字符的字符寬度;斷行模塊,用于所述排版引擎根據(jù)文本顯示區(qū)的寬度、所述文本中非方塊字符的 字符寬度和所述文本中方塊字符的字符寬度,對(duì)所述文本進(jìn)行斷行;輸出調(diào)用模塊,用于調(diào)用操作系統(tǒng)提供的文本輸出函數(shù)在所述文本顯示區(qū)輸出斷 行后的所述文本。本發(fā)明實(shí)施例的文本排版方法及排版引擎,排版引擎逐個(gè)從文本中讀取字符,并 通過(guò)查找方塊字符寬度表或非方塊字符寬度表獲取當(dāng)前讀取字符的字符寬度。同一語(yǔ)種的 所有方塊字符在同一字號(hào)的字符寬度均相同,因此,對(duì)于方塊字符,排版引擎根據(jù)語(yǔ)種和字 號(hào)在方塊字符表中查找方塊字符的字符寬度。對(duì)于非方塊字符,排版引擎根據(jù)非方塊字符 的字體在非方塊字符寬度表中,查找非方塊字符的字符寬度。由于本發(fā)明實(shí)施例排版引擎 查找方塊字符寬度表或非方塊字符寬度表獲取當(dāng)前讀取字符的字符寬度,因此排版引擎在 用戶層完成了字符寬度的計(jì)算,不需要調(diào)用系統(tǒng)提供的文本寬度計(jì)算函數(shù),節(jié)省了系統(tǒng)開(kāi) 銷,提高了排版性能。


為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā) 明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明提供的文本排版方法實(shí)施例一流程圖;圖2A為本發(fā)明提供的文本排版方法中一種獲取方塊字符的字符寬度方法流程 圖;圖2B為本發(fā)明提供的文本排版方法中一種獲取非方塊字符的字符寬度方法流程 圖;圖3為本發(fā)明提供的文本排版方法實(shí)施例三流程圖;圖4為本發(fā)明提供的文本排版方法實(shí)施例四流程圖;圖5為本發(fā)明提供的電子書(shū)排版引擎實(shí)施例一結(jié)構(gòu)示意圖;圖6為圖5中寬度確定模塊結(jié)構(gòu)示意圖;圖7為圖6中方塊字符寬度查找單元的結(jié)構(gòu)示意圖;圖8為圖6中方塊字符寬度查找單元的結(jié)構(gòu)示意圖;圖9為圖5或圖6中斷行模塊的結(jié)構(gòu)示意圖;圖10為本發(fā)明提供的文本排版引擎實(shí)施例二結(jié)構(gòu)示意圖。
具體實(shí)施例方式為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例 中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是 本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員 在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明提供的文本排版方法實(shí)施例一流程圖。如圖1所示,本實(shí)施例包括步驟11 獲取解析后的電子書(shū)文件中文本后,排版引擎從文本中逐個(gè)讀取字符。電子書(shū)閱讀軟件中的排版引擎進(jìn)行排版前,電子書(shū)文件需依次經(jīng)過(guò)解壓、格式解 析和描述語(yǔ)種解析。例如,Epuh電子書(shū)文件的壓縮包依次經(jīng)解壓、Epuh格式解析和HTML解 析。電子書(shū)閱讀軟件中的排版引擎開(kāi)始對(duì)HTML解析后的文本進(jìn)行排版時(shí),先對(duì)HTML解析 后的文本進(jìn)行字體、字號(hào)和字形設(shè)置。步驟12 在字符為方塊字符時(shí),排版引擎根據(jù)字符所屬的語(yǔ)種和字號(hào)在方塊字符 寬度表中查找當(dāng)前讀取字符的字符寬度;在字符為非方塊字符時(shí),排版引擎根據(jù)字符的字 體,在非方塊字符寬度表中查找當(dāng)前讀取字符的字符寬度。對(duì)于中文字符、日文字符和韓文字符等方塊字符,屬于同一語(yǔ)種的所有方塊字符 的字符寬度,在同一字號(hào)的所有字體下是等寬的。同一語(yǔ)種下,不同字號(hào)的方塊字符的字符 寬度成等比例關(guān)系。同一字號(hào)下,不同語(yǔ)種的方塊字符的字符寬度不相同。即方塊字符的 字符寬度與所屬的語(yǔ)種和字號(hào)有關(guān),與字符和字體無(wú)關(guān)。對(duì)于各種字體的所有中文字符,在 同一字號(hào)下的字符寬度均相同。例如宋體、楷體、隸書(shū)、方正姚體等中文字符的字符寬度均 相同。而同一字號(hào)下,中文字符與日文字符或韓文字符的字符寬度不相同。因此,針對(duì)方塊 字符,可建立包括“方塊字符、所屬語(yǔ)種、字形,與字號(hào)為基準(zhǔn)字號(hào)的非方塊字符的字符寬度 的對(duì)應(yīng)關(guān)系”的方塊字符寬度表。在確定一個(gè)方塊字會(huì)的字符寬度時(shí),根據(jù)所屬的語(yǔ)種和字 號(hào),在方塊字符寬度表中查找該方塊字符的字符寬度。對(duì)于各種標(biāo)點(diǎn)符號(hào)、拉丁字母、數(shù)學(xué)運(yùn)算符號(hào)等除方塊字符以外的非方塊字符,在 同一字體下,同一種語(yǔ)種的不同非方塊字符,它們的字符寬度不相同。例如,字符i和字符 w,在同一種字體下,字符w的字符寬度大于字符i的字符寬度。對(duì)于同一個(gè)非方塊字符,在 字號(hào)不相同或字體不相同的情況下,字符寬度也不相同。但在同一字體下,對(duì)于不同字號(hào)的 同一非方塊字符,字符寬度成等比例關(guān)系。例如,不同字體或不同字號(hào)的字符i,其字符寬度 互不相同。但對(duì)于同一字體,字號(hào)為10號(hào)的字符i的字符寬度,與其它字號(hào)的字符i的字 符寬度成等比例關(guān)系。因此,對(duì)于非方塊字符的字符寬度,不僅與所屬的語(yǔ)種和字號(hào)有關(guān), 而且與字體和字符相關(guān)。因此,針對(duì)非方塊字符可建立包括“非方塊字符、非方塊字符的字 體,與字號(hào)為基準(zhǔn)字號(hào)的非方塊字符的字符寬度的對(duì)應(yīng)關(guān)系”的非方塊字符寬度表。在確定 一個(gè)非方塊字符的字符寬度時(shí),根據(jù)字符的字體,在非方塊字符寬度表中查找字符的字符 寬度。步驟13 排版引擎根據(jù)文本顯示區(qū)的寬度、文本中非方塊字符的字符寬度和文本 中方塊字符的字符寬度,對(duì)文本進(jìn)行斷行。具體的排版引擎將當(dāng)前讀取字符的字符寬度逐個(gè)累加至寬度統(tǒng)計(jì)值;寬度統(tǒng)計(jì) 值的初始值為零。當(dāng)寬度統(tǒng)計(jì)值小于文本顯示區(qū)的寬度時(shí),排版引擎繼續(xù)讀取從文本中讀 取下一個(gè)字符,確定下一個(gè)字符的字符寬度并累計(jì)至寬度統(tǒng)計(jì)值中,直至寬度統(tǒng)計(jì)值小于 文本顯示區(qū)的寬度大于或等于文本顯示區(qū)的寬度。寬度統(tǒng)計(jì)值小于文本顯示區(qū)的寬度時(shí), 表明在文本顯示區(qū)的當(dāng)前行還有多余的空間容納字符,因此排版引擎確定讀取從文本中下 一個(gè)字符,重復(fù)讀取過(guò)程,直至寬度統(tǒng)計(jì)值大于或等于文本顯示區(qū)的寬度。當(dāng)寬度統(tǒng)計(jì)值等于文本顯示區(qū)的寬度時(shí),排版引擎在字符之后將文本斷7行;寬 度統(tǒng)計(jì)值大于文本顯示區(qū)的寬度時(shí),排版引擎在字符之前將文本斷行。
寬度統(tǒng)計(jì)值等于文本顯示區(qū)的寬度時(shí),表明若在文本顯示區(qū)的一行增加中“從讀 取第一個(gè)字符(或從上一次斷行)開(kāi)始到當(dāng)前讀取的字符為止”排版引擎所讀取的所有字 符后,恰好到達(dá)文本顯示區(qū)的頁(yè)邊界,因此,排版引擎在當(dāng)前讀取字符之后(即當(dāng)前讀取字 符的下一字符之前)將文本斷行。寬度統(tǒng)計(jì)值大于文本顯示區(qū)的寬度時(shí),表明若在文本顯示區(qū)的一行增加中“從讀 取第一個(gè)字符(或從上一次斷行)開(kāi)始到當(dāng)前讀取的字符為止”排版引擎所讀取的所有字 符后,會(huì)超出文本顯示區(qū)的頁(yè)邊界。因此,排版引擎在當(dāng)前讀取字符之前(即當(dāng)前讀取字符 的上一字符之后)將文本斷行。在進(jìn)行文本斷行后,排版引擎將寬度統(tǒng)計(jì)值清零,繼續(xù)從剩余文本中逐個(gè)讀取字 符,將字符的字符寬度累加至寬度統(tǒng)計(jì)值,并根據(jù)寬度統(tǒng)計(jì)值和文本顯示區(qū)的寬度對(duì)剩余 文本進(jìn)行斷行,直至讀取到的字符為空。步驟14 排版引擎調(diào)用操作系統(tǒng)提供的文本輸出函數(shù)在文本顯示區(qū)輸出斷行后 的文本。將整個(gè)文本斷行后,調(diào)用操作系統(tǒng)提供的文本輸出函數(shù)在文本顯示區(qū)輸出斷行后 的文本。電子閱讀軟件在第一次打開(kāi)文本時(shí),調(diào)用排版引擎利用上述方法對(duì)解析后的文本 進(jìn)行排版,可將排版后的文本存儲(chǔ)以便在下一次打開(kāi)文本時(shí),直接顯示排版后的文本;也可 以不存儲(chǔ)排版后的文本,每次打開(kāi)時(shí)調(diào)用排版引擎通過(guò)上述方法重新對(duì)文本進(jìn)行排版。進(jìn) 一步,在電子設(shè)備上顯示排版后的文本時(shí),如果用戶在使用過(guò)程中變化設(shè)備顯示屏的使用 方向(例如將設(shè)備顯示屏由橫向顯示變化為豎向顯示)會(huì)導(dǎo)致顯示區(qū)的寬度發(fā)生變化,可 在第一次變化設(shè)備顯示屏的顯示方向時(shí),調(diào)用排版引擎利用上述方法對(duì)解析后的文本進(jìn)行 重新排版并將排版后的文本存儲(chǔ),以便在下一次顯示屏顯示方向發(fā)生同樣變化時(shí),直接顯 示排版后的文本。本發(fā)明實(shí)施例,排版引擎逐個(gè)從文本中讀取字符,并通過(guò)查找方塊字符寬度表或 非方塊字符寬度表獲取當(dāng)前讀取字符的字符寬度。同一語(yǔ)種的所有方塊字符在同一字號(hào)的 字符寬度均相同,因此,對(duì)于方塊字符,排版引擎根據(jù)語(yǔ)種和字號(hào)在方塊字符表中查找方塊 字符的字符寬度。對(duì)于非方塊字符,排版引擎根據(jù)非方塊字符的字體在非方塊字符寬度表 中,查找非方塊字符的字符寬度。由于本發(fā)明實(shí)施例排版引擎查找方塊字符寬度表或非方 塊字符寬度表獲取當(dāng)前讀取字符的字符寬度,因此排版引擎在用戶層完成了字符寬度的計(jì) 算,不需要調(diào)用系統(tǒng)提供的文本寬度計(jì)算函數(shù),節(jié)省了系統(tǒng)開(kāi)銷,提高了排版性能。通常情況下,字形包括常規(guī)字形、加粗字形、傾斜字形和加粗傾斜字形。其中,加粗 字形、傾斜字形和加粗傾斜字形,稱為變形字體。一個(gè)方塊字符在字體和字號(hào)相同的情況 下,字形不相同時(shí)字符寬度不相同。即方塊字符的各種字形的字符寬度互不相同。一個(gè)非 方塊字符在字體和字號(hào)相同的情況下,字形不相同時(shí)字符寬度也不相同。圖2A為本發(fā)明提供的文本排版方法中一種獲取方塊字符的字符寬度方法流程 圖。針對(duì)方塊字符本發(fā)明實(shí)施例建立了方塊字符寬度表,考慮到變形字體時(shí),方塊字符寬度 表中包括方塊字符、所屬語(yǔ)種、字形,與字號(hào)為基準(zhǔn)字號(hào)的非方塊字符的字符寬度的對(duì)應(yīng)關(guān) 系。如表1所示,例如,中文字符在基準(zhǔn)字號(hào)下的正常字形的字符寬度對(duì)應(yīng)一表項(xiàng),其它三 種變形體也各對(duì)應(yīng)一表項(xiàng)。日文字符在在基準(zhǔn)字號(hào)下的正常字形的字符寬度對(duì)應(yīng)一表項(xiàng),其它三種變形體各對(duì)應(yīng)一表項(xiàng)。表1為一種方塊字符寬度表
權(quán)利要求
1.一種文本排版方法,其特征在于,包括獲取解析后的文本后,排版引擎從所述文本中逐個(gè)讀取字符; 在所述字符為方塊字符時(shí),根據(jù)所述字符所屬的語(yǔ)種和字號(hào)在方塊字符寬度表中查找 所述字符的字符寬度;在所述字符為非方塊字符時(shí),根據(jù)所述字符的字體,在非方塊字符寬 度表中查找所述字符的字符寬度;所述排版引擎根據(jù)文本顯示區(qū)的寬度、所述文本中非方塊字符的字符寬度和所述文本 中方塊字符的字符寬度,對(duì)所述文本進(jìn)行斷行;調(diào)用操作系統(tǒng)提供的文本輸出函數(shù)在所述文本顯示區(qū)輸出斷行后的所述文本。
2.根據(jù)權(quán)利要求1所述文本排版方法,其特征在于,所述排版引擎根據(jù)文本顯示區(qū)的 寬度、所述文本中非方塊字符的字符寬度和所述文本中方塊字符的字符寬度,對(duì)所述文本 進(jìn)行斷行,包括排版引擎將所述字符的字符寬度逐個(gè)累加至寬度統(tǒng)計(jì)值;所述寬度統(tǒng)計(jì)值的初始值為零;所述寬度統(tǒng)計(jì)值小于文本所述顯示區(qū)的寬度時(shí),繼續(xù)從文本中讀取下一個(gè)字符,確定 所述下一個(gè)字符的字符寬度并累計(jì)至所述寬度統(tǒng)計(jì)值中,直至所述寬度統(tǒng)計(jì)值大于或等于 所述文本顯示區(qū)的寬度;所述寬度統(tǒng)計(jì)值等于所述文本顯示區(qū)的寬度時(shí),在所述字符之后將文本斷行;所述寬 度統(tǒng)計(jì)值大于所述文本顯示區(qū)的寬度時(shí),在所述字符之前將文本斷行;在文本斷行后,將所述寬度統(tǒng)計(jì)值清零,繼續(xù)從剩余文本中逐個(gè)讀取字符,將所述字符 的字符寬度逐個(gè)累加至寬度統(tǒng)計(jì)值,并根據(jù)所述寬度統(tǒng)計(jì)值和所述文本顯示區(qū)的寬度對(duì)剩 余文本進(jìn)行斷行,直至讀取到的字符為空。
3.根據(jù)權(quán)利要求1或2所述文本排版方法,其特征在于,在所述字符為方塊字符時(shí),根 據(jù)所述字符所屬的語(yǔ)種和字號(hào)在方塊字符寬度表中查找所述字符的字符寬度,包括根據(jù)所述字符所屬的語(yǔ)種和字形,在方塊字符寬度表中查找字號(hào)為基準(zhǔn)字號(hào)的所述字 符所對(duì)應(yīng)的字符寬度;所述方塊字符寬度表中包括方塊字符、所述方塊字符所屬語(yǔ)種和所 述方塊字符字形,與所述方塊字符的字號(hào)為基準(zhǔn)字號(hào)時(shí)的字符寬度的對(duì)應(yīng)關(guān)系;在所述字符的字號(hào)與所述基準(zhǔn)字號(hào)相同時(shí),將查找到的字符寬度確定為所述字符的字 符寬度;在所述字符的字號(hào)與所述基準(zhǔn)字號(hào)不相同時(shí),根據(jù)所述基準(zhǔn)字號(hào)和所述文本中方塊字 符的字號(hào),將查找到的字符寬度進(jìn)行等比例縮放,得到所述字符對(duì)應(yīng)的字符寬度。
4.根據(jù)權(quán)利要求1或2所述文本排版方法,其特征在于,在所述字符為非方塊字符時(shí), 根據(jù)所述字符的字體,在非方塊字符寬度表中查找所述字符的字符寬度,包括根據(jù)所述字符的字體,在非方塊字符寬度表中查找字號(hào)為基準(zhǔn)字號(hào)的所述字符所對(duì)應(yīng) 的字符寬度;所述非方塊字符寬度表中包括所述非方塊字符和所述非方塊字符的字體,與 所述非方塊字符的字號(hào)為基準(zhǔn)字號(hào)時(shí)的字符寬度的對(duì)應(yīng)關(guān)系;在所述字符的字號(hào)與所述基準(zhǔn)字號(hào)相同時(shí),將查找到的字符寬度確定為所述字符的字 符寬度;在所述字符的字號(hào)與所述基準(zhǔn)字號(hào)不相同時(shí),根據(jù)所述基準(zhǔn)字號(hào)和所述字符的字號(hào), 將查找到的字符寬度進(jìn)行等比例縮放,得到所述字符對(duì)應(yīng)的字符寬度。
5.根據(jù)權(quán)利要求1或2所述文本排版方法,其特征在于,在所述字符為非方塊字符時(shí), 根據(jù)所述字符的字體,在非方塊字符寬度表中查找所述字符的字符寬度,包括根據(jù)所述字符的字體和字形,在所述非方塊字符寬度表中查找所述字符的基準(zhǔn)字號(hào) 所對(duì)應(yīng)的字符寬度;所述非方塊字符寬度表中包括所述非方塊字符、所述非方塊字符的字 形和所述非方塊字符的字體,與所述非方塊字符的字號(hào)為基準(zhǔn)字號(hào)時(shí)的字符寬度的對(duì)應(yīng)關(guān) 系;所述字形包括常規(guī)字形、粗體和變形體;在所述字符的字號(hào)與所述基準(zhǔn)字號(hào)相同時(shí),將查找到的字符寬度確定為所述字符的字 符寬度;在所述字符的字號(hào)與所述基準(zhǔn)字號(hào)不相同時(shí),根據(jù)所述基準(zhǔn)字號(hào)和所述字符的字號(hào), 將查找到的字符寬度進(jìn)行等比例縮放,得到所述字符對(duì)應(yīng)的字符寬度。
6.根據(jù)權(quán)利要求4所述文本排版方法,其特征在于,在所述獲取解析后的文本之前,還 包括從操作系統(tǒng)提供的字體庫(kù)中獲取不同字體且字號(hào)為基準(zhǔn)字號(hào)的非方塊字符; 調(diào)用系統(tǒng)提供的文本寬度計(jì)算函數(shù)計(jì)算所述非方塊字符的基準(zhǔn)字號(hào)所對(duì)應(yīng)的字符寬度;將所述非方塊字符、所述非方塊字符的字體與字號(hào)為所述基準(zhǔn)字號(hào)的非方塊字符對(duì)應(yīng) 字符寬度的對(duì)應(yīng)關(guān)系存入所述非方塊字符寬度表中。
7.一種排版引擎,其特征在于,包括讀取模塊,用于獲取解析后的文本后,排版引擎從所述文本中逐個(gè)讀取字符; 寬度確定模塊,用于在所述字符為方塊字符時(shí),根據(jù)所述字符所屬的語(yǔ)種和字號(hào)在方 塊字符寬度表中查找所述字符的字符寬度;在所述字符為非方塊字符時(shí),根據(jù)所述字符的 字體,在非方塊字符寬度表中查找所述字符的字符寬度;斷行模塊,用于所述排版引擎根據(jù)文本顯示區(qū)的寬度、所述文本中非方塊字符的字符 寬度和所述文本中方塊字符的字符寬度,對(duì)所述文本進(jìn)行斷行;輸出調(diào)用模塊,用于調(diào)用操作系統(tǒng)提供的文本輸出函數(shù)在所述文本顯示區(qū)輸出斷行后 的所述文本。
8.根據(jù)權(quán)利要求7所述排版引擎,其特征在于,所述斷行模塊包括累加單元,用于將所述字符的字符寬度累加至寬度統(tǒng)計(jì)值;所述寬度統(tǒng)計(jì)值的初始值 為零;判斷單元,用于所述寬度統(tǒng)計(jì)值小于文本所述顯示區(qū)的寬度時(shí),繼續(xù)從文本中讀取下 一個(gè)字符,確定所述下一個(gè)字符的字符寬度并累計(jì)至所述寬度統(tǒng)計(jì)值中,直至所述寬度統(tǒng) 計(jì)值大于或等于所述文本顯示區(qū)的寬度;斷行單元,用于所述寬度統(tǒng)計(jì)值等于所述文本顯示區(qū)的寬度時(shí),在所述字符之后將文 本斷行;所述寬度統(tǒng)計(jì)值大于所述文本顯示區(qū)的寬度時(shí),在所述字符之前將文本斷行;將 所述寬度統(tǒng)計(jì)值清零,繼續(xù)從剩余文本中逐個(gè)讀取一字符,將所述字符的字符寬度累加至 寬度統(tǒng)計(jì)值,并根據(jù)所述寬度統(tǒng)計(jì)值和所述文本顯示區(qū)的寬度對(duì)剩余文本進(jìn)行斷行,直至 讀取到的字符為空。
9.根據(jù)權(quán)利要求7或8所述排版引擎,其特征在于,所述寬度確定模塊包括 類型判斷單元,用于判斷所述字符是否方塊字符;方塊字符寬度查找單元,用于在所述字符為方塊字符時(shí),根據(jù)所述字符所屬的語(yǔ)種和 字號(hào)在方塊字符寬度表中查找所述字符的字符寬度;非方塊字符寬度查找單元,用于在所述字符為非方塊字符時(shí),根據(jù)所述字符的字體,在 非方塊字符寬度表中查找所述字符的字符寬度。
10.根據(jù)權(quán)利要求9所述排版引擎,其特征在于,所述方塊字符寬度查找單元包括第一查找子單元,用于根據(jù)所述字符所屬的語(yǔ)種和字形,在方塊字符寬度表中查找字 號(hào)為基準(zhǔn)字號(hào)的所述字符所對(duì)應(yīng)的字符寬度;所述方塊字符寬度表中包括方塊字符、所述 方塊字符所屬語(yǔ)種和所述方塊字符字形,與所述方塊字符的字號(hào)為基準(zhǔn)字號(hào)時(shí)的字符寬度 的對(duì)應(yīng)關(guān)系;第一確定子單元,用于在所述字符的字號(hào)與所述基準(zhǔn)字號(hào)相同時(shí),將查找到的字符寬 度確定為所述字符的字符寬度;第二確定子單元,用于在所述字符的字號(hào)與所述基準(zhǔn)字號(hào)不相同時(shí),根據(jù)所述基準(zhǔn)字 號(hào)和所述文本中方塊字符的字號(hào),將查找到的字符寬度進(jìn)行等比例縮放,得到所述字符對(duì) 應(yīng)的字符寬度。
11.根據(jù)權(quán)利要求9所述排版引擎,其特征在于,所述非方塊字符寬度查找單元包括第二查找子單元,用于根據(jù)所述字符的字體,在非方塊字符寬度表中查找字號(hào)為基準(zhǔn)字號(hào)的所述字符所對(duì)應(yīng)的字符寬度;所述非方塊字符寬度表中包括所述非方塊字符和所述 非方塊字符的字體,與所述非方塊字符的字號(hào)為基準(zhǔn)字號(hào)時(shí)的字符寬度的對(duì)應(yīng)關(guān)系;第三確定子單元,用于在所述字符的字號(hào)與所述基準(zhǔn)字號(hào)相同時(shí),將查找到的字符寬 度確定為所述字符的字符寬度;第四確定子單元,用于在所述字符的字號(hào)與所述基準(zhǔn)字號(hào)不相同時(shí),根據(jù)所述基準(zhǔn)字 號(hào)和所述字符的字號(hào),將查找到的字符寬度進(jìn)行等比例縮放,得到所述字符對(duì)應(yīng)的字符寬 度。
12.根據(jù)權(quán)利要求11所述排版引擎,其特征在于,所述第二查找子單元還用于根據(jù)所 述字符的字體和字形,在所述非方塊字符寬度表中查找所述字符的基準(zhǔn)字號(hào)所對(duì)應(yīng)的字符 寬度;所述非方塊字符寬度表中包括所述非方塊字符、所述非方塊字符的字形和所述非方 塊字符的字體,與所述非方塊字符的字號(hào)為基準(zhǔn)字號(hào)時(shí)的字符寬度的對(duì)應(yīng)關(guān)系;所述字形 包括常規(guī)字形、粗體和變形體。
13.根據(jù)權(quán)利要求12所述排版引擎,其特征在于,還包括字符獲取模塊,用于從操作系統(tǒng)提供的字體庫(kù)中獲取不同字體且字號(hào)為基準(zhǔn)字號(hào)的非 方塊字符;調(diào)用模塊,用于調(diào)用系統(tǒng)提供的文本寬度計(jì)算函數(shù)計(jì)算所述非方塊字符的基準(zhǔn)字號(hào)所 對(duì)應(yīng)的字符寬度;非方塊字符寬度表建立模塊,用于將所述非方塊字符、所述非方塊字符的字體與字號(hào) 為所述基準(zhǔn)字號(hào)的非方塊字符對(duì)應(yīng)字符寬度的對(duì)應(yīng)關(guān)系存入所述非方塊字符寬度表中。
全文摘要
本發(fā)明提供一種文本排版方法及排版引擎。該方法包括獲取解析后的文本后,排版引擎從所述文本中逐個(gè)讀取字符;在所述字符為方塊字符時(shí),根據(jù)所述字符所屬的語(yǔ)種和字號(hào)在方塊字符寬度表中查找所述字符的字符寬度;在所述字符為非方塊字符時(shí),根據(jù)所述字符的字體,在非方塊字符寬度表中查找所述字符的字符寬度;所述排版引擎根據(jù)文本顯示區(qū)的寬度、所述文本中非方塊字符的字符寬度和所述文本中方塊字符的字符寬度,對(duì)所述文本進(jìn)行斷行;調(diào)用操作系統(tǒng)提供的文本輸出函數(shù)在所述文本顯示區(qū)輸出斷行后的所述文本。本發(fā)明不需要調(diào)用系統(tǒng)提供的文本寬度計(jì)算函數(shù)計(jì)算待文本中字符的字符寬度。
文檔編號(hào)G06F17/21GK102147790SQ20111009614
公開(kāi)日2011年8月10日 申請(qǐng)日期2011年4月15日 優(yōu)先權(quán)日2011年4月15日
發(fā)明者周愛(ài)芳, 孫詩(shī), 堯俊利, 張小兵, 戎亞新, 李曉慧, 王志, 王超 申請(qǐng)人:華為軟件技術(shù)有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1