Task #485: synam-001.hwp 분할 표 셀 마지막 줄 클립 정정#657
Open
planet6897 wants to merge 5 commits intoedwardkim:develfrom
Open
Task #485: synam-001.hwp 분할 표 셀 마지막 줄 클립 정정#657planet6897 wants to merge 5 commits intoedwardkim:develfrom
planet6897 wants to merge 5 commits intoedwardkim:develfrom
Conversation
…n 두 버그 식별 - 수행계획서/구현 계획서/Stage1 보고서 작성 - p15/p20/p21 trace 측정 (RHWP_T485_TRACE) - 본질: cell-last-line slip (Bug-1) + epsilon 부재 (Bug-2) - Stage 2 분할 제안 (2a: outer break, 2b: epsilon)
compute_cell_line_ranges 의 inner break 가 outer 루프를 빠져나오지 않아 후속 단락이 같은 cum 으로 재평가되어, 셀의 마지막 단락(line_spacing 제외로 line_h 작아짐)이 abs_limit 안에 fit 하여 시각 순서 역전 + 본문 경계 클립을 일으키던 결함 정정. - limit_reached 플래그 도입 (abs_limit 도달 후 후속 단락 강제 차단) - 일반 분기: line_end_pos > abs_limit 시 limit_reached = true + break - atomic 분기: exceeds_limit 시 limit_reached = true 검증: - p15: pi=84 (cell-last, line_h=14.667) slip 차단 → 클립 해소 - p20: pi=169 (cell-last, line_h=13.333) slip 차단 → 클립 해소 - p21: Bug-2 영역 (gap=0.947 NEAR) 잔존 — Stage 2b 에서 처리 - cargo test: 1125 passed (전 테스트 통과)
abs_limit 와 cell-clip-rect bottom 의 미세 어긋남 + 글자 descender 여유분으로 line_end_pos 가 abs_limit 와 ~0~2px 차이로 fit 하면 본문 경계를 시각적으로 침범하던 결함 정정. - SPLIT_LIMIT_EPSILON = 2.0px 도입 - effective_limit = abs_limit - epsilon (break/exceed 비교에 사용) - 일반 분기와 atomic 분기 모두 적용 검증: - p21 pi=108 (gap=0.947) 차단 → 클립 해소 - p15/p20: 마지막 줄 gap=16.6/14.5px ≫ ε, 영향 없음 (Stage 2a 효과 유지) - cargo test: 1199 passed - 회귀: kps-ai.hwp p56/67/68/69/70/72/73 정상 (Task edwardkim#362/edwardkim#431 의도 보존)
- p15/p20/p21 클립 해소 재확인 - synam-001.hwp p13~p23 분할 표 흐름 정상 - kps-ai.hwp Task edwardkim#362 정정 영역 (p56/p67/p68/p69/p70/p72/p73) 정상 - aift.hwp p10~p14 분할 표 정상 - 전 샘플 (155개) export-svg OK - cargo test 1199 passed 후보 A (typeset split_end_limit epsilon) 진입 불요 — 본질이 layout 측에서 정정됨 후보 D (vpos correction drop) 진입 불요 — 선행 collapse 위험 + 본 정정으로 충분
- mydocs/report/task_m100_485_report.md - mydocs/orders/20260507.md (오늘 할일)
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.
개요
이슈 #485 —
samples/synam-001.hwp15·20·21 페이지의 RowBreak 분할 표(PartialTable)에서 셀 마지막 줄이 본문 영역 하단 경계와 시각적으로 겹치며 글자 descender가 클립핑되던 결함을 정정.본질 정밀 측정 결과 두 개의 분리된 버그가 결합된 것으로 확인:
compute_cell_line_ranges의 inner break가 outer 루프를 빠져나오지 않아, 셀 마지막 단락(line_spacing 제외로 line_h 작아짐)이 abs_limit 안에 fit하여 시각 순서 역전 + 본문 경계 클립line_end_pos > abs_limit의 boundary 케이스에서02px 차이로 fit하면 cell-clip-rect bottom 침범정정
src/renderer/layout/table_layout.rs의compute_cell_line_ranges단일 함수 (3 hunk):limit_reached플래그 + outer 차단 (Bug-1) — abs_limit 도달 시 후속 단락 강제 미렌더, cell-last-line slip 제거SPLIT_LIMIT_EPSILON = 2.0px도입 (Bug-2) —effective_limit = abs_limit - ε로 break/exceed 비교, descender 여유분 + 부동소수점 오차 흡수이슈 본문에서 제안된 후보 1 (typeset
split_end_limit산정 정정) 과 후보 3 (layout vpos correction drop)은 미적용 — 본질이 layout 측에서 충분히 정정됨.변경 파일
src/renderer/layout/table_layout.rscompute_cell_line_ranges3 hunk (epsilon 상수 + limit_reached 플래그 + outer 차단)samples/synam-001.pdfmydocs/plans/task_m100_485.md,_impl.mdmydocs/working/task_m100_485_stage{1,2a,2b,3}.mdmydocs/report/task_m100_485_report.mdmydocs/orders/20260507.md검증
본 결함 해소
synam-001.hwpp15synam-001.hwpp20synam-001.hwpp21회귀 점검
자동 테스트
후속 작업
후보 A·D 의 본질인 typeset/layout height 측정 모델 통일 은 본 PR 범위 밖으로 분리 — 별도 이슈 #656 으로 등록.
Test plan
cargo test --release1231 passedsamples/synam-001.hwpp15/p20/p21 시각 검증 (PDF 대조)samples/kps-ai.hwpp56/67/68/69/70/72/73 회귀 점검 (Task kps-ai p56 외부 표 안 콘텐츠가 표 높이를 초과해 클립 (v0.7.3 대비 회귀) #362 의도 보존)samples/aift.hwp분할 표 회귀 점검closes #485