forked from w3c/css-houdini-drafts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOverview.bs
209 lines (164 loc) · 7.65 KB
/
Overview.bs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
<pre class='metadata'>
Title: Font Metrics API Level 1
Status: DREAM
Group: houdini
ED: https://drafts.css-houdini.org/font-metrics-api-1/
Shortname: font-metrics-api
Level: 1
Abstract:
Editor: Emil A Eklund, eae@google.com, w3cid 93298
Editor: Alan Stearns, stearns@adobe.com, w3cid 46659
</pre>
<pre class=link-defaults>
spec:dom; type:interface; text:Document
spec:dom; type:interface; text:Element;
spec:cssom-1; type:interface; text:CSS;
</pre>
Introduction {#intro}
=====================
The API exposed by this specification is designed to provide basic font metrics
for both in-document and out-of-document content.
Note: In a future version of this spec support may be added for exposing
information about individual runs of text, including information about
directionality, script, and character properties.
Measure API {#measure-api}
============================================
<pre class='idl'>
partial interface Document {
FontMetrics measureElement(Element element);
FontMetrics measureText(DOMString text, StylePropertyMapReadOnly styleMap);
};
</pre>
Two methods are provided for measuring text, one for in-document measurements
and another for out-of-document measurements. Both return a {{FontMetrics}}
object.
{{Document/measureElement()}} takes an {{Element}} and returns a {{FontMetrics}}
object. If the {{Element}} is not in the document or isn't rendered an empty
{{FontMetrics}} object will be returned.
{{Document/measureText()}} takes a {{DOMString}} and a
{{StylePropertyMapReadOnly}}, returning a {{FontMetrics}} object. Unless a font
is specified as a part of the styleMap the user agents default will be used.
Note: The only styles that apply to the {{Document/measureText()}} method are
those that are passed in as a part of the styleMap. Document styles do not apply.
{{FontMetrics}} object {#fontmetrics-definition}
----------------------------
<pre class='idl'>
interface FontMetrics {
readonly attribute double width;
readonly attribute sequence<double> advances;
readonly attribute double boundingBoxLeft;
readonly attribute double boundingBoxRight;
readonly attribute double height;
readonly attribute double emHeightAscent;
readonly attribute double emHeightDescent;
readonly attribute double boundingBoxAscent;
readonly attribute double boundingBoxDescent;
readonly attribute double fontBoundingBoxAscent;
readonly attribute double fontBoundingBoxDescent;
readonly attribute Baseline dominantBaseline;
readonly attribute sequence<Baseline> baselines;
readonly attribute sequence<Font> fonts;
};
</pre>
The {{FontMetrics}} object has the following attributes:
{{FontMetrics/width}}
The advance width of the line box, in CSS pixels.
{{FontMetrics/advances}}
List of advances for each codepoint in the given text relative to the preceding
codepoint, in CSS pixels. Where a glyph is composed of a sequence of codepoints
the advance for the all but the first codepoint in the sequence will be zero.
{{FontMetrics/boundingBoxLeft}}
The distance parallel to the {{FontMetrics/dominantBaseline}} from the alignment
point given by the text-align property to the left side of the bounding
rectangle of the given text, in CSS pixels; positive numbers indicating a
distance going left from the given alignment point.
Note: The sum of this value and {{FontMetrics/boundingBoxRight}} can be wider
than the {{FontMetrics/width}}, in particular with slanted fonts where
characters overhang their advance width.
{{FontMetrics/boundingBoxRight}}
The distance parallel to the {{FontMetrics/dominantBaseline}} from the alignment
point given by the text-align property to the right side of the bounding
rectangle of the given text, in CSS pixels. Positive numbers indicating a
distance going right from the given alignment point.
{{FontMetrics/height}}
The distance between the highest top and the lowest bottom of the em squares in
the line box, in CSS pixels.
{{FontMetrics/emHeightAscent}}
The distance from the {{FontMetrics/dominantBaseline}} to the highest top of the
em squares in the line box, in CSS pixels.
Positive numbers indicating that the {{FontMetrics/dominantBaseline}} is below
the top of that em square (so this value will usually be positive).
Zero if the {{FontMetrics/dominantBaseline}} is the top of that em square.
Half the font size if the {{FontMetrics/dominantBaseline}} is the middle of that
em square.
{{FontMetrics/emHeightDescent}}
The distance from the {{FontMetrics/dominantBaseline}} to the lowest bottom of
the em squares in the line box, in CSS pixels.
Positive numbers indicating that the {{FontMetrics/dominantBaseline}} is below
the bottom of that em square (so this value will usually be negative).
Zero if the {{FontMetrics/dominantBaseline}} is the bottom of that em square.
{{FontMetrics/boundingBoxAscent}}
The distance from the {{FontMetrics/dominantBaseline}} to the top of the
bounding rectangle of the given text, in CSS pixels; positive numbers indicating
a distance going up from the {{FontMetrics/dominantBaseline}}.
Note: This number can vary greatly based on the input text, even if the first
font specified covers all the characters in the input.
{{FontMetrics/boundingBoxDescent}}
The distance from the {{FontMetrics/dominantBaseline}} to the bottom of the
bounding rectangle of the given text, in CSS pixels; positive numbers indicating
a distance going down from the {{FontMetrics/dominantBaseline}}.
{{FontMetrics/fontBoundingBoxAscent}}
The distance from the {{FontMetrics/dominantBaseline}} to the top of the highest
bounding rectangle of all the fonts used to render the text, in CSS pixels;
positive numbers indicating a distance going up from the
{{FontMetrics/dominantBaseline}}.
Note: This value and {{FontMetrics/fontBoundingBoxDescent}} are useful when
metrics independent of the actual text being measured are desired as the values
will be consistent regardless of the text as long as the same fonts are being
used.
The {{FontMetrics/boundingBoxAscent}} attribute (and its corresponding attribute
for the descent) are useful when metrics specific to the given text are desired.
{{FontMetrics/fontBoundingBoxDescent}}
The distance from the {{FontMetrics/dominantBaseline}} to the bottom of the
lowest bounding rectangle of all the fonts used to render the text, in
CSS pixels; positive numbers indicating a distance going down from the
{{FontMetrics/dominantBaseline}}.
{{FontMetrics/dominantBaseline}}
Reference to the dominant {{Baseline}} for the given text in the list of
{{FontMetrics/baselines}}.
{{FontMetrics/baselines}}
List of all {{Baseline}}s for the given text.
{{Baseline}} object {#baseline-definition}
----------------------------
<pre class='idl'>
interface Baseline {
readonly attribute DOMString name;
readonly attribute double value;
};
</pre>
Each {{Baseline}} object represents a baseline of the measured text and has the
following attributes:
{{Baseline/name}}
Name of the baseline in question.
{{Baseline/value}}
Distance from the {{FontMetrics/dominantBaseline}}, in CSS pixels.
Positive numbers indicating a distance going down from the
{{FontMetrics/dominantBaseline}}.
{{Font}} object {#font-definition}
----------------------------
<pre class='idl'>
interface Font {
readonly attribute DOMString name;
readonly attribute unsigned long glyphsRendered;
};
</pre>
Each {{Font}} object represents a font that was used for at least one glyph in
the measured text. It contains the following fields:
{{Font/name}}
Font family name.
{{Font/glyphsRendered}}
Number of glyphs used from the specific font. If multiple fonts are required to
render the specified text this attribute will indicate how many glyphs where
used from each font.
Note: Indicates the number of glyphs which may be lower than the number of
codepoints.