# Changes (Enhancements & Bug Fixes)

- 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.
- 31-Dec-2004
  - Ah, windows pfm files expect the metrics to be output in win latin encoding order, not in the encoding defined by the pfb file. (Actually there are other posibilities for encoding, but as none is documented, I must ignore them).
  - ReplaceWithReference broke at some point
  - Add an argument-pair to the ReplaceWithReference() scripting command to allow the user to specify the amount of error that will be accepted.
  - When generating a Type1 font, if a glyph had a single reference to a glyph not in adobe encoding, and that glyph itself had a single reference (in adobe enc) and some splines, then ff would make a reference to the ref in adobe enc and ignore the splines.
  - Upgrade to Adobe-Japan1-6
  - Various fixes to svg output
    - export glyph to svg didn't work
    - multilayered generation had problems
  - Ghost hints could get outside a glyphs bounding box in a type2 font.
  - The generated truetype unique id string had an off by one error in the month
  - Add support for dashed lines in multilayered mode
  - In Full Page Glyph printing, the glyph was offset slightly from where it should have been.
  - Pasting a reference into a multi-layered font produced a very odd layer
  - ff didn't update the metrics view if the user pasted the selection with the middle mouse button.
  - if a character were not in the current encoding then ff would not display it in the metrics view (even if it were in the font)
  - Make the behavior of control points at the ends of open paths more reasonable.
  - The Point->Curve command did not adust control points correctly.
  - The View->Display Substitutions had numerous problems.
  - Fix several problems from unicode unification of accents. Many characters which are said to be based on cedilla actually use a comma, other characters said to be carons also use comma. Make the n-with-apostrophe character be treated as an accented letter.
  - Werner points out that straight lines should generally not be simplified (as they will no longer be straight afterwards). Add this knowledge to the simplify command.
- 18-Dec-2004
  - Added a raster debugger wndow
  - Each time debugger starts, remember what debug windows were open last time it was used.
  - Constraining the pen tool did not do what I expected
  - If a glyph was encoded twice (or more) in a font, and an opentype font (or perhaps a bitmap only sfnt) were generated, then any glyphs after the second encoding would have the wrong width (ie. there would be an extra entry in the horizontal metrics table corresponding to a (non-existant) copy of the doubly encoded glyph)
  - If a type1 font never defined .notdef but used it at least twice it the Encoding vector, then ff would crash.
  - Updated Japanese UI (by KANOU)
  - Werner found some crashes related to calling isalnum (etc.) using an index outside of bmp.
  - More changes (I hope improvements) to remove overlap
- 13-Dec-2004
  - Some fixes to the raster display of the debug window
  - Conversion of cubic to quadratic had a rounding error introduced by -O2. Made it a bit more forgiving about rounding errors.
  - Added two new buttons to the point info dialog to allow the user to walk around the current contour (Normally the Next button skips to the start of the next contour if you are at the end of the current one, the "Next On Contour" button returns to the first point on the contour)
  - improve interpretation of some type3 fonts (including those produced by fontographer 4)
  - patch by Yoshki Hayashi to fix mnemonic crash in layers palette
  - Added a rand() scripting command
  - Support backslash newline to break up lines in a scrpt
  - The internal adobe standard encoding thought it was unicode causing strange effects
  - Type3 fonts that set colour/grey didn't work
  - Printing at 140pt tried printing 4 glyphs across although there was only room for 3
  - At install tell pkg-config the verson of fontforge
- 3-Dec-2004
  - If a cff file contained unencoded glyphs then ff would crash when loading it.
  - When converting from cubic to quadratic splines, ff would sometimes produce a line when it should have found a spline
  - During debugging of a ttf glyph, show what rasterization would produce if the current splines were used (highlight pixels which change)
  - The debugger windows didn't always say "<empty>" when they should have.
  - The debugger would often crash the second time we closed its window
  - Asking for the script (as latin, greek, cyrillic...) of ".notdef" caused us to look at unallocated memory.
  - We weren't labelling control points in the debugger
  - debugger and grid fitter for tt fonts showed curved splines as lines
  - Kerning pairs did not get scaled when changing em-size
  - Add a preference for turning off automatic gotos as the user types in the glyph window
  - Add a command to the glyph window to toggle between the two most recent glyphs used in that window (a mini history)
  - Improved the points debugger window to show
    - implied points
    - whether a point is on or off the curve (normal or control)
    - added a scroll bar
  - Provide info on debugging points as mouse moves over them.
  - Fix (an innocuous) reference to unallocated memory
  - Added ability to insert an uninterpreted table into an SFNT
    - New preference item: PreserveTables which lists a comma seperated set of table tags which are to be loaded from SFNT files without interpretation (Note if ff thinks it understands a table it will parse it rather than preserving it)
    - Scripting command LoadTableFromFile("tag ","filename")
    - Scripting command SaveTableToFile("tag ","filename")
    - Scripting command RemovePreservedTable("tag ")
    - Scripting command HasPreservedTable("tag ")
