kordoc 4.18.1 → 4.18.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +7 -6
  2. package/dist/{-X4KTLQC6.js → -WOKB25R2.js} +13 -11
  3. package/dist/{chunk-UTVMLJZE.js → chunk-2I2RTJJ5.js} +433 -71
  4. package/dist/chunk-2I2RTJJ5.js.map +1 -0
  5. package/dist/{chunk-Q5N4YS3T.cjs → chunk-2ZBLQVAS.cjs} +20 -13
  6. package/dist/chunk-2ZBLQVAS.cjs.map +1 -0
  7. package/dist/{chunk-KXR4CTFT.js → chunk-3FZGL3IL.js} +2 -2
  8. package/dist/{chunk-R2IFWAHI.js → chunk-5X7XWYR2.js} +2 -2
  9. package/dist/{chunk-PWRY4W6Q.js → chunk-6GLTGOP6.js} +2 -2
  10. package/dist/{chunk-SQQ4ITJ5.js → chunk-AZQWESRH.js} +2 -2
  11. package/dist/{chunk-KBZ3MQJX.js → chunk-BGOR5GCF.js} +2 -2
  12. package/dist/{chunk-WWOTHS2E.js → chunk-BJ6RYYXV.js} +205 -7
  13. package/dist/chunk-BJ6RYYXV.js.map +1 -0
  14. package/dist/{chunk-VDIXNEWV.js → chunk-CAN5P6N6.js} +10 -5
  15. package/dist/chunk-CAN5P6N6.js.map +1 -0
  16. package/dist/chunk-GS7T56RP.cjs.map +1 -1
  17. package/dist/{chunk-SIZ63E5G.cjs → chunk-HZV52V2X.cjs} +3 -3
  18. package/dist/chunk-HZV52V2X.cjs.map +1 -0
  19. package/dist/{chunk-X625PCZM.js → chunk-IXX3WHIE.js} +3 -3
  20. package/dist/{chunk-6V7QRQY3.js → chunk-J2A46VCA.js} +125 -87
  21. package/dist/chunk-J2A46VCA.js.map +1 -0
  22. package/dist/chunk-J55UQC5H.cjs.map +1 -1
  23. package/dist/{chunk-AQUNBGXH.js → chunk-KSJ7GKNQ.js} +2 -2
  24. package/dist/{chunk-Z4KCEERM.js → chunk-NES5U4JK.js} +3 -3
  25. package/dist/{chunk-MTTYJEKA.js → chunk-OOX2GZZ4.js} +2 -2
  26. package/dist/{chunk-HUGBJVAA.js → chunk-PSJLB3SZ.js} +16 -9
  27. package/dist/chunk-PSJLB3SZ.js.map +1 -0
  28. package/dist/{chunk-NQR3VKWN.js → chunk-RDBTOE5X.js} +2 -2
  29. package/dist/{chunk-2VFZQ634.js → chunk-RRURZDEK.js} +2 -2
  30. package/dist/{chunk-6N5BOPJI.js → chunk-RSDUH4XF.js} +4 -3
  31. package/dist/chunk-RSDUH4XF.js.map +1 -0
  32. package/dist/{chunk-PCSOJ523.cjs → chunk-SHRRD2TD.cjs} +10 -5
  33. package/dist/chunk-SHRRD2TD.cjs.map +1 -0
  34. package/dist/{chunk-TMC4A3FM.js → chunk-UVUKT3IQ.js} +13 -7
  35. package/dist/chunk-UVUKT3IQ.js.map +1 -0
  36. package/dist/{chunk-IXAXI2S3.cjs → chunk-V4BKT65D.cjs} +3 -3
  37. package/dist/chunk-V4BKT65D.cjs.map +1 -0
  38. package/dist/{chunk-I7YWXECO.js → chunk-VGDTONTB.js} +10 -5
  39. package/dist/chunk-VGDTONTB.js.map +1 -0
  40. package/dist/{chunk-K35WIYBD.js → chunk-W3RADOLO.js} +5 -4
  41. package/dist/chunk-W3RADOLO.js.map +1 -0
  42. package/dist/{chunk-5PNQIF3V.js → chunk-W7P4GPOV.js} +4 -4
  43. package/dist/{chunk-7DC2KL3V.cjs → chunk-WN5YLP7H.cjs} +161 -43
  44. package/dist/chunk-WN5YLP7H.cjs.map +1 -0
  45. package/dist/{chunk-IUMV45TX.cjs → chunk-ZD5WNQNC.cjs} +12 -12
  46. package/dist/chunk-ZD5WNQNC.cjs.map +1 -0
  47. package/dist/{chunk-CWJ5KY2F.js → chunk-ZN3LHNJG.js} +176 -43
  48. package/dist/chunk-ZN3LHNJG.js.map +1 -0
  49. package/dist/chunks-OQDRDICD.js +10 -0
  50. package/dist/cli.js +55 -34
  51. package/dist/cli.js.map +1 -1
  52. package/dist/{formula-W3GQC6L6.cjs → formula-BQ5RW5XD.cjs} +9 -9
  53. package/dist/formula-BQ5RW5XD.cjs.map +1 -0
  54. package/dist/{formula-LICM6K27.js → formula-GPCOJJXN.js} +3 -3
  55. package/dist/{formula-T4Q2UHWO.js → formula-QZAOKPBX.js} +4 -4
  56. package/dist/{image-ocr-WZJURDX6.js → image-ocr-POCME5I4.js} +6 -6
  57. package/dist/{image-ocr-XB2NFKGZ.js → image-ocr-TWNNVTZS.js} +9 -9
  58. package/dist/{image-ocr-7PNHBD2G.cjs → image-ocr-VKIUBLBX.cjs} +15 -15
  59. package/dist/image-ocr-VKIUBLBX.cjs.map +1 -0
  60. package/dist/index.cjs +1264 -778
  61. package/dist/index.cjs.map +1 -1
  62. package/dist/index.d.cts +7 -5
  63. package/dist/index.d.ts +7 -5
  64. package/dist/index.js +606 -120
  65. package/dist/index.js.map +1 -1
  66. package/dist/mcp.js +30 -31
  67. package/dist/mcp.js.map +1 -1
  68. package/dist/{model-bundle-O2XYR54X.js → model-bundle-THYUL7GG.js} +5 -5
  69. package/dist/{models-SKK3NH3V.js → models-U22N4RXX.js} +5 -5
  70. package/dist/page-range-QHHFTL7X.cjs.map +1 -1
  71. package/dist/{parser-PJUZSMFR.cjs → parser-JOMFOZLH.cjs} +213 -252
  72. package/dist/parser-JOMFOZLH.cjs.map +1 -0
  73. package/dist/{parser-4D2M5BKY.js → parser-NKP2NCSV.js} +27 -66
  74. package/dist/parser-NKP2NCSV.js.map +1 -0
  75. package/dist/{parser-5G5G7HHG.js → parser-SCXRLOW7.js} +24 -63
  76. package/dist/parser-SCXRLOW7.js.map +1 -0
  77. package/dist/pdf-ocr-NF4AY5MI.cjs +16 -0
  78. package/dist/pdf-ocr-NF4AY5MI.cjs.map +1 -0
  79. package/dist/pdf-ocr-OLII3WAG.js +15 -0
  80. package/dist/pdf-ocr-VJL7ON2Q.js +19 -0
  81. package/dist/{profile-io-BAQTYPK7.js → profile-io-UI3TZBYH.js} +3 -3
  82. package/dist/{rasterize-A2ZEACKV.js → rasterize-XMBV5H2I.js} +3 -3
  83. package/dist/{redact-doc-26KN2LSZ.js → redact-doc-7ZZMHDBO.js} +11 -11
  84. package/dist/{render-62ZUDMHB.js → render-SWRTUDAV.js} +7 -7
  85. package/dist/seal-UKKJZHKE.js +10 -0
  86. package/dist/{setup-2A3E6WRE.js → setup-43JJEEU7.js} +3 -3
  87. package/dist/visual-D2563HCJ.js +20 -0
  88. package/dist/{watch-D2T5FEKT.js → watch-NRATQ472.js} +14 -14
  89. package/dist/watch-NRATQ472.js.map +1 -0
  90. package/package.json +1 -1
  91. package/dist/chunk-6N5BOPJI.js.map +0 -1
  92. package/dist/chunk-6V7QRQY3.js.map +0 -1
  93. package/dist/chunk-7DC2KL3V.cjs.map +0 -1
  94. package/dist/chunk-CWJ5KY2F.js.map +0 -1
  95. package/dist/chunk-HUGBJVAA.js.map +0 -1
  96. package/dist/chunk-I7YWXECO.js.map +0 -1
  97. package/dist/chunk-IUMV45TX.cjs.map +0 -1
  98. package/dist/chunk-IXAXI2S3.cjs.map +0 -1
  99. package/dist/chunk-K35WIYBD.js.map +0 -1
  100. package/dist/chunk-PCSOJ523.cjs.map +0 -1
  101. package/dist/chunk-Q5N4YS3T.cjs.map +0 -1
  102. package/dist/chunk-SIZ63E5G.cjs.map +0 -1
  103. package/dist/chunk-TMC4A3FM.js.map +0 -1
  104. package/dist/chunk-UTVMLJZE.js.map +0 -1
  105. package/dist/chunk-VDIXNEWV.js.map +0 -1
  106. package/dist/chunk-WWOTHS2E.js.map +0 -1
  107. package/dist/chunks-ACUC63N3.js +0 -10
  108. package/dist/formula-W3GQC6L6.cjs.map +0 -1
  109. package/dist/image-ocr-7PNHBD2G.cjs.map +0 -1
  110. package/dist/parser-4D2M5BKY.js.map +0 -1
  111. package/dist/parser-5G5G7HHG.js.map +0 -1
  112. package/dist/parser-PJUZSMFR.cjs.map +0 -1
  113. package/dist/pdf-ocr-EGWOIB6O.cjs +0 -16
  114. package/dist/pdf-ocr-EGWOIB6O.cjs.map +0 -1
  115. package/dist/pdf-ocr-NJTFXBRC.js +0 -19
  116. package/dist/pdf-ocr-ZXR6Q6BK.js +0 -15
  117. package/dist/seal-3GXC2API.js +0 -10
  118. package/dist/visual-4ZBZRMCM.js +0 -20
  119. package/dist/watch-D2T5FEKT.js.map +0 -1
  120. /package/dist/{-X4KTLQC6.js.map → -WOKB25R2.js.map} +0 -0
  121. /package/dist/{chunk-KXR4CTFT.js.map → chunk-3FZGL3IL.js.map} +0 -0
  122. /package/dist/{chunk-R2IFWAHI.js.map → chunk-5X7XWYR2.js.map} +0 -0
  123. /package/dist/{chunk-PWRY4W6Q.js.map → chunk-6GLTGOP6.js.map} +0 -0
  124. /package/dist/{chunk-SQQ4ITJ5.js.map → chunk-AZQWESRH.js.map} +0 -0
  125. /package/dist/{chunk-KBZ3MQJX.js.map → chunk-BGOR5GCF.js.map} +0 -0
  126. /package/dist/{chunk-X625PCZM.js.map → chunk-IXX3WHIE.js.map} +0 -0
  127. /package/dist/{chunk-AQUNBGXH.js.map → chunk-KSJ7GKNQ.js.map} +0 -0
  128. /package/dist/{chunk-Z4KCEERM.js.map → chunk-NES5U4JK.js.map} +0 -0
  129. /package/dist/{chunk-MTTYJEKA.js.map → chunk-OOX2GZZ4.js.map} +0 -0
  130. /package/dist/{chunk-NQR3VKWN.js.map → chunk-RDBTOE5X.js.map} +0 -0
  131. /package/dist/{chunk-2VFZQ634.js.map → chunk-RRURZDEK.js.map} +0 -0
  132. /package/dist/{chunk-5PNQIF3V.js.map → chunk-W7P4GPOV.js.map} +0 -0
  133. /package/dist/{chunks-ACUC63N3.js.map → chunks-OQDRDICD.js.map} +0 -0
  134. /package/dist/{formula-LICM6K27.js.map → formula-GPCOJJXN.js.map} +0 -0
  135. /package/dist/{formula-T4Q2UHWO.js.map → formula-QZAOKPBX.js.map} +0 -0
  136. /package/dist/{image-ocr-WZJURDX6.js.map → image-ocr-POCME5I4.js.map} +0 -0
  137. /package/dist/{image-ocr-XB2NFKGZ.js.map → image-ocr-TWNNVTZS.js.map} +0 -0
  138. /package/dist/{model-bundle-O2XYR54X.js.map → model-bundle-THYUL7GG.js.map} +0 -0
  139. /package/dist/{models-SKK3NH3V.js.map → models-U22N4RXX.js.map} +0 -0
  140. /package/dist/{pdf-ocr-NJTFXBRC.js.map → pdf-ocr-OLII3WAG.js.map} +0 -0
  141. /package/dist/{pdf-ocr-ZXR6Q6BK.js.map → pdf-ocr-VJL7ON2Q.js.map} +0 -0
  142. /package/dist/{profile-io-BAQTYPK7.js.map → profile-io-UI3TZBYH.js.map} +0 -0
  143. /package/dist/{rasterize-A2ZEACKV.js.map → rasterize-XMBV5H2I.js.map} +0 -0
  144. /package/dist/{redact-doc-26KN2LSZ.js.map → redact-doc-7ZZMHDBO.js.map} +0 -0
  145. /package/dist/{render-62ZUDMHB.js.map → render-SWRTUDAV.js.map} +0 -0
  146. /package/dist/{seal-3GXC2API.js.map → seal-UKKJZHKE.js.map} +0 -0
  147. /package/dist/{setup-2A3E6WRE.js.map → setup-43JJEEU7.js.map} +0 -0
  148. /package/dist/{visual-4ZBZRMCM.js.map → visual-D2563HCJ.js.map} +0 -0
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  > *대한민국에서 둘째가라면 서러울 문서지옥. 거기서 7년 버틴 공무원이 만들었습니다.*
9
9
 
