Skip to content

단락 마지막 줄의 trailing line_spacing 누락 → 다음 단락 첫 줄이 ls 만큼 위로 당겨짐 (exam_kor pi=1↔pi=2) #452

@planet6897

Description

@planet6897

증상

samples/exam_kor.hwp 1페이지 좌측 단에서 pi=1("밑줄 긋기는 일상적으로...") → pi=2("통상적으로 독자는...") 전환 간격이 같은 단락 내 줄 간격보다 좁게 렌더링됨.

측정 기대
pi=1 단락 내 줄 step 24.51 px 24.51 px (= lh+ls = 1838 HU)
pi=1.line9 → pi=2.line0 step 15.34 px 24.51 px
누락량 -9.17 px (= ls = 688 HU)

PDF (한컴 렌더링) 은 모든 줄 step 이 12.96 pt 로 균일.

원인

src/renderer/layout/paragraph_layout.rs:2511-2520is_para_last_line 분기가 단락 마지막 visible 줄에서 trailing line_spacing 을 제외하고 y 를 lh 만 전진시킴. 이 y 가 layout_paragraph 의 반환값으로 전달되어 다음 단락의 y_start 를 결정하므로, 다음 단락 첫 줄이 ls 만큼 위로 당겨짐.

let is_para_last_line = cell_ctx.is_none()
    && line_idx + 1 == end
    && end == composed.lines.len();
if (is_cell_last_line && cell_ctx.is_some()) || is_para_last_line {
    y += line_height;                   // ← trailing ls 누락
} else {
    y += line_height + line_spacing_px;
}

Task #332 에서 도입된 로직. 같은 페이지의 pi=2→pi=3 가 정상으로 보이는 것은 composed.lines.len() 이 LineSeg 수와 달라 is_para_last_line 이 false 로 잡힌 우연일 가능성이 큼 → 매우 불안정한 동작.

해결 방향 (옵션 A)

is_para_last_line 분기를 제거하고 모든 줄에서 y += lh + ls 를 적용. Task #332 회귀 여부는 자동 테스트 + 시각 비교로 검증.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions