개요
목차(TOC)에서 페이지 번호의 right tab 정렬이 문단 구조(단일 run vs 교차 run)에 따라 달라지는 문제를 수정한다.
문제 현상
목차 소제목의 페이지 번호가 장제목 대비 약 9.33px 왼쪽으로 밀림.
장제목 (Ⅰ, Ⅱ...): 페이지 번호 올바르게 우측 정렬 ✅
소제목 (1., 2. ...): 페이지 번호 9.33px 왼쪽으로 밀림 ❌
재현 파일: KTX.hwp 2페이지 목차
원인
compute_char_positions()의 right tab 처리 경로가 3가지로 분기됨:
- 같은 run 내 탭 →
seg_w 계산 시 탭 직후 선행 공백(≈9.33px) 포함
- 교차 run 탭 (추정 패스) →
pending_right_tab_est 별도 처리
- 교차 run 탭 (렌더 패스) →
pending_right_tab_render 별도 처리
한컴은 right tab 정렬 시 탭 직후 선행 공백을 무시하고 실질 텍스트 기준으로 정렬.
세 경로의 공백 처리 불일치가 정렬 오차를 발생시킴.
수정 방향
3경로 모두에 동일한 선행 공백 skip 규칙 적용 (right tab 전용, center tab 제외).
// compute_char_positions() right tab 분기
let trimmed_start = (i+1..chars.len())
.find(|&j| chars[j] != ' ')
.unwrap_or(chars.len());
let trimmed_seg_w = measure_segment_from(..., trimmed_start, ...);
x = (rel_tab - trimmed_seg_w).max(x);
수정 파일
src/renderer/layout/text_measurement.rs
검증 계획
cargo test — 793개 전체 통과
- KTX.hwp 2페이지 목차 — 장제목/소제목 페이지 번호 x좌표 일치
- Visual Diff 기존 검증 페이지(p1, p5, p6, p10) — regression 없음
- 추가 목차 문서 교차 검증
관련
개요
목차(TOC)에서 페이지 번호의 right tab 정렬이 문단 구조(단일 run vs 교차 run)에 따라 달라지는 문제를 수정한다.
문제 현상
목차 소제목의 페이지 번호가 장제목 대비 약 9.33px 왼쪽으로 밀림.
재현 파일: KTX.hwp 2페이지 목차
원인
compute_char_positions()의 right tab 처리 경로가 3가지로 분기됨:seg_w계산 시 탭 직후 선행 공백(≈9.33px) 포함pending_right_tab_est별도 처리pending_right_tab_render별도 처리한컴은 right tab 정렬 시 탭 직후 선행 공백을 무시하고 실질 텍스트 기준으로 정렬.
세 경로의 공백 처리 불일치가 정렬 오차를 발생시킴.
수정 방향
3경로 모두에 동일한 선행 공백 skip 규칙 적용 (right tab 전용, center tab 제외).
수정 파일
src/renderer/layout/text_measurement.rs검증 계획
cargo test— 793개 전체 통과관련
mydocs/plans/task_m100_249.md실험 결과 섹션 참조