Skip to content

fix(pptx): preserve advance rounding for Latin mathematical signs - #1588

Merged
developer0hye merged 1 commit into
mainfrom
fix/issue-1581-latin-symbol-grid
Sep 6, 2026
Merged

developer0hye merged 1 commit into
mainfrom
fix/issue-1581-latin-symbol-grid

Conversation

@developer0hye

Copy link
Copy Markdown
Owner

Summary

Keep PowerPoint's 1/8pt nominal advance rounding when an otherwise Latin run contains ×, ÷, or ±. The marketing slide's final glyph endpoint moves from 1.073pt left of native PowerPoint to 0.018pt right. Whole-word shaping, spaces, and ASCII-hyphen break opportunities are preserved.

Related issue

Related: #1581. Cross-space kerning remains a separate issue (#1582).

Testing

  • cargo test --locked --workspace --no-fail-fast: 3,489 passed, 15 ignored.
  • Two portable regressions pass: six mathematical-sign width cases fail before the fix; wrapping coverage checks expressions, spaces, and hyphens.
  • Fifteen native PowerPoint width/control probes preserve native line contents and agree in baseline within 0.12pt.
  • cargo clippy --locked --workspace --all-targets -- -D warnings, cargo fmt --all --check, and git diff --check: passed.
  • Seventeen-page layout audit passes at 0.5pt; searchable text matches (1,593 normalized codepoints and identical codepoint-class census).
  • All seventeen strict cluster reports pass with zero material 5% fuzz clusters.
  • Documentation freshness review: PASS.

Visual impact

  • No rendered PDF change
  • Rendered PDF change or visual evidence added

Visual audit

  • Issue: PPTX: multiplication sign disables advance-grid rounding for the entire Latin run #1581
  • Fixture: tests/golden_mocks/business/sources/pptx/08_marketing_report_en.pptx, followed by mathematical-sign and text-box-width probes. Mapping, reproduction, and hashes: assets/bugfixes/issue-1581/README.md.
  • Page(s): 1-17
  • Renderer and DPI: pdftoppm, 150 DPI; native PowerPoint 16.112.3 GT
  • Evidence mode: fix
  • Layout audit report: assets/bugfixes/issue-1581/layout-audit.json
  • Render cluster reports: assets/bugfixes/issue-1581/render-clusters-page-1.json, assets/bugfixes/issue-1581/render-clusters-page-2.json, assets/bugfixes/issue-1581/render-clusters-page-3.json, assets/bugfixes/issue-1581/render-clusters-page-4.json, assets/bugfixes/issue-1581/render-clusters-page-5.json, assets/bugfixes/issue-1581/render-clusters-page-6.json, assets/bugfixes/issue-1581/render-clusters-page-7.json, assets/bugfixes/issue-1581/render-clusters-page-8.json, assets/bugfixes/issue-1581/render-clusters-page-9.json, assets/bugfixes/issue-1581/render-clusters-page-10.json, assets/bugfixes/issue-1581/render-clusters-page-11.json, assets/bugfixes/issue-1581/render-clusters-page-12.json, assets/bugfixes/issue-1581/render-clusters-page-13.json, assets/bugfixes/issue-1581/render-clusters-page-14.json, assets/bugfixes/issue-1581/render-clusters-page-15.json, assets/bugfixes/issue-1581/render-clusters-page-16.json, assets/bugfixes/issue-1581/render-clusters-page-17.json
  • Reference exporter differences: None
  • Fine-detail threshold: 0.5pt
  • Layout audit page count: Pass
  • Layout audit text flow: Pass
  • Layout audit visible fills: Pass
  • Layout audit rectangle geometry: Pass
  • Layout audit large shifts: Pass
  • Layout audit fine shifts: Pass
  • New follow-up issues found in this audit: None
  • Model vision findings: Full-page context, full-scale content crops, and diffs show the original bullet's accumulating suffix drift gone. Mathematical glyph shapes, bold red headings, regular body text, bullet indents, and native numeric-expression and hyphen wrapping remain intact. Original slides 1 and 2 have identical decoded GT/output/diff pixels to the previously inspected PPTX: wrapped continuation baselines retain unsnapped fractional line offsets #1584 comparison, including the chart's thin axes, ticks, bar edges, and legend outline. Sparse heading/body glyph-edge rasterization fragments are bounded observations; there are no material diff clusters or remaining converter deviations in these seventeen compared pages.
  • GT: assets/bugfixes/issue-1581/gt.jpg
  • Before: assets/bugfixes/issue-1581/before.jpg
  • After: assets/bugfixes/issue-1581/after.jpg
  • Native: None
  • Compare: assets/bugfixes/issue-1581/compare.jpg

Visual comparison

GT Before After
GT Before After

Required inspection

  • Rendered all evidence at 150 DPI or higher
  • Stored progressive JPEG quality 86 assets with metadata stripped
  • Used Codex/Claude vision to inspect the full GT/output pages, diff, and matched crops
  • Inspected matched region crops at full resolution
  • Ran compare_layout.py --audit --fine-shift PT and dispositioned every fine/large text-instance shift, rectangle geometry deviation, painted-text visibility mismatch, and visible-fill occlusion
  • Ran compare_render.py --cluster-report PATH --strict-clusters and dispositioned every material 5% fuzz diff cluster by explicit ID
  • Inventoried hairlines and border dash styles
  • Inventoried font weight, italic, and underline emphasis

Deviation audit

Check Result
Page count/order Matches GT: seventeen pages in documented fixture/probe order.
Element presence Matches GT: original titles, bodies, bullets, chart, and probe text remain present.
Position/size Fixed: the original endpoint drift decreases from -1.073pt to +0.018pt; all layout gates pass.
Rotation/flip No deviation observed.
Fill Matches GT: red/white cover, chart, and white text pages retain native fills.
Stroke/border Matches GT: chart axes, ticks, bar edges, and legend outlines are unchanged.
Shape outline geometry Matches GT: no material matched rectangle or outline deviation.
Text content Matches GT: searchable content and codepoint-class census match.
Font family/weight/style Matches GT: Arial bodies, bold headings, and mathematical glyph shapes remain intact.
Text color Matches GT.
Alignment Matches GT: left alignment, bullet indentation, and continuations are preserved.
Line/paragraph spacing Matches GT: expression, space, and hyphen wraps match all fifteen native width/control cases.
Clipping/overflow No deviation observed.

Checklist

  • Commits include a Signed-off-by line
  • PR scope contains one root cause
  • Remaining converter or harness deviations each reference an open issue

Signed-off-by: Yonghye Kwon <developer.0hye@gmail.com>
@developer0hye
developer0hye merged commit 39111d5 into main Sep 6, 2026
18 checks passed
@developer0hye
developer0hye deleted the fix/issue-1581-latin-symbol-grid branch September 6, 2026 04:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant