# Changes (Enhancements & Bug Fixes)

Changes since the last release may be found by performing a "cvs log" command on the file stamp.c.

- 24-June-2005
  - Improvements in the way type42 fonts where handled in printing.
  - Fix a crash when parsing mangled cff files
  - Marvelous triple bug:
    - Adobe's Tech Note 5176 (cff format) says that a private dict is required. They mean it's required in a type1 font.
    - Because of this I put a null private dict entry into my cid cff fonts.
    - ghostview finds the null private dict entry and tries to read data from it even though it is of 0 length.
  - Add postscript code necessary for loading a cff font to my cff font output.
  - Fix some uninitialized variables in the display dlg.
  - We didn't get DSC pages properly when printing a CID keyed font.
  - The default (notdef) glyph generated by my palm output routines was a little wonky.
  - The rle image reader in my sfd routines had an off by one error causing it to reject some images.
  - We used to munch memory when loading empty glyphs from mac NFNT resources.
  - It used to be that we didn't set the default background until the first font view window was opened. This meant that if we loaded a grey scale bitmap before opening a window (ie. from the command line) then that bitmap's clut would be relative to white rather than the appropriate background.
  - Add some code to protect against badly generated bitmap strikes in sfnts.
  - vhea & vmtx tables were generally wrong in otf fonts (unless the last full vmetric happened to be the last full hmetric). Also fix problems with cid hmtx output.
  - The sfd reader looked in the wrong place for sli information in cid keyed fonts.
  - Damn. Default output (for stdout) encoding never gets initialized when in a script.
  - I realized a few months ago that there is a difference between encodings based on names and encoding based on unicode codepoints. Unfortunately I was only saving encodings as though they were based on names (generating default names if necessary). This patch retains the distinction even when encodings are saved to the preferences folder.
  - AddAccent behaved differently when passed a glyphname and a unicode code point. In the first case it used the glyph specified. In the second it performed an arcane search which would not always use the specified glyph (left over from the days when it was important to use a glyph in Adobe Standard so you could do a seac).
  - When debugging composite glyphs ff failed to notice when we switched from one glyph to another and so failed to reset the instruction list to those of the new glyph.
  - Problem with cubic to quadratic spline approximation. Fixed by a more careful comparison between original and resulting spline.
  - Kerning (and Anchor positioning) didn't work when printing to pdf.
  - Won-kyu Park points out that ff's internal utf7 parser (deep in the guts of sfd.c) only parses utf7 strings as produced by ff. He took a utf7 string produced by python and inserted it and ff could not read it. He provides a patch to fix the problem.
  - If we got an invalid second order spline, let's fix it up into some vaguely reasonable form, so the poor user doesn't keep getting errors.
  - Extra "-" in type42 header removed.
  - The anchor dialog was all screwed up.
  - The test in show att that all components of a substitution existed failed to handle a trailing space.
  - Make page Up/Down work in Show ATT
  - Sometimes the simplify algorithem fails to converge.
  - When generating a tfm file the width (height, depth, ic) table was being scaled twice.
  - Remove a NaN that occurred when moving quadratic splines.
  - Oops. The unicode code point of a glyph was restricted to BMP by Glyph Info dlg.
  - Werner gave me a font where the glyphs were not properly ordered. So you can't tell the length of a glyph by loca[i+1]-loca[i]. The data appear valid in spite of that. So put in a warning for this particular case (we were generating a warning, but it wasn't as meaningful as it might be.)
  - Make View->Show ATT aware of the mark attachment class info so it can show the classes.
  - When interpolating to quadratic fonts where the two designs didn't match then the various possible errors gave us bad splines: Different numbers of points on the paths meant that the control points at the end (after we reached the end of the contour in one design but not the other) didn't match. Different designs meant that interpolating a line (with no control points) to a curved spline again produced nasties.
  - Drag and drop was broken.
  - Extend lookup flags support to include mark attachment classes (as defined in GDEF).
  - Bad argument type checking on the AddAccent scripting command.
  - Infinite loop in a rare case involving a flex hint at the start of a contour.
  - The merge fonts command would crash.
  - Problems parsing some bare cff fonts.
