This is an archive of the original site, preserved as a historical reference. Some of the content is outdated. Please consult our other sites for more current information:, ScriptSource, FDBP, and silfontdev


Contact Us


Initiative B@bel

WSI Guidelines


















Type Design


Design Tools



Font Downloads










Font FAQ



Computers & Writing Systems


You are here: Rendering > Resources
Short URL:

SIL Reprise download, installation and use

Bob Hallissy, 2009-09-07

Before trying out Reprise ...

Please be sure to review the requirements and limitations documented on the Reprise home page.


The Reprise program carries no warranties of any kind. Use at your own risk.

If you find or fix bugs then the author would appreciate hearing from you. See support for contact information.

Download and installation

You will not only need to download and install Reprise, but you may have to update your TECkit compiler.

Standalone Windows Executable

If you want to use the standalone Windows executable, simply download it and put it in a folder on your PATH somewhere.

Reprise v1.3 Windows executable
Bob Hallissy, 2009-09-07
Download "Reprise.exe", Windows application, 3MB [2325 downloads]


The downloadable Reprise EXE file is not an installer or setup program — it is the actual Reprise program. Simply put the EXE in a directory (such as Windows) that is named on your PATH variable. To find out what directories are named on your path, start a command window and type PATH  Return . The directories will be delimited by semicolons.

Installing the Perl source

It is our intention to release the source for those who want to use their own Perl installation rather than the Windows EXE, but we haven't done that yet. If this is important to you please contact me.

If you don't have a make program, you might see if Microsoft still offers their older  NMAKE15.EXE.

Update TECkit

If you intend to use Reprise with TECkit-syntax mapping files, you will need a 2005 or later version of the TECkit package. Install the package in such a way that both the compiler and sfconv program are somewhere on your PATH.

Usage overview

The following steps are involved in using Reprise

  1. It will be most convenient if you create a "project" directory somewhere on your system and copy your TECkit mapping source (.map or .xml) and your legacy font to this directory.
  2. Using a Command window, run Reprise.exe with appropriate parameters (see below). The output font from this step is a VOLT project file. Note: this is not the final working font — you must continue with the next steps.
  3. Assuming you want OpenType smarts in your font, open the output font in Microsoft VOLT. Click  Compile  and  Save . Hopefully you won't have any compile errors.
  4. If you want to include Graphite smarts and you specified the -g option to Reprise, now is the time to run the Graphite compiler.
  5. Test the results.

Reprise command-line syntax

Please note that Reprise is a command line utility. To use it you need to open up a Command window and change directories to your project directory. You can set up shortcuts to the program if you like, but there is no pretty graphical user interface.

Reprise [-b blocks] [-c codepages] [-g gdlfile ] [-s num] [-t tagsfile] [-o] [-n fontname] [-v voltfile] mappingfile legacyfont.ttf newfont.ttf

Reprise reads the mapping file (UTR22 or TECkit) and a legacy-encoded TrueType font and
produces a new Unicode-encoded TrueType font containing VOLT project
source. In the process it can also write GDL source file.

Note that the mapping file must be the original source and not compiled.
For TECkit-syntax maps, the TECkit_compiler must be on your PATH.


-b sets Unicode block information in font's  OS/2 table. blocks is 32 hex chars. Reprise tries to guess the correct block information but you can use this option to override it.

-c sets codepage information in font's  OS/2 table. codepages 16 hex chars. By default Reprise assumes the font is an Encore-based font and probably supports codepage 1252.

For help in calculating the values for -b and -c parameters, see OS/2 table Range bit calculation workbook.

-g If you want Reprise to build Graphite source, specify the name of GDL source file to create using this option.

-n Normally Reprise renames the font by appending the word "Reprise". You can override this behavior by specifying this option. If fontname does not include %F then fontname becomes the font's family name. Otherwise the font's original family name is inserted where the %F is and the result is the new family name. (NB: When using %F from within batch files, be sure to double the % to prevent it being interpreted by command processor)

-o The Graphite compiler (version 1.9 and earlier, at least) uses incorrect "built-in" names for certain glyphs. If you intend to compile your font with this compiler then use this option so old Adobe glyph names are used in the GDL source.

-s Mapping descriptions sometimes have complex contexts including unlimited repetition of terms. In regular expression parlance unlimited repetition is indicated by a * or +. When building OpenType and Graphite smarts, however, an upper bound on such repetition must be set. Reprise defaults to 5, but you can override this default using this option. Larger values create larger fonts, so use the smallest value possible for your data.

-t name of VOLT tags file (default "C:Program FilesMicrosoft VOLTTAGS.txt")

-v The output font built by Reprise always has VOLT source in it ready to be compiled by VOLT. This option requests Reprise to also save that source in an external file.

Reprise error and warning messages

Here are some of the messages you may get from Reprise.

Mapping does not specify whether it wants NFC or NFD. Therefore the Reprised font may not work as well as it could.

