W3C home > Mailing lists > Public > public-css-commits@w3.org > February 2011

csswg/css3-fonts Fonts.html,1.37,1.38

From: John Daggett via cvs-syncmail <cvsmail@w3.org>
Date: Thu, 24 Feb 2011 12:53:07 +0000
To: public-css-commits@w3.org
Message-Id: <E1Psagt-00086b-0U@lionel-hutz.w3.org>
Update of /sources/public/csswg/css3-fonts
In directory hutz:/tmp/cvs-serv31143

Modified Files:
	Fonts.html 
Log Message:
revised font matching algorithm

Index: Fonts.html
===================================================================
RCS file: /sources/public/csswg/css3-fonts/Fonts.html,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -d -r1.37 -r1.38
--- Fonts.html	1 Nov 2010 18:52:24 -0000	1.37
+++ Fonts.html	24 Feb 2011 12:53:04 -0000	1.38
@@ -111,15 +111,14 @@
 
    <h1>CSS Fonts Module Level 3</h1>
 
-   <h2 class="no-num no-toc" id=editors-draft-1-november-2010>Editor's Draft
-    1 November 2010</h2>
+   <h2 class="no-num no-toc" id=editors>Editor's Draft 24 February 2011</h2>
 
    <dl id=authors>
     <dt>This version:
 
     <dd><a
      href="http://dev.w3.org/csswg/css3-fonts/">http://dev.w3.org/csswg/css3-fonts/</a>
-     <!-- <dd><a href="http://www.w3.org/TR/2010/ED-css3-fonts-20101101">http://www.w3.org/TR/2010/ED-css3-fonts-20101101</a> -->
+     <!-- <dd><a href="http://www.w3.org/TR/2011/ED-css3-fonts-20110224">http://www.w3.org/TR/2011/ED-css3-fonts-20110224</a> -->
      
 
     <dt>Latest version:
@@ -152,7 +151,7 @@
    <!--begin-copyright-->
    <p class=copyright><a
     href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright"
