fix: Task #279 — 목차 리더 도트 렌더링 + 소제목 페이지번호 탭 정렬#282
Conversation
|
@seanshin 님, PR #282 검토 요청 감사합니다. 현재 이 PR은 확인된 이슈1. Merge Conflict
2. #279와 무관한 파일이 포함됨PR diff에서 아래 파일들이 #279 작업 범위를 벗어납니다:
요청 사항
권장 절차: # 1. 최신 devel fetch
git fetch upstream devel # (또는 origin devel)
# 2. 새 브랜치를 devel 기준으로 생성
git checkout -b feature/task279-toc-leader-tab-v2 upstream/devel
# 3. #279 핵심 커밋만 cherry-pick (리더 도트 + 탭 정렬)
git cherry-pick d48af5c # fix: Task #279 Stage 2+3
git cherry-pick 76436df # docs: Task #279 Stage 3+4 보고서
git cherry-pick 5d1c80f # docs: Task #279 수행계획서
# 4. 강제 push 후 PR 갱신 (혹은 새 PR 생성)
git push --force-with-lease origin feature/task279-toc-leader-tab#279의 최종 변경 범위 (이것만 있으면 됩니다)
참고
정리 후 다시 알려주시면 우선순위로 검토하겠습니다. 감사합니다! |
|
@seanshin 님, close 처리는 정정합니다 — 본 PR 을 다시 열고 메인테이너가 직접 정리해서 마무리하겠습니다. PR 자체를 close 하면 기여 인정이 어려워지고, 대신 새 PR 을 여는 것보다 본 PR 을 정리해서 머지하는 쪽이 깔끔합니다. 진행 계획
기여 인정3 커밋의 author 정보 (seanshin) 를 보존합니다. 머지 후에도 commit log 에 본인 이름으로 남게 됩니다. 분석 자체 (리더 도트 dasharray + right tab 클램핑 제외) 가 정확하셨던 부분을 그대로 살립니다. 마무리 후 알려드리겠습니다. 기여 감사합니다. |
이슈: edwardkim#279 브랜치: local/task279 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- svg.rs, web_canvas.rs: fill_type=3(점선) 리더를 round cap 원형 점으로 변경 stroke-dasharray="0.1 3" stroke-linecap="round" stroke-width="1.0" - text_measurement.rs: find_next_tab_stop — type=1(오른쪽) 탭은 available_width 클램핑 제외. 들여쓰기 문단에서 오른쪽 탭 위치가 column-relative 절대 위치로 올바르게 유지됨. (이전: 소제목 페이지번호 ~9px 좌편; 수정 후: 717.5±0.5px 동일 정렬) closes edwardkim#279 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 작성자 @seanshin 의 본 task 분석을 바탕으로 메인테이너가 인수. - 수행계획서: 인수 경위 + 7가지 기여 인정 항목 (cherry-pick author 보존, Co-Authored-By 체인, CHANGELOG, 위키 등재, HWP Spec Errata, PR/이슈 코멘트, 최종 보고서 명시) 명문화. - 구현계획서 신규 작성: 4단계 (cherry-pick / 빌드 검증 / 좌표 측정 + 회귀 / 최종 보고서·인정 산출물 + force-push + admin merge), 커밋 스킴, 리스크 대응 명세. 원본 분석·구현: @seanshin (PR edwardkim#282) Co-Authored-By: hyoun mouk shin <hyounmoukshin@hyounui-MacBookPro.local> Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- @seanshin 의 5d1c80f / d48af5c / 76436df cherry-pick 완료, author 보존 - 메인테이너 강화 수행계획서 + 구현계획서 별도 커밋 추가 - 코드 변경 3 파일 적용 확인 (svg.rs / web_canvas.rs / text_measurement.rs) Co-Authored-By: hyoun mouk shin <hyounmoukshin@hyounui-MacBookPro.local> Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- 빌드/lib 992/clippy/wasm32: 모두 통과 - svg_snapshot: 의도된 2건 (KTX 목차, aift 3페이지 leader) UPDATE_GOLDEN 갱신 - KTX 목차 소제목 페이지번호: 709.76 → 727.47 (장제목과 동일 우측 edge) - aift 표 안 leader: dasharray 통일 (좌표 동일) Co-Authored-By: hyoun mouk shin <hyounmoukshin@hyounui-MacBookPro.local> Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
작성자 @seanshin 의 핵심 분석 (리더 도트 dasharray + tab_type != 1 클램핑 가드) 위에 메인테이너가 6가지 추가 결함 식별 및 보강: 1. trailing 공백 \t 케이스 가드 정밀화 (`\t ` → cross-run 진입 활성화) 2. resolve_last_tab_pending 시그니처에 fill_type 추가 3. leader-RIGHT 탭 시멘틱 (셀 inner 우측 끝 강제) — 셀 padding 침범 해소 4. 페이지번호 폭별 leader 길이 차등화 (cross-run take 시 leader.end_x 단축, leader-bearing TextRun 검색) 5. 공백 only run carry-over (정렬 단위 아님) 6. trim_start 제거 (선행 공백 시각 보정) 검증: - KTX 목차 모든 페이지번호 right edge ≈ 700.0 으로 정렬 통일 - 992 lib + 6/6 svg_snapshot + 1 issue_301 + clippy + wasm32 통과 - 7 핵심 샘플 페이지 수 무변화 - 작업지시자 WASM 시각 검증 통과 산출물: - mydocs/working/task_m100_279_stage3.md (보강된 stage3 보고서) - mydocs/troubleshootings/toc_leader_right_tab_alignment.md - tests/golden_svg/issue-267/ktx-toc-page.svg (UPDATE_GOLDEN) Co-Authored-By: hyoun mouk shin <hyounmoukshin@hyounui-MacBookPro.local> Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- mydocs/report/task_m100_279_report.md (최종 보고서, 머리말에 @seanshin 원본 분석·구현 + PR edwardkim#282 명시) - CHANGELOG.md Unreleased 섹션 — "분석·구현 by [@seanshin]" 항목 - mydocs/tech/hwp_spec_errata.md entry 30 추가 — TabDef.position 의 시멘틱 재해석 + 발견·구현 본인 명기 - mydocs/orders/20260425.md Task edwardkim#279 섹션 추가 핵심 교훈: HWP 스펙은 데이터 포맷 정의일 뿐이고 한컴 조판 알고리즘은 비공개. 스펙 충실 구현 ≠ 한컴 호환. rhwp 는 "한컴 조판 결과를 재현하는 엔진" 이어야 한다 (errata entry 30 + report § 학습 1). closes edwardkim#279 Co-Authored-By: hyoun mouk shin <hyounmoukshin@hyounui-MacBookPro.local> Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
76436df to
046a35f
Compare
|
@seanshin 님 — PR 정리 + 메인테이너 보강이 완료되었습니다. CI 통과 후 admin merge 진행하겠습니다. 본 PR 의 최종 변경 (8 commits)
메인테이너 추가 보강 (6가지 추가 결함)본인 핵심 분석 (리더 도트 dasharray + RIGHT 탭 클램핑 제외) 위에 시각 검증 사이클로 6가지 추가 결함 식별·보강:
KTX 목차 모든 페이지번호 right edge ≈ 700.0 으로 정렬 통일 (한컴 결과와 동등). 기여 인정 산출물 (7가지)
핵심 교훈 (errata 30 + 보고서 § 학습)
본인의 분석이 이 원칙의 정확한 적용 ( CI 통과 직후 admin merge 진행하겠습니다. |
edwardkim
left a comment
There was a problem hiding this comment.
Stage 4 마무리 완료. 모든 검증 통과 (992 lib + 6/6 svg_snapshot + clippy + wasm32 + 7 샘플 무변화 + 작업지시자 시각 확인). admin merge 진행합니다.
- @seanshin 의 PR 인수 후 메인테이너 마무리 + admin merge (commit edcf361) - 이전 close-only 보고서를 인수·머지 결과 보고서로 정정 + archive 본 처리는 인수의 모범 사례: - 작성자 fork force-push 활용 (maintainerCanModify=true) - author 정보 보존 (cherry-pick + Co-Authored-By 체인) - 7가지 기여 인정 산출물 (CHANGELOG/Errata/Wiki/트러블슈팅/보고서/PR/Issue 코멘트) Co-Authored-By: hyoun mouk shin <hyounmoukshin@hyounui-MacBookPro.local> Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ADME 업데이트 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
라이브러리 버전 동기화 (Cargo.toml / rhwp-vscode / npm/editor / rhwp-studio): 0.7.3 → 0.7.6 브라우저 확장 (rhwp-firefox): 0.2.1 → 0.2.2 (AMO 재제출용) - manifest strict_min_version 142 + viewer 번들 보안 sanitize 반영 본 사이클 외부 기여 PR: - #268/#334 (@oksure): replaceOne API - #279/#282 (@seanshin): 목차 리더 + 페이지번호 정렬 - #324/#327 (@planet6897): form-002 인너 표 페이지 분할 - #335 (@oksure): SVG/HTML draw_image base64 임베딩 - #338/#339 (@postmelee): Firefox AMO 워닝 해결 - #340/#341 (@planet6897): typeset 경로 정합 - #342/#343 (@planet6897): Task #321~#332 통합 + 회귀 해소 rhwp-firefox/README.md 에 v0.2.2 변경 이력 + 기여자 감사 섹션 추가 (@postmelee, @seanshin 인정). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- 최근 변경: v0.7.3 → v0.7.6 (2026-04-26) 교체 - PR edwardkim#266 (Task edwardkim#157), edwardkim#273 (Task edwardkim#267), edwardkim#282 (Task edwardkim#279) by @seanshin - PR edwardkim#256, edwardkim#327, edwardkim#341, edwardkim#343 by @planet6897 - PR edwardkim#334, edwardkim#335 by @oksure, PR edwardkim#339 by @postmelee - devel 섹션: 머지된 항목 제거, 현재 분석 중(edwardkim#362/edwardkim#345) + 계획 중(edwardkim#150/edwardkim#253) 반영 - 테스트 수: 891+ → 1000+ - README_EN.md 동일 내용 영문 반영
Summary
svg.rs,web_canvas.rs):fill_type=3(점선) 리더가 사각 대시선으로 렌더되던 버그 수정.stroke-dasharray="0.1 3" stroke-linecap="round"로 한컴과 동등한 원형 점(···) 표현.text_measurement.rs):find_next_tab_stop에서 type=1(오른쪽) 탭을available_width로 클램핑하지 않도록 수정. 들여쓰기(left_margin)가 있는 소제목 문단에서 right tab이 column 기준 절대 위치로 올바르게 유지됨.Root Cause (탭 정렬)
effective_margin_left에left_margin이 포함되어, 들여쓰기 문단(소제목)에서available_width가 작아짐 → 오른쪽 탭 위치가 잘못 클램핑됨.Fix:
ts.tab_type != 1조건 추가 — left/center 탭(0/2)만 클램핑, right 탭(1)은 제외.Before / After (KTX.hwp 목차)
Test
cargo test: 793 passed, 0 failedCloses #279