Skip to content

Commit 6cf3afa

Browse files
author
John Daggett
committed
[css3-fonts] based on the case sensitivity resolutions today, define caseless matching of font family names
1 parent 03b6c6d commit 6cf3afa

1 file changed

Lines changed: 61 additions & 28 deletions

File tree

css3-fonts/Fonts.html

Lines changed: 61 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -112,15 +112,15 @@
112112

113113
<h1>CSS Fonts Module Level 3</h1>
114114

115-
<h2 class="no-num no-toc" id=editors-draft-31-january-2013>Editor's Draft
116-
31 January 2013</h2>
115+
<h2 class="no-num no-toc" id=editors-draft-4-february-2013>Editor's Draft
116+
4 February 2013</h2>
117117

118118
<dl id=authors>
119119
<dt>This version:
120120

121121
<dd><a
122122
href="http://dev.w3.org/csswg/css3-fonts/">http://dev.w3.org/csswg/css3-fonts/</a>
123-
<!-- <dd><a href="http://www.w3.org/TR/2013/ED-css3-fonts-20130131/">http://www.w3.org/TR/2013/ED-css3-fonts-20130131/</a> -->
123+
<!-- <dd><a href="http://www.w3.org/TR/2013/ED-css3-fonts-20130204/">http://www.w3.org/TR/2013/ED-css3-fonts-20130204/</a> -->
124124

125125

126126
<dt>Latest version:
@@ -308,19 +308,22 @@ <h2 class="no-num no-toc" id=contents>Table of contents</h2>
308308
<li><a href="#font-matching-algorithm"><span class=secno>5 </span>Font
309309
Matching Algorithm</a>
310310
<ul class=toc>
311-
<li><a href="#font-style-matching"><span class=secno>5.1 </span>Matching
311+
<li><a href="#font-family-casing"><span class=secno>5.1 </span>Case
312+
sensitivity of font family names</a>
313+
314+
<li><a href="#font-style-matching"><span class=secno>5.2 </span>Matching
312315
font styles</a>
313316

314-
<li><a href="#cluster-matching"><span class=secno>5.2 </span>Cluster
317+
<li><a href="#cluster-matching"><span class=secno>5.3 </span>Cluster
315318
matching</a>
316319

317-
<li><a href="#char-handling-issues"><span class=secno>5.3
320+
<li><a href="#char-handling-issues"><span class=secno>5.4
318321
</span>Character handling issues</a>
319322

320-
<li><a href="#font-matching-changes"><span class=secno>5.4 </span>Font
323+
<li><a href="#font-matching-changes"><span class=secno>5.5 </span>Font
321324
matching changes since CSS 2.1</a>
322325

323-
<li><a href="#font-matching-examples"><span class=secno>5.5 </span>Font
326+
<li><a href="#font-matching-examples"><span class=secno>5.6 </span>Font
324327
matching examples</a>
325328
</ul>
326329

@@ -2869,7 +2872,39 @@ <h2 id=font-matching-algorithm><span class=secno>5 </span>Font Matching
28692872
runs of text. For each character in the run a font family is chosen and a
28702873
particular font face is selected containing a glyph for that character.
28712874

2872-
<h3 id=font-style-matching><span class=secno>5.1 </span>Matching font
2875+
<h3 id=font-family-casing><span class=secno>5.1 </span>Case sensitivity of
2876+
font family names</h3>
2877+
2878+
<p>As part of the font matching algorithm outlined below, user agents must
2879+
match font family names used in style rules with actual font family names
2880+
contained in fonts available in a given environment or defined via
2881+
<code>@font-face</code> rules. User agents must match these names case
2882+
insensitively, using the "Default Caseless Matching" algorithm outlined in
2883+
the Unicode specification <a href="#UNICODE6"
2884+
rel=biblioentry>[UNICODE6]<!--{{!UNICODE6}}--></a>. This algorithm is
2885+
detailed in section 3.13 entitled "Default Case Algorithms". Specifically,
2886+
the algorithm must be applied without normalizing the strings involved and
2887+
without applying any language-specific tailorings. The case folding method
2888+
specified by this algorithm uses the case mappings with status field
2889+
<code class=property>C</code>’ or ‘<code class=property>F</code>
2890+
in the CaseFolding.txt file of the Unicode Character Database.
2891+
Implementors should take care to verify that a given caseless string
2892+
comparison implementation uses this precise algorithm and not assume that
2893+
a given platform string matching routine follows it, as many of these have
2894+
locale-specific behavior or use some level of string normalization.
2895+
2896+
<p>For authors this means that font family names are matched case
2897+
insensitively, whether or not those names exist in a platform font or in
2898+
the <code>@font-face</code> rules contained in a stylesheet. Authors
2899+
should take care to normalize the names they use when using combining
2900+
diacritics, since names containing combining diacritics won't match
2901+
equivalent names that use precomposed characters. For example, a family
2902+
name that contains an uppercase A (U+0041) followed by a combining ring
2903+
(U+030A) will <strong>not</strong> match a name that is identical except
2904+
that it uses the precomposed lowercase a-ring character (U+00E5) instead
2905+
of the combining sequence.
2906+
2907+
<h3 id=font-style-matching><span class=secno>5.2 </span>Matching font
28732908
styles</h3>
28742909