10
- HWP 3.x/5.x, HWPX, HWPML, PDF, XLS, XLSX, DOCX, 이미지(PNG/JPG/WebP) — 관공서 문서를 파싱·비교·생성합니다. [English](./README-EN.md)
10
+ HWP 3.x/5.x, HWPX, HWPML, PDF, XLS, XLSX, DOCX, PPTX, 이미지(PNG/JPG/WebP) — 관공서 문서를 파싱·비교·생성합니다. [English](./README-EN.md)
11
11
 
12
12
  - 📊 **PDF 공개 벤치 1위** — opendataloader-bench 200문서 종합 0.960, 공개 12개 파서(상용 포함)보다 높음 (OCR 끄면 0.937·쪽당 0.04초)
13
13
  - 🇰🇷 **한국 공문서 표 무손실** — 원본 HWPX 를 정답으로 채점해 HWPX 표 13,041개가 칸까지 일치
@@ -72,7 +72,7 @@ PDF·OCR 의존성은 기본으로 설치됩니다(줄이려면 `--omit=optional
72
72
 
73
73
  | 기능 | 내용 |
74
74
  | --- | --- |
75
- | 📄 **문서 → Markdown** | HWP·HWPX·PDF·DOCX·XLS(X)·이미지를 Markdown + 구조 IR(`IRBlock[]`)로 |
75
+ | 📄 **문서 → Markdown** | HWP·HWPX·PDF·DOCX·XLS(X)·PPTX·이미지를 Markdown + 구조 IR(`IRBlock[]`)로 |
76
76
  | 📊 **표 복원** | 원본에서 보이는 모습 그대로: 선이 그어진 표는 병합·중첩까지 표로, 테두리 없는 틀은 글로, 칸으로 조립한 분수는 수식으로. 선 없는 PDF 표, 신구조문대비표까지 |
77
77
  | 🔍 **신구대조표** | 두 문서 차이를 블록·셀 단위로 (HWP ↔ HWPX 교차 비교) |
78
78
  | 📝 **Markdown → HWPX** | AI 가 쓴 글을 표·수식·차트 포함 HWPX 로 |
@@ -171,7 +171,7 @@ if (result.success) {
171
171
  }
172
172
  ```
173
173
 
174
- - `pages` 는 블록에 쪽 번호가 붙는 포맷(HWP·HWPX·PDF, XLS(X)는 시트 = 한 쪽)에서만 나옵니다. 쪽을 매기지 않는 DOCX 에서는 필드를 생략합니다.
174
+ - `pages` 는 블록에 쪽 번호가 붙는 포맷(HWP·HWPX·PDF, XLS(X)는 시트 = 한 쪽, PPTX 는 슬라이드 = 한 쪽)에서만 나옵니다. 쪽을 매기지 않는 DOCX 에서는 필드를 생략합니다.
175
175
  - 쪽 경계 신뢰도는 `metadata.pageMode` — `"layout"`(조판 캐시 기반 실제 쪽) / `"section"`(섹션 근사).
176
176
 
177
177
  **파싱 옵션** (`parse(buffer, options)` · CLI 플래그)
@@ -458,7 +458,7 @@ Windows 에서 Claude Desktop 이 `.cmd` 를 못 찾으면 `"command": "cmd", "a
458
458
 
459
459
  | 도구 | 설명 |
460
460
  |------|------|
461
- | `parse_document` | HWP/HWPX/PDF/XLSX/DOCX → Markdown (메타데이터 포함) |
461
+ | `parse_document` | HWP/HWPX/PDF/XLSX/DOCX/PPTX → Markdown (메타데이터 포함) |
462
462
  | `detect_format` | 매직 바이트로 포맷 감지 |
463
463
  | `parse_metadata` | 메타데이터만 빠르게 |
464
464
  | `parse_pages` | 특정 쪽 범위만 |
@@ -486,13 +486,13 @@ Windows 에서 Claude Desktop 이 `.cmd` 를 못 찾으면 `"command": "cmd", "a
486
486
  |------|------|
487
487
  | `parse(buffer, options?)` | 포맷 자동 감지 → Markdown + `IRBlock[]` (파일 경로 문자열도 받음) |
488
488
  | `parseHwpx` · `parseHwp` · `parseHwp3` · `parseHwpml` | HWPX · HWP 5.x · HWP 3.x(1996~2002) · HWPML 전용 — 모두 `(buffer, options?)` |
489
- | `parsePdf` · `parseDocx` · `parseXlsx` · `parseXls` | PDF · DOCX · XLSX · XLS(Excel 97~2003, BIFF8) 전용 |
489
+ | `parsePdf` · `parseDocx` · `parsePptx` · `parseXlsx` · `parseXls` | PDF · DOCX · PPTX · XLSX · XLS(Excel 97~2003, BIFF8) 전용 |
490
490
  | `parseImage(buffer, options?)` | 이미지(PNG/JPG/WebP) 전용 — 내장 OCR 상시 적용 |
491
491
  | `detectFormat(buffer)` | 동기 매직 바이트 감지 — 하위 호환을 위해 ZIP 은 `hwpx`, OLE2 는 `hwp` 반환 |
492
492
  | `await detectZipFormat(buffer)` | ZIP 내부 구조로 `hwpx`·`xlsx`·`docx`·`pptx`·`unknown` 구분 |
493
493
  | `detectOle2Format(buffer)` | OLE2 내부 스트림으로 `hwp`·`xls`·`unknown` 구분 |
494
494
 
495
- PPTX 는 감지만 합니다(`parse()` 는 `UNSUPPORTED_FORMAT`). ZIP 종류를 가르려면 `detectFormat()` 이 `hwpx` 일 때 `await detectZipFormat(buffer)` 를 쓰세요.
495
+ ZIP 종류를 가르려면 `detectFormat()` 이 `hwpx` 일 때 `await detectZipFormat(buffer)` 를 쓰세요.
496
496
 
497
497
  ### 비교 · 양식 · 편집
498
498
 
@@ -572,6 +572,7 @@ import type {
572
572
  | **XLSX** (Excel) | ZIP + XML DOM | 공유 문자열, 병합 셀, 다중 시트, 수식 표시, 날짜 셀 ISO 변환, 대형 시트 스트리밍 |
573
573
  | **XLS** (Excel 97~2003) | OLE2 + BIFF8 | Workbook 스트림, SST 공유 문자열, 셀·시트 추출 |
574
574
  | **DOCX** (Word) | ZIP + XML DOM | 스타일 헤딩, 번호 매기기(실제 번호 라벨), 각주, 하이퍼링크, 이미지 추출 |
575
+ | **PPTX** (PowerPoint) | ZIP + XML DOM | 발표 순서(sldIdLst), 슬라이드 = 쪽, 제목 개체 틀 헤딩, 본문 글머리 목록(2단), 병합 표, 발표자 노트(인용), 이미지 추출, 숨긴 슬라이드 제외. 차트·SmartArt 글은 경고만 |
575
576
  | **이미지** (PNG/JPG/WebP) | sharp + 내장 OCR | 스크린샷·스캔 이미지 직접 입력, 래스터 괘선으로 표 복원 |
576
577
 
577
578
  ---
@@ -39,6 +39,7 @@ import {
39
39
  parseHwpx,
40
40
  parseImage,
41
41
  parsePdf,
42
+ parsePptx,
42
43
  parseXls,
43
44
  parseXlsx,
44
45
  patchHwp,
@@ -50,17 +51,17 @@ import {
50
51
  unknownFontWarnings,
51
52
  usesGaejosikMunche,
52
53
  validateHwpx
53
- } from "./chunk-UTVMLJZE.js";
54
+ } from "./chunk-2I2RTJJ5.js";
54
55
  import {
55
56
  blocksToPages
56
- } from "./chunk-PWRY4W6Q.js";
57
+ } from "./chunk-6GLTGOP6.js";
57
58
  import {
58
59
  applySplices,
59
60
  buildParagraphSplices,
60
61
  buildRangeSplices,
61
62
  placeSealHwpx,
62
63
  scanSectionXml
63
- } from "./chunk-Z4KCEERM.js";
64
+ } from "./chunk-NES5U4JK.js";
64
65
  import {
65
66
  DEFAULT_REDACT_RULES,
66
67
  redactMarkdown,
@@ -68,7 +69,7 @@ import {
68
69
  } from "./chunk-3WSNLH4B.js";
69
70
  import {
70
71
  blocksToChunks
71
- } from "./chunk-2VFZQ634.js";
72
+ } from "./chunk-RRURZDEK.js";
72
73
  import {
73
74
  SPACE_EM_FIXED,
74
75
  SPACE_EM_FONT,
@@ -93,20 +94,20 @@ import {
93
94
  renderSceneToHtml,
94
95
  simulateWrap,
95
96
  simulateWrapKeepWord
96
- } from "./chunk-CWJ5KY2F.js";
97
+ } from "./chunk-ZN3LHNJG.js";
97
98
  import "./chunk-7FCNOKOR.js";
