Skip to content

fix(typeset): 병합 칸 안쪽 행은 내용이 들어가면 쪽 끝에서 끝낸다 - #8142

Open
planet6897 wants to merge 3 commits into
edwardkim:develfrom
planet6897:fix/q1-1342000-low-pages
Open

planet6897 wants to merge 3 commits into
edwardkim:develfrom
planet6897:fix/q1-1342000-low-pages

Conversation

@planet6897

@planet6897 planet6897 commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

요약

RowBreak 표에서 앞 행의 병합 칸이 덮는 안쪽 행이 쪽 끝에 걸릴 때, 그 행의 글줄과 안 여백이 남은 높이에 다 들어가면 한/글은 그 행을 이 쪽에 남은 높이로 끝내고 다음 쪽을 다음 행의 선언 높이로 시작한다. rhwp 는 이 행을 통째로 다음 쪽으로 넘겼다.

범위 변경 (2026-10-25): 처음 이 PR 은 1342000-202300055 37·38·40·41쪽과 위 캡션 표 저장 프레임 원점도 고쳤다. devel 9418ed0c7(#8191 반영)이 두 부분을 이미 같은 결과로 맞추므로(아래 「1342000 재측정」) 이 PR 에는 병합 칸 안쪽 행 종료만 남는다. 캡션 표의 회귀 검사와 입력·PDF 는 devel 동작을 지키는 검사로 남긴다.

한/글 규칙 근거 (한/글 2020 합성)

열0 이 행1~4 를 병합한 8×3 RowBreak 표를 쪽 끝 남은 높이를 10 HU 간격으로 바꾸며 만들고 한/글 2020 Print 로 행 배치를 읽었다. 줄간격·칸 안 여백·글자 크기를 바꾼 네 계열에서 문턱은 늘 같았다.

  • 행의 글줄 + 안 여백 ≤ 남은 높이이면 그 행은 이 쪽에 남은 높이로 끝나고, 다음 쪽은 다음 행이 선언 높이로 시작한다. 남는 빈 띠의 크기는 조건이 아니다(빈 띠 1.3px 인 경우도 이 쪽에 남는다).
  • 넘치면 행 전체가 다음 쪽으로 간다. 픽셀 미만 허용치는 없다 — samples/table_scattered_header_rowbreak.hwp 2쪽 끝 행은 0.04px 넘쳐서 넘어간다(기존 회귀 issue_7902 가 지킨다).
  • 병합 칸이 그 행에서 시작하거나 끝나면 그 칸의 남은 내용을 같은 행의 컷으로 다음 쪽에 이어야 하므로 종전 규칙을 유지한다(기존 회귀 issue_5877 가 지킨다).

변경

src/renderer/typeset/table/scan/row.rs, runner/row_step.rs: devel 의 SOURCE_BAND_CLOSE·BAND_CLOSE·RSPAN_CLOSE 판정은 그대로 두고, 그 밴드 컷이 받지 않은 «병합 칸 안쪽 행(병합 칸 시작·끝 행 제외)» 에만 «내용 + 안 여백 ≤ 남은 높이 → 남은 높이로 끝내고 다음 행에서 이월 컷 없이 시작» 갈래(COVERED_ROW_CLOSE)를 더한다. 글줄을 다 소비한 행(fully_consumed)만 대상이다. devel 판정만으로는 합성 표 4개 중 넷째(남은 1480 HU·병합 셋째 행)가 재조판 경로의 MIN_TOP_KEEP_PX 문턱 때문에 통째로 넘어간다.

회귀 검사 (tests/cases/)

검사 입력 / 정답 devel 9418ed0c7 이 PR
rowspan_band_fits_remaining_page 합성 HWPX 를 한/글 2020 으로 저장한 samples/rowspan-band-fit/rowspan-band-fit.hwp / 같은 저장본 Print PDF. 쪽수·표 조각 시작/끝 행·이어받기 컷 없음 FAIL PASS
captioned_float_table_stored_frame 1342000 41쪽 발췌를 한/글 2020 으로 저장한 samples/caption-float-frame/caption-negative-offset.hwp / 같은 저장본 Print PDF. 캡션 줄이 저장 원점 + 바깥 위 여백에서 시작하고 표 위에 놓이는 관계 PASS PASS

Visual Sweep (head b079446c5 코드, base = devel 9418ed0c7)

판정값 = 2px 실루엣 raw(TSV 4열), --compat 2022, 전 쪽.

입력 쪽수 rhwp/한/글 devel Native / WASM 이 PR Native / WASM
samples/rowspan-band-fit/rowspan-band-fit.hwp 9/9 최저 39.79 / 40.29 (9쪽), 90 미만 2쪽(8·9) 최저 97.85 / 97.68 (8쪽), 90 미만 0
samples/caption-float-frame/caption-negative-offset.hwp 2/2 97.70 / 97.68 97.70 / 97.68

8·9쪽 쪽별: devel Native 88.16 / 39.79 → 이 PR 97.85 / 100.00, WASM 88.00 / 40.29 → 97.68 / 100.00.

직접 판독(8쪽): 병합 칸 «T k=3 rest=1480» 이 덮는 행이 이 쪽에서 남은 높이로 끝나고, 아래 라벨13 행과 R1C1R3C2 칸 경계가 PDF 와 같은 자리다.

9쪽 — devel / 이 PR Native / 이 PR fresh WASM

rowspan p9 devel review
rowspan p9 head review
rowspan p9 wasm review

8쪽 — 이 PR Native review·overlay

rowspan p8 head review
rowspan p8 head overlay

8·9쪽의 devel·head·wasm review·overlay 전부가 mydocs/report/rowspan-band-fit/ 에 있다.

1342000 재측정

원본 1342000-202300055(49쪽)을 한/글 2024 Print 로 새로 출력해 대조했다(종전 비교는 한/글 2020 Print). devel 과 이 PR 이 전 쪽에서 같은 점수다 — 37·38·40·41쪽 Native 99.89 / 99.43 / 99.85 / 99.89, WASM 99.91 / 99.45 / 99.87 / 99.91. 남은 90 미만은 두 빌드 공통으로 Native 5쪽 89.91·6쪽 86.96, WASM 6쪽 87.33 이다(수학 기호 전진폭 축, #8141).

게이트 (code head b079446c5, base 9418ed0c7)

  • rustfmt 차이 0 · Clippy native / wasm32 / workspace all-targets / native-skia all-targets 경고 0(매 단계 소스 touch 후 실제 재컴파일) · manifest --check · unit tier --check 통과.
  • nextest(--features native-skia, release-test) 11,759건 중 11,755 통과 — 실패 4건은 devel 에서도 같은 이 host 환경 문제다(issue_7966_pdf_close_stroke 3건은 Windows 체크아웃 CRLF, fix(checkout): Windows CRLF·심볼릭 링크 체크아웃에서만 실패하던 로컬 검사를 고친다 #8193 · custom_font_paths_select_style_within_the_first_family_owner 는 글꼴 설치).

미검증·남은 차이

  • samples A/B 와 10k 코퍼스는 이번 base 에서 다시 돌리지 않았다. 이전 base(a6e9d18fc)에서는 1690000-201300011 295→294쪽(한/글 294쪽과 일치) 등 8문서가 바뀌었는데, 그중 캡션 표 몫은 이제 devel 에 있다.
  • 이전 base 의 «병합 칸이 끝나는 행» 9쪽 결함(40.66)은 devel 9418ed0c7 + 이 PR 에서 100.00 이다.

🤖 Generated with Claude Code

@edwardkim edwardkim added bug Something isn't working layout 문서 레이아웃/페이지네이션: 표·그림 배치, float/anchor, 줄·행 높이, 겹침·클리핑 rendering SVG/Canvas/PDF 등 렌더 출력과 시각 표시: 그리기, 표시 누락, bbox, paint 정합성 table table rendering and edit labels Oct 22, 2026 — with ChatGPT Codex Connector
@edwardkim edwardkim added this to the v1.0.0 milestone Oct 22, 2026 — with ChatGPT Codex Connector
@planet6897
planet6897 force-pushed the fix/q1-1342000-low-pages branch from 0ec7aab to ce20e62 Compare October 23, 2026 08:41
RowBreak 표에서 앞 행의 병합 칸 안쪽에 있는 행이 쪽 끝에 걸릴 때, 그 행의 글줄과
안 여백이 남은 높이에 다 들어가면 한/글은 그 행을 이 쪽에 남은 높이로 끝내고
다음 쪽은 다음 행에서 선언 높이로 시작한다. 종전에는 남는 빈 띠가 25px 이상일
때만 그렇게 했고(그 미만이면 행을 통째로 넘김), 내용 소진 밴드 컷은 선언 높이의
나머지를 다음 쪽 첫머리로 이월했다. 한/글 2020 합성(줄간격·안 여백·글자 크기를
바꾼 네 계열)에서 문턱은 늘 «내용 + 안 여백 ≤ 남은 높이» 였고 픽셀 미만 허용치는
없다(table_scattered_header_rowbreak 2쪽: 0.04px 넘치는 행은 넘김). 병합 칸이
그 행에서 시작하거나 끝나면 남은 내용을 같은 행의 컷으로 이어야 해 종전 규칙을
유지한다.

위 캡션 흐름 표의 저장 프레임 원점은 devel edwardkim#8191 이 같은 규칙으로 이미 고쳤다.
이 커밋은 그 코드를 넣지 않고, 회귀 검사 captioned_float_table_stored_frame 과
입력·PDF 만 남긴다(devel 에서도 통과, Native/WASM 97.70/97.68).

1342000-202300055: p37 52.85→98.47, p38 53.48→98.90, p40 65.37→99.27,
p41 60.20→99.66 (Native raw). 10k: 1690000-201300011 295→294
(한/글 쪽수와 일치). — rebase 전 head 측정값.

[rebase 재유도 2026-10-23] devel def947c 의 SOURCE_BAND_CLOSE·BAND_CLOSE·RSPAN_CLOSE 판정은 그대로 두고,
그 밴드 컷이 받지 않은 병합 칸 안쪽 행에만 «내용 + 안 여백 ≤ 남은 높이» 종료 갈래
(COVERED_ROW_CLOSE)를 더한다. 글줄을 다 소비한 행(fully_consumed)만 대상이다.
종전 PR 의 저장 사다리 RSPAN_BAND 갈래 교체는 devel 의 SOURCE_BAND_CLOSE 가 같은 사례를
이미 닫으므로 넣지 않는다.
@planet6897
planet6897 force-pushed the fix/q1-1342000-low-pages branch from ce20e62 to b079446 Compare October 24, 2026 19:48
1342000-202300055 37·38·40·41쪽은 devel 9418ed0 이 이미 같은 점수로 맞춘다
(한/글 2024 Print 49쪽 대조: devel·이 PR 모두 Native 99.43~99.89). 이 PR 이
바꾸는 출력은 병합 칸 안쪽 행 종료이므로 합성 rowspan-band-fit 의 수정 전후
review·overlay 로 증적을 바꾼다.
@planet6897 planet6897 changed the title fix(typeset): 병합 칸 안쪽 행은 내용이 들어가면 쪽 끝에서 끝내고, 위 캡션 표는 저장 프레임 원점을 쓴다 fix(typeset): 병합 칸 안쪽 행은 내용이 들어가면 쪽 끝에서 끝낸다 Oct 24, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working layout 문서 레이아웃/페이지네이션: 표·그림 배치, float/anchor, 줄·행 높이, 겹침·클리핑 rendering SVG/Canvas/PDF 등 렌더 출력과 시각 표시: 그리기, 표시 누락, bbox, paint 정합성 table table rendering and edit

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants