Home

Contact Us

General

Initiative B@bel

WSI Guidelines

Encoding

Principles

Unicode

Training

Tutorials

PUA

Conversion

Resources

Utilities

TECkit

Maps

Resources

Input

Principles

Utilities

Tutorials

Resources

Type Design

Principles

Design Tools

Formats

Resources

Font Downloads

Gentium

Doulos

IPA

Rendering

Principles

Technologies

OpenType

Graphite

Resources

Font FAQ

Links

Glossary


NRSI: Computers & Writing Systems

SIL HOME | CONTACT US

You are here: Rendering > Technologies > OpenType
Short URL: http://scripts.sil.org/VOLT_Tutorial

Microsoft VOLT Tutorial (VOLT – Visual OpenType Layout Tool)

Contents:

    Introduction
    Process of using VOLT
    Tutorial
        Step 1 – Set Glyph Properties
        Step 2 – Create Glyph Groups
        Step 3 – Create Substitution Lookups
        Step 4 – Create Positioning Lookups
        Step 5 - Create language, script, and feature tree
        Step 6 - Test the features
        Step 7 - Ship the font

Introduction

VOLT is Microsoft’s tool for adding OpenType tables to fonts. It provides a graphical UI that enables a person to visualize what is going to happen with the substitutions and positioning lookups when they are created. VOLT also includes a proofing tool that permits the functionality of the font to be tested without having to install the font in the system.

An explanation of VOLT menus and window layout are found in the article “Microsoft VOLT UI Overview”.

Information on obtaining VOLT can be found  here.

Process of using VOLT

Before starting to add OpenType tables to a font it is important to understand what features will be used with which glyphs in the font. The glyph repertoire in the font will guide the implementation of OpenType tables for the font.

The process of adding OpenType tables for VOLT is:

  • Set glyph properties.
  • Create glyph groups.
  • Create substitution lookups.
  • Create positioning lookups.
  • Create language, script, and feature tree.
  • Test the features.
  • Ship the font.

Tutorial

For the tutorial we will step through the process of using VOLT. Each step is a module in the tutorial. The SILDoulosUnicodeIPA font is used for this tutorial. The original font, before OpenType tables are added, is provided. There is a version of the font to compare your work with after each module is completed.

Download here:

VOLT Tutorial Font
Paul Nelson, 2001-09-02
Download "VOLT_TutorialFont.zip", ZIP archive, 487KB [24167 downloads]

Step 1 – Set Glyph Properties

  • Open the font you are going to work on.
    • Start the VOLT program.
    • Use the command File / Open to activate the Open File dialog.
    • Navigate to the font you will work on and click on the  Open  button.
    • Once the font has been one of the last four fonts you have worked on, you may select the font from the MRU (most recently used) font list found under the File menu selection.
  • Set font size preferences for the font.
    • Use the command Tools-Options to open the Options dialog.
    • Set the glyph size for use in grids. A size like 48 points is normally most usable.
    • Set the glyph size for use in the positioning window. 205 points is the optimal size for VOLT.
  • Set glyph properties.
    • Use the command Tools / Edit Glyphs (Ctrl + G) or  Edit Glyphs  toolbar button to open the Glyph Editor window.
    • Scroll to the end of the glyphs to find the last glyph ID for the font.
    • Use the command Import / PostScript Names to open the Import Glyph Range window.
    • Set the From Glyph value to 0.
    • Set the To Glyph value to the last glyph ID for the font.
    • Set the radio button for “Use Glyph IDs”.
    • Click  Okay .
    • Activate the Glyph Editor window.
    • If the font maker has entered PostScript names for the glyphs you will now be able to see them in the Glyph Editor window.
    • Go through all glyphs and verify the following for each
      • A usable name is available that is easily remembered during the process of making the OpenType tables. The name seen in the glyph grid will be used to reference the glyph.
      • The type assigned is correct.
        • If the glyph is a combining mark, or is treated as a combining mark in you lookups you should set the type to “mark”.
        • If you are going to position marks on a ligature you should make sure that the glyph is identified as a “ligature” type and set the correct number of components of which the ligature is formed. For example, the ffi ligature is composed of three components
      • The Unicode value(s) for the glyph are correctly assigned. If the glyph does not have a Unicode value you should set the value to “…”. Please note that Unicode values assigned to the letter will be updated in the character mapping (‘cmap’) table of the font. This makes a nice visual way to edit the ‘cmap’ table for the font.
        • It is possible to have more than one Unicode value assigned for a glyph. Just make a comma delimited list (e.g. U+0621, U+FE80). Mapping glyphs in this manner saves space in the font and makes the hinting task easier.

