mirror of
https://github.com/storytold/wordcraft.git
synced 2026-10-31 05:47:00 -06:00
* #3674: PDF export writes a glyph id above 65535 as .notdef instead of failing Shaping gives 32-bit glyph ids (a format-12 cmap can map a character to any of them), and the PDF exporter passed them to krilla unchecked. krilla's CID font takes 16-bit ids and unwraps the conversion (vendor/krilla/src/text/cid.rs:161 at craft-libs b926b5c0), so one such glyph failed the whole export natively and aborted the tab on wasm. The three places that build a KrillaGlyph (body text, metafile text and the text watermark) now go through glyph_id(), which writes an id that doesn't fit as glyph 0. The glyph keeps its place and its text range, so the rest of the run is unchanged. Regression test: glyph_id_above_u16_exports lays out a paragraph, sets one glyph's id to 70000 and exports the layout. It failed before with "PDF export failed internally: ... TryFromIntError(PosOverflow)". * #3674: the replaced glyph keeps its place, not its text krilla writes no ToUnicode entry for glyph 0, so a glyph written as .notdef doesn't extract: "Wide glyph" with the W's id set to 70000 extracts as "\u{FFFD}ide glyph". The rest of the run extracts as before. The comment on glyph_id() said the glyph kept its text. * Adapt glyph_id imports to main's exporter text module --------- Co-authored-by: Brandon Thomas <echelon@gmail.com>