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

遠(yuǎn)程字體管理的制作方法

文檔序號:11935165閱讀:242來源:國知局
遠(yuǎn)程字體管理的制作方法與工藝

字體被計算設(shè)備用來使用字樣(typeface)的特定大小、磅值和樣式來表示文本,諸如使用打印機(jī)打印文本,在顯示設(shè)備上示出文本等等。還可以生成具有不同處理(例如,斜體、粗體等等)的字體。

用戶可以訪問可以用來支持文本的豐富顯示的數(shù)千種字體。然而,存儲這些字體并且向用戶以及希望使用該字體查看文本(例如,指定特定字體的文檔)的其他用戶傳送這些字體可能消耗計算設(shè)備的顯著數(shù)量的資源,其可能由于支持查看數(shù)百甚至數(shù)千個字符的字體而加劇。



技術(shù)實現(xiàn)要素:

描述了遠(yuǎn)程字體管理技術(shù)。在一個或多個實施方式中,通過計算設(shè)備經(jīng)由網(wǎng)絡(luò)獲得遠(yuǎn)程定位的一個或多個布局表,其對應(yīng)于與使用字體輸出文本的請求相關(guān)聯(lián)的字體。文本的布局使用所獲得的一個或多個布局表通過計算設(shè)備來生成,以標(biāo)識文本的輸出中所涉及的依賴字形。通過計算設(shè)備經(jīng)由網(wǎng)絡(luò)從遠(yuǎn)離計算設(shè)備定位的字體文件獲得所標(biāo)識的字形,并且使用所獲得的字形通過計算設(shè)備來渲染文本。

在一個或多個實施方式中,通過計算設(shè)備獲得與關(guān)于來自第一字體文件的第一字體的請求有關(guān)的數(shù)據(jù)。第一字體文件可通過計算設(shè)備經(jīng)由網(wǎng)絡(luò)遠(yuǎn)程訪問,并且請求涉及文本的顯示。由計算設(shè)備選擇第二字體,其中對應(yīng)的第二字體文件的至少部分本地存儲在計算設(shè)備處,這些部分可用作所請求的第一字體的數(shù)據(jù)的替代。在一段時間的至少一部分期間,使用對應(yīng)的第二字體文件的部分以所選擇的第二字體來渲染文本,在該一段時間的至少一部分期間,可通過計算設(shè)備遠(yuǎn)程訪問的所獲得的數(shù)據(jù)不能在本地用于渲染文本。響應(yīng)于所獲得的數(shù)據(jù)在計算設(shè)備處本地用于渲染文本的可訪問性,使用所獲得的數(shù)據(jù)來渲染文本。

在一個或多個實施方式中,一種系統(tǒng)包括至少部分地以硬件實施的一個或多個模塊。一個或多個模塊被配置成執(zhí)行操作,這些操作包括:經(jīng)由網(wǎng)絡(luò)獲得遠(yuǎn)程定位的一個或多個布局表,該一個或多個布局表對應(yīng)于與使用字體輸出文本的請求相關(guān)聯(lián)的字體,并且使用所獲得的一個或多個布局表生成文本的布局來標(biāo)識文本的輸出中所涉及的依賴字形。這些操作還包括:響應(yīng)于所述生成,經(jīng)由網(wǎng)絡(luò)從遠(yuǎn)離計算設(shè)備定位的字體文件獲得所標(biāo)識的字形,并且使用所獲得的字形渲染文本。

提供本發(fā)明內(nèi)容以便以簡化形式介紹以下在具體實施方式中進(jìn)一步描述的概念的選擇。本發(fā)明內(nèi)容不旨在標(biāo)識所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。

附圖說明

參考附圖描述具體實施方式。在圖中,附圖標(biāo)記的一個或多個最左邊的數(shù)字標(biāo)識該附圖標(biāo)記首次出現(xiàn)的圖。在說明書和圖中的不同實例中使用相同的附圖標(biāo)記可以指示相似或相同的項。在圖中表示的實體可以指示一個或多個實體,并且因此可以可交換地參照討論中的實體的單個或復(fù)數(shù)形式。

圖1是可操作來采用本文中所描述的字體管理技術(shù)的示例實施方式中的環(huán)境的圖示。

圖2描繪了示例實施方式中的系統(tǒng),其中,字體相關(guān)數(shù)據(jù)經(jīng)由網(wǎng)絡(luò)流傳輸?shù)接嬎阍O(shè)備以用于渲染文本。

圖3是描繪示例實施方式中的過程的流程圖,其中,使用一個或多個布局表生成布局以標(biāo)識通過計算設(shè)備要獲得哪些字形來渲染文本。

圖4描繪了示例實施方式中的系統(tǒng),其中,字體回退技術(shù)被用作字體流傳輸和管理的一部分。

圖5是描繪示例實施方式中的過程的流程圖,其中,本地可用字體用作替代,同時遠(yuǎn)程字體在本地不可用。

圖6和圖7示出了創(chuàng)建用于字形依賴性示圖的依賴性列表的示例。

圖8圖示了包括示例設(shè)備的各種組件的示例系統(tǒng),該示例設(shè)備可以被實施為如參照圖1至圖7所描述的任何類型的計算設(shè)備以實施本文中所描述的技術(shù)的實施例。

具體實施方式

概述

字體的多樣性不斷增加,因此在使用常規(guī)技術(shù)存儲和傳送這些字體中消耗的資源量也在增加。因而,描述了字體管理技術(shù),其可以被配置成以可以用來節(jié)省計算設(shè)備和網(wǎng)絡(luò)資源的方式在傳送和分布與字體有關(guān)的數(shù)據(jù)中利用網(wǎng)絡(luò)存儲。

例如,可以采用字體提供方模塊(例如,作為插件軟件組件)來下載針對字體集合和字體文件數(shù)據(jù)的元數(shù)據(jù),諸如布局表。字體提供方模塊可以被配置成首先下載與要用于顯示特定選擇的文本的字體有關(guān)的元數(shù)據(jù),例如,文檔、網(wǎng)頁等。然后,元數(shù)據(jù)可以用作字體匹配的一部分來標(biāo)識字體和對應(yīng)的字體文件。

然后,字體文件的標(biāo)識可以用來獲得一個或多個布局表,該一個或多個布局表可用于生成如應(yīng)用于文本的字體的布局,以通過從布局表構(gòu)建字形依賴性示圖來標(biāo)識要在渲染文本中涉及的字形。然后,可以經(jīng)由網(wǎng)絡(luò)遠(yuǎn)程地獲得這些所標(biāo)識的字形并且以稀疏文件格式保存以用于渲染文本,并且還可以被用作跨進(jìn)程的字體緩存的一部分而用于渲染其它文本。這樣,計算設(shè)備可以從要被利用的字體文件獲得字形,而不獲得并不使用的字形,從而在獲得和存儲字體有關(guān)數(shù)據(jù)中節(jié)省網(wǎng)絡(luò)和計算設(shè)備資源。

附加地,還可以采用回退技術(shù),諸如從而在獲得如上文所描述的元數(shù)據(jù)、字形等的同時替代本地可用字體。因此,用戶可以查看文本而不用等待獲得字體有關(guān)數(shù)據(jù),并且一旦獲得,可以使用所獲得的數(shù)據(jù)渲染文本。這些和其它特征的進(jìn)一步討論可以在以下部分中找到。

在下面的討論中,首先描述可以采用本文中所描述的技術(shù)的示例環(huán)境。然后描述示例過程,其可以在示例環(huán)境以及其它環(huán)境中執(zhí)行。結(jié)果,示例過程的執(zhí)行不限于示例環(huán)境,并且示例環(huán)境不限于示例過程的執(zhí)行。

以下討論描述了可以利用先前描述的系統(tǒng)和設(shè)備來實施的遠(yuǎn)程字體管理技術(shù)。每個過程的各方面可以以硬件、固件或軟件或其組合來實施。該過程被示出為指定由一個或多個設(shè)備執(zhí)行的操作的一組方框,并且不一定限于所示出的用于由相應(yīng)方框執(zhí)行操作的順序。在以下討論的部分中,將參照如上文所描述的圖。

