![]() |
![]() |
![]() |
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Microsoft Typography | Developer information | Specifications | Feature Tags | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Feature Tags
The registered features listed below are organized by function in the first table, and alphabetically in the second table. The descriptions which follow the tables are also arranged alphabetically.
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. 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. 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. 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. 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. 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. 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. 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.
Friendly name: Connection Forms 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. 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). 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.
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.
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). 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. 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.
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. 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.
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. 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. 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 the palt, vpal, vert and vrt2 features, which may be used in addition. Friendly name: Final Glyph on Line Alternates Registered by: Microsoft Function: Replaces line final glyphs with alternate forms specifically designed for this purpose (they would have less or more advance width as need may be), to help justification of text. Example: In the Arabic script, providing alternate forms for line final glyphs would result in better justification. eg. replacing a long tailed Yeh-with-tail with one that has a slightly longer/shorter tail. Recommended implementation: The falt table maps line final glyphs (in isolated or final forms) to their corresponding alternate forms (GSUB lookup type 3). Application interface: For GIDs found in the falt coverage table, the application passes a GID to the table and gets back a new GID. 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: Would need to be applied last, only after all other features have been applied to the run.
Friendly name: Terminal Form #2 Registered by: Microsoft Function: Replaces the Alaph glyph at the end of Syriac words with its appropriate form, when the preceding base character cannot be joined to, and that preceding base character is not a Dalath, Rish, or dotless Dalath-Rish.
Example: When an Alaph is preceded by a He, the Alaph would be replaced by an appropriate form. Recommended implementation: The fin2 table maps default alphabetic forms to corresponding final 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 fin2 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.
Friendly name: Terminal Form #3 Registered by: Microsoft Function: Replaces Alaph glyphs at the end of Syriac words when the preceding base character is a Dalath, Rish, or dotless Dalath-Rish.
Example: When an Alaph is preceded by a Dalath, the Alaph would be replaced by an appropriate form. Recommended implementation: The fin3 table maps default alphabetic forms to corresponding final 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 fin3 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.
Friendly name: Terminal Forms Registered by: Microsoft/Adobe Function: Replaces glyphs at the ends of words with alternate forms designed for this use. This is common in Latin connecting scripts, and required in various non-Latins like Arabic. Example: In the typeface Poetica, the default e in the word 'type' is replaced with the e.end form. Recommended implementation: The fina table maps default alphabetic forms to corresponding ending forms (GSUB lookup type 1). Application interface: The application is responsible for noting word boundaries. For GIDs at the ends of words and found in the fina coverage table, the application passes a GID to the feature and gets back a new GID. UI suggestion: This feature should be active by default. Script/language sensitivity: Can be used in any alphabetic script. Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. See also init and medi. Friendly name: Fractions Registered by: Microsoft/Adobe Function: Replaces figures separated by a slash with 'common' (diagonal) fractions. Example: The user enters 3/4 in a recipe and gets the threequarters fraction. Recommended implementation: The frac table maps sets of figures separated by slash or fraction characters to corresponding fraction glyphs in the font. These may be precomposed fractions (GSUB lookup type 4) or arbitrary fractions (GSUB lookup type 1). Application interface: The application must define the full sequence of GIDs to be replaced, based on user input (i.e. user selection determines the string's delimitation). When the full sequence is found in the frac coverage table, the application passes the sequence to the frac table and gets a new GID in return. When the frac table does not contain an exact match, the application performs two steps. First, it uses the numr feature (see below) to replace figures (as used in the numr coverage table) preceding the slash with numerators, and to replace the typographic slash character (U+002F) with the fraction slash character (U+2044). Second, it uses the dnom feature (see below) to replace all remaining figures (as listed in the dnom coverage table) with denominators. UI suggestion: This feature should be off by default. Script/language sensitivity: None. Feature interaction: This feature may require the application to call the numr and dnom features. It may be used in combination with other substitution (GSUB) features, whose results it may override. Friendly name: Full Widths Registered by: Adobe Function: Replaces glyphs set on other widths with glyphs set on full (usually em) widths. In a CJKV font, this may include "lower ASCII" Latin characters and various symbols. In a European font, this feature replaces proportionally-spaced glyphs with monospaced glyphs, which are generally set on widths of 0.6 em. Example: The user may invoke this feature in a Japanese font to get full monospaced Latin glyphs instead of the corresponding proportionally-spaced versions. Recommended implementation: The font may contain alternate glyphs designed to be set on full widths (GSUB lookup type 1), or it may specify alternate (full-width) metrics for the proportional glyphs (GPOS lookup type 1). Application interface: For GIDs found in the fwid coverage table, the application passes the GIDs to the table and gets back either new GIDs or positional adjustments (XPlacement and XAdvance). UI suggestion: This feature would normally be off by default. Script/language sensitivity: Applies to any script which can use monospaced forms. Feature interaction: This feature is mutually exclusive with all other glyph-width features (e.g. tnum, halt, hwid, palt, pwid, qwid and twid), which should be turned off when it's applied. It deactivates the kern feature. Friendly name: Half Forms Registered by: Microsoft Function: Produces the half forms of consonants in Indic scripts. Example: In Hindi (Devanagari script), the conjunct KKa, obtained by doubling the Ka, is denoted with a half form of Ka followed by the full form. Recommended implementation: The half table maps the sequence of a consonant followed by a virama (halant) to its half form (GSUB lookup type 4). Application interface: For substitution sequences defined in the half table [consonant followed by the virama (halant)], the application passes the sequence of GIDs to the table, and gets back the GID for the half form. UI suggestion: This feature should be on by default. Script/language sensitivity: Required in Indic scripts that show similarity to Devanagari. Feature interaction: This feature overrides the results of all other features, except akhn.
Friendly name: Halant Forms Registered by: Microsoft Function: Produces the halant forms of consonants in Indic scripts. Example: In Sanskrit (Devanagari script), syllable final consonants are frequently required in their halant form. Recommended implementation: The haln table maps the sequence of a consonant followed by a virama (halant) to its halant form (GSUB lookup type 4). Application interface: For substitutions defined in the halant table, the application passes the sequence of GIDs to the feature (essentially the consonant and virama), and gets back the GID for the halant form. 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.
Friendly name: Alternate Half Widths Registered by: Adobe Function: Respaces glyphs designed to be set on full-em widths, fitting them onto half-em widths. This differs from hwid in that it does not substitute new glyphs. Example: The user may invoke this feature in a CJKV font to get better fit for punctuation or symbol glyphs without disrupting the monospaced alignment. Recommended implementation: The font specifies alternate metrics for the full-width glyphs (GPOS lookup type 1). Application interface: For GIDs found in the halt coverage table, the application passes the GIDs to the table and gets back positional adjustments (XPlacement, XAdvance, YPlacement and YAdvance). UI suggestion: This feature would be off by default. Script/language sensitivity: Used only in CJKV fonts. Feature interaction: This feature is mutually exclusive with all other glyph-width features (e.g. tnum, fwid, hwid, palt, twid), which should be turned off when it's applied. It deactivates the kern feature. See also vhal. Friendly name: Historical Forms Registered by: Microsoft/Adobe Function: Some letterforms were in common use in the past, but appear anachronistic today. The best-known example is the long form of s; others would include the old Fraktur k. Some fonts include the historical forms as alternates, so they can be used for a 'period' effect. This feature replaces the default (current) forms with the historical alternates. While some ligatures are also used for historical effect, this feature deals only with single characters. Example: The user applies this feature in Adobe Jenson to get the archaic forms of M, Q and Z. Recommended implementation: The hist table maps default forms to corresponding historical forms (GSUB lookup type 1). Application interface: For GIDs found in the hist coverage table, the application passes the GIDs to the hist table and gets back new GIDs. UI suggestion: This feature should be off by default. Script/language sensitivity: None. Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. Friendly name: Horizontal Kana Alternates Registered by: Adobe Function: Replaces standard kana with forms that have been specially designed for only horizontal writing. This is a typographic optimization for improved fit and more even color. Also see vkna. Example: Standard full-width kana (hiragana and katakana) are replaced by forms that are designed for horizontal use. Recommended implementation: The font includes a set of specially-designed glyphs, listed in the hkna coverage table. The hkna feature maps the standard full-width forms to the corresponding special horizontal forms (GSUB lookup type 1). Application interface: For GIDs found in the hkna coverage table, the application passes GIDs to the feature, and gets back new GIDs. UI suggestion:This feature would be off by default. Script/language sensitivity: Applies only to fonts that support kana (hiragana and katakana). Feature interaction: This feature may be used with the kern feature. Since it is for horizontal use, features applying to vertical behaviors (e.g. vkna, vert, vrt2 or vkrn) do not apply.
Friendly name: Historical Ligatures Registered by: Microsoft Function: Some ligatures were in common use in the past, but appear anachronistic today. Some fonts include the historical forms as alternates, so they can be used for a 'period' effect. This feature replaces the default (current) forms with the historical alternates. Example: The user applies this feature using Palatino Linotype, and historic ligatures are formed for all long s forms, including: long s+t, long s+b, long s+h, long s+k, and several others. Recommended implementation: The hlig table maps default ligatures and character combinations to corresponding historical ligatures (GSUB lookup type 1). Application interface: For GIDs found in the hlig coverage table, the application passes the GIDs to the hlig table and gets back new GIDs. UI suggestion: This feature should be off by default. Script/language sensitivity: None. Feature interaction: This feature overrides the results of all other features. Friendly name: Hangul Registered by: Adobe Function: Replaces hanja (Chinese-style) Korean characters with the corresponding hangul (syllabic) characters. This effectively reverses the standard input method, in which hangul are entered and replaced by hanja. Many of these substitutions are one-to-one (GSUB lookup type 1), but hanja substitution often requires the user to choose from several possible hangul characters (GSUB lookup type 3). Example: The user may call this feature to get U+AC00 from U+4F3D. Recommended implementation: This table associates each hanja character in the font with one or more hangul characters. 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 should be ordered consistently across a family, so that those alternates can work correctly when switching between family members. Application interface: For GIDs found in the hngl coverage table, the application passes the GIDs to the 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. Note: This is a change of semantic value. Besides the original character codes (when entered as hanja), the application should store the code for the new character. UI suggestion: This feature should be inactive by default. The application may note the user's choice when selecting from multiple hangul, and offer it as a default the next time the source hanja character is encountered. In the absence of such prior information, the application may assume that the first hangul in a set is the preferred form, so the font developer should order them accordingly. Script/language sensitivity: Korean only. Feature interaction: This feature is mutually exclusive with all other features, which should be turned off when it's applied, except the palt, vert and vrt2 may be used in addition. Friendly name: Half Widths Registered by: Adobe Function: Replaces glyphs on proportional widths, or fixed widths other than half an em, with glyphs on half-em (en) widths. Many CJKV fonts have glyphs which are set on multiple widths; this feature selects the half-em version. There are various contexts in which this is the preferred behavior, including compatibility with older desktop documents. Example: The user may replace a proportional Latin glyph with the same character set on a half-em width. Recommended implementation: The font may contain alternate glyphs designed to be set on half-em widths (GSUB lookup type 1), or it may specify alternate metrics for the original glyphs (GPOS lookup type 1) which adjust their spacing to fit in half-em widths. Application interface: For GIDs found in the hwid coverage table, the application passes the GIDs to the table and gets back either new GIDs or positional adjustments (XPlacement and XAdvance). UI suggestion: This feature would normally be off by default. Script/language sensitivity: Generally used only in CJKV fonts. Feature interaction: This feature is mutually exclusive with all other glyph-width features (e.g. tnum, fwid, halt, qwid and twid), which should be turned off when it's applied. It deactivates the kern feature. Friendly name: Initial Forms Registered by: Microsoft/Adobe Function: Replaces glyphs at the beginnings of words with alternate forms designed for this use. This is common in Latin connecting scripts, and required in various non-Latins like Arabic. Example: In the typeface Ex Ponto, the default t in the word 'type' is replaced with the t.begin form. Recommended implementation: The init table maps default alphabetic forms to corresponding beginning forms (GSUB lookup type 1). Application interface: The application is responsible for noting word boundaries. For GIDs at the beginnings of words and found in the init coverage table, the application passes a GID to the feature and gets back a new GID. UI suggestion: This feature should be active by default. Script/language sensitivity: Can be used in any alphabetic script. Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. See also medi and fina. Friendly name: Isolated Forms Registered by: Microsoft Function: Replaces the nominal form of glyphs with their isolated forms. Example: In Arabic, if the Alef is followed by Lam, the default glyph for Alef is replaced with its isolated form. Recommended implementation: The isol table maps default alphabetic forms to corresponding isolated forms (GSUB lookup type 1). Application interface: For GIDs found in the isol coverage table, the application passes a GID to the feature and gets back a new GID for the isolated form. UI suggestion: This feature should be on by default. Script/language sensitivity: Can be used in any cursive script. Feature interaction: This feature overrides the results of all other features. See also init, medi, fina.
Friendly name: Italics Registered by: Adobe Function: Some fonts (such as Adobe's Pro Japanese fonts) will have both Roman and Italic forms of some characters in a single font. This feature replaces the Roman glyphs with the corresponding Italic glyphs. Example: The user would apply this feature to replace B with B. Recommended implementation: The ital table maps the Roman forms in a font to the corresponding Italic forms (GSUB lookup type 1). Application interface: For GIDs found in the ital coverage table, the application passes the GIDs to the table and gets back one new GID for each. UI suggestion: When a user selects text and applies an Italic style, an application should check for this feature and use it if present. Script/language sensitivity: Applies mostly to Latin; note that many non-Latin fonts contain Latin as well. Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. In CJKV fonts it should activate the kern feature (which would be on anyway in other scripts). Friendly name: Justification Alternates Registered by: Microsoft Function: Improves justification of text by replacing glyphs with alternate forms specifically designed for this purpose (they would have less or more advance width as need may be). Example: In the Arabic script, providing alternate forms for line final glyphs would result in better justification and reduce the use of tatweels (Kashidas). eg. replacing a Swash Kaf with an alternate form. Recommended implementation: The jalt table maps the initial, medial, final or isolated forms to their corresponding alternate forms (GSUB lookup type 3). Application interface: The application is responsible for noting line ends/boundaries. For GIDs found in the jalt coverage table, the application passes a GID to the feature and gets back a new GID. 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: If the font contains init, medi, fina, isol features, these need to be called prior to calling this feature.
Friendly name: JIS78 Forms Registered by: Adobe Function: This feature replaces default (JIS90) Japanese glyphs with the corresponding forms from the JIS C 6226-1978 (JIS78) specification. Example: The user would invoke this feature to replace kanji character U+5516 with U+555E. Recommended implementation: When JIS90 glyphs correspond to JIS78 forms, the jp78 table maps each of those glyphs to their alternates. 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. Application interface: For GIDs found in the jp78 coverage table, the application passes the GIDs to the 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. The application may assume that the first glyph in a set is the preferred form, so the font developer should order them accordingly. 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: This feature should be off by default. 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 the palt, vpal, vert and vrt2 features, which may be used in addition. Friendly name: JIS78 Forms Registered by: Adobe Function: This feature replaces default (JIS90) Japanese glyphs with the corresponding forms from the JIS C 6226-1978 (JIS78) specification. Example: The user would invoke this feature to replace kanji character U+5516 with U+555E. Recommended implementation: When JIS90 glyphs correspond to JIS78 forms, the jp78 table maps each of those glyphs to their alternates. 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. Application interface: For GIDs found in the jp78 coverage table, the application passes the GIDs to the 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. The application may assume that the first glyph in a set is the preferred form, so the font developer should order them accordingly. 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: This feature should be off by default. 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 the palt, vpal, vert and vrt2 features, which may be used in addition. Friendly name: JIS83 Forms Registered by: Adobe Function: This feature replaces default (JIS90) Japanese glyphs with the corresponding forms from the JIS X 0208-1983 (JIS83) specification. Example: Because of the Han unification in Unicode, there are no JIS83 glyphs which have distinct Unicode values, so the substitution cannot be described specifically. Recommended implementation: When JIS90 glyphs correspond to JIS83 forms, the jp83 table maps each of those glyphs to their alternates (GSUB lookup type 1). Application interface: For GIDs found in the jp83 coverage table, the application passes the GIDs to the 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 off by default. 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 the palt, vpal, vert and vrt2 features, which may be used in addition. Friendly name: JIS90 Forms Registered by: Adobe Function: This feature replaces Japanese glyphs from the JIS78 or JIS83 specifications with the corresponding forms from the JIS X 0208-1990 (JIS90) specification. Example: The user would invoke this feature to replace kanji character U+555E with U+5516. Recommended implementation: The jp90 table maps each JIS78 and JIS83 form in a font to JIS90 forms (GSUB lookup type 1). The application stores a record of any simplified forms which resulted from substitutions (the jp78 or jp83 features); for such forms, applying the jp90 feature undoes the previous substitution. When there is no record of a substitution, the application uses the jp90 table to get back to the default form. Application interface: For GIDs found in the jp90 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: This feature should be off by default. 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 the palt, vpal, vert and vrt2 features, which may be used in addition. 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).
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, twid) or vertical features (e.g. vert, vrt2, vpal, valt and vhal). Is called by the opbd feature. 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. Friendly name: Lining Figures Registered by: Adobe (Modified by Adobe, this is the newer description) Function: This feature changes selected figures from oldstyle to the default lining form. 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). Application interface: For GIDs found in the lnum coverage table, the application passes a GID to the onum 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). 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. 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. UI suggestion: This feature could be made active or inactive by default, at the user's preference. Script/language sensitivity: None. Feature interaction: None. Friendly name: Medial Form #3 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. 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.
Friendly name: Medial Forms Registered by: Microsoft/Adobe Function: Replaces glyphs in the middles of words (i.e. following a beginning and preceding an end) with alternate forms designed for this use. Note: This is different from the default form, which is designed for stand-alone use. This is common in Latin connecting scripts, and required in various non-Latins like Arabic. Example: In the typeface Caflisch Script, the y and p in the word 'type' are replaced by the y.med and p.med forms. Recommended implementation: The medi table maps default alphabetic forms to corresponding medial forms (GSUB lookup type 1). Application interface: The application is responsible for noting word boundaries. For GIDs in the middles of words and found in the medi coverage table, the application passes a GID to the feature and gets back a new GID. UI suggestion: This feature should be active by default. Script/language sensitivity: Can be used in any alphabetic 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. 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. 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 could be made active or inactive by default, at the user's preference. Script/language sensitivity: None. Feature interaction: None.
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. 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. 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: 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.
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. Friendly name: Oldstyle Figures Registered by: Microsoft/Adobe Function: This feature changes selected figures from the default 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). 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: Users can switch between the lining and oldstyle 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). 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, twid) or vertical features (e.g. vert, vrt2, vpal, valt and vhal). Uses lfbd and rtbd features. 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. 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. Friendly name: Proportional Alternate Widths Registered by: Adobe Function: Respaces glyphs designed to be set on full-em widths, fitting them onto individual (more or less proportional) horizontal widths. This differs from pwid in that it does not substitute new glyphs (GPOS, not GSUB feature). The user may prefer the monospaced form, or may simply want to ensure that the glyph is well-fit and not rotated in vertical setting (Latin forms designed for proportional spacing would be rotated). Example: The user may invoke this feature in a Japanese font to get Latin, Kanji, Kana or Symbol glyphs with the full-width design but individual metrics. Recommended implementation: The font specifies alternate metrics for the full-width glyphs (GPOS lookup type 1). Application interface: For GIDs found in the palt coverage table, the application passes the GIDs to the table and gets back positional adjustments (XPlacement, XAdvance, YPlacement and YAdvance). UI suggestion: This feature would be off by default. Script/language sensitivity: Used mostly in CJKV fonts. Feature interaction: This feature is mutually exclusive with all other glyph-width features (e.g. fwid, halt, hwid, pwid, qwid and twid), which should be turned off when it's applied. Applying this feature should activate the kern feature. See also vpal. Friendly name: Proportional Figures Registered by: Microsoft/Adobe Function: Replaces figure glyphs set on uniform (tabular) widths with corresponding glyphs set on glyph-specific (proportional) widths. Tabular widths will generally be the default, but this cannot be safely assumed. Of course this feature would not be present in monospaced designs. Example: The user may apply this feature to get even spacing for lining figures used as dates in an all-cap headline. Recommended implementation: In order to simplify associated kerning and get the best glyph design for a given width, this feature should use new glyphs for the figures, rather than only adjusting the fit of the tabular glyphs (although some may be simple copies); i.e. not a GPOS feature. The pnum table maps tabular versions of lining and/or oldstyle figures to corresponding proportional glyphs (GSUB lookup type 1). Application interface: For GIDs found in the pnum coverage table, the application passes GIDs to the pnum table and gets back new GIDs. UI suggestion: This feature should be off by default. The application may want to query the user about this feature when the user changes figure style (onum or lnum). Script/language sensitivity: None. Feature interaction: This feature overrides the results of the Tabular Figures feature (tnum). Friendly name: Pre-base Substitutions Registered by: Microsoft Function: Produces the pre-base forms of conjuncts in Indic scripts. It can also be used to substitute the appropriate glyph variant for pre-base vowel signs. Example: In the Gujarati (Indic) script, the doubling of consonant Ka requires the first Ka to be substituted by its pre-base form. This in turn ligates with the second Ka. Applying this feature would result in the ligaturised version of the doubled Ka. Recommended implementation: The pres table maps a sequence of consonants separated by the virama (halant), to the ligated conjunct form (GSUB lookup type 4). In the case of pre-base matra substitution, the appropriate matra can be substituted using contextual substitution (GSUB lookup type 5). Application interface: For substitutions defined in the pres table, the application passes the sequence of GIDs to the feature, and gets back the GID for the ligature (or matra as the case may be). 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.
Friendly name: Post-base Forms Registered by: Microsoft Function: Substitutes the post-base form of a consonant. Example: In the Gurmukhi (Indic) script, the consonant Ya has a post base form. When the Ya is used as the second consonant in conjunct formation, its post-base form is substituted. Recommended implementation: The pstf table maps the sequence required to convert a consonant into its post-base form (GSUB lookup type 4). Application interface: For substitutions defined in the pstf table, the application passes the sequence of GIDs to the feature, and gets back the GID for the post base form of the consonant. UI suggestion: This feature should be on by default. Script/language sensitivity: Required in Indic scripts that have post-base forms for consonants eg: Gurmukhi, Malayalam. Feature interaction: This feature overrides the results of all other features.
Friendly name: Post-base Substitutions Registered by: Microsoft Function: Substitutes a sequence of a base glyph and post-base glyph, with its ligaturised form. Example: In the Malayalam (Indic) script, the consonant Va has a post base form. When the Va is doubled to form a conjunct- VVa; the first Va [base] and the post base form that follows it, is substituted with a ligature. Recommended implementation: The psts table maps identified conjunct formation sequences to corresponding ligatures (GSUB lookup type 4). Application interface: For substitutions defined in the psts table, the application passes the sequence of GIDs to the feature, and gets back the GID for the ligature. UI suggestion: This feature should be on by default. Script/language sensitivity: Can be used in any alphabetic script. Required in Indic scripts. Feature interaction: This feature overrides the results of all other features. Friendly name: Proportional Widths Registered by: Adobe Function: Replaces glyphs set on uniform widths (typically full or half-em) with proportionally spaced glyphs. The proportional variants are often used for the Latin characters in CJKV fonts, but may also be used for Kana in Japanese fonts. Example: The user may invoke this feature in a Japanese font to get a proportionally-spaced glyph instead of a corresponding half-width Roman glyph or a full-width Kana glyph. Recommended implementation: The font contains alternate glyphs designed to be set on proportional widths (GSUB lookup type 1). Application interface: For GIDs found in the pwid coverage table, the application passes the GIDs to the table and gets back new GIDs. UI suggestion: Applications may want to have this feature active or inactive by default depending on their markets. Script/language sensitivity: Although used mostly in CJKV fonts, this feature could be applied in European scripts. Feature interaction: This feature is mutually exclusive with all other glyph-width features (e.g. fwid, halt, hwid, palt, qwid, twid, valt and vhal), which should be turned off when it's applied. Applying this feature should activate the kern feature. Friendly name: Quarter Widths Registered by: Adobe Function: Replaces glyphs on other widths with glyphs set on widths of one quarter of an em (half an en). The characters involved are normally figures and some forms of punctuation. Example: The user may apply qwid to place a four-digit figure in a single slot in a column of vertical text. Recommended implementation: The font may contain alternate glyphs designed to be set on quarter-em widths (GSUB lookup type 1), or it may specify alternate metrics for the original glyphs (GPOS lookup type 1) which adjust their spacing to fit in quarter-em widths. Application interface: For GIDs found in the qwid coverage table, the application passes the GIDs to the table and gets back either new GIDs or positional adjustments (XPlacement and XAdvance). UI suggestion: This feature would normally be off by default. Script/language sensitivity: Generally used only in CJKV fonts. Feature interaction: This feature is mutually exclusive with all other glyph-width features (e.g. fwid, halt, hwid and twid), which should be turned off when it's applied. It deactivates the kern feature. Friendly name: Randomize Registered by: Adobe Function: In order to emulate the irregularity and variety of handwritten text, this feature allows multiple alternate forms to be used. Example: The user applies this feature in FF Kosmic to get three forms of f in one word. Recommended implementation: The rand table maps GIDs for default glyphs to one or more GIDs for corresponding alternates (GSUB lookup type 3). Application interface: For GIDs found in the rand coverage table, the application passes a GID to the rand table and gets back one or more new GIDs. The application selects one of these either by a pseudo-random algorithm, or by noting the sequence of IDs returned, storing that sequence, and stepping through that set as the corresponding character code is invoked. UI suggestion: This feature should be enabled/disabled via a preference setting; "enabled" is the recommended default. Script/language sensitivity: None. Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. Friendly name: Required Ligatures Registered by: Microsoft Function: Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers those ligatures, which the script determines as required to be used in normal conditions. This feature is important for some scripts to insure correct glyph formation. Example: The Arabic character lam followed by alef will always form a ligated lamalef form. This ligated form is a requirement of the script's shaping. The same happens with the Syriac script. Recommended implementation: The rand table maps GIDs for default glyphs to one or more GIDs for corresponding alternates (GSUB lookup type 3). Application interface: The rlig 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 normally remain constant by script. UI suggestion: This feature should be active by default. It is recommended that this feature not be turned off to avoid breaking obligatory script shaping. Script/language sensitivity: Applies to Arabic and Syriac. May apply to some other scripts. Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. See also liga. Friendly name: Reph Form Registered by: Microsoft Function: Substitutes the Reph form for a consonant and halant sequence. Example: In the Devanagari (Indic) script, the consonant Ra possesses a reph form. When the Ra is a syllable initial consonant and is followed by the virama, it is repositioned after the post base vowel sign within the syllable, and also substituted with a mark that sits above the base glyph. Recommended implementation: The rphf table maps the sequence of default form of Ra and virama to the Reph (GSUB lookup type 4). Application interface: The application gets back the GID for the reph mark. UI suggestion: This feature should be on by default. Script/language sensitivity: Required in Indic scripts. eg: Devanagari, Kannada. Feature interaction: This feature overrides the results of all other features.
Friendly name: Right Bounds Registered by: Adobe Function: Aligns glyphs by their apparent right extents at the right 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 ending with r, h and y would shift to the right by differing degrees when the text is right-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 rtbd 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, twid) or vertical features (e.g. vert, vrt2, vpal, valt and vhal). Is called by opbd feature. Friendly name: Ruby Notation Forms Registered by: Adobe Function: Japanese typesetting often uses smaller kana glyphs, generally in superscripted form, to clarify the meaning of kanji which may be unfamiliar to the reader. These are called ruby, from the old typesetting term for four-point-sized type. This feature identifies glyphs in the font which have been designed for this use, substituting them for the default designs. Example: The user applies this feature to the kana character U+3042, to get the ruby form for annotation. Recommended implementation: The font contains alternate glyphs for all kana characters which are enabled for ruby notation. The ruby table maps GIDs for default forms to GIDs for corresponding ruby alternates. These are one-to-one substitutions (GSUB lookup type 1). Application interface: For GIDs found in the ruby coverage table, the application passes the GIDs for default forms to the table and gets back new GIDs for ruby forms. The application then scales and positions these forms according to its defaults, which may take user parameters. UI suggestion: This feature should be inactive by default. Applications may offer the user an opportunity to specify the degree of scaling and baseline shift. Script/language sensitivity: Applies only to Japanese. Feature interaction: This feature overrides the results of any other feature for the affected characters.
Friendly name: Stylistic Alternates Registered by: Adobe Function: Many fonts contain alternate glyph designs for a purely esthetic effect; these don't always fit into a clear category like swash or historical. As in the case of swash glyphs, there may be more than one alternate form. This feature replaces the default forms with the stylistic alternates. Example: The user applies this feature to Industria to get the alternate form of g. Recommended implementation: The salt table maps GIDs for default forms to one or more GIDs for corresponding stylistic alternatives. 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. Application interface: For GIDs found in the salt coverage table, the application passes the GIDs to the salt 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: None. Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. Friendly name: Scientific Inferiors Registered by: Microsoft/Adobe Function: Replaces lining or oldstyle figures with inferior figures (smaller glyphs which sit lower than the standard baseline, primarily for chemical or mathematical notation). May also replace lowercase characters with alphabetic inferiors. Example: The application can use this feature to automatically access the inferior figures (more legible than scaled figures). Recommended implementation: The sinf table maps figures to the corresponding inferior forms (GSUB lookup type 1). Application interface: For GIDs found in the sinf coverage table, the application passes a GID to the feature and gets back a new GID. UI suggestion: This feature should be off by default. Script/language sensitivity: Can apply to nearly any script. Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. Friendly name: Optical size Registered by: Adobe Function: This feature stores two kinds of information about the optical size of the font: design size (the point size for which the font is optimized) and size range (the range of point sizes which the font can serve well), as well as other information which helps applications use the size range. The design size is useful for determining proper tracking behavior. The size range is useful in families which have fonts covering several ranges. Additional values serve to identify the set of fonts which share related size ranges, and to identify their shared name. Note that sizes refer to nominal final output size, and are independent of viewing magnification or resolution. Required implementation: The Feature table of this GPOS feature contains no lookups; its Feature Parameters field records an offset from the beginning of the Feature table to an array of five 16-bit unsigned integer values. The size feature must be implemented in all fonts in any family which uses the feature. In this usage, a family is a set of fonts which share a Preferred Family name (name ID 16), or Font Family name (name ID 1) if the Preferred Family name is absent.
Example: The size information in Bell Centennial is [60 0 0 0 0]. This tells an application that the fontâs design size is six points, so larger sizes may need proportionate reduction in default inter-glyph spacing. The size information in Minion Pro Semibold Condensed Subhead is [180 3 257 139 240]. These values tell an application that:
Application interface: When the user specifies a size, the application checks for a size feature in the active font. If none is found, the application follows its default behavior. If one is found, the application follows the specified offset to retrieve the five values.
UI suggestion: This feature should be active by default. Applications may want to present the tracking curve to the user for adjustments via a GUI. At start-up, and when fonts are added or removed, applications may want to build a list of fonts with such ranges, and display the filtered subfamily names in their font selection UI, with each filtered name representing the full set of related sizes. Applications may also present a setting which allows the user to select non-default sizes (for example, in the case where final output is intended for on-screen viewing, a smaller optical size will produce better results). In such a case, the font-selection UI should present the unfiltered names. Applications should notify the user if fonts are removed or added from a subfamily with size ranges, and query about desired behavior. Script/language sensitivity: None. Feature interaction: None.
Friendly name: Small Capitals Registered by: Microsoft/Adobe Function: This feature turns lowercase characters into small capitals. This corresponds to the common SC font layout. It is generally used for display lines set in Large & small caps, such as titles. Forms related to small capitals, such as oldstyle figures, may be included. Example: The user enters text as mixed capitals and lowercase, and gets Large & small cap text. Recommended implementation: The smcp table maps lowercase glyphs to the corresponding small-cap forms (GSUB lookup type 1). Application interface: For GIDs found in the smcp coverage table, the application passes GIDs to the smcp table, and gets back new GIDs. Note that applications should treat ß (U+00DF) as a pair of s characters, and that the Turkish dotless i maps to the normal small cap I. 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 c2sc. Friendly name: Simplified Forms Registered by: Adobe Function: Replaces 'traditional' Chinese or Japanese forms with the corresponding 'simplified' forms. Example: The user gets U+53F0 when U+6AAF, U+81FA, or U+98B1 is entered. Recommended implementation: The smpl table maps each traditional form in a font to a corresponding simplified form (GSUB lookup type 1). Note that more than one traditional form may map to a single simplified form. Application interface: For GIDs found in the smpl 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: This feature would be off by default, but could be made the default by a preference setting. Script/language sensitivity: Applies only to Chinese and Japanese. Feature interaction: This feature is mutually exclusive with all other features, which should be turned off when its applied, except the palt, vert and vrt2 features, which may be used in addition; trad and tnam are mutally exclusive, and override the results of smpl. Friendly name: Subscript Registered by: Microsoft/Adobe Function: The "subs" feature may replace a default glyph with a subscript glyph, or it may combine a glyph substitution with positioning adjustments for proper placement. Recommended implementation: First, a single or contextual substitution lookup implements the subscript glyph (GSUB lookup type 1). Then, if the glyph needs repositioning, an application may apply a single adjustment, pair adjustment, or contextual adjustment positioning lookup to modify its position. Application interface: For GIDs found in the subs coverage table, the application passes a GID to the feature 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. Script/language sensitivity: Can apply to nearly any script. Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. Friendly name: Superscript Registered by: Microsoft/Adobe Function: Replaces lining or oldstyle figures with superior figures (primarily for footnote indication), and replaces lowercase letters with superior letters (primarily for abbreviated French titles). Example: The application can use this feature to automatically access the superior figures (more legible than scaled figures) for footnotes, or the user can apply it to Mssr to get the classic form. Recommended implementation: The sups table maps figures and lowercase letters to the corresponding superior forms (GSUB lookup type 1). Application interface: For GIDs found in the sups coverage table, the application passes a GID to the feature and gets back a new GID. Note: This can include 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: Can apply to nearly any script. Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. Friendly name: Swash Registered by: Microsoft/Adobe Function: This feature replaces default character glyphs with corresponding swash glyphs. Note that there may be more than one swash alternate for a given character. Example: The user inputs the ampersand character when setting text with Poetica with this feature active, and is presented with a choice of the 63 ampersand forms in that face. Recommended implementation: The swsh table maps GIDs for default forms to those for one or more corresponding swash 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 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 swsh 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. Friendly name: Titling Registered by: Adobe Function: This feature replaces the default glyphs with corresponding forms designed specifically for titling. These may be all-capital and/or larger on the body, and adjusted for viewing at larger sizes. Example: The user applies this feature in Adobe Garamond to get the titling caps. Recommended implementation: The titl table maps default forms to corresponding titling forms (GSUB lookup type 1). Application interface: For GIDs found in the titl coverage table, the application passes the GIDs to the titl table and gets back new GIDs. UI suggestion: This feature should be off by default. Script/language sensitivity: None. Feature interaction: This feature may be used in combination with other substitution (GSUB) features, whose results it may override. Friendly name: Traditional Name Forms Registered by: Adobe Function: Replaces 'simplified' Japanese kanji forms with the corresponding 'traditional' forms. This is equivalent to the Traditional Forms feature, but explicitly limited to the traditional forms considered proper for use in personal names (as many as 205 glyphs in some fonts). Example: The user inputs U+4E9C and gets U+4E9E. Recommended implementation: The tnam table maps simplified forms in a font to corresponding traditional forms which can be used in personal names (GSUB lookup type 1). The application stores a record of any simplified forms which resulted from substitutions (the smpl feature); for such forms, applying the tnam feature undoes the previous substitution. Application interface: For GIDs found in the tnam coverage table, the application passes the GIDs to the table and gets back new GIDs. 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: This feature should be off by default. Script/language sensitivity: Applies only to Japanese. Feature interaction: May include some characters affected by the Proportional Alternate Widths feature (palt); trad and tnam are mutually exclusive, and override the results of smpl. Friendly name: Tabular Figures Registered by: Adobe Function: Replaces figure glyphs set on proportional widths with corresponding glyphs set on uniform (tabular) widths. Tabular widths will generally be the default, but this cannot be safely assumed. Of course this feature would not be present in monospaced designs. Example: The user may apply this feature to get oldstyle figures to align vertically in a column. Recommended implementation: In order to simplify associated kerning and get the best glyph design for a given width, this feature should use new glyphs for the figures, rather than only adjusting the fit of the proportional glyphs (although some may be simple copies); i.e. not a GPOS feature. The tnum table maps proportional versions of lining &/or oldstyle figures to corresponding tabular glyphs (GSUB lookup type 1). Application interface: For GIDs found in the tnum coverage table, the application passes GIDs to the tnum table and gets back new GIDs. UI suggestion: This feature should be off by default. The application may want to query the user about this feature when the user changes figure style (onum or lnum). Script/language sensitivity: None. Feature interaction: This feature overrides the results of the Proportional Figures feature (pnum). Friendly name: Traditional Forms Registered by: Adobe Function: Replaces 'simplified' Chinese hanzi or Japanese kanji forms with the corresponding 'traditional' forms. Example: The user inputs U+53F0 and is offered a choice of U+6AAF, U+81FA, or U+98B1. Recommended implementation: The trad table maps each simplified form in a font to one or more traditional 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. 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: For GIDs found in the trad coverage table, the application passes the GIDs to the 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. The application stores a record of any simplified forms which resulted from substitutions (the smpl feature); for such forms, applying the trad feature undoes the previous substitution. 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: This feature should be inactive by default. If there's no record of a conversion from traditional to simplified, the user must be offered a set of possibilities from which to select. The application may note the user's choice, and offer it as a default the next time the source simplified character is encountered. 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: Applies only to Chinese and Japanese. Feature interaction: May include some characters affected by the Proportional Alternate Widths feature (palt); trad and tnam are mutually exclusive, and override the results of smpl. Friendly name: Third Widths Registered by: Adobe Function: Replaces glyphs on other widths with glyphs set on widths of one third of an em. The characters involved are normally figures and some forms of punctuation. Example: The user may apply twid to place a three-digit figure in a single slot in a column of vertical text. Recommended implementation: The font may contain alternate glyphs designed to be set on third-em widths (GSUB lookup type 1), or it may specify alternate metrics for the original glyphs (GPOS lookup type 1) which adjust their spacing to fit in third-em widths. Application interface: For GIDs found in the twid coverage table, the application passes the GIDs to the table and gets back either new GIDs or positional adjustments (XPlacement and XAdvance). UI suggestion: This feature would normally be off by default. Script/language sensitivity: Generally used only in CJKV fonts. Feature interaction: This feature is mutually exclusive with all other glyph-width features (e.g. fwid, halt, hwid and qwid), which should be turned off when it's applied. It deactivates the kern feature.
Friendly name: Alternate Vertical Metrics Registered by: Adobe (Modified by Adobe, this is the newer description) Function: Repositions glyphs to visually center them within full-height metrics, for use in vertical setting. Typically applies to full-width Latin glyphs, which are aligned on a common horizontal baseline and not rotated when set vertically in CJKV fonts. Example: Applying this feature would shift a Roman h down, or y up, from their default full-width positions. Recommended implementation: The font specifies alternate metrics for the original glyphs (GPOS lookup type 1). Application interface: For GIDs found in the valt coverage table, the application passes the GIDs to the table and gets back positional adjustments (YPlacement). UI suggestion: This feature should be active by default in vertical-setting contexts. Script/language sensitivity: Applies only to scripts with vertical writing modes. Feature interaction: This feature is mutually exclusive with all other glyph-height features (e.g. vhal and vpal), which should be turned off when it's applied. It deactivates the kern feature. Friendly name: Vattu Variants Registered by: Microsoft Function: Substitutes ligatures for conjuncts made up of base consonants with consonants that have vattu forms. Example: In the Devanagari (Indic) script, the consonant Ra takes a vattu form, when it is not the syllable initial consonant in a conjunct. This form ligates with the base consonant as well as half forms of consonants. Recommended implementation: The vatu table maps consonant and vattu form combinations to their respective ligatures (GSUB lookup type 4). Application interface: For substitutions defined in the vatu table, the application passes the sequence of GIDs to the table, and gets back the GID for the vattu variant ligature. UI suggestion: This feature should be on by default. Script/language sensitivity: Required in Indic scripts. eg: Devanagari. Feature interaction: This feature overrides the results of all other features.
Friendly name: Vertical Alternates Registered by: Microsoft/Adobe Function: Replaces default forms with variants adjusted for vertical writing when in vertical writing mode. While most CJKV glyphs remain vertical when set in vertical writing mode, some take a different form (usually rotated and repositioned) for this purpose. Glyphs covered by this feature correspond to the set normally rotated in low-end DTP applications. Example: In vertical writing mode, the opening parenthesis (U+FF08) is replaced by the rotated form (U+FE35). Recommended implementation: The font includes rotated versions of the glyphs covered by this feature. The vert table maps the standard forms to the corresponding rotated forms (GSUB lookup type 1). This feature should be the last substitution in the font, and take input from other features. Application interface: For GIDs found in the vert coverage table, the application passes GIDs to the feature, and gets back new GIDs. See the vrt2 feature description for more details. UI suggestion: This feature should be active by default when vertical writing mode is on if the vrt2 feature is not present. See the vrt2 feature description for more details, and a discussion of vertical writing in OpenType. Script/language sensitivity: Applies only to scripts with vertical writing capability. Feature interaction: This is a subset of the vrt2 feature; vrt2 is preferred. May be used in addition to any other feature. Friendly name: Alternate Vertical Half Metrics Registered by: Adobe Function: Respaces glyphs designed to be set on full-em heights, fitting them onto half-em heights. This differs from valt in that it does not substitute new glyphs. Example: The user may invoke this feature in a CJKV font to get better fit for punctuation or symbol glyphs without disrupting the monospaced alignment. Recommended implementation: The font specifies alternate metrics for the full-height glyphs (GPOS lookup type 1). Application interface: For GIDs found in the vhal coverage table, the application passes the GIDs to the table and gets back positional adjustments (XPlacement, XAdvance, YPlacement and YAdvance). UI suggestion: This feature would be off by default. Script/language sensitivity: Used only in CJKV fonts. Feature interaction: This feature is mutually exclusive with all other glyph-height features (e.g. valt and vpal), which should be turned off when its applied. It deactivates the kern feature. See also halt.
Friendly name: Vertical Kana Alternates Registered by: Adobe Function: Replaces standard kana with forms that have been specially designed for only vertical writing. This is a typographic optimization for improved fit and more even color. Also see hkna. Example: Standard full-width kana (hiragana and katakana) are replaced by forms that are designed for vertical use. Recommended implementation: The font includes a set of specially-designed glyphs, listed in the vkna coverage table. The vkna feature maps the standard full-width forms to the corresponding special vertical forms (GSUB lookup type 1). Application interface: For GIDs found in the vkna coverage table, the application passes GIDs to the feature, and gets back new GIDs. UI suggestion: This feature would be off by default. Script/language sensitivity: Applies only to fonts that support kana (hiragana and katakana). Feature interaction: Since this feature is only for vertical use, features applying to horizontal behaviors (e.g. kern) do not apply.
Friendly name: Vertical Kerning Registered by: 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 vertical direction, this feature can supply size-dependent kerning data via device tables, "cross-stream" kerning in the X 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 applies only to text set vertically. Example: When the katakana character U+30B9 or U+30D8 is followed by U+30C8 in a vertical setting, U+30C8 is shifted up to fit more evenly. 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 vertical 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 'vkrn' is activated, 'vpal' must also be activated if it exists. (If 'vpal' is activated, there is no requirement that 'vkrn' must also be activated.) May be used in addition to any other feature except those which result in fixed (uniform) advance heights. Friendly name: Proportional Alternate Vertical Metrics Registered by: Adobe Function: Respaces glyphs designed to be set on full-em heights, fitting them onto individual (more or less proportional) vertical heights. This differs from valt in that it does not substitute new glyphs (GPOS, not GSUB feature). The user may prefer the monospaced form, or may simply want to ensure that the glyph is well-fit. Example: The user may invoke this feature in a Japanese font to get Latin, Kanji, Kana or Symbol glyphs with the full-height design but individual metrics. Recommended implementation: The font specifies alternate heights for the full-height glyphs (GPOS lookup type 1). Application interface: For GIDs found in the vpal coverage table, the application passes the GIDs to the table and gets back positional adjustments (XPlacement, XAdvance, YPlacement and YAdvance). UI suggestion: This feature would be off by default. Script/language sensitivity: Used mostly in CJKV fonts. Feature interaction: This feature is mutually exclusive with all other glyph-height features (e.g. valt and vhal), which should be turned off when it's applied. Applying this feature should activate the kern feature. See also palt.
Friendly name: Vertical Alternates and Rotation Registered by: Adobe Function: Replaces some fixed-width (half-, third- or quarter-width) or proportional-width glyphs (mostly Latin or katakana) with forms suitable for vertical writing (that is, rotated 90 degrees clockwise). Note that these are a superset of the glyphs covered in the vert table. ATM/NT 4.1 and the Windows 2000 OTF driver impose the following
requirements for an OpenType font with CFF outlines to be used for
vertical writing: the vrt2 feature must be present in the GSUB table, it
must comprises a single lookup of LookupType 1 and LookupFlag 0, and the
lookup must have a single subtable. The predecessor feature, vert, is ignored.
A rotated glyph must be designed such that its top side bearing and
vertical advance as recorded in the Vertical Metrics
('vmtx') table are identical to the left side bearing and horizontal
advance, respectively, of the corresponding upright glyph as recorded in
the Horizontal Metrics ('hmtx') table.
(The horizontal advance of the rotated glyph may be set to any
value, since the glyph is intended only for vertical writing use. The
vendor may however set it to head.unitsPerEm, to prevent overlap during
font proofing tests, for example.) Thus, proportional-width glyphs with rotated forms in the vrt2 feature will appear identically spaced in both vertical and horizontal writing. In order for kerning to produce identical results as well, developers must ensure that the Vertical Kerning (vkrn) feature record kern values between the rotated glyphs that are the same as kern values between their corresponding upright glyphs in the Kerning (kern) feature. Example: Proportional- or half-width Latin and half-width katakana characters are rotated 90 degrees clockwise for vertical writing. Recommended implementation: The font includes rotated versions of the glyphs covered by this feature. The vrt2 table maps the standard (horizontal) forms to the corresponding vertical (rotated) forms (GSUB lookup type 1). This feature should be the last substitution in the font, and take input from other features. Application interface: For GIDs found in the vrt2 coverage table, the application passes GIDs to the feature, and gets back new GIDs. UI suggestion: This feature should be active by default when vertical writing mode is on, although the user must be able to override it. Script/language sensitivity: Applies only to scripts with vertical writing capability. Feature interaction: Overrides the vert (Vertical Writing) feature, which is a subset of this one. May be used in addition to any other feature. Friendly name: Slashed Zero Registered by: Adobe Function: Some fonts contain both a default form of zero, and an alternative form which uses a diagonal slash through the counter. Especially in condensed designs, it can be difficult to distinguish between 0 and O (zero and capital O) in any situation where capitals and lining figures may be arbitrarily mixed. This feature allows the user to change from the default 0 to a slashed form. Example: When setting labels, the user applies this feature to get the slashed 0. Recommended implementation: The zero table maps the GIDs for the lining forms of zero to corresponding slashed forms (GSUB lookup type 1). Application interface: For GIDs in the zero coverage table, the application passes a GID to the zero table and gets back a new GID. UI suggestion: Optimally, the application would store this as a preference setting, and the user could use the feature to toggle back and forth between the two forms. Most applications will want the default setting to disable this feature. Script/language sensitivity: Does not apply to scripts which use forms other than 0 for zero. Feature interaction: Applies only to lining figures, so is inactivated by oldstyle figure features (e.g. onum).
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Microsoft Typography | Developer information | Specifications | Feature Tags | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |