Registered features - definitions and implementations (a – e) (OpenType 1.4)
a - e | f - j | k - o | p - t | u - z
Tag: 'aalt'
Friendly name: Access All Alternates
Registered by: Adobe
Function: This feature makes all variations of a selected character accessible. This serves several purposes: An application may not support the feature by which the desired glyph would normally be accessed; the user may need a glyph outside the context supported by the normal substitution, or the user may not know what feature produces the desired glyph. Since many-to-one substitutions are not covered, ligatures would not appear in this table unless they were variant forms of another ligature.
Example: A user inputs the P in Poetica, and is presented with a choice of the four standard capital forms, the eight swash capital forms, the initial capital form and the small capital form.
Recommended implementation: The aalt table groups glyphs into semantic units. These units include the glyph which represents the default form for the underlying Unicode value stored by the application. While many of these substitutions are one-to-one (GSUB lookup type 1), others require a selection from a set (GSUB lookup type 3). The manufacturer may choose to build two tables (one for each lookup type) or only one which uses lookup type 3 for all substitutions. As in any one-from-many substitution, alternates present in more than one face should be ordered consistently across a family, so that those alternates can work correctly when switching between family members. This feature should be ordered first in the font, to take precedence over other features.
Application interface: The application determines the GID for the default form of a given character (Unicode value with no features applied). It then checks to see whether the GID is found in the aalt coverage table. If so, the application passes this value to the feature table and gets back the GIDs in the associated group.
UI suggestion: While most one-from-many substitution features can be applied globally with reasonable results, aalt is not designed to support this use. The application should indicate to the user which glyphs in the user’s document have alternative forms (i.e which are in the coverage table for aalt). When the user selects one of those glyphs and applies the aalt feature, an application could display the forms sequentially in context, or present a palette showing all the forms at once, or give the user a choice between these approaches. The application may assume that the first glyph in a set is the preferred form, so the font developer should order them accordingly. When only one alternate exists, this feature could toggle directly between the alternate and default forms.
Script/language sensitivity: None.
Feature interaction: This feature may be used in combination with other features.
Tag: 'abvf'
Friendly name: Above-base Forms
Registered by: Microsoft
Function: Substitutes the above-base form of a vowel.
Example: In complex scripts like Khmer, the vowel OE must be split into a pre-base form and an above-base form. The above-base form of OE would be substituted to form the correct piece of the letter that is displayed above the base consonant.
Recommended implementation: This feature substitutes the GID for OE with the above part of the glyph (GSUB lookup type 1).
Application interface: In a sequence where a split vowel with an above form is used, the application must insert the pre-base glyph into the correct location and then apply the above-base form feature. The application gets back the GID for the correct form for the piece that is placed above the base glyph. The application may also choose to position this glyph if required, after this feature is called.
UI suggestion: This feature should be on by default.
Script/language sensitivity: Required in Khmer script.
Feature interaction: This feature overrides the results of all other features.
Tag: 'abvm'
Friendly name: Above-base Mark Positioning
Registered by: Microsoft
Function: Positions marks above base glyphs.
Example: In complex scripts like Devanagari (Indic), the Anuswar needs to be positioned above the base glyph. This base glyph can be a base consonant or conjunct. The base glyph and the presence/absence of other marks above the base glyph decides the location of the Anuswar, so that they do not overlap each other.
Recommended implementation: The abvm table provides positioning information (x,y) to enable mark positioning (GPOS lookup type 4, 5).
Application interface: The application must define the GIDs of the base glyphs above which marks need to be positioned, and the marks themselves. If these are located in the coverage table, the application passes the sequence to the abvm table and gets the positioning values (x,y) or positioning adjustments for the mark in return.
UI suggestion: This feature should be on by default.
Script/language sensitivity: Required in Indic scripts.
Feature interaction: Can be used to position default marks; or those that have been selected from a number of alternates based on contextual requirement using a feature like abvs.
Tag: 'abvs'
Friendly name: Above-base Substitutions
Registered by: Microsoft
Function: Substitutes a ligature for a base glyph and mark that’s above it.
Example: In complex scripts like Kannada (Indic), the vowel sign for the vowel I which a mark, is positioned above base consonants. This mark combines with the consonant Ga to form a ligature.
Recommended implementation: Lookups for this feature map each sequence of consonant and vowel sign to the corresponding ligature in the font (GSUB lookup type 4).
Application interface: The application must define the GIDs of the base glyphs and the mark that combines with it to form a ligature. The application passes the sequence to the abvs table. If these are located in the coverage table, it gets the GID for the ligature in return.
UI suggestion: This feature should be on by default.
Script/language sensitivity: Required in Indic scripts.
Feature interaction: None.
Tag: 'afrc'
Friendly name: Alternative Fractions
Registered by: Microsoft
Function: Replaces figures separated by a slash with an alternative form.
Example: The user enters 3/4 in a recipe and get the threequarters nut fraction.
Recommended implementation: The afrc table maps sets of figures separated by slash (U+002F) or fraction (U+2044) characters to corresponding fraction glyphs in the font (GSUB lookup type 4).
Application interface: The application must define the full sequence of GIDs to be replaced. When the full sequence is found in the frac coverage table, the application passes the sequence to the afrc table and gets a new GID in return.
UI suggestion: This feature should be off by default.
Script/language sensitivity: None.
Feature interaction: This feature overrides the results of all other features.
Tag: 'akhn'
Friendly name: Akhand
Registered by: Microsoft
Function: Preferentially substitutes a sequence of characters with a ligature. This substitution is done irrespective of any characters that may precede or follow the sequence.
Example: In complex scripts like Devanagari (Indic), the sequence Ka, Halant, Ssa should always produce the ligature Kssa, irrespective of characters that precede/follow the above given sequence. The Kssa is identified in Devanagari as an Akhand character (meaning unbreakable).
Recommended implementation: This feature maps the sequences for generating Akhands defined in the given script, to the ligature they form (GSUB lookup type 4).
Application interface: The application passes the full sequence of GIDs. If these are located in the coverage table of the Akhand table, the application gets back the GID for the akhand ligature in return.
UI suggestion: This feature should be on by default.
Script/language sensitivity: Required in most Indic scripts.
Feature interaction: This feature overrides the results of all other features.
Tag: 'blwf'
Friendly name: Below-base Forms
Registered by: Microsoft
Function: Substitutes the below-base form of a consonant in conjuncts.
Example: In complex scripts like Oriya (Indic), the consonant Va has a below-base form that is used to generate conjuncts. Given a sequence Gha, Virama (Halant), Va; the below-base form of Va would be substituted to form the conjunct GhVa.
Recommended implementation: This feature substitutes the GID sequence of consonant followed by (virama) halant; by the GID of the below base form of the consonant (GSUB lookup type 4).
Application interface: In a conjunct formation sequence, if a consonant is identified as having a below base form, the application gets back the GID for this. The application may also choose to position this glyph if required, after this feature is called.
UI suggestion: This feature should be on by default.
Script/language sensitivity: Required in a number of Indic scripts.
Feature interaction: This feature overrides the results of all other features.
Tag: 'blwm'
Friendly name: Below-base Mark Positioning
Registered by: Microsoft
Function: Positions marks below base glyphs.
Example: In complex scripts like Gujarati (Indic), the vowel sign U needs to be positioned below base consonant/conjuncts that form the base glyph. This position can vary depending on the base glyph, as well as the presence/absence of other marks below the base glyph.
Recommended implementation: The blwm table provides positioning information (x,y) to enable mark positioning (GPOS lookup type 4, 5).
Application interface: The application must define the GIDs of the base glyphs below which marks need to be positioned, and the marks themselves. If these are located in the coverage table, the application passes the sequence to the blwm table and gets the positioning values (x,y) or positioning adjustments for the mark in return.
UI suggestion: This feature should be on by default.
Script/language sensitivity: Required in Indic scripts.
Feature interaction: Can be used to position default marks; or those that have been selected from a number of alternates based on contextual requirement using a feature like blws.
Tag: "blws"
Friendly name: Below-base Substitutions
Registered by: Microsoft
Function: Produces ligatures that comprise of base glyph and below-base forms.
Example: In the Malayalam script (Indic), the conjunct Kla, requires a ligature which is formed using the base glyph Ka and the below-base form of consonant La. This feature can also be used to substitute ligatures formed using base glyphs and below base matras in Indic scripts.
Recommended implementation: The blws table maps the identified conjunct forming sequences; or consonant vowel sign sequences; to their ligatures (GSUB lookup type 4).
Application interface: For GIDs found in the blws coverage table, the application passes the sequence of GIDs to the table, and gets back the GID for the ligature.
UI suggestion: This feature should be on by default.
Script/language sensitivity: Required in Indic scripts.
Feature interaction: This feature overrides the results of all other features.
Tag: 'calt'
Friendly name: Contextual Alternates
Registered by: Adobe
Function: In specified situations, replaces default glyphs with alternate forms which provide better joining behavior. Used in script typefaces which are designed to have some or all of their glyphs join.
Example: In Caflisch Script, o is replaced by o.alt2 when followed by an ascending letterform.
Recommended implementation: The calt table specifies the context in which each substitution occurs, and maps one or more default glyphs to replacement glyphs (GSUB lookup type 6).
Application interface: The application passes sequences of GIDs to the feature table, and gets back new GIDs. Note that full sequences must be passed.
UI suggestion: This feature should be active by default.
Script/language sensitivity: Not applicable to ideographic scripts.
Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override.
Tag: 'case'
Friendly name: Case-Sensitive Forms
Registered by: Adobe
Function: Shifts various punctuation marks up to a position that works better with all-capital sequences or sets of lining figures; also changes oldstyle figures to lining figures. By default, glyphs in a text face are designed to work with lowercase characters. Some characters should be shifted vertically to fit the higher visual center of all-capital or lining text. Also, lining figures are the same height (or close to it) as capitals, and fit much better with all-capital text.
Example: The user selects a block of text and applies this feature. The dashes, bracketing characters, guillemet quotes and the like shift up to match the capitals, and oldstyle figures change to lining figures.
Recommended implementation: The font may implement this change by substituting different glyphs (GSUB lookup type 1) or by repositioning the original glyphs (GPOS lookup type 1).
Application interface: The application queries whether specific GIDs are found in the coverage table for the case feature. If so, it passes these IDs to the table and gets back either new GIDs or positional adjustments (XPlacement and YPlacement).
UI suggestion: It would be good to apply this feature (or turn it off) by default when the user changes case on a sequence of more than one character. Applications could also detect words consisting only of capitals, and apply this feature based on user preference settings.
Script/language sensitivity: Applies only to European scripts; particularly prominent in Spanish-language setting.
Feature interaction: This feature overrides the results of other features affecting the figures (e.g. onum and tnum).
Tag: "ccmp"
Friendly name: Glyph Composition/Decomposition
Registered by: Microsoft
Function: To minimize the number of glyph alternates, it is sometimes desired to decompose a character into two glyphs. Additionally, it may be preferable to compose two characters into a single glyph for better glyph processing. This feature permits such composition/decompostion. The feature should be processed as the first feature processed, and should be processed only when it is called.
Example: In Syriac, the character 0x0732 is a combining mark that has a dot above AND a dot below the base character. To avoid multiple glyph variants to fit all base glyphs, the character is decomposed into two glyphs...a dot above and a dot below. These two glyphs can then be correctly placed using GPOS. In Arabic it might be preferred to combine the shadda with fatha (0x0651, 0x064E) into a ligature before processing shapes. This allows the font vendor to do special handling of the mark combination when doing further processing without requiring larger contextual rules.
Recommended implementation: The ccmp table maps the character sequence to its corresponding ligature (GSUB lookup type 4) or string of glyphs (GSUB lookup type 2). When using GSUB lookup type 4, sequences that are made up of larger number of glyphs must be placed before those that require fewer glyphs.
Application interface: For GIDs found in the ccmp coverage table, the application passes the sequence of GIDs to the table, and gets back the GID for the ligature, or GIDs for the multiple substitution.
UI suggestion: This feature should be on by default.
Script/language sensitivity: None.
Feature interaction: This feature needs to be implemented prior to any other feature.
Tag: 'clig'
Friendly name: Contextual Ligatures
Registered by: Adobe
Function: Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. Unlike other ligature features, clig specifies the context in which the ligature is recommended. This capability is important in some script designs and for swash ligatures.
Example: The glyph for ft replaces the sequence f t in Bickham Script, except when preceded by an ascending letter.
Recommended implementation: The clig table maps sequences of glyphs to corresponding ligatures in a chained context (GSUB lookup type 8). Ligatures with more components must be stored ahead of those with fewer components in order to be found. The set of contextual ligatures will vary by design and script.
Application interface: For sets of GIDs found in the clig coverage table, the application passes the sequence of GIDs to the table and gets back a single new GID. Note that full sequences must be passed. Note: This may include a change of character code. Besides the original character code, the application should store the code for the new character.
UI suggestion: This feature should be active by default.
Script/language sensitivity: Applies to virtually all scripts.
Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. See also dlig.
Tag: 'cpsp'
Friendly name: Capital Spacing
Registered by: Adobe
Function: Globally adjusts inter-glyph spacing for all-capital text. Most typefaces contain capitals and lowercase characters, and the capitals are positioned to work with the lowercase. When capitals are used for words, they need more space between them for legibility and esthetics. This feature would not apply to monospaced designs. Of course the user may want to override this behavior in order to do more pronounced letterspacing for esthetic reasons.
Example: The user sets a title in all caps, and the Capital Spacing feature opens the spacing.
Recommended implementation: The cpsp table stores alternate advance widths for the capital letters covered, generally increasing them by a uniform percentage (GPOS lookup type 1).
Application interface: For GIDs found in the cpsp coverage table, the application passes a sequence of GIDs to the cpsp table and gets back a set of XPlacement and XAdvance adjustments. The application may rely on the user to apply this feature (e.g., by selecting text for a change to all-caps) or apply its own heuristics for recognizing words consisting of capitals.
UI suggestion: This feature should be on by default. Applications may want to allow the user to respecify the percentage to fit individual tastes and functions.
Script/language sensitivity: Should not be used in connecting scripts (e.g. most Arabic).
Feature interaction: May be used in addition to any other feature (note specifically that this feature is additive with other GPOS features like kern).
Tag: 'cswh'
Friendly name: Contextual Swash
Registered by: Adobe
Function: This feature replaces default character glyphs with corresponding swash glyphs in a specified context. Note that there may be more than one swash alternate for a given character.
Example: The user sets the word "HOLIDAY" in Poetica with this feature active, and is presented with a choice of three alternate forms appropriate for an initial H and one alternate appropriate for a medial L.
Recommended implementation: The cswh table maps GIDs for default forms to those for one or more corresponding swash forms in a chained context, which may require a selection from a set (GSUB lookup type 8). If several styles of swash are present across the font, the set of forms for each character should be ordered consistently.
Application interface: For GIDs found in the cswh coverage table, the application passes the GIDs to the swsh table and gets back one or more new GIDs. If more than one GID is returned, the application must provide a means for the user to select the one desired.
UI suggestion: This feature should be inactive by default. When more than one GID is returned, an application could display the forms sequentially in context, or present a palette showing all the forms at once, or give the user a choice between these approaches. The application may assume that the first glyph in a set is the preferred form, so the font developer should order them accordingly.
Script/language sensitivity: Does not apply to ideographic scripts.
Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. See also swsh and init.
Tag: "curs"
Friendly name: Cursive Positioning
Registered by: Microsoft
Function: In cursive scripts like Arabic, this feature cursively positions adjacent glyphs.
Example: In Arabic, the Meem followed by a Reh are cursively positioned by overlapping the exit point of the Meem on the entry point of the Reh.
Recommended implementation: The curs table provides entry and exit points (x,y) for glyphs to be cursively positioned (GPOS lookup type 3).
Application interface: For GIDs located in the coverage table, the application gets back positioning point locations for the preceding and following glyphs.
UI suggestion: This feature could be made active or inactive by default, at the user’s preference.
Script/language sensitivity: Can be used in any cursive script.
Feature interaction: None.
Tag:'c2pc'
Friendly name: Petite Capitals From Capitals
Registered by: Tiro Typeworks / Emigre
Function: This feature turns capital characters into petite capitals. It is generally used for words which would otherwise be set in all caps, such as acronyms, but which are desired in petite-cap form to avoid disrupting the flow of text. See the pcap feature description for notes on the relationship of caps, smallcaps and petite caps.
Example: The user types UNICEF or NASA, applies c2pc and gets petite cap text.
Recommended implementation: The c2pc table maps capital glyphs to the corresponding petite cap forms (GSUB lookup type 1).
Application interface: For GIDs found in the c2pc coverage table, the application passes GIDs to the c2pc table, and gets back new GIDs.
UI suggestion: This feature should be off by default.
Script/language sensitivity: Applies only to scripts with both upper- and lowercase forms (e.g. Latin, Cyrillic, Greek).
Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. Also see pcap.
Tag: 'c2sc'
Friendly name: Small Capitals From Capitals
Registered by: Adobe
Function: This feature turns capital characters into small capitals. It is generally used for words which would otherwise be set in all caps, such as acronyms, but which are desired in small-cap form to avoid disrupting the flow of text.
Example: The user types UNICEF or SCUBA, applies c2sc and gets small cap text.
Recommended implementation: The c2sc table maps capital glyphs to the corresponding small-cap forms (GSUB lookup type 1).
Application interface: For GIDs found in the c2sc coverage table, the application passes GIDs to the c2sc table, and gets back new GIDs.
UI suggestion: This feature should be off by default.
Script/language sensitivity: Applies only to European scripts (Cyrillic, Greek & Latin), which have capital forms.
Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. Also see smcp.
Tag: "dist"
Friendly name: Distances
Registered by: Microsoft
Function: Provides a means to control distance between glyphs.
Example: In the Devanagari (Indic) script, the distance between the vowel sign U and a consonant can be adjusted using this.
Recommended implementation: The dist table provides distances by which a glyph needs to move towards or away from another glyph (GPOS lookup type 2).
Application interface: For GIDs found in the dist coverage table, the application passes their GID to the table and gets back the distance that needs to be maintained between them.
UI suggestion: This feature could be made active or inactive by default, at the user’s preference.
Script/language sensitivity: Required in Indic scripts.
Feature interaction: None.
Tag: 'dlig'
Friendly name: Discretionary Ligatures
Registered by: Adobe
Function: Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers those ligatures which may be used for special effect, at the user’s preference.
Example: The glyph for ct replaces the sequence of glyphs c t, or U+322E (Kanji ligature for "Friday") replaces the sequence U+91D1 U+66DC U+65E5.
Recommended implementation: The dlig table maps sequences of glyphs to corresponding ligatures (GSUB lookup type 4). Ligatures with more components must be stored ahead of those with fewer components in order to be found. The set of discretionary ligatures will vary by design and script.
Application interface: For sets of GIDs found in the dlig coverage table, the application passes the sequence of GIDs to the table and gets back a single new GID. Note that full sequences must be passed. This may include a change of character code. Besides the original character code, the application should store the code for the new character.
UI suggestion: This feature should be off by default.
Script/language sensitivity: Applies to virtually all scripts.
Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. See also clig.
Tag: 'dnom'
Friendly name: Denominators
Registered by: Adobe
Function: Replaces selected figures which follow a slash with denominator figures.
Example: In the string 11/17 selected by the user, the application turns the 17 into denominators when the user applies the fraction feature (frac).
Recommended implementation: The dnom table maps sets of figures and related characters to corresponding numerator glyphs in the font (GSUB lookup type 1).
Application interface: For GIDs found in the dnom coverage table, the application passes a GID to the table and gets back a new GID.
UI suggestion: This feature should normally be called by an application when the user applies the frac feature.
Script/language sensitivity: None.
Feature interaction: This feature supports frac. It may be used in combination with other substitution (GSUB) features, whose results it may override.
Tag: 'expt'
Friendly name: Expert Forms
Registered by: Adobe
Function: Like the JIS78 Forms described above, this feature replaces standard forms in Japanese fonts with corresponding forms preferred by typographers. Although most of the JIS78 substitutions are included, the expert substitution goes on to handle many more characters.
Example: The user would invoke this feature to replace kanji character U+5516 with U+555E.
Recommended implementation: The expt table maps many default (JIS90) GIDs to corresponding alternates (GSUB lookup type 1).
Application interface: For GIDs found in the expt coverage table, the application passes the GIDs to the table and gets back one new GID for each. Note: This is a change of character code. Besides the original character code, the application should store the code for the new character.
UI suggestion: Applications may choose to have this feature active or inactive by default, depending on their target markets.
Script/language sensitivity: Applies only to Japanese.
Feature interaction: This feature is mutually exclusive with all other features, which should be turned off when it’s applied, except thepalt, vpal, vert and vrt2 features, which may be used in addition.