關(guān)于圖1至圖7的示例描述的功能性、特征和概念可以用于本文中所描述的過程的上下文中。進(jìn)一步地,下文關(guān)于不同過程描述的功能性、特征和概念可以在不同過程之間互換,并且不限于在單個過程的上下文中實施。此外,與不同的代表性過程和本文中的對應(yīng)的圖相關(guān)聯(lián)的方框可以以不同的方式一起應(yīng)用和/或組合。因此,關(guān)于本文中的不同示例環(huán)境、設(shè)備、組件和過程描述的各個功能性、特征和概念可以以任何合適的組合來使用,并且不限于由所枚舉的示例所表示的特定組合。

示例環(huán)境

圖1是可操作以采用本文中所描述的字體管理技術(shù)的示例實施方式中的環(huán)境100的圖示。所圖示的環(huán)境100包括經(jīng)由網(wǎng)絡(luò)106通信地耦接到服務(wù)提供方104(例如,web服務(wù))的計算設(shè)備102。計算設(shè)備102以及可以實施服務(wù)提供方104的計算設(shè)備可以以多種方式配置。

例如,計算設(shè)備可以被配置為能夠通過網(wǎng)絡(luò)106進(jìn)行通信的計算機(jī),該計算機(jī)的所圖示的示例包括臺式計算機(jī)、移動站、娛樂器具、通信地耦接到顯示設(shè)備的機(jī)頂盒、無線電話、游戲控制臺等等。因此,計算設(shè)備102的范圍可以從具有大量存儲器和處理器資源的全資源設(shè)備(例如,個人計算機(jī)、游戲控制臺)到具有有限存儲器和/或處理資源的低資源設(shè)備(例如,傳統(tǒng)機(jī)頂盒、手持游戲控制臺)。附加地,盡管示出了單個計算設(shè)備102,但是計算設(shè)備102可以表示多個不同的設(shè)備,諸如由企業(yè)用來執(zhí)行操作的多個服務(wù)器,諸如通過服務(wù)提供方104、遙控器和機(jī)頂盒組合、圖像捕獲設(shè)備和被配置成捕獲手勢的游戲控制臺等等來執(zhí)行。

盡管網(wǎng)絡(luò)106被圖示為因特網(wǎng),但是網(wǎng)絡(luò)可以采取廣泛多種的配置。例如,網(wǎng)絡(luò)106可以包括廣域網(wǎng)(WAN)、局域網(wǎng)(LAN)、無線網(wǎng)絡(luò)、公共電話網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)等等。進(jìn)一步地,盡管示出了單個網(wǎng)絡(luò)106,但是網(wǎng)絡(luò)106可以被配置成包括多個網(wǎng)絡(luò)。

計算設(shè)備102被圖示為包括多種硬件組件,其示例包括處理系統(tǒng)108,被圖示為存儲器110的計算機(jī)可讀存儲媒體的示例,還可以包括如在所圖示的示例中所示出的顯示設(shè)備等等。處理系統(tǒng)108表示通過執(zhí)行存儲在存儲器110中的指令來執(zhí)行操作的功能性。盡管進(jìn)行了單獨圖示,但是這些組件的功能性可以被進(jìn)一步劃分、組合(例如,在專用集成電路上)等等。

計算設(shè)備102被進(jìn)一步圖示為包括操作系統(tǒng)112。操作系統(tǒng)112被配置成將計算設(shè)備102的底層功能性抽象到在計算設(shè)備102上可執(zhí)行的應(yīng)用114。例如,操作系統(tǒng)112可以抽象計算設(shè)備102的處理系統(tǒng)104、存儲器106、網(wǎng)絡(luò)連接和/或顯示設(shè)備功能性,使得可以在不知道“如何”實施這個底層功能性的情況下編寫應(yīng)用114。比如,應(yīng)用114可以向操作系統(tǒng)112提供要渲染的數(shù)據(jù),而并不理解將如何執(zhí)行該渲染。操作系統(tǒng)112還可以表示多種其它功能性,諸如來管理可由計算設(shè)備102的用戶導(dǎo)航的文件系統(tǒng)和用戶接口。

計算設(shè)備102還被圖示為包括字體提供方模塊116、字體緩存模塊118和字體緩存120。服務(wù)提供方104被圖示為包括字體管理器模塊122和包括在存儲裝置126中的一個或多個字體文件124。同時,由這些組件表示的功能性可以用于最小化計算設(shè)備102的資源消耗,但仍然提供對大字體庫的訪問。這意味著相同的文本可以在如所圖示的不同類別的設(shè)備上精確地再現(xiàn),而與在每個設(shè)備上本地安裝什么字體無關(guān)。

再現(xiàn)文檔保真度的現(xiàn)有途徑要么具有隨文檔一起的嵌入的字體,要么引用外部資源。然而,嵌入途徑增加了文檔的存儲大小。雖然這可以通過創(chuàng)建字體的子集版本來緩解,但是該子集是具有與原始文件不同的字符支持和布局的新的不同資源,意味著在該現(xiàn)有途徑中緩存邏輯出局。進(jìn)一步地,因為子集不包含原始字體的完全覆蓋,所以對文檔的任何附加編輯可能找不到字符,從而使得在該現(xiàn)有途徑中嵌入是僅供查看的解決方案。

對于web文檔,現(xiàn)有途徑典型地使用層疊樣式表(CSS)經(jīng)由URL來引用自定義字體,其可以基于消費(fèi)者具有有效的網(wǎng)絡(luò)連接的假設(shè)而針對網(wǎng)頁和web應(yīng)用很好地工作。然而,這種常規(guī)的CSS解決方案僅僅以瀏覽器內(nèi)部的內(nèi)容為目標(biāo)。附加地,因為現(xiàn)有系統(tǒng)API被設(shè)計成一次性消費(fèi)并且一次期望整個文件,所以在每個實例中下載潛在的大文件。

盡管壓縮技術(shù)可以用于減小文件大小,但是在一些實例中,使用整個文件可能涉及數(shù)百甚至數(shù)千個字符。子集的創(chuàng)建還可以應(yīng)用于web字體以減小大小和帶寬,然而,與單個獨立文檔相比較,選擇哪些字符要用于創(chuàng)建子集對于網(wǎng)站可能更復(fù)雜,因為網(wǎng)站可能包含多數(shù)網(wǎng)頁、多種語言,以及甚至動態(tài)內(nèi)容。進(jìn)一步地,使用這種常規(guī)技術(shù)處理多個子集變型還可能使CSS變得復(fù)雜并且減慢在瀏覽器中的匹配進(jìn)程。

除了再現(xiàn)單個已知字體資源的保真度之外,還可能期望支持發(fā)現(xiàn)哪些附加字體資源可用于選擇的能力。盡管一些現(xiàn)有途徑支持查詢web API的可用字體資源以及直接枚舉和下載可用字體資源的能力,但是該功能性限于執(zhí)行下載然后全局安裝字體或僅僅在進(jìn)程內(nèi)使用該字體的應(yīng)用本身。本地安裝在該常規(guī)技術(shù)中意味著這種字體現(xiàn)在永久安裝,沒有自動清理管理可以來告知用戶哪些字體來自哪里。另一方面,常規(guī)的進(jìn)程內(nèi)的使用不支持跨進(jìn)程共享利益,并且可能涉及來自計算設(shè)備上的每個應(yīng)用的冗余帶寬,而不是要使用相同資源。

因而,所圖示的環(huán)境100可以被配置成支持可以解決和克服這些常規(guī)限制的多種功能性。例如,字體提供方模塊116可以被配置為插件軟件組件,其可以用于經(jīng)由網(wǎng)絡(luò)106從字體文件124遠(yuǎn)程下載元數(shù)據(jù)和其它數(shù)據(jù)(諸如布局表),該元數(shù)據(jù)和其它數(shù)據(jù)可以用于擴(kuò)展字體流傳輸以支持不同的字體服務(wù)。

