| Microsoft Typography | Developer | VOLT specification | |||
| UI | Main | Proj window | Glyph grp | Subs tool | Posi tool | Glyph def | Proof tool | Output | |||
|
The Positioning Tool allows the user to edit all kinds of positioning lookups, including contextual ones. It pops up with a positioning lookup is double-clicked in the Project Window. |
|||
|
|
|||
|
The tool consists of five major parts: the Lookup Definition part, the Glyph Enumeration part, the Positioning (graphical) part, the Positioning Data List and the Contextual part. The Lookup Definition part has the following components:
The Positioning part has the following components:
The Positioning Data List contains a table with 2 columns and three rows. Each column contains data for one glyph; in case of single positioning lookup the second column is empty. The data in the rows are:
If a component is selected, the data in the first column are the data for the selected component in the first glyph. One can type into the cells of the Positioning Data List instead of using the Positioning Panel to move them. The changes are immediately reflected on the Positioning Panel. The Glyph Enumeration part has six columns, three for the first glyph to be positioned and three for the second. For single adjustment lookups, the second three columns are empty and disabled. For cursive positioning they repeat the contents of the first three. Out of the three columns the first one contains glyph shapes and the second one glyph names, very much like in the Glyph Group Tool. Editing and other operations happen in exact same way as with the Glyph Group Tool. The only difference is that the entries in the glyph shape columns are selectable (although still not editable). Once an entry has been selected for both glyphs in a positioning pair (single glyph in single positioning lookup), the glyph shapes appear in the Positioning Panel allowing the user to edit their relative position. If a glyph group is used, it is represented by its first member shown in a different color (e.g. blue), just like in the Substitution Tool. On the Positioning Panel, one can choose which glyph of the group to use for positioning. Please note however that use of glyph groups forces the lookup to become class-based. Thus anchor points and adjustment values are shared between the members of the group; repositioning one glyph of the group changes the position for all of them. Also note that the glyph groups used for first or second glyphs in the lookup cannot intersect (which makes sense as you cannot position the same glyph twice); if they do, a compilation error will occur. The third column for each glyph contains the name of the anchor to be used in positioning for this lookup. For adjustment lookups, this column is empty and disabled. For cursive attachment, the first anchor name column always reads "Exit" and the second one "Entry" (note that the rest of the columns display exactly the same information for the first and the second glyph for cursive attachment lookups). Each glyph can have as many named anchors as needed, but only one can be used in a particular lookup. Multi-component glyphs (ligatures) have one anchor point per name per component; that is, a name corresponds to an array of anchor points in this case. The named anchors are global: if one uses the same anchor name in a different lookup, the anchor coordinates are shared between lookups and changing one will affect the other. The anchor name is initialized as 'dflt' which should work fine where only one anchor is needed. Finally, the Contextual part allows the user to specify the context in which positioning should occur. Each context has the left-hand part and a right-hand part and has to be presented in the form <left-hand part> | <right-hand part>. We have two columns in the contextual part, one represent contexts as glyph names and one for actual shapes. The glyph name representation can be edited just like glyph names in the Glyph Group Tool with the difference that there can be many names on the same line. The glyph shape representation is updated automatically. If a glyph group is used in a context, it is represented by the shape of its first member shown in a different color (e.g. blue), just like in the Substitution Tool. Semantics: if the Contextual part is not empty, all positioning described in the lookup happens only within one of the contexts specified. E.g. if there we position capA with acute and grave accents and the contexts are defined as (space - small letter) and (space - space), the actual sequences where positioning will occur are (space - capA - acute - small letter), (space - capA - grave - small letter), (space - capA - acute - space) and (space - capA - grave - space).
The Positioning Panel contains shapes and anchors for the user to move to establish positioning data. The elements the user sees on the Positioning Panel vary depending on what lookup type she is currently working on.
For a single adjustment lookup, the user sees:
For a pair adjustment lookup, the user sees:
The "original" positions are positions of glyphs put next to each other in the writing direction and with their positions not affected by OTL processing.
For a cursive attachment lookup, the user sees:
The anchor positions for the exit anchor of the first glyph and the entry anchor of the second glyph are derived from each pair.
For mark to base or mark to mark attachment lookups, the user sees:
The positions of anchors with names as specified in the Glyph Enumeration part for both glyphs are derived from each pair.
For mark to ligature attachment lookups, the user sees:
This is not a lookup as such; the results of this "lookup" are compiled into the Caret Positioning Table in GDEF. The user sees:
The default positions of width anchors divide the glyph width into equal parts.
Changing Lookup Type Selecting from the Lookup Type drop-down list changes the lookup type. The user has to confirm the lookup type change if the lookup information is not empty and there can be data loss. The transition that should be supported without data loss is mark-to-base to mark-to-ligature.
Changing lookup flags happens exactly as in Substitution Tool.
The glyph name columns for the first and second glyph are editable just like the glyph name column in the Glyph Group Tool. The glyph shape columns are updated automatically (again, just like in the Glyph Group Tool). For single adjustment lookups, the columns for the second glyph are disabled. For cursive attachment, they get updated automatically with the copy of the information for the first glyph (except for anchor names that change from "Exit" to "Entry"). One can sort the glyphs by glyph name or glyph ID or by anchor name by clicking on the column headers. The sorting of glyphs in the positioning lookups does not affect the behavior and does not have to round-trip.
The anchor names next to glyphs to be positioned are editable for attachment lookups. Once an anchor is renamed, the global anchor data is updated as well. If an anchor with exact same name existed for the exact same glyph, a dialog pops up. The user can choose to either replace edited reference with a reference to the anchor with the conflicting name, or to replace the data stored for the anchor with the new name with the data stored for the currently edited anchor, or cancel.
Positioning starts with selecting one (for single adjustment) or two shapes from the glyph shape columns in the Glyph Enumeration. The shapes together with appropriate anchors appear in the Positioning Panel. At the same time the numerical representation of the positioning data appears in the Positioning Data List. If shaping information exists for the selected pair, it will be reflected in the positions and the data that is displayed. Please not that the positioning information may come from this lookup (for 'adjustment' lookups) or from the global pool of named anchor positions (for 'attachment' lookups). For 'adjustment' lookups the contours of the "original" or default positions of the glyphs are always displayed. These positions are calculated for the scenario when glyphs are put next to each other, in the order of the writing direction (taken from the Direction field) such that all entries in the positioning data list are zeros. Of course the adjustment may happen from a different original position but we don't try to display all possible situations. The composition of the movable parts on the Positioning Panel is described above. All movements are immediately reflected in the Positioning Data List. During positioning one can:
Adding device correction starts from choosing a size from the Size Number Run. The sizes that have corrections to then are displayed in bold face. The size number is selected (highlighted); if there are device corrections at this size, the "Correct at this Size" checkbox will be already checked. The user has to check the "Device Correction Mode" checkbox to indicate that device corrections are being inputted. Un-checking the "Correct at this Size" box erases all corrections made at the selected size. When the "Device Correction Mode" box is checked, the positioning changes made on the Positioning Panel affect the selected size only. The changes are to be snapped to the grid of the selected size. (It would be great to change the display on the Positioning Panel to bitmapped at the selected size as well. It would also be great not to change the physical size of letters but to switch to bigger pixels instead). The changes are also reflected in the Size Run shape for the selected size. To exit size correction mode one deselects the current size by either clicking on a different size or un-checking the "Device Correction Mode" checkbox. When "Correct at this Size" is selected, the "snap to contour" checkboxes are disabled - they are mutually exclusive. They are also disables for single and pair adjustment lookups.
By checking the "Snap 1st to Contour" and "Snap 2nd to Contour" checkboxes the user indicates that the closest contour point is to be used instead of the actual coordinates. Snapping to contour will move the anchor to the closest contour position of the 1st or 2nd glyph respectively. The anchor points that have been snapped to glyph contours have to be stored as references to contour points. Every time the anchor is used the respective "snap to contour" box will appear checked. Any movement of the glyphs or anchors will uncheck the corresponding "snap to contour" checkbox.
The users can add or remove the contexts in the "Contexts" text filed just like they would add/remove glyph names in the Glyph Group Tool. Contexts cannot be defined for the "Caret Positioning" lookup (which does not really translate to a lookup in OTL).
Glyph names and contexts can be scrolled up and down. Long contexts can be scrolled left and right.
Positioning lookups are compiled to adequately represent all information inputted via methods described above. The information from "Ligature Caret" "lookups" is used to compile the LigCaretList table in GDEF. The contour points used are also saved in the AttachList table in GDEF for contour point management optimization.
When context is specified, two lookups are created instead of one. The first lookup is a contextual positioning lookup defining the applicability of the positioning operations by matching the defined contexts. It is the only lookup that can be included into features. If the contexts do match, the second lookup is performed on the input sequence (which is one or two glyphs between the contexts). The second lookup does all positioning operations specified by the user. The second lookup however can be accessed only via the first one, that is, in the specified context. Chaining The "Left Context" is always translated into the backtracking sequence, and "Right Context" becomes a look-ahead.
All positioning information, including device corrections and contour point numbers has to round-trip. The order of glyphs/groups in the Glyph Enumeration does not have to round-trip; the order of contexts does.
|
|||
| UI | Main | Proj window | Glyph grp | Subs tool | Posi tool | Glyph def | Proof tool | Output | |||
| Microsoft Typography | Developer | VOLT specification | |||