# Changes (Enhancements & Bug Fixes)

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

- ??-Apr-2006
  - Patch by Ian Jackson of Ubuntu. When in an empty glyph (one not WorthOutputting) then doing a View->Show Grid Fit would cause a crash.
  - The PLRM says that formfeed is whitespace. The T1_Spec says that it is not. After an eexec the T1_Spec is right (and ff was following the PLRM definition).
    Also add a check to insure that the first character we generate in pfb encryption isn't a white space character.
  - On some windows systems (mine at least), windows will refuse to install a postscript font if the fontname or familyname of that font is longer than 31 characters. These are the names in the Font Dictionary of the postscript font itself, not the names in the 'name' table (for otf fonts).
  - Make ff compile with freetype 2.2.0
  - The popup menu of text fields was garbage.
  - Make a change to pfm output which might allow non windows ANSI encoded fonts to work.
  - Allow the freehand tool to work in quadratic fonts.
  - Didn't always refigure splines properly when using Get Info in quadratic mode. Patch by Michal Nowakowski.
  - Trying to invoke the KDE browser (for help) didn't work. Patch by Dimitar Zhekov
  - Still losing instructions if contours begin with off-curve points.
  - if a font had a defined notdef glyph, then FF would usually enter it incorrectly in the 'hmtx' table.
  - In the Select menu, Width had an extra underscore.
  - Wasn't looking in the right place to get the right weight name in an otf font.
  - People have been complaining about the UI for drawing quadratic (truetype) curves. It was consistent with the UI for drawing cubic (postscript) curves, but it seems hard to draw quadratics that way. Rather than concentrating on the on-curve points (as in cubics), now concentrate on the off-curve points. So the pen-tool behaves quite differently now in quadratic mode. As does Element->Get info.
  - A patch added back in 2004 to make vertical substitutions work for Japanese (to work around a bug in Windows to be precise) had a bug itself if more than one language was involved.
  - When outputting an inline copy of a reference in otf fonts with translated hintmasks we did the wrong translation for vertical stems and got garbage results.
  - New command to allow user to enter X,Y coordinates of a point and have that point be selected. I want this for debugging. It might be useful generally.
  - Fixed problems with type2 subroutines containing glyphs with conflicts.
  - ReplaceWithReference had too large a fudge factor and found macron when it should have found macron.sc in minionpro-regular.
  - If an alternate/multiple subs had more than 30 components then we lost all those after 30 when generating opentype GSUB table.
  - Hmm. Sometimes least squares does give the answer we want for merge. So give it a try.
  - Patch by kanou to fix some translation problem.
  - In the shape tools (round rect, ellipse): Instead of generating a quadratic shape at the start, generate a cubic shape and convert to quadratic. The convert routine now knows about how to find integer control points and such.
  - Patch from Kanou to get more grid size values for looking at bitmaps.
  - If a glyph starts with a control point then ff would sometimes throw out the ttf instructions, thinking it wasn't numbered properly.
  - A merge in a quadratic font produced a straight line. Even when it shouldn't have.
  - Change namelists to support non-ASCII glyph names.
  - Oops. Some hinting scripting commands had a "b" prepended to their name by mistake. Sigh. From now on support both names.
  - When pasting a glyph with hints into an empty glyph, we shouldn't set the "in need of autohinting" flag. (Actually, we might should if the original copy were done in a glyph with out of date hints.... but that gets more complicated).
  - Patch to make loading bdf fonts more efficient.
  - Add Kanou's "fontview" font to the list of fonts searched by default for the fontview window.
  - FF did not mark ghost hints as different from normal hints.
  - Interpolating fonts broke when I did the encoding change last summer.
  - Patch from Kanou to prevent the hash function from returning negative numbers. (and crashing)
  - Add a menu and a scripting command to compare two fonts.
  - Oops. There's a stray underscore in a field in font info.
  - Refresh font view(s) after changing glyph name/unicode in glyph info in case those are being displayed.
  - If a name entered in the goto dlg was a single unicode char, then goto would treat it as such. Normally this is fine, but a user might use the underscore character (for example) as a glyph name and not assign it to U+005F. So check for the name too.
  - Rewrite the cubic->quadratic conversion code. It now looks much prettier and tries to position intermediate points on integer (or half integer) locations so there won't be unexpected rounding later. It's slightly less accurate though.
  - Many changes to the postscript hinting code.
  - If a glyph contained references but no alphabetic characters then Glyph Info would crash.
  - Scripting command AskUser doesn't work unless FF_SCRIPT_IN_LATIN1 is set. Patch by Kanou.
  - In some error messages I ended a sentence with a comma. Make it a full stop.
  - Patches from Kanou to make Japanese translation better.
  - Kanou points out that the code which handles modifications to the unicode char textfield (in glyph info) complains about the wrong things and he provides a patch.
  - Hand tool failed to scroll background images (probably failed on hints too).
  - When doing a copy splines with hintmask operation we neglected to refigure the spline after transforming the end points. This was ok since we never used that info -- except if the splines were quadratic and we needed to convert to cubic. So when generating a ps font from a quadratic database, and the font contained references with scaling/rotation/etc. then we'd get erroneous results.
  - In Find Problems, the Flipped Reference check could fail if the reference contained a contours which intersected (themselves or each other).
  - Make ff aware of ExtraLight as a valid weight when setting a default value for the PS weight string.
  - When the user clicked on a textfield with attached pulldown list, ff would get an event saying the first entry on the list had been chosen. This meant that the Tag dialog (used for new ligatures/substitutions/etc. would show the first tag in the list instead of blank.
  - Include some glyph name synonems from Richard Kinch's TrueTeX list.
  - Determination of whether a ghost hint is top (-20) or bottom (-21) should depend on the current contour, not on the glyph as a whole.
  - If a glyph consists solely of references then add _<ref-name-1>_<ref-name-2>...<ref-name-n> to the list of possible names. Sometimes also add uniXXXXXXXX.
  - Kanou wants to translate some more strings.
  - Barry.SCHWARTZ wants to be able to reencode a font to compact from a script.
  - Barry.SCHWARTZ points out that my "cfg" files contain no newlines. Shows how much use they've received:-)
  - Barry.SCHWARTZ points out that when generating an afm file for an otf font only the first 256 characters were given encodings.
  - Simplify much improved.
  - Make simplify for quadratic splines aware of the peculiarities of truetype. So one simplification is to make a point interpolateable. And removing a point is not always good if it means points that were interpolateable become non-interpolateable.
  - After examining (and stealing with permission) Huw Davies's code in wine/tools/fnt2fon.c I believe I can now produce .fon files.
  - Add support for reading bitmap references (from an sfnt bitmap)
  - Patch by Kanou. cvknife didn't compile in one mode.
  - Typo in an error message
  - Add a command to show points of inflection (also change View->Mark Extrema to show where extrema occur on a spline if not at the endpoints)
  - Patch by Michal Nowakowski. Uninitialized variable in simplify dlg.
  - glyph names for unencoded glyphs were always "uniFFFFFFFF" should be "NameMe-<n> broken by last summer's encoding changes.
  - Werner wants CC (composite character) entries in afm for GPOS mark-to-base features.
  - The switch to utf8 last summer broke font info->Size
  - Allow users to ask for both 'GPOS' and old-style 'kern' tables. FontLab does this. The OpenType list is generally disapproving of the idea.
  - If we tried to put more than about 10000 kerning pairs into one old-style kerning sub-table then we'd overflow various shorts. So split it up after about 10000 kp into several different sub-tables.
  - Round to Int screwed up interpolated points.
  - When generating a tfm file don't generate a width bigger than 16*em-size (even if the font says to) because TeX will throw it out.
  - Alexey Kryukov's patch to fix an error message.
  - Printing a CID keyed truetype font to a pdf file produced a very odd ordering of glyphs (compacting some and omitting others and getting errors when it ran out of glyphs but asked for more).
  - Alexey Kryukov suggests repunctuating an error message.
  - Johan Winge suggests an improvement to converting cubic splines to quadratic: If we end up using a line when looking at the spline as a whole, try breaking it at the point(s) of inflection first. It seems like a good idea.
  - Johan Winge also points out that I identify points as tangents when they should not be. This is because I use one measure of sloppiness no matter how close the cps are to the base point when determining colinear. It's probably best to have a variable measure depending on how far the cp is from the base point.
  - Alexey Kryukov thinks Add Unencoded Slots should work in the compacted view by making the thing have a custom encoding.
  - Scripting reencode didn't get rid of the "compacted" mark.
  - Ralf Stubner points out that I produce type1 charstrings which end in "seac endchar" when a simple "seac" is sufficient. He's right.
  - When generating opentype tables in from a single sub-font of a cid-keyed font (ie. user asked for a ttf font generated from one sub-font) ff would crash.
  - We didn't hint bold fonts well (anything where stems were bigger than em-size/10)
  - When generating a type1 font with a glyph containing a reference that had to be unlinked, then the vertical stems in that reference would not be hinted.
  - When guessing points at which to attach hints in type1/2 read in we failed if the points were too widely spaced. Be a bit more lenient.
  - SetCharName didn't check its flag value properly.
  - Uncompacting a font caused memory problems.
  - Fix simple crash in metafont.
  - When importing unencoded glyphs into an already existing font, we would sometimes fail to find the matching glyph (and would create a new one).
  - If a font contain an encoded glyph called ".notdef" and that glyph was not the first glyph, then type1 fonts had a .notdef glyph at a random place in the font. Now freetype seems to renumber glyphs so .notdef is always glyph 0 which fontforge did not expect and produced some strange results when rasterizing (tested on 2.1.10). Fix is simple: always make notdef be first in the chars dictionary and then all is happy.
  - Add new scripting command to compare two glyphs. I want this for testsuites, other people might find a use for it.
  - gniibe reports that the scripting function Export() produces bitmap images with the wrong format and provides a patch.
- 9-Feb-2006
  - Instead of refusing to do expand stroke/remove overlap for order2 fonts, why not convert the contours to order3, do the function and convert back.
  - Once more we are numbering points badly.
  - If we clear a glyph which is being referred to (and we don't unlink it first) then when we save it into an sfd file we get a reference to a glyph at orig_pos -1 (because the cleared glyph isn't stored in the sfd) which causes an error when reading it back in.
  - If a copyright message were an exact multiple of 100 characters long, fontforge would screw up memory (and potentially crash) when reading it in from an sfd file.
  - The Merge/Simplify command (which Add Extrema now calls) had problems when the control points were very close to the base point so that the point was (to the human eye) a corner point.
  - Add support for the r2l script N'Ko. MS says opentype will use script 'nko ', ISO says the tag should be 'nkoo'. Follow opentype.
  - Kanou tells me that Syriac & Thaana are also r2l scripts and should be added to my list.
  - If FF was given multiple fonts on the command line the sizes of the font windows would jump around in a very peculiar fashion.
  - Add the concept of a namelist. Users can specify what names they want for new glyphs, or can force an entire font into a new naming scheme. Changes to
    - FontInfo
    - Open
    - Generate (Family)
    - Preferences
    - and the Encoding menu.
    - New scripting functions:
      - LoadNamelist(filename)
      - LoadNamelistDir([dir])
      - RenameGlyphs(namelist)
      - Extended Generate (scripting) to take a namelist argument.
  - If users didn't have libuninameslist installed we were still generating spurious ligatures for numero and TM. (and others)
  - KANOU points out that if you comment out a bdf glyph (with COMMENT) fontforge sort of reads it anyway.
  - Kanou needs to distinquish between the script latin and the language.
  - SplineRemoveAnnoyingExtrema1 got tweaked a little too much in attempting not to generate insane control points.
- 25-Jan-2006
  - If you try to create a bitmap only sfnt but provide pixelsizes for no valid bitmap strikes, the fontforge would crash.
  - Chia points out that I should use the PIXEL_SIZE property to set a bdf font's pixelsize (instead of using font ascent+descent).
  - Trying to rasterize a glyph with a coordinate of 1e7 caused a crash.
  - The change to make Add Extrema remove points near the extrema failed to consider the possbility that some of those points might be corner.
  - In Gentium Roman, when searching for bluevalues, the baseline is further than 1 standard deviation from the mean of glyph ymin. Change the range searched so that 0 is always included.
  - In Font Info->PS Private, if we selected OtherBlues and pressed [Guess] it did not change the OtherBlues value.
  - The gettext patch change Histograms->Blue Values menu item into a line.
  - When changing the order of a font, ff would ask if you minded losing the undoes. There's no point in asking the question if the font hasn't been modified (it has no undoes).
  - The Point Info dlg should enforce that curved points cps are colinear (so if the user changes one cp, the dlg should change the other to be in the opposite direction.
  - There was a path though PointInfo that called SplineRefigure3, which meant that splines got marked as cubics even when they should have been quadratics.
  - Using a rotated elliptical pen in expand stroke did not work
  - Add a homedir button to the file chooser dialogs.
- 17-Jan-2006
  - Make the Import() scripting command accept {bdf,pcf}.gz files
  - Reading utf7 (ttf name) strings from an sfd file was broken if one of the characters had bit 15 (high bit) set and its position in the string mod 3 was 1.
  - My horizontal line metrics in the sfnt bitmap strike header were incorrect
  - Use the horizontal line metrics (if they work) to set the ascent/descent of a bitmap strike.
- 15-Jan-2006
  - The change to fold all COMMENTS into one bdf property broke the sfnt 'BDF ' table routines.
- 14-Jan-2006
  - Change AddExtrema so that if an extremum is very close to an old point it will add the extremum and then remove the old point.
  - Redid how bdf properties were handled
    - I had the definitions of some properties slightly wrong
    - I was generating some obsolete properties
    - When I generated CHARSET_ENCODING for iso8859 encodings I had an extraneous "-" in the value.
    - retain the properties when loading a bdf, pcf font
    - Add a dialog which gives user control over bdf properties
    - design a 'BDF ' table for SFNT files which can contain bdf properties and make FontForge read and generate this table.
  - Ted Packard points out that I output "big metrics" in sfnts inconsistently. This patch should make them consistent and right.
  - Restore "compact" views to their old glory. Ie. they can now be uncompacted (and uncompaction happens automagically when generating a font).
  - When reading a GenTags: line from an sfd file stored with CRLF line terminators, the next line would be lost.
  - ff couldn't handle xrefs which were broken in bits in pdf files?
  - When reading a ttf font from a pdf file we found no encoding info. This caused us to crash because various routines expected an encoding map. Add a dummy (Original) map if not exists.
  - Wasn't numbering points in references properly.
  - Gleep! Ever since the gettext code went in, the Generate fonts dlg has refused to generate "No Outline Font" and "No Bitmap Font".
  - Herbert Duerr from OpenOffice tells me that their OpenSymbol.ttf font when produced by fontforge does not work on Win98. This is because Win98 doesn't like the codepages bits ff produces and refuses to use any glyphs in the font. He submitted a patch to make ff produce a version 0 OS/2 table (with no codepage info) for this font. Win98 will accept it then. His patch was against an earlier version of ff and needed to be modified for the current version.
  - Patch by Raph Levien which finally shows me how to use FT_Outline_Get_Bitmap properly.
  - If the user has never called PrintSetup (or if the user has not called PrintSetup this session and has not loaded prefs), then fontforge will invode setpagedevice on a pagesize which will fit on either A4 or US-Letter. The PS manual says a printer should refuse such a size unless it has paper within 5 points of it. So on printers which follow the spec (not mine) nothing will print as it waits for paper.

    Now if the pagesize has not been set, don't specify a PageSize to setpagedevice.

  - The PrintSetup scripting command should not require a font.
  - Add a mechanism so that users can prevent ff from making a point implicit. Useful in that point needs to be instructed.
  - New copyright notices for 2006
  - Make the pen tool work better with quadratic splines (make it default to having control points which cause the point to be implicit).
  - Order2 elipses were not drawn accurately.
  - Point numbers sometimes didn't get properly renumbered after changes. If we have references & splines in a (truetype) glyph then show the numbers as "?".
  - When a charview displays numbered (truetype) points, then it shows all the control points. But the control points are not selectable. This is not a good thing, so make them selectable.
  - The font display to pdf did not include a title at the top of each page.
  - Peter Denisevich points out that when we print something we say "%%Pages atend" instead of "%%Pages (atend)". And the latter is correct.
  - Werner points out that my type1 (and type1 cid) fonts contain a %%DocumentSuppliedResource line, and they should not. The next level up should do that when it includes the font.
  - Show .xpm files as images we support in import image dlg. We've always supported them, might as well show them.
  - Check the glyph class when deciding what anchor to use.
  - Anshuman Pandey wants to be able to set the glyph's GDEF class. I've never understood why the default behavior wasn't good enough, but it's easy to do.
  - One of the fields in Glyph Info had some garbage initialization.
  - Add a default anchor point type to the AddAnchorPoint scripting command. FF will try to guess an appropriate value.
  - Add some standard window sizes to the fontview window. I'm tired of having the windows sized to other people's standards whenever I review a bug.
  - There was a path through expand stroke where a control point was marked as non-e xistant by mistake.
  - Expand Stroke would leave contours with the reversed orientation if it had to do a remove overlap internally.
  - Oops. The routine to save the encoding prefs file could not handle an encoding plug-in.
  - KANOU points out that the origin pulldown list in the transform dlg was not being translated.
  - In the preference dlg all of the [...] file browsers had the title "Call Script" which isn't appropriate for most of them.
  - Typing .* and pressing [Filter] did not show hidden files in the file chooser.
  - the code to check for intersections failed to check if there were a crossover in the last tiny section of a spline before its end.
  - Was generating ofm files when creating bdf fonts. Seems unnecessary.
  - Was producing a EBLC table with bad first/last values for first glyphs.
  - Hmm. Not all systems have tzset. Add a configuration option for it.
  - In scripting, a return within a loop sent ff into an infinite loop.
  - Kanou's patch for adding a new flag to scripting Import, to clear out the layer first.
  - Patch from KANOU to add SetGlyphChanged scripting function.
  - If an implied point became real, this fact was not reflected on the display until the user forced a point renumbering.
  - A mouse click in an empty metrics view references garbage memory -- And crashed Kanou's session.
  - Loading a large bitmap font left bits of the backmap of the encoding map uninitialized.
  - Loading a pcf font caused a crash.
  - Moving the control points of an implied point should move the implied point. And we should indicate which points are implied so this behavior doesn't surprise.
  - Michal Nowakowski points out that renumbering points in a glyph should turn off point matching in references.
  - Add support for bitmaps with vertical metrics.
  - Wasn't storing the vendor id in the OS/2 table properly.
  - Rounding error present on PPC which was absent on *86 machines.
  - Werner would like pixel size info to show on the title of a charview when debugging.
  - Added a new menu command "Point->Center Between Control Points" for truetype.
  - When manipulating menus with keys (rather than mouse) Werner found a crash.
- 5-Dec-2005
  - Creating the first bitmap view might cause a crash -- depending on how the linker organized memory.
  - Loading an sfd file now checks to see if there are any glyphs with splines in them, and if there are not turns on the onlybitmaps flag. Someone pointed out that if you inadvertantly edit in the outline view -- even if it is nothing significant, then the font is forever after marked as outline. This isn't a perfect fix, but it will prevent the worst from happening.
- 1-Dec-2005
  - Use GNU gettext rather than my nomen routines to handle translation of the UI..
  - Add support for plugins.
  - I added a check in parsing tfm files to make sure I didn't read outside the bounds of the kern table. But the table size was expressed in ints (32 bit units), and my index was in bytes, so I frequently exceded it.
  - If we used Get Info on a reference in a ttf font, and that reference did NOT do point matching we would generate an inappropriate error.
  - My support for using endchar as seac in type2 fonts only worked in bare cff fonts, it did not work if the cff were inside an sfnt wrapper (opentype).
  - I have decided that I will now store all postscript strings in utf8 (copyright, weight, familyname, etc.) They SHOULD all be ascii. But the occasional copyright mark would sneak in. We went into an infinite loop on one such because that was an illegal utf8 string. So fix a number of problems related to this.
  - Switch from using an internal routine to using freetype to rasterize b&w bitmaps when debugging ttf instructions.
  - Make the gridfit/debug settings sticky across invocations (store in prefs).
  - Add popup info showing the level of greyness in a truetype font being debugged in anti-alias mode.
  - Werner suggests altering the dynamic range of anti-aliased rasters in the charview so that the outlines remain visible behind them.
  - Make the background color of the debugger raster window configurable by the user
  - If a curved point had no control point in one direction, then ff thought it had no direction and felt free to change it. It should inherit the direction from the other side of the point. This was even more confusing if the point went through a two step process, first simplifying one side into a line (losing the cp) then simplifying the line away (losing the direction).
  - Use a better algorithm to indicate changed pixels. (in debug window)
  - Screwed up View->Show Grid Fit... in Mono mode.
  - Werner wants to be able to see grey scale rasters while debugging truetype. He also points out that if the instruction before the end of instructions changes pixels, ff would leave them marked "changed" even after finishing the instructions.
  - We were getting multiple error windows.
  - Don't allow users to add instructions to a glyph containing both a reference and contours. Or a glyph where a reference is scaled more than 200%. (tt doesn't allow these combinations so the references need to be copied inline)
  - Typo in remove overlap caused bad bug in feta26. Error introduced 15 Sept.
  - Further work on what makes a spline linear.
  - The utf7 output routine in sfd did not convert from utf8 properly.
  - Panov has found yet another error in simplify. Be really exuberant about turning splines that trace out lines into lines.
  - Panov finds another bug:
    - If we change the unicode value of a glyph, then we also need to change
    - the unicode value of any references to that glyph.
  - Panov presents four more bugs:
    - If an sfd file contains an unencoded glyph, it will crash
    - Force Encoding->Original will crash if there's a bdf font missing some characters (ie. the piecemeal display font)
    - Goto Dlg tried to free an uninit value
    - Goto Dlg contained a string initialized by latin1 rather than utf8.
  - Hmm. the changedsincelasthinted flag doesn't apply to truetype. The equivalent thing (I guess) is not having any instructions on a glyph with splines.
  - Panov wants a way to build up arrays using easier syntax than: create array, assign each element.
  - Sometimes we would get both an EUC-CN and a GB2312packed entry in the Encoding menu.
  - Create a plugin for GB12345, and treat it (in sfnt tables) as GB2312.
  - Add a new scripting funtion: NearlyLines to convert almost linear splines to linear.
  - Tweak AddExtrema so that it doesn't create Extrema points which are too close to the endpoints.
  - Didn't terminate an array of answer strings to a question dialog.
  - Fixed a crash in stem database.
- 28-Oct-2005
  - More work on the mac install procdure.
  - Redo the install documentation on the website & in the readmes
  - Add a hack to the directory browser so that on cygwin getting a directory listing of "/" will include the magic (fake) directory /cygdrive (which gives access to the rest of the PC)
  - Add a new scripting funtion: NearlyLines to convert almost linear splines to linear.
  - Tweak AddExtrema so that it doesn't create Extrema points which are too close to the endpoints.
  - I was dumping all opentype ligatures into an ofm(tfm) file. But I should probably only add 'liga' and 'rlig' ligatures.
  - Omega has a bug where it thinks 0 width glyphs do not exist. Which means it thinks none of the combining accents, etc. exist. So force the width of any zero width glyphs to be the smallest positive width.
  - When reading ttf/otf fonts, FF gave alternate substitutions (and multiple subs?) a tag of 0.
  - Add two scripting routines to allow people to read & write strings from and to files. One string per file.
  - The ClearTable scripting command parsed the table's tag incorrectly.
- 23-Oct-2005
  - Try to make the Mac install a bit more mac-like by adding an entry to the X11 Applications menu rather than expecting users to start fontforge from the command line.
  - David Binderman points out an out of bounds array reference in cvexport which has been there for years. Gleep.
  - Add scripting commands for manipulating ttf instructions.

    I added the following new scripting functions:

    - SetMaxpValue("item-name", value)
    - GetMaxpValue("item-name")
    - ClearInstrs()
    - ClearTable(tag)
    - AddInstrs(thingamy,replace,instrs)
    - FindOrAddCvtIndex(value[,sign-matters])
    - ReplaceCvtAt(index,value)
    - GetCvtAt(index)
    - PrivateToCvt()
  - Daniel Gillmor points out there is no way to set the OS/2 Width field from a script. He then provided a patch with two new functions which does this. I realize there is no way to set any of the OS/2 values (except panose), and there should be (and to retrieve them too).

    I added the following new scripting functions:

    - SetOS2Value("item-name", value)
    - GetOS2Value("item-name")
    - SetPrivateValue("item-key","item-value")
    - GetPrivateValue("item-key")
    - HasPrivateValue("item-key")
    - RemovePrivateValue("item-key")
  - A number of fixes for ofm files.
  - When outputting mark-to-base lookups with multiple anchor classes, ff would put a base glyph in the coverage table several times if it was used by several mark classes. Bad.
- 18-Oct-2005
  - KANOU points out that I was using too strict a rule for parsing svg polygons.
  - OFM output was not working in fonts with lots of kerning combinations.
- 16-Oct-2005
  - A number of fixes for ofm files.
  - Add default 'nukt' "ligature" substitutions to appropriate Devanagari characters
- 15-Oct-2005
  - The patch to the routine determining what glyphs got output broke bitmap only fonts.
  - Ofm files didn't contain ligatures.
  - The ofm patch broke tfm output.
- 12-Oct-2005
  - Add support for generating & parsing ofm files (I hope)
  - If I tried to generate a font from an absolutely empty fontdb (ie. a new one) then I'd get a stupid error about how .notdef was at encoding -1 and this was a bad idea.
  - Add 4 new information types to scripting GlyphInfo
    * LayerCount
      Number of layers in glyph (usually 2)
    * RefCount
      Number of refs in glyph
    * RefNames
      Returns an array of all reference names (may be 0 length)
    * RefTransform
      Returns an array of all reference transforms
  - Don't mark glyphs with widths other than 1em as being worth outputting (require widthset). Used to use both (because in the early days, before pfaedit moved to sourceforge even, the widthset bit didn't exist). Now there are too many cases w here glyphs are created with a width other than 1em (marks, glyphs in monospace fonts (where the space is anything but 1em)).
  - When printing a type3 pdf font, give it a name. Not required, but so what.
  - Patch from Michal Nowakowski. When editing truetype instructions using my prefix notation for numbers, there was a crash if a number needed a word (rather than a byte).
  - Add some support for reading fonts out of a pdf file.
    - Limitted support for pdf type3 (no images)
    - Only support (Hex, 85, Flate, RLE)Decode filters (no support for lzw, fax, JBIG, DCT)
  - The routine to build the stem database (autohint) would set up a point database and then call a routine to convert all splines into a set of monotonics. But that routine could remove 0 length splines (and the points attached), which would mean our point db would be wrong.
  - Stefan Wanger suggests some patches to fix memory leaks.
  - Stefan Wanger gave me a type2 font which used type1 flex conventions (calling othersubrs, etc.) There is no othersubrs operator in type2, nor any place to store othersubrs subroutines. But it is easy enough to support, so why not. Warn that it's an illegal font, of course.
  - Stefan Wanger gave me a font containing the utf8 byte order mark in a fontname ( in a CFF Name Index). PostScript says FontNames are printable ASCII. But it's easy enough to skip over it.
  - Stepan Roh points out that in a monospace font, combining glyphs should default to the mono-width while in a proportional font they should default to 0 width (or perhaps 1 em-unit for compatability with old idiotic windows systems). Use the panose field to determine if a font is monospace.

    Actually ALL glyphs in a monospace font should default to the mono-space width rather than 1em.

  - New dialog: Hints->Edit 'maxp'... Gives user access to number of functions defined, the stack depth, storage usage, number of twilight points, which ff can't figure out for you.
  - Figured out how to make transparent images work on cygwin
  - Michal Nowakowski points out that negative values are duplicated in cvt.
  - Patch from Michal Nowakowski fixing crash when setting size of cvt table to 0.
