Repository navigation
fix(typeset): 앵커 문단도 자기 쪽·종이 기준 자리차지 밴드 아래에서 시작한다 (#8186) - #8130
Closed
planet6897 wants to merge 2 commits into
Closed
planet6897 wants to merge 2 commits into
planet6897 wants to merge 2 commits into
Conversation
planet6897
force-pushed
the
fix/stored-reset-field-group-controls
branch
from
October 23, 2026 22:08
4e539bb to
3d21878
Compare
한/글은 쪽·종이 기준 위아래 배치 개체를 가진 문단의 첫 줄도 그 밴드를 피해 밴드 아래에 놓는다(stored_reset_float 입력: 구역 첫 빈 문단 vpos 30915 = 사각형 하단). edwardkim#7696 은 개체를 방출한 뒤에 밴드를 등록해 앵커 문단은 밴드 위에 남고 뒤 문단만 밀었다. 쪽 vpos 기준도 그 문단 vpos 로 잡혀 본문 전체가 정본보다 줄 하나(21.3px) 위에 그려졌고, 저장 줄과 흐름의 축이 어긋나 P 를 줄 3에서 나눴다(정본 줄 2). - 밴드는 흐름과 무관한 절대 위치이므로 문단 fit 전에 그 문단 소유 밴드를 등록한다. 밴드 아래에서 첫 줄이 단에 들어갈 때만 등록해, 못 들어가는 경우의 쪽 소속(edwardkim#7696 spill)은 그대로다. - 단 첫 문단이 밴드에 밀리면 그 문단 vpos 로 잡은 쪽 기준을 민 거리만큼 되돌린다. 입력: 한/글 2020 이 열어 HWP 로 저장한 합성 입력 두 개(gen_field_float_reset.py, FILL=20, 구역 첫 빈 문단의 용지 기준 자리차지 사각형)와 Print PDF. 대조군 _plain 은 필드·글 앞 개체가 없다. 회귀 tests/cases/stored_reset_field_float_suffix.rs (devel d9fd85e 에서 둘 다 FAIL, 수정 후 PASS): - section_first_paragraph_starts_below_its_own_paper_band: pi=1 이 A 하단 + pi=0 저장 줄 한 칸 - paragraph_after_section_paper_band_splits_at_stored_line: P 가 정본처럼 줄 2에서 나뉜다 이 입력은 필드·경계 뒤 개체가 저장 경계 수용을 막는 판정(edwardkim#8124)을 검출하지 않는다. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
planet6897
force-pushed
the
fix/stored-reset-field-group-controls
branch
from
October 23, 2026 23:46
3d21878 to
c961778
Compare
This was referenced Oct 23, 2026
jangster77
self-requested a review
October 24, 2026 07:24
Contributor
Author
devel 에 이미 반영되어 닫습니다@jangster77 검토 요청을 드렸던 PR 인데, #8191 이후 최신 devel 이 같은 결함을 다른 방식으로 이미 고쳐 닫습니다. 회귀 검사 — 이 PR 의 코드 없이
Visual Sweep (raw 실루엣,
쪽수는 두 입력 모두 2 = 한/글 2020 Print 2 입니다. devel 은 이 PR 의 «앵커 문단이 자기 밴드를 미리 등록» 대신, 빈 문단의 저장 vpos 가 자기 쪽·종이 기준 밴드 하단과 같으면 그 자리를 원점으로 받는 방식( #8186 은 이 PR 로 닫히지 않으므로 이슈에서 따로 정리하겠습니다. |
16 of 17 tasks
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.
요약
쪽·종이 기준 위아래 배치(TopAndBottom) 그림·도형을 가진 문단의 첫 줄도 그 밴드 아래에서 시작하게 한다. #7696 이후 rhwp 는 개체를 내보낸 뒤에야 밴드를 등록했다. 그래서 앵커 문단은 밴드 위에 남고 뒤 문단만 밀렸다. 그 결과 본문 전체가 정본보다 줄 하나 위에 그려졌고, 저장 쪽 경계와 다른 줄에서 문단이 나뉘었다.
Closes #8186
규칙과 근거
한/글은 위아래 배치 개체의 밴드 안에서 시작하는 줄을 밴드 아래로 보낸다. 그 개체를 가진 문단 자신의 줄도 마찬가지다.
독립 근거는 한/글 2020 이 HWP 로 저장한 입력이다. 구역 첫 빈 문단 pi=0 은 사각형 A 를 가지는데, 그 저장 vpos 가 30915 HU 로 A 하단(30912.5 HU, 단 상대)과 같다. Print PDF 에서도 pi=1 글줄 위끝이 527.2px 로 A 하단 + 줄 한 칸에 있다.
원인
register_page_anchored_topbottom_band는PageItem::Shape를 방출한 뒤에만 불린다. 그래서 앵커 문단의 fit 은 자기 밴드를 보지 못한다.vpos_snap_current_height)이 그 문단의 vpos(30915)로 잡혔다. 한/글은 이 문단을 밴드 아래에 저장했으므로 이 기준은 틀렸다.수정 (
state/transition.rs,paragraph.rs)prepare_fit_budget)apply_visible_float_exclusions_absorbing)을 적용한다vpos_page_base,vpos_stored_column_origin)page_band_flow_starts소비수정 전후 (code head
9c8499c3b, evidence headc96177867, base develd9fd85ed5)입력 해시(sha256 앞 16자):
samples/stored_reset_float/field_float_reset.hwp9dfe5e3fcdb1041dsamples/stored_reset_float/field_float_reset_plain.hwp5eefa29cbad1ba0dpdf/stored_reset_float/field_float_reset-2020.pdf2c7f2f14f3a60d96pdf/stored_reset_float/field_float_reset_plain-2020.pdfa0f4e1806669482b판정값은
scripts/visual_sweep.py2px 이웃 관용 내용 실루엣 raw(%)이며, 전 쪽을 측정했다. fresh WASM 은 호스트scripts/wasm-pack-locked.sh최적화 빌드118e7a36021f…(Studio public 동기화 SHA 일치)이다.field_float_reset.hwpfield_float_reset_plain.hwp(대조군)base 의 gate 는 대조군에서
re_review_required, head 는 Native·WASM 네 경우 모두passed다. 쪽수는 모두 2쪽으로 한/글과 같다. 직접 판독: head 는 Native·WASM 모두 1쪽이 «낱말25» 로 끝나고 2쪽이 «낱말26» 으로 시작해 정본과 같다.TSV 원본: field native-base · field native-new · field wasm-new · plain native-base · plain native-new · plain wasm-new
대조군 p2 — base (devel): 2쪽이 «낱말39» 에서 시작
대조군 p2 — head Native / overlay / fresh WASM
필드 입력 p1·p2 — head Native / overlay / fresh WASM
나머지 쪽·경로(base 와 WASM overlay 포함)는
mydocs/report/stored_reset_field_float/에 있다.테스트
tests/cases/stored_reset_field_float_suffix.rs— devel 소스(d9fd85ed5)에서 둘 다 FAIL, head 에서 둘 다 PASS 를 실행으로 확인했다.section_first_paragraph_starts_below_its_own_paper_bandparagraph_after_section_paper_band_splits_at_stored_line영향 범위와 검증 (head
9c8499c3b, based9fd85ed5)dump-pagesA/B143E433F503322BD33(.hwp/.hwpx). 143E433F 는 SVG 가 바이트 단위로 같고, 조판만 pi=0 을 3.8px 내려 저장 vpos(283 HU)와 맞췄다(이전 head 측정과 같음)issue_2225_missing_picture_placeholder·render_p37_direct_pdf_export통과--check, unit tier--check통과분리한 판정 수정 (#8124)
이전 head 는 저장 쪽 경계 판정(
stored_body_reset_fragment_matches_current_flow)에서 필드·책갈피와 경계 뒤 용지 기준 글 앞/뒤 개체가 경계를 막지 않게 하는 수정(7d9a1db86)도 담았다. 밴드 보정 뒤로는 이 fixture 가 그 수정을 검출하지 못한다(밴드가 바르면 흐름만으로 같은 줄에서 나뉜다). 확인한 내용:그래서 판정 수정은 검출 근거를 갖출 때까지 #8124 에 남긴다(별도 브랜치
fix/8124-stored-reset-field-controls에 보존).한계
🤖 Generated with Claude Code