- 22-Nov-2004
  - Kevin Schoedel suggests a new scripting command DrawsSomething()
  - Kevin Schoedel requests that PrintFont be able to print a string sample (as opposed to a sample file)
  - Kevin Schoedel points out that type1 fonts stuffed into mac resource forks are to be read in resource order rather than file order (often the two are the same) and provides a patch to fix this.
  - Change the way the default language/locale is picked in fontinfo->TTF Names
  - Remember (across invocations) whether palettes should be hidden or not.
  - Ignore NUL chars when reading PostScript strings (PS supports NULs in strings, I'm not going to bother, but I don't want to parse incorrectly because of them).
  - ff lost the ability to Select("U+xxxx") or Select("=") from a script.
  - Oops, the routine to read PostScript FontNames from a ttf file was broken by the encoding change.
  - If a ttf file contained an erroneous composite glyph with flags indicating more components after the glyph had run out of data, then ff might attempt to read instructions also and have problems.
  - If a font contains multiple ttf names for a given string in a language then allow the user to pick which one s/he likes best.
  - Another case where a bad otf table crashes fontforge
  - If a ttf/otf font does not contain a postscript FontName string in the name table, then ff's attempt to synthesize one out of fullname/familyname did not check for a valid name.
- 15-Nov-2004
  - If ff started without a prefs file, then creating a new font would crash
  - If a copyright string contained a newline then ff would generate bad postscript
  - If user added a comment to an empty glyph then the comment wasn't saved in the sfd file.
  - If ff saved a utf7 string to an sfd file (ttf names, etc.) and that string contained a hyphen that followed immediately after something that needed to be encoded in base64, then the hyphen would be lost.
  - new french UI
  - ff was (usually) setting the ascent/descent fields of the 'hhea' table to 0. When the font was drawn on the mac it was clipped to nothing. Caveat: Old sfd files are still broken and there is no UI for fixing them. Instead you must edit them manually, and change:

        HheadAOffset: 0
        HheadDOffset: 0

    to be:

        HheadAOffset: 1
        HheadDOffset: 1

- 12-Nov-2004
  - ff would crash on postscript fonts where the encoding included a glyph name not defined in CharStrings (probably broken on 12-Oct)
  - More remove overlap work
  - In the glyph window, when the scaled distance between the top and bottom of the window is less than 1 em-unit, then the vertical ruler was drawn with the top and bottom labels reversed.
  - sfd files used to have a limit of 1023 characters in ttf 'name' table strings.
- 6-Nov-2004
  - Encoding change broke prefs dialog
- 5-Nov-2004
  - Encoding change didn't work on libiconv systems
- 4-Nov-2004
  - Added a new scripting command: AddAccent() to add an arbetrary accent to an arbetrary glyph.
- 3-Nov-2004
  - KANOU has a Japanese version of this reference manual under construction.
  - In MultiLayered mode, the "New Layer" menu item left a dangling pointer which caused a crash if anyone looked at the background layer.
  - In MultiLayered mode, if one clicked beyond the last layer in the Layers palette, ff would crash.
  - KANOU provided a patch to fix another crash in the layers palette.
  - KANOU has provided a new Japanese UI.
  - Made an addition to CharInfo() scripting command so user can determine the horizontal extrema of a glyph at a given vertical position. Similar addition for vertical extrema at horizontal pos.
  - Add a scripting command (PasteWithOffset) to allow user to apply an offset when pasting. For building accented letters by hand.
  - KANOU provides a patch to fix a problem in the new encoding stuff.
  - Select(".notdef") usually didn't work.
- 28-Oct-2004
  - Kanou noticed that ISO 15924 has been updated and provide a patch including new scripts.
  - I have redone the way ff handles encodings internally. We used to depend on the encodings builtin to gdraw/gunicode. Now we use iconv() (if there is no iconv, then ff will use a dummy iconv which understands the encodings of gdraw/gunicode). Encodings are identified by name rather than by number now.
  - Further fixes to the extremum detector
  - Further fixes to remove overlap
  - Added an extra argument to scripting RoundToInt, so that you can have control over what it rounds to (ie. round to hundredths, tenths, etc.)
  - Added two new scripting commands NearlyHvCps() and NearlyHvLines() which look for control points or lines that are nearly horizontal or vertical and force them to be horizontal or vertical.
  - Kanou provided a patch so that the GRadio.Font resource controls the font in the layers palette of the glyph view.
- 23-Oct-2004
  - Remove overlap had problems with splines which made abrupt turns (ie. tiny splines after we found extrema points and divided the spline into bits between extrema)
  - Remove overlap could munch memory
  - The ruler tool showed all tiny splines as having a length of 0
  - Autorecovery had problems with glyphs containing features (would complain about sli)
  - KANOU wants to be able to scale greymap fonts
  - removed routines from fvcomposit.c, metricsview.c that were duplicates of fvfonts.c
  - Oops, the default mac filesystem isn't case concious either, extend the windows export patch to the mac.
  - Simplify didn't have a very good extremum detector and would sometimes delete extrema.