字體緩存模塊118可以用于支持跨進(jìn)程的字體緩存功能性,使得字體集合元數(shù)據(jù)、布局表和字形可以從服務(wù)提供方104一次下載并且由多個應(yīng)用114使用。例如,來自字體文件124的元數(shù)據(jù)和/或布局表可以與字體文件124的字形分開下載,并且甚至各個字形本身可以根據(jù)需要下載,而不下載整個字體文件124。字體緩存模塊118然后可以追蹤字體文件124的哪些部分是本地的,并且與字體提供方模塊116通信以獲得任何期望的部分。進(jìn)一步地,可以使用具有字體回退的非阻塞設(shè)計和可以利用稀疏文件來節(jié)省存儲空間的字體下載隊列來存儲該數(shù)據(jù)。

進(jìn)一步地,下載請求可以包括文件和文件范圍,也包括諸如字符和字形之類的更高級信息。例如,可以使用依賴性示圖來執(zhí)行對要下載的哪些字形的標(biāo)識,并且因此可以用于提高下載效率。比如,字體流傳輸可以使用關(guān)于Unicode的信息和關(guān)于字體格式的信息來智能地將字符請求轉(zhuǎn)換為字形請求,以及將字形請求轉(zhuǎn)換為文件范圍請求。這也可以考慮可能在文本布局期間發(fā)生的字形替代和添加,并且可以合并有關(guān)字符(諸如阿拉伯語)的范圍以避免由于部分字體回退而導(dǎo)致的不一致的外觀。

圖2描繪了示例實施方式中的系統(tǒng)200,其中,字體有關(guān)數(shù)據(jù)經(jīng)由網(wǎng)絡(luò)流傳輸?shù)接嬎阍O(shè)備以用于渲染文本。圖3描繪了示例實施方式中的過程300,其中,從一個或多個布局表生成布局以標(biāo)識哪些字形由計算設(shè)備獲得來渲染文本。對這兩個附圖的討論在下面并行地進(jìn)行。

字體由文件、一組文件或文件的一部分表示。用于字體的標(biāo)準(zhǔn)文件格式的示例是OpenType。OpenType字體文件包括被稱為表的一組命名的數(shù)據(jù)結(jié)構(gòu),其中每個都有自己的布局和目的。例如,“名稱”表指定諸如字體的姓氏(例如,“Helvetica”)的串;“cmap”表將標(biāo)準(zhǔn)Unicode字符映射到被稱為字形的特定于字體的形狀;“gsub”表指定基于上下文的字形替代(例如,fi連字(ligature)而非分開的f字形和i字形);以及“glyf”表包含字形形狀的幾何描述。在下文中,參照利用OpenType格式的使用對字體流傳輸技術(shù)進(jìn)行描述,但是應(yīng)當(dāng)顯而易見的是,這些技術(shù)等同地適用于其它字體格式。

文本典型地在應(yīng)用或文檔中表示為Unicode字符串以及相關(guān)聯(lián)的屬性,諸如字體姓氏、字體磅值(例如,粗體)、字體樣式(例如,斜體)、字體大?。ɡ?,12點)。附加屬性可以包括段落對齊和調(diào)整、如小型大寫字母和舊式數(shù)字的排版特征以及許多其它屬性。

通過使用第一階段202、第二階段204、第三階段206、第四階段208和第五階段210在圖2中示出可執(zhí)行的以渲染文本的示例階段。在第一階段202,通過字體提供方模塊116從應(yīng)用114接收請求212以根據(jù)特定字體216渲染文本214。如先前所描述的,字體提供方模塊116可以被配置為可由多個應(yīng)用114訪問的插件組件,例如,作為操作系統(tǒng)112的一部分。還可以設(shè)想其它示例,諸如將字體提供方模塊116的功能性合并為應(yīng)用114自身的一部分等等。

在第二階段204,響應(yīng)于輸出字體216中的文本214的請求212,經(jīng)由網(wǎng)絡(luò)從服務(wù)提供方104遠(yuǎn)程獲得對應(yīng)于所請求的字體的至少一個字體集合218。比如,字體集合218可以包括字體元數(shù)據(jù)220,諸如姓氏222、磅值224、樣式226等。這樣,字體元數(shù)據(jù)220經(jīng)由網(wǎng)絡(luò)106與字體本身分開傳送,并且因此可以用于提高效率并且節(jié)省網(wǎng)絡(luò)106以及計算設(shè)備102資源。

然后,可以通過搜索至少一個字體集合找到對應(yīng)于所請求的字體的元數(shù)據(jù)來執(zhí)行字體匹配(方框302),并且因此可以用于標(biāo)識對應(yīng)于所請求的字體的字體文件。對于字體匹配,將來自請求212的文本214的輸入屬性(諸如姓氏、磅值和樣式)與如在字體集合218的字體元數(shù)據(jù)220中指定的可用字體的屬性進(jìn)行比較,以找到最接近的匹配。

字體集合218最初由字體提供方模塊116填充以獲得字體元數(shù)據(jù)220,而并不實際下載集合中的每個字體。例如,字體提供方模塊116可以以JavaScript? Object Notation(JSON)或另一格式來下載包含針對大量字體的字體元數(shù)據(jù)220的單個文件。

一旦字體集合218已經(jīng)被初始化,字體緩存模塊120就可以將字體集合218緩存在字體緩存120中用于隨后重用。因此,當(dāng)各個字體文件稍后被應(yīng)用114或其它應(yīng)用需要時,這些字體文件也由字體提供方模塊116下載并且由字體緩存模塊118緩存在字體緩存120中。

在第三階段206,通過計算設(shè)備經(jīng)由網(wǎng)絡(luò)獲得遠(yuǎn)程定位的一個或多個布局表,其對應(yīng)于與使用字體輸出文本的請求相關(guān)聯(lián)的字體(方框304)。繼續(xù)先前的示例,字體元數(shù)據(jù)220可以用于定位對應(yīng)于所請求的字體216的特定字體文件124。然后,可以經(jīng)由網(wǎng)絡(luò)106遠(yuǎn)程獲得來自字體文件124的布局表228,并且還將該布局表228提供給字體緩存模塊118以用于存儲在字體緩存120中,例如,供其它應(yīng)用使用。

在第四階段208,使用所找到的布局表228來生成文本的布局和字形依賴性,以標(biāo)識文本的輸出中所涉及的字形。例如,可以通過使用一個或多個布局表將輸入字形映射到輸出字形來生成依賴性示圖(方框305)。附加地,可以使用依賴性示圖生成文本的布局,以標(biāo)識文本的輸出中所涉及的字形(方框306)。

比如,圖示了文本布局模塊230,其表示可以將布局表228接受作為輸入以生成文本214的布局230的功能性,該功能性可以使用如下文所描述的依賴性示圖來執(zhí)行。因此,文本布局模塊228可以利用布局表228來確定文本214的布局232和尺寸以標(biāo)識要在文本的渲染中使用的字形234,而并不通過構(gòu)建字形依賴性示圖實際下載那些字形。

例如,文本布局模塊230可以將字符代碼映射到字形ID,該字形ID是字符的特定于字體的表示。還使用字體中的度量來計算作為布局232的一部分的字形位置?;谖谋緦傩浴⒄Z言文字(script)(例如,阿拉伯文)和字體中的信息,其它字形可以替代標(biāo)稱(nominal)字形。附加地,可以執(zhí)行換行,并且字形可以作為字符連接(例如,連字號字符)和調(diào)整(例如,連接如阿拉伯文之類的語言文字的字符)的結(jié)果來添加。因此,如由文本布局模塊230輸出的布局232被用于標(biāo)識要渲染的字形234以及字形234在文本214的布局232中的相應(yīng)位置。

在第五階段210,經(jīng)由網(wǎng)絡(luò)106從對應(yīng)于字體的字體文件124(例如,從服務(wù)提供方104)中遠(yuǎn)程獲得所標(biāo)識的字形234(方框308)。因此,獲得實際上被標(biāo)識為用于渲染文本214的字形234,而并不獲得不使用的字形,從而節(jié)省網(wǎng)絡(luò)106和計算設(shè)備102資源。