Exercise 1a

The following glyphs are marks.

Exercise 1b

The following glyphs are marks.

uni0361 uni203F uni031A uni031C
uni0339 uni031E uni031D uni0318
uni0319 uni0320 uni0304 uni0330
uni0334 tildecomb uni0317 acutecomb
uni030B uni0316 gravecomb uni030F
uni0324 uni0308 uni0302 uni032C
uni030C uni0306 uni032F uni033C
uni0325 uni030A uni0329 uni031F
uni033D uni02DE – special consideration given here. Unicode says this is spacing, but we use it as a combining mark
uni032A uni033A uni033B  

Step 2 – Create Glyph Groups

  • Create glyph groups for the font
    • Use the command Project / Add Glyph Group or click on the  Add Glyph Group  button (found in the bottom right of the main VOLT window).
    • Edit the name of the group. If you see that the group the named “New Group” already selected and has a box around it, you can type the group name directly. Otherwise, you need to click on the New Group item to select the group first.
    • To edit the content of the glyph group, select the glyph group to edit and
      • use the menu command Tools / Edit Glyph Group, or
      • click on the  Edit Group  button on the toolbar, or
      • double click on the group you wish to edit.
    • To delete a group, you need to select the group that you want to delete and then use the command Project / Remove Glyph Group or click on the  Remove Glyph Group  button.

Exercise 2

  • Add the following groups to the font:
    • Group name – AboveMarks
      • uni0304
      • tildecomb
      • acutecomb
      • uni030B
      • gravecomb
      • uni030F
      • uni0308
      • uni0302
      • uni030C
      • uni0306
      • uni030A
      • uni033D
    • Group name – BelowMarks
      • uni031C
      • uni0339
      • uni031E
      • uni031D
      • uni0318
      • uni0319
      • uni0320
      • uni0330
      • uni0317
      • uni0316
      • uni0324
      • uni032C
      • uni032F
      • uni033C
      • uni0325
      • uni0329
      • uni031F
      • uni032A
      • uni033A
      • uni033B
    • Group name – OverTwo
      • uni0361
    • Group name – UnderTwo
      • uni203F

Step 3 – Create Substitution Lookups

Create substitution lookups for the font.

  • Use the command Project / Add Substitution or click on the  Add Subsitutution  button (found in the bottom center of the main VOLT window).
  • Edit the name of the substitution lookup. If you see that the group the named “New Substitution” already selected and has a box around it, you can type the group name directly. Otherwise, you need to click on the New Substitution item to select the substitution lookup first.
  • To edit the content of the substitution, select the substitution lookup to edit and 1) use the menu command Tools / Edit Lookup, or 2) click on the  Edit Lookup  button on the toolbar, or 3) double click on the substitution lookup you wish to edit.
  • To delete a substitution, you need to select the substitution lookup that you want to delete and then use the command Project / Remove Lookup or click on the  Remove Lookup  button.

The lookup type will be automatically assigned based on the lookups that are entered.

Process Marks should be set to “ALL” if marks have an impact on shaping and to “NONE” if the marks should be ignored when doing substitutions. For example, the Arabic lam alef ligature should be formed correctly even if there is a mark above the lam.

The Text Flow setting only impacts the display of the substitutions. All substitutions are entered in logical order.

