kordoc 4.18.13 → 4.19.0

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 (129) hide show
  1. package/README.md +2 -1
  2. package/dist/{-DC2OO5KO.js → -I3DEUQUC.js} +11 -11
  3. package/dist/{chunk-K6WSMTVU.cjs → chunk-34RIECIF.cjs} +2 -2
  4. package/dist/{chunk-K6WSMTVU.cjs.map → chunk-34RIECIF.cjs.map} +1 -1
  5. package/dist/{chunk-EBXJ45VZ.js → chunk-5B55S4JU.js} +2 -2
  6. package/dist/{chunk-EBXJ45VZ.js.map → chunk-5B55S4JU.js.map} +1 -1
  7. package/dist/{chunk-6CQZMVXW.cjs → chunk-5ZSQ2ZIH.cjs} +3 -3
  8. package/dist/{chunk-6CQZMVXW.cjs.map → chunk-5ZSQ2ZIH.cjs.map} +1 -1
  9. package/dist/{chunk-GGMIPTM5.cjs → chunk-7TVRQJXI.cjs} +12 -12
  10. package/dist/{chunk-GGMIPTM5.cjs.map → chunk-7TVRQJXI.cjs.map} +1 -1
  11. package/dist/{chunk-6AYTYTFY.js → chunk-AAE765MK.js} +3 -3
  12. package/dist/{chunk-ISC2TH24.js → chunk-AMDDV4CI.js} +2 -2
  13. package/dist/{chunk-GUH6HYSZ.js → chunk-C4JHZNRL.js} +25 -22
  14. package/dist/chunk-C4JHZNRL.js.map +1 -0
  15. package/dist/{chunk-EZSWBHHI.js → chunk-CR4RXHXO.js} +2 -2
  16. package/dist/{chunk-32ZUIHSY.js → chunk-DEYCTP2S.js} +3 -3
  17. package/dist/{chunk-SVIOP7PE.js → chunk-DGXGVC4Z.js} +7 -7
  18. package/dist/{chunk-SVIOP7PE.js.map → chunk-DGXGVC4Z.js.map} +1 -1
  19. package/dist/{chunk-JPSLMPFI.js → chunk-DH75ZUYF.js} +95 -11
  20. package/dist/chunk-DH75ZUYF.js.map +1 -0
  21. package/dist/{chunk-DHEUQXXR.js → chunk-FJE3TMZ7.js} +2 -2
  22. package/dist/{chunk-ZNY5BRV6.js → chunk-GCYLNOTJ.js} +4 -4
  23. package/dist/{chunk-GSW7W7AL.js → chunk-GYQVQF2J.js} +7 -4
  24. package/dist/chunk-GYQVQF2J.js.map +1 -0
  25. package/dist/{chunk-7LOD4IGO.js → chunk-HFMIAMEO.js} +4 -4
  26. package/dist/{chunk-XVB3PUPJ.js → chunk-L5KNWOGR.js} +2 -2
  27. package/dist/chunk-L5KNWOGR.js.map +1 -0
  28. package/dist/{chunk-RQEDNI4P.cjs → chunk-LLVF6X5W.cjs} +3 -3
  29. package/dist/{chunk-RQEDNI4P.cjs.map → chunk-LLVF6X5W.cjs.map} +1 -1
  30. package/dist/{chunk-6FW3AZWN.cjs → chunk-LNU54ZKV.cjs} +117 -33
  31. package/dist/chunk-LNU54ZKV.cjs.map +1 -0
  32. package/dist/{chunk-IRN5SDY2.js → chunk-OMJWAJBD.js} +2 -2
  33. package/dist/{chunk-V7LKQNC4.js → chunk-QHN7N2QA.js} +2 -2
  34. package/dist/{chunk-INESPVEV.js → chunk-RYKNAYKC.js} +3 -3
  35. package/dist/{chunk-LKA7Z2NH.js → chunk-UCTD3BXH.js} +2 -2
  36. package/dist/{chunk-PN5WWW56.js → chunk-UTVNSCEI.js} +2 -2
  37. package/dist/{chunk-PN5WWW56.js.map → chunk-UTVNSCEI.js.map} +1 -1
  38. package/dist/{chunk-JWTZ3OVZ.js → chunk-VZSOPECZ.js} +2 -2
  39. package/dist/{chunk-VDEENOPW.js → chunk-W5XX2GKO.js} +2 -2
  40. package/dist/{chunk-PHMWSWHJ.js → chunk-XIWGPC3V.js} +2 -2
  41. package/dist/{chunk-JKHU7HID.js → chunk-XXUXQHUC.js} +95 -11
  42. package/dist/chunk-XXUXQHUC.js.map +1 -0
  43. package/dist/{chunk-3FGHQWJP.cjs → chunk-YV4PWWRW.cjs} +22 -22
  44. package/dist/{chunk-3FGHQWJP.cjs.map → chunk-YV4PWWRW.cjs.map} +1 -1
  45. package/dist/chunks-JPNLQOVD.js +10 -0
  46. package/dist/cli.js +39 -28
  47. package/dist/cli.js.map +1 -1
  48. package/dist/{formula-YCAO5IVW.js → formula-DUEAYGIG.js} +4 -4
  49. package/dist/{formula-DAMFHLQO.js → formula-I4MAHCTZ.js} +3 -3
  50. package/dist/{formula-HJNQGPRC.cjs → formula-L2BKGA4J.cjs} +9 -9
  51. package/dist/{formula-HJNQGPRC.cjs.map → formula-L2BKGA4J.cjs.map} +1 -1
  52. package/dist/{image-ocr-VH54SDZ7.js → image-ocr-B32G24XW.js} +6 -6
  53. package/dist/{image-ocr-PAF76DAW.js → image-ocr-NUL3JKXM.js} +9 -9
  54. package/dist/{image-ocr-AZ25IOC7.cjs → image-ocr-ZWRJZKYR.cjs} +15 -15
  55. package/dist/{image-ocr-AZ25IOC7.cjs.map → image-ocr-ZWRJZKYR.cjs.map} +1 -1
  56. package/dist/index.cjs +669 -663
  57. package/dist/index.cjs.map +1 -1
  58. package/dist/index.d.cts +15 -2
  59. package/dist/index.d.ts +15 -2
  60. package/dist/index.js +26 -20
  61. package/dist/index.js.map +1 -1
  62. package/dist/mcp.js +25 -23
  63. package/dist/mcp.js.map +1 -1
  64. package/dist/{model-bundle-53CHDYCG.js → model-bundle-OBIKG4K5.js} +5 -5
  65. package/dist/{models-UVLAKK3M.js → models-2OZHOPPM.js} +5 -5
  66. package/dist/{parser-HWAOPQYK.cjs → parser-DMWCXX7A.cjs} +131 -129
  67. package/dist/parser-DMWCXX7A.cjs.map +1 -0
  68. package/dist/{parser-I4D3TRGU.js → parser-FDE6GQST.js} +14 -12
  69. package/dist/{parser-Z6PHB54O.js.map → parser-FDE6GQST.js.map} +1 -1
  70. package/dist/{parser-Z6PHB54O.js → parser-YW3NMSJE.js} +11 -9
  71. package/dist/{parser-I4D3TRGU.js.map → parser-YW3NMSJE.js.map} +1 -1
  72. package/dist/pdf-ocr-7MR56U4P.js +16 -0
  73. package/dist/pdf-ocr-K2OK7FNQ.cjs +17 -0
  74. package/dist/{pdf-ocr-HR6CXGTX.cjs.map → pdf-ocr-K2OK7FNQ.cjs.map} +1 -1
  75. package/dist/pdf-ocr-YHC4X67W.js +20 -0
  76. package/dist/{profile-io-WHCWCOPW.js → profile-io-6WCU4KHY.js} +3 -3
  77. package/dist/{rasterize-5DZ3DHGH.js → rasterize-X3I7SWXF.js} +3 -3
  78. package/dist/{redact-doc-RNJVMFGQ.js → redact-doc-6H7WPUQD.js} +11 -11
  79. package/dist/{render-NZ6RA6SW.js → render-PBQJGZT3.js} +7 -7
  80. package/dist/seal-E2E7CFZJ.js +10 -0
  81. package/dist/{setup-U3EQNK4Z.js → setup-UORJSR3M.js} +3 -3
  82. package/dist/visual-4GDT5BRH.js +20 -0
  83. package/dist/{watch-GB2M7XU6.js → watch-S2ZMDDZU.js} +12 -12
  84. package/package.json +3 -2
  85. package/dist/chunk-6FW3AZWN.cjs.map +0 -1
  86. package/dist/chunk-GSW7W7AL.js.map +0 -1
  87. package/dist/chunk-GUH6HYSZ.js.map +0 -1
  88. package/dist/chunk-JKHU7HID.js.map +0 -1
  89. package/dist/chunk-JPSLMPFI.js.map +0 -1
  90. package/dist/chunk-XVB3PUPJ.js.map +0 -1
  91. package/dist/chunks-JZW2TXIZ.js +0 -10
  92. package/dist/parser-HWAOPQYK.cjs.map +0 -1
  93. package/dist/pdf-ocr-F4ICXO7W.js +0 -20
  94. package/dist/pdf-ocr-HR6CXGTX.cjs +0 -17
  95. package/dist/pdf-ocr-JI3K7JIN.js +0 -16
  96. package/dist/seal-WHJ6O5HT.js +0 -10
  97. package/dist/visual-JDAS4R43.js +0 -20
  98. /package/dist/{-DC2OO5KO.js.map → -I3DEUQUC.js.map} +0 -0
  99. /package/dist/{chunk-6AYTYTFY.js.map → chunk-AAE765MK.js.map} +0 -0
  100. /package/dist/{chunk-ISC2TH24.js.map → chunk-AMDDV4CI.js.map} +0 -0
  101. /package/dist/{chunk-EZSWBHHI.js.map → chunk-CR4RXHXO.js.map} +0 -0
  102. /package/dist/{chunk-32ZUIHSY.js.map → chunk-DEYCTP2S.js.map} +0 -0
  103. /package/dist/{chunk-DHEUQXXR.js.map → chunk-FJE3TMZ7.js.map} +0 -0
  104. /package/dist/{chunk-ZNY5BRV6.js.map → chunk-GCYLNOTJ.js.map} +0 -0
  105. /package/dist/{chunk-7LOD4IGO.js.map → chunk-HFMIAMEO.js.map} +0 -0
  106. /package/dist/{chunk-IRN5SDY2.js.map → chunk-OMJWAJBD.js.map} +0 -0
  107. /package/dist/{chunk-V7LKQNC4.js.map → chunk-QHN7N2QA.js.map} +0 -0
  108. /package/dist/{chunk-INESPVEV.js.map → chunk-RYKNAYKC.js.map} +0 -0
  109. /package/dist/{chunk-LKA7Z2NH.js.map → chunk-UCTD3BXH.js.map} +0 -0
  110. /package/dist/{chunk-JWTZ3OVZ.js.map → chunk-VZSOPECZ.js.map} +0 -0
  111. /package/dist/{chunk-VDEENOPW.js.map → chunk-W5XX2GKO.js.map} +0 -0
  112. /package/dist/{chunk-PHMWSWHJ.js.map → chunk-XIWGPC3V.js.map} +0 -0
  113. /package/dist/{chunks-JZW2TXIZ.js.map → chunks-JPNLQOVD.js.map} +0 -0
  114. /package/dist/{formula-YCAO5IVW.js.map → formula-DUEAYGIG.js.map} +0 -0
  115. /package/dist/{formula-DAMFHLQO.js.map → formula-I4MAHCTZ.js.map} +0 -0
  116. /package/dist/{image-ocr-VH54SDZ7.js.map → image-ocr-B32G24XW.js.map} +0 -0
  117. /package/dist/{image-ocr-PAF76DAW.js.map → image-ocr-NUL3JKXM.js.map} +0 -0
  118. /package/dist/{model-bundle-53CHDYCG.js.map → model-bundle-OBIKG4K5.js.map} +0 -0
  119. /package/dist/{models-UVLAKK3M.js.map → models-2OZHOPPM.js.map} +0 -0
  120. /package/dist/{pdf-ocr-F4ICXO7W.js.map → pdf-ocr-7MR56U4P.js.map} +0 -0
  121. /package/dist/{pdf-ocr-JI3K7JIN.js.map → pdf-ocr-YHC4X67W.js.map} +0 -0
  122. /package/dist/{profile-io-WHCWCOPW.js.map → profile-io-6WCU4KHY.js.map} +0 -0
  123. /package/dist/{rasterize-5DZ3DHGH.js.map → rasterize-X3I7SWXF.js.map} +0 -0
  124. /package/dist/{redact-doc-RNJVMFGQ.js.map → redact-doc-6H7WPUQD.js.map} +0 -0
  125. /package/dist/{render-NZ6RA6SW.js.map → render-PBQJGZT3.js.map} +0 -0
  126. /package/dist/{seal-WHJ6O5HT.js.map → seal-E2E7CFZJ.js.map} +0 -0
  127. /package/dist/{setup-U3EQNK4Z.js.map → setup-UORJSR3M.js.map} +0 -0
  128. /package/dist/{visual-JDAS4R43.js.map → visual-4GDT5BRH.js.map} +0 -0
  129. /package/dist/{watch-GB2M7XU6.js.map → watch-S2ZMDDZU.js.map} +0 -0
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ blocksToChunks
4
+ } from "./chunk-GYQVQF2J.js";
5
+ import "./chunk-XXUXQHUC.js";
6
+ import "./chunk-UTVNSCEI.js";
7
+ export {
8
+ blocksToChunks
9
+ };
10
+ //# sourceMappingURL=chunks-JPNLQOVD.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-EZSWBHHI.js";
4
+ } from "./chunk-CR4RXHXO.js";
5
5
  import {
6
6
  BODY_FONTS,
7
7
  BULLET2_CHARS,
@@ -33,24 +33,24 @@ import {
33
33
  toPlainMarkdown,
34
34
  unknownFontWarnings,
35
35
  usesGaejosikMunche
36
- } from "./chunk-GUH6HYSZ.js";
37
- import "./chunk-V7LKQNC4.js";
38
- import "./chunk-6AYTYTFY.js";
36
+ } from "./chunk-C4JHZNRL.js";
37
+ import "./chunk-QHN7N2QA.js";
38
+ import "./chunk-AAE765MK.js";
39
39
  import "./chunk-3WSNLH4B.js";
40
- import "./chunk-GSW7W7AL.js";
40
+ import "./chunk-GYQVQF2J.js";
41
41
  import {
42
42
  detectFormat,
43
43
  detectImageMime,
44
44
  detectZipFormat
45
- } from "./chunk-SVIOP7PE.js";
45
+ } from "./chunk-DGXGVC4Z.js";
46
46
  import "./chunk-7FCNOKOR.js";
47
- import "./chunk-XVB3PUPJ.js";
47
+ import "./chunk-L5KNWOGR.js";
48
48
  import "./chunk-VQFA55IC.js";
49
- import "./chunk-DHEUQXXR.js";
49
+ import "./chunk-FJE3TMZ7.js";
50
50
  import {
51
51
  blocksToMarkdown
52
- } from "./chunk-JKHU7HID.js";
53
- import "./chunk-IRN5SDY2.js";
52
+ } from "./chunk-XXUXQHUC.js";
53
+ import "./chunk-OMJWAJBD.js";
54
54
  import {
55
55
  KordocError,
56
56
  VERSION,
@@ -58,7 +58,7 @@ import {
58
58
  routeConsoleToStderr,
59
59
  sanitizeError,
60
60
  toArrayBuffer
61
- } from "./chunk-PN5WWW56.js";
61
+ } from "./chunk-UTVNSCEI.js";
62
62
 
63
63
  // src/cli.ts
64
64
  import { Command } from "commander";
@@ -140,6 +140,7 @@ async function convertFiles(files, opts, writeOutput = (text) => {
140
140
  if (opts.plain) parseOptions.plain = true;
141
141
  if (opts.scriptTags !== void 0) parseOptions.scriptTags = opts.scriptTags;
142
142
  if (opts.htmlTables) parseOptions.htmlTables = true;
143
+ if (opts.tableFormat === "gfm") parseOptions.tableFormat = "gfm";
143
144
  if (opts.keepLayoutTables) parseOptions.layoutTables = "keep";
144
145
  if (!opts.silent) {
145
146
  parseOptions.onProgress = (current, total) => {
@@ -186,8 +187,8 @@ async function convertFiles(files, opts, writeOutput = (text) => {
186
187
  `);
187
188
  }
188
189
  } else if (opts.format === "chunks") {
189
- const { blocksToChunks } = await import("./chunks-JZW2TXIZ.js");
190
- const chunks = blocksToChunks(result.blocks).map((c) => {
190
+ const { blocksToChunks } = await import("./chunks-JPNLQOVD.js");
191
+ const chunks = blocksToChunks(result.blocks, { tableFormat: parseOptions.tableFormat }).map((c) => {
191
192
  let text = c.text;
192
193
  if (opts.plain) text = toPlainMarkdown(text);
193
194
  if (opts.htmlTables) text = toHtmlTables(text);
@@ -354,7 +355,7 @@ function registerDocCommands(program2) {
354
355
  if (command.getOptionValueSource("format") === "default" && program2.getOptionValueSource("format") === "cli") {
355
356
  opts.format = rootOpts.format;
356
357
  }
357
- const { watchDirectory } = await import("./watch-GB2M7XU6.js");
358
+ const { watchDirectory } = await import("./watch-S2ZMDDZU.js");
358
359
  await watchDirectory({
359
360
  dir,
360
361
  outDir: opts.outDir,
@@ -581,7 +582,7 @@ function registerDocCommands(program2) {
581
582
  });
582
583
  program2.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) => {
583
584
  try {
584
- const { placeSealHwpx, detectFormat: detectFormat2 } = await import("./-DC2OO5KO.js");
585
+ const { placeSealHwpx, detectFormat: detectFormat2 } = await import("./-I3DEUQUC.js");
585
586
  const rootOpts = program2.opts();
586
587
  const output = opts.output ?? rootOpts.output;
587
588
  const silent = opts.silent ?? rootOpts.silent;
@@ -659,7 +660,7 @@ function registerDocCommands(program2) {
659
660
  });
660
661
  program2.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) => {
661
662
  try {
662
- const { patchHwpx, patchHwp, detectFormat: detectFormat2 } = await import("./-DC2OO5KO.js");
663
+ const { patchHwpx, patchHwp, detectFormat: detectFormat2 } = await import("./-I3DEUQUC.js");
663
664
  const rootOpts = program2.opts();
664
665
  const output = opts.output ?? rootOpts.output;
665
666
  const silent = opts.silent ?? rootOpts.silent;
@@ -700,7 +701,7 @@ function registerDocCommands(program2) {
700
701
  });
701
702
  program2.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) => {
702
703
  try {
703
- const { validateHwpx } = await import("./-DC2OO5KO.js");
704
+ const { validateHwpx } = await import("./-I3DEUQUC.js");
704
705
  const buf = new Uint8Array(readFileSync2(resolve3(file)));
705
706
  const result = await validateHwpx(buf);
706
707
  if (opts.json) {
@@ -967,7 +968,7 @@ function registerGenerateCommands(program2) {
967
968
  });
968
969
  program2.command("redact <files...>").description("\uAC1C\uC778\uC815\uBCF4 \uC11C\uC2DD \uBCF4\uC874 \uB9C8\uC2A4\uD0B9 \u2014 \uC8FC\uBBFC\xB7\uC678\uAD6D\uC778\uB4F1\uB85D\uBC88\uD638\xB7\uC804\uD654\xB7\uC774\uBA54\uC77C\xB7\uCE74\uB4DC\xB7\uACC4\uC88C\xB7\uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638\xB7\uC5EC\uAD8C\xB7\uC6B4\uC804\uBA74\uD5C8(--rules \uB85C \uC778\uBA85\xB7\uC8FC\uC18C opt-in)\uB97C \uD0D0\uC9C0\uD574 HWPX/HWP\uB294 \uC6D0\uBCF8 \uC11C\uC2DD \uADF8\uB300\uB85C \uAC19\uC740 \uAE38\uC774\uB85C \uAC00\uB9B0 \uD30C\uC77C(\uBCF8\uBB38\xB7\uD45C\xB7\uBA38\uB9AC\uB9D0/\uAF2C\uB9AC\uB9D0\xB7\uAC01\uC8FC\xB7\uAE00\uC0C1\uC790\xB7\uBBF8\uB9AC\uBCF4\uAE30\xB7\uBA54\uD0C0\uB370\uC774\uD130 \uD3EC\uD568), \uADF8 \uC678 \uD3EC\uB9F7(PDF \uB4F1)\uC740 \uC6D0\uBCF8\uC744 \uAC74\uB4DC\uB9AC\uC9C0 \uC54A\uACE0 \uB9C8\uC2A4\uD0B9\uB41C \uB9C8\uD06C\uB2E4\uC6B4\uB9CC \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 \uC18D \uAE00\uC790\uB294 \uD0D0\uC9C0 \uBD88\uAC00)").option("--rules <csv>", "\uC801\uC6A9 \uB8F0 (\uAE30\uBCF8: rrn,phone,email,card,account,brn,passport,driver \u2014 crn(\uBC95\uC778\uB4F1\uB85D\uBC88\uD638),ip,name(\uC778\uBA85),address(\uC8FC\uC18C)\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) => {
969
970
  const { ALL_REDACT_RULES, DEFAULT_REDACT_RULES, redactText } = await import("./redact-NV2QCDGE.js");
970
- const { redactDocument } = await import("./redact-doc-RNJVMFGQ.js");
971
+ const { redactDocument } = await import("./redact-doc-6H7WPUQD.js");
971
972
  const rootOpts = program2.opts();
972
973
  const output = opts.output ?? rootOpts.output;
973
974
  const outDir = opts.outDir ?? rootOpts.outDir;
@@ -1129,7 +1130,7 @@ function registerRenderCommands(program2) {
1129
1130
  const absPath = resolve5(file);
1130
1131
  const stem = file.replace(/\.hwpx?$/i, "");
1131
1132
  if (fmt === "svg" && !outDir && !pages && !/\.hwp$/i.test(absPath)) {
1132
- const { renderHwpxToSvg } = await import("./render-NZ6RA6SW.js");
1133
+ const { renderHwpxToSvg } = await import("./render-PBQJGZT3.js");
1133
1134
  const buffer = readFileSync4(absPath);
1134
1135
  const result = await renderHwpxToSvg(toArrayBuffer(buffer), { highlights, reflow: opts.reflow, reflowMode: opts.reflowMode });
1135
1136
  const outPath = resolve5(output ?? stem + ".svg");
@@ -1143,7 +1144,7 @@ function registerRenderCommands(program2) {
1143
1144
  }
1144
1145
  return;
1145
1146
  }
1146
- const { renderDocument } = await import("./render-NZ6RA6SW.js");
1147
+ const { renderDocument } = await import("./render-PBQJGZT3.js");
1147
1148
  const { scene, assets } = await renderDocument(absPath, {
1148
1149
  format: fmt,
1149
1150
  pages,
@@ -1193,7 +1194,7 @@ function registerRenderCommands(program2) {
1193
1194
  if (!outDir) throw new KordocError("--out-dir \uC774 \uD544\uC694\uD569\uB2C8\uB2E4 (crop \uC740 \uD30C\uC77C \uC5EC\uB7EC \uAC1C\uB97C \uB0C5\uB2C8\uB2E4)");
1194
1195
  const types = String(opts.target).split(",").map((t) => t.trim()).filter(Boolean);
1195
1196
  for (const t of types) if (!["table", "image", "paragraph", "shape"].includes(t)) throw new KordocError(`--target \uC720\uD615 \uC624\uB958: ${t}`);
1196
- const { extractRenderedRegions } = await import("./render-NZ6RA6SW.js");
1197
+ const { extractRenderedRegions } = await import("./render-PBQJGZT3.js");
1197
1198
  const regions = await extractRenderedRegions(resolve5(file), {
1198
1199
  types,
1199
1200
  format: fmt,
@@ -1231,7 +1232,7 @@ function registerRenderCommands(program2) {
1231
1232
  if (policy !== "none" && !outDir) throw new KordocError("--visual \uC740 crop \uD30C\uC77C\uC744 \uB0B4\uBBC0\uB85C --out-dir \uC774 \uD544\uC694\uD569\uB2C8\uB2E4");
1232
1233
  const cropFmt = String(opts.cropFormat);
1233
1234
  if (!["png", "jpeg"].includes(cropFmt)) throw new KordocError(`--crop-format \uC740 png|jpeg: ${cropFmt}`);
1234
- const { extractTables } = await import("./visual-JDAS4R43.js");
1235
+ const { extractTables } = await import("./visual-4GDT5BRH.js");
1235
1236
  const tables = await extractTables(resolve5(file), { policy, format: cropFmt, paddingPt: Number(opts.padding) || 0 });
1236
1237
  const dir = outDir ? resolve5(outDir) : void 0;
1237
1238
  if (dir) mkdirSync4(dir, { recursive: true });
@@ -1275,7 +1276,7 @@ function registerRenderCommands(program2) {
1275
1276
  });
1276
1277
  program2.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 () => {
1277
1278
  const { createInterface } = await import("readline");
1278
- const { renderHwpxToSvg } = await import("./render-NZ6RA6SW.js");
1279
+ const { renderHwpxToSvg } = await import("./render-PBQJGZT3.js");
1279
1280
  const rl = createInterface({ input: process.stdin });
1280
1281
  const write = (o) => void process.stdout.write(JSON.stringify(o) + "\n");
1281
1282
  write({ ready: true, version: VERSION });
@@ -1324,12 +1325,12 @@ function registerSystemCommands(program2) {
1324
1325
  await startMcpServer();
1325
1326
  });
1326
1327
  program2.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 () => {
1327
- const { runSetup } = await import("./setup-U3EQNK4Z.js");
1328
+ const { runSetup } = await import("./setup-UORJSR3M.js");
1328
1329
  await runSetup();
1329
1330
  });
1330
1331
  program2.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) => {
1331
1332
  try {
1332
- const { getFormulaModelStatus, ensureFormulaModels, getFormulaModelsDir } = await import("./formula-YCAO5IVW.js");
1333
+ const { getFormulaModelStatus, ensureFormulaModels, getFormulaModelsDir } = await import("./formula-DUEAYGIG.js");
1333
1334
  const dir = getFormulaModelsDir();
1334
1335
  if (opts.statusOnly) {
1335
1336
  const status = await getFormulaModelStatus();
@@ -1383,7 +1384,7 @@ function registerSystemCommands(program2) {
1383
1384
  });
1384
1385
  program2.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) => {
1385
1386
  try {
1386
- const { getOcrModelStatus, ensureOcrModels, getOcrModelsDir } = await import("./models-UVLAKK3M.js");
1387
+ const { getOcrModelStatus, ensureOcrModels, getOcrModelsDir } = await import("./models-2OZHOPPM.js");
1387
1388
  const dir = getOcrModelsDir();
1388
1389
  if (opts.statusOnly) {
1389
1390
  const status = await getOcrModelStatus();
@@ -1437,7 +1438,7 @@ function registerSystemCommands(program2) {
1437
1438
  });
1438
1439
  program2.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) => {
1439
1440
  try {
1440
- const { exportModels, importModels, modelCacheStatus } = await import("./model-bundle-53CHDYCG.js");
1441
+ const { exportModels, importModels, modelCacheStatus } = await import("./model-bundle-OBIKG4K5.js");
1441
1442
  if (opts.status) {
1442
1443
  process.stdout.write(JSON.stringify(await modelCacheStatus(), null, 2) + "\n");
1443
1444
  return;
@@ -1539,10 +1540,20 @@ function registerWorkerCommands(program2) {
1539
1540
 
1540
1541
  // src/cli.ts
1541
1542
  var program = new Command();
1542
- 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("--jobs <count>", "\uBCD1\uB82C \uBCC0\uD658 \uD504\uB85C\uC138\uC2A4 \uC218 (\uAE30\uBCF8 1, \uB2E4\uC911 \uD30C\uC77C\uC740 -d \uD544\uC694)", "1").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("--include-field-placeholders", "\uBBF8\uAE30\uC785 \uB204\uB984\uD2C0 \uC548\uB0B4\uBB38\uB3C4 \uCD9C\uB825 \u2014 \uBE48 \uC11C\uC2DD\uC758 \uCE78 \uC6A9\uB3C4 \uBCF4\uC874 (#92, \uAE30\uBCF8 off: \uC778\uC1C4\uB418\uC9C0 \uC54A\uB294 \uC548\uB0B4\uBB38 \uC81C\uC678)").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/<\uBB38\uC11C \uC774\uB984>/<\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("--html-tables", "\uBAA8\uB4E0 \uD45C\uB97C HTML \uB85C \u2014 \uD30C\uC774\uD504 \uD45C\uB3C4 HTML \uD45C\uB85C, \uD0DC\uADF8\uB9C8\uB2E4 \uD55C \uC904\uC529 \uB4E4\uC5EC\uC368 \uB0C4").option("--keep-layout-tables", "\uD14C\uB450\uB9AC\uAC00 \uC548 \uBCF4\uC774\uB294 \uD2C0 \uD45C\uB3C4 \uC6D0\uBCF8 \uD45C \uAD6C\uC870 \uADF8\uB300\uB85C (\uAE30\uBCF8: \uBCF4\uC774\uB294 \uB300\uB85C \u2014 \uD2C0\uC740 \uAE00, \uCE78\uC73C\uB85C \uC870\uB9BD\uD55C \uBD84\uC218\uB294 \uC218\uC2DD). patch \uB85C \uB418\uB3CC\uB9B4 \uD3B8\uC9D1\uBCF8\uC740 \uC774 \uC635\uC158\uC73C\uB85C \uBF51\uB294\uB2E4").option("--script-tags", "\uC704\xB7\uC544\uB798\uCCA8\uC790\uB97C <sup>\xB7<sub> \uB85C \uD45C\uAE30 \u2014 PDF \uB294 \uAE30\uBCF8 \uB054(\uB17C\uBB38\xB7\uC218\uC2DD PDF \uC5D0 \uAD8C\uC7A5), HWPX\xB7HWP\xB7DOCX \uB294 \uAE30\uBCF8 \uCF2C").option("--no-script-tags", '\uCCA8\uC790 \uD45C\uAE30 \uB044\uAE30 \u2014 \uBAA8\uB4E0 \uD615\uC2DD\uC5D0\uC11C \uD3C9\uBB38("104 m2")').option("--plain", "\uD3C9\uBB38 Markdown \u2014 \uADF8\uB9BC \uC790\uB9AC \uD45C\uC2DC\xB7\uB9C1\uD06C URL\xB7\uBC11\uC904/\uAD75\uAC8C \uD45C\uAE30\uB97C \uBE7C\uACE0 \uAE00\uB9CC (\uC81C\uBAA9\xB7\uBAA9\uB85D\xB7\uD45C \uAD6C\uC870\uB294 \uC720\uC9C0, \uC0C9\uC778\xB7RAG \uC6A9)").option("--no-images", "\uC774\uBBF8\uC9C0 \uBC14\uC774\uD2B8\uB97C \uCD94\uCD9C\xB7\uCD9C\uB825\uD558\uC9C0 \uC54A\uC74C: \uAE00\uC790\uB9CC \uD544\uC694\uD560 \uB54C (\uADF8\uB9BC \uC790\uB9AC \uD45C\uC2DC\uB294 \uB0A8\uAE40, PDF \uB294 PNG \uC778\uCF54\uB529\uC744 \uAC74\uB108\uB700)").option("--silent", "\uC9C4\uD589 \uBA54\uC2DC\uC9C0 \uC228\uAE30\uAE30").action(async (files, opts) => {
1543
+ 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("--jobs <count>", "\uBCD1\uB82C \uBCC0\uD658 \uD504\uB85C\uC138\uC2A4 \uC218 (\uAE30\uBCF8 1, \uB2E4\uC911 \uD30C\uC77C\uC740 -d \uD544\uC694)", "1").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("--include-field-placeholders", "\uBBF8\uAE30\uC785 \uB204\uB984\uD2C0 \uC548\uB0B4\uBB38\uB3C4 \uCD9C\uB825 \u2014 \uBE48 \uC11C\uC2DD\uC758 \uCE78 \uC6A9\uB3C4 \uBCF4\uC874 (#92, \uAE30\uBCF8 off: \uC778\uC1C4\uB418\uC9C0 \uC54A\uB294 \uC548\uB0B4\uBB38 \uC81C\uC678)").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/<\uBB38\uC11C \uC774\uB984>/<\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("--html-tables", "\uBAA8\uB4E0 \uD45C\uB97C HTML \uB85C \u2014 \uD30C\uC774\uD504 \uD45C\uB3C4 HTML \uD45C\uB85C, \uD0DC\uADF8\uB9C8\uB2E4 \uD55C \uC904\uC529 \uB4E4\uC5EC\uC368 \uB0C4").option("--table-format <format>", "\uD45C \uCD9C\uB825 \uD615\uC2DD: gfm \u2014 \uBAA8\uB4E0 \uD45C\uB97C HTML \uC5C6\uC774 GFM \uD30C\uC774\uD504 \uD45C\uB85C, \uC140 \uC548 \uD45C\uB294 \uBD80\uBAA8 \uB4A4 \uB3C5\uB9BD \uD45C + \uAD00\uACC4 \uD45C\uC9C0(<!-- <table \u2026 /> -->) (RAG \uC0C9\uC778\uC6A9, --html-tables \uC640 \uD568\uAED8 \uBABB \uC500)").option("--keep-layout-tables", "\uD14C\uB450\uB9AC\uAC00 \uC548 \uBCF4\uC774\uB294 \uD2C0 \uD45C\uB3C4 \uC6D0\uBCF8 \uD45C \uAD6C\uC870 \uADF8\uB300\uB85C (\uAE30\uBCF8: \uBCF4\uC774\uB294 \uB300\uB85C \u2014 \uD2C0\uC740 \uAE00, \uCE78\uC73C\uB85C \uC870\uB9BD\uD55C \uBD84\uC218\uB294 \uC218\uC2DD). patch \uB85C \uB418\uB3CC\uB9B4 \uD3B8\uC9D1\uBCF8\uC740 \uC774 \uC635\uC158\uC73C\uB85C \uBF51\uB294\uB2E4").option("--script-tags", "\uC704\xB7\uC544\uB798\uCCA8\uC790\uB97C <sup>\xB7<sub> \uB85C \uD45C\uAE30 \u2014 PDF \uB294 \uAE30\uBCF8 \uB054(\uB17C\uBB38\xB7\uC218\uC2DD PDF \uC5D0 \uAD8C\uC7A5), HWPX\xB7HWP\xB7DOCX \uB294 \uAE30\uBCF8 \uCF2C").option("--no-script-tags", '\uCCA8\uC790 \uD45C\uAE30 \uB044\uAE30 \u2014 \uBAA8\uB4E0 \uD615\uC2DD\uC5D0\uC11C \uD3C9\uBB38("104 m2")').option("--plain", "\uD3C9\uBB38 Markdown \u2014 \uADF8\uB9BC \uC790\uB9AC \uD45C\uC2DC\xB7\uB9C1\uD06C URL\xB7\uBC11\uC904/\uAD75\uAC8C \uD45C\uAE30\uB97C \uBE7C\uACE0 \uAE00\uB9CC (\uC81C\uBAA9\xB7\uBAA9\uB85D\xB7\uD45C \uAD6C\uC870\uB294 \uC720\uC9C0, \uC0C9\uC778\xB7RAG \uC6A9)").option("--no-images", "\uC774\uBBF8\uC9C0 \uBC14\uC774\uD2B8\uB97C \uCD94\uCD9C\xB7\uCD9C\uB825\uD558\uC9C0 \uC54A\uC74C: \uAE00\uC790\uB9CC \uD544\uC694\uD560 \uB54C (\uADF8\uB9BC \uC790\uB9AC \uD45C\uC2DC\uB294 \uB0A8\uAE40, PDF \uB294 PNG \uC778\uCF54\uB529\uC744 \uAC74\uB108\uB700)").option("--silent", "\uC9C4\uD589 \uBA54\uC2DC\uC9C0 \uC228\uAE30\uAE30").action(async (files, opts) => {
1543
1544
  const validFormats = ["markdown", "json", "chunks"];
1544
1545
  if (!validFormats.includes(opts.format)) {
1545
1546
  process.stderr.write(`[kordoc] \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uD615\uC2DD: ${opts.format} (markdown, json, chunks)
1547
+ `);
1548
+ process.exit(1);
1549
+ }
1550
+ if (opts.tableFormat !== void 0 && opts.tableFormat !== "gfm") {
1551
+ process.stderr.write(`[kordoc] \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uD45C \uD615\uC2DD: ${opts.tableFormat} (gfm)
1552
+ `);
1553
+ process.exit(1);
1554
+ }
1555
+ if (opts.tableFormat && opts.htmlTables) {
1556
+ process.stderr.write(`[kordoc] --table-format \uACFC --html-tables \uB294 \uD568\uAED8 \uC4F8 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4
1546
1557
  `);
1547
1558
  process.exit(1);
1548
1559
  }