Advanced text editor

A system includes a computing device that includes a memory configured to store instructions. The computing device also includes a processor to execute the instructions to perform operations that include receiving information that represents a font and a portion of textual content of an asset. Operations also include identifying one or more typographical features supported by a scalable font format that are capable of being applied to the portion of the textual content based upon the received information representing the font and the portion of textual content of the asset. Operations also include presenting, by the computing device, an exclusive set of selectable representations. Each of the selectable representations represents one of the one or more identified typographical features supported by the scalable font format for initiating application of the corresponding typographical feature to the textual content of the asset.

BACKGROUND

This description relates to advanced text editors, which may use scalable fonts.

In the ever-expanding connectivity and information sharing capabilities provided by computing devices, computer networks (e.g., the Internet) etc., various types of assets (e.g., electronic documents) such as web assets (e.g., websites, webpages, etc.) have been developed to assist with the transfer of information. Along with the almost explosive development of such assets, the content being presented by such assets has similarly grown. Text, audio, video, etc. is being incorporated into assets such as web assets to provide a more efficient and enjoyable viewing experience. For example, different languages, imagery, etc. may be included in assets to tailor content for characteristics of a viewer such as their geographical location. However, providing such rich content does not come without some constraints. For example, creating the content for such assets may appear difficult for developers unfamiliar with the variety of possible content and presentation styles.

SUMMARY

The systems and techniques described here relate to content editing applications and tools (referred to as an editor in this disclosure) capable of supporting typographical features of an asset (e.g., an electronic document, a website, webpage, etc.) represented in a scalable font format (e.g., an OpenType font format). Along with presenting the supported typographical features for creating and adjusting asset content, suggestions may be provided by the editor to assist a user in becoming more versed in the variety of features. Being presented such suggestions, users can be introduced to the variety of features that otherwise may not have been utilized or even discovered. Further, needing minimal user interaction, such as only calling for a particular font and/or portion of content (e.g., a character, word, passage, etc.) to be selected, users can quickly experience the different types of features without undue burden. Along with presenting content with such features applied, other data may also be created by the editor, for example, instructions, data files, etc. may be produced for representing the created content in one or more assets (e.g., an electronic document, website, webpage, etc.).

In one aspect, a computer-implemented method includes receiving information that represents a font and a portion of textual content of an asset. The method also includes identifying one or more typographical features supported by a scalable font format that are capable of being applied to the portion of the textual content based upon the received information representing the font and the portion of textual content of the asset. The method also includes presenting, by a computing device, an exclusive set of selectable representations. Each of the selectable representations represents one of the one or more identified typographical features supported by the scalable font format for initiating application of the corresponding typographical feature to the textual content of the asset.

Implementations may include one or more of the following features. The font may be selected through interactions with an editor. The portion of textual content may be selected through interactions with an editor. The exclusive set of selectable representations may be visually highlighted. A portion of the editor may executed by the computing device. A portion of the editor may be executed remote from the computing device. A portion of the editor may be executed by the computing device and remote from the computing device. The one or more typographical features supported by a scalable font format may be OpenType compatible. The method may include producing one or more files that include instructions for representing the one or more typographical features supported by the scalable font format applied to the textual content. The method may include presenting another set of selectable representations, each representing a variant of one of the one or more identified typographical features supported by the scalable font format for selecting a particular variant of the corresponding typographical feature.

In another aspect, a system includes a computing device that includes a memory configured to store instructions. The computing device also includes a processor to execute the instructions to perform operations that include receiving information that represents a font and a portion of textual content of an asset. Operations also include identifying one or more typographical features supported by a scalable font format that are capable of being applied to the portion of the textual content based upon the received information representing the font and the portion of textual content of the asset. Operations also include presenting, by the computing device, an exclusive set of selectable representations. Each of the selectable representations represents one of the one or more identified typographical features supported by the scalable font format for initiating application of the corresponding typographical feature to the textual content of the asset.

Implementations may include one or more of the following features. The font may be selected through interactions with an editor. The portion of textual content may be selected through interactions with an editor. The exclusive set of selectable representations may be visually highlighted. A portion of the editor may executed by the computing device. A portion of the editor may be executed remote from the computing device. A portion of the editor may be executed by the computing device and remote from the computing device. The one or more typographical features supported by a scalable font format may be OpenType compatible. The processor may execute instructions to perform operations that include producing one or more files that include instructions for representing the one or more typographical features supported by the scalable font format applied to the textual content. The processor may execute instructions to perform operations that include presenting another set of selectable representations, each representing a variant of one of the one or more identified typographical features supported by the scalable font format for selecting a particular variant of the corresponding typographical feature.

In another aspect, one or more computer readable media storing instructions that are executable by a processing device, and upon such execution cause the processing device to perform operations that include receiving information that represents a font and a portion of textual content of an asset. Operations also include identifying one or more typographical features supported by a scalable font format that are capable of being applied to the portion of the textual content based upon the received information representing the font and the portion of textual content of the asset. Operations also include presenting, by a computing device, an exclusive set of selectable representations. Each of the selectable representations represents one of the one or more identified typographical features supported by the scalable font format for initiating application of the corresponding typographical feature to the textual content of the asset.