When making lookups for ligatures, you need to make sure you do the lookups for the larger lookups before the smaller ones. This is because the first match when searching through a lookup will terminate the search process. For example: “uni02E5 uni02E7 uni02E9 -> uni02E502E9“ must come before “uni02E5 uni02E7 -> uni02E502E7“ or you will never have the possibility of forming the uni02E502E9 from the combination of uni02E5 uni02E7 uni02E9.

Exercise 3a

Substitution Lookup – dotless [this lookup changes the dotted form to dottless form of the glyph if an AboveMark is placed on the letter, e.g. i becomes dottless i.]

i -> dotlessi

j -> unitdb5

uni0286 -> unitdb4

Context (we will trigger this substitution if the letter is followed by an above combining mark)

| <AboveMarks>

Exercise 3b

Substitution Lookup – liga

f i -> fi

f l -> fl

Exercise 3c

Substitution Lookup – ipa

uni02E5 uni02E5 uni02E6 -> uni02E502E502E6 uni02E5 uni02E5 uni02E7 -> uni02E502E502E7
uni02E5 uni02E5 uni02E8 -> uni02E502E502E8 uni02E5 uni02E5 uni02E9 -> uni02E502E502E9
uni02E5 uni02E6 uni02E5 -> uni02E502E602E5 uni02E5 uni02E6 uni02E6 -> uni02E502E602E6
uni02E5 uni02E6 uni02E7 -> uni02E502E7 uni02E5 uni02E6 uni02E8 -> uni02E502E602E8
uni02E5 uni02E6 uni02E9 -> uni02E502E602E9 uni02E5 uni02E6 -> uni02E502E6
uni02E5 uni02E7 uni02E5 -> uni02E502E702E5 uni02E5 uni02E7 uni02E6 -> uni02E502E702E6
uni02E5 uni02E7 uni02E7 -> uni02E502E702E7 uni02E5 uni02E7 uni02E8 -> uni02E502E702E8
uni02E5 uni02E7 uni02E9 -> uni02E502E9 uni02E5 uni02E7 -> uni02E502E7
uni02E5 uni02E8 uni02E5 -> uni02E502E802E5 uni02E5 uni02E8 uni02E6 -> uni02E502E802E6
uni02E5 uni02E8 uni02E7 -> uni02E502E802E7 uni02E5 uni02E8 uni02E8 -> uni02E502E802E8
uni02E5 uni02E8 uni02E9 -> uni02E502E802E9 uni02E5 uni02E8 -> uni02E502E8
uni02E5 uni02E9 uni02E5 -> uni02E502E902E5 uni02E5 uni02E9 uni02E6 -> uni02E502E902E6
uni02E5 uni02E9 uni02E7 -> uni02E502E902E7 uni02E5 uni02E9 uni02E8 -> uni02E502E902E8
uni02E5 uni02E9 uni02E9 -> uni02E502E902E9 uni02E5 uni02E9 -> uni02E502E9
uni02E6 uni02E5 uni02E5 -> uni02E602E502E5 uni02E6 uni02E5 uni02E6 -> uni02E602E502E6
uni02E6 uni02E5 uni02E7 -> uni02E602E502E7 uni02E6 uni02E5 uni02E8 -> uni02E602E502E8
uni02E6 uni02E5 uni02E9 -> uni02E602E502E9 uni02E6 uni02E5 -> uni02E602E5
uni02E6 uni02E6 uni02E5 -> uni02E602E602E5 uni02E6 uni02E6 uni02E7 -> uni02E602E602E7
uni02E6 uni02E6 uni02E8 -> uni02E602E602E8 uni02E6 uni02E6 uni02E9 -> uni02E602E602E9
uni02E6 uni02E7 uni02E5 -> uni02E602E702E5 uni02E6 uni02E7 uni02E6 -> uni02E602E702E6
uni02E6 uni02E7 uni02E7 -> uni02E602E702E7 uni02E6 uni02E7 uni02E8 -> uni02E602E8
uni02E6 uni02E7 uni02E9 -> uni02E602E702E9 uni02E6 uni02E7 -> uni02E602E7
uni02E6 uni02E8 uni02E5 -> uni02E602E802E5 uni02E6 uni02E8 uni02E6 -> uni02E602E802E6
uni02E6 uni02E8 uni02E7 -> uni02E602E802E7 uni02E6 uni02E8 uni02E8 -> uni02E602E802E8
uni02E6 uni02E8 uni02E9 -> uni02E602E802E9 uni02E6 uni02E8 -> uni02E602E8
uni02E6 uni02E9 uni02E5 -> uni02E602E902E5 uni02E6 uni02E9 uni02E6 -> uni02E602E902E6
uni02E6 uni02E9 uni02E7 -> uni02E602E902E7 uni02E6 uni02E9 uni02E8 -> uni02E602E902E8
uni02E6 uni02E9 uni02E9 -> uni02E602E902E9 uni02E6 uni02E9 -> uni02E602E9
uni02E7 uni02E5 uni02E5 -> uni02E702E502E5 uni02E7 uni02E5 uni02E6 -> uni02E702E502E6
uni02E7 uni02E5 uni02E7 -> uni02E702E502E7 uni02E7 uni02E5 uni02E8 -> uni02E702E502E8
uni02E7 uni02E5 uni02E9 -> uni02E702E502E9 uni02E7 uni02E5 -> uni02E702E5
uni02E7 uni02E6 uni02E5 -> uni02E702E5 uni02E7 uni02E6 uni02E6 -> uni02E702E602E6
uni02E7 uni02E6 uni02E7 -> uni02E702E602E7 uni02E7 uni02E6 uni02E8 -> uni02E702E602E8
uni02E7 uni02E6 uni02E9 -> uni02E702E602E9 uni02E7 uni02E6 -> uni02E702E6
uni02E7 uni02E7 uni02E5 -> uni02E702E702E5 uni02E7 uni02E7 uni02E6 -> uni02E702E702E6
uni02E7 uni02E7 uni02E8 -> uni02E702E702E8 uni02E7 uni02E7 uni02E9 -> uni02E702E702E9
uni02E7 uni02E8 uni02E5 -> uni02E702E802E5 uni02E7 uni02E8 uni02E6 -> uni02E702E802E6
uni02E7 uni02E8 uni02E7 -> uni02E702E802E7 uni02E7 uni02E8 uni02E8 -> uni02E702E802E8
uni02E7 uni02E8 uni02E9 -> uni02E702E9 uni02E7 uni02E8 -> uni02E702E8
uni02E7 uni02E9 uni02E5 -> uni02E702E902E5 uni02E7 uni02E9 uni02E6 -> uni02E702E902E6
uni02E7 uni02E9 uni02E7 -> uni02E702E902E7 uni02E7 uni02E9 uni02E8 -> uni02E702E902E8
uni02E7 uni02E9 uni02E9 -> uni02E702E902E9 uni02E7 uni02E9 -> uni02E702E9
uni02E8 uni02E5 uni02E5 -> uni02E802E502E5 uni02E8 uni02E5 uni02E6 -> uni02E802E502E6
uni02E8 uni02E5 uni02E7 -> uni02E802E502E7 uni02E8 uni02E5 uni02E8 -> uni02E802E502E8
uni02E8 uni02E5 uni02E9 -> uni02E802E502E9 uni02E8 uni02E5 -> uni02E802E5
uni02E8 uni02E6 uni02E5 -> uni02E802E602E5 uni02E8 uni02E6 uni02E6 -> uni02E802E602E6
uni02E8 uni02E6 uni02E7 -> uni02E802E602E7 uni02E8 uni02E6 uni02E8 -> uni02E802E602E8
uni02E8 uni02E6 uni02E9 -> uni02E802E602E9 uni02E8 uni02E6 -> uni02E802E6
uni02E8 uni02E7 uni02E5 -> uni02E802E702E5 uni02E8 uni02E7 uni02E6 -> uni02E802E6
uni02E8 uni02E7 uni02E7 -> uni02E802E702E7 uni02E8 uni02E7 uni02E8 -> uni02E802E702E8
uni02E8 uni02E7 uni02E9 -> uni02E802E702E9 uni02E8 uni02E7 -> uni02E802E7
uni02E8 uni02E8 uni02E5 -> uni02E802E802E5 uni02E8 uni02E8 uni02E6 -> uni02E802E802E6
uni02E8 uni02E8 uni02E7 -> uni02E802E802E7 uni02E8 uni02E8 uni02E9 -> uni02E802E802E9
uni02E8 uni02E9 -> uni02E802E9 uni02E8 uni02E9 uni02E5 -> uni02E802E902E5
uni02E8 uni02E9 uni02E6 -> uni02E802E902E6 uni02E8 uni02E9 uni02E7 -> uni02E802E902E7
uni02E8 uni02E9 uni02E8 -> uni02E802E902E8 uni02E8 uni02E9 uni02E9 -> uni02E802E902E9
uni02E9 uni02E5 uni02E5 -> uni02E902E502E5 uni02E9 uni02E5 uni02E6 -> uni02E902E502E6
uni02E9 uni02E5 uni02E7 -> uni02E902E502E7 uni02E9 uni02E5 uni02E8 -> uni02E902E502E8
uni02E9 uni02E5 uni02E9 -> uni02E902E502E9 uni02E9 uni02E5 -> uni02E902E5
uni02E9 uni02E6 uni02E5 -> uni02E902E602E5 uni02E9 uni02E6 uni02E6 -> uni02E902E602E6
uni02E9 uni02E6 uni02E7 -> uni02E902E602E7 uni02E9 uni02E6 uni02E8 -> uni02E902E602E8
uni02E9 uni02E6 uni02E9 -> uni02E902E602E9 uni02E9 uni02E6 -> uni02E902E6
uni02E9 uni02E7 uni02E5 -> uni02E902E5 uni02E9 uni02E7 uni02E6 -> uni02E902E702E6
uni02E9 uni02E7 uni02E7 -> uni02E902E702E7 uni02E9 uni02E7 uni02E8 -> uni02E902E702E8
uni02E9 uni02E7 uni02E9 -> uni02E902E702E9 uni02E9 uni02E7 -> uni02E902E7
uni02E9 uni02E8 uni02E5 -> uni02E902E802E5 uni02E9 uni02E8 uni02E6 -> uni02E902E802E6
uni02E9 uni02E8 uni02E7 -> uni02E902E7 uni02E9 uni02E8 uni02E8 -> uni02E902E802E8
uni02E9 uni02E8 uni02E9 -> uni02E902E802E9 uni02E9 uni02E8 -> uni02E902E8
uni02E9 uni02E9 uni02E5 -> uni02E902E902E5 uni02E9 uni02E9 uni02E6 -> uni02E902E902E6
uni02E9 uni02E9 uni02E7 -> uni02E902E902E7 uni02E9 uni02E9 uni02E8 -> uni02E902E902E8

