FontForge Changelog

What's new in FontForge 01-January-2023

Jan 1, 2023
  • Display the block name for reserved code points by @dscorbett in #4934
  • Don't respond to wheel scrolls for buttons/tabsets by @jtanx in #4940
  • gfilechooser.c: fix behaviour when changing file type by @jtanx in #4939
  • Better control-drag handling for line-adjacent points by @skef in #4945
  • Fix resolution of program root by @jtanx in #4956
  • Fix missed nonextcp edit by @skef in #4958
  • Support ToUnicode extraction from PDFs for Type3 fonts by @aidos in #4961
  • Add resource file and Windows application manifest by @jtanx in #4950
  • Fix name extraction for Type3 fonts from pdfs by @aidos in #4960
  • cmake: Install fonttools and pycontrib by @jtojnar in #4941
  • Fix InfoPlist.strings file name. by @MaddTheSane in #4962
  • Fix normalisation of absolute paths by @jtanx in #4963
  • Handle non-array cm transforms while reading graphics stream from PDFs by @aidos in #4965
  • Fix rect extraction from graphics stream for type3 fonts by @aidos in #4967
  • Change which lookup types are suggested for jamo features by @dscorbett in #4994
  • Better line handling in simplify by @skef in #4981
  • Use 'cmap' for Adobe-Identity-0 CID fonts by @dscorbett in #4993
  • Fix ChangeGlyph calcluations relative to new nonext/prevcp conventions by @skef in #4979
  • Docs composite glyph by @skinkie in #4971
  • FVSplineFontPieceMeal: Check that the clut is present before applying conversion by @jtanx in #4999
  • Expand the lists of languages and scripts by @dscorbett in #4982
  • Add flags to Python font.transform() by @skef in #4980
  • Support setting SplineChar width from importOutlines. by @frank-trampe in #5005
  • Undefine "extended" macro temporarily on GNU Hurd by @anthonyfok in #5047
  • Define PATH_MAX and MAXPATHLEN for GNU/Hurd compatibility by @anthonyfok in #5046
  • Fix Ascent & Descent Importing from SVG Font by @GroveDG in #5035
  • Prevent floating point shenanigans in loop termination (fixes #5012) by @skef in #5013
  • GroupFindLPos() in fontforgeexe/groupsdlg.c null pointer fix by @Omnikron13 in #5025
  • Fix drawing outside of expose calls by @jtanx in #4949
  • Fixed one more typo by @MahdiAljazairi in #5055
  • Upgrade GitHub Actions by @cclauss in #5014
  • Prevents memory underflow in GFileMimeType() in gutils/fsys.c by @Omnikron13 in #5018
  • Add a preference for saving editor state by @khaledhosny in #5044
  • splineutil.c: prevent hang on nan input by @jtanx in #5058
  • Shell-quote command sent to compressor in BDF by @ctrlcctrlv in #5060
  • Fix pfadecrypt bugs by @zjw in #5074
  • Include SFDUTF7 functions in libfontforge.so by @ctrlcctrlv in #5078
  • splinefit.c: Improvements to merge/simplify by @Alatius in #5095
  • RFE: [FEAT] When reference to non-existent glyphs are present in an OpenTy… by @rajeeshknambiar in #4097
  • docs: Python scripting - update font.mergeFeature with details of boo… by @rajeeshknambiar in #5107
  • Fix logic for CharString double-movetos after PR 4685 by @skef in #5120
  • Upgrade to Unicode 15.0.0 and fix and expand the script lists by @dscorbett in #5110
  • Fix broken link on scripting page by @bkmgit in #5135
  • Fix typo in man page by @h3xx in #5106
  • Fix painting behaviour of the ruler linger window and layer change dialog by @jtanx in #5163
  • fontinfo.c: fix crash from uninitialised other_pos by @jtanx in #5165
  • tottfgpos: Fix needless warning about 16-bit field by @Finii in #5136
  • ufo.c: emit guidelines key by @jtanx in #5166
  • fvmetrics.c: partial revert of 1033bc6 by @jtanx in #5167
  • Update tranlsations from Crowdin by @jtanx in #5168
  • Fix woff2 decoding by @jtanx in #5160
  • Record unicode cmap encodings when one glyph is in multiple slots by @skef in #4586

New in FontForge 03-March-2022 (Mar 17, 2022)

  • Major updates:
  • Python plugin support (#4642, #4682, #4671) @skef
  • Overhauled resource/appearance management (#4704) @skef
  • Merge/Simplify improvements (#4567, #4697) @linusromer
  • Updated Unicode support to Unicode 14.0.0, with nameslist functionality now directly integrated. (#4810) @jtanx
  • Add Points Of Inflection / Balance / Harmonize (#4900) @linusromer
  • Mac bundle/startup fixes (#4827) @jtanx
  • Language system tag list/script range/feature list updates (#4561, #4852, #4854, #4855) @dscorbett
  • You can now substitute glyph(s) by NULL (#4619) @ctrlcctrlv
  • Changes to default behavior:
  • Reserved Font Names no longer written by default when adding SIL OFL to a font (#4531) @ctrlcctrlv
  • UFO include path is altered, please update your fonts if needed (#4631) @ctrlcctrlv
  • Build changes:
  • The minimum supported Python version is now Python 3.6
  • Libuninameslist is no longer used or required
  • FontForge is now compiled with -Wall by default
  • Cidmaps are now bundled

New in FontForge 07-November-2020 (Nov 9, 2020)

  • This release falls on the 20th anniversary of the first release of FontForge back in 2000. It brings a wide range of minor tweaks and bug fixes for the user interface and file format handlers and a special splash screen to commemorate the big day.

New in FontForge 14-March-2020 (Mar 14, 2020)

  • Significant changes include the following:
  • FontForge now has much improved stroke expansion functionality. The main change is that it actually works most of the time. New features include support for arbitrary convex nibs and the miter-clip and arc join styles from SVG 2. All functionality is accessible from the Python and native APIs. (By @skef.)
  • Remove overlap handles certain important edge cases better. (By @skef and @frank-trampe.)
  • The Python API now has a function called genericGlyphChange that matches the "Change Glyph" command in the GUI. See #4133 for more details. (By @skef.)
  • The Python API now has functions for getting Unicode script and for interrogating glyph boundaries. (By @ctrlcctrlv.)
  • One can now use text flags (rather than just numerical flags) when opening a font file via the Python API. (By @skef.)
  • UFO import now outputs the note field properly. (By @skef.)
  • SVG import is much more robust. (By @skef.)
  • We have dropped most gnulib and autotools logic in favor of CMake, which dramatically simplifies the build system and just as dramatically improves build time. (By @jtanx.)
  • As part of the switch to CMake, per the deprecation of Python 2, and per the lack of objections to the proposal on the mailing list, we have dropped support for building FontForge with Python 2 support. The non-build-system Python 2 code remains, but it is neither tested nor maintained nor supported and is likely to follow a trajectory of decay and then removal.
  • Documentation is now rendered in Sphinx, which makes maintenance and improvement easier. (By @jtanx.)
  • Translations now happen on crowdin, which makes contributions easier. (By @jtanx.)
  • We got such a contribution for Croatian. (By @milotype.)
  • Character view point coloring is more consistent, and preview fills support transparency. (By @skef.)
  • The user can now move and close tabs in the character view. (By @ctrlcctrlv.)
  • The metrics view now allows for entry of negative kerning values and runs a bit more smoothly. (By @ctrlcctrlv.)
  • There is now a warning when a user is about to discard an unsaved script. (By @ctrlcctrlv.)
  • We fixed bugs all over, as always, with particular attention given to the metrics view, Python, Spiro, and high-resolution displays.

New in FontForge 01-August-2019 (Aug 1, 2019)

  • As part of an ongoing effort to clean up the code base, there have additionally been multiple build system changes:
  • Python 2 support is deprecated. It is strongly recommended to build with Python 3 support. Python 2 support will be removed in a future release.
  • Both the Windows and Mac builds are now built with Python 3 instead of Python 2.
  • The minimum supported version for the Mac build is now MacOS Sierra (10.12)
  • FontForge no longer uses gnulib
  • collab support has been removed
  • The build system now expects libuninameslist to be present, and will fail if it is not found. Building without libuninameslist must be explcititly specified using --without-libuninameslist
  • Added Croatian translation
  • Added user decompositions
  • New graphic for the splash/about screen
  • Images embedded in SFDs are now serialised as PNGs:
  • This is enabled by default, but may be turned off with the 'WritePNGInSFD' option.
  • A new tag is used to identify this mode; 'Image2', instead of 'Image'
  • This requires FontForge to be compiled with libpng support. If not compiled with libpng, FontForge will revert to the old method of serialising RLE encoded raw images.

New in FontForge 13-April-2019 (Apr 15, 2019)

  • This is a bugfix focused release.

New in FontForge 17-March-2019 (Mar 17, 2019)

  • This release, the first since 2017, includes countless small bug fixes and a few significant features.
  • Complete GDK support, enabled by default on Windows and Macintosh, from @jtanx.
  • Enhanced UFO 3 support, with separate import/export paths for UFO 2 and UFO 3, from @frank-trampe. See the technical bulletin here for more information.
  • Improved feature file support, from @skef and @khaledhosny.
  • WOFF2 support, from @jtanx.
  • Unicode 12.1.0 support, from @JoesCat.
  • Extended Python interfaces, from @skef.

New in FontForge 31-Jul-2017 (R2) (Aug 1, 2017)

  • Compile run_fontforge with Visual Studio 2015 to avoid antivirus false positives

New in FontForge 31-Jul-2017 (Aug 1, 2017)

  • Upgrade to Pango 1.40.7
  • Sync with the 20170731 release

New in FontForge 17-Jun-2017 (Aug 1, 2017)

  • Upgrade to Freetype 2.8
  • Upgrade to Cairo 1.15.6
  • Upgrade to Pango 1.40.6
  • Rebuild all X11 dependencies from git master

New in FontForge 4-Oct-2016 (Oct 10, 2016)

  • Sync with the 20161005 release
  • Upgrade to Freetype 2.7

New in FontForge 23-Sept-2016 (Oct 10, 2016)

  • Also bundle ssleay32.dll for the Python ssl module.

New in FontForge 14-Sept-2016 (Oct 10, 2016)

  • Updated application icons (finally)
  • You may need to clear your icon cache for it to take effect

New in FontForge 13-Aug-2016 (Oct 10, 2016)

  • Sync with git master (prerelease)

New in FontForge 7-Apr-2016 (Jul 31, 2016)

  • Fix crash in kern pairs dialogue (#2681)
  • Fix preferences dialogue being too large (#2675)

New in FontForge 05-04-16 (Jul 31, 2016)

  • Sync with the April 20160404 release

New in FontForge 24-August-2015 (Aug 26, 2015)

  • This fixes a few bugs, including some in U. F. O. kerning classes and FreeType rasterization, and adds a Korean translation.

New in FontForge 13-06-15 (Jul 21, 2015)

  • Sync with the June 20150612 release
  • Fix clipboard pasting to/from FontForge
  • Patching FontForge to work with filenames regardless of current locale (still somewhat experimental)

New in FontForge 30-05-15 (Jul 21, 2015)

  • Patch Gnulib to make fopen and open assume UTF-8 filenames for opening files. This allows files with non-ASCII/English filenames to be opened IFF a UTF-8
  • locale is used (see fontforge.bat)
  • Port the MetaFont import function to Windows
  • Fix autorecover 'forget' options (actually delete the files if a 'forget' option is requested)
  • Fix saving hotkeys

New in FontForge 26-05-15 (Jul 21, 2015)

  • Using GLib for Unicode file browsing (opening fix TBA)

New in FontForge 24-05-15 (Jul 21, 2015)

  • FontForge-2015-06-12-Windows.exe

New in FontForge 03-04-15 (May 1, 2015)

  • Build for 20150330 release (ab4d46) + 902919
  • Hovering over PDF files in the file browser should now be fast(er)
  • Disabled scanning of fonts in the PDF files (slow, buggy)

New in FontForge 03-01-15 (May 1, 2015)

  • Downgraded glib to 2.42.0-1 (XP compatibility)

New in FontForge 11-11-14 (Jan 21, 2015)

  • Update to latest git version a7edc6
  • Fix potential PATH issue for PATHs containing double quotes (GH #1907)
  • Switch to different X server port (11) to avoid potential conflict with old versions of FontForge (2012/2013 versions)
  • Update VcXsrv_util to allow for dynamic switching of the port used

New in FontForge 18-10-14 (Jan 21, 2015)

  • Bug-fix for the file picker dialogue. Makes it much more robust to Windows file paths.

New in FontForge 20-06-14 (Jan 21, 2015)

  • Upgrade to latest git version d4abd3:
  • SF issue #8 is fixed
  • Menus are now not absurdly wide
  • Build FontForge with Cairo support:
  • Glyph outlines in the editing window are now anti-aliased
  • The glyph fill operation should be faster
  • Fontconfig is not used any more, unless Cairo is disabled (-usecairo=no)
  • Fonts can be placed in share/fonts or a folder called 'ui-fonts' in your preferences folder and FontForge can use them to display the user interface
  • correctly. If you installed FontForge, this will be APPDATA%/FontForge/ui-fonts. This distribution comes pre-bundled with the DejaVu fonts. Cantarell, Inconsolata and WenQuanYi has been dropped.
  • Bundle the Python executable (python.exe as ffpython.exe):
  • This gives users direct access to the Python distribution bundled with FontForge, so they may install extra Python modules if they need to.
  • Unfortunately the Python extension cannot be used with the native
  • official) Python installation as that has been compiled with MSVC.
  • There are limits to what can be installed. Simple extensions are fine.
  • Trying to install something like numpy will not work.

New in FontForge 14-06-14 (Jan 21, 2015)

  • Updated to the latest git version 4b0ceb
  • Patched libxcb (courtesy of VcXsrv), allowing libX11 to be upgraded to
  • the latest git version. Probably fixes a few GUI bugs.
  • Updated all X libraries to the latest git version
  • Fixed resource loading (the background is now white)
  • Fixed scrolling in menus with the scroll wheel
  • Fixed the display of tool-tips

New in FontForge 31-05-13 (Jan 21, 2015)

  • Updated to latest git version 416fb4 + snapping fix
  • TTC handling has been fixed
  • Some crashes in the Print dialogue have been fixed
  • The cursor used for scroll zooming has been fixed
  • Point snapping in the glyph editor has been fixed

New in FontForge 20090622 (Jun 23, 2009)

  • Apple seems to have broken the X11 clipboard around 10.5.7. Or so other people tell me. I can't reproduce the issue on my 10.5.7 system.
  • I hope I have worked around this by adding a preference item
  • File->Preferences->Generic->ExportClipboard
  • Turn this Off if the clipboard doesn't seem to work.
  • Peter Baker says that a solution is to go into X11 Preferences, click on the "Input" tab, and uncheck "Enable key equivalents under X11".
  • Possibly downloading a new set of developer tools will fix it:
  • http://developer.apple.com/Tools/
  • (then log in, (or become a member & log in, it's free))
  • Click on Downloads
  • In the "Downloads" side bar, click on "Developer Tools"
  • Download and Install 3.1.3
  • Add support for friendly names attached to style set features (New in OTF 1.6).
  • Add support for Mark Sets (New in OTF 1.6)
  • Serhij Dubyk has provided a Ukrainian UI.
  • Alexandre Prokoudine has updated the Russian UI.
  • Updated Polish translation from Michal
  • Various patches from Michal fixing some out of bound array references.
  • Added a cvt.find method to the python cvt object which returns the index in the cvt table of a given value (or -1 if not found).
  • Two issues:
  • Apple has changed the name of the preference file for X11. Annoying. Pointless.
  • Apple (or xorg) has changed the default setting of DISPLAY.
  • Together these meant that ff did not use appropriate command keys in the menus.
  • I wish Apple wouldn't do pointless changes.
  • When faced with non-integral coordinates ff would sometimes introduce rounding errors so the start and end of a contour were slightly different in type1 output. I think this is now fixed...
  • Fix some problems with the non-linear transform dlg.
  • Add a nltransform method (non-linear transform) to python font, glyph and layer.
  • python simplify could crash.
  • Patch by Michal to fix problem when compiled with long doubles.
  • If used twice, tilepath would screw up memory.
  • Someone wants a Reverse contour direction command (in addition to correct contour direction).
  • The code used to check bounding boxes in otf fonts had a bug which caused it to report a minimum value of 0 when the min value was positive. This meant we got erroneous reports of points outside the font's bounding box in fontlint.
  • The code used to check spline intersections had a typo which occasionally caused erroneous intersections to be reported.
  • fontlint said bad 'glyf' table when it meant bad glyph data in CFF table.
  • If a font had multiple glyphs in the ff clipboard, and we sent that clipboard through X11 (rather than just using the internal clip) then only one glyph would come out on the other side. Provide a mechanism for specifying multiple glyphs in the X clipboard too.
  • Refined fix to 'kern pair loss' problem, reported by Louis Simard. There probably was also a similar 'ligature loss' problem.
  • Fixed buffer overrun when filling GASP with default values.
  • Enlarging Metrics window made the feature pane and kerning values grid illegible.
  • Fixed a bug reported by Louis Simard:
  • 'Build composite glyph' was enabled in wrong situations and crashed.
  • when saving an sfd after adding a new "kerning by classes" subtable and cancelling its edit dialog.
  • FF crashes just after closing an open spiro contour (by dragging its first point over the last one, and then a bit further).
  • When reading strings from the name table, certain platform/specific settings would cause ff to:
  • 1. read the wrong string
  • 2. screw up memory.
  • Consolidate various mechanisms for finding the xHeight/capHeight of a font. Look for flat lines at the top of appropriate glyphs and then snap to the closest bluevalue. If no flat lines, then try curves.
  • Output Cap/X Height into UFO.
  • Add new python commands
  • font.capHeight
  • font.xHeight
  • Was outputting dates within but should be in when generating UFO files.
  • A font with erroneous GSUB tables (referring to non-existant glyphs) and an incomplete set of glyphs (caused by having bitmaps for glyphs without outlines) caused ff to crash.
  • In svg paths, if you omit a command after a 'moveto' then it defaults to a lineto, not another moveto.
  • Add a python font.saveNamelist(filename) command.
  • Jakub Steiner thinks it would be a good idea if the tool bindings of mouse clicks in the glyph editor were sticky across invocations.
  • Werner finds a place where the new jstf code was corrupting memory.
  • Cancelling Element->Validation->Set Extremum Bound caused a crash.
  • When closing a metrics view associated with a CID keyed font, ff would crash.
  • Someone wanted to be able to set both the left and right side bearings at the same time.
  • Patch by Alexey to unlink bitmap code.
  • Barry points out it would be better to use fputs when I use fprintf.
  • If the user didn't have freetype, then the anti-aliased metrics view was faint.
  • Oops, could write but not read styleset names from a feature file.
  • Show Att didn't display cursive anchor positioning anchor classes properly.
  • Panov wants a python function to determine the extent in the x direction of a contour when y is fix. That is, the minimum and maximum values x can attain for a given y. And vice versa.
  • Extend this a little so the user can specify a range of y values (return the extent in x when y is between ybottom and ytop).
  • contour.xBoundsAtY(ybottom[,ytop])
  • contour.yBoundsAtX(xleft[,xright])
  • layer.xBoundsAtY(ybottom[,ytop])
  • layer.yBoundsAtX(xleft[,xright])
  • And that appears not to be what he wants anyway. Oh well.
  • Dave wants a python function to return a random text string.
  • o font.randomText(script[,lang])
  • If ff opened a bad bitmap font file and tried to place it in a font's background layer, ff would crash.
  • Adjusting the Previous Control Point from the Get Info (point) window of an HVCurve point had very odd effects.
  • Ubuntu now checks that if you use "%3$s" in a sprintf format string you must also use "%1$" and "%2$".
  • Patch by Nicolas Spalinger improving OFL tooltip.
  • Patch by Andrey Panov to add GetAnchorPoints to legacy scripting.
  • Widhaya Trisarnwadhana points out that the mnemonic _N is bound to two items in the View menu of outline glyphs.
  • I let people assign any name to glyphs in the private use area without destroying the encoding. But due to a bug, if you changed the glyph's encoding to the PUA it fell into that code and would not change the font's encoding either.
  • If a point had control points which were less than 1 em-unit from it, then FF would sometimes think it was a curve point when it wasn't. That's probably still true, but some of the more egregious cases have been fixed.
  • Panov suggests that for cubic points, when we round them we should not round the locations of the controls but should round the distance from the on-curve point. Things are a bit trickier for quadratic controls. If the on-curve point is interpolated, then obviously the controls should be rounded and not the on-curve point.
  • Exporting bitmap formats chose the wrong format.

New in FontForge 20090224 (Feb 25, 2009)

  • Support for UFO version 2.
  • If a CID font contained a ".notdef" glyph, then when FF generated a Type1 CID font resource from it, FF would omit the .notdef glyph.
  • Patch from Panov to allow legacy scripting to guess values for the private dictionary. PrivateGuess(key).
  • Werner wants to know what version of freetype ff is using. So the debug window now shows this on the info line (I presume that's where it is most important).
  • Andreas Neustifter provided a FontForge icon with a transparent background (or the mac).
  • In TrueType debugging Werner originally asked to mark pixels which changed state. (So there were four states: on and still on, just recently turned on, just recently turned off, always off). Now he'd like to see exactly the current state.
  • People complain that under window managers that try to behave like MS Windows, the palettes slowly walk off the screen. This patch should (almost) fix that. A palette may start to walk off but each time it does, it will be brought back close to the zero point.
  • Pango doesn't like a utf8 string which consists solely of a variation selector. So don't draw them.
  • Werner doesn't want to see anchor points when debugging.
  • Change weight from the fontview usually crashed.
  • In the past if someone had a glyph with a negative advance width, FF would output a large postive number to the 'hmtx' table, instead output 0.
  • Yet another undo problem caused by the [Apply] button in the expand stroke dlg. This one on cancelling the dlg.
  • Werner wants to see what points the current instruction is going to move, so when debugging highlight these points. Also draw circles around the points which are used as reference points.
  • FF needed libxml to compile.
  • If there were no undoes in a glyph then Expand Stroke would crash.
  • Werner suggests adding a check that advance widths are all less than hhea.advanceWidthMax
  • Ah. Werner wants ff to tell him when an isFixedPitch font has a glyph with an andvance width which differs from advanceWidthMax.
  • Add a check that glyphs are within the font's bounding box too.
  • When creating a metrics view with many glyphs, one of which needed to be autohinted, then ff might crash.
  • Width was not set when building some small-caps glyphs out of references.
  • When I boxified Page Setup a typo meant that one radio button occurred twice and another got lost. Resulting in -- a crash.
  • Some dialogs don't get destroyed after they are finished with. Instead they hang around, invisible, containing state information that becomes relevant next time they appear. They need to be able to change their transient_for hints, since they may pop up with a new owner window.
  • Points of extrema weren't being marked correctly in the glyph view.
  • Mark to ligature anchor points not output properly to feature files.
  • Another member problem in merge fonts.