Skip to content

1.22.0 — Right-to-left text, symbolic fonts, tracked titles and font metadata

Choose a tag to compare

@abimaelmartell abimaelmartell released this 20 Sep 16:55
ba21a43

Changes since 1.21.0:

  • Read right-to-left lines back through the Unicode Bidirectional Algorithm: Hebrew and Arabic text stored in visual order comes out in reading order even when the line holds numbers, Latin phrases or punctuation; glyph-by-glyph positioned words cluster into words by the line's own gaps; presentation forms normalize to their letters once the text is in reading order (#552).
  • Decode simple fonts through their /BaseEncoding, the Symbol and ZapfDingbats built-in encodings and their glyph names — Adobe Glyph List, uniXXXX and numbered gNN/cidNN names resolved against the embedded program — so symbol bullets, arrows and math operators read as the glyphs they are. A code the /Differences array names but cannot map reads as nothing, and a Type3 font's glyph-procedure names are never taken for glyph indexes (#553).
  • Keep tracked display text whole when its letter spacing is written as TJ offsets, so a spaced-out title reads as words rather than one letter per word (#548).
  • Add bold_source (where is_bold came from) and fixed_pitch to text items, and bold_weight_threshold to the positioned-text options; with bold_from_weight adjacent runs merge by the bold verdict; is_bold_font recognises Demi, Semibold, Ultra, Heavy and Black faces and the foundry abbreviations (#547).
  • Widen the zero-area /BBox of Form XObjects at load so their text is extracted and the page renders; Rust gains widen_degenerate_form_bboxes_mem(bytes) for the repaired document (#550).
  • Judge a CID-keyed font page's text decoded before calling it vector text, and bound Form XObject content inflation (#551).
  • Regression fixtures for the boxes of text drawn with a reflected matrix (#549).

bold_from_weight and bold_weight_threshold stay opt-in; the default is_bold now also reads the weight names above as bold.

Rust migration: TextItem literals need the new bold_source and fixed_pitch fields.

Release preparation: #556.

Full changelog