<HTML> <HEAD> <!-- Created with AOLpress/2.0 --> <!-- AP: Created on: 1-Mar-2003 --> <!-- AP: Last modified: 22-Feb-2007 --> <TITLE>Viewing and Editing truetype instructions in FontForge.</TITLE> <LINK REL="icon" href="ffanvil16.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="194" HEIGHT="320" 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 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 edit the cvt table.) </DIV> </BODY></HTML>