Files
docview/tests/fixtures/web/generate_late_font.py
2026-09-21 13:41:40 +09:00

33 lines
1.5 KiB
Python

"""Generate original, deliberately wide glyphs for real font-swap layout tests."""
from pathlib import Path
import hashlib
import json
from fontTools.fontBuilder import FontBuilder
from fontTools.pens.ttGlyphPen import TTGlyphPen
font = FontBuilder(1000, isTTF=True)
chars = list(range(32, 127))
glyphs = ['.notdef'] + [f'u{x:04X}' for x in chars]
font.setupGlyphOrder(glyphs)
font.setupCharacterMap(dict(zip(chars, glyphs[1:])))
shapes = {}
for name in glyphs:
pen = TTGlyphPen(None)
if name != 'u0020':
pen.moveTo((80, 0)); pen.lineTo((80, 700)); pen.lineTo((1300, 700)); pen.lineTo((1300, 0)); pen.closePath()
shapes[name] = pen.glyph()
font.setupGlyf(shapes)
font.setupHorizontalMetrics({name: (1400, 0) for name in glyphs})
font.setupHorizontalHeader(ascent=800, descent=-200)
font.setupNameTable({'familyName':'DocView Layout Test', 'styleName':'Regular', 'uniqueFontIdentifier':'DocView Layout Test 1', 'fullName':'DocView Layout Test', 'psName':'DocViewLayoutTest'})
font.setupOS2(sTypoAscender=800, sTypoDescender=-200, usWinAscent=800, usWinDescent=200)
font.setupPost()
font.setupMaxp()
font.font['head'].created = font.font['head'].modified = 2082844800
font.font.recalcTimestamp = False
path = Path(__file__).with_name('late-layout.ttf')
font.save(path)
path.with_suffix('.json').write_text(json.dumps({
'file': path.name, 'sha256': hashlib.sha256(path.read_bytes()).hexdigest(),
'generator': Path(__file__).name, 'purpose': 'Original wide rectangle glyphs for font-swap layout tests',
}, indent=2) + '\n')