Step 4 – Create Positioning Lookups

  • Create positioning lookups for the font.
    • Use the command Project /Add Positioning or click on the  Add Positioning  button (found in the bottom center of the main VOLT window).
    • Edit the name of the positioning lookup. If you see that the group the named “New Positioning” already selected and has a box around it, you can type the group name directly. Otherwise, you need to click on the  New Positioning  item to select the positioning lookup first.
    • To edit the content of the positioning, select the positioning lookup to edit and 1) use the menu command Tools / Edit Lookup, or 2) click on the  Edit Lookup  button on the toolbar, or 3) double click on the positioning lookup you wish to edit.
    • To delete a positioning, you need to select the positioning lookup that you want to delete and then use the command Project Remove Lookup or click on the   Remove Lookup  button.

Strategy for Anchor Attachments – A letter may have several anchor attachment points, depending on how various classes of marks interact with the character. Anchor attachment points for the base glyph must have unique anchor names.

The “Position First” column will contain a list of the base glyphs. The “Position Second” will contain a list of the marks that will be anchored to the base glyphs.

To make the process of positioning marks on a glyph easier, it is best to put all members of a class of marks into a group. For this tutorial, this was done when the AboveMarks and BelowMarks groups were created. To use a group in VOLT, the name of the group is put between “<” and “>”, e.g. “<AboveMarks>”.

