Skip to content

Task #544: passage 글상자 좌표 정정 (closes #544)#560

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

Task #544: passage 글상자 좌표 정정 (closes #544)#560
planet6897 wants to merge 5 commits intoedwardkim:develfrom
planet6897:devel

Conversation

@planet6897
Copy link
Copy Markdown
Contributor

Summary

  • 21_언어_기출_편집가능본.hwp 의 9개 passage paragraph border 박스가 우측으로 +11.5 px 시프트 + width -22.6 px 좁음 결함 정정 (1/2/4/5/7/8/11/13/14 페이지)
  • paragraph_layout.rs 박스 좌표 산식 (box_x = col_area.x / box_w = col_area.width, margin 미적용) + inner_pad 분기 제거 (visible-stroke + bs=0 인 경우 margin_left = box_margin_left + inner_pad_left 이중 적용 → 단일 적용)
  • 컨트리뷰터 @planet6897 의 fork commit 05beb208 (Task 21_언어_기출 passage 박스 (paragraph border) 위치/크기 PDF 정합 (Task #540 후속) #544 v2 Stage 2) 핀셋 cherry-pick (457d5f33)

본질

영역 수정 전 수정 후 (PDF 한컴 2010 정합)
박스 outline col_area.x + box_margin_left / col_area.width - margin*2 col_area.x / col_area.width
본문 텍스트 inset box_margin_left + inner_pad_left (이중 적용) box_margin_left (단일 적용)

측정 (페이지 4 [7~9]):

  • 박스 left x: 128.51 → 117.17 (PDF 117.0)
  • 박스 width: 402.5 → 425.17 (PDF 425.1)
  • 본문 첫 글자 '평' x: 153.12 → 128.51 (PDF 128.5)

옵션 A2 채택 (B1 진단 후)

당초 검토 옵션 A3 (#552 + Task #544 v2 + v3) 대신 A2 (05beb208 단독) 채택.

이유: 본 devel 의 Task #479 미적용 (pre-#479 trailing-ls 항상 가산 모델) 확인 → #552/v3 cherry-pick 시 #479-style 분기 신설로 광범위 회귀 위험. 사용자 보고 결함 (글상자 우측 시프트) 은 (1) box_x/w 만으로 직접 fix 가능, (2) box top y 는 본 devel 모델에서 이미 정합 (233.97 ≈ PDF 233.8).

잔존 미반영:

Test plan

  • cargo test --lib: 1120 passed / 0 failed / 3 ignored — baseline +2 GREEN (test_544_passage_box_coords_match_pdf_p4 + test_547_passage_text_inset_match_pdf_p4)
  • cargo clippy --release --lib: 신규 결함 0건 (pre-existing 2건 동일 baseline)
  • 21_언어_기출 9 박스 PDF 정합 (col 0 117.17 / col 1 580.16, width 425.17, ±0.2 px)
  • 광범위 회귀 sweep (5 샘플 58 페이지): 38 differ — 의도된 paragraph border 정합 변경 + visible-stroke paragraph text -11.33 px 좌측 시프트 (21_언어_기출 passage 박스 안 텍스트 좌측 inset 정정 (Task #544 후속) #547 의도). 비-border paragraph text 0 변경
  • 작업지시자 시각 판정 통과
  • WASM 빌드 (Docker 환경, 별도)

처리 보고서

  • mydocs/pr/archives/pr_551_v3_544_a2_report.md
  • mydocs/pr/archives/pr_551_review_v3_544_a2.md

🤖 Generated with Claude Code

planet6897 and others added 4 commits May 4, 2026 09:57
… 산식 정정)

paragraph_layout.rs:
1. inner_pad 분기 제거 (line 693~717 → 693~700, -22 LOC)
   - has_visible_stroke / bs_left_px / bs_right_px / inner_pad_left/right 변수 모두 제거
   - margin_left = box_margin_left (단일 룰, 텍스트 inset 한 번만)
2. box_x/w 산식 정정 (line 2687~2691)
   - override 케이스: (ox, ow) — margin 미적용
   - 일반 케이스: (col_area.x, col_area.width) — margin 미적용
   - paragraph border outline = col_area 전체 (PDF 한컴 2010 정합)

integration_tests.rs:
- test_544_passage_box_coords_match_pdf_p4 의 #[ignore] 제거 → GREEN
- test_547_passage_text_inset_match_pdf_p4 의 #[ignore] 제거 → GREEN

검증:
- cargo test --lib: 1121 passed / 3 ignored (baseline 1119/5 → +2 GREEN, -2 ignored)
- 회귀 0건
- test_552_passage_box_top_gap_p2_4_6 (--ignored) GREEN 유지
  → Task edwardkim#552 가 Task edwardkim#544 (2) 효과 흡수 (Stage 1 finding 확정)

측정값:
- test_544: box_left_x 128.51 → 117.0 (PDF 117.0 ±2), box_width 425.1
- test_547: min_x 139.89 → 128.5 (PDF 128.5 ±2)

작업지시자 보고 증상 (글상자 우측 시프트) 직접 fix.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…y-pick @planet6897 1 commit)

옵션 A2 채택 — `05beb208` (Task edwardkim#544 v2 Stage 2) 단독 cherry-pick.
B1 진단 결과 본 devel 의 Task edwardkim#479 미적용 trailing-ls 모델 확인 →
당초 옵션 A3 (edwardkim#552 + v2 + v3) 의 모델 전환 위험 회피 → 최소 fix 채택.

- mydocs/pr/pr_551_review_v3_544_a2.md (검토 문서)
- mydocs/pr/pr_551_v3_544_a2_report.md (처리 보고서)
- mydocs/orders/20260504.md (오늘할일 신규)

closes edwardkim#544

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… (옵션 A2 — passage 글상자 우측 시프트 정정 — @planet6897 1 commit)

작업지시자 보고: "21_언어_기출_편집가능본.hwp 1/2/4/5/7/8/11/13/14 페이지
글상자가 오른쪽으로 밀려있음".

이슈 edwardkim#544 (closed) 재오픈 후 PR edwardkim#551 잔존 cherry-pick. 당초 옵션 A3
(edwardkim#552 + v2 + v3) 검토했으나 B1 진단 결과 본 devel 의 Task edwardkim#479 미적용
(pre-edwardkim#479 trailing-ls 항상 가산 모델) 확인 → edwardkim#552/v3 cherry-pick 시
모델 전환 위험. 옵션 A2 (`05beb208` 단독, edwardkim#547+edwardkim#544(1) 통합) 채택.

본질 정정 (paragraph_layout.rs):
1. box_x = col_area.x / box_w = col_area.width (margin 미적용,
   paragraph border outline = col_area 전체).
2. inner_pad 분기 제거 (visible-stroke + bs=0 인 경우 margin_left =
   box_margin_left + inner_pad_left 이중 적용 → 단일 적용).

측정 (페이지 4 [7~9]):
- 박스 left x: 128.51 → 117.17 (PDF 117.0)
- 박스 width: 402.5 → 425.17 (PDF 425.1)
- 본문 첫 글자 '평' x: 153.12 → 128.51 (PDF 128.5)
- 9 박스 (col 0/1) 모두 정합

검증:
- cargo test --lib 1120 / test_544+test_547 +2 GREEN / 회귀 0건
- clippy 0 신규 (pre-existing 2건 동일 baseline)
- 5 샘플 58 페이지 광범위 sweep: 38 differ (의도된 paragraph border
  정합 변경, visible-stroke paragraph text -11.33 px 좌측 시프트 의도)
- 회귀 검출 가능 영역 (비-border paragraph text) 0 변경
- 작업지시자 시각 판정 통과

cherry-pick 1 commit:
- 457d5f3 Task edwardkim#544 v2 Stage 2 (`05beb208` from @planet6897)

처리 보고서: mydocs/pr/pr_551_v3_544_a2_report.md
검토 문서: mydocs/pr/pr_551_review_v3_544_a2.md

closes edwardkim#544

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- mydocs/pr/pr_551_review_v3_544_a2.md → archives/
- mydocs/pr/pr_551_v3_544_a2_report.md → archives/
- mydocs/orders/20260504.md: 처리 상태 갱신 (devel merge f6039f3 push + 이슈 edwardkim#544 close)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
planet6897 added a commit to planet6897/rhwp that referenced this pull request May 4, 2026
…indent

cherry-pick @planet6897 `9dc40ddb` (Task edwardkim#544 v2 Stage 3 — Phase C edwardkim#548).
원 commit 의 Phase C 만 본 사이클에서 cherry-pick (Task edwardkim#544 본질은
이미 별도 사이클에서 처리됨, PR edwardkim#560).

table_layout.rs (+41 LOC):
1. effective_margin_left_line 헬퍼 추가 (paragraph_layout 의 line_indent
   산식과 동일):
   - positive indent: line 0 에 +indent
   - negative (hanging): line N≥1 에 +|indent|
2. inline_x 산출 3 분기 (Left/Justify) 에 line_margin 가산:
   - paragraph 시작 (line 0)
   - Picture target_line reset (Task edwardkim#500 정합)
   - Shape target_line reset (Task edwardkim#500 + edwardkim#520 정합)
3. para_margin_left_px / para_indent_px 추출 (ParaShape 에서)

integration_tests.rs:
- test_548_cell_inline_shape_first_line_indent_p8 의 #[ignore] 제거 → GREEN

conflict resolution:
- src/renderer/layout/table_layout.rs Shape 분기 (line 1648-1693): incoming
  채택 (HEAD 빈 영역 + incoming block 삽입, surrounding context 불일치로
  auto-merge 실패, 의미는 단순 삽입)
- src/renderer/layout/integration_tests.rs: auto-merge

closes edwardkim#548

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…이 종결)

Stage 1 분석 결과 시프트 양 ~1.0-1.5px (75-110HU @ 96dpi). ㉠/㉡ 만의
결함이 아닌 표 전 셀 동일 시프트 — 폰트 fallback (한컴윤고딕 ↔
HY신명조→Batang) 어센트 차이로 설명 가능. ㉠/㉡ 의 원형 글리프 특성상
시각적 도드라짐 강한 케이스로 결론.

가설 검증: baseline 산식 (bl=978HU) 확정 — paragraph_layout.rs:835.
CharShape char_offsets/valign/padding/scale 분기 모두 기각.

옵션 B (산식 정정) 미채택 사유: 광범위 표 셀 회귀 리스크 vs 시각
개선 미미. 후속 필요 시 별도 타스크.

closes edwardkim#566
edwardkim added a commit that referenced this pull request May 4, 2026
…v2 + Task #555)

cherry-pick (작업지시자 옵션 A — 7 commits 모두):
- a30dca7 (457d5f3): Task #544 v2 Stage 2 paragraph border 좌표/inset
- f30b352 (b146b83): PR #551 Task #544 핀셋 처리 보고서 + 검토 문서
- (skip) (f6039f3): merge commit — 이미 적용된 영역
- f45f6a0 (f807378): PR #551 Task #544 처리 후속 archives 이동
- af556a5 (096b573): Task #555 수행/구현 + Stage 1 진단
- f44a721 (beade38): Task #555 Stage 2-4 옛한글 PUA 폰트 매트릭스 정정 (옵션 A)
- 4af03b7 (eac36f2): Task #555 최종 보고서

검증:
- cargo test --lib 1123 passed (Task #555 단위 테스트 +3 GREEN)
- cargo test --test issue_546/530/505/418/501 회귀 0
- cargo test --test svg_snapshot 6/6 passed
- cargo clippy --lib 0 건
- WASM 4,585,998 bytes (+42,568 from Task #528, Task #544 v2 + #555 반영) + studio 동기화

작업지시자 시각 판정 (web Canvas):
- "웹 에디터에서 옛한글 매트릭스 개선이 시각적으로 확인되었습니다.
   아직 미진한 점이 있지만 분할 정복 전략에 맞는 접근법입니다."

본 PR 의 본질:
- Task #555 (closes #555): 옛한글 PUA → 자모 변환 후 폰트 매트릭스 갱신
  · effective_text_for_metrics 헬퍼 + 호출처 10건 패치
  · 13 fixture 481 페이지 481/481 byte-identical (PR 본문)
  · Conservative fix (현재 visual 영향 없음, 잠재적 결함 차단)
- Task #544 v2: paragraph border 좌표/inset 산식 (PR #560 사이클 영역, 본 환경 처음 적용)

컨트리뷰터 메모리 룰 적용 정합:
- feedback_no_pr_accumulation, feedback_per_task_pr_branch
- feedback_essential_fix_regression_risk, feedback_rule_not_heuristic

산출물:
- mydocs/pr/pr_562_report.md (처리 결과)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 4, 2026
…PUA 폰트 매트릭스 — @planet6897 6 commits) — closes #555

본 PR 은 외부 컨트리뷰터 @planet6897 (Jaeuk Ryu) 의 PR. Task #528 후속 결함
(이슈 #555: 옛한글 PUA → 자모 변환 후 폰트 매트릭스 갱신) 정정.

작업지시자 결정으로 옵션 A (7 commits 모두 cherry-pick) 진행 — Task #555 의
본질 외에 PR #551 Task #544 v2 처리 영역 (PR #560 사이클 영역) 도 함께 본
환경에 적용.

cherry-pick (6 commits + merge commit 1건 skip):
- Task #544 v2 Stage 2: paragraph border 좌표/inset 산식 정정
  · paragraph_layout.rs box_x/w 산식 + inner_pad 분기 제거
- PR #551 Task #544 핀셋 처리 보고서 + 검토 + archives
- Task #555: 옛한글 PUA → 자모 변환 후 폰트 매트릭스 갱신 (3 commits)
  · effective_text_for_metrics 헬퍼 (composer.rs)
  · 호출처 10건 패치 (composer / layout / table_layout)
  · Task #555 단위 테스트 +3 GREEN

본질 (Task #555):
- Task #528 의 Option A (렌더러 시점 변환) 의 인덱싱 불변성 trade-off 로
  run.text 가 PUA char 1글자 보존 → 폰트 매트릭스가 자모 시퀀스와 정합 안 됨
- effective_text_for_metrics(run) = run.display_text.as_deref().unwrap_or(&run.text)
  fallback 패턴 + 호출처 10건 패치
- Conservative fix: 13 fixture 481 페이지 481/481 byte-identical (PR 본문)

검증:
- cargo test --lib 1123 passed (Task #555 단위 테스트 +3 GREEN)
- cargo test --test issue_546/530/505/418/501 회귀 0
- cargo test --test svg_snapshot 6/6 passed
- cargo clippy --lib 0 건
- WASM 4,585,998 bytes + rhwp-studio 동기화

시각 판정 (작업지시자):
- "웹 에디터에서 옛한글 매트릭스 개선이 시각적으로 확인되었습니다.
   아직 미진한 점이 있지만 분할 정복 전략에 맞는 접근법입니다."

미진한 영역은 향후 별도 task 로 분할 정복 정합.

컨트리뷰터의 메모리 룰 적용 정합:
- feedback_no_pr_accumulation: 새 PR 로 등록 (PR #551 잔존 누적 회피)
- feedback_per_task_pr_branch: 별도 fork branch (pr-task555)
- feedback_essential_fix_regression_risk: 481 페이지 광범위 sweep
- feedback_rule_not_heuristic: 단일 fallback 패턴
@edwardkim
Copy link
Copy Markdown
Owner

@planet6897 님, 본 PR 의 본질 (Task #544 v2 Stage 2 — paragraph border 좌표/inset 산식 정정, `457d5f33`) 은 PR #562 의 옵션 A 처리 시 본 환경에 이미 cherry-pick 으로 반영되었습니다 (devel `a30dca7` 시점에 적용 완료).

본 환경 적용 시점

본 PR close 처리

본 PR 의 본질이 PR #562 사이클에서 흡수 처리되었으므로 본 PR 도 close 합니다. 동일 영역의 중복 PR 회피.

사이클 내 잔존 task 처리 권장

PR #560 / PR #562 가 PR #551 잔존 task 의 분리 cherry-pick 사이클 (Task #525 / Task #528 / Task #544 / Task #555) 의 일부였습니다. 동일 영역의 다른 task 들은 별도 PR (이미 등록되어 있는 경우 그대로 유지) 로 진행 부탁드립니다.

처리 보고서 (PR #562 사이클): `mydocs/pr/archives/pr_562_report.md`

@edwardkim edwardkim closed this May 4, 2026
edwardkim added a commit that referenced this pull request May 5, 2026
PR #561 (Task #548, @planet6897 / commit author Jaeook Ryu) 1차 검토:
- stacked PR (PR #560 위) — PR #560 은 이미 close + devel 적용 완료
- PR mergeable=CONFLICTING (PR base 시점 차이) 이지만
  본질 commit (3de0505 + a0dad0d) cherry-pick 충돌 0
- test_548 이 본 환경 devel 에 RED+#[ignore] 로 이미 존재
  (PR #560 cherry-pick 시 들어옴) — fix 적용 시 GREEN 전환 확인
- 단일 룰 (effective_margin_left_line) 정합 +
  Task #500/#520 정합 명시 + 페이지 8 셀 5 line 0 [푸코] rect 정정

권장 처리: 옵션 A — 핀셋 cherry-pick (3de0505 + a0dad0d) +
결정적 검증 + 작업지시자 시각 판정 (★ 게이트).
edwardkim pushed a commit that referenced this pull request May 5, 2026
cherry-pick @planet6897 `9dc40ddb` (Task #544 v2 Stage 3 — Phase C #548).
원 commit 의 Phase C 만 본 사이클에서 cherry-pick (Task #544 본질은
이미 별도 사이클에서 처리됨, PR #560).

table_layout.rs (+41 LOC):
1. effective_margin_left_line 헬퍼 추가 (paragraph_layout 의 line_indent
   산식과 동일):
   - positive indent: line 0 에 +indent
   - negative (hanging): line N≥1 에 +|indent|
2. inline_x 산출 3 분기 (Left/Justify) 에 line_margin 가산:
   - paragraph 시작 (line 0)
   - Picture target_line reset (Task #500 정합)
   - Shape target_line reset (Task #500 + #520 정합)
3. para_margin_left_px / para_indent_px 추출 (ParaShape 에서)

integration_tests.rs:
- test_548_cell_inline_shape_first_line_indent_p8 의 #[ignore] 제거 → GREEN

conflict resolution:
- src/renderer/layout/table_layout.rs Shape 분기 (line 1648-1693): incoming
  채택 (HEAD 빈 영역 + incoming block 삽입, surrounding context 불일치로
  auto-merge 실패, 의미는 단순 삽입)
- src/renderer/layout/integration_tests.rs: auto-merge

closes #548

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 5, 2026
…margin + indent — @planet6897 / Jaeook Ryu 2 commits + 시각 판정 ★ 통과)

PR #561 (Task #548, @planet6897 PR / Jaeook Ryu commit author):
- stacked PR (PR #560 위) — PR #560 이미 close + devel 적용 완료
- 본질 commits 2건 핀셋 cherry-pick (3de0505 + a0dad0d) 충돌 0
- test_548 RED → GREEN 전환 확인 (본 devel 에 RED+#[ignore] 로 이미 존재)

본질:
- effective_margin_left_line 헬퍼 (paragraph_layout 산식과 동일 단일 룰)
- 페이지 8 셀 5 line 0 [푸코] inline rect: x=131.04 → 155.60 (PDF 155.6)
- 3 분기 (paragraph 시작 / Picture target_line reset / Shape target_line reset)

검증:
- cargo test --lib --release 1130 passed (test_548 GREEN)
- cargo clippy 0건
- WASM 4,570,220 bytes (PR #589 baseline +447 bytes — table_layout.rs +79 LOC 정합)
- 광범위 회귀 sweep (3 샘플 39 페이지) 10 differ — 권위 영역 정합
- 시각 판정 ★ 통과 (한국어/영어 시험지 가독성 개선)

closes #548.
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