Skip to content

feat(legacy): doc/xls/ppt 심층 충실도 — 서식/표/정렬/색 (0.21.0) - #4

Merged
CocoRoF merged 1 commit into
mainfrom
feat/legacy-deep-fidelity
Aug 31, 2026
Merged

feat(legacy): doc/xls/ppt 심층 충실도 — 서식/표/정렬/색 (0.21.0)#4
CocoRoF merged 1 commit into
mainfrom
feat/legacy-deep-fidelity

Conversation

@CocoRoF

@CocoRoF CocoRoF commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

hwp(#3, 0.20.0)와 같은 수준으로 나머지 레거시 3종 고도화. 레퍼런스: Apache POI HWPF/HSLF sparse clone + xlrd (reference_data).

  • doc: CHPX/PAPX FKP bin table + sprm 해석 — 런 스타일(굵게/기울임/취소선/밑줄/크기/색/글꼴 SttbfFfn), 문단 정렬, 표 복원(fInTable/fTtp + 0x07 셀 마크 → docx 표), 필드 제거 CP-매핑 보존
  • xls: FONT 색/밑줄/취소선, XF 정렬/줄바꿈/solid 채우기, PALETTE 재정의 + BIFF8 기본 팔레트
  • ppt: StyleTextPropAtom 문단/문자 런 — 정렬·들여쓰기 레벨·bold/italic/underline/strike/size/color

심화 픽스처 10건 추가, 916 passed, PNG 래스터 스모크 3종.

🤖 Generated with Claude Code

hwp(0.20.0)와 같은 수준으로 나머지 레거시 3종을 고도화한다. 바이트
레이아웃은 reference_data 의 Apache POI(HWPF/HSLF sparse clone)와
xlrd 를 대조해 확정했다.

doc (Word97) — 텍스트-만에서 서식·표 재조립으로 재설계:
- CHPX/PAPX **FKP bin table** 해석 (PlcfBteChpx/Papx @fib 0x00FA/0x0102,
  FKP 페이지 rgfc/rgb/BX, PAPX istd 스킵 규칙)
- sprm 해석기 (spra 크기 규칙 + 0xD608/0xC615 2B 길이 예외): 굵게/기울임/
  취소선(토글 1·0x81)/밑줄(kul)/크기(hps)/색(ico 팔레트·cv RGB)/글꼴
  (ftcAscii·ftcFE → SttbfFfn FFN 이름, eastAsia 슬롯 포함)
- **표**: fInTable(0x16)/fTtp(0x17) 문단 속성 + 0x07 셀 마크로 행/셀
  격자를 복원해 docx 표로 (기존: 탭으로 뭉갬)
- 문단 정렬 sprmPJc(0x03/0x61), 필드 제거를 CP 매핑 보존 방식으로 전환
  (서식 오프셋이 어긋나지 않게)

xls (BIFF8) — FONT/XF/PALETTE 확장 (xlrd formatting.py 대조):
- FONT: 색(icv)/밑줄(uls)/취소선(grbit 0x08)
- XF: 수평·수직 정렬/줄바꿈(alc @6), solid 채우기(패턴 bits26-31 +
  전경색 icv @18)
- PALETTE(0x92) 재정의 + BIFF8 기본 팔레트(icv 0-7 EGA + 8-63)

ppt (PPT97) — StyleTextPropAtom(4001) 해석 ([MS-PPT] 2.9.20/44):
- 문단 런(정렬 0x800·들여쓰기 레벨)/문자 런(charFlags bold·italic·
  underline·strike, font.size, font.color — 스킴색 제외, 마스크 유효
  비트 의미론) → pptx 런 스타일 (strike 는 rPr@strike 직접)
- tabstops 가변 크기 등 props 순서/크기 표 전체 반영

테스트: 3종 심화 픽스처(FKP 페이지/BIFF 레코드/StyleTextPropAtom 을
스펙 그대로 손조립) 10건 추가 — 916 passed. PNG 래스터 스모크 3종 통과.
@CocoRoF
CocoRoF merged commit 635b84c into main Aug 31, 2026
2 checks passed
@CocoRoF
CocoRoF deleted the feat/legacy-deep-fidelity branch August 31, 2026 07:05
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.

1 participant