然后,使用所獲得的字形渲染文本(方框310)。如上文所描述的,由文本布局進(jìn)程產(chǎn)生的字形ID用于定位字體中的字形數(shù)據(jù)。字形數(shù)據(jù)典型地將字形輪廓的形狀指定為一系列曲線。它還可以包括針對不同大小或分辨率而優(yōu)化形狀的提示指令。一些字體在“glyf”表中使用TrueType輪廓和提示,而其它字體在“CFF”表中使用PostScript輪廓和提示。附加地,字體可以包含針對特定大小的字形位圖。進(jìn)一步地,渲染字形可以取決于其它字形,因為:(1)TrueType字形可以被定義為其它字形的組合,以及(2)多色字形可以通過將不同顏色的字形層疊在彼此的頂部上來定義。

因此,在該示例中,字體提供方模塊116和字體緩存模塊118結(jié)合經(jīng)由服務(wù)提供方104的字體文件124的遠(yuǎn)程存儲可以有效地傳送和管理哪些數(shù)據(jù)被傳送和維護(hù)以渲染特定字體中的文本,而并不獲得不在該渲染中使用的數(shù)據(jù)。因為該數(shù)據(jù)可以經(jīng)由網(wǎng)絡(luò)106從服務(wù)提供方104流傳輸?shù)接嬎阍O(shè)備102,所以可以采用回退技術(shù)來減少輸出文本以供用戶查看的延遲,其進(jìn)一步的討論可以在下面的描述中找到并且在對應(yīng)的圖中示出。

圖4描繪了示例實施方式中的系統(tǒng)400,其中,字體回退技術(shù)被用作字體流傳輸和管理的一部分。使用第一階段402、第二階段404和第三階段406圖示系統(tǒng)400。圖5描繪了示例實施方式中的過程500,其中,描述了字體回退技術(shù),其中,本地可用字體用作替代,而遠(yuǎn)程字體在本地不可用。對這兩個附圖的討論在下文并行地進(jìn)行。在下文中,描述了字體回退技術(shù),其中,如果字體數(shù)據(jù)在本地不可用于計算設(shè)備102,則可以替代以不同的字體,直到該數(shù)據(jù)在本地可用于計算設(shè)備102為止。這可以以多種方式實施,諸如在與圖2和圖3所描述的字體匹配所不同的步驟中,可以作為字體匹配的組成部分來執(zhí)行等等。例如,字體回退可以發(fā)生在將字符轉(zhuǎn)換為字形ID之后。

通過計算設(shè)備獲得與關(guān)于來自第一字體文件的第一字體的請求有關(guān)的數(shù)據(jù)。第一字體文件可通過計算設(shè)備經(jīng)由網(wǎng)絡(luò)遠(yuǎn)程訪問,并且該請求涉及文本的顯示(方框502)。如在第一階段402處所示出的,字體提供方模塊116可以從服務(wù)提供方104的字體管理器模塊112請求非本地字體數(shù)據(jù)408。非本地字體數(shù)據(jù)408可以以多種方式配置,諸如具有字體元數(shù)據(jù)220的字體集合218、用于標(biāo)識字形的布局表228以及所標(biāo)識的字形234本身等等。因此,字體提供方模塊116可以請求非本地字體數(shù)據(jù)408經(jīng)由網(wǎng)絡(luò)106從服務(wù)提供方104流傳輸?shù)接嬎阍O(shè)備102。

該數(shù)據(jù)的流傳輸可能花費(fèi)一定量的時間,如此,非本地字體數(shù)據(jù)408可能在計算設(shè)備102處本地不可用。因而,字體回退模塊410表示執(zhí)行如在第二階段404處所圖示的字體回退412技術(shù)的操作系統(tǒng)112的功能性。例如,字體回退模塊410可以選擇第二字體,其中,對應(yīng)的第二字體文件的至少部分本地存儲在計算設(shè)備處,這些部分可用作所請求的第一字體的數(shù)據(jù)的替代(方框504)。這可以包括替代的字體文件、字形等等。在一段時間的至少一部分期間,使用對應(yīng)的第二字體文件的部分來以所選擇的第二字體來渲染文本,在該一段時間的至少一部分期間,可通過計算設(shè)備遠(yuǎn)程訪問的所獲得的數(shù)據(jù)在本地不可用于渲染文本(方框506)。這樣,用戶不是被迫等待,直到非本地字體數(shù)據(jù)408成為可用的為止,而是可以通過利用第二字體文件立即查看該文本。

在第三階段408,非本地字體數(shù)據(jù)414在計算設(shè)備102處成為本地可用的,并且因此可以通過字體回退模塊410提供給應(yīng)用114。因此,響應(yīng)于所獲得的數(shù)據(jù)在計算設(shè)備處本地用來渲染文本的可訪問性,使用所獲得的數(shù)據(jù)來渲染文本(方框508)。比如,應(yīng)用114可以提供該非本地字體數(shù)據(jù)412以供操作系統(tǒng)112渲染。還設(shè)想了其中應(yīng)用114不知道這種替代、并且相反,該回退功能性被抽象出作為操作系統(tǒng)112的一部分的其它示例。

因此,出于本地性的原因,可以發(fā)生字體回退。如果最佳匹配字體文件是經(jīng)由網(wǎng)絡(luò)106遠(yuǎn)程的(即,不在字體緩存中),則替代地由字體提供方模塊116選擇本地回退字體。字體還可以是部分遠(yuǎn)程的。也就是說,文件的一些部分可以是本地的(在字體緩存120中),而其它部分是遠(yuǎn)程的,例如,不在字體緩存120中。如果是這樣,則字體回退模塊410查詢字體緩存模塊118以檢測用于繪制文本的所指定的字符的字體文件的部分是否在本地緩存,并且選擇回退字體以繪制非本地字符。

回退也可以發(fā)生在字符轉(zhuǎn)換為字形之后,在這種情況下,字體緩存模塊118確定所標(biāo)識的字形是否是本地的,并且如果不是,則回退。在由于本地性而發(fā)生回退的任何情況下,可以創(chuàng)建包括字體的身份以及所標(biāo)識的遠(yuǎn)程字符或字形的下載請求。然后可以將下載請求添加到傳遞到字體提供方模塊116的字體下載隊列。

注意,上述進(jìn)程并不阻塞數(shù)據(jù)的下載。這確保了繪圖文本是高效的,盡管文本可以以與所請求的字體不同的字體繪制。如果發(fā)生由于缺少本地性而導(dǎo)致的回退,則下載請求作為附帶后果被添加到字體下載隊列。在方便的時候,應(yīng)用114(或字體提供方模塊116)可以請求所排隊的下載請求被執(zhí)行。然后,字體提供方模塊116在后臺下載所請求的字體數(shù)據(jù),并且通過使用字體緩存模塊118將其緩存在字體緩存120中??梢栽谙螺d完成時通知應(yīng)用114,此時應(yīng)用114可以使得文本被使用新的本地數(shù)據(jù)繪制。

例如,應(yīng)用114可以以多種字體繪制整個文本頁面。頁面上的一些文本可以使用遠(yuǎn)程字體、字符或字形,在這種情況下,使用本地回退字體,并且將下載請求添加到字體下載隊列。在繪制頁面之后,應(yīng)用114請求在字體提供方模塊116的隊列中的下載請求的執(zhí)行。字體提供方模塊116然后在后臺下載數(shù)據(jù)并且將其緩存在字體緩存120中。在下載完成時通知應(yīng)用114,此時它重繪頁面。在第二遍繪圖時,所請求的字符和字形中的每個都是本地的,因此不會發(fā)生回退。

