분할 표 렌더링 정합 — 분할 셀 줄 범위·1행 tac 표·vpos 팬텀 (Task #991)#1004
Closed
planet6897 wants to merge 5 commits into
Closed
Conversation
edwardkim
added a commit
that referenced
this pull request
May 20, 2026
…nce 이중 가산 정정 @planet6897 — Task #974(c3e3215, PR #1013 머지) 회귀 bisect 정확 진단 + has_full_para_item case-specific 가드. layout_shape_item()의 !has_real_text 분기에서 FullParagraph 항목 유무로 분기: - 있으면(빈 문단 호스트): result_y 재진행 생략 → 이중 가산(132.88→66.44px) 차단 - 없으면(선행 표 이어붙은 Shape, hy-001 pi=27): Task #974 동작 유지 PR #1005 격차 D revert(4e3ad58)의 scope 외("variant flag thread 후 variant-only 분기")를 variant 무관 일반 가드로 정밀 해결 — 두 케이스 양립. feedback_pr_supersede_chain + feedback_hancom_compat_specific_ over_general 권위 사례. 옵션 A: 3 본질 커밋 cherry-pick (d7663dd Stage 2 layout.rs PR #1005 영역 --theirs 충돌 해소, a4a3647 Stage 2 v2 has_full_para_item 정밀화 자동 보완, 97c4994 Stage 3 회귀 테스트 좌표 8건 정정) — 작성자 @planet6897 보존. 검증: cargo test 1307(lib) + 전체 통합 + issue_table_ vpos_01_page5_cell_hit_test 13 passed + clippy -D + fmt 0 + WASM 4.83MB (feedback_push_full_test_required 정합). sweep 10 fixture: hy-001 HWPX/HWP5 diff=0(Task #974 보존), table-vpos-01 1 diff(의도된 pi=34 30.84px 상향), sample16-hwp5/hwp3 외곽선만(텍스트 무변동), aift 2 diff (의도된 빈 문단 글상자 정정 효과), 일반 fixture diff=0. 작업지시자 비공개 샘플 PR로 시각 판정 생략 수용 결정. PR #1004(Task #990 + #991 통합) 가 본 PR 완전 포함 + Task #991 추가 — 본 PR 머지 후 #1004는 #991 부분만 재제출 안내 (feedback_small_batch_ release_strategy 정합).
쪽 경계에서 분할되는 표 셀의 줄 범위(compute_cell_line_ranges)가 분할 끝 페이지와 시작 페이지에서 비대칭 기준을 써, 경계가 줄간격 구간에 떨어질 때 줄이 양쪽 페이지에 중복 렌더링됐다. 또한 limit_reached 전파·vpos 리셋·vpos 동기화가 두 경로에서 다르게 작동해 줄 누락도 산발적으로 발생했다. 분할 시작/중간 페이지(has_offset) 경로를 끝 페이지 패스(prefix 패스)에서 컷을 유도하도록 교체. 끝 페이지 로직은 무수정. 끝/시작 페이지가 동일 prefix 패스를 공유하므로 중복·누락이 정의상 불가능. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
빈 문단에 단독 앵커된 1행 treat_as_char 표는 is_tac_table_inline 판정을 못 받아 typeset_block_table 로 가서 인트라-셀 분할됐다. 1행 표는 행 경계가 없어 셀 내용 중간 절단만 가능한데, 글자처럼취급 표는 본문 흐름 안의 인라인 개체이므로 분할이 부적절하다(한컴은 통째로 다음 페이지 이동). typeset_block_table 의 fits 검사 실패 직후, 1행 treat_as_char 표는 분할하지 않고 통째로 다음 페이지/단으로 이동하는 가드 추가. 다행 tac 표(행 경계 분할 정상)·페이지 초과 표는 불변. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
쪽 분할된 표(PartialTable)의 호스트 문단 LINE_SEG line_height 는 텍스트 줄 높이만 담고 표 높이를 반영하지 못한다. 직후 문단의 vpos 보정 lazy_base 산출에 이 prev 를 쓰면 vpos 차이에 표 높이가 통째로 들어가, 이미 sequential 로 표를 지난 위치에서 표 높이만큼 추가 점프한다(분할 표 직후 콘텐츠가 페이지 하단으로 ~357px 밀림). layout_column 1차 패스에 prev_item_was_partial_table 플래그 추가. 직전 항목이 PartialTable 이면 vpos 보정을 건너뛰고 sequential 배치를 신뢰. 분할 안 된 표(PageItem::Table) 직후 문단은 불변 (vpos 인코딩 정합 — issue-157 등 회귀 없음). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
분할 표 렌더링 정합 3건(분할 셀 줄 중복·1행 tac 표 분할·vpos 팬텀) 완료. stage 5(페이지 8/9)는 누적 드리프트로 폐기. 페이지 밖 콘텐츠 6→2 페이지 감소(부수 효과). 잔여 오버플로는 별도 전용 타스크로 분리. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Task edwardkim#991 stage 2 의 cell_line_prefix_counts 호출이 rustfmt 미정렬 이어서 cargo fmt --all --check 가 실패했다. 해당 한 줄 정렬. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
f7c31f3 to
e1299e1
Compare
edwardkim
added a commit
that referenced
this pull request
May 20, 2026
edwardkim
added a commit
that referenced
this pull request
May 20, 2026
@planet6897 — Task #990 영역은 PR #1003 (c2024ec) 머지로 이미 해소, 본 머지로 Task #991 부분 (분할 표 렌더링 정합) 적용: - 분할 셀 줄 범위 — 끝 페이지 패스(prefix 패스) 유도로 중복·누락 해소 (table_layout.rs, 99f2695) - 1행 글자처럼취급 표 분할 금지 — 통째 다음 페이지/단 이동 (typeset.rs, 35afc77) - 쪽 분할 표 직후 문단 vpos 팬텀 해소 — 직전 항목 PartialTable 시 vpos 보정 skip (layout.rs, 0f18849) - table_layout.rs rustfmt 정리 (0d9a7c1) 옵션 A: cherry-pick 4 (작성자 @planet6897 보존). task_m100_991 문서 AA 충돌 5건 — @jangster77 이슈 #991 (composer marker, CLOSED) 가 같은 task 번호 사용 → --ours 로 jangster77 머지본 보존 + planet6897 v2/v3/ v4/v5 접미사 신규 문서 추가. 검증: cargo test 1307 (lib) + 전체 통합 + clippy -D + fmt 0 + WASM 4.83MB (feedback_push_full_test_required 정합). sweep 10 fixture: aift p.14/45/56/69 4 diff (분할 표 보유 fixture case-specific 동작), 나머지 9 fixture diff=0 — Task #991 변경의 좁은 영역 입증. 작업지시자 시각 판정 통과. PR #1024 (closes #1022, 분할 표 RowCut 이산 모델, +5912/-1742) 가 본 영역 발전형 — 본 PR 의 휴리스틱 정정을 단일 권위 RowCut 모델로 일반화 + LAYOUT_OVERFLOW 42→12. #1024 처리 시 본 PR 영역 충돌 가능 (rebase 권고). feedback_pr_supersede_chain + feedback_small_batch_release_ strategy 정합. **task 번호 충돌 메모**: jangster77/#991 composer + planet6897/분할 표 같은 task 번호 다른 본질 — 향후 가드 권고.
Owner
|
옵션 A로 devel에 반영했습니다 (Task #991 3 커밋 + fmt 1, 작성자 @planet6897 메타데이터 보존). 처리 내역:
검증:
task 번호 공유 충돌 안내: 본 PR의 PR #1024 관계: 본 PR Task #991 영역의 발전형이 #1024 (closes #1022, 분할 표 RowCut 이산 모델 + LAYOUT_OVERFLOW 42→12, +5912/-1742). 본 PR의 휴리스틱 정정이 적용된 상태에서 #1024 처리 시 영역 충돌 가능 — #1024를 최신 devel 기준 rebase 후 본 PR과 영역이 다른 부분만 남기는 형태 권고드립니다. 그렇게 하면 #1024가 본 PR 위에 RowCut 모델 + 측정 정합을 깔끔히 추가할 수 있습니다. 분할 표 렌더링 정합 작업 감사합니다. #1024도 이어서 처리합니다. |
edwardkim
added a commit
that referenced
this pull request
May 20, 2026
… + LAYOUT_OVERFLOW 42→12 @planet6897 분할 표 시리즈 마무리 (#1003 + #1004 머지 후 발전형, devel 최신 기준 재구성으로 MERGEABLE). RowCut 이산 모델(cell_units + advance_row_cut 단일 권위 함수)로 페이지네이터·렌더러 측정 통합 — PR #1004 휴리스틱 정정 일반화. closes #1022 — LAYOUT_OVERFLOW 42→12 (71% 감소) 정량 측정. v2 trailing-ls 조건부 복원 (issue_598 회귀 자정) — lazy_base_corrected >= 0 조건부 가드로 vpos≠0 시작 컬럼 보정 + IR 정확 추적 케이스 비보정. 복학원서 본문 시작 band 196→214=PDF 일치 PR 본문 명시 (본 환경 미발동, 후속 관찰). 옵션 A: 본질 squash commit bc1cd4d cherry-pick (작성자 Jaeook Ryu 보존, 충돌 없음). 검증: cargo test 1308(lib) + 전체 통합 + pagination 15 + wasm_api 160 + clippy -D 전체(--lib 미한정 CI 패턴) + fmt --all --check (feedback_push_full_test_required + CI 패턴 정합). sweep 10 fixture: hy-001/table-vpos-01/복학원서 diff=0, sample16-hwp5 13/64 + sample16-hwp3 2/64 + aift 27/74 + exam_kor 16/20 + biz_plan 3/6 광범위 변동 (분할 표 영역 의도된 효과). WASM 4.84MB. 작업지시자 결정 "그대로 A로" — 광범위 변동 시각 판정 생략 머지. 정량 측정(LAYOUT_OVERFLOW 71% 감소) + 회귀 가드(issue_598/svg_snapshot) + CI 검증 항목 통과로 게이트 대체. golden 갱신: issue-617 + form-002 (PR 본문 명시 issue-677은 PR 적용 후 출력=현재 golden binary identical 로 갱신 불필요). feedback_pr_supersede_chain 권위 사례 — 작은 단위(#1003) + 부분(#1004) + 발전형(#1024) 순차 적층 → 단일 권위 모델 일반화. feedback_image_renderer_ paths_separate 본질 정합 (PR #1018 image_resolver 패턴).
This was referenced May 20, 2026
edwardkim
added a commit
that referenced
this pull request
May 20, 2026
PR #1032 (closes #1027) 머지 후속 처리: - mydocs/pr/archives/pr_1032_review.md (검토 문서 archives 이동) - mydocs/orders/20260520.md (PR #1032 entry 추가) - rhwp-studio/public/{rhwp.d.ts,rhwp.js,rhwp_bg.wasm} (WASM 4.86MB 동기화) @planet6897 분할 표·측정 시리즈 마무리 (#1003+#1004+#1024+#1032). HeightCursor 공유 측정 엔진 + parity 7개로 페이지네이터↔렌더러 정합. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
edwardkim
added a commit
that referenced
this pull request
May 20, 2026
@planet6897 23번째 PR (분할 표·측정 시리즈 5번째 마지막 마디: #1003→#1004→#1024→#1032→#1033). page-larger 단일 표 셀 (PMR-007 세부내용 셀 25문단 ≈ 1024px) 이 rowspan 라벨 셀 (rs=2) 이 걸친 행에 있어 `advance_row_cut` 의 row_span==1 셀만 다루는 #993 컷 모델에서 원자 처리되어 본문 143px 초과·용지 밖 잘림. row-block 컷으로 일반화. 본질: - src/renderer/layout/table_layout.rs (+170): `advance_row_block_cut` 신규 — rowspan 블록 [b_start, b_end) 셀을 (row,col) 순서로 순회, 거대 row_span==1 셀 줄 단위 분할, rs>1 라벨 셀 첫 조각 전량 소비 + 연속 조각 공란. + `row_block_cells` / `row_block_content_height` 헬퍼 (페이지네이터·렌더러 단일 권위). + parity 단위 테스트 2건 (단일 비-rowspan 행 = advance_row_cut 동등 + rowspan 거대 셀 분할). - src/renderer/pagination.rs (+6): PageItem::PartialTable.is_block_split 플래그 추가 — page-larger 분할만 새 모드, 기존 분할 (form-002 등) 은 false 유지 (backward-compatible). - src/renderer/layout/table_partial.rs (+170/-29): is_block_split=true 렌더 — rowspan 행 포함, rowspan_block_range/block_cut_index 로 블록-셀 인덱싱, rs>1 라벨 셀 연속 공란. - src/renderer/typeset.rs (+83/-6): mid-page 분할 게이트 (block_h > base_available 일 때만 진짜 page-larger 활성, 아니면 deferred). 연속분 행-스킵 가드 블록 컷에서 스킵 (컷 보존). - src/renderer/{layout.rs, page_number.rs, pagination/engine.rs, document_core/queries/rendering.rs} 최소 변경. 검증 (본 환경): - cargo test --release --lib **1319 passed** (+2 block_cut tests) - cargo test --release --tests 모든 통합 passed (issue_852 5/5 + svg_snapshot 8/8 + table-vpos-01 13/13 + issue_938 3/3 등) - cargo fmt --all --check clean - cargo clippy 통과 - sweep 7 fixtures: **diff=0 전체** — page-larger 케이스가 공개 fixture 에 없음. PR #1031/#1032 회귀 부재 + 일반 분할 form/일반 fixture 무변경 입증 - WASM Docker 빌드 4.89MB (+30KB) + rhwp-studio 동기화 - 작업지시자 시각 판정 통과 cherry-pick 자연 통합: - PR base = a52859d (PR #1032 이전), origin/devel = 5263f53 - cherry-pick auto-merge 로 PR #1031 (build_page_borders) + PR #1032 (HeightCursor / vpos_snap_current_height 13건) 영역 자동 보존 - PR #1033 변경 (advance_row_block_cut + is_block_split) 통합 검증 권위 PR 본문 명시 (AI 184p 비공개 RFP, 본 환경 미접근): - LAYOUT_OVERFLOW 27→25 - pi=272 세부 셀 (854.9px) 해소 - pi=324 PMR-007 (143.9px) 2-프래그먼트 분할 한컴 2022 PDF 정합 @planet6897 분할 표·측정 시리즈 마무리 (#1003+#1004+#1024+#1032+#1033). closes #1025 Co-Authored-By: Jaeook Ryu <planet6897@users.noreply.github.com>
This was referenced May 20, 2026
edwardkim
added a commit
that referenced
this pull request
May 20, 2026
PR #1033 (closes #1025) 머지 후속 처리: - mydocs/pr/archives/pr_1033_review.md (검토 문서 archives 이동) - mydocs/orders/20260520.md (PR #1033 entry 추가) - rhwp-studio/public/{rhwp.d.ts,rhwp.js,rhwp_bg.wasm} (WASM 4.89MB 동기화) @planet6897 분할 표·측정 시리즈 마무리 5번째 마지막 마디 (#1003+#1004+#1024+#1032+#1033). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
개요
PR #1004 를 Task #991(분할 표 렌더링 정합) 단독으로 재정리했습니다.
기존 PR 에 포함됐던 Task #990(빈 문단 위 글상자 advance 이중 가산)은 별도 PR #1003 으로 이미 devel 에 merge 되어 본 PR 에서 제외했습니다 (작은 단위 분리 원칙). 브랜치를 최신
devel기준으로 재작성(force-push)하여 #991 커밋만 남겼습니다.변경 내용 (Task #991)
compute_cell_line_ranges를 끝 페이지 패스(prefix 패스) 유도 방식으로 정정. 분할 끝/시작 페이지가 동일 기준을 공유하여 줄 중복·누락이 정의상 불가능.treat_as_char표는 인트라-셀 분할 대신 통째로 다음 페이지/단으로 이동 (한컴 동작 정합).PartialTable이면 vpos 보정을 건너뛰어 정정. (분할 안 된PageItem::Table직후 문단은 불변)커밋 구성
Task #991: 분할 셀 줄 범위 — 끝 페이지 패스 유도로 중복·누락 해소Task #991: 1행 글자처럼취급 표 분할 금지 — 통째 다음 페이지 이동Task #991: 쪽 분할 표 직후 문단 vpos 팬텀 해소Task #991: 최종 결과보고서 — stage 2~4 종결fix(fmt): table_layout.rs rustfmt 정리 — CI 포맷 검사 복구검증
devel기준 재작성 후cargo build --release통과cargo fmt --all --checkclean