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
|
OpenType features in GNU FreeFont
The OpenType font standard specifies numerous "features", which describe
how glyphs should be rendered under certain circumstances.
Some features, such as ligatures, substitute one glyph (or glyphs) with
others. Other features such as kerning adjust the positioning of glyphs.
A feature may be activated for text of a certain script (such as Cyrillic
or Arabic) in a certain language or region (as can be specified in HTML
elements with the "lang" attribute), and some are activated only in case
other features are not activated.
The actual rendering of these features is not by the font itself but rather
by font rendering software in the operating system or application or printer.
As of this writing, feature support is far from perfect in many environments.
The features are encoded in the font's "lookup tables". Each table has
a four-byte name.
The feature lookup tables used in FreeFont include:
Substitution (GSUB)
============
rlig required ligature
liga standard ligature
hlig historic ligature
dlig discretionary ligature
hist historic form
locl localized form
smcp lowercase to small capitals
c2sc captials to small capitals
frac diagonal fractions
zero slashed zero
onum oldstyle figures
ccmp glyph decomposition (multiple replacement)
contextual chained substitution
aalt access all alternates
calt contextual alternates
Arabic
------
init initial forms
medi medial forms
fina final formes
Indic scripts
-------------
(these are always applied in exactly the following order)
nukt nukta forms
akhn akhand
rphf reph form
blwf below base forms
half half form
vatu vattu variants
pres pre base substitutions
abvs above base substitutions
blws below base substitutions
psts post base substitutions
haln halant forms
Positioning (GPOS)
===========
kern kerning
mark mark-to-base
mkmk mark-to-mark
Indic scripts
-------------
dist distance (similar to kern)
abvm above mark
blwm below mark
Use and Policies
================
kerning
-------
Kerning is viewed as a delicate adjustment of horizontal positioning of
letters based on the relative shapes of adjacent letters.
The first goal of kerning is to enhance the appearance of coherence in
words, by reducing apparent spaces beteen adjacent letters.
The second is to make the spacing appear somehow "smooth".
A few pairs of letters are strongly kerned, for example 'AV'. With very few
exceptions, one letter should not visually intrude on the horizontal space of
another. (Exceptions might include the hooks on f and y.)
For instance, in serifed fonts, the serifs of most letters should have a
visible space between them, and should not visually intrude on one another
horizontally.
For most others, the policy is "err on the conservative side".
A common mistake is to try to minimize the area between the letters
-- this has a poor effect on the appearance of the text.
After kerning, bulk text should be carefully inspected both in print and on
the screen in different resolutions, that the letters appear evenly-spaced,
and never crash into one another.
mark positioning
----------------
It is conceptually more direct, and in principle easier, to position marks
relative to letters using the various mark positioning lookups.
Unfortunately, the implementation of these features has been rather spotty.
Especially in cases where multiple marks appear on the same base, it can
get just too messy to be practical. Unfortunately, often pre-composed
components are a necessary fallback.
$Id: features.txt,v 1.1 2011-07-16 11:24:10 Stevan_White Exp $
|