-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Problem Summary
The Blocksync font contains cyclic component dependencies that cause font editors and build tools to fail when loading the designspace file. Additionally, there are malformed image references in some glyphs.
Affected Files
- Designspace:
sources/Blocksync.designspace - Primary issue location: All UFO sources, particularly:
Blocksync-CondensedRegular.ufo/glyphs/E_.glifBlocksync-CondensedRegular.ufo/glyphs/e.glif- All accented E variants
Technical Details
Issue 1: Cyclic Component Dependencies
The font has a circular dependency where:
-
Lowercase 'e' (
sources/Blocksync-CondensedRegular.ufo/glyphs/e.glif) references uppercase 'E' as a component:<component base="E"/>
-
Accented E glyphs also reference 'E' as their base:
- Eacute → references E + acutecomb.case
- eacute → references e + acutecomb
- Since e → E, this creates: eacute → e → E
-
Affected glyphs (17 total with cycles):
- Eacute, Ebreve, Ecaron, Ecircumflex, Edieresis, Edotaccent, Egrave, Emacron
- e, eacute, ebreve, ecaron, ecircumflex, edieresis, edotaccent, egrave, emacron
Issue 2: Malformed Image Reference
The uppercase 'E' glyph contains an image reference that fails to parse:
- Error:
failed to parse glyph data: bad image - Location:
Blocksync-CondensedRegular.ufo/glyphs/E_.glif
Error Messages
When loading with FontIR/fontmake tools:
WARN fontdrasil::util: Invalid component graph (cycles or bad refs) for 17 glyphs: ["Eacute", "Ebreve", "Ecaron", "Ecircumflex", "Edieresis", "Edotaccent", "Egrave", "Emacron", "e", "eacute", "ebreve", "ecaron", "ecircumflex", "edieresis", "edotaccent", "egrave", "emacron"]
thread 'Compute Task Pool (4)' panicked at fontir-0.3.1/src/orchestration.rs:227:32:
Glyph(E) is not available
Impact
- Font editors (like Bezy) crash when loading the designspace
- Build tools fail to compile the font
- The font cannot be properly interpolated or exported
Recommended Fixes
Fix 1: Break the Component Cycle
Option A: Give lowercase 'e' its own outline
- Open
e.glifin each UFO source - Replace the component reference with an actual outline
- The lowercase 'e' should have its own unique design, not reference uppercase 'E'
Option B: Create a base glyph for shared components
- Create a new glyph like
_e.basewith the shared outline - Have both 'E' and 'e' reference this base
- This avoids the circular dependency
Fix 2: Remove or Fix the Image Reference
- Open
E_.glifin each UFO source - Either:
- Remove the
<image>element entirely if not needed - Fix the image data/format if it's required
- Remove the
Testing After Fixes
- Ensure all UFO sources are updated (not just CondensedRegular)
- Test loading in multiple tools:
fontmake -m sources/Blocksync.designspace -o variable- Open in font editors (Glyphs, RoboFont, Bezy, etc.)
- Verify all glyphs render correctly
Component Dependency Graph (Current - Broken)
E (has bad image)
↑
e (references E - CYCLE!)
↑
eacute (references e)
Component Dependency Graph (Fixed - Option A)
E (standalone outline, image fixed)
e (standalone outline)
↑
eacute (references e + accent)
Component Dependency Graph (Fixed - Option B)
_e.base (shared outline)
↗ ↖
E e
↑ ↑
Eacute eacute
Additional Context for LLM Assistance
If you're an LLM helping to fix this issue:
-
The core problem: Lowercase 'e' should not reference uppercase 'E' as a component. This is both semantically incorrect (they're different letters) and creates a dependency cycle.
-
How to verify the fix works:
- Run:
fontmake -m sources/Blocksync.designspace -o variable --output-path test.ttf - Should complete without errors
- The resulting font should have both 'E' and 'e' glyphs
- Run:
-
Files to check/modify:
- All 6 UFO sources listed in the designspace
- Each has the same issue in their respective e.glif and E_.glif files
-
Common pattern in font design:
- Uppercase and lowercase letters should have independent outlines
- Components are typically used for: accents, repeated elements, or variation alternates
- Never create circular dependencies in components
-
The image issue:
- The image element in E_.glif appears to be corrupted or in an unsupported format
- Unless the image is essential for the design, removing it is the simplest fix