This release contains numerous fixes and feature updates since the last release.
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
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
On Wednesday, November 7th, 2000, George W. Williams V first
published a piece of software called PfaEdit that allowed rudimentary
editing of PostScript fonts. It lacked the features and polish of
such prominent products as Fontographer and Font Studio, but it
had one big advantage: it was free.
Twenty years later, Fontographer and FontStudio are gone, and the
whereabouts of George Williams are unknown, but FontForge has grown
into a highly capable and mature product. It supports dozens of
file formats and includes such features as spline stroking, overlap
removal, and Python scripting. And it is still free software. With
over 100,000 users, it is the most widely used typeface design tool
in the world.
It may seem anti-climactic that today's 20th anniversary release
includes no major changes or new features, but it perfectly befits
a product that has evolved carefully and slowly over its entire
lifecycle with almost no breaking changes. Whether for the special
commemorative splash screen or for the countless small improvements
and fixes, we hope that you will try it. It is available, as always,
on the FontForge website <https://fontforge.org/>;.
The entire project team thank you for your support.
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.
Notes on build system changes:
libgutils and libgunicode have been combined into libfontforge
libgdraw and libfontforgeexe have been combined into the fontforge executable itself
No development files are installed (headers, or pkg-config). This is because we do not provide a stable API or ABI to work against, nor are the headers actually well configured to be used externally. We are also not aware of any maintained product that compiles against FontForge itself.
Along with the usual bugfixes, there have been a couple of new features worth calling out:
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.
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
It also fixes a number of small bugs relating to certain bitmap typefaces, stroke expansion, handling of CID ranges, and the user interface.
There are two tags and package sets. 20161004 is the original release, and 20161005 adds support for Ubuntu 16.04 and 16.10.
* Did a lot of work to improve the accuracy in remove overlap. Improved
accuracy means that it is less likely to do the wrong thing. Problems happen
when there are points or intersections very close to each other.
(So quadratic glyphs are more likely to have problems than cubics simply
because they have more points, on average).
* Fix various error messages.
* Remove some obsolete documentation.
* Technical fixes to stroking code.
* Add a miterlimit to stroking code.
* FontForge was using the wrong MIME type for svg files. W3C has changed it and
it's now "image/svg+xml" not "image/svg-xml" or "image/svg".
* Since Inkscape images tend to be at unexpected y positions, force the view to
rescale/recenter itself if the result after a paste/import is outside the
current window. (Inkscape tends to put things at the top of a page, but the
origin is at the bottom, and FF looks at the origin.
* A line joint of 180 degrees (which shouldn't have happened in stroking, but
did) caused an infinite loop.
* Typo in add extrema code (again).
* More...
The fix is a hack. There is code to deal with png versions, but it is
not complete for 1.4.x, and fooled by bl3 wrappers renaming
the library behind the pkg's back.
-patch format string problems leading to possible buffer overflow
(CVE-2010-4259), from Redhat bug#659359
bump PKGREV
* 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)
* more...
* Support composites (references) in bitmap fonts.
* Support for the JSTF table (sfd extension).
* Added a set of new python functions for manipulating CID keyed fonts.
* Added support for reading/writing version 1.8 of Adobe's feature file format.
* Check for a buggy system on Apple 10.5 with X11.
* Fix more memory problems in Merge Fonts.
* If a font were missing a .notdef glyph. If the user tried to display
a font sample of text which included a character not in the font.
Then (after the recent patches for grid-fit metrics in Print dlg)
fontforge would crash.
* Fix a bug in old cubic to quadratic conversion.
* Lots of changes to extrema code.
* Initializing the font info dialog crashed on the mac when -O2 was
specified during configure (the default situation).
* After adding an Apply button the Transform dlg would crash if invoked
in a glyph with no undoes.
* Add an X resource editor.
* Make the metrics view be more like the display dlg in that you can specify
a point-size/dpi to view stuff (also include increment/decrement pointsize).
* Patch by "JustFillBug" to exend python scripting by making the find
interator become a find/replace iterator.
* Patch by Taco to fix a memory problem reading bad baseline data.
* Patch from Andrey PANOV to extend GlyphInfo (legacy scripting) by adding
"XProfile" and "YProfile" options.
* Add an [Apply] button to the transform and expand stroke dialogs in
the outline view.
* Make ff parse preference files independent of the decimal point local in
which they were written (that is -- accept either "." or "," in floating
numbers).
* If a Cubic layer had a notdef glyph, then sometimes, rasterizing using
freetype would fail (not a freetype problem, I didn't set things up right).
* Fix one more problems with points being snapped to a wrong stem side
(it was still possible in case of off-curve points).
* Metrics View and Display dlg weren't showing grid fit metrics properly.
* First release with Pango and Cairo
* The first time you run fontforge with Pango something takes several minutes
to initialize itself. This delay does not occur on subsequent invocations.
* Displaying magnified bitmap strikes in the font view often caused a crash.
* Non-English translations of "%d pixel bitmap" in the View menu of the font
view came out garbled. There were interpreted as latin1 rather than utf8.
-While the program is prepared to work w/o libxml2 (with some loss of
functionality), there is a little glitch -- see PR pkg/38446 by
Keith Waclena. The fix shouldn't be needed for pkgsrc anymore because
libxml2 should be found now, but add it anyway.
bump PKGREVISION
* Add support for Adobe's feature file syntax.
* Add a popup menu to the lookups pane of font info.
* Change the name of File->Merge Kern Info to File->Merge Feature Info
* Remove the code to produce the old, broken, 'size' feature.
* An earlier patch, designed to make the tabset work in the charview even if the user changed the name, didn't work.
* Bug in the selection iterator.
* Accept contour += (1,2) rather than forcing people to say contour += fontforge.point(1,2)
* Crash when mistyping a glyph name in Glyph Info possub panes. Probably in the equivalent lookup dlgs too.
* If a glyph contained two copies of another glyph, and one of those copies was off by enough that ff didn't recognize it, the depending on how the contours were ordered, ff might fail to recognize the first glyph too, even though it did match.
* Add iterators to contours and layers. Python users seem to expect them even when they aren't documented to exist.
* layer += contour didn't work in python. I was examining a bit through the wrong data type.
* Provide a mechanism for copying lookup information from one glyph to another. (Edit->Copy Lookup Data)
* Loading kerning info from a mac 'FOND' resource was broken by the lookup change.
* Python scripting command font.createChar didn't. Partial patch from Max Rabkin.
* Adding a kerning pair from the metrics view would often add two or three pairs with the same character combination and different values.
* Another remove overlap bug. Introduced recently.
* Reinstate Apply Substitutions scripting command.
* Add some dutch styles.
* Make yet another attempt to correct for rounding errors when loading a postscript font.
* Add a way to get a font's filename to python.
* Werner points out that in scripting I use "break" in an example. It isn't documented to work and I don't implement it but I do show it. Oops. Ok, make it work.
* Display substitutions was broken.
* When generating default names for subtables, it is confusing to name them the same as the lookup.
* Change to using USC4 from UCS2 internally.
* Provide default names for lookups once the user sets the feature.
* Disambiguate some strings for the polish translation
* Revert glyph should not work for old sfd files.
* Initial Greek translation.
* Add a pane to the Preference dlg allowing user to control some of fontforge's
hint creation.
* Update my opentype scripts list (in particular include music).
* Due to a typo, ff thought pretty much everything outside unicode BMP was in
the hebrew script.
* Add a new command to the point menu which allows you to specify a spline and
one coordinate (either X or Y) on that spline. FF will calculate the other
coordinate and add a point there.
* CODE2000 contains an anchor class with only base glyphs (no mark glyphs) as
part of a set of anchor classes. FF crashed.
* More...