[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74660":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":24,"topics":25,"createdAt":9,"pushedAt":9,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":15,"starSnapshotCount":15,"syncStatus":29,"lastSyncTime":30,"discoverSource":31},74660,"rhwp","edwardkim\u002Frhwp","edwardkim","아래한글 hwp viewer and editor by rust and wasm",null,"Rust",3310,577,15,25,0,34,81,299,102,30.29,"MIT License",false,"main",true,[],"2026-06-12 02:03:26","\u003Cp align=\"center\">\n  \u003Cimg src=\"assets\u002Flogo\u002Flogo-256.png\" alt=\"rhwp logo\" width=\"128\" \u002F>\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">rhwp\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>알(R), 모두의 한글\u003C\u002Fstrong> — 알에서 시작하다\u003Cbr\u002F>\n  \u003Cem>All HWP, Open for Everyone\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Factions\u002Fworkflows\u002Fci.yml\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg\" alt=\"CI\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fedwardkim.github.io\u002Frhwp\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDemo-GitHub%20Pages-blue\" alt=\"Demo\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@rhwp\u002Fcore\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@rhwp\u002Fcore?label=npm\" alt=\"npm\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=edwardkim.rhwp-vscode\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FVS%20Code-Marketplace-007ACC\" alt=\"VS Code\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg\" alt=\"License: MIT\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.rust-lang.org\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FRust-1.75%2B-orange.svg\" alt=\"Rust\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwebassembly.org\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FWebAssembly-Ready-blue.svg\" alt=\"WASM\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Foosmetrics.com\u002Frepo\u002Fedwardkim\u002Frhwp\">\u003Cimg src=\"https:\u002F\u002Fapi.oosmetrics.com\u002Fapi\u002Fv1\u002Fbadge\u002Fachievement\u002F921c34bc-4dd3-4409-ba2e-2d99c8b4a9b6.svg\" alt=\"Top 2 in WebAssembly by originality - 2026-04-21\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Foosmetrics.com\u002Frepo\u002Fedwardkim\u002Frhwp\">\u003Cimg src=\"https:\u002F\u002Fapi.oosmetrics.com\u002Fapi\u002Fv1\u002Fbadge\u002Fachievement\u002Ffd1e3217-b99a-4ec2-8cba-98429f3d91c7.svg\" alt=\"Top 2 in Editors by originality - 2026-04-21\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>한국어\u003C\u002Fstrong> | \u003Ca href=\"README_EN.md\">English\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\nHWP 파일을 **어디서든** 열어보세요. 무료, 설치 없이.\n\nrhwp는 Rust + WebAssembly 기반의 오픈소스 HWP\u002FHWPX 뷰어\u002F에디터입니다. 닫힌 포맷의 벽을 깨고, 모든 사람, 모든 AI, 모든 플랫폼에서 한글 문서를 자유롭게 읽고 쓸 수 있게 합니다.\n\n> **[온라인 데모](https:\u002F\u002Fedwardkim.github.io\u002Frhwp\u002F)** | **[VS Code 확장](https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=edwardkim.rhwp-vscode)** | **[Open VSX](https:\u002F\u002Fopen-vsx.org\u002Fextension\u002Fedwardkim\u002Frhwp-vscode)**\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"assets\u002Fscreenshots\u002Frender-example-1.png\" alt=\"rhwp 렌더링 예시 — KTX 노선도\" width=\"700\" \u002F>\n\u003C\u002Fp>\n\n## 로드맵\n\n혼자 뼈대를 세우고, 함께 살을 붙이고, 모두의 것으로 완성한다.\n\n```\n0.5 ──── 1.0 ──── 2.0 ──── 3.0\n뼈대      조판      협업      완성\n```\n\n| 단계 | 방향 | 전략 |\n|------|------|------|\n| **0.5 → 1.0** | 읽기\u002F쓰기 기반 위에 조판 엔진 체계화 | 핵심 아키텍처를 혼자 견고하게 |\n| **1.0 → 2.0** | AI 조판 파이프라인 위에 커뮤니티 참여 개방 | 기여 진입 장벽을 낮추는 구조 |\n| **2.0 → 3.0** | 커뮤니티가 채운 기능 위에 공공 자산화 | 한컴 대등 수준 달성 |\n\n> 0.5.0까지 혼자 뼈대를 완성하고 공개하는 이유 — 커뮤니티가 붙었을 때 방향이 흔들리지 않으려면 핵심 아키텍처가 먼저 견고해야 합니다.\n\n## 이정표\n\n### v0.5.0 ~ v0.7.x — 뼈대 (현재)\n\n> 역공학 완성, 읽기\u002F쓰기 기반 구축\n\n- HWP 5.0 \u002F HWPX 파서, 문단·표·수식·이미지·차트 렌더링\n- 페이지네이션 (다단 분할, 표 행 분할), 머리말\u002F꼬리말\u002F바탕쪽\u002F각주\n- SVG 내보내기 (CLI) + Canvas 렌더링 (WASM\u002FWeb)\n- 웹 에디터 + hwpctl 호환 API (30 Actions, Field API)\n- 1,100+ 테스트\n\n#### v0.7.9 사이클 (2026-05-01 ~ 2026-05-02)\n\n> Task #501 (cell.padding 한컴 방어 로직 모방) + Task #509 (PUA 글머리표 회귀) + PR #428\u002F#494\u002F#478\u002F#498\u002F#506\u002F#510 cherry-pick + 외부 기여자 6명 흡수\n\n**회귀 정정 (메인테이너)**\n- mel-001.hwp 2쪽 표 셀 높이 회귀 정정 ([#501](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F501)) — 비정상 큰 cell.padding (1700 HU vs cell.height 1280 HU) 의 한컴 자체 방어 로직 모방 가드 추가. 트러블슈팅 + 위키 ([HWP 셀 Padding 방어 로직](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fwiki\u002FHWP-%EC%85%80-Padding-%EB%B0%A9%EC%96%B4-%EB%A1%9C%EC%A7%81)) 작성\n- PUA (Private Use Area) 글머리표 글리프 회귀 정정 ([#509](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F509)) — Option F (PR #251 draw_text 영역 보존 + 매핑 표 한컴 PDF 정답지 정확화). 정정 매핑 2건 + 신규 매핑 10건 + `gen-pua` 검증 도구 추가\n\n**외부 PR cherry-pick (5 건)**\n- 그룹 내 그림(Picture) 직렬화 구현 (외부 기여 by [@oksure](https:\u002F\u002Fgithub.com\u002Foksure) — PR [#428](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F428))\n- `Paragraph::utf16_pos_to_char_idx` 외부 노출 ([#484](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F484)) — 외부 기여 by [@DanMeon](https:\u002F\u002Fgithub.com\u002FDanMeon), PR [#494](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F494)\n- Layout 정합 + 수식 정정 합본 (7 Task \u002F 10 commits — #488\u002F#490\u002F#483\u002F#489\u002F#495\u002F#480\u002F#476) — 외부 기여 by [@planet6897](https:\u002F\u002Fgithub.com\u002Fplanet6897), PR [#478](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F478)\n- HWP 3.0 파서 + Square wrap 어울림 렌더링 (Task #417 + Task #460, 51 commits) — 외부 기여 by [@jangster77](https:\u002F\u002Fgithub.com\u002Fjangster77), PR [#506](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F506)\n- PageLayerTree image paint op 에 brightness\u002Fcontrast JSON 필드 추가 ([#508](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F508)) — alhangeul-macos downstream 의 backend replay contract 보강. 외부 기여 by [@postmelee](https:\u002F\u002Fgithub.com\u002Fpostmelee), PR [#510](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F510)\n\n**회귀 검증 인프라 (외부 기여)**\n- Canvas visual diff 파이프라인 (legacy Canvas ↔ PageLayerTree replay 픽셀 diff 자동 검증, relates [#364](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F364)) — 외부 기여 by [@seo-rii](https:\u002F\u002Fgithub.com\u002Fseo-rii), PR [#498](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F498)\n\n#### v0.7.8 사이클 (2026-04-29)\n\n> 외부 컨트리뷰터 다수 + 메인테이너 회귀 정정 + 위키\u002FREADME 정비 — 외부 PR 15건 cherry-pick\n\n- 다단 섹션 누적 공식 회귀 정정 ([#391](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F391)) — 외부 기여 by [@planet6897](https:\u002F\u002Fgithub.com\u002Fplanet6897)\n- 수식 렌더링 개선 ([#174](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F174), [#175](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F175)) + 그림 밝기\u002F대비 효과 ([#150](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F150)) — 외부 기여 by [@oksure](https:\u002F\u002Fgithub.com\u002Foksure)\n- 수식 ATOP 파싱 + HWPX 수식 직렬화 보존 ([#286](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F286)) — 외부 기여 by [@cskwork](https:\u002F\u002Fgithub.com\u002Fcskwork) (본 저장소 첫 외부 컨트리뷰터)\n- Canvas → PageLayerTree replay 전환 P2 — 외부 기여 by [@seo-rii](https:\u002F\u002Fgithub.com\u002Fseo-rii) (PR [#456](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F456))\n- WASM API 확장 (insertParagraph \u002F deleteParagraph, [#269](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F269), [#271](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F271)) + set_field 라운드트립 정정 — 외부 기여 by [@oksure](https:\u002F\u002Fgithub.com\u002Foksure)\n\n#### v0.7.7 사이클 (2026-04-27)\n\n> v0.7.6 회귀 정정 — TypesetEngine 페이지네이션 fit drift \u002F page_num 갱신 \u002F PartialTable + Square wrap 처리 8항목 누적 정정 ([#354](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F354), [#359](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F359), [#361](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F361), [#362](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F362))\n\n#### v0.7.6 사이클 (2026-04-26)\n\n**외부 기여자 다수 + 조판 정밀화**\n- 목차 리더 도트 + 페이지번호 우측 탭 정렬 ([#279](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F279)) — 외부 기여 by [@seanshin](https:\u002F\u002Fgithub.com\u002Fseanshin), PR [#282](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F282)\n- form-002 인너 표 페이지 분할 결함 ([#324](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F324)) — 외부 기여 by [@planet6897](https:\u002F\u002Fgithub.com\u002Fplanet6897), PR [#327](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F327)\n- typeset 경로 PageHide \u002F Shape \u002F 중복 emit 결함 ([#340](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F340)) — 외부 기여 by [@planet6897](https:\u002F\u002Fgithub.com\u002Fplanet6897), PR [#341](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F341)\n- Task #321~#332 누적 정리 + vpos \u002F cell padding 회귀 해소 ([#342](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F342)) — 외부 기여 by [@planet6897](https:\u002F\u002Fgithub.com\u002Fplanet6897), PR [#343](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F343)\n\n**API · 출력 (외부 기여 by [@oksure](https:\u002F\u002Fgithub.com\u002Foksure))**\n- `replaceOne(query, newText, caseSensitive)` WASM API 추가 ([#268](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F268), PR [#334](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F334))\n- SVG\u002FHTML `draw_image` base64 임베딩 (PR [#335](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F335))\n\n**Firefox AMO (외부 기여 by [@postmelee](https:\u002F\u002Fgithub.com\u002Fpostmelee) — PR [#339](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F339))**\n- AMO 검증 워닝 해소 + viewer 번들 보안 sanitize → rhwp-firefox 0.2.2\n\n---\n\n#### 최근 변경 (v0.7.3 \u002F 확장 v0.2.1, 2026-04-19)\n\n**rhwp-studio (라이브러리 0.7.3)**\n- HWPX 출처 문서 저장 비활성화 + 사용자 안내 ([#196](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F196)) — 데이터 손상 방지 (HWPX→HWP 완전 변환기 [#197](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F197) 완성 시까지)\n- HWPX→HWP IR 매핑 어댑터 자산 보존 ([#178](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F178)) — rhwp 자기 호환 100% 회복, 한컴 호환은 #197 후속\n- 회전된 도형 리사이즈 커서 개선 + Flip 처리 (외부 기여 by [@bapdodi](https:\u002F\u002Fgithub.com\u002Fbapdodi) — PR [#192](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F192))\n- HWP 그림 효과(그레이스케일\u002F흑백) SVG 반영 (외부 기여 by [@marsimon](https:\u002F\u002Fgithub.com\u002Fmarsimon) — PR [#149](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F149))\n- Windows 환경의 CFB 경로 구분자 오류 수정 (외부 기여 by [@dreamworker0](https:\u002F\u002Fgithub.com\u002Fdreamworker0) — PR [#152](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F152))\n- HWPX Serializer 구현 — Document IR → HWPX 저장 (외부 기여 by [@seunghan91](https:\u002F\u002Fgithub.com\u002Fseunghan91) — PR [#170](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F170))\n- HWPX ZIP 엔트리 압축 한도 + strikeout shape 화이트리스트 (외부 기여 by [@seunghan91](https:\u002F\u002Fgithub.com\u002Fseunghan91) — PR [#153](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F153), PR [#154](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F154))\n- 도형 리사이즈 시 너비\u002F높이 클램프 (외부 기여 by [@seunghan91](https:\u002F\u002Fgithub.com\u002Fseunghan91) — PR [#163](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F163))\n- 모바일 드롭다운 메뉴 아이콘\u002F라벨 겹침 수정 (외부 기여 by [@seunghan91](https:\u002F\u002Fgithub.com\u002Fseunghan91) — PR [#161](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F161))\n\n**rhwp-chrome \u002F Edge 확장 (v0.2.1)**\n- Chrome 확장 활성 시 일반 파일 다운로드의 마지막 위치 기억 동작 복원 ([#198](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F198))\n- 옵션 페이지 CSP 호환 수정 ([#166](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues\u002F166))\n- HWP 파일 `Ctrl+S` 시 같은 파일 직접 덮어쓰기 (외부 기여 by [@ahnbu](https:\u002F\u002Fgithub.com\u002Fahnbu) — PR [#189](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F189))\n- 썸네일 로딩 스피너 정리 + options CSP 호환 (외부 기여 by [@postmelee](https:\u002F\u002Fgithub.com\u002Fpostmelee) — PR [#168](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpull\u002F168))\n- DEXT5 류 핸들러 다운로드 시 빈 뷰어 탭 차단\n\n**기여자 감사**\nv0.7.x 배포 주기 누적 외부 기여자: [@ahnbu](https:\u002F\u002Fgithub.com\u002Fahnbu), [@bapdodi](https:\u002F\u002Fgithub.com\u002Fbapdodi), [@cskwork](https:\u002F\u002Fgithub.com\u002Fcskwork), [@DanMeon](https:\u002F\u002Fgithub.com\u002FDanMeon), [@dreamworker0](https:\u002F\u002Fgithub.com\u002Fdreamworker0), [@jangster77](https:\u002F\u002Fgithub.com\u002Fjangster77), [@marsimon](https:\u002F\u002Fgithub.com\u002Fmarsimon), [@oksure](https:\u002F\u002Fgithub.com\u002Foksure), [@planet6897](https:\u002F\u002Fgithub.com\u002Fplanet6897), [@postmelee](https:\u002F\u002Fgithub.com\u002Fpostmelee), [@seanshin](https:\u002F\u002Fgithub.com\u002Fseanshin), [@seo-rii](https:\u002F\u002Fgithub.com\u002Fseo-rii), [@seunghan91](https:\u002F\u002Fgithub.com\u002Fseunghan91)\n\n### v1.0.0 — 조판 엔진\n\n> AI 조판 파이프라인, 뼈대 완성\n\n- 편집 시 동적 재조판 체계화 (LINE_SEG 재계산 + 페이지네이션 연동)\n- AI 기반 문서 생성\u002F편집 파이프라인\n- 문서 조판 품질 한컴 뷰어 수준 도달\n\n### v2.0.0 — 협업\n\n> 커뮤니티가 기능을 채워가는 단계, 살 붙이기\n\n- 플러그인\u002F확장 아키텍처, 실시간 협업 편집\n- 다양한 출력 포맷 (PDF, DOCX 등)\n\n### v3.0.0 — 완성\n\n> 한컴과 대등한 수준, 완전한 공공 자산\n\n- 전체 HWP 기능 커버리지, 접근성(a11y), 모바일 대응\n- 공공기관 실무 투입 가능 수준\n\n자세한 내용은 [로드맵 문서](mydocs\u002Freport\u002Frhwp-milestone.md)를 참조하세요.\n\n---\n\n## Features\n\n### Parsing (파싱)\n- HWP 5.0 binary format (OLE2 Compound File)\n- HWPX (Open XML-based format)\n- Sections, paragraphs, tables, textboxes, images, equations, charts\n- Header\u002Ffooter, master pages, footnotes\u002Fendnotes\n\n### Rendering (렌더링)\n- **Paragraph layout**: line spacing, indentation, alignment, tab stops\n- **Tables**: cell merging, border styles (solid\u002Fdouble\u002Ftriple\u002Fdotted), cell formula calculation\n- **Multi-column layout** (2-column, 3-column, etc.)\n- **Paragraph numbering\u002Fbullets**\n- **Vertical text** (영문 눕힘\u002F세움)\n- **Header\u002Ffooter** (odd\u002Feven page separation)\n- **Master pages** (Both\u002FOdd\u002FEven, is_extension\u002Foverlap)\n- **Object placement**: TopAndBottom, treat-as-char (TAC), in-front-of\u002Fbehind text\n\n### Equation (수식)\n- Fractions (OVER), square roots (SQRT\u002FROOT), subscript\u002Fsuperscript\n- Matrices: MATRIX, PMATRIX, BMATRIX, DMATRIX\n- Cases, alignment (EQALIGN), stacking (PILE\u002FLPILE\u002FRPILE)\n- Large operators: INT, DINT, TINT, OINT, SUM, PROD\n- Relations (REL\u002FBUILDREL), limits (lim), long division (LONGDIV)\n- 15 text decorations, full Greek alphabet, 100+ math symbols\n\n### Pagination (페이지 분할)\n- Multi-column document column\u002Fpage splitting\n- Table row-level page splitting (PartialTable)\n- shape_reserved handling for TopAndBottom objects\n- vpos-based paragraph position correction\n\n### Output (출력)\n- SVG export (CLI, legacy + layer replay)\n- Canvas rendering (WASM\u002FWeb)\n- Debug overlay (paragraph\u002Ftable boundaries + indices + y-coordinates)\n\n### Multi-Renderer Backends (멀티 렌더러 백엔드)\n- `PageRenderTree` can be lowered into a `PageLayerTree` paint IR before backend replay.\n- P1 public surfaces are Rust native `DocumentCore::build_page_layer_tree(page)` and WASM `getPageLayerTree(page)`.\n- Layer JSON starts at `schemaVersion: 1`, uses additive `schemaMinorVersion` \u002F `resourceTableMinorVersion`, `unit: \"px\"`, and `coordinateSystem: \"page-top-left-y-down\"` to match the existing page render coordinates.\n- Compatible schema changes should be additive; incompatible JSON shape changes require a schema version bump.\n- **Legacy SVG** remains the default compatibility output.\n- **Layered SVG** can be exercised with `RHWP_RENDER_PATH=layer-svg`.\n- The layered SVG path is a transition adapter that expands `PageLayerTree` back into the existing SVG renderer.\n- Browser\u002Fnative Canvas paths render through `PageLayerTree` replay by default.\n- Legacy Canvas remains available through `renderPageCanvasLegacy` \u002F `renderPageToCanvasLegacy` for parity checks.\n- P3 visual regression coverage runs `npm run e2e:render-diff:ci` in `rhwp-studio` to compare legacy Canvas and layer Canvas in Chromium; CI uploads render-diff artifacts and writes a summary.\n- The default render-diff fixtures cover basic text\u002Ftable output, business-document layout, and treat-as-char object placement; override with `RHWP_RENDER_DIFF_FILES`, `RHWP_RENDER_DIFF_MAX_PAGES`, or `RHWP_RENDER_DIFF_ALL=1`.\n- P4 adds native-only `DocumentCore::render_page_png_native(page)` behind `--features native-skia`; it renders `PageLayerTree` to encoded PNG through `SkiaLayerRenderer`.\n- P5 adds native Skia equation replay from `EquationNode.layout_box`, so equations are no longer placeholder boxes in the PNG path.\n- P5 replays the existing equation layout tree directly; it does not add CanvasKit equation replay or native form replay.\n- P6 adds native Skia `RawSvg` fragment rasterization through `resvg`, with external file href loading disabled.\n- P11 adds the Text IR v2 compatibility contract: `textSources`, per-`TextRun` source spans, paint style metadata, run placement\u002Fclusters, feature arrays, and explicit special text visual ops. `TextRun` remains the fallback replay path.\n- P12 adds guarded `GlyphRun` sidecar variants, font blob\u002Fface identity metadata, and a shape-lowering API. Canvas2D\u002Flayered SVG still use `TextRun` fallback; native Skia also keeps the fallback until exact blob-backed typeface replay is wired. Normal lowering does not emit glyph ids until a shaping pass explicitly inserts them.\n- P14 adds guarded `GlyphOutline` sidecar variants and backend text variant selection diagnostics. Existing renderers still keep the `TextRun` fallback path.\n- P15 adds diagnostics-only CanvasKit replay policy planning through `getCanvasKitReplayPlan(page, mode)`. `default` mode forbids hidden Canvas2D overlays, while `compat` mode reports transition overlays explicitly.\n- CI covers the native Skia path with `cargo test --features native-skia skia --lib`; the feature is not available on `wasm32` targets.\n- The initial native Skia path is a PNG raster backend with core image\u002Fequation\u002Fraw-svg replay; CanvasKit glyph replay, exact native glyph replay, real font blob extraction, complex text shaping, advanced image parity, and native form replay stay as follow-up work.\n- C ABI export is intentionally left for a later PR.\n- `ResourceArena` now reserves font blob storage and font resource identity for glyph replay; document image\u002FSVG interning stays as follow-up work.\n- This phase establishes the frontend\u002Fbackend boundary for later CanvasKit and fuller native Skia backends.\n\n### Web Editor (웹 에디터)\n- Text editing (insert, delete, undo\u002Fredo)\n- Character\u002Fparagraph formatting dialogs\n- Table creation, row\u002Fcolumn insert\u002Fdelete, cell formula\n- hwpctl-compatible API layer (한컴 웹기안기 호환)\n\n### hwpctl Compatibility (한컴 호환 레이어)\n- 30 Actions: TableCreate, InsertText, CharShape, ParagraphShape, etc.\n- ParameterSet\u002FParameterArray API\n- Field API: GetFieldList, PutFieldText, GetFieldText\n- Template data binding support\n\n## npm 패키지 — 웹에서 바로 사용하기\n\n### 에디터 임베드 (3줄)\n\n웹 페이지에 HWP 에디터를 통째로 임베드합니다. 메뉴, 툴바, 서식, 표 편집 — 모든 기능을 그대로 사용할 수 있습니다.\n\n```bash\nnpm install @rhwp\u002Feditor\n```\n\n```html\n\u003Cdiv id=\"editor\" style=\"width:100%; height:100vh;\">\u003C\u002Fdiv>\n\u003Cscript type=\"module\">\n  import { createEditor } from '@rhwp\u002Feditor';\n  const editor = await createEditor('#editor');\n\u003C\u002Fscript>\n```\n\n### HWP 뷰어\u002F파서 (직접 API 호출)\n\nWASM 기반 파서\u002F렌더러를 직접 사용하여 HWP 파일을 SVG로 렌더링합니다.\n\n```bash\nnpm install @rhwp\u002Fcore\n```\n\n```javascript\nimport init, { HwpDocument } from '@rhwp\u002Fcore';\n\nglobalThis.measureTextWidth = (font, text) => {\n  const ctx = document.createElement('canvas').getContext('2d');\n  ctx.font = font;\n  return ctx.measureText(text).width;\n};\n\nawait init({ module_or_path: '\u002Frhwp_bg.wasm' });\n\nconst resp = await fetch('document.hwp');\nconst doc = new HwpDocument(new Uint8Array(await resp.arrayBuffer()));\ndocument.getElementById('viewer').innerHTML = doc.renderPageSvg(0);\n```\n\n| 패키지 | 용도 | 설치 |\n|--------|------|------|\n| [@rhwp\u002Feditor](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@rhwp\u002Feditor) | 완전한 에디터 UI (iframe) | `npm i @rhwp\u002Feditor` |\n| [@rhwp\u002Fcore](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@rhwp\u002Fcore) | WASM 파서\u002F렌더러 (API) | `npm i @rhwp\u002Fcore` |\n\n## Quick Start (소스 빌드)\n\n처음 프로젝트에 참여하는 개발자는 [온보딩 가이드](mydocs\u002Fmanual\u002Fonboarding_guide.md)를 먼저 읽어보세요. 프로젝트 아키텍처, 디버깅 도구, 개발 워크플로우를 한눈에 파악할 수 있습니다.\n\n### Requirements\n- Rust 1.75+\n- Docker (for WASM build)\n- Node.js 18+ (for web editor)\n\n### Native Build\n\n```bash\ncargo build                    # Development build\ncargo build --release          # Release build\ncargo test                     # Run tests (1,100+ tests)\n```\n\n### WASM Build\n\nWASM 빌드는 Docker를 사용합니다. 플랫폼에 관계없이 동일한 `wasm-pack` + Rust 툴체인 환경을 보장하기 위함입니다.\n\n```bash\ncp .env.docker.example .env.docker   # 최초 1회: 환경변수 템플릿 복사\ndocker compose --env-file .env.docker run --rm wasm\n```\n\n빌드 결과물은 `pkg\u002F` 디렉토리에 생성됩니다.\n\n### Web Editor\n\n```bash\ncd rhwp-studio\nnpm install\nnpx vite --host 0.0.0.0 --port 7700\n```\n\nOpen `http:\u002F\u002Flocalhost:7700` in your browser.\n\n## CLI Usage\n\n### SVG Export\n\n```bash\nrhwp export-svg sample.hwp                         # Export to output\u002F\nrhwp export-svg sample.hwp -o my_dir\u002F              # Export to custom directory\nrhwp export-svg sample.hwp -p 0                    # Export specific page (0-indexed)\nrhwp export-svg sample.hwp --debug-overlay         # Debug overlay (paragraph\u002Ftable boundaries)\n```\n\n### Document Inspection\n\n```bash\nrhwp dump sample.hwp                  # Full IR dump\nrhwp dump sample.hwp -s 2 -p 45      # Section 2, paragraph 45 only\nrhwp dump-pages sample.hwp -p 15     # Page 16 layout items\nrhwp info sample.hwp                  # File info (size, version, sections, fonts)\n```\n\n### Debugging Workflow\n\n1. `export-svg --debug-overlay` → Identify paragraphs\u002Ftables by `s{section}:pi={index} y={coord}`\n2. `dump-pages -p N` → Check paragraph layout list and heights\n3. `dump -s N -p M` → Inspect ParaShape, LINE_SEG, table properties\n\nNo code modification needed for the entire debugging process.\n\n## Project Structure\n\n```\nsrc\u002F\n├── main.rs                    # CLI entry point\n├── parser\u002F                    # HWP\u002FHWPX file parser\n├── model\u002F                     # HWP document model\n├── document_core\u002F             # Document core (CQRS: commands + queries)\n│   ├── commands\u002F              # Edit commands (text, formatting, tables)\n│   ├── queries\u002F               # Queries (rendering data, pagination)\n│   └── table_calc\u002F            # Table formula engine (SUM, AVG, PRODUCT, etc.)\n├── renderer\u002F                  # Rendering engine\n│   ├── layout\u002F                # Layout (paragraph, table, shapes, cells)\n│   ├── pagination\u002F            # Pagination engine\n│   ├── equation\u002F              # Equation parser\u002Flayout\u002Frenderer\n│   ├── svg.rs                 # SVG output\n│   └── web_canvas.rs          # Canvas output\n├── serializer\u002F                # HWP file serializer (save)\n└── wasm_api.rs                # WASM bindings\n\nrhwp-studio\u002F                   # Web editor (TypeScript + Vite)\n├── src\u002F\n│   ├── core\u002F                  # Core (WASM bridge, types)\n│   ├── engine\u002F                # Input handlers\n│   ├── hwpctl\u002F                # hwpctl compatibility layer\n│   ├── ui\u002F                    # UI (menus, toolbars, dialogs)\n│   └── view\u002F                  # Views (ruler, status bar, canvas)\n├── e2e\u002F                       # E2E tests (Puppeteer + Chrome CDP)\n│   └── helpers.mjs            # Test helpers (headless\u002Fhost modes)\n\nmydocs\u002F                        # Project documentation (Korean)\n├── orders\u002F                    # Daily task tracking\n├── plans\u002F                     # Task plans and implementation specs\n├── feedback\u002F                  # Code review feedback\n├── tech\u002F                      # Technical documents\n└── manual\u002F                    # Manuals and guides\n\nscripts\u002F                       # Build & quality tools\n├── metrics.sh                 # Code quality metrics collection\n└── dashboard.html             # Quality dashboard with trend tracking\n```\n\n## AI 페어 프로그래밍으로 개발합니다\n\n> **이것은 바이브 코딩이 아닙니다.** AI가 주는 코드를 읽지도 않고 수락하는 것이 아닙니다. 모든 계획은 검토되고, 모든 결과물은 검증되며, 모든 결정의 뒤에는 사람이 있습니다.\n\n바이브 코딩 — AI 출력을 읽지 않고 수락하고, AI에게 아키텍처 결정을 맡기고, 이해하지 못하는 코드를 배포하는 것 — 은 함정입니다. 겉보기에는 동작하지만, 이해하지 못했기 때문에 문제가 생겨도 진단할 수 없는 코드가 만들어집니다.\n\n이 프로젝트는 정반대의 접근을 취합니다. 사람 **작업지시자**가 방향, 품질, 아키텍처 결정의 완전한 소유권을 유지하고, AI는 혼자서는 불가능한 속도와 규모로 구현을 수행합니다. 핵심 차이: **사람은 절대 생각을 멈추지 않습니다.**\n\n### 바이브 코딩 vs. AI 주도 개발\n\n| | 바이브 코딩 | 이 프로젝트 |\n|--|-----------|-----------|\n| **사람의 역할** | AI 출력 수락 | 지시, 검토, 결정 |\n| **계획** | 없음 — \"그냥 만들어\" | 계획서 작성 → 승인 → 실행 |\n| **품질 관문** | 동작하길 바람 | 1,100+ 테스트 + Clippy + CI + 코드 리뷰 |\n| **디버깅** | AI에게 AI 버그 수정 요청 | 사람이 진단, AI가 구현 |\n| **아키텍처** | 우연히 형성 | 의도적 설계 (CQRS, 의존성 방향) |\n| **문서** | 없음 | 2,200+개 파일의 프로세스 기록 |\n| **결과물** | 취약, 유지보수 어려움 | 프로덕션 수준, 100K+ 라인 |\n\nAI는 배율기입니다. 하지만 배율기는 기존 프로세스를 증폭시킵니다. 프로세스 없음 × AI = 빠른 혼돈. 좋은 프로세스 × AI = 비범한 결과물.\n\n### 개발 프로세스\n\n이 프로젝트는 **[Claude Code](https:\u002F\u002Fclaude.ai\u002Fcode)** (Anthropic AI 코딩 에이전트)를 페어 프로그래밍 파트너로 사용하여 개발합니다. 전체 개발 과정이 투명하게 문서화되어 있습니다.\n\n```\n작업지시자 (사람)                    AI 페어 프로그래머 (Claude Code)\n────────────────                    ─────────────────────────────\n방향 설정, 우선순위 결정        →    분석, 계획, 구현\n계획 검토, 승인                ←    구현 계획서 작성\n도메인 피드백 제공              →    디버깅, 테스트, 반복\n아키텍처 결정                  →    정밀하게 실행\n품질 및 정확성 판단            ←    코드, 문서, 테스트 생성\n```\n\n`mydocs\u002F` 디렉토리(2,200+개 파일, 영문 번역: `mydocs\u002Feng\u002F`)에 전체 개발 기록이 있습니다: 일일 작업 기록, 구현 계획서, 코드 리뷰 피드백, 기술 연구 문서, 트러블슈팅 기록.\n\n> `mydocs\u002F`는 코드에 대한 문서가 아닙니다 — **AI로 소프트웨어를 만드는 방법**에 대한 문서입니다. 오픈소스 방법론입니다.\n\n**[Hyper-Waterfall 방법론](mydocs\u002Fmanual\u002Fhyper_waterfall.md)** — 거시적 워터폴 + 미시적 애자일, AI가 이 둘을 동시에 가능하게 한다.\n\n### Git 워크플로우\n\n```\nlocal\u002Ftask{N}  ──커밋──커밋──┐\n                              ├─→ devel merge (관련 타스크 묶어서)\n                              ├─→ main merge + 태그 (릴리즈 시점)\n```\n\n| 브랜치 | 용도 |\n|--------|------|\n| `main` | 릴리즈 (태그: v0.5.0 등) |\n| `devel` | 개발 통합 |\n| `local\u002Ftask{N}` | GitHub Issue 번호 기반 타스크 브랜치 |\n\n### 타스크 관리\n\n- **GitHub Issues**로 타스크 번호 자동 채번 — 중복 방지\n- **GitHub Milestones**로 타스크 그룹화\n- 마일스톤 표기: `M{버전}` (예: M100=v1.0.0, M05x=v0.5.x)\n- 오늘할일: `mydocs\u002Forders\u002Fyyyymmdd.md` — `M100 #1` 형식으로 참조\n- 커밋 메시지: `Task #1: 내용` — `closes #1`로 Issue 자동 종료\n\n### 타스크 진행 절차\n\n1. `gh issue create` → GitHub Issue 등록 (마일스톤 지정)\n2. `local\u002Ftask{issue번호}` 브랜치 생성\n3. 수행계획서 작성 → 승인 → 구현 → 테스트\n4. devel merge → `closes #{번호}`\n\n### 디버깅 프로토콜\n\n1. `export-svg --debug-overlay` → 문단\u002F표 식별\n2. `dump-pages -p N` → 배치 목록과 높이\n3. `dump -s N -p M` → ParaShape, LINE_SEG 상세\n\n> `mydocs\u002F`의 문서는 AI 기반 소프트웨어 개발의 교육 자료로 활용됩니다.\n\n### 문서 생성 규칙\n\n모든 문서는 **한국어**로 작성합니다.\n\n```\nmydocs\u002F\n├── orders\u002F           # 오늘 할일 (yyyymmdd.md)\n├── plans\u002F            # 수행 계획서, 구현 계획서\n│   └── archives\u002F     # 완료된 계획서 보관\n├── working\u002F          # 단계별 완료 보고서\n├── report\u002F           # 기본 보고서\n├── feedback\u002F         # 코드 리뷰 피드백\n├── tech\u002F             # 기술 사항 정리 문서\n├── manual\u002F           # 매뉴얼, 가이드 문서\n└── troubleshootings\u002F # 트러블슈팅 관련 문서\n```\n\n| 문서 유형 | 위치 | 파일명 규칙 |\n|----------|------|------------|\n| 오늘 할일 | `orders\u002F` | `yyyymmdd.md` — 마일스톤(M100)+Issue(#1) 형식 |\n| 수행 계획서 | `plans\u002F` | Issue 번호 참조 |\n| 완료 보고서 | `working\u002F` | Issue 번호 참조 |\n| 기술 문서 | `tech\u002F` | 주제별 자유 명명 |\n\n## Architecture\n\n```mermaid\ngraph TB\n    HWP[HWP\u002FHWPX File] --> Parser\n    Parser --> Model[Document Model]\n    Model --> DocumentCore\n    DocumentCore --> |Commands| Edit[Edit Operations]\n    DocumentCore --> |Queries| Render[Rendering Pipeline]\n    Render --> Pagination\n    Pagination --> Layout\n    Layout --> SVG[SVG Output]\n    Layout --> Canvas[Canvas Output]\n    DocumentCore --> WASM[WASM API]\n    WASM --> Studio[rhwp-studio Web Editor]\n    Studio --> hwpctl[hwpctl Compatibility Layer]\n```\n\n## HWPUNIT\n\n- 1 inch = 7,200 HWPUNIT\n- 1 inch = 25.4 mm\n- 1 HWPUNIT ≈ 0.00353 mm\n\n## Contributing\n\n기여 환영합니다. 다음 핵심 사항을 먼저 확인해 주세요:\n\n- **PR base 는 `devel`** 입니다 (`main` 아님). GitHub 기본 브랜치는 `main` 이지만 기여 PR 은 모두 `devel` 로 받습니다.\n- **이슈 먼저 확인**: 동일 영역에 진행 중인 작업이 있는지 [열린 이슈](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fissues) 와 [열린 PR](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fpulls) 을 먼저 확인해 주세요. 중복 작업을 방지합니다.\n- **이슈 close 는 메인테이너**: 작업 완료 후 PR 만 제출해 주세요. 이슈는 PR 머지 시 메인테이너가 close 합니다.\n- **한컴 PDF 는 정답지가 아닙니다**: 한컴 도구 (편집기 \u002F Viewer \u002F 한컴독스), 버전 (2010 \u002F 2020 \u002F 2022), 출력 경로 (한컴 자체 \u002F OS 인쇄) 별로 PDF 결과가 다릅니다. 자세한 내용과 환경별 비교 자료는 [한컴 PDF 환경 의존성 위키](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fwiki\u002F한컴-PDF-환경-의존성) 를 참고하세요.\n\n상세한 기여 절차 (Fork → 브랜치 → 커밋 → PR) 는 [CONTRIBUTING.md](CONTRIBUTING.md) 를 참고하세요.\n\n### 위키 자료 (Wiki)\n\n기여자와 fork 사용자에게 도움이 되는 권위 자료를 [Wiki](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fwiki) 에 정리하고 있습니다:\n\n- [한컴 PDF 환경 의존성](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fwiki\u002F한컴-PDF-환경-의존성) — 한컴 도구 \u002F 버전 \u002F OS 별 PDF 차이 정황 및 PR 검증 시 참고 사항\n- [HWP 5.0 Spec Errata](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fwiki\u002FHWP-5.0-Spec-Errata) — HWP 5.0 스펙 정오표\n- [HWP LINE_SEG vpos 이해](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fwiki\u002FHWP-LINE_SEG-vpos-이해) — 줄 분할 vpos 이해\n- [HWP Tab Leader Rendering](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fwiki\u002FHWP-Tab-Leader-Rendering) — Tab leader 렌더링\n- [Export API 사용 가이드](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fwiki\u002FExport-API-사용-가이드) — exportHwp \u002F exportHwpx API\n- [HWPX2HWP Probe 추적 온보딩](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fwiki\u002FHWPX2HWP-Probe-%EC%B6%94%EC%A0%81-%EC%98%A8%EB%B3%B4%EB%94%A9) — HWPX→IR→HWP 저장 손상\u002F한컴 호환성 probe 추적법\n- [Cloudflared 로 rhwp-studio 외부 HTTPS 접근](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fwiki\u002FCloudflared-로-rhwp-studio-외부-HTTPS-접근)\n- [Hyper-Waterfall 문서 체계 가이드](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fwiki\u002FHyper‐Waterfall-문서-체계-가이드)\n- [Investigation PR 가이드](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fwiki\u002FInvestigation-PR-가이드)\n- [Legal FAQ](https:\u002F\u002Fgithub.com\u002Fedwardkim\u002Frhwp\u002Fwiki\u002FLegal-FAQ)\n\n## Notice\n\n본 제품은 한글과컴퓨터의 한글 문서 파일(.hwp) 공개 문서를 참고하여 개발하였습니다.\n\n## Trademark\n\n\"한글\", \"한컴\", \"HWP\", \"HWPX\"는 주식회사 한글과컴퓨터의 등록 상표입니다.\n본 프로젝트는 한글과컴퓨터와 제휴, 후원, 승인 관계가 없는 독립적인 오픈소스 프로젝트입니다.\n\n\"Hangul\", \"Hancom\", \"HWP\", and \"HWPX\" are registered trademarks of Hancom Inc.\nThis project is an independent open-source project with no affiliation, sponsorship, or endorsement by Hancom Inc.\n\n## License\n\n[MIT License](LICENSE) — Copyright (c) 2025-2026 Edward Kim\n","rhwp 是一个基于 Rust 和 WebAssembly 的开源 HWP\u002FHWPX 文件查看器和编辑器。它支持HWP 5.0和HWPX格式文件的解析与渲染，包括文本、表格、公式、图片及图表等元素，并实现了页面布局如多栏分割、表行分割以及页眉页脚等功能。此外，该项目还提供了SVG导出（CLI）和Canvas渲染（Web\u002FWASM），并集成了web编辑器及hwpctl兼容API。由于其跨平台特性和无需安装即可使用的便捷性，rhwp非常适合需要在不同设备或操作系统上处理韩国文档格式（HWP）的用户使用。",2,"2026-06-11 03:50:18","high_star"]