Implementations may include one or more of the following features. The font may be selected through interactions with an editor. The portion of textual content may be selected through interactions with an editor. The exclusive set of selectable representations may be visually highlighted. A portion of the editor may executed by the computing device. A portion of the editor may be executed remote from the computing device. A portion of the editor may be executed by the computing device and remote from the computing device. The one or more typographical features supported by a scalable font format may be OpenType compatible. Execution may cause the processing device to perform operations that include producing one or more files that include instructions for representing the one or more typographical features supported by the scalable font format applied to the textual content. Execution may cause the processing device to perform operations that include presenting another set of selectable representations, each representing a variant of one of the one or more identified typographical features supported by the scalable font format for selecting a particular variant of the corresponding typographical feature.

These and other aspects and features and various combinations of them may be expressed as methods, apparatus, systems, means for performing functions, program products, and in other ways.

Other features and advantages will be apparent from the description and the claims.

DETAILED DESCRIPTION

Referring toFIG. 1, many types of computing devices are capable of presenting various types of graphical content such as text, images, video, etc. To present text and similar graphics, various types of font families (e.g., Times New Roman, Arial, etc.) may be used that typically include a set of fonts, e.g., regular, italic, bold, bold italic, etc. Each font generally includes a set of individual character shapes called glyphs and the glyphs generally share various design features (e.g., geometry, stroke thickness, serifs, size, etc.) associated with the font. One or more techniques may be utilized for representing such fonts; for example, outline-based representations may be adopted in which lines and curves are used to define the contours of glyphs. Such fonts may be scalable to produce text rendered in a variety of sizes (e.g., for rending by various types of computing devices) and may be represented in one or more formats. For example, scalable outline fonts may be represented in a format that includes data structures capable of supporting a variety of typographic visual symbols of many languages. OpenType is one such format capable of defining a number of typographical features that one or more scalable computer fonts may support. Features may include, for example, providing a typographical flourish on a glyph (referred to as a swash), two or more graphemes joined as a single glyph (referred to as a ligature), representing fractions as a single character (e.g., ½), etc. Formats such as the OpenType may also support typographical features that provide contextual alternatives to a character, word, phrase, etc. For example, rather than presenting the character “I” in the phrase “I caught a lovely silver fish”, a graphical alternative “” may be inserted into the phrase to read “caught a lovely silver fish”. Subscripting and superscripting, variants on capital letters (e.g., small versions of capital letters) etc. may also be supported by formats (such as OpenType) for scalable fonts.

Some computing devices, operating systems and software applications may or may not be capable of supporting advanced typographical features for scalable computer fonts. In this illustrated example, a computing device100(e.g., computer system) is executing an asset presenter102(e.g., an application, a web browser, etc.) to present content (e.g., an electronic document, a web page, a website, etc.) locally created or provided from one or more sources (e.g., a stored filed, transmitted over the Internet, etc.). In this situation, the asset presenter102does support OpenType fonts and is able to present content using typographical features provided by OpenType fonts. For example, a single character of the ligature “fi”104is presented on a display106of the computing device100rather than being presented as two individual characters “f” and “i”. Prior to being presented, the ligature “fi”104is created to appear as a single character. For example, an editor may be executed, accessed, etc. by the computing device100for creating such a content presentation. However, users of such computing devices may not be very familiar with the use of ligatures and other types of typographical features and lack experience in using such features along with the basic look and feel of the features. Additionally, along with using such features for creating content (e.g., text), incorporating such rich content by adjusting such assets (e.g., electronic documents, webpages, websites, etc.) may prove difficult for users lacking expertise.

Referring toFIG. 2, a scalable font editor108is executed by the computing device100for creating content that utilizes typographical features of a scalable computer font in a format such as OpenType. In this arrangement, the executed editor108provides a user interface110that allows users to educate themselves about such typographical features along with creating, adjusting, etc. such visually rich content for incorporation into one or more assets (e.g., electronic documents, webpages, websites, etc.). In this particular example, the scalable font editor108resides on the computing device (e.g., a hard drive, etc.) and is executed by the computing device. However, other arrangements may be used for presenting such an editor on the display of a computing device. For example, one or more network environments may be used for providing the user interface110on the computing device. For one architecture, the functionality of such as editor may be provided by one or more remotely located computing devices and a user interface (e.g., user interface110) may be provided over the Internet (or other type of network or networks). In some arrangements, operations executed both locally (by one computing device) and remotely (by one or more other computing devices). Such user interfaces may be provided as a service of a font service provider for developers to create and edit assets. Along with providing such functionality for creating and adjusting assets, the presented user interface may assist users (e.g., asset developers) in discovering different OpenType font features supported by a font without previously having an extensive knowledge in such features. For example, based upon the font being used to create an asset, corresponding OpenType features supported by that particular font may be presented by the user interface110. Further, based upon the particular content to be presented (e.g., a character, word, phrase, etc.), particular OpenType features capable of representing the content may be presented by the user interface110. For example, by selecting three adjacent characters being used to represent a fraction (e.g., “½”), the user may be alerted that a single character OpenType feature (e.g., “½”) may be used to represent the fraction. Being presented such information, users may become more aware of OpenType features along with situations in which the features are supported and the options for using such features.

As mentioned, such advanced editors may be implemented as a stand-alone application (e.g., for assisting with the production of products such as e-books), implemented by using one or more networks (e.g., for providing a cloud-based application), etc. Software agent technology may also be utilized. In some arrangements the scalable font editor108may operate with the assistance of one or more software agents resident at the computing device100. For example, the scalable font editor108may be presented through an application (e.g., a web browser) that may or may not support OpenType fonts and one or more software agents may provide information to the site where the scalable font editor108is executed (e.g., a remotely located font service provider). Such agents can be considered as a software module that may be executable in a substantially autonomous manner. Implementations of such software agents may utilize the systems and techniques described in U.S. patent application Ser. No. 13/672,992, entitled “Supporting Scalable Fonts” and filed 9 Nov. 2012, the entirety of which is incorporated by reference herein.

Referring toFIG. 3, various types of user interfaces may be implemented for creating and editing content to incorporate features such as OpenType font features. A user interface300is presented in the figure that provides supported OpenType features based upon user selections. For example, based upon the particular font selected by the user, graphical representations are presented in the user interface300to alert the user to the supported OpenType features. In this example, a font selection (i.e., “Avenir Next W04 Bold”) from a drop down menu is represented in a field302. In some arrangements, once a font is selected one or more operations may be executed. For example, buttons present on the user interface300may be reset and information associated with the selected font may be retrieved (e.g., an application program interface (API) may offer tools to retrieve data about supported font features and generate Javascript files associated with the selected font) regarding OpenType features supported by the selected font. The user interface300also includes other fields for presenting user-selected parameters of the selected font (e.g., size, line height, alignment, etc.) and for selecting styles for the font (e.g., color, underlining characters, etc.). In some arrangements, the user interface may provide access to a format painter for selecting OpenType features applicable to a particular portion of text (e.g., character, word, passage, etc.). Based upon the selected font (e.g., “Avenir Next W04 Bold”), the editor being executed (e.g., a locally executed editor such as scalable font editor108) determines which OpenType features are supported by the selected font. One or more techniques may be implemented for such determinations. For example, information from one or more tables associated with the selected font may be utilized. Such tables may be used for mapping information that identifies a character (e.g., represented by a character code) and the particular glyph to be presented (e.g., represented by a glyph index). For example, a character to glyph index mapping table (cmap) may be used that maps between character codes and glyph indices. One or more tables may also be used that include information for substituting glyphs such as a glyph substitution table (GSUB), for example, to allow one or more glyph indices of a cmap table to be mapped to one or more indices representing glyph substitutes. Such tables and the corresponding information may be presented in a variety of formats, for example, the table information may be attained from one or more font files or compiled and represented as an executable module (e.g., a JavaScript file) that implements logic (e.g., rules) defined by the font tables.

In this particular example, upon determining the OpenType features supported by the selected font (shown in field302), a group of graphical icons304are presented on the user interface300to represent the supported features. Graphical icons that represent unsupported features are generally hidden and not presented on the user interface. As such, only a set of icons that correspond to supported features are exclusively presented for user selection. In this particular example, twelve icons are included in the group of icons304, however more or less icons may be presented based upon the selected font. The user interface300also includes a pane306for textual content to be entered (e.g., by a user) for potentially applying one or more of the OpenType features supported by the selected font. For illustration, a string of text (i.e., “The quick brown fox jumps over the lazy dog. ½ ¾”) is presented in the user-entry pane306. To present features being applied to the entered text, the user interface300also includes a preview pane308. Continuing with the illustrated example, the string of text entered into field306is presented in the selected font in the preview pane308(i.e., in the font “Avenir Next W04 Bold”). In this illustrated example, none of the icons included in the group of icons304have been selected for applying a font feature to the user-entered text (shown in pane306). However, if one or more of the icons is selected, corresponding features would be applied to the text of pane306and the resulting text would be presented in preview pane308.

Similar to using a selected font to identify potentially applicable OpenType features, other types of information may be used for identifying the features. For example, the textual content (to which features may be applied) may be used for feature identification. By reviewing the content from particular characters, character combinations, etc., potential OpenType features may be identified. For example, detecting the character “f” followed by the character “i”, the editor (e.g., the scalable font editor108) may determine that a single-character ligature “fi” may be present and an OpenType ligature feature could potentially be applied to the text. In some arrangements, combinations of information may be used for feature identification. For example, both the selected font and content of the text may be used for identifying OpenType features that may be applied to the text.

Once the textual content is being presented (e.g., in preview pane308) with a desired visual effect (e.g., one or more OpenType features are applied), one or more representations of the content may be produced. In one arrangement, code may be produced upon the user selecting a button310(e.g., labeled “View Code”) included in the user interface300. Such generated code may be provided in one or more formats, for example, code may be provided in a hypertext markup language (HTML) that includes instructions for presenting the textual content with the applied OpenType font features (as shown in preview pane308). Code may also be provided for a cascading style sheet (CSS) that provides presentation semantics for the textual content (e.g., provided by HTML). For instances in which multiple OpenType font features are applied, files may be produced for each applied feature. For example, an HTML, CSS, Javascript file, etc. may be produced for each applied feature. Along with providing possible OpenType font features to apply to text based on a selected font, other information may be used for determining which features may possibly be applied to textual content. For example, a selected portion of text may be used in the feature determination.

Referring toFIG. 4, the user interface300is presented and includes the pane306holding the text content entered by the user (e.g., through manual entry, from a selected file, another executed application, etc.). Based upon the selected font (displayed in field302), the collection of icons304represents the OpenType font features that may be applied to the text present in the pane306. Potential OpenType font features, which may be applied to text, may also be identified based upon other information. For example, the textual content may be used for determining which OpenType font features may potentially be applied. In one scenario, a feature for presenting a fraction as a single character may be identified as being available if appropriate text is present, has been selected, etc. (e.g., a sequence of characters such as “1”, “/” and “2” or “3”, “/” and “4”). In this particular example, a dashed box400highlights a single word (“dog”) as being selected by a user (e.g., from operations of a pointing device such as a mouse). Once selected, the scalable font editor108uses the selected text to determine which potential OpenType font feature or features are capable of being applied to the selected text. For demonstrative purposes, based upon the word selection (highlighted by the dashed box400), other dashed boxes402,404,406respectively highlight and identify OpenType features that may be applied to the selection. Various techniques may be used for highlighting the icon of the possible features (e.g., colors, patterns, etc. may be used to alert the user). In this example, the icon highlighted by dashed box402corresponds to the OpenType feature of representing the selected text in small versions of capital letters while the icon highlighted by dashed box404represents superscripting characters and the icon highlighted by dashed box406represents capitalizing characters. Once the user indicates which OpenType feature to apply (e.g., by selecting from the one or more icons corresponding to available features), the selected text is adjusted and presented in the preview pane308. In this particular example, the small capital letter features has be selected (e.g., by selecting the icon highlighted by dashed box402) and a corresponding representation408of the selected word (i.e., “dog”) is presented in the preview pane308. Three icons are highlighted in this example to indicate that they may be selected while the remaining icons (nine icons) are visually adjusted (e.g., not highlighted) to indicate that they are not selectable. Various techniques may be implemented to visually “down play” the icons representing OpenType features that are not selectable. In some arrangements, the editor (e.g., the scalable font editor108) may remove the icons from the group of icons304so the user is not distracted by icons representing non-selectable OpenType features. As such, an exclusive set of icons may be presented that represent only the applicable features based upon textual content, textual content and the selected font, etc.

In this illustrated example, a selected font (e.g., “Avenir Next W04 Bold”) was used to initially determine which OpenType font features would be available for being applied to text. Once a portion of the text was selected (e.g., the word “dog”), a subset of the available OpenType font features is identified from the previously identified font features. In some arrangements, font selection and textual content may be used in concert to identifying OpenType features. For example, particular features may be identified based upon the selected font and characters, combinations of characters (e.g., ligatures), etc. present in selected text. Similarly, entered text (e.g., entered into the pane306) may be utilized for identifying OpenType features. Application of such features may be reversed through operations with the user interface300. For example, by de-selecting a selected icon (e.g., de-select the icon highlighted by dashed box402), the corresponding OpenType feature may be removed from the selection (e.g., the selected word “dog”). Multiple features may also be applied, for example, after selecting the icon to apply one feature (e.g., select the icon highlighted by dashed box402) another icon may be selected (e.g., the icon highlighted by dashed box404) to apply a second feature (e.g., superscripting the characters of the selected text).