- 14-Oct-2004
  - Remove overlap had problems with tiny splines.
- 13-Oct-2004
  - I notice (in Fontes & Codages) that the labels in the metrics view aren't translatable
  - Fontes & Codages suggests that it would be nice if the glyph labels in the fontview could be something other than an image of the glyph (glyph name, unicode code point, encoding, etc.)
  - Change the word "Character" to "Glyph" where appropriate.
  - Move the Open Outline/Bitmap/Metrics commands to the Window menu, and change "Open" to "New".
- 12-Oct-2004
  - We have a Spanish UI now, courtesy of Walter Echarri. Yeah!
  - Support for loading type3 fonts (that ff produced) was broken. Note: ff is still unable to load many type3 fonts (any that are filtered, or that use images for example), but it should be able to read its own fonts.
  - (I hope) minor change to the way .notdef is handled when reading postscript files.
  - Added support for printing to pdf file
  - (fixed a bug in pdf generation from the export command)
  - Fixed various problems from turning off the multilayer bit in fontinfo
  - KANOU needs a couple more strings disambiguated.
  - Add support for generating type42 and type 11 (type42 cid) fonts, add support for loading type42 (but I'm not bothering with type11s) and use these guys when printing order2 fonts.
  - Check to make sure the PostScript Fontname is valid when reading in a truetype (or svg) font (syntax doesn't enforce this), and if not warn the user and fix it up.
  - Add some new scripting commands for handling MM fonts since someone seems to want them.
  - Used to complain if there were more than one Unique Font ID in the truetype 'name' table. (because the OpenType list said there should only be one, else it would not be unique). But both Apple and MS ship with fonts containing multiple Unique Font IDs. God knows what that means, or when you pick one over the other... Anyway I changed my error into a warning.
- 30-Sept-2004
  - I have rewritten Remove Overlap from scratch. I seems less likely to crash, but I'm not sure that in any other respect it is improved.
  - In the character view the Remove Overlap (and Intersect and Find Intersections) now only work on selected contours, or, if no contours are selected then on all contours. This change makes these commands consistant with most other commands in the character view, but it is a change from past behavior.
  - The Import scripting command has been extended to give the user control over the stroking flags (correct direction, remove overlap, handle erasers). And the background flag has been extended a bit to apply to other things than bitmaps.
  - ff had a pointer dangling to a freed block after loading a font containing multiple versions of some greek letters.
  - U+1D400-U+1D7FF are stylized variants of the latin and greek alphabets as used in Mathematics. The font view will now display (in the glyph header) the proper variant of the glyph (assuming it can find a font with that style).
  - The AMS (American Mathematical Society) has their own interpretation of the public use area. FF now understands their glyph names as alternates for those glyphs, and has an AMS interpretation (under FontInfo->Encoding) that will make ff use those names in new fonts.
  - Many of code points in the AMS PUA are reencodings of other glyphs. FontForge will automatically generate these reencodings for you.
  - The AMS also describes how some TeX glyph names map to unicode. So include those names in our alternate list too (so we can map them correctly, not as a way of encouraging people to use them).
  - Both the AMS defn. of the PUA and the Big5 defn. map characters which are properly in other unicode planes into the BMP. FF now understands this, and converting between a BMP encoding and a full unicode encoding will move things from the PUA to their proper unicode slot in higher planes.
  - Find Problems thought that adjacent splines intersected at their common end-point. I suppose they do, but it isn't useful information
  - In the char view, I used to blank out the status line when the mouse moved outside the window. But some of that info is still valid. So only blank out the meaningless bits.
  - Kanou requests a disambiguation between two strings with the same label in English but different meanings in Japanese. (Vertical/VerticalWriting)
  - The Point->Make Line command would crash if either of the the two points was missing a previous or next spline.
  - Pierre HANSER provides a patch to problems.c (it would crash when dealing with fonts with an encoding with < 32 code points.
  - Pierre HANSER provides a patch to merge fonts (it would crash when merging bitmap fonts.
  - Closing a charview window with a docked palette could cause a crash if the cursor was moved quickly into another charview which needed a new cursor.
  - The perspective icon had the wrong background
  - Piska keeps complaining about the way ff handles 0 width strokes. He wants it to have zero width (disappear, I guess), but PS says it should be stroked as the thinnest line possible (not clear what this should mean in ff, I interpret it as a 1em-unit stroke). But METAPOST uses a 0 width stroke in cases where it wants no stroking (with a fill) so in the special case of a fill with a 0 width stroke, turn off stroking.
  - Use a different approach to approximating a set of points with fixed slopes at the end points. Used to do least squares (fixup slopes), least squares again (fixup slopes). Now I do least squares (fixup slopes), perturb the lengths of the slope vectors until we find the best fit.
  - I was generating flex hints when I should not have done so. Add a heuristic so that ff doesn't add flexes to small circles.
  - Failed to read long format pk bitmaps.
  - Patch by Mchael Ghrken to make the Skew scripting command take a numerator/denominator style argument.
- Earlier Changes
- Changes to PfaEdit (predecessor to FontForge)