Skip to content

Task #1488: RowBreak 표 셀 내부 빈 오버레이 vpos 리셋 하드브레이크 제외 (여분 빈 페이지 제거)#1544

Merged
jangster77 merged 9 commits into
edwardkim:develfrom
planet6897:pr-task1488
Jun 26, 2026
Merged

Task #1488: RowBreak 표 셀 내부 빈 오버레이 vpos 리셋 하드브레이크 제외 (여분 빈 페이지 제거)#1544
jangster77 merged 9 commits into
edwardkim:develfrom
planet6897:pr-task1488

Conversation

@planet6897

Copy link
Copy Markdown
Contributor

closes #1488

문제

samples/rowbreak-problem-pages.hwpx 가 RowBreak 표 분할에서 여분의 거의 빈 연속 페이지와 본문/도식 겹침을 발생 (clean devel 22페이지, 정답지 한글 2024 PDF 18페이지).

근본 원인

섹션 1·문단 28의 1×1 RowBreak 표 — 단일 셀에 본문 텍스트(p[0..5]) + 빈 오버레이 스페이서 문단(p[6..15]) + TAC 사각형 다이어그램(p[16..17])이 같은 세로 영역에 겹쳐 배치. cell_units 가 빈 오버레이 문단의 vpos 리셋을 hard_break_before 로 표시 → advance_row_cut 가 리셋마다 컷을 끊어 954px 가용 페이지에 32~85px 만 배치하고 넘기는 빈 연속 페이지 5장을 양산.

해결

cell_unitspara_has_visible_text 게이트 추가 — 비가시(빈 텍스트) 오버레이 문단의 vpos 리셋을 하드 브레이크에서 제외. 가시 텍스트 문단 사이 리셋(Task #993 의도)은 보존.

결과

항목 before after
페이지 수 22 18 (정답지 PDF 일치)
pi=28 표 분할 8페이지(빈 5장) 3페이지
fragment 소비 85/33/62/62/62px 186/945/261px
2p 본문·도식 겹침 있음 해소

내용 손실 없음 (18페이지 전수 PDF 대조).

검증

  • 전체 cargo test lib 1938 + 통합 전부 통과, hwpx_roundtrip_baseline 4/4
  • 단위 회귀 test_advance_row_cut_empty_overlay_reset_no_hard_break 신규 + 기존 2개 가시문단 갱신(커버리지 보존)
  • 통합 회귀 tests/issue_1488_rowbreak_empty_overlay_pages.rs 신규

잔여 (별도 후속 권장)

표 하단 분할 LAYOUT_OVERFLOW(2.7~76px 마진 스필)는 모두 기존(clean devel) 문제·내용 손실 없음. 한컴 페이지 하단 "표 밀기 vs 부분 배치" 패리티(Task #1025/#1086/#1486 계보)로 고위험 영역이라 별도 이슈로 분리 권장.

planet6897 and others added 9 commits June 25, 2026 17:41
…2→18p)

- cell_units: para_has_visible_text 게이트 추가, 비가시 빈 오버레이 스페이서
  문단의 vpos 리셋을 hard_break_before에서 제외
- 가시 텍스트 문단 사이 리셋(Task edwardkim#993 의도)은 보존
- row_cut 단위 테스트 갱신(visible_text_para) + 신규 회귀 테스트 추가
- 전체 cargo test 1938 + baseline 통과
- tests/issue_1488_rowbreak_empty_overlay_pages.rs: 페이지 수 18 + pi=28 ≤4페이지 가드
- 한글 2024 PDF 18p 컨택트시트 대조: 내용 손실 없음, 겹침 해소
- 잔여 overflow(ROOT B)는 기존 문제·내용 손실 없음·고위험 → 별도 후속 권장
table_layout.rs / issue_1488 테스트의 rustfmt diff 정리. 로직 변경 없음.
cargo fmt --all -- --check 통과, clippy -D warnings rc=0, issue_1488 테스트 통과.
devel 의 RowBreak continuation 안정화/collapse_empty_rowbreak_spacer 변경과
Task edwardkim#1488 의 비가시 빈 오버레이 vpos 리셋 하드브레이크 제외를 함께 보존:
- CellUnit hard_break_before 는 Task edwardkim#1488 게이트(가시 텍스트/중첩표 한정) 유지
- devel 신규 vpos_gap_before(+ !collapse_empty_rowbreak_spacer) 필드 병행 적용
- devel 이 text_para 에 가시 'x' 를 추가해, 빈-오버레이 테스트는 신규
  empty_overlay_para(빈 텍스트) 헬퍼로 분리 (의도 보존)

검증: cargo fmt --all --check OK, clippy -D warnings OK, 전체 cargo test 0 실패.
devel 추가 6커밋 클린 병합. 전체 cargo test 0 실패, clippy -D warnings OK, fmt OK.
@jangster77 jangster77 merged commit 161a09d into edwardkim:devel Jun 26, 2026
10 checks passed
@jangster77

Copy link
Copy Markdown
Collaborator

@planet6897 감사합니다. 최신 devel 기준으로 branch update 후 CI와 렌더 diff를 다시 확인하고 merge 완료했습니다.

검증 결과:

  • Build & Test: pass
  • CodeQL/Analyze: pass
  • Canvas visual diff: pass
  • WASM Build: skipped

merge commit: 161a09d95fcb9299867a8e377804cb46c1177e07
관련 이슈 #1488 은 이미 closed 상태임을 확인했습니다.

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.

2 participants