Referring toFIG. 5, to assist with determining which available OpenType font feature or features to select, suggestions may be provided by the user interface. Along with helping with selections, such suggestions may assist users (e.g., developers) in becoming more familiar with the different types of font features, educate users on how the features map to different types of textual content, etc. In some arrangements suggestions may be provided once the user has made a selection (e.g., selected a particular font, selected a portion of text, etc.), text has been entered (e.g., into pane306), etc. As illustrated in the figure, suggestions may be provided once the user has made a selection (e.g., selected a particular font, selected a portion of text, etc.), text has been entered (e.g., in to the pane306), etc. In this example, the user has again selected one font (i.e., “Avenir Next W04 Bold”) as presented in the field302and a particular word (i.e., “dog”) from the pane306as indicated with the dashed-box400. Based upon the selections, the OpenType font features available for application to the text are indicated by the three icons (highlighted by the corresponding dashed-boxes402,404,406) within the group of icons304. To present suggestions of the available features, the user interface300includes a graphical button500that is user selectable. For demonstration, if the button500is selected by the user in this situation, the user interface300is expanded in height and three suggestions are presented that correspond to the three available OpenType font features highlighted by the dashed boxes402,404,406. As shown by the user interface300, one selectable button502is presented that illustrates the application of changing lower-case letters to capital letters, which corresponds to the icon highlighted by dashed box406. Next, a suggestion is provided by a selectable button504that illustrates the application of changing each letter into a small version of a capital letter, which corresponds to the icon highlighted by the dashed box402. As a third suggestion, a selectable button506is presented that illustrates the application of superscripting (e.g., superscripting the second letter of the text) that corresponds to the icon highlighted by the dashed box404. By selecting one of the buttons502,504,506, the corresponding OpenType font feature may be applied to the text (e.g., entered into the pane306) and presented (e.g., in the preview pane308) for inspection by the user. In this particular example, the third suggestion is illustrated as being selected by the user and a corresponding representation508of the OpenType font feature (i.e., superscripting of the second character) is presented in the preview pane308.

Along with providing suggestions that use selected text (e.g., the term “dog”), other type of information may be provide by the interface300based on the available OpenType features. Available features may be tailored based upon selecting from options presented on the interface300. In one arrangement, multiple variants may be associated with a particular OpenType feature and the interface300may assist the user with selecting one of the variants for applying the feature. For example, multiple graphical selections may be presented by the interface300that represent different shapes for a typographical flourish (known as a swash). By selecting one of the presented shapes, the user indicates which shape should be used when a swash OpenType feature is applied. Similar to applying the features, application of a feature may be removed by de-selecting the corresponding button (e.g., deselecting button506removes the superscripting feature from the representation presented in preview pane308). In some arrangements, a button510may be provided for clearing the preview pane308. As described with respect toFIG. 2, once the text is displayed in the preview field308as directed by the user, the button310may be selected for producing code (e.g., for an HTML file, a CSS file, etc.) that may be used for presenting the feature-applied text at a later time.

Referring toFIG. 6, a flowchart600represents operations of a scalable font editor (e.g., the scalable font editor108shown inFIG. 2). Operations of the scalable font editor are typically executed by a single computing device (e.g., the computing device100also shown inFIG. 2); however, operations of the scalable font editor may be executed by multiple computing devices. Along with being executed at a single site (e.g., a client site, a font service provider, etc.), operation execution may be distributed among two or more locations (e.g., at a font service provider).

Operations of the scalable font editor may include receiving602information that represents a font and a portion of textual content of an asset. For example, through a user interface a selection may be made that indicates a particular font and a portion of text (e.g., a character, word, passage, etc.) included in an asset (e.g., an electronic document, a website, a web page, etc.). Selections may include other information, other combinations of selections associated with the textual content of an asset, etc. Operations also include identifying604one or more typographical features supported by a scalable font format that are capable of being applied to the portion of the textual content based upon the received information representing the font and the portion of textual content of the asset. For example, based upon the selected font and text, one or more OpenType features may be identified that can potentially be applied to the text. For example, particular characters in the text (e.g., an “f” followed by and “i”) can indicate that a ligature may be present in the text and a ligature OpenType feature should be identified and made available for presenting the text. Similar, based upon the selected font, one or more OpenType features can be identified. Operations may also include presenting606, by a computing device, an exclusive set of selectable representations. Each of the selectable representations represents one of the one or more identified typographical features supported by the scalable font format for initiating application of the corresponding typographical feature to the textual content of the asset. For example, once the OpenType features are identified based upon the selected font and selected text, a group of selectable icons may be presented that represent each of the identified features. The selectable icons may be exclusive to only represent the OpenType features that are available for application to the text of the asset. As such, the user would not be distracted or confused by icons that represent other OpenType features that are not available for application to the text of the asset.

FIG. 7is a block diagram showing an example of a system700for providing hosted storage and accessing the hosted storage from a client device702. In some implementations, a hosted storage service720may provide access to stored data (e.g., OpenType font features) by one or more applications being executed at the service (e.g., a scalable editor executed remote for the client device702), one or more applications being executed at the client device702(e.g., web browsers, scalable font editors, etc.), one or more applications being executed in a distributed manner at multiple locations (e.g., at the client device702and the site of the service), etc. Service functionality associated with the stored data (e.g., OpenType font features) may also include providing offsite data backup and restore functionality, provide data storage to a computing device with limited storage capabilities, and/or provide storage functionality not implemented on a computing device.

