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:

>>> Internal Error (overlap) in [...]

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.

        modified:   mf/feta-arrowheads.mf

- former def_set_arrow_paths (returning both open_path and close_path)
  has been replaced by def_set_arrow_path returning one path arrow_path
  depending on additional boolean parameter CLOSED
- No need to draw two overlapping mirrored half-paths anymore.
- 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

>>> RESULT: same glyphs, no FontForge errors anymore

https://codereview.appspot.com/571780043


---

** [issues:#5806] Tweak mf files to avoid FontForge internal overlap error**

**Status:** Started
**Created:** Fri Feb 28, 2020 07:57 PM UTC by Torsten Hämmerle
**Last Updated:** Sat Feb 29, 2020 09:01 AM UTC
**Owner:** Torsten Hämmerle
**Attachments:**

- 
[feta-braces-a.pfb](https://sourceforge.net/p/testlilyissues/issues/5806/attachment/feta-braces-a.pfb)
 (24.8 kB; application/x-font-type1)
- 
[internal-error-overlap-log.txt](https://sourceforge.net/p/testlilyissues/issues/5806/attachment/internal-error-overlap-log.txt)
 (15.9 kB; text/plain)


#Overlapping mf paths
In some cases, overlapping mf paths will cause errors in FontForge processing, 
even if the resulting glyphs seem to be OK.
Currently, we have **142 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).

##FontForge issue
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](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.

##Changes to mf files
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.

#### Overview: Internal Error (overlap) in [...]

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.

#####feta-arrowheads.mf -> Internal Error (overlap) in arrowheads.*
* macro **set_arrow_path**: now one single outline.  Fixes glyphs **open.01, 
open.0M1, open.11, open.1M1**
##### feta-scripts.mf -> Internal Error (overlap) in scripts.*
* macro **draw_turn**: "ploops" removed, now one single outline.  Fixes glyphs 
**reverseturn, turn, slashturn**
*  char def **"segno"**: similar case as in draw_turn. Fixes glyph **segno**
##### feta-timesignatures.mf -> Internal Error (overlap) in timesig.*
* macro **draw_C**: smooth .. instead of straight -- within overlapping area.  
Fixes glyphs **C44, C22**
##### feta-clefs.mf -> Internal Error (overlap) in clefs.*
* macro **draw_gclef**:  Fixes glyphs **G, GG, tenorG**
* macro **draw_tab_B**:  Starting angle of one stroke in lower handwriting 
style "B" of "TAB" slightly changed (invisible difference).  Fixes glyph **tab**
##### feta-braces.mf -> Internal Error (overlap) in brace*
* macro **draw_brace**:  Even simplified a bit and now drawing one single 
outline without any overlaps.

#### Examle: two overlaping outline -> single outline

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;
~~~~


---

Sent from sourceforge.net because [email protected] is 
subscribed to https://sourceforge.net/p/testlilyissues/issues/

To unsubscribe from further messages, a project admin can change settings at 
https://sourceforge.net/p/testlilyissues/admin/issues/options.  Or, if this is 
a mailing list, you can unsubscribe from the mailing list.
_______________________________________________
Testlilyissues-auto mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/testlilyissues-auto
  • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development
    • ... Auto mailings of changes to Lily Issues via Testlilyissues-auto via Automated messages for lilypond development

Reply via email to