Your mapping really should be designed so that the Unicode-to-legacy rules consistently expect exclusively NFC or NFD text. Mappings that have a mix of composed and decomposed rules are asking for trouble. Assuming the mapping is designed to exclusively use NFC (or NFD), then it should announce that in the header lines. This information is used by Reprise to help the resultant font render text more reliably. For more information on NFC and NFD, see To compose or decompose, that is the question.

Unequal cardinality in TECkit rule at line ...

A TECkit rule uses classes on both sides, but the classes don't have the same number of elements. This is an error in the TECkit mapping that needs to be fixed.

Ambiguous Unicode > Byte TECkit rule at line ...

A TECkit rule maps a single Unicode string to a multi-element class of legacy characters. This is an error in the TECkit mapping that needs to be fixed.

Conflicting mapping rules for unicode sequence / context ...

More than one mapping rule maps from the exact same Unicode sequence, in the same context, to legacy characters, but they map to different legacy characters. This is an error in the TECkit mapping that needs to be fixed.

Legacy char codes referenced in mapping but not present in font (hex)

This warning enumerates legacy character codes that are referenced in the mapping file but which do not exist in the legacy font. (As of ver 0.7, Reprise no longer issue this error for control characters 00 .. 1F which are normally missing from fonts anyway.)

Most likely this message indicates an error in your mapping table.

Unicode chars referenced in mapping but not present in font

Similar to above, but this warning enumerates Unicode characters that are referenced in the mapping file but for which the corresponding legacy code does not exist in the font. The most likely cause is the mapping file does not have non-contextual rules that map the given Unicode characters to legacy codes. This is an error in the TECkit mapping that should be fixed.


If your font doesn't work, here are some things to check out.

Did you compile your font after running Reprise?

The output of Reprise is not a finished font — you must compile and save your font in VOLT if you want Uniscribe or OpenType support in your font, and with GrCompiler if you want Graphite support.

If the VOLT or Graphite compile fails

Please try first to figure out why it failed. If it is a postscript() failure in GDL, try the -o option on Reprise.

If the resultant font doesn't render properly

Make sure you have gone through all the appropriate compile steps. Also remember that Uniscribe ignores OpenType logic for PUA characters.

If the rendering problems are not related to PUA OpenType, then you should do an important test before contacting me. Please pass your Unicode test back through TECkit to generate legacy data and render that with your original legacy font. If that also renders incorrectly then there is a problem with your mapping description which needs to be fixed before we can expect Reprise to work correctly.

Another thing to check is the header flags defined in your mapping file. If your Unicode to legacy mapping rules assume one of Unicode's normal forms (i.e., NFD or NFC) then your mapping file should specify the appropriate normalization values (for TECkit either ExpectsNFD or ExpectsNFC; for UTR22 either NFD or NFC) in the header flags. For more information on NFC and NFD, see To compose or decompose, that is the question.

If you are seeing font substitution/fallback (glyphs from a different font are being used), boxes or missing glyphs, it may be that Reprise has made poor choices for the Unicode and Codepage Range bits of the  OS/2 table. Try explicitly setting these with the -b and -c options. For help in calculating the values for these parameters see OS/2 table Range bit calculation workbook.


I am interested in hearing from you and will try to resolve problems that are reported to me. However, before contacting me please try the troubleshooting tips above.

If needed, you can send feedback to me via a webform here. Alternatively, my email address looks like Вob_Нallissy@ѕі (but cutting & pasting from this window into your emailer won't result in a working address — you will need to type it into your email program.)

Change history

VersionDate postedWhat's new
1.3 2009-06-10

Many bug fixes:

Glyph names for ligatures were messed up, generating things like "uni0308acutecomb" and "L0334" rather than "uni0308_acutecomb" and "L_uni0334".

ExpectsNFD sometimes generated decomposition rules that included non-existant glyphs

CMAP wasn't right if mapping included chars outside BMP.

Sometimes crashed on glyphs with no outlines, e.g., em-space.

If -n option had spaces, then name ID 6 (postscript fontname) did also.

Replacement post table didn't have updated name for glyph 3.
1.1 2007-02-26 Font was corrupt if mapping specified neither NFD nor NFC
1.0 2007-02-14 Many enhancements and bug fixes
0.7 beta 2006-05-23

Remove warnings for missing characters 00 .. 1F

Now handles contexts which have more than one context-ref of the same Name.
0.6 beta 2006-04-04

Correct bug from long fontnames

Now takes an educated guess when no -c supplied
0.5 beta 2006-03-20

Better support for varying Unicode equivalent sequences

GDL includes comments

Rule order is closer to TECkit interpretation.
0.4 beta 2006-03-07 Major changes; now supports TECkit syntax

© 2003-2024 SIL International, all rights reserved, unless otherwise noted elsewhere on this page.
Provided by SIL's Writing Systems Technology team (formerly known as NRSI). Read our Privacy Policy. Contact us here.