- From: John Daggett via cvs-syncmail <cvsmail@w3.org>
- Date: Fri, 11 Mar 2011 01:41:54 +0000
- To: public-css-commits@w3.org
Update of /sources/public/csswg/css3-fonts
In directory hutz:/tmp/cvs-serv19832
Modified Files:
Fonts.html
Log Message:
changes to reflect March 2011 CSS F2F discussions
Index: Fonts.html
===================================================================
RCS file: /sources/public/csswg/css3-fonts/Fonts.html,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -d -r1.46 -r1.47
--- Fonts.html 9 Mar 2011 14:02:39 -0000 1.46
+++ Fonts.html 11 Mar 2011 01:41:52 -0000 1.47
@@ -111,7 +111,7 @@
<h1>CSS Fonts Module Level 3</h1>
- <h2 class="no-num no-toc" id=editors-draft-9-march-2011>Editor's Draft 9
+ <h2 class="no-num no-toc" id=editors-draft-10-march-2011>Editor's Draft 10
March 2011</h2>
<dl id=authors>
@@ -119,7 +119,7 @@
<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/2011/ED-css3-fonts-20110309">http://www.w3.org/TR/2011/ED-css3-fonts-20110309</a> -->
+ <!-- <dd><a href="http://www.w3.org/TR/2011/ED-css3-fonts-20110310">http://www.w3.org/TR/2011/ED-css3-fonts-20110310</a> -->
<dt>Latest version:
@@ -292,6 +292,9 @@
<li><a href="#char-handling-issues"><span class=secno>5.2
</span>Character handling issues</a>
+
+ <li><a href="#font-matching-changes"><span class=secno>5.3 </span>Font
+ matching changes since CSS 2.1</a>
</ul>
<li><a href="#font-rend-props"><span class=secno>6 </span>Font feature
@@ -334,8 +337,8 @@
shorthand for font rendering: the font-variant property</a>
<li><a href="#font-feature-settings-prop"><span class=secno>6.12
- </span>Low-level font settings control: the font-feature-settings
- property</a>
+ </span>Low-level font feature settings control: the
+ font-feature-settings property</a>
<li><a href="#font-language-override-prop"><span class=secno>6.13
</span>Font language override: the font-language-override property</a>
@@ -2577,7 +2580,7 @@
<tr>
<td>Value:
- <td>normal | [<featuretag>]+
+ <td>normal | <featuretagvalue> [, <featuretagvalue>]*
<tr>
<td><em>Initial:</em>
@@ -2779,7 +2782,29 @@
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>
+ available fonts and rendering technology.
+
+ <h3 id=font-matching-changes><span class=secno>5.3 </span>Font matching
+ changes since CSS 2.1</h3>
+
+ <p>The algorithm above is different from CSS 2.1 in a number of key places.
+ These changes were made to better reflect actual font matching behavior
+ across user agent implementations.
+
+ <ul></ul>
+
+ <p>Differences compared to the font matching algorithm in CSS 2.1:
+
+ <ul>
+ <li>The algorithm includes font-stretch matching.
+
+ <li>All possible font-style matching scenarios are delineated.
+
+ <li>Small-caps fonts are not matched as part of the font matching process,
+ they are now handled via font features.
+
+ <li>Unicode variation selector matching is required.
+ </ul>
<!--
<h3>Examples of font matching</h3>
@@ -3008,20 +3033,23 @@
<td>as specified
</table>
- <p>Controls whether kerning is applied to inter-glyph spacing when
- rendering text. The value ‘<code class=property>normal</code>’ implies
- that kerning is applied when rendering text while the value ‘<code
+ <p>Kerning is the contextual adjustment of inter-glyph spacing. This
+ property controls metric kerning, kerning that utilizes adjustment data
+ contained in the font. The value ‘<code class=property>normal</code>’
+ implies that kerning is applied while the value ‘<code
class=property>none</code>’ implies that kerning is not applied when
- rendering text. If the value is ‘<code class=property>auto</code>’ a
+ rendering text. If the value is ‘<code class=property>auto</code>’, a
user agent is free to choose whether kerning is enabled or not by default.
-
<p>For fonts that do not include kerning data this property will have no
visible effect. When rendering with OpenType fonts, the <a
href="#OPENTYPE" rel=biblioentry>[OPENTYPE]<!--{{!OPENTYPE}}--></a>
- specification suggests that kerning be enabled by default. Authors may
- prefer to disable kerning in situations where performance is more
- important that precise appearance. If the ‘<code
+ specification suggests that kerning be enabled by default. For OpenType
+ fonts, user agents must support fonts containing kerning data in either
+ the ‘<code class=property>kern</code>’ or 'GPOS' tables, using the
+ guidelines detailed in the OpenType specification. Authors may prefer to
+ disable kerning in situations where performance is more important that
+ precise appearance. If the ‘<code
class=property>letter-spacing</code>’ property is defined, kerning
adjustments are considered part of the default spacing, letter spacing
adjustments are made after kerning has been applied.</p>
@@ -3103,6 +3131,20 @@
and vertical-align to its initial value. Other than this, the property
does not affect the height of the line box.
+ <p class=issue>It would be nice to define this in a way such that it would
+ work with nested subscripts or superscripts which would allow it to be
+ used in user agent stylesheets. But one of the goals for this is to allow
+ simple subscripts and superscripts to be displayed without affecting the
+ line box. To achieve both appears to be a very hairy problem.
+
+ <p class=issue>Fonts often include default values for subscript/superscript
+ metrics. As a result, a mixture of designed glyphs and simulated glyphs
+ may not display correctly, effectively the baseline would bounce between
+ the two types of glyphs.
+
+ <p class=issue>Steve Z is concerned about the fact that this property
+ effectively breaks inheritance by resetting font-size and vertical-align.
+
<div class=example>
<p>A typical user agent default style for the <code>sub</code> element:</p>
@@ -3559,7 +3601,6 @@
styleset(<feature-value-name> [, <feature-value-name>]*) ||
character-variant(<feature-value-name>
[,<feature-value-name>]*) || swash(<feature-value-name>) ||
- contextual-swash(<feature-value-name>) ||
ornament(<feature-value-name>) ||
annotation(<feature-value-name>) || ruby ]
@@ -3662,20 +3703,14 @@
id=swashltfeature-value-namegt>swash(<feature-value-name>)</dfn>
<dd>Enables display of swash glyphs (<em>font specific</em>, OpenType
- feature: <code>swsh <feature-index></code>).
+ feature: <code>swsh <feature-index>, cswh
+ <feature-index></code>).
</dl>
<div class=featex><img alt="swash example" src=swsh.png></div>
<dl>
<dt><dfn
- id=contextual-swashltfeature-value-namegt>contextual-swash(<feature-value-name>)</dfn>
-
-
- <dd>Enables display of contextual swash glyphs (<em>font specific</em>,
- OpenType feature: <code>cswh <feature-index></code>).
-
- <dt><dfn
id=ornamentsltfeature-value-namegt>ornaments(<feature-value-name>)</dfn>
@@ -3913,7 +3948,7 @@
containing character variants that mimic the character forms found on a
Byzantine seal from the 8th century A.D. Two lines below is the same text
displayed in a font without variants. Note the two variants for U and N
- used on the reverse of the seal.</p>
+ used on the seal.</p>
<pre>@font-feature-values Athena Ruby {
@character-variant
@@ -4087,12 +4122,11 @@
<contextual-alt-values> || stylistic[(<integer>)]? ||
historical-forms || styleset(<integer> [,<integer>]*) ||
character-variant(<integer> [,<integer>]*) ||
- swash[(<integer>)]? || contextual-swash[(<integer>)]? ||
- ornament[(<integer>)]? || annotation[(<integer>)]? || ruby
- || <caps-value> || <numeric-figure-values> ||
- <numeric-spacing-values> || <numeric-fraction-values> ||
- slashed-zero || <east-asian-variant-values> ||
- <east-asian-width-values> ]
+ swash[(<integer>)]? || ornament[(<integer>)]? ||
+ annotation[(<integer>)]? || ruby || <caps-value> ||
+ <numeric-figure-values> || <numeric-spacing-values> ||
+ <numeric-fraction-values> || slashed-zero ||
+ <east-asian-variant-values> || <east-asian-width-values> ]
<tr>
<td>Initial:
@@ -4137,7 +4171,7 @@
class=property>font-feature-settings</code></a>’.
<h3 id=font-feature-settings-prop><span class=secno>6.12 </span>Low-level
- font settings control: the <a
+ font feature settings control: the <a
href="#propdef-font-feature-settings">font-feature-settings</a> property</h3>
<table class=propdef id=namefont-feature-settingsvaluenormal-ltf>
@@ -4150,7 +4184,7 @@
<tr>
<td>Value:
- <td>normal | [<featuretag>]+
+ <td>normal | <featuretagvalue> [, <featuretagvalue>]*
<tr>
<td>Initial:
@@ -4192,23 +4226,21 @@
<p>
<pre>/* enable small caps and use second swash alternate */
-font-feature-settings: smcp swsh(2);</pre>
+font-feature-settings: "smcp", "swsh" 2;</pre>
- <p>Feature tags are used with the following syntax:
+ <p>Feature tag values have the following syntax:
<pre
- class=prod><dfn id=ltfeaturetaggt><var><featuretag></var></dfn> = [ot-]ident[( <integer> | on | off )]?</pre>
+ class=prod><dfn id=ltfeaturetagvaluegt><var><featuretagvalue></var></dfn> = <string> [ <integer> | on | off ]?</pre>
- <p>The identifier indicates a case-sensitive OpenType feature tag. For it
- to match an OpenType feature contained in a font, it must follow the
- syntax rules for tags. OpenType feature tags that are not valid CSS
- identifiers or conflict with CSS keywords must be prefixed with ‘<code
- class=property>ot-</code>’. In this case the ‘<code
- class=property>ot-</code>’ prefex is removed and the remaining portion
- of the identifier is used to lookup the feature tag in the font. Feature
- tags need only match a feature tag defined in the font, they are not
- limited to explicitly registered OpenType features. Fonts defining custom
- feature tags should follow the <a
+ <p>The <string> is a case-sensitive OpenType feature tag. For it to
+ match an OpenType feature contained in a font, it must follow the syntax
+ rules for tags. As specified in the OpenType specification, feature tags
+ contain four characters. Tag strings longer than four characters must be
+ ignored, user agents must not use a feature tag created by truncating the
+ string to four characters. Feature tags need only match a feature tag
+ defined in the font, they are not limited to explicitly registered
+ OpenType features. Fonts defining custom feature tags should follow the <a
href="http://www.microsoft.com/typography/otspec/featuretags.htm">tag name
rules</a> defined in the OpenType specification <a
href="#OPENTYPE-FEATURES"
@@ -4216,24 +4248,23 @@
Feature tags not present in the font are ignored; a user agent must not
attempt to synthesize fallback behavior based on these feature tags.
- <p>If present, a value in parentheses indicates an index used for glyph
- selection. An <integer> value must be 0 or greater. A value of 0
- indicates that the feature is disabled. For boolean features, a value of 1
- enables the feature. For non-boolean features, a value of 1 or greater
- enables the feature and indicates the feature selection index. A value of
- ‘<code class=property>on</code>’ is synonymous with 1 and ‘<code
- class=property>off</code>’ is synonymous with 0. If the value in
- parentheses is omitted, a value of 1 is assumed.
+ <p>If present, a value indicates an index used for glyph selection. An
+ <integer> value must be 0 or greater. A value of 0 indicates that
+ the feature is disabled. For boolean features, a value of 1 enables the
+ feature. For non-boolean features, a value of 1 or greater enables the
+ feature and indicates the feature selection index. A value of ‘<code
+ class=property>on</code>’ is synonymous with 1 and ‘<code
+ class=property>off</code>’ is synonymous with 0. If the value is
+ omitted, a value of 1 is assumed.
<pre>
-font-feature-settings: dlig(1); /* dlig=1 enable discretionary ligatures */
-font-feature-settings: smcp(on); /* smcp=1 enable small caps */
-font-feature-settings: ot-c2sc; /* c2sc=1 enable caps to small caps */
-font-feature-settings: liga(off); /* liga=0 no common ligatures */
-font-feature-settings: tnum hist; /* tnum=1, hist=1 enabled tabular numbers and historical forms */
-font-feature-settings: 3piX(1); /* invalid syntax, feature tag not identifier */
-font-feature-settings: ot-3piX; /* 3piX=1 (this feature not defined) */
-font-feature-settings: PKRN; /* PKRN=1 enable custom feature */
+font-feature-settings: "dlig" 1; /* dlig=1 enable discretionary ligatures */
+font-feature-settings: "smcp" on; /* smcp=1 enable small caps */
+font-feature-settings: "c2sc"; /* c2sc=1 enable caps to small caps */
+font-feature-settings: "liga" off; /* liga=0 no common ligatures */
+font-feature-settings: "tnum", "hist"; /* tnum=1, hist=1 enabled tabular numbers and historical forms */
+font-feature-settings: "palin" off; /* good idea but invalid tagname, ignored */
+font-feature-settings: "PKRN"; /* PKRN=1 enable custom feature */
</pre>
<p>Authors should generally use ‘<a href="#propdef-font-variant"><code
@@ -4246,12 +4277,15 @@
for other modern font formats that support font features may be added in
the future.
+ <p class=issue>While the use of quotes distinguishes feature tags as
+ defined in an external resource, they still seem a bit clumsy.
+
<div class=example>
<p>The Japanese text below will be rendered with half-width kana
characters:</p>
<pre lang=ja>
-body { font-feature-settings: hwid; /* Half-width OpenType feature */ }
+body { font-feature-settings: "hwid"; /* Half-width OpenType feature */ }
<p>毎日<a href="http://images.google.com/images?q=%E3%82%AB%E3%83%AC%E3%83%BC" style="text-decoration: none;">カレー</a>食べてるのに、飽きない</p>
</pre>
@@ -4445,7 +4479,7 @@
font-family: BodyText;
src: local("HiraMaruPro-W4");
font-variant: proportional-width;
- font-feature-settings: ital; /* Latin italics within CJK text feature */
+ font-feature-settings: "ital"; /* Latin italics within CJK text feature */
}
body { font-family: BodyText, serif; }
@@ -4474,7 +4508,7 @@
<p>Adding an additional style rule with the @font-face above:</p>
<pre>body { font-family: main, Helvetica; }
-span { font-feature-settings: dlig; }
+span { font-feature-settings: "dlig"; }
span.special { font-variant-ligatures: no-additional-ligatures; }
</pre>
@@ -4681,7 +4715,8 @@
Lunde and Eric Muller provided valuable feedback on CJK OpenType features
and Unicode variation selectors. The idea for supporting font features by
using font-variant subproperties originated with Håkon Wium Lie, Adam
- Twardoch and Tal Leming.
+ Twardoch and Tal Leming. Thanks also to House Industries for allowing the
+ use of Ed Interlock in the discretionary ligatures example.
<p>A special thanks to Robert Bringhurst for the sublime mind expansion
that is <em>The Elements of Typographic Style</em>.
@@ -4933,8 +4968,8 @@
href="#ltfeature-value-namegt"
title="<feature-value-name>"><strong>6.9</strong></a>
- <li><var><featuretag></var>, <a href="#ltfeaturetaggt"
- title="<featuretag>"><strong>6.12</strong></a>
+ <li><var><featuretagvalue></var>, <a href="#ltfeaturetagvaluegt"
+ title="<featuretagvalue>"><strong>6.12</strong></a>
<li><font-description>
<ul>
@@ -5034,11 +5069,6 @@
<li>contextual, <a href="#contextual"
title=contextual><strong>6.8</strong></a>
- <li>contextual-swash(<feature-value-name>), <a
- href="#contextual-swashltfeature-value-namegt"
- title="contextual-swash(<feature-value-name>)"><strong>6.8</strong></a>
-
-
<li>cursive, definition of, <a href="#cursive0" title="cursive, definition
of"><strong>#</strong></a>
@@ -5276,7 +5306,7 @@
<td><a class=property
href="#propdef-font-feature-settings">font-feature-settings</a>
- <td>normal | [<featuretag>]+
+ <td>normal | <featuretagvalue> [, <featuretagvalue>]*
<td>normal
@@ -5406,12 +5436,11 @@
<contextual-alt-values> || stylistic[(<integer>)]? ||
historical-forms || styleset(<integer> [,<integer>]*) ||
character-variant(<integer> [,<integer>]*) ||
- swash[(<integer>)]? || contextual-swash[(<integer>)]? ||
- ornament[(<integer>)]? || annotation[(<integer>)]? || ruby
- || <caps-value> || <numeric-figure-values> ||
- <numeric-spacing-values> || <numeric-fraction-values> ||
- slashed-zero || <east-asian-variant-values> ||
- <east-asian-width-values> ]
+ swash[(<integer>)]? || ornament[(<integer>)]? ||
+ annotation[(<integer>)]? || ruby || <caps-value> ||
+ <numeric-figure-values> || <numeric-spacing-values> ||
+ <numeric-fraction-values> || slashed-zero ||
+ <east-asian-variant-values> || <east-asian-width-values> ]
<td>normal
@@ -5432,7 +5461,6 @@
styleset(<feature-value-name> [, <feature-value-name>]*) ||
character-variant(<feature-value-name>
[,<feature-value-name>]*) || swash(<feature-value-name>) ||
- contextual-swash(<feature-value-name>) ||
ornament(<feature-value-name>) ||
annotation(<feature-value-name>) || ruby ]
Received on Friday, 11 March 2011 01:41:56 UTC