<HTML> <HEAD> <!-- Created with AOLpress/2.0 --> <!-- AP: Created on: 1-Mar-2003 --> <!-- AP: Last modified: 13-Jan-2008 --> <TITLE>Viewing and Editing truetype instructions in FontForge.</TITLE> <LINK REL="icon" href="fftype16.png"> <LINK REL="stylesheet" TYPE="text/css" HREF="FontForge.css"> </HEAD> <BODY> <DIV id="in"> <TABLE ALIGN=RIGHT> <TR> <TD><IMG SRC="ttfinstrs-view.png" WIDTH="277" HEIGHT="280"><BR> <IMG SRC="ttfinstrs-edit.png" WIDTH="277" HEIGHT="280"></TD> </TR> </TABLE> <H1 ALIGN=Center> Viewing and Editing truetype instructions in FontForge. </H1> <UL> <LI> <A HREF="http://developer.apple.com/fonts/TTRefMan/RM03/Chap3.html">Apple's overview on instructing glyphs</A> <LI> <A HREF="http://developer.apple.com/fonts/TTRefMan/RM05/Chap5.html">Apple's list of truetype instructions</A> <LI> <A HREF="http://developer.apple.com/fonts/TTRefMan/RM04/Chap4.html">Apple's description of the truetype graphics state</A> <LI> <A HREF="http://developer.apple.com/fonts/TTRefMan/RM07/appendixA.html">Apple's summary of truetype instructions</A> </UL> <P> I shall not attempt to describe the mechanics of instructing truetype, if you want to understand it I refer you to the above links. (<A HREF="http://www.microsoft.com/typography/OTSPEC/ttinst.htm">Microsoft has a similar set </A>in but they are in word format). <P> This dialog shows the instructions associated with a glyph or truetype table (like fpgm or prep). If you move your mouse cursor over one of the instructions a brief help message will pop up describing that instruction. If you press the [Edit] button the dlg will change and you will be presented with a editable textarea containing the same instructions. You may modify these to your heart's content. Pressing the [Parse] will parse your modifications and (if they parse) return you to the "help" mode. <P> Instructions like MIRP may be entered either in FontForge's peculiar (but marginally more mnemonic) style: <CODE>MIRP[rnd,white] </CODE>or as <CODE>MIRP[00110]</CODE>, and <CODE>PUSHB_1</CODE> may be <CODE>PUSHB[000]</CODE>. <P> You may also include an stack arguments on the same line as the instruction and FontForge will convert them into the appropriate pushes. So... <BLOCKQUOTE> <PRE>5 SRP0 </PRE> </BLOCKQUOTE> <P> is equivalent to <BLOCKQUOTE> <PRE>PUSHB_1 5 SRP0 </PRE> </BLOCKQUOTE> <P> You may also use the expression <CODE>cvt(<val>)</CODE> instead of a number. This will be replaced by the index in the 'cvt ' table of an entry which is (within one em-unit of) <val>. So <CODE>cvt(100)</CODE> would return the index in 'cvt ' of 100. If there is no such entry, FontForge will create one. <P> When editing DELTA* instructions you might want to use the syntax: <BLOCKQUOTE> <PRE>PUSHB_3 6@12 8 1 DELTAP2 </PRE> </BLOCKQUOTE> <P> This means: Move point 8 by six delta-steps at 37 ppem (that's not clear at first glance - assuming delta_base is 9, DELTAP2 works from 25 ppem to 25+15 ppem, in this example it's 25+12 ppem). So it's just a way of constructing an argument byte for DELTAP/C. <H2> <IMG SRC="editcvt.png" WIDTH="212" HEIGHT="376" ALIGN="Right">Editing the '<A NAME="cvt">cvt</A> ' table directly </H2> <P> This dialog shows the initial contents of the 'cvt ' table (before it has been modified by the 'prep' program). It is simply a list of signed 16bit values. You may change any value by clicking on it and typing a new value. You may also attach comments to entries, this can be helpful in reminding yourself what this index is used for. You may add new entries (at the end) with the [Change Length] button. <P> (You may also use the "<CODE>cvt(<val>)</CODE>" notation described above to add entries to the cvt table without using this dialog.) </DIV> </BODY></HTML>