All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 3m10s
User reported that on the page 3 of the test PDF ('2. Installation
and Setup'), the curl code block was visually broken: the 5 code
lines (curl, -H, -F, -F, -F) were split, with the first 2 lines
above the gray background box and the last 3 inside (or vice versa).
Root cause: each code line is its own PDF block. The merge logic
correctly combined them into a single block (same x0, similar font,
small gap). The smart-fit then wrote the entire 5-line text into
the merged block's bbox, shrinking the font to fit. The result
no longer aligned with the fixed-extent gray background drawing.
Fix: detect when a block is covered by a colored background drawing
(code block, callout box, info box, etc.) and:
1. Mark each line as _no_merge=True so the merge logic keeps them
as separate per-line blocks
2. Each line keeps its original y position
3. The smart-fit writes each line at its own bbox, preserving
alignment with the surrounding drawing
Detection: a block is 'covered by drawing' if >= 50% of its bbox
area intersects a filled drawing on the page. This is conservative
enough to avoid false positives from drawings that merely touch a
corner of the block.
The same logic applies to callout boxes, info boxes, and any other
visual element where the background defines a fixed extent that the
text must align with. The detection is generic — no hardcoded
patterns, no font-based heuristics.
3 new tests added:
- test_code_block_lines_marked_no_merge: 5 lines inside a
background drawing all marked _no_merge=True
- test_paragraph_not_marked_no_merge: 3 plain lines (no drawing)
still merge into 1 block (regression check)
- test_code_block_end_to_end_preserves_lines: full translate
pipeline, each line stays at its own y, all inside the drawing
Total: 460 tests pass (was 457), zero regression.