John Hudson, for Microsoft Typography
This four-page article is an overview and explication of advanced Windows text rendering, including the OpenType font format,
the Windows Unicode Script Processor (Uniscribe), and the OpenType Layout Services library (OTLS). To access specific pages,
use the Contents section below, or the navigation bar at the bottom of each page.
In a relatively simple digital font architecture, as typified by the original TrueType format developed at Apple Computers,
there is a one-to-one relationship between an encoded character and the glyph that represents it. Systems and applications
that make use of such fonts do not need to make a distinction between character processing and glyph processing. In working
with such fonts, it is most often convenient to think only in terms of character processing, or simply text processing: that is,
the sequential rendering of glyphs representing character codes as input in logical order. When applications have needed to
provide more complicated text processing for complex scripts  or sophisticated typography, they have generally made use
of proprietary engines to shape text based on custom character sets, or have obliged users to resort to font switching to
access variant glyph forms. The idiosyncratic nature of these solutions frequently results in text that cannot be exchanged
outside of particular systems and applications.
The wide adoption of the Unicode Standard  for character encoding provides a means to make text interchangeable across
different systems and between applications that implement the standard. The Unicode Standard is strictly concerned with character
processing, and presumes that Unicode text strings will be input and stored in a simple sequence defined as 'logical order'.
The Unicode Standard also presumes the existence of rendering systems above the Unicode text string that will, as necessary,
reorder codepoints and affect sophisticated glyph processing to shape the rendering of the text through glyph substitution
and positioning features. This article introduces the different elements of the Microsoft Windows implementation of Unicode
character and glyph processing, and explains how they can be used by font and application developers to provide users with
sophisticated typographic controls and the ability to process text in complex scripts.
This article explains three principal elements of Windows technology and their interaction: the OpenType font format, the
Windows Unicode Script Processor (Uniscribe), and the OpenType Layout Services library (OTLS). The first part of the article
provides an overview of Windows glyph processing, explaining the role of each of these elements and demonstrating how they
render a sample string of complex script text. The second part of the article covers each of these elements in greater detail,
explaining some of the internal workings of font tables, Uniscribe script shaping engines, and the interaction of OTLS with
The audience for this article includes type designers and font vendors, software engineers and
application developers. These groups do not always speak the same language, so I have tried to provide concise definitions,
in the notes, of terminology that may be confusing for some readers; these and other notes are indicated in the text by
bracketed numbers. One person's daily vocabulary is another's impenetrable jargon, and not all type designers are comfortable
with terms such as API and DLL that are common currency among software engineers. Likewise, most engineers are likely to
scratch their heads when typographers start speaking of nuts and mutton.
1. The term 'complex script' refers to any writing system that requires some degree of character reordering and/or
glyph processing to display, print or edit. In other words, scripts for which Unicode logical order and nominal glyph rendering
of codepoints do not result in acceptable text. Such scripts, examples of which are Arabic and the numerous Indic scripts
descended from the Brahmi writing system, are generally identifiable by their morphographic characteristics: the changing of the
shape or position of glyphs as determined by their relationship to each other. It should be noted that such processing is not
optional, but is essential to correctly rendering text in these scripts. Additional glyph processing to render appropriately
sophisticated typography may be desirable beyond the minimum required to make the text readable.
2. For more information about the Unicode Standard and the work of the Unicode Consortium and its technical committees,
see www.unicode.org. I recommend that anyone developing Unicode
applications or fonts invest in a copy of the published Unicode Standard Version 4.0 (ISBN 0-321-18578-1).