Registered features - definitions and implementations (k – o) (OpenType 1.8.2)
a - e | f - j | k - o | p - t | u - z
Tag: 'kern'
Friendly name: Kerning
Registered by: Microsoft/Adobe
Function: Adjusts amount of space between glyphs, generally to provide optically consistent spacing between glyphs. Although a well-designed typeface has consistent inter-glyph spacing overall, some glyph combinations require adjustment for improved legibility. Besides standard adjustment in the horizontal direction, this feature can supply size-dependent kerning data via device tables, “cross-stream” kerning in the Y text direction, and adjustment of glyph placement independent of the advance adjustment. Note that this feature may apply to runs of more than two glyphs, and would not be used in monospaced fonts. Also note that this feature does not apply to text set vertically.
Example: The o is shifted closer to the T in the combination “To.”
Recommended implementation: The font stores a set of adjustments for pairs of glyphs (GPOS lookup type 2 or 8). These may be stored as one or more tables matching left and right classes, &/or as individual pairs. Additional adjustments may be provided for larger sets of glyphs (e.g. triplets, quadruplets, etc.) to overwrite the results of pair kerns in particular combinations.
Application interface: The application passes a sequence of GIDs to the kern table, and gets back adjusted positions (XPlacement, XAdvance, YPlacement and YAdvance) for those GIDs. When using the type 2 lookup on a run of glyphs, it’s critical to remember to not consume the last glyph, but to keep it available as the first glyph in a subsequent run (this is a departure from normal lookup behavior).
UI suggestion: This feature should be active by default for horizontal text setting. Applications may wish to allow users to add further manually-specified adjustments to suit specific needs and tastes.
Script/language sensitivity: None.
Feature interaction: If kern is activated, palt must also be activated if it exists. If palt is activated, there is no requirement that kern must also be activated. May be used in addition to any other feature except those which result in fixed (uniform) advance widths (e.g. fwid, halt, hwid, qwid and twid).
Tag: 'lfbd'
Friendly name: Left Bounds
Registered by: Adobe
Function: Aligns glyphs by their apparent left extents at the left ends of horizontal lines of text, replacing the default behavior of aligning glyphs by their origins. This feature is called by the Optical Bounds ( opbd) feature above.
Example: Succeeding lines beginning with T, D and W would shift to the left by varying amounts when the text is left-justified and this feature is applied.
Recommended implementation: Values for affected glyphs describe the amount by which the placement and advance width should be altered (GPOS lookup type 1).
Application interface: For GIDs found in the lfbd coverage table, the application passes a GID to the table and gets back a new XPlacement and XAdvance value.
UI suggestion: This feature is called by an application when the user invokes the opbd feature.
Script/language sensitivity: None.
Feature interaction: Should not be applied to glyphs which use fixed-width features (e.g. fwid, halt, hwid, qwid and twid) or vertical features (e.g. vert, vrt2, vpal, valt and vhal). Is called by the opbd feature.
Tag: 'liga'
Friendly name: Standard Ligatures
Registered by: Microsoft/Adobe
Function: Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers the ligatures which the designer/manufacturer judges should be used in normal conditions.
Example: The glyph for ffl replaces the sequence of glyphs f f l.
Recommended implementation: The liga 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 standard ligatures will vary by design and script.
Application interface: For sets of GIDs found in the liga 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.
UI suggestion: This feature serves a critical function in some contexts, and 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.
Tag: “ljmo”
Friendly name: Leading Jamo Forms
Registered by: Microsoft
Function: Substitutes the leading jamo form of a cluster.
Example: In Hangul script, the jamo cluster is composed of three parts (leading consonant, vowel, and trailing consonant). When a sequence of leading class jamos are found, their combined leading jamo form is substituted.
Recommended implementation: The ljmo table maps the sequence required to convert a series of jamos into its leading jamo form (GSUB lookup type 4).
Application interface: For substitutions defined in the ljmo table, the application passes the sequence of GIDs to the feature, and gets back the GID for the leading jamo form.
UI suggestion: This feature should be on by default.
Script/language sensitivity: Required for Hangul script when Ancient Hangul writing system is supported.
Feature interaction: This feature overrides the results of all other features.
Tag: 'lnum'
Friendly name: Lining Figures
Registered by: Adobe (Modified by Adobe, this is the newer description)
Function: This feature changes selected non-lining figures to lining figures.
Example: The user invokes this feature in order to get lining figures, which fit better with all-capital text. Various characters designed to be used with figures may also be covered by this feature. In cases where lining figures are the default form, this feature would undo previous substitutions.
Recommended implementation: The lnum table maps each oldstyle figure, and any associated characters to the corresponding lining form (GSUB lookup type 1). If the default figures are non-lining, they too are mapped to the corresponding lining form.
Application interface: For GIDs found in the lnum coverage table, the application passes a GID to the lnum table and gets back a new GID. Even if the current figures resulted from an earlier substitution, it may not be correct to simply revert to the original GIDs, because of interaction with the figure width features, so it’s best to use this table.
UI suggestion: This feature should be inactive by default. Users can switch between the lining and oldstyle sets by turning this feature on or off. Note that this feature is distinct from the figure width features (pnum and tnum). When the user invokes this feature, the application may wish to inquire whether a change in width is also desired.
Script/language sensitivity: None.
Feature interaction: This feature overrides the results of the Oldstyle Figures feature ( onum).
Tag: 'locl'
Friendly name: Localized Forms
Registered by: Tiro Typeworks/Adobe
Function: Many scripts used to write multiple languages over wide geographical areas have developed localized variant forms of specific letters, which are used by individual literary communities. For example, a number of letters in the Bulgarian and Serbian alphabets have forms distinct from their Russian counterparts and from each other. In some cases the localized form differs only subtly from the script 'norm', in others the forms are radically distinct. This feature enables localized forms of glyphs to be substituted for default forms.
Example: The user applies this feature to text to enable localized Bulgarian forms of Cyrillic letters; alternatively, the feature might enable localized Russian forms in a Bulgarian manufactured font in which the Bulgarian forms are the default characters.
Recommended implementation: For a given Unicode value, the font contains glyphs for two or more locales. The locl table maps GIDs for default forms to GIDs for corresponding localized alternatives. These are one-to-one substitutions (GSUB lookup type 1).
Application interface: Localized forms are associated with specific languages and are activated by language tags. Which glyph is used as the localized form should be determined by the language the user has specified. The user can switch localized forms by selecting a new language, or may enable default forms by switching off the locl feature.
UI suggestion: This feature should be active by default.
Script/language sensitivity: Applies to all scripts and languages; but of course behavior differs by script and language.
Feature interaction: This feature can be used in combination with any other feature. It replaces and extends the earlier locale-specific tags zhcn, zhtw, jajp, kokr and vivn which had been defined for CJKV scripts.
Tag: 'ltra'
Friendly name: Left-to-right glyph alternates
Registered by: Adobe
Function: This feature applies glyphic variants (other than mirrored forms) appropriate for left-to-right text (for mirrored forms, see ltrm).
Recommended implementation: These are required to be glyph substitutions, and it is recommended that they be one-to-one (GSUB lookup type 1).
Application interface: See section “Left-to-right and right-to-left text” on the Advanced Typographic Extensions page.
UI suggestion: None
Script/language sensitivity: Left-to-right runs of text.
Feature interaction: This feature is to be applied simultaneously with other pre-shaping features such as 'ccmp' and 'locl'.
Tag: 'ltrm'
Friendly name: Left-to-right mirrored forms
Registered by: Adobe
Function: This feature applies mirrored forms appropriate for left-to-right text. (For left-to-right glyph alternates, see ltra).
Example: The Old South Arabian script is a case of a strong right-to-left script that can have lines laid out left-to-right, in which case some glyphs would need to be mirrored with the 'ltrm' feature.
Recommended implementation: These are required to be glyph substitutions, and it is recommended that they be one-to-one (GSUB lookup type 1).
Application interface: See section “Left-to-right and right-to-left text” on the Advanced Typographic Extensions page.
UI suggestion: None
Script/language sensitivity: Left-to-right runs of text; also see Example above.
Feature interaction: This feature is to be applied simultaneously with other pre-shaping features such as 'ccmp' and 'locl'.
Tag: 'mark'
Friendly name: Mark Positioning
Registered by: Microsoft
Function: Positions mark glyphs with respect to base glyphs.
Example: In the Arabic script, positioning the Hamza above the Yeh.
Recommended implementation: This feature may be implemented as a MarkToBase Attachment lookup (GPOS LookupType = 4) or a MarkToLigature Attachment lookup (GPOS LookupType = 5).
Application interface: For GIDs found in the mark coverage table, the application gets back the positioning or position adjustment values for the mark glyph. Script/language sensitivity: None.
Feature interaction: None.
Tag: “med2”
Friendly name: Medial Forms #2
Registered by: Microsoft
Function: Replaces Alaph glyphs in the middle of Syriac words when the preceding base character cannot be joined to.
Example: When an Alaph is preceded by a Waw, the Alaph would be replaced by an appropriate form.
This feature is used only for the Syriac script alaph character.
Recommended implementation: The med2 table maps default alphabetic forms to corresponding medial forms (GSUB lookup type 5).
Application interface: The application is responsible for noting word boundaries. For GIDs in the middle of words and found in the med2 coverage table, the application passes a GID to the feature and gets back a new GID.
UI suggestion: This feature should be on by default.
Script/language sensitivity: Used only with the Syriac script.
Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. See also init and fina.
Tag: 'medi'
Note: This feature description was significantly revised in 2016.
Friendly name: Medial Forms
Registered by: Microsoft/Adobe
Function: Replaces glyphs for characters that have applicable joining properties with an alternate form when occurring in a medial context. This applies to characters that have the Unicode Joining_Type property value Dual_Joining.
Unicode Joining_Type property values are obtained from the Unicode Character Database (UCD). Specifically, Joining_Type property values are documented in the UCD file, ArabicShaping.txt, the current version of which is available at http://www.unicode.org/Public/UCD/latest/ucd/ArabicShaping.txt.
Example: In an Arabic-script font, the application would apply the 'medi' feature to the letter ARABIC LETTER QAF (U+0642 “ق”) when it follows a left-joining character and precedes a right-joining character, thereby replacing the default “ق” glyph with its dual-joining, medial form.
Recommended implementation: The 'medi' feature is used to map default forms to corresponding dual-joining, medial forms. This will usually be implemented using a single substitution (type 1) GSUB lookup, though contextual substitution GSUB lookups (types 5, 6 or 8) may also be appropriate.
Application interface: The application is responsible for parsing character strings and identifying which of the joining-related features — initial forms ('init'), medial forms ('medi'), terminal forms ('fina'), and isolated forms ('isol') — to apply to which GIDs, based on character Joining_Type properties. Additional factors, such as the presence of control characters, may also be considered. For GIDs to which the 'medi' feature is applied and that are found in the 'medi' coverage table, the application passes a GID to the lookup tables associated with the feature and gets back a new GID.
UI suggestion: In recommended usage, this feature triggers substitutions that are required for correct display of the given script. It should be applied by default in the appropriate contexts, as determined by script-specific processing. Control of the feature should not generally be exposed to the user.
Script/language sensitivity: Can be used in any script with joining behavior — that is, the scripts for which Joining_Type properties are given explicitly in ArabicShaping.txt.
Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. See also 'fina', 'init' and 'isol'.
Tag: 'mgrk'
Friendly name: Mathematical Greek
Registered by: Adobe
Function: Replaces standard typographic forms of Greek glyphs with corresponding forms commonly used in mathematical notation (which are a subset of the Greek alphabet).
Example: The user applies this feature to U+03A3 (Sigma), and gets U+2211 (summation).
Recommended implementation: The mgrk table maps Greek glyphs to the corresponding forms used for mathematics (GSUB lookup type 1).
Application interface: For GIDs found in the mgrk coverage table, the application passes a GID to the feature table and gets back a new GID. Note: This is a change of semantic value. Besides the original character codes, the application should store the code for the new character.
UI suggestion: This feature should be off by default in most applications. Math-oriented applications may want to activate this feature by default.
Script/language sensitivity: Could apply to any font which includes coverage for the Greek script.
Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override.
Tag: “mkmk”
Friendly name: Mark to Mark Positioning
Registered by: Microsoft
Function: Positions marks with respect to other marks. Required in various non-Latin scripts like Arabic.
Example: In Arabic, the ligaturised mark Ha with Hamza above it; can also be obtained by positioning these marks relative to one another.
Recommended implementation: This feature may be implemented as a MarkToMark Attachment lookup (GPOS lookup type 6).
Application interface: The application gets back positioning values or positional adjustments for marks.
UI suggestion: This feature should be active by default.
Script/language sensitivity: None.
Feature interaction: None.
Tag: 'mset'
Registered by: Microsoft
Function: Positions Arabic combining marks in fonts for Windows 95 using glyph substitution
Example: In Arabic, the Hamza is positioned differently when placed above a Yeh Barree as compared to the Alef.
Windows 95 implementation: In contrast to the “mark” feature, “mset” uses glyph substitution to combine marks and base glyphs. It replaces a default mark glyph with a correctly positioned mark glyph. The font designer specifies the position of the mark when describing the mark’s contour in the font file. Microsoft’s Arabic fonts, created for Windows 95, use a contextual substitution lookup (GSUB LookupType = 5) to implement the “mset” feature.
Tag: 'nalt'
Friendly name: Alternate Annotation Forms
Registered by: Adobe
Function: Replaces default glyphs with various notational forms (e.g. glyphs placed in open or solid circles, squares, parentheses, diamonds or rounded boxes). In some cases an annotation form may already be present, but the user may want a different one.
Example: The user invokes this feature to get U+3200 (the circled form of ‘ga’) from U+3131 (hangul ‘ga’).
Recommended implementation: The nalt table maps GIDs for various standard forms to one or more corresponding annotation forms. 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. If more than one form is present, the set of forms for each character should be ordered consistently - both within the font and across the family.
Application interface: For GIDs found in the nalt coverage table, the application passes a GID and gets back a set of new GIDs, then stores the one selected by the user.
UI suggestion: This feature should be inactive by default. The application must provide a means for the user to select the desired form from the set returned by the table. It can note the position of the selected form in a set of alternates, and offer the glyph at that position as the default selection the next time this feature is invoked. In the absence of such prior information, 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: Used mostly in CJKV fonts, but can apply to European scripts.
Feature interaction: This feature is mutually exclusive with all other features, which should be turned off when it’s applied, except the vert and vrt2 features, which may be used in addition.
Tag: “nlck”
Friendly name: NLC Kanji Forms
Registered by: Adobe Systems Inc.
Function: The National Language Council (NLC) of Japan has defined new glyph shapes for a number of JIS characters in 2000. The 'nlck' feature is used to access those glyphs.
Example: The glyph is replaced by the glyph .
Recommended implementation: One-for-one substitution of non-NLC glyphs by the corresponding NLC glyph.
UI suggestion: This feature should be off by default.
Script/language sensitivity: Used only with Kanji script.
Feature interaction: This feature is exclusive with the 'jp78', 'jp83', 'jp90' and similar features. It can be combined with the 'palt', 'vpal', 'vert' and 'vrt2' features.
Tag: “nukt”
Friendly name: Nukta Forms
Registered by: Microsoft
Function: Produces Nukta forms in Indic scripts.
Example: In Hindi (Devanagari script), a consonant when combined with a nukta gives its nukta form.
Recommended implementation: The nukt table maps the sequence of a consonant followed by a nukta to the consonant’s nukta form (GSUB lookup type 4).
Application interface: The application passes the sequence of GIDs (consonant and nukta), to the table, and gets back the GID for the nukta form.
UI suggestion: In recommended usage, this feature triggers substitutions that are required for correct display of the given script. It should be applied in the appropriate contexts, as determined by script-specific processing. Control of the feature should not generally be exposed to the user.
Script/language sensitivity: Required in Indic scripts.
Feature interaction: This feature is used in conjunction with certain other features to derive required forms of Indic scripts. The application is expected to process this feature and certain other features in an appropriate order to obtain the correct set of basic forms: nukt, akhn, rphf, rkrf, pref, blwf, half, pstf, cjct. Other discretionary features for optional typographic effects may also be applied. Lookups for such discretionary features should be processed after lookups for this feature have been processed.
Tag: 'numr'
Friendly name: Numerators
Registered by: Adobe
Function: Replaces selected figures which precede a slash with numerator figures, and replaces the typographic slash with the fraction slash.
Example: In the string 11/17 selected by the user, the application turns the 11 into numerators, and the slash into a fraction slash when the user applies the fraction feature (frac).
Recommended implementation: The numr table maps sets of figures and related characters to corresponding numerator glyphs in the font. It also maps the typographic slash (U+002F) to the fraction slash (U+2044). All mappings are one-to-one (GSUB lookup type 1).
Application interface: For GIDs found in the numr 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: 'onum'
Friendly name: Oldstyle Figures
Registered by: Microsoft/Adobe
Function: This feature changes selected figures from the default or lining style to oldstyle form.
Example: The user invokes this feature to get oldstyle figures, which fit better into the flow of normal upper- and lowercase text. Various characters designed to be used with figures may also have oldstyle versions.
Recommended implementation: The onum table maps each lining figure, and any associated characters to the corresponding oldstyle form (GSUB lookup type 1). If the default figures are non-lining, they too are mapped to the corresponding oldstyle form.
Application interface: For GIDs found in the onum coverage table, the application passes a GID to the onum table and gets back a new GID.
UI suggestion: This feature should be inactive by default. Users can switch between the default and oldstyle figure sets by turning this feature on or off. Note: This feature is separate from the figure-width features pnum and tnum. When the user changes figure style, the application may want to query whether a change in width is also desired.
Script/language sensitivity: None.
Feature interaction: This feature overrides the results of the Lining Figures feature (lnum).
Tag: 'opbd'
Friendly name: Optical Bounds
Registered by: Adobe (Modified by Adobe, this is the newer description)
Function: Aligns glyphs by their apparent left or right extents in horizontal setting, or apparent top or bottom extents in vertical setting, replacing the default behavior of aligning glyphs by their origins. Another name for this behavior would be visual justification. The optical edge of a given glyph is only indirectly related to its advance width or bounding box; this feature provides a means for getting true visual alignment.
Example: Succeeding lines beginning with T, D and W would shift to the left by varying amounts when the text is left-justified and this feature is applied. Succeeding lines ending with r, h and y would likewise shift to the right by differing degrees when the text is right-justified and this feature is applied.
Recommended implementation: Values for affected glyphs are defined with a separate record for left, right, top, and bottom. Each record describes the amount by which the placement and advance width should be altered (GPOS lookup type 1).
Application interface: For GIDs found in the opbd coverage table, the application calls one of two related tables, depending on the position of the glyph. For glyphs at the left end of a horizontal line, it calls the lfbd table, for glyphs at the right end of a horizontal line, it calls the rtbd table.
UI suggestion: This feature should be active by default. It effectively changes the line length, so justification algorithms should account for this adjustment.
Script/language sensitivity: None.
Feature interaction: Should not be applied to glyphs which use fixed-width features (e.g. fwid, halt, hwid, qwid and twid) or vertical features (e.g. vert, vrt2, vpal, valt and vhal). Uses lfbd and rtbd features.
Tag: 'ordn'
Friendly name: Ordinals
Registered by: Adobe
Function: Replaces default alphabetic glyphs with the corresponding ordinal forms for use after figures. One exception to the follows-a-figure rule is the numero character (U+2116), which is actually a ligature substitution, but is best accessed through this feature.
Example: The user applies this feature to turn 2.o into 2.o (abbreviation for secundo).
Recommended implementation: The ordn table maps various lowercase letters to corresponding ordinal forms in a chained context (GSUB lookup type 6), and the sequence No to the numero character (GSUB lookup type 4).
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 new GIDs. Note that full sequences must be passed. Note: This may be a change of semantic value. Besides the original character codes, the application should store the code for the new character.
UI suggestion: This feature should be off by default.
Script/language sensitivity: Applies mostly to Latin script.
Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override.
Tag: 'ornm'
Friendly name: Ornaments
Registered by: Adobe
Function: This is a dual-function feature, which uses two input methods to give the user access to ornament glyphs (e.g. fleurons, dingbats and border elements) in the font. One method replaces the bullet character with a selection from the full set of available ornaments; the other replaces specific “lower ASCII” characters with ornaments assigned to them. The first approach supports the general or browsing user; the second supports the power user.
Example: The user inputs qwwwwwwwwwe to form the top of a flourished box in Adobe Caslon, or inputs the bullet character, then chooses the thistle dingbat.
Recommended implementation: The ornm table maps all ornaments in a font to the bullet character (GSUB lookup type 3) and each ornament in a font to a corresponding alphanumeric character (GUSB lookup type 1). 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.
Application interface: When this feature is invoked, the application must note whether the selected text is the bullet character (U+2022) or alphanumeric characters. In the first case, it passes the GID for bullet to the ornm table and gets back a set of GIDs, and gives the user a means to select from among them. In the second case, for GIDs found in the ornm coverage table, it passes GIDs to the ornm table and gets back new GIDs.
UI suggestion: This feature should be inactive by default. When more than one GID is returned (the bullet case), 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. Once the user has selected a specific ornament, that one should be the default selection the next time the bullet is typed. In the absence of such prior information, the application may assume that the first ornament in a set is the preferred form, so the font developer should order them accordingly.
Script/language sensitivity: None.
Feature interaction: This feature is mutually exclusive with all other substitution (GSUB) features, which should be turned off when it’s applied.
OpenType specification