再次返回到圖1,字體提供方模塊116是由字體緩存模塊118和字體緩存120使用以從服務(wù)提供方104的字體文件124下載字體集合元數(shù)據(jù)和字體文件數(shù)據(jù)的組件。字體緩存模塊118可以包括可用提供方的列表。這些可以包括作為字體流傳輸實施方式的一部分的內(nèi)置提供方、通過安裝機(jī)制添加的可插入提供方或兩者。每個提供方由提供方ID標(biāo)識,該提供方ID可以是整數(shù)、GUID、字符串或其它唯一值。給定提供方ID,字體緩存模塊118可以通過調(diào)用方法或諸如消息傳遞的某種其它機(jī)制來實例化對應(yīng)的提供方并且使用其功能性。字體提供方模塊116可以在與字體緩存模塊118相同的進(jìn)程中或在單獨的進(jìn)程中實施。

字體提供方模塊116可以被配置成實施具有多種功能的良好定義的接口,其中第一功能是初始化字體集合218。字體集合218由提供方ID和提供方定義的密鑰標(biāo)識。例如,如果字體提供方模塊116使得用戶能夠購買或以其它方式獲取字體,則字體集合密鑰可以包括用戶的帳戶名稱。如果每個字體提供方模塊116被配置成具有單個字體集合,則字體流傳輸實施方式可以省略提供方定義的字體集合密鑰的概念。

用于初始化字體集合的過程可以包括以下:

1.字體緩存使用提供方ID實例化字體提供方。

2.字體緩存調(diào)用提供方方法,指定字體集合密鑰。

3.字體提供方使用服務(wù)所需的任何協(xié)議從Web服務(wù)或其它字體源下載元數(shù)據(jù)。

4.提供方解析由字體源返回的數(shù)據(jù),并且回調(diào)到由字體緩存實施的字體集合“構(gòu)建器”接口。對于每個字體,提供方指定字體的身份(例如,提供方定義的文件密鑰和面部索引)以及相關(guān)聯(lián)的字體屬性。

5.當(dāng)提供方完成時,字體緩存使用經(jīng)由構(gòu)建器接口返回的信息構(gòu)造字體集合的內(nèi)部表示。

如應(yīng)當(dāng)顯而易見的,還可以設(shè)想上述變型。例如,取代了代替在步驟2中直接下載信息,字體提供方模塊116可以向字體緩存模塊118返回下載信息(例如,URI等),字體緩存模塊118會執(zhí)行下載并且將結(jié)果傳遞回提供方。同樣地,取代了在步驟3中回調(diào)到構(gòu)建器對象,字體提供方模塊116可以將所下載的信息轉(zhuǎn)換為字體緩存模塊118所理解的商定格式。

字體提供方模塊116的第二功能是從字體文件124下載字體文件數(shù)據(jù)。字體文件124可由提供方ID和提供方定義的文件密鑰來標(biāo)識。注意,在構(gòu)造字體集合期間,文件密鑰可以源自字體提供方模塊116本身。格式還可以使得多個字體能夠成為一個文件中的多個包(例如,TrueType集),因此字體可以由字體文件引用加面部索引來標(biāo)識。

遠(yuǎn)程字體文件中的字節(jié)的范圍如下進(jìn)行下載:

1.字體緩存使用提供方ID實例化字體提供方。

2.如果文件的大小不是已知的,則字體緩存模塊118調(diào)用提供方方法以得到文件大小。該方法接受提供方定義的文件密鑰。字體提供方模塊116可以通過向web服務(wù)發(fā)送HTTP HEAD請求來確定文件大小?;蛘撸绻跇?gòu)造字體集合期間文件大小已知,則字體提供方模塊116可以將大小編碼為文件密鑰的一部分。

3.字體緩存模塊118調(diào)用提供方方法以得到下載信息。該方法接受提供方定義的文件密鑰和回調(diào)接口。字體提供方模塊116經(jīng)由回調(diào)接口返回諸如URI、認(rèn)證信息等之類的下載信息。

4.使用所返回的下載信息,字體緩存下載所期望的文件范圍并且將其緩存。

如應(yīng)當(dāng)顯而易見的,還可以設(shè)想上述的變型。例如,字體提供方模塊116可以將數(shù)據(jù)本身下載到由字體緩存模塊118提供的緩沖器中。

除了上文所描述的功能之外,提供方接口可以包括字體提供方模塊116可以借以確保從字體緩存120中丟棄過時的數(shù)據(jù)的機(jī)制。例如,字體集合可以包括過期日期,在該過期日期之后,字體緩存120丟棄或重新初始化字體集合,當(dāng)字體集合或其它資源過期時,字體提供方模塊116可以以編程方式通知字體緩存模塊118,等等。

如果支持每用戶或每應(yīng)用數(shù)據(jù),則字體提供方模塊116接口可以包括字體提供方模塊116可以借以限制對所下載的數(shù)據(jù)的訪問的機(jī)制。例如,字體集合構(gòu)建器接口可以包括用于在字體集合上設(shè)置自由訪問控制列表(DACL)的方法。字體緩存模塊118然后可以使用所指定的訪問將字體集合暴露給應(yīng)用進(jìn)程。

字體緩存模塊118和相關(guān)聯(lián)的字體緩存120是負(fù)責(zé)下載數(shù)據(jù)并且緩存結(jié)果的組件。字體緩存模塊118在字體提供方的幫助下下載數(shù)據(jù)。字體緩存120和字體緩存模塊118可以用于:

?訪問所緩存的字體集合。

?請求下載字體集合。

?查詢字體文件的本地性(即,遠(yuǎn)程、本地或部分的)。

?查詢字體文件的部分的本地性。

?請求下載字體文件的部分。

字體緩存模塊118和字體緩存120可以被實施為專用系統(tǒng)組件,使得多個應(yīng)用114共享相同的字體緩存120。這樣,如果多個應(yīng)用114請求相同的數(shù)據(jù),則數(shù)據(jù)被下載一次,并且緩存數(shù)據(jù)的單個副本。

在一個或多個實施方式中,應(yīng)用114不直接與字體緩存120交互,而是經(jīng)過字體支持庫。字體支持庫暴露用于字體匹配、文本布局、文本渲染等的更高級別接口。稍后描述的字體下載隊列和智能字符和字形緩存的使用也可以被認(rèn)為是字體支持庫的部分。字體支持庫駐留在應(yīng)用進(jìn)程中并且通過專用進(jìn)程間通信機(jī)制與字體緩存模塊118交互??商娲兀煮w支持庫和字體緩存模塊118和字體緩存120都可以以內(nèi)核模式實施,在這種情況下,字體支持庫可以直接調(diào)用字體緩存。

字體支持庫經(jīng)由高級接口將字體集合暴露給應(yīng)用114。應(yīng)用114通過指定提供方ID和字體集合密鑰來得到字體集合?;蛘?,實施方式可以包括默認(rèn)“系統(tǒng)”字體集合的概念,在這種情況下,不使用參數(shù)。字體支持庫調(diào)用字體緩存模塊118或向字體緩存模塊118發(fā)送消息,字體緩存模塊118將句柄返回到只讀共享存儲器,該存儲器包含字體緩存120中的字體集合的內(nèi)部二進(jìn)制表示。如果字體集合未被緩存,則不返回字體集合,但是啟動下載。

字體緩存120將二進(jìn)制字體集合數(shù)據(jù)保存為文件,或保存為較大文件中的記錄。二進(jìn)制表示包括每個字體的具有對字體屬性的引用的記錄。二進(jìn)制表示還可以包括查找表,以使得能夠基于諸如姓氏等之類的屬性例如經(jīng)由哈希表查找或二進(jìn)制搜索快速找到字體。在一個或多個實施方式中,二進(jìn)制格式不直接暴露給應(yīng)用。取而代之,字體支持庫提供了枚舉字體、查找字體、得到字體屬性等等的方法。

作為二進(jìn)制格式的替換方案,字體緩存模塊118和字體緩存120可以將字體集合串行化為XML文件或類似格式,并且根據(jù)需要將其讀取到存儲器110中。或者,字體集合可以存儲在SQL數(shù)據(jù)庫或類似的東西中。在任一情況下,字體緩存模塊118作為單片(monolithic)共享存儲器對象不與字體支持庫一起共享字體集合。取而代之,字體支持庫可以將各個方法調(diào)用轉(zhuǎn)發(fā)到字體緩存模塊118,字體緩存模塊118返回結(jié)果。

