Home   All Products  |   Support  |   Search  | Home  

Microsoft Typography | Developer | VOLT specification
UI | Main | Proj window | Glyph grp | Subs tool | Posi tool | Glyph def | Proof tool | Output

Project Panel


The project window contains the following sections:

  • Features - lists scripts, languages, features and lookup they reference, and their relationship. Clicking on a lookup opens the corresponding lookup design tool.
  • Lookup List - a separate list of lookups in the font.
  • Glyph Groups - lists defined glyph classes (groups). When clicked opens the Glyph Group Panel and Glyph Definition Tool. There are four pre-defined glyph groups that always exist: base glyphs, mark glyphs, ligature glyphs and component glyphs. These glyph groups correspond to the classification in GDEF and are mutually exclusive.



The user can scroll the project panel up and down.

Features and Lookups


The Features and Lookups part of the Project Window shows scripts, language systems, features and lookups they reference.

It has two parts: the tree-like Relationship Chart and the Lookup List.

Items in the Relationship Chart are connected into a tree structure. Each script, language and feature is labeled with its tag and friendly name (see below). The references to lookups have user-defined names. The Relationship Chart displays the relationships between scripts, language systems, features and lookups.

The Lookup List contains all lookups defined in the project in the order of execution. Some lookups may be hooked to certain features; some may not be. There is only one instance of each lookup in the lookup list although there may be multiple references to it in the Relationship Chart.

Lookups are colored differently depending on whether they are substitutions or positioning lookups (or have different icons by them).

Scripts, languages, features and lookups become highlighted when clicked. We also refer to the highlighted feature/lookup as selected or active. Only one script, language system, feature or lookup can be active at a given time. When an item in the Relationship Chart is active, all items above it in the tree structure are active as well (and are displayed in bold type). Then a reference to a lookup is active in the Relationship Chart, the same lookup is activated and brought into view in the lookup list.


A tree describing defined scripts, languages, features and lookups they reference is on the left; a column of lookup names on the right.




Clicking on a script, language, feature name or a lookup selects them. There is always one script selected (unless there are no scripts in the font), one language selected in that script and one feature selected in that script/language sub tree. Selecting a different item of the same type deselects the current one. Selecting an item lower in the hierarchy (e.g. feature) changes the selections for script and language correspondingly. Selecting a script automatically selects the default language system and the default feature.

Many commands operate on the currently selected (active) script, language, feature or lookup.

When a reference to a lookup is selected in the Relationship Chart, the corresponding lookup is selected and brought into view in the Lookup List.


Double-clicking on a script or language closes or reopens the corresponding sub tree.

Double-clicking on a lookup brings up the corresponding tool depending on the lookup type. For a GSUB lookup it's going to be the substitution tool; for a GPOS lookup it's the positioning tool.


Clicking on an active feature or lookup again allows the user to rename it (change its friendly name or tag). If a lookup's name change, all references to it should be fixed up. If a lookup tool is open for the renamed lookup, it's name field should change as well. If a lookup is used by a contextual substitution lookup, its name should be fixed up.

Adding new scripts, languages, features or lookups

To add a new script/language/feature/lookup, the user selects the appropriate option from the menu/toolbar. An empty slot is created for the new item where its name can be typed. The language or feature is automatically added to the active script/language. With every script, the default language is added (labeled "Default (dflt)") that cannot be removed.

To add a feature, a language system has to be selected. The new feature is added to the selected system.

One can type a valid script tag or a valid script name (from a hard-coded list of scripts supported by Unicode) that will be translated to a tag. If a match is not found the user is warned ("The script tag you typed in not valid. Would you like to add it anyway?" (Add/Cancel)).

One can type a valid language tag or a language name. One validates the language name (and gets the NLS LCID for it) by going through a list of registered names as well as NLS APIs (TODO: elaborate) to find out about additional languages installed on the system. The 3-letter LCID is used as the language tag. If a language tag for a specific sub language is added, VOLT automatically adds the tag for SUBLANGUAGE_NEUTRAL as well.

If the language tag is not recognized the user is warned but can choose to proceed. If the language name or script name is not recognized the operation is aborted and no new language/script is added.

