Skip to content

Task #476 + #479 + #480 + #483 + #488 + #489 + #490 + #492: layout 정합 + 수식 정정 합본#478

Closed
planet6897 wants to merge 100 commits intoedwardkim:develfrom
planet6897:devel
Closed

Task #476 + #479 + #480 + #483 + #488 + #489 + #490 + #492: layout 정합 + 수식 정정 합본#478
planet6897 wants to merge 100 commits intoedwardkim:develfrom
planet6897:devel

Conversation

@planet6897
Copy link
Copy Markdown
Contributor

@planet6897 planet6897 commented Apr 30, 2026

Summary

9 개 task 합본 PR — layout 정합 정정 4건 + 수식 정정 1건 + #488 후속 시각 결함 정정 3건 (1 자연해소 포함).

Task #479 — paragraph 누적에서 trailing line_spacing 제외 (HWP vpos 정합) ★

samples/21_언어_기출_편집가능본.hwp 페이지 12 layout drift 200px 해결. typeset.rs:802 의 paragraph total_height 가 마지막 line 의 line_spacing 까지 누적하여 HWP vpos 기준과 어긋나던 문제. paragraph 17개 누적 ≈ 200px drift. 옵션 A (typeset + layout 동시 정정, Task #452 회복 분기 + 셀 내부 보호 분기 유지) 적용.

핵심 검증: samples/aift.hwp p3 모든 paragraph diff = +9.5 → +0.0 (HWP vpos 완전 정합).

Task #476 — PartialParagraph 인라인 Shape 페이지 라우팅 정정

paragraph 페이지 분할 시 인라인 treat_as_char Shape 의 PageItem::Shape 가 항상 마지막 페이지에 등록되어 박스가 잘못된 페이지의 fallback 위치에 출현하던 문제 해결.

Task #480 — wrap=Square 표의 x 좌표에 paragraph margin 반영

wrap=Square 표가 paragraph margin/indent 가 있는 경우 단 사이 갭 영역에 잘못 그려지던 문제 해결.

Task #483 — 각주 multi-paragraph 처리에서 line_spacing 누락

layout_footnote_paragraph_with_number 가 trailing line_spacing 누락하던 것을 정정. follow-up 으로 각주 마지막 paragraph 의 trailing ls 미적용 (note_spacing 과 이중 합산 방지).

Task #488 — 수식 토크나이저 rm/it/bold prefix 분리 + 렌더러 italic honor ★

hwpeq 폰트 스타일 키워드(rm/it/bold)가 식별자에 공백 없이 붙어 쓰일 때(예: rmK, rmCa, rmmol, itl, itaq)를 토크나이저가 분리하지 못해 SVG 에 raw prefix 가 글자 그대로 출력되던 문제 + svg/canvas 렌더러 Text arm 이 italic 파라미터를 무시하여 FontStyle::Roman(rm) 적용 영역도 italic 으로 표시되던 두 가지 본질 결함 정정.

  • tokenizer.rs read_command() 에 FONT_STYLES prefix 분리 (bold → it → rm 우선순위)
  • svg_render.rs / canvas_render.rs Text arm 이 italic 파라미터 honor + 진입점 default italic=true (hwpeq 변수 기본 스타일)
  • 단위 테스트 14건 추가 (tokenizer 8 + svg_render 6)

핵심 검증: samples/exam_science.hwp 페이지 1 표 #3 (이온 결합) 의 K⁺, X⁻, Y⁻, Ca²⁺, O²⁻ 화학 기호가 raw rmK/rmCa 에서 정상 roman 으로 정정. 8개 핵심 샘플 59 페이지에서 raw prefix 잔존 0건.

Task #489 — Picture+Square wrap (어울림) 호스트 텍스트 LINE_SEG.cs/sw 적용 ★

samples/exam_science.hwp 페이지 1 5번 문제 (pi=21) 의 어울림 그림이 본문 첫 줄을 가리고 단어 간격이 비정상적으로 큰 결함 정정. paragraph_layout.rs:layout_composed_paragraphavailable_width = col_area.width - margins 로 계산하여 LINE_SEG.segment_width(=19592 HU, 그림 너비만큼 좁아짐)를 무시했던 문제. 표 Square wrap (#362/#439/#463) 은 caller 가 col_area 자체를 wrap_area 로 좁혀 우회하지만 Picture/Shape 는 호스트 paragraph 와 같은 paragraph 에 anchor 되어 별도 우회 경로가 없었음.

비-TAC Control::Picture / Control::Shape with wrap=Square 보유 시 LINE_SEG.cs/sw 를 effective_col_x/effective_col_w 로 적용 (200 HU 노이즈 가드, 휴리스틱 없음).

핵심 검증: exam_science p1 pi=21 첫 줄 텍스트 x=534..944 (풀컬럼) → x=535..798 (sw 적용, 그림 분리). p2 pi=37 8번 문제 동일 패턴 자동 정정.

Task #490 — 빈 텍스트 + TAC 수식 셀 paragraph alignment 적용 ★

samples/exam_science.hwp 페이지 1 3번 표 (이온 결합 4×4) 셀 7/11 의 28/36 수식이 셀 중앙이 아닌 좌측에 정렬되던 결함 정정. paragraph_layout.rs:2227 의 빈 runs + TAC 수식 분기 (Task #287 도입) 가 paragraph alignment 적용을 누락. 동일 함수 텍스트 runs 케이스(line 1200) 와 동일 패턴으로 align_offset 산출 후 inline_x 에 적용. Justify/Left 는 변경 없음 (회귀 차단).

핵심 검증: 28/36 수식 x=358.7 → 415.5 (셀 중앙 부근). 9 종 샘플 263 페이지 byte 비교 = 257 동일 / 6 정정 (59 수식 모두 우측 이동, 회귀 0). exam_science 전 페이지 + exam_math p13 + kps-ai p46 광범위 정정.

Task #492 — 5번 밑단 짤림 (자연해소)

#489 정정으로 자연 해소. 검증: pi=21 (5번) 본문 6 줄, 보기 ㄱ/ㄴ/ㄷ, 선택지, pi=27 (6번) 모두 페이지 1 col 1 에 정상 표시. col 1 used=1108.9px / body 1215.1px (overflow 없음). #488 Stage 2 시각 검증 시 #489 의 텍스트-그림 겹침으로 '잘림' 으로 오인된 케이스.

핵심 검증

파일 / 페이지 Before After
21_언어_기출 p11 단 1 끝 paragraph 238 박스 누락 정상 출현 (#476)
동 p12 22번 위 잘못된 박스 출현 제거 (#476)
동 p14 [A] 박스 단 사이 갭 (580.9) paragraph 안 (605.5) (#480)
p12 23번 박스 y 1166.0 1040.2 (-125.8) ★ #479
2010-01-06 p1 각주 1) p[0]→p[1] gap 16.0px 20.8px (#483)
동 각주 2)→3), 3)→4), 4)→5) gap 23.6px 23.6px (회귀 없음)
exam_science p1 표 #3 화학 기호 rmK/rmCa (raw) K⁺ / Ca²⁺ (roman) ★ #488
exam_science p1 raw rm/it prefix 60건 0건#488
exam_science p1 pi=21 첫 줄 텍스트 x=534..944 (그림 침범) x=535..798 (그림 분리) ★ #489
exam_science p2 pi=37 첫 6 줄 풀컬럼 spread sw=234px 좁아짐 (#489)
exam_science p1 28/36 수식 x 358.7 (좌측) 415.5 (중앙) ★ #490

TYPESET_DRIFT 정합 (#479)

paragraph Before After
pi=0~9 (aift.hwp p3) 모두 diff=+9.5 diff=+0.0

광범위 회귀

#488 raw prefix 점검

샘플 페이지 raw prefix
eq-01.hwp / equation-lim.hwp / atop-equation-01.hwp 3 0건
exam_math.hwp 20 0건
exam_kor.hwp 20 0건
exam_eng.hwp 8 0건
exam_social.hwp 4 0건
exam_science.hwp 4 0건 (수정 전 60건)
합계 59 0건

#489 byte 비교 (9 종 샘플 263 페이지)

  • 261 동일 / 2 정정 (exam_science p1 pi=21 + p2 pi=37). 회귀 0.

#490 byte 비교 (9 종 샘플 263 페이지)

  • 257 동일 / 6 정정 (exam_science 전 페이지 + exam_math p13 + kps-ai p46). 59 수식 위치 정정 모두 우측 이동(=alignment 방향 일치). 회귀 0.

Test plan

페이지 수 변화 (#479 영향)

샘플 Before After
21_언어_기출, 2010-01-06, exam_kor, exam_eng, synam-001 동일 동일
k-water-rfp 28 26
hwpspec 177 172

paragraph 누적 정확화로 더 많은 paragraph 가 한 페이지에 들어가는 결과.

변경 파일

#488 후속으로 분리된 별도 이슈 처리 결과

시각 검증 중 발견되었으나 본질 영역이 다른 4건은 별도 이슈로 분리, 본 PR 에서 3건 처리:

closes #476
closes #479
closes #480
closes #483
closes #488
closes #489
closes #490
closes #492

planet6897 and others added 30 commits April 29, 2026 11:54
exam_kor.hwp 24페이지 → 20페이지 정합 작업 1단계.

- 페이지별 단별 used/hwp_used/diff CSV (output/debug/task435/)
- 회귀 대상 5문서 페이지 수 (exam_kor 24, exam_eng 8, k-water-rfp 28, hwpspec 177, synam-001 35)
- RHWP_TYPESET_DRIFT 출력 캡처 (pi=0.30, pi=1.25 split 진단)
- compute_body_wide_top_reserve_for_para 산정 경로 추적

핵심 진단: col 1 reserve 306.1px (HWP 실제 94.5px 대비 +211.6px 과대).
원인: Paper-rel 좌표를 body-rel 변환 없이 그대로 reserve 에 누적.
Stage 2 에서 typeset.rs:2127-2172 의 VertRelTo::Paper 분기 정정.

수행계획서/구현계획서/Stage 1 보고서 포함.
compute_body_wide_top_reserve_for_para 의 VertRelTo::Paper 분기에서
body-rel 변환 누락 정정. body 와 일부만 겹치는 (header→body 침범)
케이스에서 Paper-rel 좌표를 그대로 reserve 에 누적하던 버그 수정.

수정 전 reserve = shape_y_offset(paper) + h + outer_bottom = 306.1 px
수정 후 reserve = max(0, shape_top_abs - body_top) ... = 94.4 px

결과:
- exam_kor.hwp: 24 → 22 페이지 (page 2, 15 orphan 해소)
- pi=0.30, pi=1.25 split → FullParagraph
- 회귀: exam_eng 8, k-water-rfp 28, hwpspec 177, synam-001 35 유지
- cargo test: 1062 passed

Stage 3 에서 일반 페이지 누적 -100~-300px 정정 (22 → 20).
원래 가설 ("표/도형 후 컬럼 잔여 공간 산정 부족") 재검토.
RHWP_TYPESET_DRIFT 분석 결과 diff 메트릭은 typeset cur_h 누적
(height_for_fit, trail_ls 제외) vs hwp_used (last line vpos+lh)
의 좌표계 차이를 측정하는 것일 뿐, "rhwp 가 채울 수 있는데 못 채운
잔여 공간" 이 아님을 확인.

실제 22→20 페이지 단축 장애물:
1. 섹션 1 페이지 14: Square wrap 표 + col 0 over-fill (1225>1211)
   → col 1 under-use (64px)
2. 섹션 1 페이지 15: 단일 컬럼 출력 (단정의는 2단인데 단 1 누락)
3. 섹션 2 페이지 18: pi=11 split + pi=13 [단나누기] orphan-like

3가지 전부 해결 시 22→19 가능 (목표 20 도달).

옵션 A/B/C 결정 필요 (현 상태 종료 / Stage 4 확장 / Stage 4 부분).
옵션 A 종료: 24→22 페이지 (Stage 2 col 1 reserve 정정).
잔여 22→20 미달성, 3가지 별도 메커니즘 (Square wrap over-fill,
단일 컬럼 출력 버그, col 0 cur_h over-advance) 별도 task 분리 권고.

edwardkim#393 (옵션 A) 본 task Stage 2 로 적용 완료, close 가능.
수행계획서(task_m100_439.md) + 단계1 진단 보고서.

핵심 발견:
- 이슈 가설의 engine.rs:702-711 는 fallback 경로 (RHWP_USE_PAGINATOR=1).
  기본 활성 엔진은 typeset.rs::TypesetEngine.
- 실제 버그 위치: typeset.rs::place_table_with_text (1400-1467).
  engine.rs 의 !is_wrap_around_table 가드 (engine.rs:1349, 1422) 누락.
- 페이지 14 col 0 used=1225.8 (본문 1211.3 초과 +14.5) 정확히 재현.

코드 변경 없음 — 임시 디버그 코드는 모두 revert.
place_table_with_text 의 정확한 cur_h 누적 추적 (디버그 후 revert):
- Square wrap 4 표가 pre_height + table_total 합산 → +244.88 px 과다
- HWP 의도: max(호스트 텍스트, 표 + v_offset) 만 누적

수정안: typeset.rs::place_table_with_text 에서
  current_height += max(pre_height, v_off + table_total) (Square wrap 시)

코드 변경 없음 — 임시 디버그 println 모두 revert.
typeset.rs::place_table_with_text 에서 Square wrap (어울림) 표일 때
current_height 누적을 pre_height + table_total → max(pre_height, v_off + table_total)
로 변경.

호스트 문단 텍스트와 어울림 표는 같은 수직 영역을 공유하므로
더 큰 쪽만 한 번 누적해야 HWP layout 의도와 일치.
PageItem 자체는 PartialParagraph + Table 모두 push (layout 렌더링 보존).

검증:
- 페이지 14 col 0 used 1225.8 → 1036.1 px (≤ 1211.3 충족)
- exam_kor.hwp 22 → 20 페이지 (목표 ≤ 21 충족)
- 회귀 샘플 6 종 (exam_eng/math, 21언어, aift, 2010-01-06, biz_plan) 페이지 수 동일
- cargo test 1066 개 모두 통과
- SVG 렌더링 정상

closes edwardkim#439
Stage 4 회귀 검증 결과:
- 149 개 sample HWP 전수 페이지 수 비교: exam_kor 만 22→20 변경, 148개 동일
- cargo test 1066 passed
- DoD 전부 충족

본 task 완료. closes edwardkim#439.
typeset.rs::place_table_with_text 의 Square wrap 표 누적 정책을
pre_height + table_total → max(pre_height, v_off + table_total) 로 변경.

효과:
- exam_kor.hwp 페이지 14 col 0 used 1225.8 → 1036.1 px (over-fill 해소)
- exam_kor.hwp 22 → 20 페이지
- 149 개 sample 중 exam_kor 만 변화, 148 개 동일 (회귀 0건)
- cargo test 1066 passed

closes edwardkim#439
…문제 수정

- 수행/구현 계획서 + Stage 1·2 보고서 작성
- src/renderer/layout.rs: paragraph border merge 그룹을 col_area 바닥/꼭대기로 클램프
- exam_kor p2/5/8/15 의 세로 구분선이 PDF 와 일치하는 길이로 정상화
  (p8: 1671 → 1425, 246px 단축, 페이지 바깥 침범 해소)
- vpos-reset 미존중으로 인한 텍스트 자체의 overflow 는 별도 이슈로 분리
- snapshot 갱신: tests/golden_svg/issue-267/ktx-toc-page.svg
  (invisible 구조 rect 의 height 5.34px 변화, 가시 변화 없음)
페이지 번호 박스가 column divider line 과 붙어 보이는 문제 해결.

원인: 꼬리말 paragraph 의 vert=Para + wrap=TopAndBottom 표가 paragraph
top 에 배치되어 본문 바닥과 같은 y 에 위치. HWP 의 실제 동작은 첫 라인의
line_height/2 만큼 아래에 anchor 되어 본문과 시각적 갭 형성.

수정: layout_header_footer_paragraphs 에서 해당 조건의 첫 paragraph 표는
y_offset 에 line_height/2 (px) 를 더하여 배치.

검증 (exam_kor.hwp 20p):
- 박스 top y: 1422.93 → 1439.47 (PDF 380.6mm 와 일치)
- column line - 박스 갭: 0px → 16.3-17.0px (PDF 16.0px 와 일치)
- column line 길이/위치는 PDF 자연 그대로 유지 (p1 1131px, p2+ 1226px)
- cargo test --release: 1117 passed, 0 failed
이슈 edwardkim#445 의 두 시각적 결함 (paragraph border 페이지 바깥 침범 + 페이지
번호 박스가 column line 에 붙음) 모두 PDF 와 일치하도록 수정 완료.

승인 후 local/devel 머지 + edwardkim#445 close 예정.
- 수행계획서 (mydocs/plans/task_m100_452.md): 옵션 A 선언, 4단계 분해
- 구현 계획서 (mydocs/plans/task_m100_452_impl.md): paragraph_layout.rs:2511-2520
  is_para_last_line 분기 제거, is_cell_last_line 만 보존
- Stage 1 보고서 (mydocs/working/task_m100_452_stage1.md):
  - exam_kor pi=1.line9↔pi=2.line0 step = 15.34px (버그) ↔ 단락내 24.51px
  - 10종 샘플 페이지 수 baseline 캡처 (/tmp/task_452_baseline/)
  - 21_언어 p1 col 1 pi=26+보기①②③ fit 확인 (edwardkim#332 회귀 baseline)
- orders 갱신: 버그 섹션 edwardkim#452 항목 추가
… + golden 갱신

- src/renderer/layout/paragraph_layout.rs:2511-2519: is_para_last_line 분기
  제거. is_cell_last_line(셀 내) 만 trailing 제외 보존, 본문 단락은 모든 줄에서
  y += lh + ls 통일. pagination/engine.rs 의 current_height 누적과 정합.
- 검증: exam_kor 1페이지 pi=1.line9↔pi=2.line0 step = 15.34 → 24.50 px
  (단락내 step 과 동일). cargo test --lib 1066 passed.
- golden SVG 2건 baseline 갱신 (Task edwardkim#332 에서 갱신된 것을 본 정합으로 재갱신):
  - tests/golden_svg/issue-147/aift-page3.svg
  - tests/golden_svg/issue-157/page-1.svg
- LAYOUT_OVERFLOW 메시지: 페이지 마지막 단락의 trailing ls (~10.9 px)
  가 col_bottom 을 살짝 넘으나 빈 공간이므로 시각 무영향. pagination
  engine 의 effective_trailing 처리로 페이지 분배는 유지.
paragraph_layout.rs:2511-2520 의 is_para_last_line 분기 제거. 본문 단락
모든 줄에서 y += lh + ls 통일 → pagination/engine.rs 의 current_height
누적과 정합. is_cell_last_line(셀 내) 만 trailing 제외 보존.

효과: exam_kor pi=1.line9↔pi=2.line0 step 15.34→24.50 px (단락내 step 과
동일, PDF 정합). 10종 샘플 페이지 수 변동 0. Task edwardkim#332 회귀 0 (21_언어
p1 col 1 pi=26+보기①②③ fit 유지). cargo test --lib 1066 passed +
svg_snapshot 6/6 (issue-147/157 baseline 재갱신).

closes edwardkim#452
paragraph_layout 의 skip_text_for_inline_shape 분기 제거. 인라인 글상자가 있는
줄에서 외부 문단 본문이 통째로 스킵되던 버그를 수정.

원인: skip_text_for_inline_shape 가 글상자 내부 텍스트와 외부 문단 본문 텍스트를
혼동하여, 외부 본문(글상자 좌·우의 일반 텍스트)도 함께 스킵하고 있었음.
글상자 자체와 내부 텍스트는 shape_layout 의 inline_shape_position 경로로 별도
렌더되므로 외부 본문을 항상 렌더해도 중복되지 않는다.

검증: samples/exam_kor.hwp 페이지 2 좌측 단 line 2 의 본문 39자(척사파의 ...
거스를) 가 글상자 좌·우로 분리 렌더되어 복원됨. 페이지 수 20 유지, 전체
테스트 1117 passed.
Stage 3 회귀 검증 결과 (1117 tests passed, 페이지 수 회귀 0).
Stage 4 최종 결과보고서 및 PR 메시지(`mydocs/report/task_m100_455_pr.md`) 작성.
오늘할일에 Task edwardkim#455 항목 추가.
`on_first_multicolumn_page` 가드는 새 페이지 시작 시 false 로 리셋되어
다단 구역이 여러 페이지에 걸칠 때 후속 페이지에서
`detect_column_breaks_in_paragraph` 호출이 차단됨. HWP 원본의 LINE_SEG
vpos 리셋 위치가 무시되어 좌측 단 하단이 col_bottom 을 초과해 그려지던
버그.

수정: `typeset.rs:856` (기본 경로) + `pagination/engine.rs:607`
(RHWP_USE_PAGINATOR=1 fallback) 의 가드에서 `on_first_multicolumn_page`
조건 제거.

검증:
- exam_kor p2 pi=39 0..4/4..7 → 0..2/2..7 (HWP 원본 정합)
- exam_kor LAYOUT_OVERFLOW 36 → 16 (페이지 5/8 의 동일 메커니즘 자동 해소)
- 다단 샘플 4종 (exam_eng/math/science/social) 페이지 수 + SVG byte 동일
- cargo test --release 1120 passed, 0 failed

closes edwardkim#459
planet6897 added 2 commits May 1, 2026 00:28
…/Page 케이스 보강

layout.rs:3382 free function 을 LayoutEngine 메서드로 변환 + horz_rel_to 분기 추가:
- Paper: ref_x=0, ref_w=current_paper_width
- Page: ref_x=current_body_area.x, ref_w=current_body_area.width
- Para/Column: ref_x=col_area.x, ref_w=col_area.width (기존 동작)

이전: horz_rel_to 무시, 항상 col_area 기준 (Column 케이스만 정확).
table_layout::compute_table_x_position 의 동일 룰 적용 — 룰 정합.

caller 2곳 (layout.rs:2407, 2641) 의 self.dpi 인자 제거.

검증:
- 9종 샘플 202 SVG 회귀 0 (Paper/Page case 발생 샘플 없음 — 잠재 결함 보강)
- cargo test 1094+ 통과
- clippy 본 변경부 경고 0

Task edwardkim#463 Stage 5 의 후속.
closes edwardkim#466
edwardkim added a commit that referenced this pull request Apr 30, 2026
@planet6897 planet6897 reopened this Apr 30, 2026
edwardkim added a commit that referenced this pull request Apr 30, 2026
edwardkim added a commit that referenced this pull request Apr 30, 2026
edwardkim added a commit that referenced this pull request Apr 30, 2026
edwardkim added a commit that referenced this pull request Apr 30, 2026
작성자 devel 분기 누적 9 Task (97 commits) 중 페이지 레이아웃 무관
5 Task 만 분리 cherry-pick. 본 사이클 정정 영역 (#501) 과 충돌 위험
큰 4 Task (#476, #479, #480, #492) 제외.

흡수 (8 commits):
- #488 (3): 수식 토크나이저 prefix 분리 + 렌더러 italic
- #490 (1): 빈 텍스트 + TAC 수식 셀 alignment
- #483 (2): 각주 multi-paragraph line_spacing
- #489 (1): Picture+Square wrap 호스트 텍스트 LINE_SEG
- #495 (1): 셀 paragraph 인라인 Shape 분기 가드 (부분 정정)

검증: cargo test --lib 1102 passed, svg_snapshot 6/6, issue_418 1/1,
issue_501 PASS, clippy 0건, WASM 4,211,238 bytes.

작업지시자 시각 판정: 1차/2차 통과 + 3차 (#495) 부분 정정 → 옵션 B
(개선 흡수 + 잔존 결함 별도). 이슈 #502 (문단 내 글상자 TextRun
처리) 분리 등록.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@edwardkim
Copy link
Copy Markdown
Owner

처리 결과 — cherry-pick 머지 (5 Task / 8 commits)

본 PR 의 9 Task 중 페이지 레이아웃 무관 영역 5 Task 분리 cherry-pick 머지 완료.

흡수 (8 commits)

Task 영역
#488 수식 토크나이저 prefix 분리 + 렌더러 italic
#490 빈 텍스트 + TAC 수식 셀 alignment
#483 각주 multi-paragraph line_spacing
#489 Picture+Square wrap 호스트 텍스트 LINE_SEG
#495 셀 paragraph 인라인 Shape 분기 가드 (부분 정정)

제외 (4 Task)

Task 사유
#476 PartialParagraph 인라인 Shape 페이지 라우팅 — 페이지 분할 직접 영향
#479 paragraph trailing line_spacing — typeset.rs core, 본 사이클 #501 정정과 영역 충돌
#480 wrap=Square 표 paragraph margin — 표 위치 간접 영향
#492 orders 갱신만

본 사이클의 정정 (#501 cell.padding 한컴 방어 로직) 안정화 후 위 4 Task 는 다음 PR 사이클에서 재처리 가능 영역으로 봤습니다.

검증

잔존 결함

#495 의 가드는 텍스트 중복은 정정했지만 잔존 — exam_science p2 7번 박스 안 본문 4글자 누락 + 사각형 위치. → 이슈 #502 (문단 내 글상자 TextRun 처리) 분리 등록.

머지 commits

상세는 `mydocs/pr/pr_478_report.md` 참고.

Author 보존 (Jaeook Ryu) + 단계 commit 분리. 본 PR 은 close 합니다.

@edwardkim edwardkim closed this Apr 30, 2026
edwardkim added a commit that referenced this pull request Apr 30, 2026
edwardkim added a commit that referenced this pull request Apr 30, 2026
edwardkim added a commit that referenced this pull request Apr 30, 2026
edwardkim added a commit that referenced this pull request Apr 30, 2026
edwardkim added a commit that referenced this pull request Apr 30, 2026
PR #478 close 후 추가 cherry-pick 진행:
- 4차 #480: wrap=Square 표 paragraph margin (82fd66e)
- 5차 #476: PartialParagraph 인라인 Shape 페이지 라우팅 (5955b10)

총 7 Task / 10 commits 흡수. 미흡수 #479 (paragraph trailing
line_spacing) 는 한컴 2020 정답지 시각 판정 필수로 이슈 #503 분리.

작업지시자 통찰: "#479 는 회귀쪽에서 실패가 납니다. 이건 따로 분리해서
한컴 2020 버전으로 시각판정을 해야 합니다."

검증: cargo test --lib 1102 passed, WASM 4,202,430 bytes, 4차/5차
시각 판정 모두 통과.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request Apr 30, 2026
본 사이클 본질:
- Task #501 (cell.padding 한컴 방어 로직 모방 정정, closes #501)
- PR #428 (oksure — 그룹 내 그림 직렬화)
- PR #494 (DanMeon — Paragraph::utf16_pos_to_char_idx 외부 노출, #484)
- PR #478 (planet6897 — 7 Task / 10 commits cherry-pick: #488/#490/#483/#489/#495/#480/#476)
- PR #498 (seo-rii — Canvas visual diff 파이프라인, relates #364)

미흡수 + 분리:
- 이슈 #502 (#495 잔존 — 문단 내 글상자 TextRun 처리)
- 이슈 #503 (#479 미흡수 — 한컴 2020 시각 판정 필수)

버전 갱신: Cargo.toml + npm/editor + rhwp-studio + rhwp-vscode 모두 0.7.8 → 0.7.9.
CHANGELOG (한/영) 갱신, rhwp-vscode/CHANGELOG.md 갱신.
README 기여자 감사 누적 갱신 (cskwork/DanMeon/oksure/planet6897/seanshin/seo-rii 추가).

검증: cargo build OK, cargo test --lib 1102 passed, cargo clippy 0건, WASM 빌드 정합.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request Apr 30, 2026
Release v0.7.9 — Task #501 cell.padding 한컴 방어 로직 + PR #428/#494/#478/#498 cherry-pick
edwardkim added a commit that referenced this pull request May 1, 2026
본 사이클:
- rhwp-chrome / Edge v0.2.2: 4 파일 버전 동기화 (manifest + package +
  dev-tools-inject + content-script — v0.2.0 hotfix 사례 정합)
- rhwp-firefox v0.2.2: 동일 영역, content-script.js 는 manifest 동적
  참조로 자동 정합

라이브러리 코어 v0.7.3 → v0.7.9 (4 사이클) 갱신 — Task #501 + PR
#428/#494/#478/#498 누적 + v0.7.6/v0.7.7/v0.7.8 사이클 흡수.

등록 문구:
- chrome-0.2.2_kor.md / chrome-0.2.2_eng.md (한/영) — Chrome/Edge
  공통 + AMO 등록 정보
- edge-0.2.2_reviewer_notes.md — Edge 파트너 센터 Notes for
  certification (1,918자, 2,000자 한계 내)
- chrome-0.2.1 한/영 등록 문구 백업

자기검열 grep (feedback_external_docs_self_censor 메모리 룰): 통과
AMO 4 함정 (feedback_amo_submission_gotchas 메모리 룰): 통과

빌드 환경: Node v22.18.0 (rolldown 호환).
빌드 결과:
- rhwp-chrome.zip 16 MB
- rhwp-firefox.zip 12.9 MB
- rhwp-source-0fb3e67.zip 47.9 MB (AMO 소스 제출)

3 스토어 제출 완료:
- Chrome Web Store (1~3 영업일 심사)
- Microsoft Edge Add-ons (1~2 영업일)
- Mozilla AMO (1~5 영업일)

.gitignore: rhwp-chrome/*.zip, rhwp-firefox/*.zip, rhwp-firefox/dist/
추가 (빌드 산출물 누적 차단)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 1, 2026
본 사이클 17번째 PR. HWP 3.0 (한컴 1990년대~2000년대 초반 레거시
포맷) 첫 오픈소스 파서 구현 + Square wrap 어울림 렌더링 정정.

본 PR 머지로 rhwp = HWP 5.0 + HWPX + HWP 3.0 3 포맷 모두 지원.

본질:
- Task #417: HWP 3.0 파서 본질 (Stage 1~4)
- Task #460: Square wrap + 렌더러 정정 (Stage 1~9 + 보완 1~3 + 리팩토링)
- 작성자 분기에서 본 사이클 devel (Task #501 + PR #478 + PR #498 +
  v0.7.9) 이미 흡수 → 충돌 해결 보존

옵션 B (단일 머지) 선택. 51 commits 의 작성자 단계 보고서 보존 +
본 사이클 회귀 영역 (issue_501 PASS) 통과.

검증: cargo test --lib 1105 passed (1102 + HWP 3.0 신규 3),
svg_snapshot 6/6, issue_418 1/1, issue_501 PASS, clippy 0건,
WASM 4,378,441 bytes (+176 KB Johab 매핑 + 파서).

작업지시자 통찰: "이제 우리도 HWP 3.0 포맷까지 성공했습니다.
컨트리뷰터가 대단합니다."

머지 commit: c7330cf

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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