對于每個緩存的字體文件,字體緩存模塊118創(chuàng)建包含字體數(shù)據(jù)的稀疏文件。該文件被劃分為固定大小的區(qū)塊,并且使用一些文件系統(tǒng)的特征來僅僅為所指定的區(qū)塊分配存儲。與字體數(shù)據(jù)本身分開,字體緩存模塊118分配被稱為區(qū)塊映射的位陣列。區(qū)塊映射包含字體中每個區(qū)塊的一個位。如果對應(yīng)的區(qū)塊是遠(yuǎn)程的,則每個位為0,并且如果對應(yīng)的區(qū)塊是本地的,則每個位為1。字體緩存模塊118可以將區(qū)塊映射附加到字體數(shù)據(jù),將其作為并行文件或流而存儲在字體數(shù)據(jù)旁邊,或者將所有區(qū)塊映射存儲為單個文件中的記錄。

當(dāng)字體緩存模塊118下載字體數(shù)據(jù)時,其首先將數(shù)據(jù)寫入到字體緩存120中的所緩存的文件,然后設(shè)置區(qū)塊映射中的對應(yīng)位。為了在斷電或其它突然終止的情況下確保數(shù)據(jù)完整性,可以小心地確保字體數(shù)據(jù)本身在對應(yīng)的區(qū)塊映射位之前被刷新到磁盤。在下載數(shù)據(jù)之后,字體緩存模塊118還(經(jīng)由字體支持庫)通知等待下載完成的任何應(yīng)用114。

字體支持庫通過向字體緩存模塊118發(fā)送消息來訪問字體數(shù)據(jù),并且取回用于所緩存的字體數(shù)據(jù)和區(qū)塊映射的只讀共享存儲器對象。這樣,字體支持庫可以有效地訪問字體數(shù)據(jù)和本地性信息而不復(fù)制數(shù)據(jù)。

還構(gòu)想了其它設(shè)計。例如,字體緩存模塊118可以使用文件范圍而不是區(qū)塊。取代了稀疏文件,字體緩存模塊118可以將新下載的范圍附加到文件,并且維護(hù)邏輯文件范圍到所緩存的文件偏移的映射。在這種情況下,字體支持庫可以通過將各個消息發(fā)送到字體緩存模塊118來讀取數(shù)據(jù),字體緩存模塊118將數(shù)據(jù)復(fù)制到緩沖器。

字體緩存模塊118可以采用技術(shù)來限制字體緩存120的增長。例如,字體緩存模塊118可以定義最大總大小,并且根據(jù)需要丟棄最近最少使用的字體文件以保持在該限制下。

字體下載隊列可以用于追蹤字體下載請求、字符下載請求和字形下載請求。字體下載隊列的內(nèi)容可以表示為在頂層具有字體文件的分層數(shù)據(jù)結(jié)構(gòu)。每個文件由其提供方ID和提供方定義的文件密鑰來標(biāo)識。對于每個文件,隊列記錄一組文件范圍和一組字體(每個都有自己的面部索引)。每個字體都有一組字符和一組字形ID。

當(dāng)應(yīng)用114發(fā)起下載時,字體隊列的內(nèi)容被分配給下載操作,并且隊列返回到空狀態(tài)。字體支持庫執(zhí)行下載操作并且可以指示完成。字體支持庫可以按順序或并行地下載隊列中的每個文件,如下:

1.如果文件頭不是本地的,下載它。檢查頭以確定字體格式(例如,OpenType集或TrueType集)。

2.對于文件中的每個所請求的字體,如果它不是本地的,則得到從頭開始算起的面部的偏移并且下載表目錄。

3.檢查表目錄,并且確定哪些表可以是稀疏的以及哪些表要完全下載。例如,可以假設(shè)glyf表是稀疏的,因為它典型地占TrueType字體中的80 %或更多的數(shù)據(jù)。該設(shè)計還可以擴(kuò)展到包含每字形數(shù)據(jù)的其它表。

4.下載已經(jīng)不是本地的每個非稀疏表。

5.將足以計算字符的字體解析為字形映射(cmap)和字形依賴性圖(見下文)。

6.將每個字符請求轉(zhuǎn)換為每cmap的字形請求。對于某些Unicode范圍(諸如阿拉伯文)內(nèi)的字符請求,表現(xiàn)為好像范圍中的每個字符都被請求。

7.對于每個字形請求,將請求添加到它可能取決于的任何其它字形ID,如字形依賴性圖所指定的。遞歸地進(jìn)行這個動作。

8.使用字體中的位置數(shù)據(jù)(例如,本地表)將字形請求轉(zhuǎn)換為字節(jié)范圍,并且按照并非已是本地的范圍來下載所請求的。

9.檢查每個新下載的字形以確定它是否為TrueType組合。如果是,則確保其組件字形也是本地的。組件字形本身可以是個組合,因此遞歸地這么做。

使用智能字符和字形緩存的字體流傳輸可以用于見機(jī)行事地下載在以給定字體渲染的給定組的字符(或字形)中可能涉及的字體數(shù)據(jù)。為此,文本布局模塊228可以考慮可以在生成布局230期間執(zhí)行的每個字形替代,加上可以在渲染顏色字形中涉及的任何字形替代。這樣,應(yīng)用114可以使用兩遍來繪制頁面以使一切都以正確的字體渲染。在第一遍中,一些字體或字符可以是遠(yuǎn)程的,使得發(fā)生回退并且字符下載請求被添加到隊列,如先前所描述的。然而,在第二遍中(在下載完成之后),用于渲染頁面的每個字形是本地的,并且沒有發(fā)生回退。

為了使得能夠進(jìn)行智能字形緩存,當(dāng)?shù)谝淮蜗螺d字體時,字體支持庫可以構(gòu)造字形依賴性圖。這發(fā)生在下載非稀疏表之后,并且用于構(gòu)造依賴性圖的每個表都是非稀疏的。字形依賴性圖由字體緩存120來緩存。

當(dāng)它可以直接或間接產(chǎn)出的字形中的每個字形是本地的時,字符被認(rèn)為是本地的。確保字符是本地的以使得當(dāng)?shù)搅藢嶋H使用它時不發(fā)生誤差,這涉及對文本布局進(jìn)程的知曉,因為存在單個字符可以取決于多種因素產(chǎn)生不同字形的點,諸如其相鄰字符是什么、讀取方向、是否支持顏色以及它是否是組合字形。因而,在經(jīng)過整形之后,單個字符可以變換成十幾種不同的可能性中的任一種可能性,特別是在應(yīng)用了OpenType特征的復(fù)雜字體(如Gabriola或Palatino)中。

如圖6的示例600所示出的,布局中的第一步是當(dāng)讀取方向顛倒(諸如RTL希伯來文)并且字符具有鏡像對時鏡像Unicode字符,諸如圓括號和括號,例如,“[] {}()”。然后,Unicode字符經(jīng)由cmap表映射到標(biāo)稱字形ID,或者如果變型選擇器跟在基本字符之后,則映射到特定變型,其對于像‘ ’之類的CJK字符是最常見的,但對于諸如“≥”數(shù)學(xué)運(yùn)算符也是可能的。

然后,整形(shaping)應(yīng)用來自GSUB表的每個上下文查找,由于連字、樣式集合、字形組合/分解、垂直替代和若干個其它特征而可能替代許多字形。如果是彩色字體,則可以使用COLR表將單個字形分成許多彩色字形流(run),以將基本字形id映射到分層字形組件的列表。組合字形被分成單獨的組件(對于CJK字符是常見的),盡管這是單獨處理的并且沒有在字形依賴性圖中考慮。