Unrecognized script and language tags are represented by tags only without a friendly script/language name.

The only feature tag that is recognized is 'dflt' for the required feature. This feature gets the name ("Default") automatically and its name is displayed in bold to show that it is the required feature. Other features can be supplied with names in addition to tags (e.g. Kerning (kern)) but no verification effort is made. If the feature name is not entered in the form "Feature-name (tag)" it is assumed that only the tag is entered. If it is longer than four letters, a warning pops up and the tag is truncated to four ASCII letters.

Creating a new lookup does NOT add it to any feature by default. The user has to manually add it to features they choose to. When lookups are loaded from a saved source file, they are added to the end of the sequence and NOT hooked up to any features.

Clicking on the headings of script, language or feature column sorts them alphabetically (without altering the tree structure; that is, languages are sorted alphabetically within their scripts etc.)


Choosing the appropriate option from the menu or toolbar deletes the selected item. A warning dialog is displayed ("Are you sure you would like to delete..." OK/Cancel).

Connecting Features with Lookups

One can drag a lookup from the lookup list to a feature in the relationship chart to add a reference to this lookup to this feature. The reference appears in the feature's sub tree.

Dragging a reference to a lookup OUT of the relationship chart removes that reference. Please note that this does not remove the lookup itself but merely excludes it from the feature.

Changing Lookup Order

Dragging entries in the lookup list changes lookup order (while leaving them connected to the same features as before of course). All substitutions always come before all positioning though: you cannot drag one into another, the cursor changes to the "invalid" sign and dropping is not allowed. One can also change the lookup order by highlighting one lookup and pressing the up and down arrows.

Note that script/language/feature order is not important; in the compiled font they always appear in alphabetical order by tags.

References to lookups in the Relationship Chart should be sorted in the same order as the global Lookup List in every feature's sub tree.


Lookups are compiled exactly in the order they appear on the screen.

Script, language and feature tables are compiled to have an adequate representation of the displayed structure in the font. The "Default" feature is compiled to be the required feature for the appropriate language system. The GSUB and GPOS tables receive the corresponding parts (the ones that include GSUB or GPOS lookups). If two different scripts or languages have identical languages/features, they could be merged together as an optimization.


The order of scripts, languages or features does not need to be preserved (they can always appear in the alphabetical order when reloaded). Everything else on this screen should round-trip.

Glyph Groups


Below the feature list in the project window, glyph groups defined in the project are listed. The glyph groups do not correspond to any classes used by lookups - they are used to create those class definitions. E.g. if in a pair adjustment lookup I specified two different actions for groups "Digit" and "CapitalLetter", a new class definition will be compiled into the font that classifies digits as, for example, class 1 and capital letters as class 2; and the pair adjustment lookup will reference that class definition. Some classes created in this way may turn out to be identical and may be merged by VOLT as an optimization.

The groups "Base Glyph", "Ligature", "Mark" and "Component" are present from the start and cannot be deleted. They represent system classification of the glyphs and VOLT maintains them being a mutually exclusive classification. Changing the contents of these groups will change the glyph classification in the Glyph Definition Tool.


A list (one column) of names of defined glyph groups.



Clicking on a group selects it.

Double-clicking brings up the Glyph Group Tool containing the list of glyphs in the group, and the Glyph Definition Tool.


Clicking again on a selected group allows the user to rename it. If a group tool is open for that group, it's name field should change as well. If the group name is referenced by one of the lookups, it should be fixed up there too.


A new group can be added through a menu option or toolbar. After clicking on "New Group" an empty line appears at the bottom of the group list and the user can type the new group's name there.

New glyph groups start empty.


Choosing 'Delete Group' from the Edit menu or toolbar deletes the highlighted group. In case the group was not empty the user is warned ('Are you sure you want to delete..." OK/Cancel).

this page was last updated 13 August 1999
© 1999 Microsoft Corporation. All rights reserved. Terms of use.
comments to the MST group: how to contact us


UI | Main | Proj window | Glyph grp | Subs tool | Posi tool | Glyph def | Proof tool | Output
Microsoft Typography | Developer | VOLT specification