From ad6dfd59ab9f1458da03daeb49ee4cd854181ae0 Mon Sep 17 00:00:00 2001 From: Antigravity Agent Date: Tue, 20 Jan 2026 00:00:14 -0500 Subject: [PATCH] Fix: Correct binary header generation in fontconvert.py --- lib/EpdFont/scripts/fontconvert.py | 80 ++++++++++++++++++------------ 1 file changed, 48 insertions(+), 32 deletions(-) diff --git a/lib/EpdFont/scripts/fontconvert.py b/lib/EpdFont/scripts/fontconvert.py index 9052da79..bc4b5470 100755 --- a/lib/EpdFont/scripts/fontconvert.py +++ b/lib/EpdFont/scripts/fontconvert.py @@ -211,44 +211,60 @@ for index, glyph in enumerate(all_glyphs): if isBinary: import struct with open(f"{font_name}.epdfont", "wb") as f: - # Magic + # Custom Header Format (48 bytes total) + # 0 : Magic (4) "EPDF" + # 4 : IntervalCount (4) + # 8 : FileSize (4) - Calculated later + # 12: Height (4) + # 16: GlyphCount (4) + # 20: Ascender (4) + # 24: Reserved (4) - (Previously descender or padding?) + # 28: Descender (4) + # 32: Is2Bit (4) + # 36: OffsetIntervals (4) + # 40: OffsetGlyphs (4) + # 44: OffsetBitmaps (4) + + header_size = 48 + intervals_size = len(intervals) * 12 # 3 * 4 bytes + glyphs_size = len(glyph_props) * 13 # 13 bytes per glyph + bitmaps_size = len(bytes(glyph_data)) + + offset_intervals = header_size + offset_glyphs = offset_intervals + intervals_size + offset_bitmaps = offset_glyphs + glyphs_size + file_size = offset_bitmaps + bitmaps_size + + # Pack header f.write(b"EPDF") - # Metrics (22 bytes) - # intervalCount (uint32_t), advanceY (uint8_t), ascender (int32_t), descender (int32_t), is2Bit (uint8_t), totalGlyphCount (uint32_t) - f.write(struct.pack("