- 29-Sept-2005
  - Add utf8 entry points for many (ucs2) routines. Minimal ability to draw non-BMP glyphs now with bdf fonts with encodings: *-UnicodePlane-1 (for plane 1), *-UnicodePlane-2 (for plane 2), etc.
  - Add a menu command to add values from the private dict into the cvt table (BlueValues, StemSnaps).
  - The Edit cvt window usually failed to draw anything in itself when it popped up (subsequent refreshes were ok).
  - Patch from Michal Nowakowski to improve memory usage in auto instr.
  - Printing sample text was broken in fonts with no kerning classes.
  - cygwin does very weird things with shared libaries, and we didn't support them at all.
  - FontForge did not support the depreciated usage of endchar to mean (almost) seac in type2 charstrings. It should now.
  - os2 typo linegap was not read out of sfd files.
  - Display 'gai' files in the open dlg.
  - I got some mnemonics wrong. Fix 'em up.
  - bdftopcf will use the glyph encoded at 0 as the default glyph if there is no explicit DEFAULT_CHAR. It seems happy with a DEFAULT_CHAR of -1 to mean no default, so use that if we don't want glyph 0 to be the default.
  - when outputting bdf, fnt or pt3 bitmap fonts with no outline font generated, we'd get filenames like foo-*-13.bdf. Get rid of the "-*".
  - Support point numbering of composites even when not debugging.
  - Michal Nowakowski points out that the cvt editor crashed if we changed the length of the table.
  - Provide two new scripting functions:
    - MoveReference(xoff,yoff,[ref-name/ref-unicode]+)
    - PositionReference(x,y,[ref-name/ref-unicode]+)

    These search all selected glyphs, looking for any references in those glyphs with the given name/unicode value, and then translating the reference by (xoff,yoff) or positioning the reference absolutely at (x,y).

  - ff failed to read horizontal metrics properly from a type2 CFF CID font. In most cases this would be masked by the fact that ff would correct the bad width values by reading the hmtx table. But if one had a bare CFF font, or a 'gai' font where there is no external source of widths, ff would get things wrong.
  - Alexej Kryukov points out that most entries in the private dict should be scaled when we do a ScaleToEm.
  - Fix a couple of problems with cid font display that "gai" fonts expose.
  - Michal Nowakowski points out that I generated truetype instructions --- and then forgot to attach them to the glyph. Whoops.
  - Loading extensible glyph information from a tfm file was broken by the encoding change.
