https://codereview.appspot.com/571780043
In some cases, overlapping mf paths will cause errors in FontForge processing, even if the resulting glyphs seem to be OK.
Currently, we have 352 error messages being produced during make, which is quite annoying..
Please find the corresponding log extract attached.
Remedy: Slightly adapt mf code (where needed), keeping the resulting glyph outline unchanged, but avoid problematic crossing angles for FontForge.
* slight path adaptions inside overlapping areas (not affecting the resulting glyph outline at all!)
* In some cases (braces, arowheads, segno/turns) now using one single outline rather than combinng two overlapping ones (with the exact same result).
This has been a pain in the neck for many years now, but it doesn't seem to be easy to fix in FontForge, though. Werner has created a (FontForge) issue: https://github.com/fontforge/fontforge/issues/4184.
Nevertheless, it'd probably be a good idea to make our mf files a bit easier to handle.
The mf files have only been changed where needed, using all the original mf control points and directions, keeping the resulting character outline unaltered.
I'll attach PFB files of feta11.pfb and feta.braces-a.pfb so that Werner (and others, of course) can have a look at the final FontForge output.
The errors are being caused by just a few glyphs in just a couple of mf files. Most of the time, there fixing one macro will fix all the glyphs using that macro.
In many symmetric cases, such as arrowheads braces, the glyphs had been constructed by separately drawing half and a mirrored version of itself, thus creating an overlap that might be problematic for FontForge.
Original mf code (with overlap)
fill path;
fill path yscaled -1;
New mf code (one single outline)
After determining the intersection point and using the appropriate subpath only, we are able to draw one single cyclic outine by joining one half part and its reversed/mirrored counterpart:
Using subpaths helps keeping the exact original control points and slopes, thus keeping the resulting glyph exactly identical to the original glyph..
fill path
.. reverse path yscaled -1
.. cycle;
Diff:
Diff:
Thanks for working on that! Will check it soon. Note that I've created four FontForge issues (#4184-#4187) reporting the warnings and errors with Feta and Parmesan.
Diff:
I've found more cases concerning petrucci etc.
Work in progress...
Last edit: Torsten Hämmerle 2020-02-28
Issue 5806: Tweak mf files to avoid FontForge internal overlap error
When compiling LilyPond, there were 352 error messages caused by
FontForge trying to resolve overlapping path problems:
Fortunately, the resulting glyphs had been OK, though.
FontForge should be able to cope with this, but, alas, it isn't.
I've now tweaked all the mf files causing these problems so that the
annoying error messages can be avoided without while keeping the
original resulting glyph outlines.
has been replaced by def_set_arrow_path returning one path arrow_path
depending on additional boolean parameter CLOSED
Char definitions adapted accordingly
FIXES arrowheads.open.01
arrowheads.open.0M1
arrowheads.open.11
arrowheads.open.1M1
modified: mf/feta-braces.mf
now draw one single cyclic path rather than overlaying two
separate, mirrored half-paths
using intersection and subpaths to exaclty retain the original
slopes.
FIXES brace4 - brace507
modified: mf/feta-clefs.mf
draw_gclef: just one control point changed (hidden in overlapping area)
FIXES clefs.G
clefs.GG
clefs.tenorG
draw_tab_B: lower arc of the B in "TAB", angle slighty changed by 1°
FIXES clefs.tab
modified: mf/feta-numbers.mf
original paths in char definition re-arranged, intersected, joined,
in order to create one single outline (two glyphs concerned):
two char definitions affected:
FIXES two
FIXES seven
modified: mf/feta-scripts.mf
draw_turn: "ploop" overlay completely removed, using joined sub-
paths instead
FIXES scripts.reverseturn
scripts.turn
scripts.slashturn
"Segno" char definition: similar to draw_turn change
FIXES scripts.segno
modified: mf/feta-timesignatures.mf
draw_C: .. instead of -- (hidden in overlapping area)
FIXES timesig.C44
timesig.C22
modified: mf/parmesan-clefs.mf
draw_neomensural_c_clef: .. instead of -- (hidden in overlap area)
FIXES clefs.neomensural.c
clefs.neomensural.c_change
draw_petrucci_c_clef: .. instead of .. (hidden in overlap area)
FIXES clefs.petrucci.c1
clefs.petrucci.c2
clefs.petrucci.c2_change
clefs.petrucci.c3
clefs.petrucci.c3_change
clefs.petrucci.c4
clefs.petrucci.c5
clefs.petrucci.c5_change
modified: mf/parmesan-rests.mf
"2neomensural" char definition: one additional auxiliary point
inserted in overlap area
FIXES rests.2neomensural
https://codereview.appspot.com/571780043
Diff:
Diff:
Diff:
Diff:
Diff:
Diff:
Passes make, make check and a full make doc.
Indentation and separating spaces
https://codereview.appspot.com/571780043
Indentation, 2nd attempt
https://codereview.appspot.com/571780043
Passes make, make check and a full make doc.
Patch on countdown for March 5th
Patch counted down - please push.
Patch formatted against current master attached.
(This time with a reasonably stripped-down commit message)
Please push it for me.
Thanks,
Torsten
Pushed to staging as
commit 06b5ac8389b5cc3c9afbb2c84e2e5c02d0c9dca0
Author: Torsten Hämmerle torsten.haemmerle@web.de
Date: Mon Feb 24 10:45:35 2020 +0100