CINXE.COM
W3C Working Draft: Web Fonts
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Draft//EN"> <HTML> <HEAD> <STYLE TYPE="text/css"><!-- BODY { margin-left: 2%; margin-right: 2%; background: #ffffff; color: black; font-family: trebuchet, arial, helvetica, sans-serif; } /* exposes a bug in NS 4.01, so comment out A { border: none } */ A:link { background: #ffffff; color:#052 } A.offsite:link { background: #ffffff; color:#601 } A:visited { background: #ffffff; color:#666 } A:active { color:#fff; background: #666 } DIV.main { margin-left: 10%; } DIV.main H2, DIV.main H3 { margin-left: -9%; margin-right: 2% } H1 { clear: left; margin-top: 2em; text-align: center; } CAPTION { font-style: italic } IMG { border: 0; } P.disclaimer { font-style: italic; margin-left: 8%; margin-right: 8% } P.comment { background: #ffffff; color: rgb(40%, 10%, 20%) } P.status { margin-left: 8%; margin-right: 8% } span.comment { background: #ffffff; color: rgb(40%, 10%, 20%) } PRE { font-family: "courier new", courier, monaco, monospace; font-size: 90%; } --></STYLE> <TITLE>W3C Working Draft: Web Fonts</TITLE> </HEAD> <BODY bgcolor="FFFFFF"> <div class=header> <h2 align=right><A HREF="/"><img border=none align=left alt="W3C" src= "/pub/WWW/Icons/WWW/w3c_home"></A>WD-font-970721</h2> <H1 align=center>Web Fonts</h1> <h3 align=center>W3C Working Draft <i>21-July-1997</i></H3> <dl> <dt>Latest version <dd><a href="/TR/WD-font">http://www.w3.org/TR/WD-font</a> <dt>This version: <dd><a href="/TR/WD-font-970721">http://www.w3.org/TR/WD-font-970721</a> <dt>Previous (W3C member only) version: <dd><a href="/Style/Group/WD-font-970710">http://www.w3.org/Style/Group/WD-font-970710</A> </dl> <dl><DT>Editor: <dd><a href="/people/chris">Chris Lilley</A>, <a href="/">W3C</A> <dt>Authors: <dd>Brad Chase, Bitstream <dd>Chuck Rowe, Agfa <dd>Chris Lilley, W3C <dd>David Meltzer, Microsoft <dd>Glen Rippel, Bitstream <dd>Håkon Lie, W3C <dd>Randy Polen, Adobe <dd>Robert Stevahn, HP <dd>Steve Zilles, Adobe </dl> <hr> <h3>Status of this document</H3> <p class=status>This W3C Working Draft was developed by the W3C Fonts Working Group and is now being further developed by the <a href="/Style/Group">Cascading Style Sheets and Formatting Properties Working Group</A> as part of the W3C <a href="/Style/Activity">Style Activity</a>. Partial implementations of this specification exist, and it is planned to incorporate this work in a future version of CSS. <p class=status>This document is an intermediate draft produced by the <a href="/Style/Group">CSS&FP working group</A> for public review (to <a href="mailto:www-style@w3.org"><tt>www-style@w3.org</tt></A>). It may be updated, replaced or obsoleted by other documents at any time. If citing W3C Working Drafts, please refer to them as "works in progress." A list of current W3C technical reports can be found at <a href="/TR">http://www.w3.org/TR</A>. <H2>Abstract</H2> <p class=abstract>This specification extends the font mechanisms in <a href="/TR/REC-CSS1">CSS1</A> to define a new 'at-rule', <tt>@font-face</tt> which permits improved client-side matching of fonts, enables font synthesis and progressive rendering, and enables fonts to be downloaded over the Web. This provides greater typographic richness for HTML pages and improves the internationalisation of the Web. <hr> <H2>Table of Contents</H2> <UL> <LI><A HREF="#Introduction">1. Introduction</A> <UL> <LI><A HREF="#CSS1">1.1. Font features of CSS1</A> <LI><A HREF="#beyond-CSS1">1.2. Beyond CSS1</A> </UL> <LI><A HREF="#FindFont">2. Finding Fonts</A> <LI><A HREF="#AtRule">3. Adding WebFonts to CSS</A> <LI><A HREF="#fontdesc">4. Font Descriptors</A> <UL> <LI><A HREF="#select">4.1. Font-face Descriptors for Selecting a Font</A> <UL> <LI><A HREF="#font-family">4.1.1. 'font-family'</A> <LI><A HREF="#font-style">4.1.2. 'font-style'</A> <LI><A HREF="#font-variant">4.1.3. 'font-variant'</A> <LI><A HREF="#font-weight">4.1.4. 'font-weight'</A> <LI><A HREF="#font-size">4.1.5. 'font-size'</A> </UL> <LI><A HREF="#dataqual">4.2. Font-face Descriptors for Font Data Qualification</A> <UL> <LI><A HREF="#unicode-range">4.2.1. 'unicode-range'</A> </UL> <LI><A HREF="#unitsperem">4.3. Font-face Descriptor Required if Numeric Values Are Present</A> <UL> <LI><A HREF="#unitsperem">4.3.1. 'units-per-em'</A> </UL> <LI><A HREF="#referencing">4.4. Font-face Descriptor for Referencing </A> <UL> <LI><A HREF="#src">4.4.1. 'src'</A> </UL> <LI><A HREF="#matching">4.5. Font-face Descriptors for Matching</A> <UL> <LI><A HREF="#panose1">4.5.1. 'panose-1'</A> <LI><A HREF="#stemv">4.5.2. 'stemv'</A> <LI><A HREF="#stemh">4.5.3. 'stemh'</A> <LI><A HREF="#slope">4.5.4. 'slope'</A> <LI><A HREF="#capheight">4.5.5. 'cap-height'</A> <LI><A HREF="#xheight">4.5.6. 'x-height'</A> <LI><A HREF="#ascent">4.5.7. 'ascent'</A> <LI><A HREF="#descent">4.5.8. 'descent'</A> </UL> <LI><A HREF="#synthesizing">4.6. Font-face Descriptors for Synthesis</A> <UL> <LI><A HREF="#widths">4.6.1. 'widths'</A> <LI><A HREF="#defnsrc">4.6.2. 'definition-src'</A> </UL> <LI><A HREF="#alignment">4.7. Font-face Descriptors for Alignment</A> <UL> <LI><A HREF="#centerline">4.7.1. 'centerline'</A> <LI><A HREF="#mathline">4.7.2. 'mathline'</A> <LI><A HREF="#topline">4.7.3. 'topline'</A> </UL> </UL> <LI><A HREF="#algorithm">5. Enhanced Font matching algorithm</A> <LI><A HREF="#examples">6. Worked examples</A> <LI><A HREF="#gloss">7. Glossary</A> <LI><A HREF="#universal">8. Web Fonts for Multiple Media</A> <LI><A HREF="#generic-props">9. Font characteristics</A> <UL> <LI><A HREF="#aname">9.1. Adorned font name</A> <LI><A HREF="#cline">9.2. Central Baseline</A> <LI><A HREF="#emsq">9.3. Co-ordinate units on the em square</A> <LI><A HREF="#family">9.4. Font family name</A> <LI><A HREF="#lrwidth">9.5. Glyph Representation widths</A> <LI><A HREF="#Hstem">9.6. Horizontal stem width</A> <LI><A HREF="#cap">9.7. Height of capital glyph representations</A> <LI><A HREF="#xht">9.8. Height of lowercase glyph representations</A> <LI><A HREF="#mline">9.9. Mathematical Baseline</A> <LI><A HREF="#mbbox">9.10. Maximal bounding box</A> <LI><A HREF="#typoascent">9.11. Maximum unaccented height</A> <LI><A HREF="#typodescent">9.12. Maximum unaccented depth</A> <LI><A HREF="#pan1">9.13. PANOSE-1 number</A> <LI><A HREF="#ucode">9.14. Range of Unicode characters</A> <LI><A HREF="#tline">9.15. Top Baseline</A> <LI><A HREF="#srcurl">9.16. URL to retrieve the font data</A> <LI><A HREF="#Vstem">9.17. Vertical stem width</A> <LI><A HREF="#Vslope">9.18. Vertical stroke angle</A> </UL> <LI><A HREF="#coneg">10. Font retrieval</A> <LI><A HREF="#ack">11. Acknowledgments</A> </UL> </div> <hr> <div class=main> <H2><A NAME="Introduction">1. Introduction</A></H2> <H3><A NAME="CSS1">1.1. Font features of CSS1</A></H3> <p>The <a href="/TR/REC-CSS1">CSS1 specification</A> allows the setting of various <a href="/TR/REC-CSS1#font-properties">font properties</A> on HTML elements. The properties include family name (eg 'Times', 'Arial', 'New Century SchoolBook'), weight (eg 'normal', 'bold', '400'), style (eg 'italic') and size (eg '12pt'). It allows these properties to be inherited by, and then modified by, child elements. For example, various font properties may be set on a paragraph, and a bold element within that paragraph can be made to have the same font - but in a heavier weight - by simply altering the <tt>font-weight</tt> property. The key concept here is <em>inheritance</em>. <p>In CSS1, fonts are assumed to be present on the client system and are identified solely by name. Several choices of fonts may be listed and are tried in order until a font is found that can display the required characters. If a font is available to the client that is a close stylistic match to the requested font but has a different name, it is not possible for a CSS1 implementation to select it. Generic font families such as 'serif' and 'script' are available as fallbacks if none of the listed fonts are available. <H3><A NAME="beyond-CSS1">1.2. Beyond CSS1</A></H3> <p>This specification builds on and extends the CSS1 font model to allow <em>font descriptions</em> to be added to a style sheet. The font descripions consist of a set of <em>font descriptors</em>, individual pieces of information about a font, possibly including a URL where the font can be downloaded. If you are not familiar with the sort of information used to classify fonts, see the <a href="#generic-props">Appendix</A>. <p>This provides additional capabilities: <ul> <li>intelligent client-side selection of a suitable font from the collection of fonts known to the platform or user agent <li>synthesis of a replacement font <li>downloading a font provided over the Web </ul> <p>The key concept here is <em>font description</em> and <em>reference</em> to improve typographic richness whilst continuing to use the inheritance and cascade mechanisms.</p> </div> <hr> <div class=main> <H2><A NAME="FindFont">2. Finding Fonts</A></H2> <P>There are four ways to provide a font: name matching, intelligent matching, synthesis and download. <UL> <LI><I>Name matching</I> <BR> This involves using an existing, accessible font that has the same family name as the requested font (note that the appearance and the metrics might not necessarily match, if the font that the document author used and the font on the client system are from different foundries). The matching information is restricted to the CSS font properties, including the family name. <LI><I>Intelligent matching</I> <BR> This involves using an existing, accessible font that is the closest match in appearance to the requested font. (Note that the metrics might not match exactly). The matching information includes information about the kind of font (text or symbol), nature of serifs, weight, cap height, x height, ascent, descent, slant, etc. <LI><I>Synthesis</I><BR> This involves creating a font which is not only a close match in appearance, but also matches the metrics of the requested font. The synthesizing information includes the matching information and typically requires more accurate values for the parameters than are used for some matching schemes. In particular, synthesis requires accurate width metrics and character to glyph substitution and position information if all the layout characteristics of the specified font are to be preserved. <li><i>Download</i><br>This involves fetching a font over the Web and using it to display text in the current document. This is similar to the process of fetching images, sounds or applets over the Web for display in the current document, and likewise can cause some delay before the page can be displayed. </UL> <p><i>Progressive rendering</i> is a combination of download and one of the other methods; it provides a temporary substitute font (using name matching, intelligent matching, or synthesis) to allow content to be read while the requested font downloads. Once the real font has been succesfully downloaded and temporarily installed, it replaces the temporary font, hopefully without the need to reflow.</p> </div> <hr> <div class=main> <H2><A NAME="AtRule">3. Adding WebFonts to CSS</A></H2> <P>The <em>font description</em> provides the bridge between a <em>font reference</em> (within a stylesheet) and the <em>font data</em> , which is the data needed to format text and to render the glyph representations to which the characters map - the actual scalable outlines or bitmaps. Fonts are referenced by style sheet properties. The font description is used to select the relevant font data. The font description consists of <em>descriptors</em> which provide the location of the font data on the Web, and/or characterize that font data. The font descriptors are also used to match font references with the correct font description. <P>Font descriptors may be classified into three types: <ol> <li>those that provide the link between the CSS usage of the font and the font description - these have the same names as the corresponding CSS font properties <li>the URL for the <em>location</em> of the font data <li>those that further characterize the font, to provide a link between the font description and the font data </ol> <p>Font descriptions are contained in an <i>at-rule</i>. At-rules - so called because they start with the <tt>@</tt> symbol - were introduced in CSS 1 where they were used to import other stylesheets. Ordinary CSS rules start with a selector, and apply solely to the selected HTML elements. At-rules have no selector, and apply to the whole style sheet. <p>The general form of this new at-rule is <pre><tt>"<B>@font-face { <<I>font description</I>> }</B>"</tt></pre> <p>where the font description has the form <pre><tt>descriptor: value; descriptor: value; [...] descriptor: value;</tt></pre> <p>For example, here the font 'Robson Celtic' is defined and referenced in a style sheet contained in an HTML document. <PRE><HTML> <HEAD> <TITLE>Font test</TITLE> <STYLE TYPE="text/css" MEDIA="screen, print"> @font-face { font-family: "Robson Celtic" src: url(http://site/fonts/rob-celt) } H1 {font-family: "Robson Celtic", serif} </STYLE> </HEAD> <BODY> <H1> This heading is displayed using Robson Celtic</H1> </BODY> </HTML> </PRE> <p>The style sheet (in the STYLE element) contains a CSS rule that sets all H1 elements to use the 'Robson Celtic' font family. A CSS1 implementation will search the client for a font whose family name and other properties match that name and, if it fails to find it, will use the UA-specific fallback serif font which is <a href="/TR/REC-CSS1#font-family">defined to exist</A>. <p>A Web Font implementation will <!-- <em>first</em> search the client for a font whose family name and other properties match that name and <em>then</em>, on failing to find the font, will --> seach all the <tt>@font-face</tt> at-rules for a font description defining Robson Celtic. I this example we have such a rule, which will be matched; in this example it doesn't contain much font data but does have a URL where the font can be retrieved and temporarily installed on the client for rendering this document. There is a <a href="#fuller-example">fuller example</A> later in this document. <p>If the font Robson Celtic <em>had</em> been installed on the client system, this would cause the UA to construct an <tt>@font-face</tt> rule for the installed copy as <a href="#algorithm">described below</A>, which would have been matched before the downloadable font in the example above. <p>Downlevel UAs which do not understand the <tt>@font-face</tt> rule will encounter the opening curly brackets and will skip forward until the matching closing curly brackets. This at-rule conforms to the <a href="/TR/REC-CSS1#forward-compatible-parsing">forward-compatible CSS1 grammar</A> in the CSS1 specification, so <a href="/TR/REC-CSS1#css1-conformance">conforming</A> parsers can skip it without error.</p> </div> <hr> <div class=main> <H2><A NAME="fontdesc">4. Font Descriptors</A></H2> <p>All descriptors exist for each <tt>@font-face</tt> at-rule; those not given explicit values take the initial value listed with each descriptor in this specification. These descriptors apply solely within the context of the font-face at-rule in which they are defined, and do not apply to HTML elements. Thus, there is no notion of which HTML elements the descriptors apply to, or whether the values are inherited by child elements. <H3><A NAME="select">4.1. Font-face Descriptors for Selecting a Font</A></H3> <p>These descriptors have the same names as the corresponding CSS1 font properties, and take a single value or comma-separated list of values. <p>The values within that list are exactly the same as those specified for CSS1. If there is a single value, that is the value that must be matched. If there is a list, any of the list items constitutes a match. If the descriptor is omitted from the <tt>@font-face</tt> the initial value is used. <H4><A NAME="font-family">4.1.1. 'font-family'</A></H4> <p><em>Value:</em> [<family-name> | <generic-family>] [, [<family-name> | <generic-family>]]*<br> <em>Initial:</em> UA specific<br> <p>This is the descriptor for the <a href="#family">family name (Section 9.4)</A> of a font and takes the same values as the CSS1 <a href="/TR/REC-CSS1#font-family">'font-family'</A> property. <H4><A NAME="font-style">4.1.2. 'font-style'</A></H4> <p><em>Value:</em>[ normal | italic | oblique ] [, [normal | italic | oblique] ]*<br> <em>Initial:</em> normal<br> <p>This is the descriptor for the style of a font and takes the same values as the CSS1 <a href="/TR/REC-CSS1#font-style">'font-style'</A> property except that a comma separated list is permitted. Oblique indicates that this face is more slanted than the normal face. Italic indicates that this is a more cursive companion face to the normal face. This avoids having to label slightly slanted normal faces as oblique, or Greek faces as italic. <H4><A NAME="font-variant">4.1.3. 'font-variant'</A></H4> <p><em>Value:</em> [normal | small-caps] [,[normal | small-caps]]*<br> <em>Initial:</em> normal<br> <p>This is the CSS indication whether this face is a small-caps variant of a font. It takes the same values as the CSS1 <a href="/TR/REC-CSS1#font-variant">'font-variant'</A> property except that a comma separated list is permitted. Cyrillic <i>pryamoĭ</i> faces may be labelled with a 'font-variant' of small-caps, which will give better consistency with Latin faces (and the companion <i>kursiv</i> face labelled with 'font-style' italic for the same reason). <H4><A NAME="font-weight">4.1.4. 'font-weight'</A></H4> <p><em>Value:</em> all | [normal | bold | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800] [, [normal | bold | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800]]* <br> <em>Initial:</em> normal<br> <p>This is the descriptor for the weight of a face relative to others in the same font family. It takes the same values as the CSS1 <a href="/TR/REC-CSS1#font-weight">'font-weight'</A> property with three exceptions: <ol><li>relative keywords (bolder, lighter) are not permitted <li>a comma separated list of values is permitted <li>an additional keyword, <tt>all</tt> is permitted </ol> <H4><A NAME="font-size">4.1.5. 'font-size'</A></H4> <p><em>Value:</em> all | [<length> [,[<length>]]* ]<br> <em>Initial:</em>all<br> <p>This is the descriptor for the sizes provided by this font. Only <a href="/TR/REC-CSS1#length-units">absolute lengths</A> are allowed, in contrast to the <a href="/TR/REC-CSS1#font-size">font-size</A> property of CSS1 which allows both relative and absolute lengths and sizes. A comma separated list of lengths is permitted. <p>The initial value of 'all' is suitable for scalable fonts, so this descriptor will only be useful in an <tt>@font-face</tt> for bitmap fonts, or for scalable fonts which have hand-tuned bitmaps at specific point sizes. <H3><A NAME="dataqual">4.2. Font-face Descriptors for Font Data Qualification</A></H3> <P> The following descriptor is optional within a font definition, but is used to avoid checking or downloading a font that does not have sufficient glyphs to render a particular character. <H4><A NAME="unicode-range">4.2.1. 'unicode-range'</A></H4> <P><EM>Value:</EM> [<urange>]+<BR> <EM>Initial:</EM> U+0-FFFFFFFF<BR> <P>This is the descriptor for the <a href="#ucode">range of unicode characters (Section 9.14)</A> covered by the font. Since this is sparse (most fonts do not cover the whole of Unicode) this descriptor lists blocks or ranges which do have some coverage. This method is extensible to any further allocation of characters without change of syntax and without invalidating existing content. <p><A NAME="urange">The value of this descriptor</A> is expressed using hexadecimal numbers prefixed by "U+", corresponding to character code positions in Unicode (which is code-for-code identical to ISO 10646, which is the Document Character Set for HTML). For example, <tt>U+05D1</tt> is the Unicode character 'Hebrew letter bet'. For values outside the Basic Multilingual Plane (BMP), additional leading digits corresponding to the plane number are added, also in hexadecimal, like this: <tt>U+A1234</tt> which is the character on the tenth plane at hexadecimal code position 1234. At the time of writing no characters had been assigned outside the BMP. Leading zeros (for example, 0000004D) are legal, but not required. <p>The initial value (<i>ie</i>, the value used when no value is given in the style sheet) covers not only the entire Basic Multilingual Plane (BMP), which would be expressed as U+0-FFFF, but also the whole repertoire of ISO 10646. Thus, the initial value says that the font <em>may</em> have glyph representations for characters anywhere in ISO 10646. Specifying a value for 'unicode-range' provides information to make searching efficient, by declaring a constrained range in which the font may have glyph representations for characters. The font need not be searched for characters outside this range. <p>Values may be written with any number of digits. For single numbers, the character '?' is assumed to mean 'any value' which creates a <em>range</em> of character positions. Thus, using a <em>single number</em>: <dl><dt>unicode-range: U+20A7 <dd>no wildcards - it indicates a single character position (the Spanish peseta currency symbol) <dt>unicode-range: U+215? <dd>one wildcard, covers the range 2150 to 215F (the fractions) <dt>unicode-range: U+00?? <dd>two wildcards, covers the range 0000 to 00FF (Latin-1) <dt>unicode-range: U+E?? <dd>two wildcards, covers 0E00 to 0EFF (the Lao script) </dl> <p>A <em>pair of numbers</em> can be combined with the dash character to indicate larger ranges. For example <dl> <dt>unicode-range: U+AC00-D7FF <dd>the range is AC00 to D7FF (the Hangul Syllables area) </dl> <p>Multiple, discontiguous ranges can be specified, separated by a comma. As with other comma-separated lists in CSS, any whitespace before or after the comma is ignored. For example: <dl><dt>unicode-range: U+370-3FF, U+1F?? <dd> This covers the range 0370 to 03FF (Modern Greek) plus 1F00 to 1FFF (Ancient polytonic Greek). <dt>unicode-range: U+3000-303F, U+3100-312F, U+32??, U+33??, U+4E00-9FFF, U+F9000-FAFF, U+FE30-FE4F <dd>Something of a worst case in terms of verbosity, this very precisely indicates that this (extremely large) font contains only Chinese characters from Unicode 2.0, without including any characters that are uniquely Japanese or Korean. The range is 3000 to 303F (CJK symbols and punctuation) plus 3100 to 312F (Bopomofo) plus 3200 to 32FF (enclosed CJK letters and months) plus 3300 to 33FF (CJK compatibility zone) plus 4E00 to 9FFF (CJK unified Ideographs) plus F900 to FAFF (CJK compatibility ideographs) plus FE30 to FE4F (CJK compatibility forms). <p>A more likely representation for a typical Chinese font would be: <p>unicode-range: U+3000-33FF, U+4E00-9FFF</p> <dt>unicode-range: U+11E00-121FF <dd>This font covers a proposed registration for Aztec pictograms, covering the range 1E00 to 21FF in plane 1. <dt>unicode-range: U+1A00-1A1F <dd>This font covers a <a class="offsite" href="http://www.indigo.ie/egt/standards/og/ogham.html">proposed registration for Irish Ogham</A> covering the range 1A00 to 1A1F </dl> <H3><A NAME="unitsperem">4.3. Font-face Descriptor Required if Numeric Values Are Present</A></H3> <P> The following descriptor is optional within a font definition, but is required if any other descriptors use numeric values in the EM space in which glyphs are defined. <H4><A NAME="unitsperem">4.3.1. 'units-per-em'</A></H4> <p><EM>Value:</EM> <number><br> <EM>Initial:</EM> undefined<br> <p>This is the descriptor for the number of the <a href="#emsq">co-ordinate units on the em square (Section 9.3)</A>, the size of the design grid on which glyph representations are laid out. <H3><A NAME="referencing">4.4. Font-face Descriptor for Referencing </A></H3> <p>This descriptor is required for referencing actual font data, whether downloadable or locally installed. <H4><a NAME="src">4.4.1. 'src'</a></H4> <P><EM>Value:</EM>[ URL [format [,format]*]? | font face name ] [, URL [format [,format]*]?] | font face name]*<BR> <EM>Initial:</EM>undefined<BR> <p>This is a prioritised list of URLs and/or locally installed font face names. The URL points to the font data itself. This is required if the WebFont is to be retrieved. The font resource may be a subset of the source font. The URL may be partial, in which case it is resolved relative to the location of the style sheet containing the <tt>@font-face</tt>. <p>The URL may have optional hints regarding the format of font resource to be found at that URL, and this information should be used by clients in format negotiation with the server. As with any hypertext reference, there may be other formats available, or the resource may have been moved; but the client has a better idea of what is likely to be there, in a more robust way than trying to parse filename extensions in URLs. <p> The font face name is the <em>adorned font name</em> of an installed font. This is most likely to be used in reader stylesheets, or author stylesheets on an intranet. <p>Examples: <dl> <dt><tt>src: url(http://foo/bar)</tt> <dd>a full URL and no information about the font format(s) available there <dt><tt>src: local(BT Century 751 No. 2 Semi Bold Italic)</tt> <dd>references a particular face of a locally installed font <dt><tt>src: url(../fonts/bar) fomat(truedoc)</tt> <dd>a partial URL which has a font available in TrueDoc format <dt><tt>src: url(http://cgi-bin/bar?stuff) format(opentype, intellifont)</tt> <dd>a full URL, in this case to a script, which can generate two different formats - OpenType and Intellifont <dt><tt>src: local(T-26 Typeka Mix), url(http://site/magda-extra) format(type1)</tt> <dd>two alternatives are given, firstly a locally installed font and secondly a downloadable font available in Type 1 format. </dl> <P>Access to locally installed fonts is via the font face name. The font face name is not truly unique, nor is it truly platform or font format independent, but at the moment it is the best way to identify font data. The use of the font face name can be made more accurate by providing an indication of the glyph complement required. This may be by indicating the <a href="#ucode">range of Unicode character positions (Section 9.14)</A> for which the font provides some glyph representations, using the <a href="#unicode-range">'unicode-range'</A> descriptor. <H3><A NAME="matching">4.5. Font-face Descriptors for Matching</A></H3> <P> These descriptors are optional for a WebFont definition, but may be used if intelligent font matching is desired by the author. <H4><A NAME="panose1">4.5.1. 'panose-1'</a></H4> <P><EM>Value:</EM> [ <number> ] {10}<BR> <EM>Initial:</EM>0 0 0 0 0 0 0 0 0 0 <BR> <p>This is the descriptor for the <a href="#pan1">PANOSE-1 number (Section 9.13)</A> and consists of ten decimal numbers, separated by whitespace. A comma separated list is not permitted for this descriptor, because the PANOSE-1 system can indicate that a range of values are matched. The initial value is zero for each PANOSE digit, which means "any". Thus, if this descriptor is not specified, all fonts will match the Panose number. <H4><a name="stemv">4.5.2. 'stemv'</a></H4> <P><EM>Value:</EM> <number><BR> <EM>Initial:</EM>undefined <BR> <p>This is the descriptor for the <a href="#Vstem">vertical stem width (Section 9.17)</A> of the font. If the value is undefined, the descriptor is not used for matching. If this descriptor is used, the <a href="#unitsperem">'units-per-em' (Section 4.3)</A> descriptor must also be used. <H4><a name="stemh">4.5.3. 'stemh'</a></H4> <P><EM>Value:</EM> <number><BR> <EM>Initial:</EM>undefined <BR> <p>This is the descriptor for the <a href="#stemh">horizontal stem width</A> of the font. If the value is undefined, the descriptor is not used for matching. If this descriptor is used, the <a href="#unitsperem">'units-per-em' (Section 4.3)</A> descriptor must also be used. <H4><a name="slope">4.5.4. 'slope'</a></H4> <P><EM>Value:</EM> <number><BR> <EM>Initial:</EM>0 <BR> <p>This is the descriptor for the <a href="#Vslope">vertical stroke angle (Section 9.18)</A> of the font. <H4><a name="capheight">4.5.5. 'cap-height'</a></H4> <P><EM>Value:</EM> <number><BR> <EM>Initial:</EM>undefined <BR> <p>This is the descriptor for the number of the <a href="#cap">height of capital glyph representations (Section 9.7)</A> of the font. If the value is undefined, the descriptor is not used for matching. If this descriptor is used, the <a href="#unitsperem">'units-per-em' (Section 4.3)</A> descriptor must also be used. <H4><a name="xheight">4.5.6. 'x-height'</a></H4> <P><EM>Value:</EM> <number><BR> <EM>Initial:</EM>undefined <BR> <p>This is the descriptor for the <a href="#xht">height of lowercase glyph representations (Section 9.8)</A> of the font. If the value is undefined, the descriptor is not used for matching. If this descriptor is used, the <a href="#unitsperem">'units-per-em' (Section 4.3)</A> descriptor must also be used. <H4><a name="ascent">4.5.7. 'ascent'</a></H4> <P><EM>Value:</EM> <number><BR> <EM>Initial:</EM>undefined <BR> <p>This is the descriptor for the <a href="#typoascent">maximum unaccented height (Section 9.11)</A> of the font. If the value is undefined, the descriptor is not used for matching. If this descriptor is used, the <a href="#unitsperem">'units-per-em' (Section 4.3)</A> descriptor must also be used. <H4><a name="descent">4.5.8. 'descent'</a></H4> <P><EM>Value:</EM> <number><BR> <EM>Initial:</EM>undefined <BR> <p>This is the descriptor for the <a href="#typodescent">Maximum unaccented depth (Section 9.12)</A> of the font. If the value is undefined, the descriptor is not used for matching. If this descriptor is used, the <a href="#unitsperem">'units-per-em' (Section 4.3)</A> descriptor must also be used. <H3><A NAME="synthesizing">4.6. Font-face Descriptors for Synthesis</A></H3> <P> Synthesizing a font means, at minimum, matching the width metrics of the specified font. Therefore, for synthesis, this metric information must be available. Similarly, progressive rendering requires width metrics in order to avoid reflow of the content when the actual font has been loaded. Although the following descriptors are optional for a WebFont definition, some are required if synthesizing (and progressive rendering) is desired by the author. Should the actual font become available, the substitution should be replaced by the actual font. Any of these descriptors which are present will be used to provide a better or faster approximation of the intended font. <p>Of these descriptors, the most important are <!--<tt>subsetchars</tt> (if the font is a subset), --> the widths descriptor and <tt>bbox</tt> which are used to prevent text reflow should the actual font become available. In addition, the descriptors in the <a href="#matching">set of descriptors required for matching (Section 4.5)</A> can be used to provide a better synthesis of the actual font appearance. Any descriptors which are not recognized or useful to the user agent should be ignored. This allows adding in the future optional descriptors for the purpose of better font substitution. </p> <H4><a name="widths">4.6.1. 'widths'</a></H4> <P><EM>Value:</EM> [<urange>]? [<number>]+ [,[<urange>]? [<number>]+]<BR> <EM>Initial:</EM>undefined <BR> <p>This is the descriptor for the number of the <a href="#lrwidth">glyph representation widths (Section 9.5)</A>. The value is a (comma separated list of) a <a href="#urange">unicode range</A> followed by one or more glyph representation widths. If this descriptor is used, the <a href="#unitsperem">'units-per-em' (Section 4.3)</A> descriptor must also be used. <p>For example: <pre> widths: U+4E00-4E1F 1736 1874 1692 </pre> <p>In this instance a range of 32 characters is given, from 4E00 to 4E1F. The glyph corresponding to the first character (4E00) has a width of 1736, the second has a width of 1874 and the third, 1692. Because not enough widths have been provided, the last width replicates to cover the rest of the specified range. If too many widths are provided, the excess are ignored. <p>If the unicode range is omitted, a range of U+0-FFFFFFFF is assumed which covers all characters and their glyph representations <p>This descriptor cannot describe multiple glyphs corresponding to a single character, or ligatures of multiple characters. Thus, this descriptor can <em>only</em> be used for scripts which do not have contextual forms or mandatory ligatures. It is nevertheless useful in those situations. Scripts which require a one-to-many or many-to-many mapping of characters to glyphs cannot at present use this descriptor to enable font synthesis although they can still use font downloading or intelligent matching. <H4><A NAME="defnsrc">4.6.2. 'definition-src'</A></H4> <P><EM>Value:</EM> <URL><BR> <EM>Initial:</EM>undefined <BR> <p>The font descriptors may either be within the font definition in the stylesheet, or may be provided within a separate <i>font definition resource</i> identified by a URL. The latter approach can reduce network traffic when multiple stylesheets reference the same fonts. <P>Having the font descriptors separate from the font data has a benefit beyond being able to do font selection and/or substitution. The data protection and replication restrictions on the font descriptors may be much weaker than on the full font data. Thus, it may be possible to locally install the font definition, or at least to have it in a local cache. This allows the abbreviated form of font definition within documents, but would not require accessing the full font definition over the Web more than once per named font. <H3><A NAME="alignment">4.7. Font-face Descriptors for Alignment</A></H3> <p>These optional descriptors are used to align runs of different scripts with one another. <H4><A NAME="centerline">4.7.1. 'centerline'</A></H4> <p><EM>Value:</EM> <number><br> <EM>Initial:</EM> undefined<br> <p>This is the descriptor for the <a href="#cline">central baseline (Section 9.2)</A> of a font. If the value is undefined, the UA may employ various heuristics such as the midpoint of the ascent and descent values. If this descriptor is used, the <a href="#unitsperem">'units-per-em' (Section 4.3)</A> descriptor must also be used. <H4><A NAME="mathline">4.7.2. 'mathline'</A></H4> <p><EM>Value:</EM> <number><br> <EM>Initial:</EM> undefined<br> <p>This is the descriptor for the <a href="#mline">mathematical baseline (Section 9.9)</A> of a font. If undefined, the UA may use the center baseline. If this descriptor is used, the <a href="#unitsperem">'units-per-em' (Section 4.3)</A> descriptor must also be used. <H4><A NAME="topline">4.7.3. 'topline'</A></H4> <p><EM>Value:</EM> <number><br> <EM>Initial:</EM> undefined<br> <p>This is the descriptor for the <a href="#tline">top baseline (Section 9.15)</A> of a font. If undefined, the UA may use an approximate value such as the ascent. If this descriptor is used, the <a href="#unitsperem">'units-per-em' (Section 4.3)</A> descriptor must also be used.</p> </div> <hr> <div class=main> <H2><A NAME="algorithm">5. Enhanced Font matching algorithm</A></H2> <P>This specification extends the algorithm given in the CSS1 specification. This algorithm reduces down to the algorithm in the CSS1 specification when the author and reader stylesheets do not contain any <tt>@font-face</tt> rules. <p>Matching of descriptors to font faces must be done carefully. The descriptors are matched in a well-defined order to insure that the results of this matching process are as consistent as possible across UAs (assuming that the same library of font faces and font descriptions is presented to each of them). This algorithm may be optimised, provided that an implementation behaves as if the algorithm had been followed exactly. <OL> <LI>The User Agent makes (or accesses) a database of relevant font-face descriptors of all the fonts of which the UA is aware. If there are two fonts with exactly the same descriptors, one of them is ignored. The UA may be aware of a font because: <ul> <li>it has been installed locally <li>it is declared using an <tt>@font-face</tt> rule in one of the style sheets linked to or contained in the current document <li>it has been previously downloaded over the web <!-- actually is this desirable ? Will fonts from one site bleed over to another, so presentation is history dependent? --> <li>it is used in the <em>UA default style sheet</em>, which conceptually exists in all UAs and is considered to have full <tt>@font-face</tt> rules for all fonts which the UA will use for default presentation, plus <tt>@font-face</tt> rules for the five special <a href="/TR/REC-CSS1#font-family">generic families</A> defined in CSS1 </ul> <LI>At a given element and for each character in that element, the UA assembles the font-properties applicable to that element. Using the complete set of properties, the UA uses the 'font-family' descriptor to choose a tentative font family. Thus, matching on a family name will succeed before matching on some other descriptor. The remaining properties are tested against the family according to the matching criteria described with each descriptor. If there are matches for all the remaining properties, then that is the matching font face for the given element. <LI>If there is no matching font face within the 'font-family' being processed by step 2, <em>UAs which implement intelligent matching</em> may proceed to examine other descriptors such as x-height, glyph representation widths, and panose-1 to identify a different tentative font family. If there are matches for all the remaining descriptors, then that is the matching font face for the given element. The font-family descriptor which is reflected back into the CSS1 properties is the font family that was requested, not whatever name the intelligently matched font may have. UAs which do not implement intelligent matching are considered to fail at this step. <li>If there is no matching font face within the 'font-family' being processed by step 3, <em>UAs which implement font downloading</em> may proceed to examine the src descriptor of the tentative font face identified in step 3 or 4 to identify a network resource which is available, and of the correct format. If there are matches for all the remaining descriptors, then that is the matching font face for the given element and the UA may attempt to download and temporarily install this font resource. The UA may choose to block on this download or may choose to proceed to the next step while the font downloads. UAs which do not implement font download, or are not connected to a network, or where the user preferences have disabled font download, or where the requested resource is unavailable for whatever reason, or where the downloaded font cannot be used for whatever reason, are considered to fail at this step. <li>If there is no matching font face within the 'font-family' being processed by step 3, <em>UAs which implement font synthesis</em> may proceed to examine other descriptors such as x-height, glyph representation widths, and panose-1 to identify a different tentative font family for synthesis. If there are matches for all the remaining descriptors, then that is the matching font face for the given element and synthesis of the faux font may begin. UAs which do not implement font synthesis are considered to fail at this step. <li>If all of steps 3, 4 and 5 fail, and if there is a next alternative 'font-family' in the font set, then repeat from step 2 with the next alternative 'font-family'. <LI>If there is a matching font face, but it doesn't contain a glyph representation for the current character, and if there is a next alternative 'font-family' in the font sets, then repeat from step 2 with the next alternative 'font-family'. The CSS1 specification has an <A HREF="/TR/REC-CSS1#appendix-c">appendix describing font and character encoding</A>. The unicode-range descriptor may be used to rapidly eliminate from consideration those font faces which do not have the correct glyph representations. If the unicode-range descriptor indicates that a font contains some glyph representations in the correct range, it may be examined by the UA to see if it has that particular one. <LI>If there is no font within the family selected in 2, then use a UA-dependent default 'font-family' and repeat from step 2, using the best match that can be obtained within the default font. If a particular character cannot be disoplayed using the default font, the UA should indicate that a character is not being displayed (for example, using the 'missing character' glyph). <li>UAs which implement progressive rendering and have pending font downloads may, once download and temporary installation is succesful, use the downloaded font as a font family. If the downloaded font is missing some glyph representations that the temporary progressive font did contain, the downloaded font is not used for that character and the temporary font continues to be used. </OL> <P>(The above algorithm can be optimized to avoid having to revisit the CSS1 properties for each character.) <P>The per-descriptor matching rules from (2) above are as follows:</p> <OL> <LI> <A HREF="#font-style">'font-style'</A> is tried first. 'italic' will be satisfied if there is a 'font-style' descriptor with the value of either 'italic' (preferred) or 'oblique'. Otherwise the values must be matched exactly or font-style will fail. <LI> <A HREF="#font-variant">'font-variant'</A> is tried next. 'normal' matches a font labeled normal; 'small-caps' matches a font labeled as 'small-caps' (which may in practice be a font in which the small caps are synthesized, or a font where all lowercase letters are replaced by upper case letters. A small-caps font may be synthesized by electronically scaling uppercase letters from a normal font). <LI> <A HREF="#font-weight">'font-weight'</A> is matched next, it will never fail. <LI> <A HREF="#font-size">'font-size'</A> must be matched within a UA-dependent margin of tolerance. (Typically, sizes for scalable fonts are rounded to the nearest whole pixel, while the tolerance for bitmapped fonts could be as large as 20%.) </OL> </div> <hr> <div class=main> <H2><a NAME="examples">6. Worked examples</a></H2> <P>The following example defines a specific font face, Alabama Italic. A panose font description and source URL for retrieving a truetype server font are also provided. Font-weight, and font-style descriptors are provided to describe the font. The declaration says that the weight will also match any request in the range 300 to 500). The font family is Alabama and the adorned font name is Alabama Italic.</P> <PRE><STYLE> @font-face { src: local(Alabama Italic), url(http://www.fonts.org/A/alabama-italic) format(truetype); panose-1: 2 4 5 2 5 4 5 9 3 3; font-family: Alabama, serif; font-weight: 300, 400, 500; font-style: italic, oblique; } </STYLE></PRE> <P>The next example defines a family of fonts. A single URL is provided for retrieving the font data. This data file will contain multiple styles and weights of the named font. Once one of these <tt>@font-face</tt> definitions has been dereferenced, the data will be in the UA cache for other faces that use the same URL.</P> <PRE><STYLE> @font-face { src: local(Helvetica Medium), url(http://www.fonts.org/sans/Helvetica_family) format(truedoc); font-family: "Helvetica"; font-style: normal } @font-face { src: local(Helvetica Oblique), url(http://www.fonts.org/sans/Helvetica_family) format(truedoc); font-family: "Helvetica"; font-style: oblique; slope: -18 } </STYLE></PRE> <p>The following example groups three physical fonts into one virtual font with extended coverage. In each case, the adorned font name is given in the src descriptor to allow locally installed versions to be preferentially used if available. <PRE><STYLE> @font-face { font-family: Excelsior; src: ;local(Excelsior Roman), url(http://site/er) format(intellifont); unicode-range: U+?? /* Latin-1 */ } @font-face { font-family: Excelsior; src: local(Excelsior EastA Roman), url(http://site/ear) format(intellifont); unicode-range: U+100-220 /* Latin Extended A and B */ } @font-face { font-family: Excelsior; src: local(Excelsior Cyrillic Upright), url(http://site/ecr) format(intellifont); unicode-range: U+4?? /* Cyrillic */ } </STYLE></PRE> <p>This example might be found in a UA's default style sheet. It implements the CSS1 generic font family, <tt>serif</tt> by mapping it to a wide variety of serif fonts that might exist on various platforms. No metrics are given since these vary between the possible alternatives. <PRE><STYLE> @font-face { src: local(Palatino), local(Times New Roman), local(New York), local(Utopia), url(http://somewhere/free/font); font-family: serif; font-weight: 100, 200, 300, 400, 500; font-style: normal; font-variant: normal; font-size: all } </STYLE></PRE> </div> <hr> <div class=main> <H2><A NAME="gloss">7. Glossary</A></H2> <dl> <dt><A NAME="definingAdornedName"></A><b>Adorned Font Name</b></dt> <dd>An <i>Adorned Font Name</i> is the name of the font as reported by the operating system and as it appears within most menus. Adornments such as bold, italic, underline are usually used to select the appropriate font within a font family.</dd> <DT><A NAME="definingAuthor"><b>Author</b></A> <DD>the author of an HTML document <dt><A NAME="definingCharacter"><b>Character</b></A> <dd><i>Characters</i> represent abstract information elements. A character has no intrinsic appearance. <DT><A NAME="definingCSS1"><b>CSS1</b></A> <DD><a href="/TR/REC-CSS1">Cascading Style Sheets, level 1</A>. <DT><A NAME="definingDocLock"><b>DocLock™</b></A> <dd>Bitstream's <i>DocLock™</i> technology ensures that TrueDoc PFRs can only be used with the site they are published for. A TrueDoc PFR moved to a different site or referenced from another site will not work. <dt><A NAME="definingDSIG"><b>Digital Signature</b></A> <dd>Part of a trust management technology, used to provide signed assertions about a resource. <!-- DSIG for example in OpenType, http://www.microsoft.com/TRUETYPE/OTSPEC/dsig.htm --> <dt><A NAME="definingFont"></A><b>Font</b></dt> <dd>A <i>font</i> is a collection of glyph representations having the same basic design according to design, size, appearance, writing system, and other attributes associated with the entire set.</dd> <dt><A NAME="definingFontCaching"></A><b>Font Caching</b></dt> <dd><i>Font caching</i> allows for a temporary copy of fonts on the client system. They are usually strored on disk with other cached items such as graphics specifically for the UA.</dd> <DT><A NAME="definingFontData"><b>Font Data</b></A> <DD>The data that defines the glyph representations of a font, most often glyph representation outlines. <DT><A NAME="definingFontDescription"><b>Font Description</b></A> <DD>A description of a font (but not the actual glyph representation shapes), contained in a stylesheet. The level of detail can vary from just the name of the font up to a list of glyph representation widths. This data is a subset of the glyph representation metrics contained in the font.. <DT><A NAME="definingFontFace"><b>Font Face</b></A> <DD>A "handle" that refers to a specific face of a font, excluding the font size (? size may be needed for non-scalable fonts) <dt><A NAME="definingFontMatching"></A><b>Font Matching</b></dt> <dd><i>Font matching</i> is a process of selecting a similar font based on using one or more attributes of the primary font. Common attribute include serif, sans serif, weight, cap height, x height, spacing, language, and posture. Font matching is dependent on the algorithm and the variety of candidate fonts.</dd> <DT><A NAME="definingFontReference"><b>Font Reference</b></A> <DD>A network request for a certain font face from a document <dt><A NAME="definingGlyph"><b>Glyph</b></A> <dd><i>Glyphs</i> represent abstract presentation elements. A glyph conveys distinctions in form. A glyph has no intrinsic meaning. <dt><A NAME="definingGlyphRepresentation"><b>Glyph Representation</b></A> <dd><i>Glyph Representations</i> are artistic representations of abstract glyphs in a particular typographic style. Fonts are collections of glyph representations and associated metadata. One or more characters may be depicted by one or more glyph representations in a possibly context dependent fashion. <dt><A NAME="definingSubsetting"></A><b>Glyph Representation Sub-setting</b></dt> <dd><i>Glyph Representation sub-setting</i> is the process by which unwanted glyph representations, (together with their sidebearings and kerning information) are removed from a primary font to produce a smaller subset font that covers a particular document or set of documents. This is a particular win for documents that use ideographic scripts, where the glyph complement of the base font can be very large. Glyph representation subsetting for documents using scripts that require ligatures, such as Arabic, is difficult without knowing the ligature formation rules of the final display system.</dd> <DT><A NAME="definingHTML"><b>HTML</b></A> <DD>Hypertext Markup Language, an application of SGML. <dt><A NAME="definingIntellifont"><b>Intellifont</b></A> <dd>Intellifont technolgy was developed by Agfa and is the native format for Hewlett-Packard and other printers that use the PCL5 language. It is also the native font format on the Amiga computers. <dt><A NAME="definingInfinifont" class="offsite" href="http://www.fonts.com/hp/infinifont/moredet.html"><b>Infinifont</b></A> <dd>A font synthesis technique which, given a Panose-1 number (and, optionally, additional font description data) can generate a faux font without extrapolating from a single master outline or interpolating between two or more outlines. <dt><A NAME="definingItalic"><b>Italic</b></A> <dd>A class of letterforms for Latin scripts, that are more cursive than roman letterforms but less so than script forms. Often, a pair of fonts are designed to be used together; one is a serifed roman and one is italic. Other terms to describe this class of letterforms include cursive and, for Cyrillic scripts, kursiv. For sans-serif faces, the companion face is often a slanted or oblique variant rather than a different class of letterform.<br> <img src="fontpics/italic-40"> <dt><A NAME="definingKern"><b>Kerning</b></A> <dd>Altering the spacing between selected glyph representations, which would otherwise appear to be too close or too far apart, to obtain a more even typographical color. <p><img src="fontpics/kern-22"></p> <dt><A NAME="definingMultiMaster"></A><b>Multiple Master Font</b></dt> <dd>A <i>Multiple Master Font</i> contain two primary fonts that are used with special rendering software to provide an interpolated result. Adobe Systems provides a mechanism that allows for parameters to be used to control the output or the interpolated output font. These parameters usually describe the characteristics of an original font and the multiple master result is referred to as a synthesized font.</dd> <dt><A NAME="definingOpenType"><b> Open Type</b></A> <dd><i><a class="offsite" href="http://www.microsoft.com/TRUETYPE/OTSPEC/tablist.htm">Open Type</A></i> is an extension to the TrueType font format which contains additional information that extends the capabilities of the fonts to support high-quality international typography. Open Type can associate a single character with multiple glyph representations, and combinations of characters with a single glyph representation (ligature formation). Open Type includes two-dimensional information to support features for complex positioning and glyph attachment. TrueType Open contains explicit script and language information, so a text-processing application can adjust its behavior accordingly. <dt><A NAME="definingProgRend"></A><b>Progressive rendering</b></dt> <dd><i>Progressive rendering</i> of fonts provides rapid display of text which uses downloaded fonts. While waiting for download, a substitute font (which approximates the desired look while matching the metrics of the original) is used. Progressive rendering requires metric information about the font in order to avoid re-layout of the content when the actual font has been loaded and rendered. This metric information is sufficiently verbose that it should only be specified at most once per font in a document. </dd> <DT><A NAME="definingReader"><b>Reader</b></A> <DD>The person for whom the document is rendered <dt><A NAME="definingServerFont"></A><b>Server Font</b></dt> <dd>A <i>Server Font</i> is a font resource located on the web server that is referenced by the WebFont definition. The user agent may use this resource for rendering the page.</dd> <dt><A NAME="definingSpeedo"><b>Speedo</b></A> <dd><i>Speedo</i> font technology was developed by Bitstream and is the native forn format on thr Atari ST and Falcon computers,. It is also used by computers running X. <dt><A NAME="definingTrueDoc"></A><b>TrueDoc</b></dt> <dd><i>TrueDoc</i> technology was developed by Bitstream for the creation, transport, and imaging of platform independent scaleable font objects on the web. Creation of font objects is done by the TrueDoc character shape recorder (CSR) and the rendering of the font objects is done by TrueDoc's character shape player (CSP). The technology is intended to be used on the web for viewing and printing.</dd> <dt><A NAME="definingTrueDocPFR"></A><b>TrueDoc Portable Font Resource</b></dt> <dd>A <i>TrueDoc Portable for resource</i> (or <b>PFR</b>) is a platform independent scaleable font object which is produce by a character shape player. Input may be either TrueType or Type 1 of any flavor on either Windows, Mac, or Unix. TrueDoc Portable Font Resources provide good compression ratios, are platform independent, and because they are not in an native font format (TrueType or Type 1) they can not be easily installed.</dd> <dt><A NAME="definingTT"></A><b>TrueType</b></dt> <dd><i>TrueType </i>is a font format developed by Apple and licensed to Microsoft. TrueType is the native operating system font format for Windows and Macintosh. TrueType contains a hierarchical set of tables and glyph representations. Characters can be hinted on a per character and point size basis yielding excellent quality at screen resolutions. TrueType fonts for Windows and Mac have few differences, though they can be different enough to prevent cross platform usage. Font foundries provide TrueType fonts for each platform and usually include a license preventing electronic manipulation to achieve cross platform transparency. </dd> <dt><A NAME="definingTTC"></A><b>TrueType Collection</b></dt> <dd>A <i>TrueType Collection</i> (or <b>TTC</b>) is an extension to the TrueType format that includes tables that allow for multiple TrueType fonts to be contained within a single TrueType font file. TrueType collection files are relatively rare at this time. </dd> <dt><A NAME="definingTTGX"></A><b>TrueType GX Fonts</b></dt> <dd><i>TrueType GX Fonts</i> contain extensions to the standard TrueType format that allow for mutable fonts, similar to Multiple Master fonts. There may be several mutation axis such as weight, height, and slant. The axis can be defined to obtain almost any effect. TrueType GX can also supports alternate glyph representation substitution for ligatures, contextual forms, fractions, etc. To date, TrueType GX is available only on the Mac. <a class="offsite" href="http://support.info.apple.com/gx/typog.html">Details about TrueType GX</A> are available from Apple, including <a href="http://support.info.apple.com/gx/GXFF/chap0.html">descriptions of the added tables</A> and <a href="http://support.info.apple.com/gx/FQS/FQSTOC.html" class="offsite">font quality specifications</A>.</dd> <dt><A NAME="definingT1"></A><b>Type 1 font</b></dt> <dd><i>Type 1 fonts</i>, developed by Adobe Systems, were one of first scaleable formats available. Type 1 fonts are usually contain 228 characters with the glyph representations described using third degree bezier curves. Mac, Windows, and X have similar but separate formats; Adobe provides Adobe Type Manager for all three platforms. Type1c is a more recent losslessly-compressed storage form for Type 1 glyph representations.</dd> <dt><A NAME="definingUA"><b>UA</b></A> <dd>A User Agent. Browsers are examples of User Agents, as are web robots. <dt><A NAME="definingURLbound"><b>URL Binding</b></A> <dd>A process of locking a particular font resource to a given Web site by embedding an enrypted URL or a digitally signed usage assertion into the font resource. </dl> </div> <hr> <div class=main> <H2><a name="universal">8. Web Fonts for Multiple Media</A></H2> <p>These appendices list and define the font metadata and HTTP access methods which have been found useful for client-side font matching, synthesis, and download for heterogenous platforms accessing the Web. The data may be useful for any medium which needs to use Fonts on the Web by some other means than physical embedding of the font data inside the medium. These definitions are used in the main body of this specification, where they are mapped onto an 'at-rule' extension to CSS-1. These definitions could also be mapped onto VRML nodes, or CGM Application Structures, or a Java API. Fonts retrieved by one medium and stored in a proxy cache could be re-used by another medium, saving download time and network bandwidth. <p>A non-exhaustive list examples of such media includes: <ul> <li>2-D vector formats <ul> <li>Computer Graphics Metafile <li>Simple Vector Format </ul> <li>3-D graphics formats <ul> <li>VRML <li>3DMF </ul> <li>Object embedding technologies <ul> <li>Java <li>Active-X <li>Obliq </ul> </ul> </div> <hr> <div class=main> <H2><A NAME="generic-props">9. Font characteristics</A></H2> <p>These characteristics may be used to characterise fonts. They are not specific to CSS or to Stylesheets. In most cases there is a 1:1 mapping between these characteristics and a WebFont <a href="#fontdesc">Font Descriptor</a>. <H3><a name="aname">9.1. Adorned font name</A></H3> <p>This is the full name of a particular face of a font family. It typically includes a variety of non-standardised textual qualifiers or <i>adornments</i> appended to the font family name. It may also include a foundry name or abbreviation, often prepended to the font family name. <p>The name of the font definition is important because it is the link to any locally installed fonts. It is important that the name be robust, both with respect to platform and application independence. For this reason, the name should be one which is not application or language specific. <P> The ideal solution would be to have a name which uniquely identifies each collection of font data. This name does not exist in current practice for font data. Fonts with the same face name can vary over of number of descriptors. Some of these descriptors, such as different complements of glyphs in the font may be insignificant if the needed glyphs are in the font. Other descriptors, such as different width metrics, make fonts with the same name incompatible. It does not seem possible to define a rule that will always identify incompatibilities, but will not prevent the use of a perfectly suitable local copy of the font data with a given name. Therefore, only the range of Unicode characters will be used to qualify matches for the font face name. <P>Since a prime goal of the font face name in the font definition is allow a user agent to determine when there is a local copy of the specified font data, the font face name must be a name which will be in all legitimate copies of the font data. Otherwise, unnecessary Web traffic may be generated due to missed matches for the local copy. <p>For TrueType fonts or all flavours, this value may be obtained from the <tt>full font name</tt> from the <tt>name</tt> table. <p>For Type 1 fonts, this value may be obtained from the PostScript language name; the name which, in a PostScript language program, is used as an operand of the findfont operator. It is the name associated with the font by a definefont operation. This is usually the value of the FontName entry in the font dictionary.For more information, see Section 5.2 of the PostScript Language Reference Manual, Second Edition <a href="#ref10">[Ref 10]</A>. </p> <p>Multiple Master Type 1 fonts allow specifying various design dimensions (e.g., weight, such as light to extra-bold, and width, such as condensed to expanded) <a href="#ref12">[Ref 12]</A>. Coordinates along these design dimensions are specified by numbers, and are appended as a suffix to the base font name. To specify the appearance of the font, numeric values must be supplied for each design dimension of the multiple master font. A completely specified multiple master font is referred to as an instance of the multiple master font. <p>The PostScript language name used for a Multiple Master Type 1 is the name the instance. If the name contains spaces (such as "MinionMM 366 465 11"), these spaces are replaced with underscores. For example, the base font name here is TektonMM and the 2 dimensions specified have values of 200 and 300:</p> <pre> TektonMM_200_300</pre> <p>The full font name of the TrueType font and the PostScript Language name may differ by spacing and punctuation. For example, spaces are not allow in a PostScript Language name, but are common in full font names. The TrueType name table can also contain the PostScript name, which has no spaces. <H3><a name="cline">9.2. Central Baseline</A></H3> <p>This gives the position in the em square of the central baseline. The central baseline is used by ideographic scripts for alignment, just as the bottom baseline is used for Latin, Greek and Cyrillic scripts. <p>For TrueType GX fonts, this value may be obtained from the <a href="http://support.info.apple.com/gx/GXFF/chap3.html" class="offsite"> <tt>bsln</tt></A> table. Within this table, the <tt>ideographic centered baseline</tt> may be used for stetches of predominantly ideographic characters and the <tt>ideographic low baseline</tt> is more suitable for ideographic characters in a run of predominantly Latin, Greek or Cyrillic characters. <H3><a name="emsq">9.3. Co-ordinate units on the em square</A></H3> <p>Certain values, such as width metrics, are expressed in units that are relative to an abstract square whose height is the intended distance between lines of type in the same type size. This square is called the EM square. The value of this descriptor specifies how many units the EM square is divided into. The valid range is 16 to 16384 units per EM square. Common values are 250 (Intellifont), 1000 (Type 1) and 2048 (TrueType). <p>If this value is not specified, it becomes impossible to know what any font metrics mean. For example, one font has lowercase glyph representations of height 450; another has smaller ones of height 890! The numbers are actually fractions; the first font has 450/1000 and the second has 890/2048 which is indeed smaller. <p>For Type 1 fonts, this value may be obtained from the <tt>FontMatrix</tt> entry in the font dictionary. For TrueType fonts, this value may be obtained from the <tt>unitsPerEm</tt> entry in the <tt>head</tt> table. For Intellifont fonts, this value is contained in the font attribute file. <H3><a name="family">9.4. Font family name</A></H3> <p>Specifies the family name portion of the font face name. For example, the family name for Helvetica-Bold is Helvetica and the family name of ITC Stone Serif Semibold Italic is ITC Stone Serif. Some systems treat adornments relating to condensed or expanded faces as if they were part of the family name. <!-- whole system is too flat anyway - is Adobe Stone Serif the same family? Is Minion Cyrillic the same family as Minion? --> <p>For Type 1 fonts, this value may be obtained from the <tt>FamilyName</tt> entry in the FontInfo dictionary. <H3><a name="lrwidth">9.5. Glyph Representation widths</A></H3> <p>For Type 1 fonts, this value may be obtained from the. For TrueType fonts, the values are in the <tt>hmtx</tt> table. <H3><a name="Hstem">9.6. Horizontal stem width</A></H3> <p> <p>For Type 1 fonts, this value may be obtained from the <tt>StdHW</tt> entry, in the Private dictionary or the AFM file. <H3><a name="cap">9.7. Height of capital glyph representations</A></H3> <p>The y-coordinate of the top of flat capital letters in Latin, Greek and Cyrillic scripts, measured from the baseline. This descriptor is not useful for fonts that do not contain any glyph representations from these scripts. <p>For Type 1 fonts, this value may be obtained from the <tt>CapHeight</tt> entry in the AFM file or from the <tt>Bluevalues</tt> entry in the Private dictionary <H3><a name="xht">9.8. Height of lowercase glyph representations</A></H3> <p>The y-coordinate of the top of unaccented, non-ascending lowercase letters in Latin, Greek and Cyrillic scripts, measured from the baseline. Flat-topped letters are used, ignoring any optical correction zone. Usually used a s aratio of lowercase to uppercase heights, as a means of comparison between font families. The terms large-eye, small-eye are also used to indicate the height of lowercase glyph representations relative to the height of uppercase. <br> <img src="fontpics/x-height"> <p>This descriptor is not useful for fonts that do not contain any glyph representations from these scripts. Since the heights of lowercase and uppercase letters are often formed into a ratio for comparing different fonts, it may be useful to set both the lowercase and uppercase heights to the same value for unicameral scripts such as Hebrew, where for mixed Latin and Hebrew text the Hebrew characters are typically set at a height midway between the capital and lowercase heights of the Latin font.<br> <img src="fontpics/heb-height-54"> <p>For Type 1 fonts, this value may be obtained from the <tt>Bluevalues</tt> entry in the Private dictionary. <H3><a name="mline">9.9. Mathematical Baseline</A></H3> <p>This gives the position in the em square of the mathematical baseline. The mathematical baseline is used by ideographic scripts for alignment, just as the bottom baseline is used for Latin, Greek and Cyrillic scripts. <p>For TrueType GX fonts, this value may be obtained from the <a href="http://support.info.apple.com/gx/GXFF/chap3.html" class="offsite">'bsln'</A> table. <H3><a name="mbbox">9.10. Maximal bounding box</A></H3> <p> <p>For Type 1 fonts, this value may be obtained from the FontBBox entry in the font dictionary. For TrueType fonts, the four values are in the <tt>'xMin'</tt>, <tt>'xMax'</tt>, <tt>'yMin'</tt> and <tt>'yMax'</tt> entries of the <tt>'head'</tt> table. <H3><a name="typoascent">9.11. Maximum unaccented height</A></H3> <p> <p>For Type 1 fonts, this value may be obtained from the <tt>'Ascender'</tt> value in the AFM file. For TrueType and OpenType fonts, this value may be obtained from the <tt>'Ascender'</tt> entry in the <a class="offsite" href= "http://www.microsoft.com/TRUETYPE/OTSPEC/hhea.htm"><tt>'hhea'</tt></A> table or (preferably) from the <tt>'sTypoAscender'</tt> value in the <a href="http://www.microsoft.com/TRUETYPE/OTSPEC/os2.htm" class="offsite"><tt>'OS/2'</tt></A> table. For TrueType GX fonts, the <tt>'horizontalBefore'</tt> entry in the <a href="http://support.info.apple.com/gx/GXFF/chap24.html" class="offsite"><tt>'fmtx'</tt></A> table is used, over-riding Ascender values in the <tt>'hhea'</tt> table. <H3><a name="typodescent">9.12. Maximum unaccented depth</A></H3> <p>For Type 1 fonts, this value may be obtained from <tt>'descender'</tt> value in the AFM file. <H3><A NAME="pan1">9.13. PANOSE-1 number</A></H3> <p><i>Panose-1</i> is an industry standard TrueType font classification and matching technology. The PANOSE system consists of a set of ten numbers that categorize the key attributes of a Latin typeface, a classification procedure for creating those numbers, and Mapper software that determines the closest possible font match given a set of typefaces. The system <em>could</em>, with modification, also be used for Greek and Cyrillic, but is not suitable for unicameral and ideographic scripts (Hebrew, Armenian, Arabic, Chinese/Japanese/Korean). Panose-1 technology was originally developed by Elseware Corporation and is now owned by Hewlett Packard. <p><img src="fontpics/panose-16"></p> <p>The Family, Serif Style and Proportion numbers are used by Windows95 for font selection and matching. <p>The meaning of the ten numbers and the allowable values (given in parentheses) are given below for the most common case, where the "family" digit is <tt>2, Text and Display</tt>. If the first digit has a different value, the remaining nine digits have different meanings. <dl> <dt>Family <dd><ul> <li>Any (0) <li>No Fit (1) <li><a href="http://www.fonts.com/hp/panose/greybook/pan2.htm" class="offsite"><b>Latin Text and Display</b></A> <i>(2)</i> <li><a href="http://www.fonts.com/hp/panose/greybook/pan3.htm" class="offsite">Latin Script</A> (3) <li><a href="http://www.fonts.com/hp/panose/greybook/pan4.htm" class="offsite">Latin Decorative</A> (4) <li><a href="http://www.fonts.com/hp/panose/greybook/pan5.htm" class="offsite">Latin Pictorial</A> (5) </ul> <dt>Serif Style <dd><ul> <li>Any (0) <li>No Fit (1) <li>Cove (2) <li>Obtuse Cove (3) <li>Square Cove (4) <li>Obtuse Square Cove (5) <li>Square (6) <li>Thin (7) <li>Bone (8) <li>Exagerated (9) <li>Triangle (10) <li>Normal Sans (11) <li>Obtuse Sans (12) <li>Perp Sans (13) <li>Flared (14) <li>Rounded (15) </ul> <dt>Weight <dd><ul><li>Any (0) <li>No Fit (1) <li>Very Light (2)[100] <li>Light (3) [200] <li>Thin (4) [300] <li>Book (5) [400] <i>same as CSS1 'normal'</i> <li>Medium (6) [500] <li>Demi (7) [600] <li>Bold (8) [700] <i>same as CSS1 'bold'</i> <li>Heavy (9) [800] <li>Black (10) [900] <li>Extra Black / Nord (11) [900] <i>force mapping to CSS1 100-900 scale</i> </ul> <dt>Proportion <dd><ul> <li>Any (0) <li>No Fit (1) <li>Old Style (2) <li>Modern (3) <li>Even Width (4) <li>Expanded (5) <li>Condensed (6) <li>Very Expanded (7) <li>Very Condensed (8) <li>Monospaced (9) </ul> <dt>Contrast <dd><ul><li>Any (0) <li>No Fit (1) <li>None (2) <li>Very Low (3) <li>Low (4) <li>Medium Low (5) <li>Medium (6) <li>Medium High (7) <li>High (8) <li>Very High (9) </ul> <dt>Stroke Variation <dd><ul><li>Any (0) <li>No Fit (1) <li>No Variation (2) <li>Gradual/Diagonal (3) <li>Gradual/Transitional (4) <li>Gradual/Vertical (5) <li>Gradual/Horizontal (6) <li>Rapid/Vertical (7) <li>Rapid/Horizontal (8) <li>Instant/Horizontal (9) <li>Instant/Vertical (10) </ul> <dt>Arm Style <dd><ul><li>Any (0) <li>No Fit (1) <li>Straight Arms/Horizontal (2) <li>Straight Arms/Wedge (3) <li>Straight Arms/Vertical (4) <li>Straight Arms/Single Serif (5) <li>Straight Arms/Double Serif (6) <li>Non-Straight Arms/Horizontal (7) <li>Non-Straight Arms/Wedge (8) <li>Non-Straight Arms/Vertical 90) <li>Non-Straight Arms/Single Serif (10) <li>Non-Straight Arms/Double Serif (11) </ul> <dt>Letterform <dd> <ul><li>Any (0) <li>No Fit (1) <li>Normal/Contact (2) <li>Normal/Weighted (3) <li>Normal/Boxed (4) <li>Normal/Flattened (5) <li>Normal/Rounded (6) <li>Normal/Off Center (7) <li>Normal/Square (8) <li>Oblique/Contact (9) <li>Oblique/Weighted (10) <li>Oblique/Boxed (11) <li>Oblique/Flattened (12) <li>Oblique/Rounded (13) <li>Oblique/Off Center (14) <li>Oblique/Square (15) </ul> <dt>Midline <dd> <ul><li>Any (0) <li>No Fit (1) <li>Standard/Trimmed (2) <li>Standard/Pointed (3) <li>Standard/Serifed (4) <li>High/Trimmed (5) <li>High/Pointed (6) <li>High/Serifed (7) <li>Constant/Trimmed (8) <li>Constant/Pointed (9) <li>Constant/Serifed (10) <li>Low/Trimmed (11) <li>Low/Pointed (12) <li>Low/Serifed (13) </ul> <dt>XHeight <dd><ul><li>Any (0) <li>No Fit (1) <li>Constant/Small (2) <li>Constant/Standard (3) <li>Constant/Large (4) <li>Ducking/Small (5) <li>Ducking/Standard (6) <li>Ducking/Large (7) </ul> </dl> <p>For further details on Panose-1, see <a class="offsite" href="http://www.fonts.com/hp/panose/greybook/frame.htm">http://www.fonts.com/hp/panose/greybook/frame.htm</A>. Panose numbers for some fonts are available online and may be <a class="offsite" href="http://www.fonts.com/hp/panose/dbsearch/index.htm">queried</A>. <p><a href="/Fonts/Panose/pan2.html"><i>Panose-2</i></A> is a specification for a more comprehensive font classification and matching technology which is <a href="/Fonts/Panose/pan2.html#CrossClassDigits">not limited to Latin typefaces</A>. For example, the serif characteristics of a Latin face may be compared with the stroke terminations of a Kanji face. <p><img src="/Fonts/Panose/P2F24"></p> <p>The Panose-2 value is not stored inside any known font formats, but may be measured. <H3><a name="ucode">9.14. Range of Unicode characters</A></H3> <p>This indicated the glyph repertoire of the font, relative to the Basic Multilingual Plane of Unicode, and is used to eliminate unsuitable fonts (ones that will not have the required glyphs). It does not indicate that the font definitely has the required glyphs, only that it is worth downloading and looking at the font. Useful <a href="http://www.indigo.ie/egt/standards/iso10646/bmp-roadmap-table.html" class="offsite">roadmap of the BMP</A> and <a href="http://www.indigo.ie/egt/standards/iso10646/plane-1-roadmap-table.html" class="offsite">roadmap of plane 1</A> documents show which scripts sit at which numeric ranges. <p>Font formats that do not include this information, explicitly or indirectly, may still use this descriptor, but the value must be supplied by the document or stylesheet author, perhaps being obtained by inspection.</p> <p>For Type 1 fonts, this value may be obtained from the CMap file). <!--@@look up spec for CID fonts --> <p>For TrueType and Opentype fonts, this information is available in the font by looking at the 'ulUnicodeRange' bits in the 'OS/2' table, which holds a bitfield representation of the set. This table is defined in revision 1.66 of the TrueType specification, from Microsoft. Considering this information as a set, each element corresponds to a Unicode 2.0 character block, and the presence of that element in the set indicates that the font has one or more glyph representations to represent at least one character in that block. The set has 128 elements as described below. The order generally follows that in the Unicode 1.1 standard. This table may be used to convert the information in za TrueType font into a CSS 'unicode-range' descriptor. <table> <tr><th colspan="4"><hr><tr><th>Block<th>Add<th>Block name<th>Unicode range <tr><th colspan="4"><hr><tr><td>0<td>1<td>Basic Latin<td>U+0-7F <tr><td>1<td>2<td>Latin-1 Supplement<td>U+80-FF <tr><td>2<td>4<td>Latin-1 Extended-A<td>U+100-17F <tr><td>3<td>8<td>Latin Extended-B<td>U+180-24F <tr><th colspan="4"><hr> <tr><td>4<td>1<td>IPA Extensions<td>U+250-2AF <tr><td>5<td>2<td>Spacing Modifier Letters<td>U+2B0-2FF <tr><td>6<td>4<td>Combining Diacritical Marks<td>U+300-36F <tr><td>7<td>8<td>Greek<td>U+370-3CF <tr><th colspan="4"><hr> <tr><td>8<td>1<td><i>Greek Symbols and Coptic</i><td>U+3D0-3EF <tr><td>10<td>4<td>Armenian<td>U+530-58F <tr><td>11<td>8<td>Hebrew<td>U+590-5FF <tr><th colspan="4"><hr> <tr><td>12<td>1<td><i>Hebrew Extended-A<br>Hebrew Extended-B</i><td>?? what ranges ?? <tr><td>13<td>2<td>Arabic<td>U+600-69F<!--0700-08FF ?? --> <tr><td>14<td>4<td><i>Arabic Extended</i><td>U+670-6FF <tr><td>15<td>8<td>Devanagari<td>U+900-97F <tr><th colspan="4"><hr> <tr><td>16<td>1<td>Bengali<td>U+980-9FF <tr><td>17<td>2<td>Gurmukhi<td>U+A00-A7F <tr><td>18<td>4<td>Gujarati<td>U+A80-AFF <tr><td>19<td>8<td>Oriya<td>U+B00-B7F <tr><th colspan="4"><hr> <tr><td>20<td>1<td>Tamil<td>U+B80-BFF <tr><td>21<td>2<td>Telugu<td>U+C00-C7F <tr><td>22<td>4<td>Kannada<td>U+C80-CFF <tr><th colspan="4"><hr> <tr><td>24<td>1<td>Thai<td>U+E00-E7F <tr><td>25<td>2<td>Lao<td>U+E80-EFF <!-- <tr><td>- <td><b>Tibetan ??</b><td>--> <tr><td>26<td>4<td>Georgian<td>U+10A0-10EF <tr><td>27<td>8<td><i>Georgian Extended</i><td>U+10F0-10FF ?? <tr><th colspan="4"><hr> <tr><td>28<td>1<td>Hangul Jamo<td>U+1100-11FF <tr><td>29<td>2<td>Latin Extended Additional<td>- <tr><td>30<td>4<td>Greek Extended<td>U+1F00-1FFF <tr><td>31<td>8<td>General Punctuation<td>U+2000-206F <tr><th colspan="4"><hr> <tr><td>32<td>1<td>Superscripts and Subscripts<td>- <tr><td>33<td>2<td>Currency Symbols<td>U+20A0-20CF <tr><td>34<td>4<td>Combining Marks for Symbols<td>U+20D0-20FF <tr><td>35<td>8<td>Letterlike Symbols<td>U+2100-214F <tr><th colspan="4"><hr> <tr><td>36<td>1<td>Number Forms<td>U+2150-218F <tr><td>37<td>2<td>Arrows<td>U+2190-21FF <tr><td>38<td>4<td>Mathematical Operators<td>U+2200-22FF <tr><td>39<td>8<td>Miscellaneous Technical<td>U+2300-23FF <tr><th colspan="4"><hr> <tr><td>40<td>1<td>Control Pictures<td>U+2400-243F <tr><td>41<td>2<td>Optical Character Recognition<td>U+2440-245F <tr><td>42<td>4<td>Enclosed Alphanumerics<td>U+2460-24FF <tr><td>43<td>8<td>Box Drawing<td>U+2500-257F <tr><th colspan="4"><hr> <tr><td>44<td>1<td>Block Elements<td>U+2580-259F <tr><td>45<td>2<td>Geometric Shapes<td>U+25A0-25FF <tr><td>46<td>4<td>Miscellaneous Symbols<td>U+2600-26FF <tr><td>47<td>8<td>Dingbats<td>U+2700-27BF <tr><th colspan="4"><hr> <tr><td>48<td>1<td>CJK Symbols and Punctuation<td>U+3000-303F <tr><td>49<td>2<td>Hiragana<td>U+3040-309F <tr><td>50<td>4<td>Katakana<td>U+30A0-30FF <tr><td>51<td>8<td>Bopomofo<td>U+3100-312F <tr><th colspan="4"><hr> <tr><td>52<td>1<td>Hangul Compatibility Jamo<td>U+3130-318F <!-- <tr><td>- <td><b>Kanbun ??</b><td>--> <tr><td>53<td>2<td>CJK Miscellaneous<td>?? <tr><td>54<td>4<td>Enclosed CJK Letters and Months<td>U+3200-32FF <tr><td>55<td>8<td>CJK compatibility<td>U+3300-33FF <tr><th colspan="4"><hr> <tr><td>56<td>1<td>Hangul<td>U+AC00-D7FF <!-- <tr><td>57<td>0<td>RESERVED<td>- <tr><td>58<td> RESERVED<td>- --> <tr><td>59<td>8<td>CJK Unified Ideographs<td>U+4E00-9FFF <tr><th colspan="4"><hr> <!-- <tr><td>-<td><b>Surrogates ??</b><td>--> <tr><td>60<td>1<td>Private Use Area<td>U+E000-F8FF <tr><td>61<td>2<td>CJK Compatibility Ideographs<td>U+F900-FAFF <tr><td>62<td>4<td>Alphabetic Presentation Forms<td>U+FB00-FB4F <tr><td>63<td>8<td>Arabic Presentation Forms-A<td>U+FB50-FDFF <tr><th colspan="4"><hr> <tr><td>64<td>1<td>Combining Half Marks<td>U+FE20-FE2F <tr><td>65<td>2<td>CJK compatibility Forms<td>U+FE30-FE4F <tr><td>66<td>4<td>Small Form Variants<td>U+FE50-FE6F <tr><td>67<td>8<td>Arabic Presentation Forms-B<td>U+FE70-FEFF <!--FEFF also in Specials --> <tr><th colspan="4"><hr> <tr><td>68<td>1<td>Halfwidth and Fullwidth Forms<td>U+FF00-FFEF <tr><td>69<td>2<td>Specials<td>U+FFF0-FFFD </table> <p class=comment>The TrueType bitfield system has the problem that it is tied to Unicode 1.1 and is unable to cope with Unicode expansion - it is unable to represent Tibetan for example. <p>There are other classifications into scripts, such as the <a href="http://www.monotype.com/html/oem/uni_scrmod.html" class="offsite">Monotype Script </A>system and a <a href="">proposed ISO script system</A>. <p>Because of this, classification of glyph repertoires by the range of Unicode characters that may be represented with a partic ular font is suggested in this specification. <H3><a name="tline">9.15. Top Baseline</A></H3> <p>This gives the position in the em square of the top baseline. The top baseline is used by Sanscrit-derived scripts for alignment, just as the bottom baseline is used for Latin, Greek and Cyrillic scripts. <p>For TrueType GX fonts, this value may be obtained from the <a href="http://support.info.apple.com/gx/GXFF/chap3.html" class="offsite">'bsln'</A> table. <H3><a name="srcurl">9.16. URL to retrieve the font data</A></H3> <p>This is a URL pointing to the font data itself. This is required if the Web Font is to be retrieved. The embedded font structure may be a subset of the source font. <H3><a name="Vstem">9.17. Vertical stem width</A></H3> <p>The width of vertical (or near-vertical) stems of glyph representations. This information is often tied to hinting, and may not be directly accessible in some font formats. For Type 1 fonts, this may be obtained from the <tt>/StdVW</tt> entry in the Private dictionary or the AFM file. For TrueType fonts, this may be obtained from the <tt>cvt</tt> table. <H3><a name="Vslope">9.18. Vertical stroke angle</A></H3> <p>Angle, in degrees counterclockwise from the vertical, of the dominant vertical strokes of the font. The value is negative for fonts that slope to the right, as almost all italic fonts do. This descriptor may also be specified for oblique fonts, slanted fonts, script fonts, and in general for any font whose vertical strokes are not precisely vertical. A non-zero value does not of itself indicate an italic font.</p> </div> <hr> <div class=main> <H2><A NAME="coneg">10. Font retrieval</A></H2> <p>There are many different font formats in use by many different platforms. To select a preferred font format, <a class="offsite" href="http://gewis.win.tue.nl/~koen/conneg/draft-ietf-http-negotiation-01.html">transparent content negotiation</A> is used. It is always possible to tell when a font is being dereferenced, because the URL is inside a font description. Thus, only the relevant Accept headers need be sent (not headers related to images, html, etc). <!-- <p>The IETF has not allocated a <tt>font/*</tt> primary type, nor is it willing to add one. Instead, content negotiation for fonts takes place using the <tt>Accept-Font</tt> and <tt>Font-Type</tt> HTTP headers. If a MIME type is used, it should be <tt>application/octet stream</tt> which is the recommended type for binary data with no assigned MIME type. To label the format of the font (in the 'src' descriptor, in the <tt>Accept-Font</tt> and <tt>Font-Type</tt> HTTP headers) the following textual labels are used: <pre> type1 (Mac, PC, most X) cid (Asian type1) type2 (cff, includes CID and MM?) truetype (Mac, PC native) truetype-gx (Mac) truetype-open (PC, Middel-East and Far-East markets) opentype (PC) bdf (X native) speedo (Atari ST/TT/Falcon native) http://www.jmas.co.jp/FAQs/fonts-faq/part14 truedoc (licensed systems) pcf (X) intellifont (Amiga, HP LaserJet native) metafont (TeX systems) </pre> <hr> --> <!-- <p>font naming issues<br> <a href="http://www.adobe.com/supportservice/devrelations/PDFS/TN/5088.FontNames.pdf">font naming issues</A> <a href="http://www.adobe.com/supportservice/custsupport/SOLUTIONS/5c22.htm">Type Terminology</A> <a href="http://www.adobe.com/supportservice/devrelations/PDFS/TN/5176.CFF.pdf">Compact Font Format Specification</A> <A HREF="http://www.adobe.com/supportservice/devrelations/PDFS/TN/5004.AFM_Spec.pdf">Adobe Font Metrics File Format Specification Version 4.1</A> --> <!-- Agfa IntelliFont (suffix: .type or .lib) is the native font format on the Amiga. You can use it in any application and it can be converted to the standard bitmap format using the system utilities `IntelliFont' (OS 3.x) or `Fountain' (OS 2.x). http://www.jmas.co.jp/FAQs/fonts-faq/part13 --> <!-- <p> http://18.23.0.23/pub/WWW/Protocols/rfc2068/rfc2068 <p>ftp://ftp.ietf.org/internet-drafts/draft-ietf-http-negotiation-01.txt <p>http://www.organic.com/thinking/cn.html <p>http://gewis.win.tue.nl/~koen/conneg/draft-ietf-http-negotiation-01.html <p>http://www.stonehand.com/unicode/standard/cgmodel.html <p>http://www.ifcss.org/ftp-pub/software/info/hbfa.html <br>Han Character Font Sharing Across Incompatible Bitmap File Formats <p>http://www.typeright.org/feature4.html<br> http://www.type.co.uk/fnet/fshop/fwks/gtlt-1.html<br> Type Law, primarily in the USA; in particular<br> http://www.type.co.uk/fnet/fshop/fwks/gtlt-4.html<br> Transferring fonts electronically. --> <!-- TrueType Open TrueType Open is an extension to the TrueType font standard. TrueType Open fonts contain additional information that extends the capabilities of the fonts to support high-quality international typography: TrueType Open can associate a single character with multiple glyphs, and - conversely - it can associate combinations of characters with a single glyph. TrueType Open includes two-dimensional information to support features for complex positioning and glyph attachment. TrueType Open contains explicit script and language information, so a text-processing application can adjust its behavior accordingly. TrueType Open has an open format that allows font developers to define their own typographical features. --> <!-- <p>Accept-features to deal with MicroType Express lossless compression technology Agfa font compression? Or use content-encoding? In OpenType, bit 11 of the flags field in the <tt>head</tt> table indicates use of Agfa MicroType Compression --> <!-- Bill Hill: The font objects on the server are not TTFs. They are not even TrueType. They are in MicroType Express compressed format, which gets converted back to TrueType by the embedding services DLL when they are downloaded to the client." "The only thing stored in the cache is a font object, which is either compressed (and thus not installable except by the embedding DLL) or encrypted. We also do some other stuff to it which prevents it from being installed, but we are not giving any details." "In addition to this, the OS (Win95/NT) will soon support process-private fonts. NT 5 has a new AddFontResource API which can install a font so that it can only be used by a specific process." --> </div> <hr> <div class=main> <H2><A NAME="ack">11. Acknowledgments</A></H2> <p>Besides the authors, the following people have contributed in various ways to this document: Alex Beamon, Apple; Ashok Saxena, Adobe; Ben Bauermeister, HP; Bert Bos, W3C; Dave Opstad, Apple; Dave Raggett, W3C/HP; David Goldsmith, Apple; Ed Tecot, Microsoft, Erik van Blokland, LettError; Erik van der Poel, Netscape; François Yergeau, Alis; Gavin Nicol, Inso; Herbert van Zijl, Elsevier; Ken Lunde, Adobe; Lee Quinn, Web Design Group; Martin Dürst, Universität Zürich; Michel Suignard, Microsoft; Misha Wolf, Reuters; Paul Haeberli, SGI; Phil Karlton, Netscape.</p> </div> <p> <A href="https://www.w3.org/Consortium/Legal/ipr-notice.html#Copyright"> Copyright</A> © 1997 <A href="https://www.w3.org">W3C</A> (<A href="http://www.lcs.mit.edu">MIT</A>, <A href="http://www.inria.fr/">INRIA</A>, <A href="http://www.keio.ac.jp/">Keio</A> ), All Rights Reserved. W3C <A href="https://www.w3.org/Consortium/Legal/ipr-notice.html#Legal Disclaimer">liability,</A> <A href="https://www.w3.org/Consortium/Legal/ipr-notice.html#W3C Trademarks">trademark</A>, <A href="https://www.w3.org/Consortium/Legal/copyright-documents.html">document use </A>and <A href="https://www.w3.org/Consortium/Legal/copyright-software.html">software licensing </A>rules apply. <hr> <address><A href="/people/chris/">Chris Lilley</A> (editor)<br> <i>Created:</i> <tt>13-Jun-1996</tt><br> <i>Last modified:</i> <tt>21-July-1997</tt></address> <pre> </pre> <SCRIPT src="https://www.w3.org/scripts/TR/fixup.js"></SCRIPT></BODY> </HTML>