-    rel=license>Copyright</a> © 2010 <a href="http://www.w3.org/"><acronym
+    rel=license>Copyright</a> © 2011 <a href="http://www.w3.org/"><acronym
     title="World Wide Web Consortium">W3C</acronym></a><sup>®</sup> (<a
     href="http://www.csail.mit.edu/"><acronym title="Massachusetts Institute
     of Technology">MIT</acronym></a>, <a href="http://www.ercim.eu/"><acronym
@@ -262,6 +261,10 @@
 
      <li><a href="#font-prop"><span class=secno>3.7 </span>Shorthand font
       property: the font property</a>
+
+     <li><a href="#font-synthetic-prop"><span class=secno>3.8
+      </span>Controlling synthetic faces: the font-weight-synthetic and
+      font-style-synthetic properties</a>
     </ul>
 
    <li><a href="#font-resources"><span class=secno>4 </span>Font
@@ -288,6 +291,13 @@
 
    <li><a href="#font-matching-algorithm"><span class=secno>5 </span>Font
     matching algorithm</a>
+    <ul class=toc>
+     <li><a href="#font-style-matching"><span class=secno>5.1 </span>Matching
+      font styles</a>
+
+     <li><a href="#char-handling-issues"><span class=secno>5.2
+      </span>Character handling issues</a>
+    </ul>
 
    <li><a href="#font-rend-props"><span class=secno>6 </span>Font feature
     properties</a>
@@ -520,7 +530,7 @@
   <h3 id=font-family-prop><span class=secno>3.1 </span>Font family: the <a
    href="#propdef-font-family">font-family</a> property</h3>
 
-  <table class=propdef id=namefont-familyvalue-ltfamily-name-ltgen>
+  <table class=propdef id=namefont-family>
    <tbody>
     <tr>
      <td>Name:
@@ -530,7 +540,7 @@
     <tr>
      <td>Value:
 
-     <td>[[ &lt;family-name> | &lt;generic-family> ] [, &lt;family-name>|
+     <td>[[ &lt;family-name> | &lt;generic-family> ] [, &lt;family-name> |
       &lt;generic-family>]* ] | inherit
 
     <tr>
@@ -565,11 +575,12 @@
   </table>
 
   <p>This property specifies a prioritized list of font family names or
-   generic family names. A user agent iterates through the list of family
-   names until it matches an available font that contains a glyph for the
-   character to be rendered. This allows for differences in available fonts
-   across across platforms and for differences in the range of characters
-   supported by individual fonts.
+   generic family names. Unlike other CSS properties, component values are a
+   comma-separated list indicating alternatives. A user agent iterates
+   through the list of family names until it matches an available font that
+   contains a glyph for the character to be rendered. This allows for
+   differences in available fonts across platforms and for differences in the
+   range of characters supported by individual fonts.
 
   <p>A font family name only specifies a name given to a set of font faces,
    it does not specify an individual face. Given the availability of the
@@ -580,16 +591,6 @@
    <p class=caption>Family and individual face names
   </div>
 
-  <p>Some font formats support the use of multiple family names for different
-   localizations. User agents must recognize any of these names independent
-   of the underlying platform localization, system API used or document
-   encoding:
-
-  <div class=figure><img alt="examples of localized family names"
-   src=localizedfamilynames.png>
-   <p class=caption>Localized family names
-  </div>
-
   <p>Consider the example below:
 
   <div class=example>
@@ -608,11 +609,7 @@
    <dt>&lt;family-name&gt;
 
    <dd>The name of a font family of choice such as Helvetica or Verdana in
-    the previous example. Font family names containing more than one word
-    should be quoted. If quoting is omitted, whitespace characters before and
-    after the font family name are ignored and any sequence of whitespace
-    characters inside the font name is converted to a single space. Depending
-    upon the font format used, font family names may be case-sensitive.
+    the previous example.
 
    <dt>&lt;generic-family&gt;
 
@@ -628,6 +625,61 @@
     alternative for improved robustness.
   </dl>
 
+  <p>Font family names must either be given quoted as <a
+   href="//www.w3.org/TR/CSS21/syndata.html#strings">strings,</a> or unquoted
+   as a sequence of one or more <a
+   href="//www.w3.org/TR/CSS21/syndata.html#value-def-identifier">identifiers.</a>
+   This means most punctuation characters and digits at the start of each
+   token must be escaped in unquoted font family names.
+
+  <p>For example, the following declarations are invalid:
+
+  <pre>
+font-family: Red/Black, sans-serif;
+font-family: "Lucida" Grande, sans-serif;
+font-family: Ahem!, sans-serif;
+font-family: test@foo, sans-serif;
+font-family: #POUND, sans-serif;
+font-family: Hawaii 5-0, sans-serif;
+</pre>
+
+  <p>If a sequence of identifiers is given as a font family name, the
+   computed value is the name converted to a string by joining all the
+   identifiers in the sequence by single spaces.
+
+  <p>To avoid mistakes in escaping, it is recommended to quote font family
+   names that contain white space, digits, or punctuation characters other
+   than hyphens:
+
+  <pre>
+body { font-family: "New Century Schoolbook", serif }
+
+&lt;BODY STYLE="font-family: '21st Century', fantasy">
+</pre>
+
+  <p>Font family <em>names</em> that happen to be the same as a keyword value
+   (‘<code class=property>inherit</code>’, ‘<code class=property><a
+   href="#serif">serif</a></code>’, ‘<code class=property><a
+   href="#sans-serif">sans-serif</a></code>’, ‘<code class=property><a
+   href="#monospace">monospace</a></code>’, ‘<code class=property><a
+   href="#fantasy">fantasy</a></code>’, and ‘<code class=property><a
+   href="#cursive">cursive</a></code>’) must be quoted to prevent confusion
+   with the keywords with the same names. The keywords ‘<code
+   class=property>initial</code>’ and ‘<code
+   class=property>default</code>’ are reserved for future use and must also
+   be quoted when used as font names. UAs must not consider these keywords as
+   matching the ‘<code class=css>&lt;family-name&gt;</code>’ type.
+
+  <p>Some font formats allow fonts to carry multiple localizations of the
+   family name. User agents must recognize and correctly match all of these
+   names independent of the underlying platform localization, system API used
+   or document encoding:
+
+  <div class=figure><img alt="examples of localized family names"
+   src=localizedfamilynames.png>
+   <p class=caption>Localized family names
+  </div>
+
   <h4 id=generic-font-families><span class=secno>3.1.1 </span>Generic font
    families</h4>
 
@@ -727,7 +779,7 @@
   <h3 id=font-weight-prop><span class=secno>3.2 </span>Font weight: the <a
    href="#propdef-font-weight">font-weight</a> property</h3>
 
-  <table class=propdef id=namefont-weightvaluenormal-bold-bolder-l>
+  <table class=propdef id=namefont-weight>
    <tbody>
     <tr>
      <td>Name:
@@ -949,7 +1001,7 @@
   <h3 id=font-stretch-prop><span class=secno>3.3 </span>Font width: the <a
    href="#propdef-font-stretch">font-stretch</a> property</h3>
 
-  <table class=propdef id=namefont-stretchvaluenormal-ultra-conden>
+  <table class=propdef id=namefont-stretch>
    <tbody>
     <tr>
      <td>Name:
@@ -1038,7 +1090,7 @@
   <h3 id=font-style-prop><span class=secno>3.4 </span>Font style: the <a
    href="#propdef-font-style">font-style</a> property</h3>
 
-  <table class=propdef id=namefont-stylevaluenormal-italic-oblique>
+  <table class=propdef id=namefont-style>
    <tbody>
     <tr>
      <td>Name:
@@ -1118,7 +1170,7 @@
   <h3 id=font-size-prop><span class=secno>3.5 </span>Font size: the <a
    href="#propdef-font-size">font-size</a> property</h3>
 
-  <table class=propdef id=namefont-sizevalueltabsolute-size-ltrela>
+  <table class=propdef id=namefont-size>
    <tbody>
     <tr>
      <td>Name:
@@ -1206,7 +1258,7 @@
    <dd>A length value specifies an absolute font size (that is independent of
     the user agent's font table). Negative lengths are illegal.
 
-   <dt><span class=index-inst id=ltpercentagegt-
+   <dt><span class=index-inst id=ltpercentagegt
     title="&lt;percentage&gt;">&lt;percentage&gt; </span>
 
    <dd>A percentage value specifies an absolute font size relative to the
@@ -1340,7 +1392,7 @@
   <h3 id=font-size-adjust-prop><span class=secno>3.6 </span>Relative sizing:
    the <a href="#propdef-font-size-adjust">font-size-adjust</a> property</h3>
 
-  <table class=propdef id=namefont-size-adjustvalueltnumber-none-i>
+  <table class=propdef id=namefont-size-adjust>
    <tbody>
     <tr>
      <td>Name:
@@ -1388,9 +1440,9 @@
    between upper and lowercase letters, the relative height of lowercase
    letters compared to their uppercase counterparts is a determining factor
    of legibility. This is commonly referred to as the <a class=index-def
-   href="#aspect-value" id=aspect-value0 title="aspect value"><dfn
-   id=aspect-value>aspect value</dfn></a>. Precisely defined, it is equal to
-   the x-height of a font divided by the font size.
+   href="#aspect" id=aspect0 title="aspect value"><dfn id=aspect>aspect
+   value</dfn></a>. Precisely defined, it is equal to the x-height of a font
+   divided by the font size.
 
   <p>In situations where font fallback occurs, fallback fonts may not share
    the same aspect ratio as the desired font family and will thus appear less
@@ -1508,7 +1560,7 @@
   <h3 id=font-prop><span class=secno>3.7 </span>Shorthand font property: the
    <a href="#propdef-font">font</a> property</h3>
 
-  <table class=propdef id=namefontvalue-ltlsquofont-stylersquo-ltf>
+  <table class=propdef id=namefont>
    <tbody>
     <tr>
      <td>Name:
@@ -1761,6 +1813,112 @@
 } 
 </pre>
   </div>
+  <!-- prop: font-weight-synthetic, font-style-synthetic -->
+
+  <h3 id=font-synthetic-prop><span class=secno>3.8 </span>Controlling
+   synthetic faces: the <a
+   href="#propdef-font-weight-synthetic">font-weight-synthetic</a> and <a
+   href="#propdef-font-style-synthetic">font-style-synthetic</a> properties</h3>
+
+  <table class=propdef id=namefont-weight-synthetic>
+   <tbody>
+    <tr>
+     <td>Name:
+
+     <td><dfn id=propdef-font-weight-synthetic>font-weight-synthetic</dfn>
+
+    <tr>
+     <td>Value:
+
+     <td>auto | none | inherit
+
+    <tr>
+     <td>Initial:
+
+     <td>auto
+
+    <tr>
+     <td>Applies to:
+
+     <td>all elements
+
+    <tr>
+     <td>Inherited:
+
+     <td>yes
+
+    <tr>
+     <td>Percentages:
+
+     <td>N/A
+
+    <tr>
+     <td>Media:
+
+     <td>visual
+
+    <tr>
+     <td>Computed value:
+
+     <td>as specified
+  </table>
+
+  <table class=propdef id=namefont-style-synthetic>
+   <tbody>
+    <tr>
+     <td>Name:
+
+     <td><dfn id=propdef-font-style-synthetic>font-style-synthetic</dfn>
+
+    <tr>
+     <td>Value:
+
+     <td>auto | none | inherit
+
+    <tr>
+     <td>Initial:
+
+     <td>auto
+
+    <tr>
+     <td>Applies to:
+
+     <td>all elements
+
+    <tr>
+     <td>Inherited:
+
+     <td>yes
+
+    <tr>
+     <td>Percentages:
+
+     <td>N/A
+
+    <tr>
+     <td>Media:
+
+     <td>visual
+
+    <tr>
+     <td>Computed value:
+
+     <td>as specified
+  </table>
+
+  <p>These properties control whether user agents are allowed to synthetize
+   bold or synthetic oblique font faces when a font family lacks bold or
+   italic faces. For each of these properties the default value of ‘<code
+   class=property>auto</code>’ allows user agents to use synthetic versions
+   of font faces while a value of ‘<code class=property>none</code>’
+   disallows the use of synthetic versions.
+
+  <div class=example>
+   <p>The style rule below diables the use of synthetically obliqued Arabic:</p>
+
+   <pre>*:lang(ar) { font-style-synthetic: none; }
+</pre>
+  </div>
 
   <h2 id=font-resources><span class=secno>4 </span>Font resources</h2>
 
@@ -2414,8 +2572,11 @@
     points. The fallback font is downloaded and used to render the arrow
     character.</p>
   </div>
-  <!-- Tools to create subsetted fonts a problem.  Also, combining diacritics
-represent a nasty side issue here.  Need named ranges (based on Unicode defined range names), e.g. range("Basic Latin") ==> U+00-FF -->
+  <!-- 
+  Tools to create subsetted fonts a problem.  
+  Also, combining diacritics represent a nasty side issue here.  
+  Need named ranges (based on Unicode defined range names), e.g. range("Basic Latin") ==> U+00-FF 
+-->
 
   <h3 id=font-rend-desc><span class=secno>4.6 </span>Font features: the <a
    href="#descdef-font-variant">font-variant</a> and <a
@@ -2474,79 +2635,89 @@
   <h2 id=font-matching-algorithm><span class=secno>5 </span>Font matching
    algorithm</h2>
 
-  <p>The procedure for choosing fonts consists of iterating over the font
+  <p>The algorithm below describes how fonts are associated with individual
+   runs of text. For each character in the run a font family is chosen and a
+   particular font face is selected containing a glyph for that character.
+
+  <h3 id=font-style-matching><span class=secno>5.1 </span>Matching font
+   styles</h3>
+
+  <p> The procedure for choosing fonts consists of iterating over the font
    families determined by the font-family property, selecting a font face
    with the appropriate style based on other font properties and then
-   determining whether a glyph exists for a given character. This procedure
-   is performed on each character to be rendered. Optimizations are allowed
-   provided that an implementation behaves as if the algorithm had been
-   followed exactly. Matching occurs in a well-defined order to insure that
-   the results are as consistent as possible across user agents, given an
-   identical set of available fonts and rendering technology.
-
-  <p>To begin with, a user agent must determine the set of font families
-   available on a given platform and determine the style characteristics of
-   all faces for each family. If two faces have the exact same style
-   characteristics, one of them is ignored. Fonts available via @font-face
-   rules are referenced per document and are not treated as generally
-   available fonts.
+   determining whether a glyph exists for a given character.
 
   <ol id=fontmatchingalg>
-   <li>For each character within a given element, the user agent evaluates
-    the font properties applicable. The user agent starts with the first
-    family name in the <span class=property>‘<code class=property><a
-    href="#descdef-font-family">font-family</a></code>’</span> prioritized
-    list.
+   <li>Using the computed font property values for a given element, the user
+    agent starts with the first family name in the fontlist specified by the
+    <span class=property>‘<code class=property><a
+    href="#descdef-font-family">font-family</a></code>’</span> property.
 
-   <li>If the family name is a generic family name, the user agent looks up
-    the appropriate font family name to be used. User agents may choose the
-    generic font family to use based on the language of the containing
-    element or the Unicode range of the character. The user agent attempts to
-    find the family name among fonts defined via @font-face rules and then
-    among available system fonts. If a font family defined via @font-face
-    rules contains only invalid font data, it should be considered missing;
-    matching a platform font with the same name must not occur in this case.
+   <li>If the family name is unquoted and is a generic family name, the user
+    agent looks up the appropriate font family name to be used. User agents
+    may choose the generic font family to use based on the language of the
+    containing element or the Unicode range of the character.
 
-   <li>If a font family match occurs, the user agent then attempts to select
-    a face that matches the remaining font properties. It matches these
-    properties in the order given below:
-    <ol
-     id=fontstylematchingalg><!-- argh, what should be proper fallback for font-stretch? -->
+   <li>For other family names, the user agent attempts to find the family
+    name among fonts defined via @font-face rules and then among available
+    system fonts, matching names with a case-insensitive comparison. On
+    systems containing fonts with multiple localized font family names, user
+    agents must match any of these names independent of the underlying system
+    locale or platform API used. If a font family defined via @font-face
+    rules contains only invalid font data, it should be considered as if a
+    font was present but contained an empty character map; matching a
+    platform font with the same name must not occur in this case.
 
+   <li>If a font family match occurs, the user agent assembles the set of
+    font faces in that family that contain a glyph for the character. It then
+    narrows this matching set to a single face using other font properties in
+    the order given below:
+    <ol id=fontstylematchingalg>
      <li><span class=property>‘<code class=property><a
       href="#descdef-font-stretch">font-stretch</a></code>’</span> is tried
-      first. ‘<code class=property>normal</code>’ matches a font not
-      labeled as ‘<code class=property>condensed</code>’ or ‘<code
-      class=property>expanded</code>’.
+      first. If the matching set contains faces with width values matching
+      the ‘<code class=property><a
+      href="#descdef-font-stretch">font-stretch</a></code>’ value, faces
+      with other width values are removed from the matching set. If there is
+      no face that exactly matches the width value the nearest width is used
+      instead. If the value of ‘<code class=property><a
+      href="#descdef-font-stretch">font-stretch</a></code>’ is ‘<code
+      class=property>normal</code>’ or one of the condensed values,
+      narrower width values are checked first, then wider values. If the
+      value of ‘<code class=property><a
+      href="#descdef-font-stretch">font-stretch</a></code>’ is one of the
+      expanded values, wider values are checked first, followed by narrower
+      values. Once the closest matching width has been determined by this
+      process, faces with other widths are removed from the matching set.
 
      <li><span class=property>‘<code class=property><a
       href="#descdef-font-style">font-style</a></code>’</span> is tried
-      next. ‘<code class=property>italic</code>’ will be satisfied if
-      there is either a face in the UA's font database labeled with the CSS
-      keyword ‘<code class=property>italic</code>’ (preferred) or
-      ‘<code class=property>oblique</code>’. Otherwise the values must be
-      matched exactly or font-style will fail.
-
-     <li><span class=property>‘<code class=property><a
-      href="#propdef-font-variant">font-variant</a></code>’</span> is tried
-      next. ‘<code class=property>normal</code>’ matches a font not
-      labeled as ‘<code class=property><a
-      href="#small-caps">small-caps</a></code>’; ‘<code class=property><a
-      href="#small-caps">small-caps</a></code>’ matches (1) a font labeled
-      as ‘<code class=property><a
-      href="#small-caps">small-caps</a></code>’, (2) a font in which the
-      small caps are synthesized, or (3) a font where all lowercase letters
-      are replaced by uppercase letters. A small-caps font may be synthesized
-      by electronically scaling uppercase letters from a normal font.
+      next. If the value of ‘<code class=property><a
+      href="#descdef-font-style">font-style</a></code>’ is ‘<code
+      class=property>italic</code>’, italic faces are checked first, then
+      oblique, then normal faces. If the value is ‘<code
+      class=property>oblique</code>’, oblique faces are checked first, then
+      italic faces and then normal faces. If the value is ‘<code
+      class=property>normal</code>’, normal faces are checked first, then
+      oblique faces, then italic faces. Faces with other style values are
+      excluded from the matching set. User agents are permitted to
+      distinguish between italic and oblique faces within platform font
+      families but this is not required, they may treat all italic or oblique
+      faces as italic faces. However, within font families defined via
+      @font-face rules, italic and oblique faces must be distinguished using
+      the value of the ‘<code class=property><a
+      href="#descdef-font-style">font-style</a></code>’ descriptor.
 
      <li><span class=property>‘<code class=property><a
       href="#descdef-font-weight">font-weight</a></code>’</span> is matched
-      next, it will never fail. If bolder/lighter relative weights are used,
-      calculate the effective weight based on the inherited weight value, as
-      described in the definition of font-weight above. Given the desired
-      weight and the set of face weights that match the properties above, if
-      the desired weight is available that face matches. Otherwise, a weight
-      is chosen using the rules below:
+      next, it will always reduce the matching set to a single font face. If
+      bolder/lighter relative weights are used, the effective weight is
+      calculated based on the inherited weight value, as described in the
+      definition of the ‘<code class=property><a
+      href="#descdef-font-weight">font-weight</a></code>’ property. Given
+      the desired weight and the weights of faces in the matching set after
+      the steps above, if the desired weight is available that face matches.
+      Otherwise, a weight is chosen using the rules below:
       <ul>
        <li>If the desired weight is less than 400, weights below the desired
         weight are checked in descending order followed by weights above the
@@ -2584,27 +2755,60 @@
     font metrics and render again once the font is downloaded.
 
    <li>If there are no more font families to be evaluated and no matching
-    face has been found, then the user agent performs a system font fallback
-    procedure to find the best match for the character to be rendered. The
-    result of this procedure may vary across user agents.
+    face has been found, then the user agent performs a <em>system font
+    fallback</em> procedure to find the best match for the character to be
+    rendered. The result of this procedure may vary across user agents.
 
    <li>If a particular character cannot be displayed using any font, the user
     agent should indicate by some means that a character is not being
-    displayed, either by displaying a symbolic representation of the missing
-    glyph or using the ‘<code class=css>missing character</code>’ glyph
-    from another font.
+    displayed, displaying either a symbolic representation of the missing
+    glyph (e.g. using a <a
+    href="http://en.wikipedia.org/wiki/Last_resort_font">Last Resort
+    Font</a>) or using the missing character glyph from a default font.
   </ol>
-  <!--
-Discuss implications of the algorithm above.  Weight mapping trys to map non-bold weights to other non-bold
-weights, same for bold faces.
--->
-  <!--
-<ul>Issues:
-  <li>Using the missing character glyph is definitely not the ideal, should state this more clearly.</li>
-  <li>Basically, if a font family is found, it should always match a face and not fall back, no?</li>
-  <li>Need more details on bolder/lighter interaction with synthetic bolding</li>
-</ul>
--->
+
+  <h3 id=char-handling-issues><span class=secno>5.2 </span>Character handling
+   issues</h3>
+
+  <p>The procedure above does not assume that text runs are in either
+   normalized or denormalized form <a href="#UAX15"
+   rel=biblioentry>[UAX15]<!--{{!UAX15}}--></a>. Layout engines often convert
+   base character plus combining character sequences into precomposed
+   codepoints if they exist. Fonts can generally support both ways of
+   matching characters but variations can occur. Authors should always tailor
+   their choice of fonts to their content, including whether that content
+   contains normalized or denormalized character streams.
+
+  <p>If a text run contains variation selectors, special handling is
+   required. For each character + variation selector pair, if the first font
+   with a glyph for the base character also contains a glyph for the variant
+   specified by the variation selector, user agents must display the variant
+   glyph instead of the default one. If the first font with a glyph for the
+   base character does not have a glyph for the variation selector pair, the
+   default glyph is displayed.
+
+  <p>If a given character is a Private-Use Area Unicode codepoint and none of
+   the fonts in the fontlist contain a glyph for that codepoint, user agents
+   must display some form of missing glyph symbol for that character rather
+   than attempting system font fallback for that codepoint. When matching the
+   replacement character U+FFFD, user agents may skip the font matching
+   process and immediately display some form of missing glyph symbol, they
+   are not required to display the glyph from the font that would be selected
+   by the font matching process.
+
+  <p>In general, the fonts for a given family will all have the same or
+   similar character maps. The process outlined here is designed to handle
+   even font families containing faces with widely variant character maps.
+   However, authors are cautioned that the use of such families can lead to
+   unexpected results. A special character only available in the condensed
+   italic face of a family may still be used even when font properties imply
+   a bold expanded face should be used instead.
+
+  <p>Optimizations of this process are allowed provided that an
+   implementation behaves as if the algorithm had been followed exactly.
+   Matching occurs in a well-defined order to insure that the results are as
+   consistent as possible across user agents, given an identical set of
+   available fonts and rendering technology.</p>
   <!-- 
 
 <h3>Examples of font matching</h3>
@@ -2789,7 +2993,7 @@
   <h3 id=font-kerning-prop><span class=secno>6.3 </span>Kerning: the <a
    href="#propdef-font-kerning">font-kerning</a> property</h3>
 
-  <table class=propdef id=namefont-kerningvalueauto-normal-noneini>
+  <table class=propdef id=namefont-kerning>
    <tbody>
     <tr>
      <td>Name:
@@ -2855,7 +3059,7 @@
    superscript and ordinal forms: the <a
    href="#propdef-vertical-position">vertical-position</a> property</h3>
 
-  <table class=propdef id=namevertical-positionvaluenormal-subscri>
+  <table class=propdef id=namevertical-position>
    <tbody>
     <tr>
      <td>Name:
@@ -2918,7 +3122,7 @@
    the <a href="#propdef-font-variant-ligatures">font-variant-ligatures</a>
    property</h3>
 
-  <table class=propdef id=namefont-variant-ligaturesvaluenormal-in>
+  <table class=propdef id=namefont-variant-ligatures>
    <tbody>
     <tr>
      <td>Name:
@@ -3029,7 +3233,7 @@
   <h3 id=font-variant-caps-prop><span class=secno>6.6 </span>Capitalization:
    the <a href="#propdef-font-variant-caps">font-variant-caps</a> property</h3>
 
-  <table class=propdef id=namefont-variant-capsvaluenormal-inherit>
+  <table class=propdef id=namefont-variant-caps>
    <tbody>
     <tr>
      <td>Name:
@@ -3162,7 +3366,7 @@
    formatting: the <a
    href="#propdef-font-variant-numeric">font-variant-numeric</a> property</h3>
 
-  <table class=propdef id=namefont-variant-numericvaluenormal-inhe>
+  <table class=propdef id=namefont-variant-numeric>
    <tbody>
     <tr>
      <td>Name:
@@ -3306,7 +3510,7 @@
    href="#propdef-font-variant-alternates">font-variant-alternates</a>
    property</h3>
 
-  <table class=propdef id=namefont-variant-alternatesvaluenormal-i>
+  <table class=propdef id=namefont-variant-alternates>
    <tbody>
     <tr>
      <td>Name:
@@ -3402,7 +3606,7 @@
 
   <dl>
    <dt><dfn
-    id=stylesetltfeature-value-namegt-ltfeature>styleset(&lt;feature-value-name&gt;
+    id=stylesetltfeature-value-namegt>styleset(&lt;feature-value-name&gt;
     [,&lt;feature-value-name&gt;]*)</dfn>
 
    <dd>Enables display with stylistic sets (<em>font specific</em>, OpenType
@@ -3414,7 +3618,7 @@
 
   <dl>
    <dt><dfn
-    id=character-variantltfeature-value-namegt->character-variant(&lt;feature-value-name&gt;
+    id=character-variantltfeature-value-namegt>character-variant(&lt;feature-value-name&gt;
     [,&lt;feature-value-name&gt;]*)</dfn>
 
    <dd>Enables display of specific character variants (<em>font
@@ -3643,7 +3847,7 @@
    href="#propdef-font-variant-east-asian">font-variant-east-asian</a>
    property</h3>
 
-  <table class=propdef id=namefont-variant-east-asianvaluenormal-i>
+  <table class=propdef id=namefont-variant-east-asian>
    <tbody>
     <tr>
      <td>Name:
@@ -3769,7 +3973,7 @@
    for font rendering: the <a href="#propdef-font-variant">font-variant</a>
    property</h3>
 
-  <table class=propdef id=namefont-variantvaluenormal-inherit-ltco>
+  <table class=propdef id=namefont-variant>
    <tbody>
     <tr>
      <td>Name:
@@ -3836,7 +4040,7 @@
    font settings control: the <a
    href="#propdef-font-feature-settings">font-feature-settings</a> property</h3>
 
-  <table class=propdef id=namefont-feature-settingsvaluenormal-lts>
+  <table class=propdef id=namefont-feature-settings>
    <tbody>
     <tr>
      <td>Name:
@@ -3935,7 +4139,7 @@
    language override: the <a
    href="#propdef-font-language-override">font-language-override</a> property</h3>
 
-  <table class=propdef id=namefont-language-overridevaluenormal-in>
+  <table class=propdef id=namefont-language-override>
    <tbody>
     <tr>
      <td>Name:
@@ -4198,9 +4402,9 @@
 
   <p>If a user agent implements a same-origin restriction for a given font
    type it must also implement the ability to relax this restriction using
-   cross-site origin controls <a href="#ACCESS-CONTROL"
-   rel=biblioentry>[ACCESS-CONTROL]<!--{{!ACCESS-CONTROL}}--></a>. Sites can
-   explicitly allow cross-site downloading of font data using the
+   cross-site origin controls <a href="#CORS"
+   rel=biblioentry>[CORS]<!--{{!CORS}}--></a>. Sites can explicitly allow
+   cross-site downloading of font data using the
    <code>Access-Control-Allow-Origin</code> HTTP header.</p>
   <!-- examples of same-site vs. cross-site usage -->
   <!-- example of setting access control header -->
@@ -4343,7 +4547,7 @@
     </dd>
    <!---->
 
-   <dt id=ACCESS-CONTROL>[ACCESS-CONTROL]
+   <dt id=CORS>[CORS]
 
    <dd>Anne van Kesteren. <a
     href="http://www.w3.org/TR/2010/WD-cors-20100727"><cite>Cross-Origin
@@ -4356,9 +4560,9 @@
    <dt id=HTML5>[HTML5]
 
    <dd>Ian Hickson. <a
-    href="http://www.w3.org/TR/2010/WD-html5-20100624"><cite>HTML5.</cite></a>
-    24 June 2010. W3C Working Draft. (Work in progress.) URL: <a
-    href="http://www.w3.org/TR/2010/WD-html5-20100624">http://www.w3.org/TR/2010/WD-html5-20100624</a>
+    href="http://www.w3.org/TR/2011/WD-html5-20110113"><cite>HTML5.</cite></a>
+    13 January 2011. W3C Working Draft. (Work in progress.) URL: <a
+    href="http://www.w3.org/TR/2011/WD-html5-20110113">http://www.w3.org/TR/2011/WD-html5-20110113</a>
     </dd>
    <!---->
 
@@ -4391,12 +4595,22 @@
     </dd>
    <!---->
 
+   <dt id=UAX15>[UAX15]
+
+   <dd>Mark Davis. <a
+    href="http://www.unicode.org/reports/tr15/"><cite>Unicode Normalization
+    Forms.</cite></a> 17 September 2010. Unicode Standard Annex #15. URL: <a
+    href="http://www.unicode.org/reports/tr15/">http://www.unicode.org/reports/tr15/</a>
+    </dd>
+   <!---->
+
    <dt id=UAX29>[UAX29]
 
    <dd>Mark Davis. <a
-    href="http://www.unicode.org/unicode/reports/tr29/tr29-9.html"><cite>Text
-    Boundaries.</cite></a> 25 March 2005. Unicode Standard Annex #29. URL: <a
-    href="http://www.unicode.org/unicode/reports/tr29/tr29-9.html">http://www.unicode.org/unicode/reports/tr29/tr29-9.html</a>
+    href="http://www.unicode.org/reports/tr29/"><cite>Unicode Text
+    Segmentation.</cite></a> 8 October 2010. Unicode Standard Annex #29. URL:
+    <a
+    href="http://www.unicode.org/reports/tr29/">http://www.unicode.org/reports/tr29/</a>
     </dd>
    <!---->
 
@@ -4416,8 +4630,9 @@
   <!--{{!AAT-FEATURES}}-->
   <!--{{!OPEN-FONT-FORMAT}}-->
   <!--{{!UNICODE5}}-->
+  <!--{{!UAX15}}-->
   <!--{{!UAX29}}-->
-  <!--{{!ACCESS-CONTROL}}-->
+  <!--{{!CORS}}-->
   <!--{{!HTML5}}-->
 
   <h3 class=no-num id=other-references>Other References</h3>
@@ -4513,7 +4728,7 @@
     href="#annotationltfeature-value-namegt"
     title="annotation(&lt;feature-value-name&gt;)"><strong>6.8</strong></a>
 
-   <li>aspect value, <a href="#aspect-value0" title="aspect
+   <li>aspect value, <a href="#aspect0" title="aspect
     value"><strong>3.6</strong></a>
 
    <li>at-rules, <a href="#at-rule" title=at-rules>4.1</a>
@@ -4523,7 +4738,7 @@
 
    <li>character-variant(&lt;feature-value-name&gt;
     [,&lt;feature-value-name&gt;]*), <a
-    href="#character-variantltfeature-value-namegt-"
+    href="#character-variantltfeature-value-namegt"
     title="character-variant(&lt;feature-value-name&gt;
     [,&lt;feature-value-name&gt;]*)"><strong>6.8</strong></a>
 
@@ -4623,6 +4838,9 @@
     title=font-style><strong>4.4</strong></a>, <a href="#propdef-font-style"
     title=font-style><strong>3.4</strong></a>
 
+   <li>font-style-synthetic, <a href="#propdef-font-style-synthetic"
+    title=font-style-synthetic><strong>3.8</strong></a>
+
    <li>font-variant, <a href="#descdef-font-variant"
     title=font-variant><strong>4.6</strong></a>, <a
     href="#propdef-font-variant" title=font-variant><strong>6.11</strong></a>
@@ -4659,6 +4877,9 @@
     title=font-weight><strong>4.4</strong></a>, <a
     href="#propdef-font-weight" title=font-weight><strong>3.2</strong></a>
 
+   <li>font-weight-synthetic, <a href="#propdef-font-weight-synthetic"
+    title=font-weight-synthetic><strong>3.8</strong></a>
+
    <li>full-width, <a href="#full-width"
     title=full-width><strong>6.10</strong></a>
 
@@ -4727,7 +4948,7 @@
     href="#ornamentsltfeature-value-namegt"
     title="ornaments(&lt;feature-value-name&gt;)"><strong>6.8</strong></a>
 
-   <li>&lt;percentage&gt;, <a href="#ltpercentagegt-"
+   <li>&lt;percentage&gt;, <a href="#ltpercentagegt"
     title="&lt;percentage&gt;">3.5</a>
 
    <li>petite-caps, <a href="#petite-caps"
@@ -4768,7 +4989,7 @@
     title=stacked-fractions><strong>6.7</strong></a>
 
    <li>styleset(&lt;feature-value-name&gt; [,&lt;feature-value-name&gt;]*),
-    <a href="#stylesetltfeature-value-namegt-ltfeature"
+    <a href="#stylesetltfeature-value-namegt"
     title="styleset(&lt;feature-value-name&gt;
     [,&lt;feature-value-name&gt;]*)"><strong>6.8</strong></a>
 
@@ -4847,7 +5068,7 @@
     <tr valign=baseline>
      <td><a class=property href="#descdef-font-family">font-family</a>
 
-     <td>[[ &lt;family-name> | &lt;generic-family> ] [, &lt;family-name>|
+     <td>[[ &lt;family-name> | &lt;generic-family> ] [, &lt;family-name> |
       &lt;generic-family>]* ] | inherit
 
      <td>depends on user agent
@@ -4972,6 +5193,22 @@
      <td>visual
 
     <tr valign=baseline>
+     <td><a class=property
+      href="#propdef-font-style-synthetic">font-style-synthetic</a>
+
+     <td>auto | none | inherit
+
+     <td>auto
+
+     <td>all elements
+
+     <td>yes
+
+     <td>N/A
+
+     <td>visual
+
+    <tr valign=baseline>
      <td><a class=property href="#propdef-font-variant">font-variant</a>
 
      <td>normal | inherit | [ &lt;common-lig-values&gt; ||
@@ -5002,8 +5239,8 @@
 
      <td>normal | inherit | [ &lt;contextual-alt-values&gt; ||
       stylistic(&lt;feature-value-name&gt;) || historical-forms ||
-      styleset(&lt;feature-value-name&gt; [, &lt;feature-value-name&gt;]*) ||
-      character-variant(&lt;feature-value-name&gt;
+      styleset(&lt;;feature-value-name&gt; [, &lt;feature-value-name&gt;]*)
+      || character-variant(&lt;feature-value-name&gt;
       [,&lt;feature-value-name&gt;]*) || swash(&lt;feature-value-name&gt;) ||
       contextual-swash(&lt;feature-value-name&gt;) ||
       ornament(&lt;feature-value-name&gt;) ||
@@ -5105,6 +5342,22 @@
 
     <tr valign=baseline>
      <td><a class=property
+      href="#propdef-font-weight-synthetic">font-weight-synthetic</a>
+
+     <td>auto | none | inherit
+
+     <td>auto
+
+     <td>all elements
+
+     <td>yes
+
+     <td>N/A
+
+     <td>visual
+
+    <tr valign=baseline>
+     <td><a class=property
       href="#propdef-vertical-position">vertical-position</a>
 
      <td>normal | subscript | superscript | ordinal
Received on Thursday, 24 February 2011 12:53:09 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 19:26:01 UTC