The system700may provide scalable stores for storing data resources. The client device702may upload data resources to the hosted storage service720and control access to the uploaded data resources. Access control may include a range of sharing levels (e.g., private, shared with one or more individuals, shared with one or more groups, public, etc.). Data stored in hosted storage service720can be secured from unauthorized access. The hosted storage service720can use a simple and consistent application programming interface, or API, which can allow arbitrary quantities of structured or unstructured data to be kept private or shared between individuals, organizations, or with the world at large. The client device702may access, retrieve, be provided, store, etc. data in the hosted storage service720for any number of a variety of reasons. For example, data may be stored for business reasons (e.g., provide identification information to attain access clearance for OpenType font features at the hosted storage service720), or for use in data processing by other services.

The client device702may be implemented using a computing device, such as the computing device800or the mobile device850described with respect toFIG. 8. The client device702may communicate with the hosted storage service720via a network704, such as the Internet. The client device702may communicate across the network using communication protocols such as, for example, one or more of Transmission Control Protocol/Internet Protocol (TCP/IP), Hypertext Transfer Protocol (HTTP), Secure Shell Remote Protocol (SSH), or Application Program Interfaces (API). While only a single client device702is shown, there may be multiple client devices communicating across the network704with the hosted storage service720and/or other services and devices.

The hosted storage service720may be implemented such that client applications executing on client device702, such as a client application703, may store, retrieve, or otherwise manipulate data resources in the hosted storage service720. The hosted storage service720may be implemented by one or more server devices, which may be implemented using a computing device, such as the computing device800or mobile device850described with respect toFIG. 8. For example, the hosted storage service720may be implemented by multiple server devices operating in the same, or different, data centers.

The hosted storage service720generally includes an interface frontend706, an interface backend708, a storage backend710, and metadata716for resources stored in the storage backend710. The hosted storage service720may also include an authenticator709to verify that a user requesting one or more fonts should be provided access to the fonts (e.g., based on a service subscription, rental period, etc.).

In general, the interface frontend706may receive requests from and send responses to the client device702. For instance, the hosted storage service720may be implemented as a Web Service with a corresponding set of Web Service Application Programming Interfaces (APIs). The Web Service APIs may be implemented, for example, as a Representational State Transfer (REST)-based HTTP interface or a Simple Object Access Protocol (SOAP)-based interface. Interface frontend706may receive messages from the client702and parse the requests into a format usable by the hosted storage service720, such as a remote procedure call (RPC) to an interface backend708. The interface frontend706may write responses generated by the hosted storage service720for transmission to the client702. In some implementations, multiple interface frontends706may be implemented, for example to support multiple access protocols.

The interface frontend706may include a graphical front end, for example to display on a web browser for data access. The interface frontend706may include a sub-system to enable managed uploads and downloads of large files. The interface frontend706may monitor load information and update logs, for example to track and protect against denial of service (DOS) attacks.

A data resource may be accessed by one or more techniques such as uniquely naming the resource with a uniform resource identifier (URI), which allows the client application703and service720to exchange with the resource using a set of operations. For example, requested actions may be represented as verbs, such as by HTTP GET, PUT, POST, HEAD, and DELETE verbs. The GET verb may be used to retrieve a resource, while the HEAD verb may be used to retrieve information about a resource without retrieving the resource itself. The DELETE verb may be used to delete a resource from the hosted storage service720. The PUT and POST verbs may be used to upload a resource to the service720. PUT requests may come from the client702and contain authentication and authorization credentials and resource metadata in a header, such as an HTTP header. POST requests may be received when a client702wants to upload from a web browser form. The form POST upload protocol for the hosted storage service720may involve multiple form fields to provide authentication, authorization, and resource metadata. More generally, any of the API requests may include credentials for authentication and authorization, for example in a header of the request. An authorization header may be included in the REST requests, which may include an access key to identify the entity sending the request.

Alternatively, or additionally, a user may be authenticated based on stored credentials, which may be appended to the API requests. If no valid credential is present, a redirect to an authentication frontend may be generated, and the authentication frontend may be used to validate. The authentication frontend may be used by systems and services in addition to the hosted storage service720(e.g., if the organization operating the hosted storage service720also operates other web services such as email service). A user may also or alternatively be authenticated based on authentication credentials from an external credentialing service or an external service that includes credentialing functionality. User or group identifier information may be calculated from the external service's credential information. Requests sent by the client702to the interface frontend706may be translated and forwarded to the external service for authentication.

In general, resources stored in the hosted storage service720may be referenced by resource identifiers. The hosted storage service720may define namespaces to which a valid resource identifier must conform.

Resources (e.g., objects such as font data) may be stored in hosted storage service720in buckets. In some examples, each bucket is uniquely named in the hosted storage service720, each data resource is uniquely named in a bucket, and every bucket and data resource combination is unique. Data resources may be uniquely identified by a URI that includes the bucket name and the resource name, and identifies the hosted storage service720.