All marks in the group should be adjusted first to allow for a single anchor on the base glyph to be used to correctly position the mark. After the mark is positioned, the mark should be locked in place.

Once the marks have been locked into place it will be straight forward to concentrate on positioning the anchor points on the base glyph.

Exercise 4a

  • Create a new positioning lookup and give it the name “Mark”.
  • Set the positioning type to “Anchor Attachment” in the dropdown list.
  • In the “Position First” column type in the list of base glyphs you will use.
Eth eth Thorn thorn
A B C D
E F G H
I J K L
M N O P
Q R S T
U V W X
Y Z a b
c d e f
g h i j
k l m n
o p q r
s t u v
w x y z
Ccedilla ccedilla germandbls AE
ae Oslash oslash OE
oe dotlessi uni0250 uni0251
uni0252 uni0253 uni0299 beta
uni0254 uni0255 uni0257 uni0256
uni0259 uni0258 uni025B uni025C
uni025E florin uni0284 uni0261
uni0260 uni0262 uni029B uni0266
uni0267 hbar uni0265 uni029C
uni0268 unitbd4 uni0264 unitbd5
uni025F uni029D uni029E uni026D
uni026C uni026B uni026E uni029F
uni0271 uni026F uni0270 eng
uni0273 uni0272 uni0274 uni0278
theta uni0276 uni0298 uni0279
uni027A uni027D uni027E uni027B
uni0280 uni0281 uni0282 uni0283
uni0288 uni0289 uni028B uni028A
uni028C uni0263 uni0264 uni028D
chi uni028E uni028F uni0291
uni0290 uni0292 uni0294 uni02A1
uni0295 uni02A2 uni01C3 uni01C2
uni01C1 Aacute aacute Acircumflex
acircumflex Adieresis adieresis Agrave
agrave Aring aring Atilde
atilde Eacute eacute Ecircumflex
ecircumflex Edieresis edieresis Egrave
egrave Iacute iacute Icircumflex
icircumflex Idieresis idieresis Igrave
igrave Ntilde ntilde Oacute
oacute Ocircumflex ocircumflex Odieresis
odieresis Ograve ograve Otilde
otilde Scaron scaron Uacute
uacute Ucircumflex ucircumflex Udieresis
udieresis Ugrave ugrave Yacute
yactue Ydieresis ydieresis Zcaron
zcaron      

  • In the “Position Second” column add the AboveMarks group (“<AboveMarks>”) under Name.
  • change the name of the Anchor from “default” to “above”
  • In the “Position Second” column add the BelowMarks group under Name.
  • change the name of the Anchor from “default” to “below”
  • Select the “Eth” and “<AboveMarks>”. In the preview window you will see the Eth, the first letter in your <AboveMarks> group and a brown “+”. The “+” is the anchor point.
  • Check on the 1st glyph. This will lock the anchor in place and make it easier to adjust the marks. You will need to uncheck this when you get ready to set the anchor points for the base glyph.
  • Click on the mark and drag it to the location that will allow it to best be anchored to base glyphs. This will normally be centered above (<AboveMarks>) or below (<BelowMarks>) the “+”. Of course, the positioning depends on the behavior required for the language. For example, the HEBREW DAGESH should probably be centered on the “+” anchor location.
    • You can also set the position of the glyph on the anchor location by editing the dx and dy for the 2nd glyph (bottom right).
    • For this tutorial you will find the <AboveMarks> will show the “uni0304” glyph first in the list, and the <BelowMarks> will show the “uni031C”.
  • Move through the rest of the anchors in the group. In the event that your font is designed like the SILDoulosUnicodeIPA font you can use the “All 2nd same” button to set the rest of the group to the same location. You should find that dx of -260 and dy of 465 will work well for AboveMarks. For BelowMarks a dx of -260 and dy of 0 should be close.
  • When all of the combining marks have been positioned, make sure to check on the checkbox “2nd” for each glyph in the group. This will help keep the marks from moving when you position the anchor point on the base glyphs.
  • Once you have completed setting the locations of all mark glyphs, it is time to go through all base glyphs to set their anchors.
  • Set the position of the anchor for the base by clicking on the “+” and positioning it where it looks best for anchoring the mark or group of marks. You will see that the dx and dy for the 1st Glyph (bottom right) are changed. You can also change the anchor location by editing the dx and dy amounts directly.

