Developing fonts > Specifications
OpenType development (1 of 5):
The OpenType Layout model provides a powerful architecture for supporting complex scripts and
advanced typography. The infrastructure has three components:
- A publicly specified file format that supports advanced typographic layout information (OpenType)
- Windows System Services that produce "shaped" and positioned glyph strings from character strings (RichEdit and Uniscribe, the Unicode Script Processor)
- A freely available, cross-platform library for low-level access to layout information and layout operations (OpenType Layout Services Library)
OpenType font format
OpenType fonts may contain either TrueType or PostScript outlines. The fonts are Unicode-based and allow
a rich mapping between characters and glyphs. This enables support for ligatures, positional forms,
alternates, and other substitutions. OpenType fonts also may include information that supports
two-dimensional glyph positioning and glyph attachment.
Layout features within OpenType fonts are organized by scripts and languages. Thus allowing a single
font to support multiple writing systems, even within the same script.
OpenType fonts are not dependent on a single character-encoding scheme, and in fact the format
supports all the encoding schemes in common use today. Internally, however, all OpenType fonts
are "plumbed" with Unicode.
Top of page
Windows system services
Windows provides service libraries that assist applications in text-layout operations. Many Microsoft
applications now use these libraries, which provide consistency, save development time, and insulate
product developers from many complex script issues. These libraries are publicly exposed as a part
of the operating system, are documented in the Windows SDK, and are governed by the same licensing
restrictions as the rest of the operating system.
Although any text layout client may use these services to perform the bulk of text layout, the
interfaces are also designed to allow clients to use the services to augment the operation of their
own proprietary text engines.
Top of page
Unicode script processor
The Unicode Script Processor (USP10.DLL) is a collection of API's that enable a text-layout
client to format complex scripts. The Unicode Script Processor, aka "Uniscribe,"
supports the complex rules found in scripts such as Arabic, Indian, and Thai. Uniscribe also handles
scripts written from right-to-left, such as Arabic or Hebrew, and supports the mixing of scripts.
Uniscribe has multiple shaping engines that contain the layout knowledge for particular scripts
(for example, Arabic, Hebrew, Thai, Hindi, Tamil). In addition, there is an OpenType Layout
shaping engine for handling script features unknown to Uniscribe. Uniscribe provides character-to-glyph
mapping; dx,dy positioning; line breaking at word boundaries; hit testing and cursor positioning.
Uniscribe subdivides strings of characters into "items" (a character string having all the same script
and direction attributes), "runs" (portions of an item that have continuous formatting attributes),
and "clusters" (script-defined, indivisible character groupings). A client builds runs based on its
own stored formatting attributes, and on the item boundaries obtained from Uniscribe.
Using Uniscribe, clients need only manage a backing store of Unicode character codes, typed by the
user in "logical order" (as defined by Unicode). Text-layout clients do not need to maintain any
other buffer or mapping table to track character order, and the backing store never changes as a
result of layout operations.
Clients of Uniscribe include: Win32 API's, plain text applets, edit controls, RichEdit 3.0, Wordpad,
Office9, Internet Explorer 4.0+, FrontPage Express, Outlook Express. It
ships with Windows 2000, Internet Explorer 4.0 and greater. Uniscribe may also be used on NT4,
Windows 95 and Windows 98 systems.
Top of page
RichEdit is a higher-level collection of interfaces that may be used to call Uniscribe or other
shaping engines or routines. RichEdit serves to further insulate text-layout clients from the
complexities of certain scripts.
RichEdit 3.0 provides fast, versatile editing of rich Unicode multilingual text and simple plain
text. It includes extensive message and COM interfaces. Features include text editing, formatting,
line breaking, simple table layout, vertical text layout, bidirectional text layout,
Indic and Thai support, a Word edit UI, and Text Object Model interfaces.
RichEdit is the simplest way for a client to support features of complex scripts. Clients use the
TextOut function of RichEdit to automatically parse, shape, position, and break lines.
RichEdit is designed for clients whose primary purpose is not necessarily text layout, but who
nonetheless need to display complex scripts.
Top of page
OpenType Layout Services Library (OTLS)
The OTLS is a set of text-processing helper functions. The services simplify the job of text
processing by insulating a client application from the details of the font file format. The
services library is freely available under license from Microsoft, and will ultimately be
distributed with the operating system.
Although any text-layout client may use these services to perform the bulk of text layout,
the interfaces are also designed to allow clients to use the services to augment the operation
of their own proprietary text engines.
The OTLS allow clients to work at the more familiar level of features and characters. The OTLS
will handle the details of lookup tables and glyph ID's, which may not be as familiar.
The simplest way to use the OTLS is to identify sections of text with OTLS features and use the
text layout functions for all text-processing operations. In this approach, the client is still
responsible for deciding where to break lines, whether to do justification, and whether to layout
text in a device-dependent or device-independent fashion.
A more sophisticated client may directly manipulate the data structures of the text, enabling the
management of glyph substitution or positioning. Sophisticated clients may also choose to intercept
or replace resource management calls in order to handle memory allocation or access font tables.
The OTLS can be used as a set of shareable functions (as a DLL), or used indirectly
by applications calling Uniscribe or RichEdit.
Next section: encodingintroduction | encoding | client support | suggested glyphs | tools
Last updated 21 December 2001.
Top of page