- 19-Sept-2005
  - ff did not read AAT classes (kerning classes, etc) properly. It read one extra element which could cause problems
  - Cleanup svg output for kerning classes with no members.
  - Out of bounds array reference in OS2FigureCodePages caused a crash on the mac.
  - When loading a type1 font we failed to set the unicode encoding on seac references. This probably broke lots of things, it certainly broke replace with reference.
  - Add a DefaultRoundToGrid scripting function to set the Round-to-Grid truetype reference bit (basically set it whenever we have a reference which isn't point matched).
  - Add support for truetype point matching in references and anchor points
  - Improve the debugging heuristic that notices when we've jumpped to a new routine to work better with composites
  - If I attempted to debug a glyph with no instructions there was a race condition and if the race was won one way, ff would hang.
  - We weren't numbering points in a composite. This was only obvious when we did a View->Show Grid Fit on a composite glyph.
  - When debugging a composite glyph, ff forgot that some references are translated (or scaled or rotated), and failed to display this.
  - FF failed to keep track of the truetype "RoundToGrid" bit which applies to references.
  - In the Points window of truetype debugging, if the penultimate point of a contour was interpolated, then the contour boundary was drawn in the wrong place.
  - Use to store debugging dpi/pointsize in the charview. Werner suggests that it be global (so different glyphs will all share the same defaults).
  - Some Unicode code blocks have moved (probably those which only in the pipeline or some such), and some others have been added to the pipeline.
- 15-Sept-2005
  - Can't use a subroutine to refer to a translated glyph which contains flex hints in type1 output.
  - Hide another problem with rounding errors in remove overlap.
  - Don't produce multiple warnings about the local encoding.
  - In quadratic fonts the Remove Overlap menu item is disabled, but if you use the hotkey the command is invoked (with disasterous results).
  - Typo in point info code to determine whether a hint mask contains conflicts (matched vertical hints against horizontal ones)
- 12-Sept-2005
  - Added a scripting command DefaultUseMyMetrics() to set the use_my_metrics bit in old fonts.
- 11-Sept-2005
  - When ff pastes refs from one font to another it tries to figure out the width of a glyph containing references from the width of what appears to be the base glyph. (because if you paste Aacute from one font to another, the size of the "A" glyph may be quite different in the new font. Using the width of the glyph in the original font would be wrong).

    There are two problems with this:

    1. It didn't take forward references into account, and would use the original width rather than the modified width of the reference.
    2. It would (probably) be confused by an Alphatonos where the width of Alphatonos is not the same as that of Alpha.

    instead figure widths out after all pastes have completed, looking at the use_my_metrics bit to get things right.

  - Handle forward references to glyphs which will be pasted into by the current command (used to work, broken by the encoding change)
  - Various fixes for pasting references from a font which has since been closed.
  - Support the ttf "_USE_MY_METRICS" bit on composite glyphs. This entails:
    - Retaining it when reading a truetype font
    - Setting properly when generating one
    - Storing it in sfd files
    - Giving the user a way to set it with the Element->GetInfo command
- 9-Sept-2005
  - ff crashed when given a bdf font with multiple glyphs with the same name
  - Try to avoid generating bdf fonts with multiple glyphs with the same name. This happened when a single glyph was mapped to several encodings, a concept bdf doesn't support. Now when it looks like this will happen we rename the glyph.
  - Uninitialized variable in dependant sub-menu (broken by encoding change)
  - Pasting a reference into a font which did not contain the referred glyph did not give you the option of copying the original outlines any more. (broken by the encoding change)
  - Merging fonts where glyphs had multiple encodings caused crashes.
  - I'm very old fashioned. I like having error messages on stderr. But far too many people don't see them there. I guess they invoke fontforge directly from X with stderr directed to some invisible console window. Well create a little window to contain warning messages about font errors (for instance when reading an otf font we might complain about glyphs out of bounds, etc.)
  - Add support for postscript bitmap fonts. This means:
    - Ability to parse (simple forms of) the imagemask ps operator
    - Code to detect that a type3 is a ps bitmap, and convert it into a normal bitmap font that people can edit.
    - Bitmap output as a ps type3 font (using imagemask)
    - Fixing a bug in my output routines which worked fine for images in eps files, but failed horribly if that same code was stuffed into a charproc and executed on demand.
  - ff could not handle an encoding specified as a simple array. (Not allowed in typ e1 spec, but obvious for a type3)
  - And ff's handling of any type3s was broken by the encoding patch.
  - If a font contained fewer than 256 glyphs, then ff failed to load a format0 cmap subtable properly.
- 4-Sept-2005
  - In fontinfo, changed the tab "TTF Values" to be "OS/2", consolidated the Panose tab underneath it. Added many more fields, almost all of OS/2.
  - Fixed a number of uninitialized variables, at the instigation of Pavel Roskin.
  - Applied several patches from Pavel Roskin.
  - The scripting WorthOutputting command insisted on an argument, even when it should not have.
  - Scripting SetCharCnt command has been broken since the encoding change.

Earlier Changes
Changes to PfaEdit (predecessor to FontForge)