The TTIComp tool lets you add instructions to a TrueType font through a .TTI file containing something that looks like C code. You will need to know some C and to know something about TrueType instructions. You can take a look at the examples, and browse the tutorial for more information.

Examples

This is an example of what a TTI file may look like:

// This is the instruction file for Garogier.ttf

#input "../Garogier.ttf"
#output "Garogier_hinted.ttf"

#gasp AI
#twilight 1
#stack 100

#cvt base30: -30 \
    xHeight30: 830 \
\
    difference30: 30 \
\
    stemBegin: \
    stem40: 40 stem150: 150 \
    stemEnd:
   
void prep() {
    setVectorsY();
   
    fixed oldXHeight = getCVT(xHeight);
    fixed newXHeight = roundBlack(oldXHeight);
    setCVT(xHeight, newXHeight);
   
    fixed diff30 = getCVT(difference30);

    if (getPPEM() < 40u) {
        setCVT(base30, 0.0);
        setCVT(xHeight30, newXHeight);       
    } else {
        setCVT(xHeight30, newXHeight + diff30);
    }
   
    uint ppemY = getPPEM();
    setVectorsX();
    if (getPPEM() > ppemY)
        setVectorsY();

    // pixel size stems
    while (cur < stemEnd) {
        fixed size = getCVT(cur);
        const fixed attenuation = .5;
        if (size<2.0)
            size = size*((2.0-attenuation)/2.0) + attenuation;
        setCVT(cur, size);
        cur = cur + 1u;
    }
    setCVTCutIn(50.0);
}

/*** figures ***/

void zero() {
    //lsb
    roundPoint(1u,1u);
    moveDistanceBlack(1u,1u, 1u,23u, stem150);
    moveDistanceRoundGrey(1u,1u, 1u,7u);
    roundPoint(1u,7u);
    moveDistanceBlack(1u,7u, 1u,17u, stem150);
    // rsb
    moveDistanceRoundWhite(1u,7u, 1u,25u);
    interpolateX();
   
    setVectorsY();
    movePoint(1u,10u, base30);
    moveDistanceBlack(1u,10u, 1u,14u, stem40);
    movePoint(1u,4u, xHeight30);
    moveDistanceBlack(1u,4u, 1u,20u, stem40);
    interpolateY();
}

If this does not scare you, but rather interests you, you may want to take a look at these files, which include source .TTF and .TTI files for two fonts made by me (but not finished yet).

Download

You may download a MS Windows binary (i.e., a working program file) of TTIComp here. It has been confirmed to work on Windows 2000 and Windows 95; other 32 bit Windowses (98, ME, XP etc.) should work as well. The source is also available.