Exercise 4b

  • Create a new positioning lookup and give it the name “RhoetoHook”.
  • Set the positioning type to “Anchor Attachment” in the dropdown list.
  • In the “Position First” column type in the list of base glyphs you will use.
a e i o
u y ae oslash
oe dotlessi uni0250 uni0251
uni0252 uni0254 uni0259 uni0258
uni025B uni025C uni025E uni0268
uni026A uni0275 uni0276 uni0289
uni028A uni028C uni0264 aacute
acircumflex adieeresis agrave aring
atilde eacute ecircumflex edieresis
egrave iacute icircumflex idieresis
igrave oacute ocircumflex odieresis
ograve otilde uacute ucircumflex
udieresis ugrave yacute ydieresis

  • In the “Position Second” column add the uni02DE glyph under Name.
  • change the name of the Anchor from “default” to “rhook”
  • The strategy for setting the rhoeto hook to the anchor location is to drag the mark to a location where the connecting part of the rhoeto hook is on the “+”. Under the 2nd Glyph you should see something like a dx of -90 and dy of 375.
  • Check on the checkbox for 2nd to lock the positioning in place after you are happy with the location.
  • The process of setting the anchor location on the first glyph is next. Simply drag the “+” to the location on each letter where the rhoeto hook should attach.

Exercise 4c

  • Create a new positioning lookup and give it the name “MidMark”.
  • Set the positioning type to “Anchor Attachment” in the dropdown list.
  • In the “Position First” column type in the list of base glyphs you will use.
    • eth
    • d
    • l
    • r
    • s
    • t
    • z
    • uni027E
    • uni0283
    • uni0292
    • scaron
    • zcaron
  • In the “Position Second” column add the uni0334 glyph under Name. If there were additional middle positioning combining marks this would be a great candidate for an additional group named something like “<MiddleMarks>”.
  • change the name of the Anchor from “default” to “middle”
  • The strategy for setting the middle mark to the anchor location is to drag the mark to a location where the is centered horizontally and vertically on the cross point of the “+”. Under the 2nd Glyph you should see something like a dx of -260 and dy of 390.
  • Check on the checkbox for 2nd to lock the positioning in place after you are happy with the location.
  • The process of setting the anchor location on the first glyph is next. Simply drag the “+” to the location on each letter where the middle mark(s) should attach.

