The reference footer was anchored to a fixed position near the bottom
margin, causing it to overlap with notes text on songs that had both
notes and references (e.g., "Die Gedanken sind frei").
Changed renderReferenceFooter to use flow-based positioning from the
current y-position after notes/metadata, ensuring the separator line,
abbreviation headers, and page numbers always render below the
preceding content without overlap.
Also updated calculateFooterReservation and MeasurementEngine to match
the simplified layout calculation, and added toc.highlight_column to
the example songbook.yaml to demonstrate column highlighting.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Improve PdfFontMetrics: use canonical path for cache key, validate
font file existence, use absolute paths for BaseFont.createFont
- Add font file path resolution in SongbookPipeline (relative to
project directory)
- Add font file existence validation in Validator.validateConfig
- Add end-to-end tests: custom font loading, umlaut rendering,
cache deduplication, missing file error
- Document custom font file usage in example songbook.yaml
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Kotlin/JVM multi-module project for generating a scout songbook PDF
from ChordPro-format text files. Includes ChordPro parser, layout engine
with greedy spread packing for double-page songs, OpenPDF renderer,
CLI (Clikt), Compose Desktop GUI, and 5 sample songs.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>