feat: HWPX (한글/Hancom) document handler#54
feat: HWPX (한글/Hancom) document handler#54lidge-jun wants to merge 54 commits intoiOfficeAI:mainfrom
Conversation
|
Hi @lidge-jun, thanks for the incredible effort here — a full HWPX handler with 180 tests is no small feat, and we appreciate your interest in expanding OfficeCLI's format coverage. After reviewing the PR, we've decided not to merge this into Plugin-based approach for HWPX Contribution guidelines Next steps Thanks again for the work — looking forward to collaborating! 안녕하세요 @lidge-jun 님, 먼저 이렇게 큰 작업을 해주셔서 정말 감사합니다. 180개의 테스트를 포함한 HWPX 핸들러 전체 구현은 결코 쉬운 작업이 아닌데, OfficeCLI의 포맷 확장에 관심을 가져주셔서 감사드립니다. 검토 결과, 현 시점에서는 HWPX는 플러그인 방식으로 지원 예정 외부 기여 가이드라인 관련 앞으로의 방향 다시 한번 수고해 주신 점 감사드립니다. 앞으로의 협업을 기대하겠습니다! |
…t tests - CjkScript enum, detection, font chains for Korean/Japanese/Chinese - WordML + DrawingML helpers for DOCX/PPTX CJK font metadata - Mixed-text segmentation (English+CJK in same paragraph) - Kinsoku (line-breaking) rules - Integration into 7 handler files at 11+ points - 41 xUnit tests covering all public methods Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Extract 5 helper methods from inline patterns: - WrapInRun(): wraps content in hp:run element - CreateSubList(): creates standard hp:subList with paragraph - CloneParaPrIfShared(): clone-on-write for shared paraPr - NextBorderFillId(): max-ID-based (fixes count-based ID bug) - MakeBorder(): static border element factory Refactored call sites: BuildCell, CreateFootnote, AddHeaderFooter, SetParagraphAlignment, SetParagraphIndent, EnsureTableBorderFill. Also fixes subList id="" bug in CreateFootnote (now uses NewId()). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ty (Plans 40-41) Header/Footer: secPr-inline pattern → ctrl pattern (golden template verified). - hp:ctrl > hp:header/footer > hp:subList structure - subList id="" (empty), textWidth/textHeight from pagePr margins - linesegarray required for rendering - vertAlign: header=TOP, footer=BOTTOM Hyperlink: add parameters, charPr registration, proper encoding. - 6 parameters (Command, Path, Category, TargetType, DocOpenType, Prop) - URL/Email/File auto-classification with correct Category values - EnsureHyperlinkCharPr() registers blue underline charPr in header.xml - EscapeHyperlinkCommand() handles colon/semicolon escaping - dirty=1, zorder=-1, fieldid attributes added Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…nd document helpers
…e/view improvements
…ce changes Add InsertPosition? parameter support for Add/Move/CopyFrom and implement TryExtractBinary stub to match upstream interface updates.
…nd skill docs updates
…ection to hwpx skill Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…to-sync When skills/ directory changes on main/agent branch, sends repository_dispatch to lidge-jun/cli-jaw-skills to trigger skill sync. Requires SKILLS_SYNC_TOKEN secret (GitHub PAT with repo scope). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Summary
Hi! I'm a Korean developer building cli-jaw, a CLI orchestrator that relies heavily on OfficeCLI. First of all, thank you for this incredible tool — it's been invaluable for our document automation workflows.
Korean users frequently work with
.hwpxfiles (Hancom/한글 Office format, the de facto standard for government and business documents in Korea). This PR adds comprehensive HWPX support to OfficeCLI.This doesn't need to be merged into
mainright away. If you'd prefer, please feel free to merge it into afeat/hwpxbranch so we can iterate together before it's production-ready.What's included
--from-markdownoption forcreatecommandNotes
main(b5cd116)TryExtractBinaryis stubbed out (binary extraction not yet implemented)Happy to address any feedback. Would love to collaborate on making this production-ready!
Test plan
dotnet build— 0 errorsdotnet test— 180 passed, 0 failed