- 2-May-2005
  - Add support for Mark Classes.
    - New pane in Font Info to create them
    - New field in the feature tag dlg to use them
    - Input/Output routines
  - Drag and drop was broken
  - Infinite loop in some bizarre cases when generating a hinted opentype font.
  - The Merge Fonts command was broken
  - The scripting command: AddAccent checked for the wrong argument type
  - ff generated an error when loading some bare cff fonts.
  - Store desired fontview sizes in prefs file
  - Add a tweak to make the mac's dynamic loader look for fink libraries
  - Problems parsing bare cff cid-keyed fonts
  - recognize that code page 932 is a variant of SJIS
  - The feature tag 'nutf' is an obsolete name for 'afrc'
  - Add a couple of new scripting functions
    - Int() which casts its real/int/unicode argument to int
    - UCodePoint() which casts its real/int/unicode argument to unicode
  - scripting CharInfo no longer creates the glyph it is asked about
  - WorthOutputting/DrawsSomething can now be applied to the current selection
  - When using the freetype rasterizer don't do an automatic close of open paths.
  - For SCWorthOutputting I used to check both that !widthset and width==em-size. Remove the em-size check, should be redundant and somethimes (marks) is wrong.
  - The various FindBounds routines didn't pad stroked fonts appropriately
  - Discrepency in docs and code on spelling of scripting Auto[tT]race command. Accept both variants
  - A debug statement was left in the ps interpreter
  - Make the help command look for japanese docs in the ja locale
  - Add a select fewer scripting command
  - Fix some problems with custom encodings
  - Support '\r' and '\r\n' as line-endings for backslash continuation
  - New version of Japanese UI
  - The kerning pair dlg would sometimes fail to display a pair when searching on the second char of the pair.
  - Danish translation of some style names, courtesy of Anders Lund
  - Fix some problems with SJIS encoding
  - The point info dlg was quite unusable if you typed in somethng which wasn't a number
  - When in debug mode display pointer position in pixels
  - Point Info had problems with order2 splines
  - The instruction pane of the debug window was interpretting keystrokes it should not have
  - Peter Selinger has changed the way potrace is built so it no longer uses cygwin (it uses MinGW instead). This means ff can't pass it the name of a temp file as '/tmp/foo' because (on windows) /tmp is a cygwin fiction. So continue to put the file on cygwin's /tmp, but cd to that directory and then pass the bare filename.
  - Add some more greek PUA small caps
  - Add scroll bars to debug windows which lacked them
  - Add a gloss window which explains what a ttf instruction is going to use and what it is going to do.
  - Was using the wrong accent to build cyrillic breves.
  - Remove the adobe private use defs from libgunicode and put them in fontforge.
  - ff had problems reading pfm files containing kerning pairs using non-existant chars
  - Add pixels per em in register view.
  - No contours in twilight zone
  - When generating tt fonts we did not set bit 8 in 'head'.Flags. This gives bad results when ppem is not an integer
  - When reencoding to adobe standard (or any encoding where glyph names are more important than code points) make sure we use glyph names rather than code points (so "f_i" is not in AdobeStd while "fi" is. But they map to the same code point).
  - When creating a debug window in a glyph with no instructions (or in which 'gasp' has turned off hinting) we used not to rasterize it.
  - Script/lang count was wrong in a number of places
  - Oops, the transform dlg and menu both used the "round to int" string. Then I changed what it looked like in the menu, a change which is not appropriate for the transform dlg. Add a new string just for the dlg.
  - Tavmjong Bah added something to the "ypogegrammeni" list.
  - Fix problems with multiple text fields in the same window all wanting input contexts (for input methods).
  - We generated ligature code in morx for ligatures that were not worth outputting.
  - Pierre Hanser points out that a recent change to SetWidth broke the scritping SetWidth command.
  - Yet more effort to remove rounding errors from remove overlap. If a control point causes a slight overshoot we get an unexpected extremum very close to one of the endpoints. If it's close enough this can cause problems. Tweak cps so this does not happen
  - Solaris stores isnan & friends in ieeefp.h not in math.h
  - Add scripting access to standard math functions (trig, exp log)
  - Unary minus didn't work on reals
  - The recalculate bitmaps button in bitmap view was getting munched when we updated the cursor position.
  - CharInfo("BBox") returned gibberish