在概念上,形成依賴性示圖的字形依賴性的生成從每個字符開始并且遵循它可以被組成為字形的每種方式。這導(dǎo)致具有葉節(jié)點的有向非循環(huán)圖,葉節(jié)點可以被聚類為等同類別的依賴性列表,并且相同的所得字形ID可能出現(xiàn)在多于一個依賴性列表中,但每個標(biāo)稱字形僅具有一個依賴性列表。依賴性列表排除任何TrueType字形組件,因為那些在用于標(biāo)識組件字形ID的“glyf”表字形記錄被水合(hydrate)之前是無法知曉的。

因為存在有關(guān)字符也可以用于任何給定字符的可能性,所以下載進(jìn)程可以以比單個字符更大的粒度工作,而可以見機(jī)行事一次預(yù)先獲取整個Unicode塊。當(dāng)一些字母已經(jīng)存在并且相同語言文字的相鄰字母還沒有時,這可以用于避免所連接的語言文字(如阿拉伯文和梵文)中的瞬態(tài)情況,其可能暫時導(dǎo)致顯示未加入的文本,直到下載了新字符為止。對于像漢文和韓文那樣涉及成千上萬個字符的塊的更大的語言文字,請求粒度可以每字符保留,任何額外的字符被作為文件區(qū)塊大小的附帶后果而下載。

圖7中示出了創(chuàng)建依賴性示圖的示例700。對于字體中支持的每個字符,如果存在一個鏡像('['→'['']';'}'→'{"}'),則鏡像對被添加到給定字符的依賴性示圖中的依賴性列表,。然后,如果塊不是像CJK和表情符號之類的部分水合塊,則添加來自字符的Unicode塊的每個其它字符??梢灾赋?,在大多數(shù)實例中,因為鏡像對典型地在相同塊內(nèi)找到,所以步驟一可能變得多余。還有,因為下載整個塊可能不會自動地抓取在塊外部的這些常見的語言文字字符,所以可以添加一小組已知的特定于語言文字的字符,諸如用于阿拉伯文或敘利亞文的tatweel字符。

接著,獲得來自cmap的標(biāo)稱字形,以及任何其它變型。因為查找是比語言文字和語言更低級別的項并且邏輯附加在針對每個輸入和對應(yīng)的輸出字形的依賴性列表,所以枚舉了GSUB中的每個查找,其也隱式地枚舉每個語言文字和語言。

附加地,使用COLR表添加每個字形分解的顏色字形ID。然后,遞歸依賴性列表被展平為頂層映射,并且組合相同的列表。這產(chǎn)生將每個標(biāo)稱字形ID映射到依賴性列表的陣列,該依賴性列表是16位字形ID的有序列表。省略了具有單個輸出字形的任何依賴性列表,并且如果拖尾(trailing)字形ID是單個計數(shù)列表,則陣列大小可以小于字形計數(shù)。

還設(shè)想了其它示例。例如,可以省去智能字符和字形緩存,并且在這種情況下,字體下載隊列包含文件范圍請求,而非字符請求和字形請求。當(dāng)在文本格式化或渲染的普通過程中,字體支持庫嘗試讀取遠(yuǎn)程文件數(shù)據(jù)時,可以生成文件范圍請求。

示例系統(tǒng)和設(shè)備

圖8一般地在800處圖示了示例系統(tǒng),其包括表示可以實施本文中所描述的各種技術(shù)的一個或多個計算系統(tǒng)和/或設(shè)備的示例計算設(shè)備802。這通過包括字體管理器模塊122、字體提供方模塊116和字體緩存模塊118來圖示。計算設(shè)備802可以例如是服務(wù)提供方的服務(wù)器、與客戶端(例如,客戶端設(shè)備)相關(guān)聯(lián)的設(shè)備、片上系統(tǒng)和/或任何其它合適的計算設(shè)備或計算系統(tǒng)。

如所圖示的示例計算設(shè)備802包括彼此通信地耦接的處理系統(tǒng)804、一個或多個計算機(jī)可讀媒體806和一個或多個I/O接口808。盡管未示出,但是計算設(shè)備802還可以包括將各種組件彼此耦接的系統(tǒng)總線或其它數(shù)據(jù)和命令傳遞系統(tǒng)。系統(tǒng)總線可以包括不同總線結(jié)構(gòu)中的任一個或組合,諸如存儲器總線或存儲器控制器、外圍總線、通用串行總線和/或利用多種總線架構(gòu)中的任一種總線架構(gòu)的處理器或局部總線。還設(shè)想了多種其它示例,諸如控制線和數(shù)據(jù)線。

處理系統(tǒng)804表示使用硬件執(zhí)行一個或多個操作的功能性。因而,處理系統(tǒng)804被圖示為包括可以被配置為處理器、功能塊等等的硬件元件810。這可以包括以硬件實施為使用一個或多個半導(dǎo)體形成的專用集成電路或其它邏輯器件。硬件元件810不受形成它們的材料或其中采用的處理機(jī)制的限制。例如,處理器可以由一個或多個半導(dǎo)體和/或晶體管(例如,電子集成電路(IC))構(gòu)成。在這種上下文中,處理器可執(zhí)行指令可以是電子可執(zhí)行指令。

計算機(jī)可讀存儲媒體806被圖示為包括存儲器/存儲裝置812。存儲器/存儲裝置812表示與一個或多個計算機(jī)可讀媒體相關(guān)聯(lián)的存儲器/存儲裝置容量。存儲器/存儲裝置組件812可以包括易失性媒體(諸如隨機(jī)存取存儲器(RAM))和/或非易失性媒體(諸如只讀存儲器(ROM)、閃存、光盤、磁盤等等)。存儲器/存儲裝置組件812可以包括固定媒體(例如,RAM、ROM、固定硬盤驅(qū)動器等等)以及可移除媒體(例如,閃存、可移除硬盤驅(qū)動器、光盤等等)。計算機(jī)可讀媒體806可以以如下文進(jìn)一步所描述的多種其它方式配置。

一個或多個輸入/輸出接口808表示允許用戶向計算設(shè)備802錄入命令和信息并且還允許使用各種輸入/輸出設(shè)備向用戶和/或其它組件或設(shè)備呈現(xiàn)信息的功能性。輸入設(shè)備的示例包括鍵盤、光標(biāo)控制設(shè)備(例如,鼠標(biāo))、麥克風(fēng)、掃描儀、觸摸功能性(例如,電容傳感器或被配置成檢測物理觸摸的其它傳感器)、相機(jī)(例如,其可以采用可見或不可見波長(諸如紅外頻率)來辨識不涉及觸摸的作為手勢的移動)等等。輸出設(shè)備的示例包括顯示設(shè)備(例如,監(jiān)視器或投影儀)、揚(yáng)聲器、打印機(jī)、網(wǎng)卡、觸覺響應(yīng)設(shè)備等等。因此,計算設(shè)備802可以以如下文進(jìn)一步所描述的多種方式配置,以支持用戶交互。

在本文中可以在軟件、硬件元件或程序模塊的一般上下文中對各種技術(shù)進(jìn)行描述。通常,這樣的模塊包括執(zhí)行特定任務(wù)或?qū)嵤┨囟ǔ橄髷?shù)據(jù)類型的例程、程序、對象、元件、組件、數(shù)據(jù)結(jié)構(gòu)等等。如本文中所使用的術(shù)語“模塊”、“功能性”和“組件”通常表示軟件、固件、硬件或其組合。本文中所描述的技術(shù)的特征是平臺無關(guān)的,意味著可以在具有多種處理器的多種商業(yè)計算平臺上實施這些技術(shù)。

所描述的模塊和技術(shù)的實施方式可以存儲在某種形式的計算機(jī)可讀媒體上或跨越某種形式的計算機(jī)可讀媒體傳送。計算機(jī)可讀媒體可以包括可以由計算設(shè)備802訪問的多種媒體。作為示例而非限制,計算機(jī)可讀媒體可以包括“計算機(jī)可讀存儲媒體”和“計算機(jī)可讀信號媒體”。

