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 $