- 9-Mar-2005
  - Deleting a glyph class within a kerning by classes object caused a crash
  - Added some support for palm bitmap fonts
  - Replace with reference only replaced the first instance.
  - The Options dlg behaved oddly with respect to Apple & OpenType modes
  - When given a glyph with conflicting hints for which the first contour contained no hints, then in type2 output the glyph was drawn at a strange offset from its correct position.
  - When generating an opentype font from a script, and specifying flags, the round coordinates flag was ignored
  - When generating a font from a script using the default flag setting, we would always generate afm/tfm/pfm files
  - KANOU pointed out that the stroked font import glyph command only worked if multilayer set.
  - Added a preview bitmap to eps files.
  - In a bitmap only font the font metrics menu items behaved in unexpected ways (as if they referred to a postscript font rather than the bitmap fonts)
  - Various fixes to make importing stroked eps files into stroked fonts work better.
  - KANOU requests a preference item to turn off use of freetype in font view.
  - Fix more rounding errors in remove overlap.
  - Fix some problems in the routine which finds roots of an arbetrary quartic.
  - The remove bump option of simplify could screw up memory.
  - Remove overlap got unhappy about control points which caused a very tiny overlap between adjacent splines
  - Redo from the fontview usually caused a crash.
  - KANOU provides a MakeLine scripting command
  - If TYPE3 (multilayer) was not enabled, there was a flow of control through a function which did not return anything.
  - Recovery files did not contain multilayer marks which lead to strange behavior and crashes
  - Converting a font to multilayer caused a crash if there were outline glyph windows open.
  - Make the encoding for scripts be utf8 consistently
  - Allow the scripting Export command to take a format spec
  - Add support for reals to the scripting language
  - NearlyHv{Cps,Lines} scripting commands erroneously complained about too many args
  - ff had a bug when outputting otf contextual ligatures
  - Fix various crashes and infinite loops involved in parsing bad font files.
  - ff had problems with user defined encodings.
  - Made ff work if the psuedo-type "real" was defined to be a double.
  - the string += concattonation operator in scripting screwed up memory
  - Problems with -c <arg> syntax
  - The font type detector could fail to notice an svg file as such if it began with a byte order character.
  - Ord didn't do proper type checking on its second argument
- 9-Feb-2005
  - Use freetype's FT_Outline_Get_Bitmap to make freetype rasterize from our internal data structures. Use freetype by default for the fontview and metricsview (except in some cases).
  - The bitmap dlg didn't work for multilayered fonts when told to use freetype to rasterize.
  - If we had a contour nested inside another, and did an Overlap Exclude with the nested contour selected, then that contour was not excluded.
  - The []Correct Direction check box when importing PostScript, didn't do anything. (or rather it did, but got overrulled later)
  - In bitmap only fonts, bitmaps created without moving the width line would get lost.
  - Added a scripting command "SelectByColor"
  - Don't apply transformations to glyphs which aren't worth outputting
  - Moving control points with the get point info command had problems in quadratic splines.
  - When adding type42 support I broke multiple master support.
  - Werner provided a patch to add a trailing newline to my type1 fonts.
  - Support for PaintType==2 and stroked fonts.
  - Various problems with the clustering command
  - Oops, somehow a patch reverted and things didn't work on systems without iconv
  - worked on a couple of other configuration problems for the mac
  - Some people install libraries without headers. Be prepared.
  - Uniscribe (MS unicode text layout routines) may ignore either the GPOS or the GSUB table depending on the script, and may even refuse to use the font at all if it doesn't have the right stuff in GPOS/GSUB. A Hebrew font must have both a GPOS and a GSUB. If it doesn't the font is not used. A latin font need not have either, but if it doesn't have GSUB then GPOS won't be used.

    Sergey Malkin from MicroSoft tells me:

    > Each shaping engine in Uniscribe can decide on its requirements for layout tables - some of them require both GSUB and GPOS, in some cases any table present is enough, or it can work without any table.

    > Sometimes, purpose of the check is to determine if font is supporting particular script - if required tables are not there font is just rejected by this shaping engine. Sometimes, shaping engine can not just reject the font because there are fonts using older shaping technologies we still have to support, so it uses some logic when to fallback to legacy layout code.

    > In your case this is Hebrew, where both tables are required to use OpenType processing. Arabic requires both tables too, Latin requires GSUB to execute GPOS. But in general, if you have both tables you should be safe with any script to get fully featured OpenType shaping.

    So the script sub-table of both GPOS/GSUB should contain all scripts used in either (rather than just the scripts used in the current one).

  - The AddATT scripting command didn't understand Nested.
  - Add a cli argument "-c" to introduce a scripting command in an argument.
  - Someone ran ff on a solaris box without iconv. (Odd because iconv is there by default). FF ran fine (Odder, why didn't it demand the library?), but crashed when it tried to use a conversion which didn't exist.
  - There's another ASCII map in Unicode (0xe0000-0xe007f).
  - Allow user to supply their own OtherSubrs routines (Some people object to Adobe's copyright).
  - Codes to handle identifying a loaded font by relative filespec didn't work.
  - Change Add Extrema so that it only adds extrema if
    1. The spline length is >= em_size/32
    2. The extremum is an extremum of the entire contour containing the spline.

    (Behavior in the outline view when there is a selection remains the same. So if the endpoints of a spline are both selected then all local extrema will be added to that spline, no matter how long it may be).

  - Patch by Ralf Stubner. Fonts without UniqueID had a bad syntax.
- 17-Jan-2005
  - CapsLock now makes the arrow keys scroll in the outline view
  - We lost count of hints when generating type2 fonts in glyphs with references to something containing hints which did not overlap. If we were unlucky, <new-cnt+7>/8 was different than <real-cnt+7>/8 and we ended up with garbage in the charstring.
  - Add a TeX table to contain TeX metrics.
  - TFM output was wrong. the TFtoPL doc says "
  - reencoding with original encoding could create a glyph table one too small resulting in writing/reading garbage and an eventual crash.
  - KANOU fixed a couple of problems in reading glyph names from bdf fonts.
  - KANOU needed to disambiguate between "Point" a unit of measurement and "Point" a geometric object.
- 16-Jan-2005
  - Added support for OpenType Device Tables (These allow you to add small corrections to things like kerning at a given point size. Often at small point sizes kerning and advance widths will round in such a way as to produce unpleasing results. Device tables allow you to correct for that).
  - Add dialogs for kerning pairs and anchors to allow users to set device tables. Extend dlg for kerning classes for this.
  - Neil Parker suggested a patch for panose values that didn't apply to latin fonts
  - Doing a Get Info on a single point caused a crash on the mac
  - Further attempts to improve spline approximation, underlying Merge & Simplify commands
  - Relaxed simplify's definition of parallel so it will merge a few more straight lines.
  - Make the behavior of Simplify More consistant across font/outline view. Simplify More can now set the default behavior for future simplify commands.
  - Provide a menu command to round to hundredths of a em-unit
  - Add a new facility to cluster coordinates to the same value. Useful as a prepass to Remove Overlap.
  - Bug reading ligature data from a tfm file
  - Add support for GPOS 'size' feature. Create a 'size' pane of the fontinfo dlg
  - Replace with Reference had an interesting flaw. Consider the open and closed bullet characters. If the (single) contour in closed bullet matched the outer contour in open bullet then it would replace it with a reference. But this is incorrect as the two contours of open bullet need to be treated as a unit.
  - Could get a bad memory reference in the font view if the mouse were to extend the selection outside of the window.
  - Add a scripting function to return whether a file exists.
  - In a Type1 font, if a glyph had no conflicting hints (and no flex hints) and got put in a subroutine, then we'd get no hints at all.
  - Be more willing to generate format12 cmap subtables (unicode, non-bmp tables)
- 6-Jan-2005
  - New Copyright message, etc. Get rid of pfaedit message.
  - Simplify produced strange results on quadratic splines.
  - Simplify had problems with tangent points
  - Changing a point's type from a tangent to a curve usually had unexpected results.
  - Add a warning message in remove overlap when user passes us two intersecting contours which are oriented in oposite directions. Unfortunately it also complains about some other things.
  - The 18 Dec changes to remove overlap introduced an infinite loop in some rare cases. (When there is a gradient of 0 in distance function between two splines).
  - In a conditional operator (like && or ||) in scripting where the second operand was not evaluated and the second operand contained a procedure call, then ff would crash
  - Tweaked the point info dialog to show small offsets better
  - Tweaked the merge command to behave better when merging tiny spline segments (where the length of the spline segment is so small that it should just be treated as a zero length spline and its slope ignored).
  - Added an "Invert selection" command to the outline view, from Yoshiki Hayashi
  - Pasting from the font view did not clear a glyph's instructions.
  - New version of AutoHint. I've removed Diagonal Stem hints and mimum distance hints for now.
- Earlier Changes
- Changes to PfaEdit (predecessor to FontForge)