28752910
<p>The procedure for choosing fonts consists of iterating over the font
@@ -2897,16 +2932,15 @@ <h3 id=font-style-matching><span class=secno>5.1 </span>Matching font
28972932

28982933
<li>For other family names, the user agent attempts to find the family
28992934
name among fonts defined via <code>@font-face</code> rules and then among
2900-
available system fonts, matching names with a case-insensitive
2901-
comparison. On systems containing fonts with multiple localized font
2902-
family names, user agents must match any of these names independent of
2903-
the underlying system locale or platform API used. If a font family
2904-
defined via <code>@font-face</code> rules contains only invalid font
2905-
data, it should be considered as if a font was present but contained an
2906-
empty character map; matching a platform font with the same name must not
2907-
occur in this case.
2908-
<p class=issue>Need to define explicitly the case-insensitive matching
2909-
algorithm for matching font family names</p>
2935+
available system fonts, matching names with a case-insensitive comparison
2936+
as outlined <a href="#font-family-casing">in the section above</a>. On
2937+
systems containing fonts with multiple localized font family names, user
2938+
agents must match any of these names independent of the underlying system
2939+
locale or platform API used. If a font family defined via
2940+
<code>@font-face</code> rules contains only invalid font data, it should
2941+
be considered as if a font was present but contained an empty character
2942+
map; matching a platform font with the same name must not occur in this
2943+
case.
29102944

29112945
<li>If a font family match occurs, the user agent assembles the set of
29122946
font faces in that family and then narrows the set to a single face using
@@ -3015,7 +3049,7 @@ <h3 id=font-style-matching><span class=secno>5.1 </span>Matching font
30153049
Font</a>) or using the missing character glyph from a default font.
30163050
</ol>
30173051

3018-
<h3 id=cluster-matching><span class=secno>5.2 </span>Cluster matching</h3>
3052+
<h3 id=cluster-matching><span class=secno>5.3 </span>Cluster matching</h3>
30193053

30203054
<p>When text contains characters such as combining diacritics, ideally the
30213055
base character should be rendered using the same font as the diacritic,
@@ -3077,7 +3111,7 @@ <h3 id=cluster-matching><span class=secno>5.2 </span>Cluster matching</h3>
30773111
separately using the rules for single characters.
30783112
</ol>
30793113

3080-
<h3 id=char-handling-issues><span class=secno>5.3 </span>Character handling
3114+
<h3 id=char-handling-issues><span class=secno>5.4 </span>Character handling
30813115
issues</h3>
30823116

30833117
<p>The procedure above is always performed on text runs containing Unicode
@@ -3118,7 +3152,7 @@ <h3 id=char-handling-issues><span class=secno>5.3 </span>Character handling
31183152
consistent as possible across user agents, given an identical set of
31193153
available fonts and rendering technology.
31203154

3121-
<h3 id=font-matching-changes><span class=secno>5.4 </span>Font matching
3155+
<h3 id=font-matching-changes><span class=secno>5.5 </span>Font matching
31223156
changes since CSS 2.1</h3>
31233157

31243158
<p>The algorithm above is different from CSS 2.1 in a number of key places.
@@ -3140,7 +3174,7 @@ <h3 id=font-matching-changes><span class=secno>5.4 </span>Font matching
31403174
<li>Cluster sequences are matched as a unit.
31413175
</ul>
31423176

3143-
<h3 id=font-matching-examples><span class=secno>5.5 </span>Font matching
3177+
<h3 id=font-matching-examples><span class=secno>5.6 </span>Font matching
31443178
examples</h3>
31453179

31463180
<div class=example>
@@ -4241,14 +4275,11 @@ <h3 id=font-feature-values><span class=secno>6.9 </span>Defining font
42414275
class=property>font-variant</code></a>’ property are recognized,
42424276
definitions for other value names cause a syntax error and are ignored.
42434277
Each property value that is font specific is clearly marked as such.
4244-
Feature value names follow the rules of CSS identifiers and are
4278+
Feature value names follow the rules of CSS user identifiers and are
42454279
case-sensitive. They are unique only for a given set of font families and
42464280
font-variant property value; the same identifier used with a different
42474281
font-variant property value is treated as a separate and distinct value.
42484282

4249-
<p class=issue>Matching of feature value names is dependent on the
4250-
resolution of matching for user-defined identifiers in CSS.
4251-
42524283
<p>Using a commonly named value allows authors to use a single style rule
42534284
to cover a set of fonts for which the underlying selector is different for
42544285
each font. If either font in the example below is found, a circled number
@@ -5598,6 +5629,8 @@ <h3 class=no-num id=recent-changes> Changes from the <a
55985629

55995630
<li>Added conformance section
56005631

5632+
<li>Added CORS cross-origin request algorithm parameters
5633+
56015634
<li>Minor editorial tweaks hither and thither
56025635
</ul>
56035636

@@ -6128,7 +6161,7 @@ <h2 class=no-num id=index>Index</h2>
61286161
of"><strong>#</strong></a>
61296162

61306163
<li>default face, <a href="#default-face" title="default
6131-
face"><strong>5.1</strong></a>
6164+
face"><strong>5.2</strong></a>
61326165

61336166
<li>diagonal-fractions, <a href="#diagonal-fractions"
61346167
title=diagonal-fractions><strong>6.7</strong></a>

0 commit comments

Comments
 (0)