98
- import "./chunk-TMC4A3FM.js";
99
+ import "./chunk-UVUKT3IQ.js";
99
100
  import "./chunk-VQFA55IC.js";
100
- import "./chunk-6N5BOPJI.js";
101
+ import "./chunk-RSDUH4XF.js";
101
102
  import {
102
103
  blocksToMarkdown,
103
104
  flattenLayoutTables,
104
105
  hasStructuredCellContent
105
- } from "./chunk-K35WIYBD.js";
106
- import "./chunk-AQUNBGXH.js";
106
+ } from "./chunk-W3RADOLO.js";
107
+ import "./chunk-KSJ7GKNQ.js";
107
108
  import {
108
109
  VERSION
109
- } from "./chunk-I7YWXECO.js";
110
+ } from "./chunk-VGDTONTB.js";
110
111
  export {
111
112
  BUILTIN_TEMPLATES,
112
113
  DEFAULT_REDACT_RULES,
@@ -172,6 +173,7 @@ export {
172
173
  parseHwpx,
173
174
  parseImage,
174
175
  parsePdf,
176
+ parsePptx,
175
177
  parseXls,
176
178
  parseXlsx,
177
179
  patchHwp,
@@ -196,4 +198,4 @@ export {
196
198
  usesGaejosikMunche,
197
199
  validateHwpx
198
200
  };
199
- //# sourceMappingURL=-X4KTLQC6.js.map
201
+ //# sourceMappingURL=-WOKB25R2.js.map