Blob Blame History Raw
	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 $