“計算機(jī)可讀存儲媒體”是指與純粹的信號傳輸、載波或信號本身相比,能夠使得進(jìn)行信息的持久存儲和/或非暫態(tài)存儲的媒體和/或設(shè)備。因此,計算機(jī)可讀存儲媒體是指非信號承載媒體。計算機(jī)可讀存儲媒體包括諸如易失性和非易失性、可移除和不可移除媒體和/或存儲設(shè)備之類的硬件,其以適合于存儲諸如計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、邏輯元件/電路或其它數(shù)據(jù)之類的信息的方法或技術(shù)實施。計算機(jī)可讀存儲媒體的示例可以包括但不限于RAM、ROM、EEPROM、閃存或其它存儲器技術(shù)、CD-ROM、數(shù)字通用盤(DVD)或其它光學(xué)存儲器、硬盤、磁帶盒、磁帶、磁盤存儲裝置或其它磁性存儲設(shè)備、或其它存儲設(shè)備、有形媒體、或適合于存儲所期望的信息并且可由計算機(jī)訪問的制品。

“計算機(jī)可讀信號媒體”可以是指被配置成諸如經(jīng)由網(wǎng)絡(luò)向計算設(shè)備802的硬件傳輸指令的信號承載媒體。信號媒體典型地可以在諸如載波、數(shù)據(jù)信號或其它傳輸機(jī)制之類的經(jīng)調(diào)制的數(shù)據(jù)信號中體現(xiàn)計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)。信號媒體還包括任何信息遞送媒體。術(shù)語“經(jīng)調(diào)制的數(shù)據(jù)信號”意指使得以在信號中編碼信息的方式設(shè)置或改變其一個或多個特性的信號。作為示例而非限制,通信媒體包括諸如有線網(wǎng)絡(luò)或直接有線連接之類的有線媒體以及諸如聲學(xué)、RF、紅外和其它無線媒體之類的無線媒體。

如先前所描述的,硬件元件810和計算機(jī)可讀媒體806表示以硬件形式實施的模塊、可編程設(shè)備邏輯和/或固定設(shè)備邏輯,其可以在一些實施例中用于實施本文中所描述的技術(shù)中的至少一些方面,諸如以執(zhí)行一個或多個指令。硬件可以包括集成電路或片上系統(tǒng)、專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)、復(fù)雜可編程邏輯器件(CPLD)和硅或其它硬件中的其它實施方式的組件。在這種上下文中,硬件可以作為執(zhí)行由由硬件體現(xiàn)的指令和/或邏輯所定義的程序任務(wù)的處理設(shè)備以及用來存儲用于執(zhí)行的指令的硬件(例如,先前所描述的計算機(jī)可讀存儲媒體)來操作。

前述的組合也可以用于實施本文中所描述的各種技術(shù)。因而,軟件、硬件或可執(zhí)行模塊可以被實施為在某種形式的計算機(jī)可讀存儲媒體上體現(xiàn)的和/或由一個或多個硬件元件810體現(xiàn)的一個或多個指令和/或邏輯。計算設(shè)備802可以被配置成實施對應(yīng)于軟件和/或硬件模塊的特定指令和/或功能。因而,可由計算設(shè)備802作為軟件執(zhí)行的模塊的實施方式可以至少部分地以硬件實現(xiàn),例如,通過使用處理系統(tǒng)804的計算機(jī)可讀存儲媒體和/或硬件元件810。指令和/或功能可以由一個或多個制品(例如,一個或多個計算設(shè)備802和/或處理系統(tǒng)804)執(zhí)行/操作以實施本文中所描述的技術(shù)、模塊和示例。

如圖8中進(jìn)一步所圖示的,當(dāng)在個人計算機(jī)(PC)、電視設(shè)備和/或移動設(shè)備上運(yùn)行應(yīng)用時,示例系統(tǒng)800能夠?qū)崿F(xiàn)無縫的用戶體驗普遍存在的環(huán)境。在利用應(yīng)用、播放視頻游戲、觀看視頻等等的同時,從一個設(shè)備到下一設(shè)備轉(zhuǎn)變時,服務(wù)和應(yīng)用在所有三個環(huán)境中基本上類似地運(yùn)行以獲得共同的用戶體驗。

在示例系統(tǒng)800中,多個設(shè)備通過中央計算設(shè)備互連。中央計算設(shè)備可以在多個設(shè)備的本地,或者可以位于遠(yuǎn)離多個設(shè)備的地方。在一個實施例中,中央計算設(shè)備可以是通過網(wǎng)絡(luò)、因特網(wǎng)或其它數(shù)據(jù)通信鏈路連接到多個設(shè)備的一個或多個服務(wù)器計算機(jī)的云。

在一個實施例中,該互連架構(gòu)使得能夠跨越多個設(shè)備遞送功能性,以向多個設(shè)備的用戶提供共同且無縫的體驗。多個設(shè)備中的每個設(shè)備可以具有不同的物理要求和能力,并且中央計算設(shè)備使用平臺來使得能夠向設(shè)備遞送針對設(shè)備定制而對于所有設(shè)備是也共同的體驗。在一個實施例中,創(chuàng)建一類目標(biāo)設(shè)備,并且為該通用類設(shè)備定制體驗。一類設(shè)備可以由物理特征、使用類型或設(shè)備的其它共同特點來定義。

在各種實施方式中,計算設(shè)備802可以采取多種不同的配置,諸如用于計算機(jī)814、移動裝置816和電視818的使用。這些配置中的每個配置包括可以具有通常不同的構(gòu)造和能力的設(shè)備,并且因此可以根據(jù)不同設(shè)備類別中的一個或多個設(shè)備類別來配置計算設(shè)備802。比如,計算設(shè)備802可以被實施為包括個人計算機(jī)、臺式計算機(jī)、多屏計算機(jī)、膝上型計算機(jī)、上網(wǎng)本等在內(nèi)的計算機(jī)814的設(shè)備類別。

計算設(shè)備802還可以被實施為包括諸如移動電話、便攜式音樂播放器、便攜式游戲設(shè)備、平板計算機(jī)、多屏計算機(jī)等等之類的移動設(shè)備在內(nèi)的移動裝置816的設(shè)備類別。計算設(shè)備802還可以被實施為包括在休閑觀看環(huán)境中具有或連接到通常較大屏幕的設(shè)備在內(nèi)的電視818的設(shè)備類別。這些設(shè)備包括電視、機(jī)頂盒、游戲控制臺等。

本文中所描述的技術(shù)可以由計算設(shè)備802的這些各種配置來支持,并且不限于本文中所描述的技術(shù)的具體示例。該功能性還可以經(jīng)由如下文所描述的平臺822全部或部分通過使用分布式系統(tǒng)來實施,諸如通過“云”820。

云820包括和/或表示用于資源824的平臺822。平臺822抽象云820的硬件(例如,服務(wù)器)和軟件資源的底層功能性。資源824可以包括可以在遠(yuǎn)離計算設(shè)備802的服務(wù)器上執(zhí)行計算機(jī)進(jìn)程的同時利用的應(yīng)用和/或數(shù)據(jù)。資源824還可以包括在因特網(wǎng)上和/或通過諸如蜂窩或Wi-Fi網(wǎng)絡(luò)之類的訂戶網(wǎng)絡(luò)提供的服務(wù)。

平臺822可以抽象用于將計算設(shè)備802與其它計算設(shè)備連接的資源和功能。平臺822還可以用來抽象資源的規(guī)模以針對所遇到的經(jīng)由平臺822所實施的資源824的需求提供對應(yīng)的規(guī)模水平。因而,在互連設(shè)備實施例中,本文中所描述的功能性的實施可以分布在整個系統(tǒng)800中。例如,該功能性可以部分地在計算設(shè)備802上實施以及經(jīng)由抽象云820的功能性的平臺822來實施。

結(jié)論

盡管已經(jīng)以特定于結(jié)構(gòu)特征和/或方法動作的語言描述了示例實施方式,但是要理解的是,所附權(quán)利要求中定義的實施方式不一定限于所描述的具體特征或動作。相反,這些具體特征和動作被公開為實施所要求保護(hù)的特征的示例形式。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1