배경
PR #292 (#290, merge commit 085beb0) 로 SVG 경로의 cross-run 탭 감지가 composed.tab_extended (inline_tabs) 를 존중하도록 수정됨 (resolve_last_tab_pending 헬퍼 + paragraph_layout.rs cross-run 블록 2곳).
그러나 WASM Canvas 렌더 경로에 동일 수정이 누락되어 브라우저에서는 여전히 samples/exam_math.hwp p.7 #18 "수열" 문항이 우측으로 밀림.
재현
근본 원인
src/renderer/layout/text_measurement.rs 의 WasmTextMeasurer:
estimate_text_width (L524-700) — \t 처리 시 find_next_tab_stop (TabDef 전용) 만 호출
compute_char_positions (L598-) — 동일
composed.tab_extended (inline_tabs) 를 참조하는 경로 없음
따라서 #290 수정(paragraph_layout.rs 헬퍼 중앙화) 이 Canvas 경로에 적용되지 않음.
수정 방향
옵션 1 (권장) — Canvas 경로에도 resolve_last_tab_pending 적용
옵션 2 — 레이아웃 단계에서 최종 x 좌표를 주입
paragraph_layout.rs 가 이미 올바르게 계산한 x 를 Canvas 렌더가 그대로 사용하도록 경로 변경
- 범위 큼
관련
우선순위
브라우저에서 사용자가 직접 보이는 증상 → 중간~높음.
배경
PR #292 (#290, merge commit 085beb0) 로 SVG 경로의 cross-run 탭 감지가
composed.tab_extended(inline_tabs) 를 존중하도록 수정됨 (resolve_last_tab_pending헬퍼 +paragraph_layout.rscross-run 블록 2곳).그러나 WASM Canvas 렌더 경로에 동일 수정이 누락되어 브라우저에서는 여전히
samples/exam_math.hwpp.7 #18 "수열" 문항이 우측으로 밀림.재현
samples/exam_math.hwp, 페이지 7, 18번 "수열" 문항rhwp export-svgCLI): ✅ 정상 (translate(109.80, 162.69)— cross-run 탭 감지가 inline_tabs를 무시하여 좌측 탭이 우측 정렬로 오판정 (exam_math.hwp p.7 #18) #290 수정 적용)근본 원인
src/renderer/layout/text_measurement.rs의WasmTextMeasurer:estimate_text_width(L524-700) —\t처리 시find_next_tab_stop(TabDef 전용) 만 호출compute_char_positions(L598-) — 동일composed.tab_extended(inline_tabs) 를 참조하는 경로 없음따라서 #290 수정(
paragraph_layout.rs헬퍼 중앙화) 이 Canvas 경로에 적용되지 않음.수정 방향
옵션 1 (권장) — Canvas 경로에도
resolve_last_tab_pending적용WasmTextMeasurer가tab_extended를 받을 수 있도록TextStyle에 필드 추가estimate_text_width/compute_char_positions의\t처리 블록을resolve_last_tab_pending호출로 교체옵션 2 — 레이아웃 단계에서 최종 x 좌표를 주입
paragraph_layout.rs가 이미 올바르게 계산한 x 를 Canvas 렌더가 그대로 사용하도록 경로 변경관련
우선순위
브라우저에서 사용자가 직접 보이는 증상 → 중간~높음.