kordoc 4.7.2 → 4.7.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 (131) hide show
  1. package/README.md +5 -1
  2. package/dist/{-CVPGGSAB.js → -WYNJOQ6P.js} +9 -9
  3. package/dist/{chunk-GLZMUKYL.js → chunk-3NKSSL44.js} +3 -3
  4. package/dist/{chunk-O4VLHQVG.js → chunk-3P5YCJQE.js} +2 -2
  5. package/dist/{chunk-JMWBMGNH.js → chunk-46F5RMU7.js} +2 -2
  6. package/dist/{chunk-QKHN7LEV.js → chunk-4HZN7EZZ.js} +2 -2
  7. package/dist/{chunk-4VNUQYUE.js → chunk-4KGGVCYX.js} +1 -1
  8. package/dist/chunk-4KGGVCYX.js.map +1 -0
  9. package/dist/{chunk-BSWJCSG7.js → chunk-CGJDCZA3.js} +2 -2
  10. package/dist/chunk-DCZVOIEO.cjs.map +1 -1
  11. package/dist/{chunk-DZBMQC2N.cjs → chunk-E6DONLTM.cjs} +2 -2
  12. package/dist/chunk-E6DONLTM.cjs.map +1 -0
  13. package/dist/{chunk-URTDBXV6.cjs → chunk-EV53YE3W.cjs} +1 -1
  14. package/dist/chunk-EV53YE3W.cjs.map +1 -0
  15. package/dist/chunk-GS7T56RP.cjs.map +1 -1
  16. package/dist/{chunk-Y3VDFFAW.js → chunk-HJV4BVQI.js} +2 -2
  17. package/dist/{chunk-VXB52EWX.js → chunk-IMFIACHP.js} +2 -2
  18. package/dist/{chunk-IVSEGHI2.js → chunk-JKJEBDP7.js} +3 -3
  19. package/dist/{chunk-E2XTVK7H.cjs → chunk-KE6DLZAW.cjs} +11 -11
  20. package/dist/chunk-KE6DLZAW.cjs.map +1 -0
  21. package/dist/{chunk-P7HPLWEP.js → chunk-KEGAEHWO.js} +2 -2
  22. package/dist/{chunk-I4TP7HYB.js → chunk-KSATSTC5.js} +1 -1
  23. package/dist/chunk-KSATSTC5.js.map +1 -0
  24. package/dist/{chunk-7CWNBDWQ.js → chunk-LMHVMGEC.js} +3 -3
  25. package/dist/{chunk-IN2AOMX6.js → chunk-NYLYIN55.js} +3 -3
  26. package/dist/{chunk-PGDJUJ4L.js → chunk-P663PYWV.js} +2 -2
  27. package/dist/{chunk-PV6WSN6E.cjs → chunk-QETZP25M.cjs} +3 -3
  28. package/dist/chunk-QETZP25M.cjs.map +1 -0
  29. package/dist/{chunk-YU3PLOX4.cjs → chunk-QGATKC4R.cjs} +6 -6
  30. package/dist/chunk-QGATKC4R.cjs.map +1 -0
  31. package/dist/{chunk-46VU6YXF.cjs → chunk-R4LXZRYP.cjs} +4 -4
  32. package/dist/chunk-R4LXZRYP.cjs.map +1 -0
  33. package/dist/{chunk-TYIFZT5H.js → chunk-RQVFFSAO.js} +2 -2
  34. package/dist/{chunk-IMY4LQ3J.js → chunk-TXQQ7URG.js} +2 -2
  35. package/dist/{chunk-LJW5EQXS.js → chunk-VZ3AQVBN.js} +8 -3
  36. package/dist/chunk-VZ3AQVBN.js.map +1 -0
  37. package/dist/{chunk-QXC5NPO2.js → chunk-W5NZYPRQ.js} +386 -80
  38. package/dist/chunk-W5NZYPRQ.js.map +1 -0
  39. package/dist/{chunk-FJBOVJAG.js → chunk-XOO6YEZE.js} +3 -3
  40. package/dist/{chunk-VEBTOI3I.js → chunk-Y7T5Z4DC.js} +3 -3
  41. package/dist/chunks-LWAOHTK2.js +10 -0
  42. package/dist/cli.js +22 -22
  43. package/dist/cli.js.map +1 -1
  44. package/dist/{formula-RTGCS55B.js → formula-IFKZZPD2.js} +4 -4
  45. package/dist/{formula-7D3MLOSV.cjs → formula-PDMZMBIP.cjs} +9 -9
  46. package/dist/formula-PDMZMBIP.cjs.map +1 -0
  47. package/dist/{formula-GHGK7T3S.js → formula-V6EAYHMF.js} +3 -3
  48. package/dist/{image-ocr-PRI2JKDW.cjs → image-ocr-75WGMVU6.cjs} +12 -12
  49. package/dist/image-ocr-75WGMVU6.cjs.map +1 -0
  50. package/dist/{image-ocr-2UMWFGRS.js → image-ocr-B7TMIG3F.js} +8 -8
  51. package/dist/{image-ocr-TQ5THN35.js → image-ocr-XHBZONFZ.js} +6 -6
  52. package/dist/index.cjs +864 -553
  53. package/dist/index.cjs.map +1 -1
  54. package/dist/index.d.cts +10 -2
  55. package/dist/index.d.ts +10 -2
  56. package/dist/index.js +388 -77
  57. package/dist/index.js.map +1 -1
  58. package/dist/mcp.js +19 -18
  59. package/dist/mcp.js.map +1 -1
  60. package/dist/{model-bundle-5RLZV7P2.js → model-bundle-Q4HQXJQG.js} +5 -5
  61. package/dist/{models-RSHR2BY7.js → models-QQA7OQHY.js} +5 -5
  62. package/dist/page-range-P7SDW6LR.cjs.map +1 -1
  63. package/dist/{parser-SCQ7NJUJ.cjs → parser-4CBOPTVY.cjs} +28 -28
  64. package/dist/parser-4CBOPTVY.cjs.map +1 -0
  65. package/dist/{parser-QPMTNRPU.js → parser-HT7GZOF2.js} +8 -8
  66. package/dist/{parser-FXEIK3VJ.js.map → parser-HT7GZOF2.js.map} +1 -1
  67. package/dist/{parser-FXEIK3VJ.js → parser-Z36MZUHS.js} +8 -8
  68. package/dist/{parser-QPMTNRPU.js.map → parser-Z36MZUHS.js.map} +1 -1
  69. package/dist/pdf-ocr-6ZNGDVC6.cjs +14 -0
  70. package/dist/pdf-ocr-6ZNGDVC6.cjs.map +1 -0
  71. package/dist/pdf-ocr-NTXRJI4T.js +13 -0
  72. package/dist/pdf-ocr-TYMCEUPH.js +16 -0
  73. package/dist/{profile-io-I4UGTNP6.js → profile-io-ACYRLCSR.js} +3 -3
  74. package/dist/{rasterize-QY3XJKCH.js → rasterize-QYCLEH2J.js} +2 -2
  75. package/dist/render-5Y2US4IM.js +10 -0
  76. package/dist/seal-VU6JS2QD.js +10 -0
  77. package/dist/{setup-T2BY3VME.js → setup-MG3YYKXU.js} +3 -3
  78. package/dist/{watch-JJE2UGVK.js → watch-AZIY6AWC.js} +10 -10
  79. package/package.json +1 -1
  80. package/dist/chunk-46VU6YXF.cjs.map +0 -1
  81. package/dist/chunk-4VNUQYUE.js.map +0 -1
  82. package/dist/chunk-DZBMQC2N.cjs.map +0 -1
  83. package/dist/chunk-E2XTVK7H.cjs.map +0 -1
  84. package/dist/chunk-I4TP7HYB.js.map +0 -1
  85. package/dist/chunk-LJW5EQXS.js.map +0 -1
  86. package/dist/chunk-PV6WSN6E.cjs.map +0 -1
  87. package/dist/chunk-QXC5NPO2.js.map +0 -1
  88. package/dist/chunk-URTDBXV6.cjs.map +0 -1
  89. package/dist/chunk-YU3PLOX4.cjs.map +0 -1
  90. package/dist/chunks-RNP6VLGK.js +0 -10
  91. package/dist/formula-7D3MLOSV.cjs.map +0 -1
  92. package/dist/image-ocr-PRI2JKDW.cjs.map +0 -1
  93. package/dist/parser-SCQ7NJUJ.cjs.map +0 -1
  94. package/dist/pdf-ocr-HPRM24SP.js +0 -16
  95. package/dist/pdf-ocr-I6DISTBR.js +0 -13
  96. package/dist/pdf-ocr-JNWL65YW.cjs +0 -14
  97. package/dist/pdf-ocr-JNWL65YW.cjs.map +0 -1
  98. package/dist/render-HEQX5DII.js +0 -10
  99. package/dist/seal-NB2YJ5F4.js +0 -10
  100. /package/dist/{-CVPGGSAB.js.map → -WYNJOQ6P.js.map} +0 -0
  101. /package/dist/{chunk-GLZMUKYL.js.map → chunk-3NKSSL44.js.map} +0 -0
  102. /package/dist/{chunk-O4VLHQVG.js.map → chunk-3P5YCJQE.js.map} +0 -0
  103. /package/dist/{chunk-JMWBMGNH.js.map → chunk-46F5RMU7.js.map} +0 -0
  104. /package/dist/{chunk-QKHN7LEV.js.map → chunk-4HZN7EZZ.js.map} +0 -0
  105. /package/dist/{chunk-BSWJCSG7.js.map → chunk-CGJDCZA3.js.map} +0 -0
  106. /package/dist/{chunk-Y3VDFFAW.js.map → chunk-HJV4BVQI.js.map} +0 -0
  107. /package/dist/{chunk-VXB52EWX.js.map → chunk-IMFIACHP.js.map} +0 -0
  108. /package/dist/{chunk-IVSEGHI2.js.map → chunk-JKJEBDP7.js.map} +0 -0
  109. /package/dist/{chunk-P7HPLWEP.js.map → chunk-KEGAEHWO.js.map} +0 -0
  110. /package/dist/{chunk-7CWNBDWQ.js.map → chunk-LMHVMGEC.js.map} +0 -0
  111. /package/dist/{chunk-IN2AOMX6.js.map → chunk-NYLYIN55.js.map} +0 -0
  112. /package/dist/{chunk-PGDJUJ4L.js.map → chunk-P663PYWV.js.map} +0 -0
  113. /package/dist/{chunk-TYIFZT5H.js.map → chunk-RQVFFSAO.js.map} +0 -0
  114. /package/dist/{chunk-IMY4LQ3J.js.map → chunk-TXQQ7URG.js.map} +0 -0
  115. /package/dist/{chunk-FJBOVJAG.js.map → chunk-XOO6YEZE.js.map} +0 -0
  116. /package/dist/{chunk-VEBTOI3I.js.map → chunk-Y7T5Z4DC.js.map} +0 -0
  117. /package/dist/{chunks-RNP6VLGK.js.map → chunks-LWAOHTK2.js.map} +0 -0
  118. /package/dist/{formula-RTGCS55B.js.map → formula-IFKZZPD2.js.map} +0 -0
  119. /package/dist/{formula-GHGK7T3S.js.map → formula-V6EAYHMF.js.map} +0 -0
  120. /package/dist/{image-ocr-2UMWFGRS.js.map → image-ocr-B7TMIG3F.js.map} +0 -0
  121. /package/dist/{image-ocr-TQ5THN35.js.map → image-ocr-XHBZONFZ.js.map} +0 -0
  122. /package/dist/{model-bundle-5RLZV7P2.js.map → model-bundle-Q4HQXJQG.js.map} +0 -0
  123. /package/dist/{models-RSHR2BY7.js.map → models-QQA7OQHY.js.map} +0 -0
  124. /package/dist/{pdf-ocr-HPRM24SP.js.map → pdf-ocr-NTXRJI4T.js.map} +0 -0
  125. /package/dist/{pdf-ocr-I6DISTBR.js.map → pdf-ocr-TYMCEUPH.js.map} +0 -0
  126. /package/dist/{profile-io-I4UGTNP6.js.map → profile-io-ACYRLCSR.js.map} +0 -0
  127. /package/dist/{rasterize-QY3XJKCH.js.map → rasterize-QYCLEH2J.js.map} +0 -0
  128. /package/dist/{render-HEQX5DII.js.map → render-5Y2US4IM.js.map} +0 -0
  129. /package/dist/{seal-NB2YJ5F4.js.map → seal-VU6JS2QD.js.map} +0 -0
  130. /package/dist/{setup-T2BY3VME.js.map → setup-MG3YYKXU.js.map} +0 -0
  131. /package/dist/{watch-JJE2UGVK.js.map → watch-AZIY6AWC.js.map} +0 -0
@@ -7,11 +7,11 @@ import {
7
7
  createXmlParser,
8
8
  findChildByLocalName,
9
9
  parseRenderStyles
10
- } from "./chunk-LJW5EQXS.js";
10
+ } from "./chunk-VZ3AQVBN.js";
11
11
  import {
12
12
  KordocError,
13
13
  precheckZipSize
14
- } from "./chunk-VXB52EWX.js";
14
+ } from "./chunk-IMFIACHP.js";
15
15
 
16
16
  // src/render/svg-render.ts
17
17
  import JSZip from "jszip";
@@ -1285,4 +1285,4 @@ export {
1285
1285
  fitRatioForFewerLines,
1286
1286
  renderHwpxToSvg
1287
1287
  };
1288
- //# sourceMappingURL=chunk-FJBOVJAG.js.map
1288
+ //# sourceMappingURL=chunk-XOO6YEZE.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  ensureModelsIn,
3
3
  getModelsDir
4
- } from "./chunk-Y3VDFFAW.js";
4
+ } from "./chunk-HJV4BVQI.js";
5
5
  import {
6
6
  extractPageBlocksWithLines
7
- } from "./chunk-7CWNBDWQ.js";
7
+ } from "./chunk-LMHVMGEC.js";
8
8
 
9
9
  // src/ocr/ruling-lines.ts
10
10
  var INK_LUMA_MAX = 190;
@@ -568,4 +568,4 @@ export {
568
568
  runPdfOcr,
569
569
  ocrItemsToBlocks
570
570
  };
571
- //# sourceMappingURL=chunk-VEBTOI3I.js.map
571
+ //# sourceMappingURL=chunk-Y7T5Z4DC.js.map
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ blocksToChunks
4
+ } from "./chunk-CGJDCZA3.js";
5
+ import "./chunk-KEGAEHWO.js";
6
+ import "./chunk-IMFIACHP.js";
7
+ export {
8
+ blocksToChunks
9
+ };
10
+ //# sourceMappingURL=chunks-LWAOHTK2.js.map
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  parseFormatProfileJson
4
- } from "./chunk-O4VLHQVG.js";
4
+ } from "./chunk-3P5YCJQE.js";
5
5
  import {
6
6
  BODY_FONTS,
7
7
  BULLET2_CHARS,
@@ -27,31 +27,31 @@ import {
27
27
  readBuiltinTemplate,
28
28
  resolveBuiltinTemplate,
29
29
  unknownFontWarnings
30
- } from "./chunk-QXC5NPO2.js";
30
+ } from "./chunk-W5NZYPRQ.js";
31
31
  import "./chunk-7FCNOKOR.js";
32
- import "./chunk-4VNUQYUE.js";
32
+ import "./chunk-4KGGVCYX.js";
33
33
  import "./chunk-MOL7MDBG.js";
34
- import "./chunk-IN2AOMX6.js";
34
+ import "./chunk-NYLYIN55.js";
35
35
  import "./chunk-DZIXKL7E.js";
36
- import "./chunk-BSWJCSG7.js";
36
+ import "./chunk-CGJDCZA3.js";
37
37
  import {
38
38
  blocksToMarkdown
39
- } from "./chunk-P7HPLWEP.js";
40
- import "./chunk-FJBOVJAG.js";
41
- import "./chunk-LJW5EQXS.js";
39
+ } from "./chunk-KEGAEHWO.js";
40
+ import "./chunk-XOO6YEZE.js";
41
+ import "./chunk-VZ3AQVBN.js";
42
42
  import {
43
43
  VERSION,
44
44
  classifyError,
45
45
  sanitizeError,
46
46
  toArrayBuffer
47
- } from "./chunk-VXB52EWX.js";
47
+ } from "./chunk-IMFIACHP.js";
48
48
 
49
49
  // src/cli.ts
50
50
  import { readFileSync, writeFileSync, mkdirSync, statSync } from "fs";
51
51
  import { basename, dirname, resolve, extname } from "path";
52
52
  import { Command } from "commander";
53
53
  var program = new Command();
54
- program.name("kordoc").description("\uBAA8\uB450 \uD30C\uC2F1\uD574\uBC84\uB9AC\uACA0\uB2E4 \u2014 HWP, HWPX, PDF, XLSX, DOCX, \uC774\uBBF8\uC9C0(PNG/JPG/WebP) \u2192 Markdown").version(VERSION).argument("<files...>", "\uBCC0\uD658\uD560 \uD30C\uC77C \uACBD\uB85C (HWP, HWPX, PDF, XLSX, DOCX, PNG/JPG/WebP \u2014 \uC774\uBBF8\uC9C0\uB294 OCR \uC790\uB3D9 \uC801\uC6A9)").option("-o, --output <path>", "\uCD9C\uB825 \uD30C\uC77C \uACBD\uB85C (\uB2E8\uC77C \uD30C\uC77C \uC2DC)").option("-d, --out-dir <dir>", "\uCD9C\uB825 \uB514\uB809\uD1A0\uB9AC (\uB2E4\uC911 \uD30C\uC77C \uC2DC)").option("-p, --pages <range>", "\uD398\uC774\uC9C0/\uC139\uC158 \uBC94\uC704 (\uC608: 1-3, 1,3,5)").option("--format <type>", "\uCD9C\uB825 \uD615\uC2DD: markdown (\uAE30\uBCF8), json, chunks (RAG\uC6A9 \uAD6C\uC870 \uCCAD\uD06C JSON \u2014 \uD5E4\uB529\xB7\uAC1C\uC870\uC2DD \uC704\uACC4 breadcrumb + \uD45C \uB3C5\uB9BD \uCCAD\uD06C)", "markdown").option("--no-header-footer", "PDF \uBA38\uB9AC\uAE00/\uBC14\uB2E5\uAE00 \uC790\uB3D9 \uC81C\uAC70 \uB044\uAE30 (\uAE30\uBCF8: \uC81C\uAC70\uD568)").option("--no-tables", "PDF \uD45C \uAC10\uC9C0 \uB044\uAE30 \u2014 \uD14C\uB450\uB9AC \uBC15\uC2A4\uB97C \uD45C\uB85C \uC624\uC778\uD574 \uC77D\uAE30 \uC21C\uC11C\uAC00 \uB4A4\uC9D1\uD788\uB294 \uBB38\uC11C(2\uB2E8 \uC2DC\uD5D8\uC9C0 \uB4F1)\uC5D0\uC11C \uC790\uC5F0 \uC77D\uAE30\uC21C \uD14D\uC2A4\uD2B8\uB9CC \uBF51\uB294\uB2E4 (#64)").option("--formula-ocr", "PDF \uC218\uC2DD OCR \uD65C\uC131\uD654 (MFD+MFR ONNX, \uCCAB \uC0AC\uC6A9 \uC2DC \uBAA8\uB378 ~155MB \uC790\uB3D9 \uB2E4\uC6B4\uB85C\uB4DC)").option("--ocr", "\uC2A4\uCE94/\uC774\uBBF8\uC9C0 PDF \uD14D\uC2A4\uD2B8 OCR (\uB0B4\uC7A5 PP-OCRv5 korean, \uCCAB \uC0AC\uC6A9 \uC2DC \uBAA8\uB378 ~18MB \uC790\uB3D9 \uB2E4\uC6B4\uB85C\uB4DC \u2014 OCR \uD544\uC694 \uD398\uC774\uC9C0\uB9CC \uC778\uC2DD)").option("--ocr-force", "\uC804 \uD398\uC774\uC9C0 \uAC15\uC81C OCR (\uD14D\uC2A4\uD2B8\uCE35\uC774 \uC788\uC5B4\uB3C4 \uBB34\uC2DC\uD558\uACE0 \uC7AC\uC778\uC2DD)").option("--dedupe-headers", "HWP5 \uB808\uC774\uC544\uC6C3 \uD45C \uD398\uC774\uC9C0 \uBC18\uBCF5 \uB7EC\uB2DD \uD5E4\uB354 \uC911\uBCF5 \uC81C\uAC70 (\uAE30\uBCF8 off \u2014 \uBD99\uC784\uBCC4 \uC7AC\uBC88\uD638 \uC624\uC0AD\uC81C \uC8FC\uC758)").option("--keep-empty-cols", "\uD45C \uC624\uB978\uCABD \uB05D \uBE48 \uC5F4(\uC11C\uC2DD \uC785\uB825\uB780) \uBCF4\uC874 (#47, \uAE30\uBCF8 off: \uD6C4\uD589 \uBE48 \uC5F4 \uD2B8\uB9BC)").option("--keep-empty-paragraphs", "\uBE48 \uBB38\uB2E8 \uBCF4\uC874 \u2014 \uBCF8\uBB38\uC740 \uBE48 paragraph \uBE14\uB85D, \uD45C \uC140\uC740 \uBE48 \uC904\uB85C (#57, \uAE30\uBCF8 off: \uBE48 \uBB38\uB2E8 \uC81C\uAC70)").option("--inline-images", "\uC774\uBBF8\uC9C0\uB97C base64 data URI \uB85C \uB9C8\uD06C\uB2E4\uC6B4\uC5D0 \uC778\uB77C\uC778 (BMP\u2192PNG \uC555\uCD95, HWP5 \uC804\uC6A9 \u2014 \uC778\uB77C\uC778\uB41C \uACBD\uC6B0\uB9CC \uD30C\uC77C \uBBF8\uC800\uC7A5, \uADF8 \uC678 \uD3EC\uB9F7\uC740 \uC800\uC7A5 \uC720\uC9C0)").option("--image-refs", "--format json \uC5D0\uC11C \uC774\uBBF8\uC9C0 \uBC14\uC774\uD2B8\uB97C \uC778\uB77C\uC778\uD558\uC9C0 \uC54A\uACE0 \uD30C\uC77C \uCC38\uC870(images/<\uD30C\uC77C\uBA85>)\uB9CC \uB0A8\uAE40 (#65 \u2014 \uC774\uBBF8\uC9C0\uAC00 \uC218\uBC31 \uC7A5\uC778 \uBB38\uC11C\uC758 \uC9C1\uB82C\uD654 \uD55C\uACC4 \uD68C\uD53C, -o/-d \uC640 \uD568\uAED8 \uC0AC\uC6A9)").option("--password <pw>", "\uC554\uD638\uB85C \uBCF4\uD638\uB41C \uBB38\uC11C\uC758 \uC5F4\uAE30 \uC554\uD638 (#59, HWPX\xB7HWP3\xB7HWP5. \uD55C\uCEF4 DRM \uBB38\uC11C\uB294 \uD574\uB2F9 \uC5C6\uC74C)").option("--silent", "\uC9C4\uD589 \uBA54\uC2DC\uC9C0 \uC228\uAE30\uAE30").action(async (files, opts) => {
54
+ program.name("kordoc").description("\uBAA8\uB450 \uD30C\uC2F1\uD574\uBC84\uB9AC\uACA0\uB2E4 \u2014 HWP, HWPX, PDF, XLSX, DOCX, \uC774\uBBF8\uC9C0(PNG/JPG/WebP) \u2192 Markdown").version(VERSION).argument("<files...>", "\uBCC0\uD658\uD560 \uD30C\uC77C \uACBD\uB85C (HWP, HWPX, PDF, XLSX, DOCX, PNG/JPG/WebP \u2014 \uC774\uBBF8\uC9C0\uB294 OCR \uC790\uB3D9 \uC801\uC6A9)").option("-o, --output <path>", "\uCD9C\uB825 \uD30C\uC77C \uACBD\uB85C (\uB2E8\uC77C \uD30C\uC77C \uC2DC)").option("-d, --out-dir <dir>", "\uCD9C\uB825 \uB514\uB809\uD1A0\uB9AC (\uB2E4\uC911 \uD30C\uC77C \uC2DC)").option("-p, --pages <range>", "\uD398\uC774\uC9C0 \uBC94\uC704 (\uC608: 1-3, 1,3,5) \u2014 \uD55C\uCEF4 \uC800\uC7A5\uBCF8\uC740 \uC2E4\uC81C \uD398\uC774\uC9C0, \uC870\uD310 \uCE90\uC2DC \uC5C6\uC73C\uBA74 \uC139\uC158 \uADFC\uC0AC").option("--format <type>", "\uCD9C\uB825 \uD615\uC2DD: markdown (\uAE30\uBCF8), json, chunks (RAG\uC6A9 \uAD6C\uC870 \uCCAD\uD06C JSON \u2014 \uD5E4\uB529\xB7\uAC1C\uC870\uC2DD \uC704\uACC4 breadcrumb + \uD45C \uB3C5\uB9BD \uCCAD\uD06C)", "markdown").option("--no-header-footer", "PDF \uBA38\uB9AC\uAE00/\uBC14\uB2E5\uAE00 \uC790\uB3D9 \uC81C\uAC70 \uB044\uAE30 (\uAE30\uBCF8: \uC81C\uAC70\uD568)").option("--no-tables", "PDF \uD45C \uAC10\uC9C0 \uB044\uAE30 \u2014 \uD14C\uB450\uB9AC \uBC15\uC2A4\uB97C \uD45C\uB85C \uC624\uC778\uD574 \uC77D\uAE30 \uC21C\uC11C\uAC00 \uB4A4\uC9D1\uD788\uB294 \uBB38\uC11C(2\uB2E8 \uC2DC\uD5D8\uC9C0 \uB4F1)\uC5D0\uC11C \uC790\uC5F0 \uC77D\uAE30\uC21C \uD14D\uC2A4\uD2B8\uB9CC \uBF51\uB294\uB2E4 (#64)").option("--formula-ocr", "PDF \uC218\uC2DD OCR \uD65C\uC131\uD654 (MFD+MFR ONNX, \uCCAB \uC0AC\uC6A9 \uC2DC \uBAA8\uB378 ~155MB \uC790\uB3D9 \uB2E4\uC6B4\uB85C\uB4DC)").option("--ocr", "\uC2A4\uCE94/\uC774\uBBF8\uC9C0 PDF \uD14D\uC2A4\uD2B8 OCR (\uB0B4\uC7A5 PP-OCRv5 korean, \uCCAB \uC0AC\uC6A9 \uC2DC \uBAA8\uB378 ~18MB \uC790\uB3D9 \uB2E4\uC6B4\uB85C\uB4DC \u2014 OCR \uD544\uC694 \uD398\uC774\uC9C0\uB9CC \uC778\uC2DD)").option("--ocr-force", "\uC804 \uD398\uC774\uC9C0 \uAC15\uC81C OCR (\uD14D\uC2A4\uD2B8\uCE35\uC774 \uC788\uC5B4\uB3C4 \uBB34\uC2DC\uD558\uACE0 \uC7AC\uC778\uC2DD)").option("--dedupe-headers", "HWP5 \uB808\uC774\uC544\uC6C3 \uD45C \uD398\uC774\uC9C0 \uBC18\uBCF5 \uB7EC\uB2DD \uD5E4\uB354 \uC911\uBCF5 \uC81C\uAC70 (\uAE30\uBCF8 off \u2014 \uBD99\uC784\uBCC4 \uC7AC\uBC88\uD638 \uC624\uC0AD\uC81C \uC8FC\uC758)").option("--keep-empty-cols", "\uD45C \uC624\uB978\uCABD \uB05D \uBE48 \uC5F4(\uC11C\uC2DD \uC785\uB825\uB780) \uBCF4\uC874 (#47, \uAE30\uBCF8 off: \uD6C4\uD589 \uBE48 \uC5F4 \uD2B8\uB9BC)").option("--keep-empty-paragraphs", "\uBE48 \uBB38\uB2E8 \uBCF4\uC874 \u2014 \uBCF8\uBB38\uC740 \uBE48 paragraph \uBE14\uB85D, \uD45C \uC140\uC740 \uBE48 \uC904\uB85C (#57, \uAE30\uBCF8 off: \uBE48 \uBB38\uB2E8 \uC81C\uAC70)").option("--inline-images", "\uC774\uBBF8\uC9C0\uB97C base64 data URI \uB85C \uB9C8\uD06C\uB2E4\uC6B4\uC5D0 \uC778\uB77C\uC778 (BMP\u2192PNG \uC555\uCD95, HWP5 \uC804\uC6A9 \u2014 \uC778\uB77C\uC778\uB41C \uACBD\uC6B0\uB9CC \uD30C\uC77C \uBBF8\uC800\uC7A5, \uADF8 \uC678 \uD3EC\uB9F7\uC740 \uC800\uC7A5 \uC720\uC9C0)").option("--image-refs", "--format json \uC5D0\uC11C \uC774\uBBF8\uC9C0 \uBC14\uC774\uD2B8\uB97C \uC778\uB77C\uC778\uD558\uC9C0 \uC54A\uACE0 \uD30C\uC77C \uCC38\uC870(images/<\uD30C\uC77C\uBA85>)\uB9CC \uB0A8\uAE40 (#65 \u2014 \uC774\uBBF8\uC9C0\uAC00 \uC218\uBC31 \uC7A5\uC778 \uBB38\uC11C\uC758 \uC9C1\uB82C\uD654 \uD55C\uACC4 \uD68C\uD53C, -o/-d \uC640 \uD568\uAED8 \uC0AC\uC6A9)").option("--password <pw>", "\uC554\uD638\uB85C \uBCF4\uD638\uB41C \uBB38\uC11C\uC758 \uC5F4\uAE30 \uC554\uD638 (#59, HWPX\xB7HWP3\xB7HWP5. \uD55C\uCEF4 DRM \uBB38\uC11C\uB294 \uD574\uB2F9 \uC5C6\uC74C)").option("--silent", "\uC9C4\uD589 \uBA54\uC2DC\uC9C0 \uC228\uAE30\uAE30").action(async (files, opts) => {
55
55
  const validFormats = ["markdown", "json", "chunks"];
56
56
  if (!validFormats.includes(opts.format)) {
57
57
  process.stderr.write(`[kordoc] \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uD615\uC2DD: ${opts.format} (markdown, json, chunks)
@@ -141,7 +141,7 @@ program.name("kordoc").description("\uBAA8\uB450 \uD30C\uC2F1\uD574\uBC84\uB9AC\
141
141
  `);
142
142
  }
143
143
  } else if (opts.format === "chunks") {
144
- const { blocksToChunks } = await import("./chunks-RNP6VLGK.js");
144
+ const { blocksToChunks } = await import("./chunks-LWAOHTK2.js");
145
145
  output = JSON.stringify(blocksToChunks(result.blocks), null, 2);
146
146
  } else {
147
147
  output = markdown;
@@ -196,7 +196,7 @@ program.command("watch <dir>").description("\uB514\uB809\uD1A0\uB9AC \uAC10\uC2D
196
196
  if (command.getOptionValueSource("format") === "default" && program.getOptionValueSource("format") === "cli") {
197
197
  opts.format = rootOpts.format;
198
198
  }
199
- const { watchDirectory } = await import("./watch-JJE2UGVK.js");
199
+ const { watchDirectory } = await import("./watch-AZIY6AWC.js");
200
200
  await watchDirectory({
201
201
  dir,
202
202
  outDir: opts.outDir,
@@ -418,7 +418,7 @@ program.command("fill [file]").description("\uC11C\uC2DD \uBB38\uC11C\uC758 \uBE
418
418
  });
419
419
  program.command("seal <file>").description('\uB3C4\uC7A5/\uC11C\uBA85 \uC774\uBBF8\uC9C0\uB97C \uC575\uCEE4 \uBB38\uAD6C \uC704\uC5D0 \uBD80\uC720 \uBC30\uCE58 (\uD45C/\uD398\uC774\uC9C0 \uBD88\uD655\uC7A5) \u2014 kordoc seal \uC2E0\uCCAD\uC11C.hwpx --image \uB3C4\uC7A5.png --anchor "(\uC778)" -o \uACB0\uACFC.hwpx').requiredOption("--image <path>", "\uB3C4\uC7A5/\uC11C\uBA85 \uC774\uBBF8\uC9C0 (\uD22C\uBA85 \uBC30\uACBD PNG \uAD8C\uC7A5)").option("--anchor <text>", "\uC575\uCEE4 \uBB38\uAD6C", "(\uC778)").option("-n, --occurrence <num>", "\uAC19\uC740 \uC575\uCEE4\uAC00 \uC5EC\uB7FF\uC77C \uB54C 0-based \uC120\uD0DD", "0").option("--size-mm <num>", "\uB3C4\uC7A5 \uD55C \uBCC0 \uD06C\uAE30 mm (\uAE30\uBCF8: \uC904\uB192\uC774\xD71.6, 7~18 \uD074\uB7A8\uD504)").option("--mode <mode>", "overlap(\uBB38\uAD6C \uC704 \uACB9\uCE68) | right(\uC624\uB978\uCABD \uC606) | auto", "auto").option("--dx <mm>", "x \uBBF8\uC138\uC870\uC815 mm", "0").option("--dy <mm>", "y \uBBF8\uC138\uC870\uC815 mm", "0").option("-o, --output <path>", "\uCD9C\uB825 \uACBD\uB85C (\uAE30\uBCF8: <\uC785\uB825>.sealed.hwpx)").option("--silent", "\uC9C4\uD589 \uBA54\uC2DC\uC9C0 \uC228\uAE30\uAE30").action(async (file, opts) => {
420
420
  try {
421
- const { placeSealHwpx, detectFormat: detectFormat2 } = await import("./-CVPGGSAB.js");
421
+ const { placeSealHwpx, detectFormat: detectFormat2 } = await import("./-WYNJOQ6P.js");
422
422
  const rootOpts = program.opts();
423
423
  const output = opts.output ?? rootOpts.output;
424
424
  const silent = opts.silent ?? rootOpts.silent;
@@ -496,7 +496,7 @@ program.command("seal <file>").description('\uB3C4\uC7A5/\uC11C\uBA85 \uC774\uBB
496
496
  });
497
497
  program.command("patch <original> <edited>").description("\uC11C\uC2DD \uBCF4\uC874 \uB77C\uC6B4\uB4DC\uD2B8\uB9BD \uD328\uCE58 \u2014 \uD3B8\uC9D1\uB41C \uB9C8\uD06C\uB2E4\uC6B4\uC744 \uC6D0\uBCF8 HWPX/HWP\uC5D0 in-place \uBC18\uC601 (kordoc patch \uC6D0\uBCF8.hwpx \uD3B8\uC9D1.md -o \uCD9C\uB825.hwpx). \uBBF8\uC801\uC6A9(skip) \uD3B8\uC9D1\uC774 \uC788\uC73C\uBA74 exit 2").option("-o, --output <path>", "\uCD9C\uB825 \uACBD\uB85C (\uAE30\uBCF8: <\uC6D0\uBCF8>.patched.hwpx|.hwp)").option("--no-verify", "\uD328\uCE58 \uD6C4 \uC7AC\uD30C\uC2F1 \uC790\uB3D9 \uAC80\uC99D \uC0DD\uB7B5").option("--silent", "\uC9C4\uD589 \uBA54\uC2DC\uC9C0 \uC228\uAE30\uAE30").action(async (original, edited, opts) => {
498
498
  try {
499
- const { patchHwpx, patchHwp, detectFormat: detectFormat2 } = await import("./-CVPGGSAB.js");
499
+ const { patchHwpx, patchHwp, detectFormat: detectFormat2 } = await import("./-WYNJOQ6P.js");
500
500
  const rootOpts = program.opts();
501
501
  const output = opts.output ?? rootOpts.output;
502
502
  const silent = opts.silent ?? rootOpts.silent;
@@ -537,7 +537,7 @@ program.command("patch <original> <edited>").description("\uC11C\uC2DD \uBCF4\uC
537
537
  });
538
538
  program.command("validate <file>").description("HWPX \uAD6C\uC870 \uAC80\uC99D \u2014 ZIP\xB7mimetype\xB7\uD544\uC218 \uD30C\uC77C\xB7XML \uC6F0\uD3FC\uB4DC\xB7secCnt\xB7manifest \uCC38\uC870 (\uD55C\uCEF4\uB3C5\uC2A4 \uAC70\uBD80 \uC694\uC778 \uC0AC\uC804 \uCC28\uB2E8)").option("--json", "\uACB0\uACFC\uB97C JSON\uC73C\uB85C stdout\uC5D0 \uCD9C\uB825").action(async (file, opts) => {
539
539
  try {
540
- const { validateHwpx } = await import("./-CVPGGSAB.js");
540
+ const { validateHwpx } = await import("./-WYNJOQ6P.js");
541
541
  const buf = new Uint8Array(readFileSync(resolve(file)));
542
542
  const result = await validateHwpx(buf);
543
543
  if (opts.json) {
@@ -751,7 +751,7 @@ program.command("lint <file>").description("\uACF5\uBB38\uC11C \uD45C\uAE30\uBC9
751
751
  }
752
752
  });
753
753
  program.command("redact <files...>").description("\uAC1C\uC778\uC815\uBCF4 \uC11C\uC2DD \uBCF4\uC874 \uB9C8\uC2A4\uD0B9 \u2014 \uC8FC\uBBFC\uBC88\uD638\xB7\uC804\uD654\xB7\uC774\uBA54\uC77C\xB7\uCE74\uB4DC\xB7\uACC4\uC88C\uB97C \uD0D0\uC9C0\uD574 HWPX/HWP\uB294 \uC6D0\uBCF8 \uC11C\uC2DD \uADF8\uB300\uB85C patch, \uADF8 \uC678 \uD3EC\uB9F7\uC740 \uB9C8\uC2A4\uD0B9\uB41C \uB9C8\uD06C\uB2E4\uC6B4 \uCD9C\uB825. \uC790\uB3D9 \uAC80\uCD9C \uBCF4\uC870 \uB3C4\uAD6C\uC774\uBBC0\uB85C \uACB0\uACFC\uB294 \uBC18\uB4DC\uC2DC \uC0AC\uB78C\uC774 \uCD5C\uC885 \uD655\uC778\uD558\uC138\uC694 (\uC774\uBBF8\uC9C0 \uC548 \uD14D\uC2A4\uD2B8\uB294 \uD0D0\uC9C0 \uBD88\uAC00)").option("--rules <csv>", "\uC801\uC6A9 \uB8F0 (\uAE30\uBCF8: rrn,phone,email,card,account \u2014 passport,driver\uB294 opt-in)").option("--mask-char <ch>", "\uB9C8\uC2A4\uD06C \uBB38\uC790 1\uAE00\uC790 (\uAE30\uBCF8: \u25CF)").option("-o, --output <path>", "\uCD9C\uB825 \uACBD\uB85C (\uB2E8\uC77C \uD30C\uC77C \uC2DC)").option("-d, --out-dir <dir>", "\uCD9C\uB825 \uB514\uB809\uD1A0\uB9AC (\uB2E4\uC911 \uD30C\uC77C \uC2DC)").option("--dry-run", "\uD0D0\uC9C0 \uB9AC\uD3EC\uD2B8\uB9CC \uCD9C\uB825, \uD30C\uC77C \uBBF8\uC0DD\uC131").option("--json", "\uB9AC\uD3EC\uD2B8\uB97C JSON\uC73C\uB85C stdout \uCD9C\uB825").option("--silent", "\uC9C4\uD589 \uBA54\uC2DC\uC9C0 \uC228\uAE30\uAE30").action(async (files, opts) => {
754
- const { redactMarkdown, DEFAULT_REDACT_RULES, patchHwpx, patchHwp } = await import("./-CVPGGSAB.js");
754
+ const { redactMarkdown, DEFAULT_REDACT_RULES, patchHwpx, patchHwp } = await import("./-WYNJOQ6P.js");
755
755
  const rootOpts = program.opts();
756
756
  const output = opts.output ?? rootOpts.output;
757
757
  const silent = opts.silent ?? rootOpts.silent;
@@ -840,7 +840,7 @@ program.command("render <file>").description("\uB808\uC774\uC544\uC6C3 \uBCF4\uC
840
840
  const rootOpts = program.opts();
841
841
  const output = opts.output ?? rootOpts.output;
842
842
  const silent = opts.silent ?? rootOpts.silent;
843
- const { renderHwpxToSvg } = await import("./render-HEQX5DII.js");
843
+ const { renderHwpxToSvg } = await import("./render-5Y2US4IM.js");
844
844
  const absPath = resolve(file);
845
845
  const buffer = readFileSync(absPath);
846
846
  const highlights = opts.highlight ? String(opts.highlight).split(",") : void 0;
@@ -862,7 +862,7 @@ program.command("render <file>").description("\uB808\uC774\uC544\uC6C3 \uBCF4\uC
862
862
  });
863
863
  program.command("render-worker").description("persistent \uB80C\uB354 \uC6CC\uCEE4 \u2014 stdin NDJSON \uC694\uCCAD \u2192 \uC870\uD310 SVG \uD30C\uC77C \uCD9C\uB825 (\uD504\uB85C\uC138\uC2A4 \uC720\uC9C0, \uCF5C\uB4DC\uC2A4\uD0C0\uD2B8 \uC81C\uAC70)").action(async () => {
864
864
  const { createInterface } = await import("readline");
865
- const { renderHwpxToSvg } = await import("./render-HEQX5DII.js");
865
+ const { renderHwpxToSvg } = await import("./render-5Y2US4IM.js");
866
866
  const rl = createInterface({ input: process.stdin });
867
867
  const write = (o) => void process.stdout.write(JSON.stringify(o) + "\n");
868
868
  write({ ready: true, version: VERSION });
@@ -907,12 +907,12 @@ program.command("mcp").description("MCP \uC11C\uBC84 \uC2E4\uD589 (Claude / Curs
907
907
  await startMcpServer();
908
908
  });
909
909
  program.command("setup").description("\uB300\uD654\uD615 \uC124\uCE58 \uB9C8\uBC95\uC0AC \u2014 AI \uD074\uB77C\uC774\uC5B8\uD2B8 \uC790\uB3D9 \uB4F1\uB85D (Mac/Win/Linux)").action(async () => {
910
- const { runSetup } = await import("./setup-T2BY3VME.js");
910
+ const { runSetup } = await import("./setup-MG3YYKXU.js");
911
911
  await runSetup();
912
912
  });
913
913
  program.command("check-formula-models").description("PDF \uC218\uC2DD OCR \uBAA8\uB378(MFD + MFR + tokenizer, ~155MB) \uC0C1\uD0DC \uD655\uC778 \u2014 \uC5C6\uAC70\uB098 SHA \uBD88\uC77C\uCE58\uBA74 \uB2E4\uC6B4\uB85C\uB4DC").option("--status-only", "\uC0C1\uD0DC\uB9CC JSON \uC73C\uB85C \uCD9C\uB825 (\uB2E4\uC6B4\uB85C\uB4DC \uC548 \uD568)").action(async (opts) => {
914
914
  try {
915
- const { getFormulaModelStatus, ensureFormulaModels, getFormulaModelsDir } = await import("./formula-RTGCS55B.js");
915
+ const { getFormulaModelStatus, ensureFormulaModels, getFormulaModelsDir } = await import("./formula-IFKZZPD2.js");
916
916
  const dir = getFormulaModelsDir();
917
917
  if (opts.statusOnly) {
918
918
  const status = await getFormulaModelStatus();
@@ -966,7 +966,7 @@ program.command("check-formula-models").description("PDF \uC218\uC2DD OCR \uBAA8
966
966
  });
967
967
  program.command("check-ocr-models").description("\uD14D\uC2A4\uD2B8 OCR \uBAA8\uB378(PP-OCRv5 korean det+rec, ~18MB) \uC0C1\uD0DC \uD655\uC778 \u2014 \uC5C6\uAC70\uB098 SHA \uBD88\uC77C\uCE58\uBA74 \uB2E4\uC6B4\uB85C\uB4DC").option("--status-only", "\uC0C1\uD0DC\uB9CC JSON \uC73C\uB85C \uCD9C\uB825 (\uB2E4\uC6B4\uB85C\uB4DC \uC548 \uD568)").action(async (opts) => {
968
968
  try {
969
- const { getOcrModelStatus, ensureOcrModels, getOcrModelsDir } = await import("./models-RSHR2BY7.js");
969
+ const { getOcrModelStatus, ensureOcrModels, getOcrModelsDir } = await import("./models-QQA7OQHY.js");
970
970
  const dir = getOcrModelsDir();
971
971
  if (opts.statusOnly) {
972
972
  const status = await getOcrModelStatus();
@@ -1020,7 +1020,7 @@ program.command("check-ocr-models").description("\uD14D\uC2A4\uD2B8 OCR \uBAA8\u
1020
1020
  });
1021
1021
  program.command("models").description("OCR/\uC218\uC2DD \uBAA8\uB378 \uC624\uD504\uB77C\uC778 \uC0AC\uC774\uB4DC\uB85C\uB4DC \u2014 \uD3D0\uC1C4\uB9DD \uBC18\uC785\uC6A9 \uB0B4\uBCF4\uB0B4\uAE30/\uAC00\uC838\uC624\uAE30 (SHA-256 \uAC80\uC99D)").option("--status", "\uCE90\uC2DC\uC5D0 \uC124\uCE58\uB41C \uBAA8\uB378 \uC0C1\uD0DC\uB97C JSON \uC73C\uB85C \uCD9C\uB825").option("--export <dir>", "\uB85C\uCEEC \uCE90\uC2DC \u2192 \uBC88\uB4E4 \uB514\uB809\uD1A0\uB9AC\uB85C \uB0B4\uBCF4\uB0B4\uAE30 (\uC628\uB77C\uC778 PC\uC5D0\uC11C \uC2E4\uD589)").option("--import <dir>", "\uBC88\uB4E4 \uB514\uB809\uD1A0\uB9AC \u2192 \uB85C\uCEEC \uCE90\uC2DC\uB85C \uC124\uCE58 (\uB0B4\uBD80\uB9DD PC\uC5D0\uC11C \uC2E4\uD589)").action(async (opts) => {
1022
1022
  try {
1023
- const { exportModels, importModels, modelCacheStatus } = await import("./model-bundle-5RLZV7P2.js");
1023
+ const { exportModels, importModels, modelCacheStatus } = await import("./model-bundle-Q4HQXJQG.js");
1024
1024
  if (opts.status) {
1025
1025
  process.stdout.write(JSON.stringify(await modelCacheStatus(), null, 2) + "\n");
1026
1026
  return;