The interface backend708along with the authenticator709may handle request authentication and authorization, may manage data and metadata, and may track activity such as for billing. As one example, the interface backend708may query the authenticator709when a request for one or more fonts, font features, etc. is received. The interface backend708may also provide additional or alternative functionality. For example, the interface backend708may provide functionality for independent frontend/backend scaling for resource utilization and responsiveness under localized heavy loads. Data management may be encapsulated in the interface backend708while communication serving may be encapsulated in the interface frontend706. The interface backend708may isolate certain security mechanisms from the client-facing interface frontend706.

The interface backend708may expose an interface usable by both the interface frontend706and other systems. In some examples, some features of the interface backend708are accessible only by an interface frontend (not shown) used by the owners of the hosted storage service720(internal users). Such features may include those needed for administrative tasks (e.g., resolving a resource reference). The interface backend708may handle request authentication (e.g., ensuring a user's credentials are valid) and authorization (e.g., verifying that a requested operation is permitted). The interface backend may also provide encryption and decryption services to prevent unauthorized access to data, even by internal users.

The interface backend708may manage metadata716associated with data resources, for example in a MySQL database. User-specified names labeling the buckets can be completely defined within the metadata716, and resource metadata716can map a resource name to one or more datastores712storing the resource. The metadata716can also contain bucket and resource creation times, resource sizes, hashes, and access control lists718(ACL718) for both buckets and resources. The interface backend708can log activity and track storage consumption (e.g., for accounting support).

The ACLs718may generally define who is authorized to perform actions on corresponding buckets or resources, and the nature of the permitted actions. The ACLs718may be an unordered list of {scope, role} pairs, plus Boolean flags. The scope may define a user or group of users and the role may define the access permissions for the user or group. In some examples, the union of all {scope, role} pairs may define access rights. In some examples, more specific {scope, role} pairs override more general ones.

The storage backend710may contain multiple datastores712a-712c. Although three datastores712are shown, more or fewer are possible. Each of the datastores712a-712cmay store data resources714a-714cin a particular format. For example, data store712amay store a data resource714aas a Binary Large Object (BLOB), data store712bmay store a data resource714bin a distributed file system (e.g., Network File System), and data store712cmay store a data resource714cin a database (e.g., MySQL).

FIG. 8shows an example of example computer device800and example mobile computer device850, which can be used to implement the techniques described herein. For example, a portion or all of the operations of the scalable font editor108(shown inFIG. 2), an application (e.g., a web browser) accessing a scalable font editor, etc. may be executed by the computer device800and/or the mobile computer device850. Computing device800is intended to represent various forms of digital computers, including, e.g., laptops, desktops, workstations, personal digital assistants, servers, blade servers, mainframes, and other appropriate computers. Computing device850is intended to represent various forms of mobile devices, including, e.g., personal digital assistants, tablet computing devices, cellular telephones, smartphones, and other similar computing devices. The components shown here, their connections and relationships, and their functions, are meant to be examples only, and are not meant to limit implementations of the techniques described and/or claimed in this document.

Computing device800includes processor802, memory804, storage device806, high-speed controller808connecting to memory804and high-speed expansion ports810, and low speed controller812connecting to low speed expansion port814and storage device806. Each of components802,804,806,808,810, and812, are interconnected using various busses, and can be mounted on a common motherboard or in other manners as appropriate. Processor802can process instructions for execution within computing device800, including instructions stored in memory804or on storage device806to display graphical data for a GUI on an external input/output device, including, e.g., display816coupled to high speed interface808. In other implementations, multiple processors and/or multiple buses can be used, as appropriate, along with multiple memories and types of memory. Also, multiple computing devices800can be connected, with each device providing portions of the necessary operations (e.g., as a server bank, a group of blade servers, or a multi-processor system).

Memory804stores data within computing device800. In one implementation, memory804is a volatile memory unit or units. In another implementation, memory804is a non-volatile memory unit or units. Memory804also can be another form of computer-readable medium, including, e.g., a magnetic or optical disk.

Storage device806is capable of providing mass storage for computing device800. In one implementation, storage device806can be or contain a computer-readable medium, including, e.g., a floppy disk device, a hard disk device, an optical disk device, or a tape device, a flash memory or other similar solid state memory device, or an array of devices, including devices in a storage area network or other configurations. A computer program product can be tangibly embodied in a data carrier. The computer program product also can contain instructions that, when executed, perform one or more methods, including, e.g., those described above. The data carrier is a computer- or machine-readable medium, including, e.g., memory804, storage device806, memory on processor802, and the like.

High-speed controller808manages bandwidth-intensive operations for computing device800, while low speed controller812manages lower bandwidth-intensive operations. Such allocation of functions is an example only. In one implementation, high-speed controller808is coupled to memory804, display816(e.g., through a graphics processor or accelerator), and to high-speed expansion ports810, which can accept various expansion cards (not shown). In the implementation, low-speed controller812is coupled to storage device806and low-speed expansion port814. The low-speed expansion port, which can include various communication ports (e.g., USB, Bluetooth®, Ethernet, wireless Ethernet), can be coupled to one or more input/output devices, including, e.g., a keyboard, a pointing device, a scanner, or a networking device including, e.g., a switch or router, e.g., through a network adapter.

Computing device800can be implemented in a number of different forms, as shown in the figure. For example, it can be implemented as standard server820, or multiple times in a group of such servers. It also can be implemented as part of rack server system824. In addition or as an alternative, it can be implemented in a personal computer including, e.g., laptop computer822. In some examples, components from computing device800can be combined with other components in a mobile device (not shown), including, e.g., device850. Each of such devices can contain one or more of computing device800,850, and an entire system can be made up of multiple computing devices800,850communicating with each other.

Computing device850includes processor852, memory864, an input/output device including, e.g., display854, communication interface866, and transceiver868, among other components. Device850also can be provided with a storage device, including, e.g., a microdrive or other device, to provide additional storage. Each of components850,852,864,854,866, and868, are interconnected using various buses, and several of the components can be mounted on a common motherboard or in other manners as appropriate.

Processor852can execute instructions within computing device850, including instructions stored in memory864. The processor can be implemented as a chipset of chips that include separate and multiple analog and digital processors. The processor can provide, for example, for coordination of the other components of device850, including, e.g., control of user interfaces, applications run by device850, and wireless communication by device850.

Processor852can communicate with a user through control interface858and display interface856coupled to display854. Display854can be, for example, a TFT LCD (Thin-Film-Transistor Liquid Crystal Display) or an OLED (Organic Light Emitting Diode) display, or other appropriate display technology. Display interface856can comprise appropriate circuitry for driving display854to present graphical and other data to a user. Control interface858can receive commands from a user and convert them for submission to processor852. In addition, external interface862can communicate with processor842, so as to enable near area communication of device850with other devices. External interface862can provide, for example, for wired communication in some implementations, or for wireless communication in other implementations, and multiple interfaces also can be used.

Memory864stores data within computing device850. Memory864can be implemented as one or more of a computer-readable medium or media, a volatile memory unit or units, or a non-volatile memory unit or units. Expansion memory874also can be provided and connected to device850through expansion interface872, which can include, for example, a SIMM (Single In Line Memory Module) card interface. Such expansion memory874can provide extra storage space for device850, or also can store applications or other data for device850. Specifically, expansion memory874can include instructions to carry out or supplement the processes described above, and can include secure data also. Thus, for example, expansion memory874can be provided as a security module for device850, and can be programmed with instructions that permit secure use of device850. In addition, secure applications can be provided through the SIMM cards, along with additional data, including, e.g., placing identifying data on the SIMM card in a non-hackable manner.

The memory can include, for example, flash memory and/or NVRAM memory, as discussed below. In one implementation, a computer program product is tangibly embodied in a data carrier. The computer program product contains instructions that, when executed, perform one or more methods, including, e.g., those described above. The data carrier is a computer- or machine-readable medium, including, e.g., memory864, expansion memory874, and/or memory on processor852, which can be received, for example, over transceiver868or external interface862.

Device850can communicate wirelessly through communication interface866, which can include digital signal processing circuitry where necessary. Communication interface866can provide for communications under various modes or protocols, including, e.g., GSM voice calls, SMS, EMS, or MMS messaging, CDMA, TDMA, PDC, WCDMA, CDMA2000, or GPRS, among others. Such communication can occur, for example, through radio-frequency transceiver868. In addition, short-range communication can occur, including, e.g., using a Bluetooth®, WiFi, or other such transceiver (not shown). In addition, GPS (Global Positioning System) receiver module870can provide additional navigation- and location-related wireless data to device850, which can be used as appropriate by applications running on device850. Sensors and modules such as cameras, microphones, compasses, accelerators (for orientation sensing), etc. maybe included in the device.

Device850also can communicate audibly using audio codec860, which can receive spoken data from a user and convert it to usable digital data. Audio codec860can likewise generate audible sound for a user, including, e.g., through a speaker, e.g., in a handset of device850. Such sound can include sound from voice telephone calls, can include recorded sound (e.g., voice messages, music files, and the like) and also can include sound generated by applications operating on device850.

Computing device850can be implemented in a number of different forms, as shown in the figure. For example, it can be implemented as cellular telephone880. It also can be implemented as part of smartphone882, personal digital assistant, or other similar mobile device.

In some implementations, the engines described herein can be separated, combined or incorporated into a single or combined engine. The engines depicted in the figures are not intended to limit the systems described here to the software architectures shown in the figures.

A number of embodiments have been described. Nevertheless, it will be understood that various modifications can be made without departing from the spirit and scope of the processes and techniques described herein. In addition, the logic flows depicted in the figures do not require the particular order shown, or sequential order, to achieve desirable results. In addition, other steps can be provided, or steps can be eliminated, from the described flows, and other components can be added to, or removed from, the described systems. Accordingly, other embodiments are within the scope of the following claims.