Exercise 4d

  • Create a new positioning lookup and give it the name “MkMkAbove”.
  • Set the positioning type to “Anchor Attachment” in the dropdown list.
  • In the “Position First” column type in “<AboveMarks>”. In this lookup, we are setting up marks to anchor in a chaining fashion on top of another mark. Thus, <AboveMarks> will be both the base glyphs and the combining glyphs.
  • In the “Position Second” column add the AboveMarks group (“<AboveMarks>”) under Name.
  • change the name of the Anchor from “default” to “above”
  • You will notice that the 2nd glyphs already have their positioning set.
  • The strategy for setting the mark to mark above is to place the anchor centered above the base mark. Under the 1st Glyph you should see a dx of -260 and dy of 685. If your font has been created like the SILDoulosUnicodeIPA font you should be able to use the “All 1st Same” button to set the same value for the entire group.

Exercise 4e

  • Create a new positioning lookup and give it the name “MkMkBelow”.
  • Set the positioning type to “Anchor Attachment” in the dropdown list.
  • In the “Position First” column type in “<BelowMarks>”. In this lookup, we are setting up marks to anchor in a chaining fashion on top of another mark. Thus, < BelowMarks > will be both the base glyphs and the combining glyphs.
  • In the “Position Second” column add the BelowMarks group (“<BelowMarks >”) under Name.
  • change the name of the Anchor from “default” to “below”
  • You will notice that the 2nd glyphs already have their positioning set.
  • The strategy for setting the mark to mark above is to place the anchor centered below the base mark. Under the 1st Glyph you should see a dx of -260 and dy of -225. If your font has been created like the SILDoulosUnicodeIPA font you should be able to use the “All 1st Same” button to set the same value for the entire group.

