mirror of
https://github.com/storytold/designcraft.git
synced 2026-10-29 12:46:53 -06:00
A tab draws nothing, so it was left out of the underline and strikethrough bars: they stopped at the last letter before each tab and began again after it. Forms rule their fill-in lines with underlined tabs — `Name ⇥⇥⇥⇥, city ⇥⇥⇥⇥` — so an imported form lost every writing line, and an IDML `Underline="true"` on a run of tabs drew nothing at all. A tab is a character with an advance, and InDesign rules its whole width. `PlacedGlyph::spans_rules` says which glyphs a rule runs across: the drawn ones, and a tab or a right-indent tab that advances. The spaces a line break trimmed off the end, the break characters and the markers' carriers are not part of the line's text and are still skipped, so an underline stops at the text and not at the frame edge. Both places that draw the bars from the glyphs use it: the renderer (`build_line`) and the PDF export (`text_rules`). The HTML and PPTX exports mark up runs of text, which already included their tabs. Measured on the repro in the issue, a 420×120 pt page at 2×: before one underline, 63 px: the word "Name" now three, 63 + 219 + 231 px: the word and both tab stretches and the exported PDF gains the two fills for them. A tab with a leader is one continuous bar across the leader dots to the right-aligned text after it. Tests: the renderer's bars and the PDF export's bars for "Name<tab>City" are one bar covering the tab's width, not two with a gap where it is. Both fail without the change (two bars, 36→67.7 and 72→93.2, the tab's 67.7–72 unruled).