Step 5 - Create language, script, and feature tree

This step will be the glue that allows the lookups you have defined to work when the font is called by an OpenType engine.

  • Add a new script by using the command Project / Add Script, or by clicking on the  Add Script  button in the bottom left of the main VOLT window.
  • Rename “New Script <>” to “<latn>”. When you hit enter the name will resolve to “Latin <latn>”. The four characters between “<” and “>” are the tag that is saved in the font. If you need to use a tag that has not yet been registered you may type the four letter tag in this manner. You will notice that a language of “Default <dflt>” was added at the same time.
  • If you need to support several language behaviors for the same script, select the script and then use the command Project / Add Language, or click on the  Add Language  button in the bottom left of the main VOLT window. Then, rename “New Language <>” to the tag for the language you need.
  • Select the Default language.
  • Add a new feature for the writing system by using the command Project / Add Feature. You can also click on the  Add Feature  button at the bottom left of the main VOLT window.
  • Rename “New Feature <>” to the desired feature, e.g. “<ccmp>”. When you hit enter the name will resolve.

Exercise 5

  • For this tutorial add the following script:
    • latn
  • For this tutorial add the following language:
    • dflt
  • For this tutorial add the following features. The fact that the features are sorted alphabetically should not cause alarm. It is the order of the lookups that is important for the order of implementation.
    • ccmp
    • liga
    • mark
    • mkmk
  • Drag “dotless” lookup to the <ccmp> feature.
  • Drag “ipa” lookup to the <ccmp> feature
  • Drag “liga” lookup to the <liga> feature
  • Drag “Mark” lookup to the <mark> feature
  • Drag “RhoetoHook” lookup to the <mark> feature
  • Drag “MidMark” lookup to the <mark> feature
  • Drag “MkMkAbove” lookup to the <mkmk> feature
  • Drag “MkMkBelow” lookup to the <mkmk> feature

Step 6 - Test the features

Testing the features and lookups you have is important to make sure the font works as you have designed.

  • Click on the  Compile  button to compile the font.
  • Open the Proofing Tool by using the command Tools / Proofing Tool (F5) or by clicking on the  Proofing Tool  button on the toolbar.
  • In the VOLT Proofing Tool window, set the Script to “Latin” and the Language to “Default”
  • In the edit line type “uni02E5 uni02E5 uni02E7”
  • Click on the  Complete  button and see the resulting shape.
  • Click on the  Restart  button and use  Next Glyph  and  Next Lookup  to see what is happening.

Learning how to debug your font with the VOLT Proofing tool will save a lot of time when tracking down a problem that might exist in your font.

Step 7 - Ship the font

When your font is sufficiently tested and you are ready to ship it to your user you can save a copy of your font that does not have the VOLT working tables.

  • Use the command File / Ship Font. Make sure that you are not going to strip the working tables from your only working version of the font. That will require you to rebuild your font again.

© 2003-2014 SIL International, all rights reserved, unless otherwise noted elsewhere on this page.
Provided by SIL's Non-Roman Script Initiative. Contact us at .