kordoc 4.0.6 → 4.0.7

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 (87) hide show
  1. package/LICENSE +21 -21
  2. package/dist/{-NDU7YGSS.js → -6HWEFXVV.js} +9 -9
  3. package/dist/{chunk-UVSOSFER.js → chunk-2SN3CKME.js} +2 -2
  4. package/dist/{chunk-MOL7MDBG.js → chunk-3TBUDJDE.js} +1 -1
  5. package/dist/chunk-3TBUDJDE.js.map +1 -0
  6. package/dist/{chunk-HOGJ5ALY.js → chunk-5OKHAJ62.js} +2 -2
  7. package/dist/{chunk-GE43BE46.js → chunk-AIQ3ISQU.js} +1 -1
  8. package/dist/chunk-AIQ3ISQU.js.map +1 -0
  9. package/dist/{chunk-5SOZXPQY.js → chunk-BKWHX3RC.js} +3 -3
  10. package/dist/{chunk-5CJGKKMZ.js → chunk-CFQLK3LM.js} +1 -1
  11. package/dist/chunk-CFQLK3LM.js.map +1 -0
  12. package/dist/{chunk-L3I4TIRP.js → chunk-CNM75ZSX.js} +2 -2
  13. package/dist/chunk-GS7T56RP.cjs.map +1 -1
  14. package/dist/{chunk-63ASYC4N.js → chunk-NGSHDBQR.js} +3 -3
  15. package/dist/{chunk-KA4FEBS2.js → chunk-ONXVBURQ.js} +2 -2
  16. package/dist/{chunk-4C7SBZNW.js → chunk-Q7EN4EUJ.js} +2 -2
  17. package/dist/{chunk-HC2SEH6I.js → chunk-TJJTLM76.js} +166 -97
  18. package/dist/chunk-TJJTLM76.js.map +1 -0
  19. package/dist/{chunk-DQJTNXVS.cjs → chunk-U25XGCNH.cjs} +2 -2
  20. package/dist/chunk-U25XGCNH.cjs.map +1 -0
  21. package/dist/{chunk-DCZVOIEO.cjs → chunk-X34YWRL5.cjs} +1 -1
  22. package/dist/chunk-X34YWRL5.cjs.map +1 -0
  23. package/dist/cli.js +17 -17
  24. package/dist/{detect-PJZMUL2Z.js → detect-NTR2FUEG.js} +2 -2
  25. package/dist/{formula-JCNF43NE.js → formula-KOQV353G.js} +1 -1
  26. package/dist/formula-KOQV353G.js.map +1 -0
  27. package/dist/{formula-RXVSQPXI.js → formula-MEDGYQXS.js} +1 -1
  28. package/dist/formula-MEDGYQXS.js.map +1 -0
  29. package/dist/{formula-5NKVS2LR.cjs → formula-ZYUDQHD3.cjs} +1 -1
  30. package/dist/formula-ZYUDQHD3.cjs.map +1 -0
  31. package/dist/index.cjs +298 -229
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.js +160 -91
  34. package/dist/index.js.map +1 -1
  35. package/dist/mcp.js +13 -13
  36. package/dist/page-range-CIRRJPXJ.js +7 -0
  37. package/dist/page-range-OF5I4PQY.js +8 -0
  38. package/dist/page-range-TPIRSA3J.cjs +8 -0
  39. package/dist/page-range-TPIRSA3J.cjs.map +1 -0
  40. package/dist/{parser-C636QIOB.js → parser-5EHWYJMC.js} +24 -6
  41. package/dist/parser-5EHWYJMC.js.map +1 -0
  42. package/dist/{parser-VEY4B5CJ.cjs → parser-E6U5TNAU.cjs} +36 -18
  43. package/dist/parser-E6U5TNAU.cjs.map +1 -0
  44. package/dist/{parser-DMKHIV4E.js → parser-UGB3NIVH.js} +23 -5
  45. package/dist/parser-UGB3NIVH.js.map +1 -0
  46. package/dist/{profile-io-JYGCC6XQ.js → profile-io-CAKRPQRD.js} +3 -3
  47. package/dist/provider-5K7O3Z2O.cjs.map +1 -1
  48. package/dist/render-P6663O4I.js +10 -0
  49. package/dist/seal-7PPTXKKV.js +10 -0
  50. package/dist/{setup-57FB3LSP.js → setup-QSJ2INNS.js} +1 -1
  51. package/dist/setup-QSJ2INNS.js.map +1 -0
  52. package/dist/{watch-ZQUFJBFR.js → watch-RMX427YR.js} +9 -9
  53. package/package.json +1 -1
  54. package/dist/chunk-5CJGKKMZ.js.map +0 -1
  55. package/dist/chunk-DCZVOIEO.cjs.map +0 -1
  56. package/dist/chunk-DQJTNXVS.cjs.map +0 -1
  57. package/dist/chunk-GE43BE46.js.map +0 -1
  58. package/dist/chunk-HC2SEH6I.js.map +0 -1
  59. package/dist/chunk-MOL7MDBG.js.map +0 -1
  60. package/dist/formula-5NKVS2LR.cjs.map +0 -1
  61. package/dist/formula-JCNF43NE.js.map +0 -1
  62. package/dist/formula-RXVSQPXI.js.map +0 -1
  63. package/dist/page-range-737B4EZW.js +0 -8
  64. package/dist/page-range-LNMXJU6W.js +0 -7
  65. package/dist/page-range-P7SDW6LR.cjs +0 -8
  66. package/dist/page-range-P7SDW6LR.cjs.map +0 -1
  67. package/dist/parser-C636QIOB.js.map +0 -1
  68. package/dist/parser-DMKHIV4E.js.map +0 -1
  69. package/dist/parser-VEY4B5CJ.cjs.map +0 -1
  70. package/dist/render-ISOEOMTM.js +0 -10
  71. package/dist/seal-676ZIAZZ.js +0 -10
  72. package/dist/setup-57FB3LSP.js.map +0 -1
  73. /package/dist/{-NDU7YGSS.js.map → -6HWEFXVV.js.map} +0 -0
  74. /package/dist/{chunk-UVSOSFER.js.map → chunk-2SN3CKME.js.map} +0 -0
  75. /package/dist/{chunk-HOGJ5ALY.js.map → chunk-5OKHAJ62.js.map} +0 -0
  76. /package/dist/{chunk-5SOZXPQY.js.map → chunk-BKWHX3RC.js.map} +0 -0
  77. /package/dist/{chunk-L3I4TIRP.js.map → chunk-CNM75ZSX.js.map} +0 -0
  78. /package/dist/{chunk-63ASYC4N.js.map → chunk-NGSHDBQR.js.map} +0 -0
  79. /package/dist/{chunk-KA4FEBS2.js.map → chunk-ONXVBURQ.js.map} +0 -0
  80. /package/dist/{chunk-4C7SBZNW.js.map → chunk-Q7EN4EUJ.js.map} +0 -0
  81. /package/dist/{detect-PJZMUL2Z.js.map → detect-NTR2FUEG.js.map} +0 -0
  82. /package/dist/{page-range-737B4EZW.js.map → page-range-CIRRJPXJ.js.map} +0 -0
  83. /package/dist/{page-range-LNMXJU6W.js.map → page-range-OF5I4PQY.js.map} +0 -0
  84. /package/dist/{profile-io-JYGCC6XQ.js.map → profile-io-CAKRPQRD.js.map} +0 -0
  85. /package/dist/{render-ISOEOMTM.js.map → render-P6663O4I.js.map} +0 -0
  86. /package/dist/{seal-676ZIAZZ.js.map → seal-7PPTXKKV.js.map} +0 -0
  87. /package/dist/{watch-ZQUFJBFR.js.map → watch-RMX427YR.js.map} +0 -0
package/dist/mcp.js CHANGED
@@ -31,24 +31,24 @@ import {
31
31
  patchHwp,
32
32
  patchHwpx,
33
33
  unknownFontWarnings
34
- } from "./chunk-HC2SEH6I.js";
34
+ } from "./chunk-TJJTLM76.js";
35
35
  import {
36
36
  blocksToMarkdown
37
- } from "./chunk-UVSOSFER.js";
37
+ } from "./chunk-2SN3CKME.js";
38
38
  import {
39
39
  detectFormat,
40
40
  detectZipFormat
41
- } from "./chunk-5CJGKKMZ.js";
42
- import "./chunk-MOL7MDBG.js";
43
- import "./chunk-63ASYC4N.js";
44
- import "./chunk-5SOZXPQY.js";
45
- import "./chunk-4C7SBZNW.js";
41
+ } from "./chunk-CFQLK3LM.js";
42
+ import "./chunk-3TBUDJDE.js";
43
+ import "./chunk-NGSHDBQR.js";
44
+ import "./chunk-BKWHX3RC.js";
45
+ import "./chunk-Q7EN4EUJ.js";
46
46
  import {
47
47
  KordocError,
48
48
  VERSION,
49
49
  sanitizeError,
50
50
  toArrayBuffer
51
- } from "./chunk-L3I4TIRP.js";
51
+ } from "./chunk-CNM75ZSX.js";
52
52
 
53
53
  // src/mcp.ts
54
54
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
@@ -211,7 +211,7 @@ server.tool(
211
211
  let metadata;
212
212
  let effectiveFormat = format;
213
213
  if (format === "hwpx") {
214
- const { detectZipFormat: detectZipFormat2 } = await import("./detect-PJZMUL2Z.js");
214
+ const { detectZipFormat: detectZipFormat2 } = await import("./detect-NTR2FUEG.js");
215
215
  const zipFormat = await detectZipFormat2(buffer);
216
216
  if (zipFormat === "xlsx" || zipFormat === "docx") effectiveFormat = zipFormat;
217
217
  }
@@ -224,7 +224,7 @@ server.tool(
224
224
  break;
225
225
  case "pdf":
226
226
  try {
227
- const { extractPdfMetadataOnly } = await import("./parser-C636QIOB.js");
227
+ const { extractPdfMetadataOnly } = await import("./parser-5EHWYJMC.js");
228
228
  metadata = await extractPdfMetadataOnly(buffer);
229
229
  } catch {
230
230
  metadata = void 0;
@@ -576,7 +576,7 @@ server.tool(
576
576
  }
577
577
  const image = new Uint8Array(readFileSync(imgResolved));
578
578
  const ext = extname(image_path).slice(1).toLowerCase() || "png";
579
- const { placeSealHwpx } = await import("./seal-676ZIAZZ.js");
579
+ const { placeSealHwpx } = await import("./seal-7PPTXKKV.js");
580
580
  const result = await placeSealHwpx(buffer, [{
581
581
  anchor,
582
582
  occurrence,
@@ -671,7 +671,7 @@ server.tool(
671
671
  async ({ hwpx_path, output_path }) => {
672
672
  try {
673
673
  const { buffer } = readValidatedFile(hwpx_path);
674
- const { hwpxToProfile } = await import("./-NDU7YGSS.js");
674
+ const { hwpxToProfile } = await import("./-6HWEFXVV.js");
675
675
  const profile = await hwpxToProfile(buffer);
676
676
  const out = resolve(output_path);
677
677
  mkdirSync(dirname(out), { recursive: true });
@@ -755,7 +755,7 @@ server.tool(
755
755
  }
756
756
  let profile;
757
757
  if (profile_path) {
758
- const { parseFormatProfileJson } = await import("./profile-io-JYGCC6XQ.js");
758
+ const { parseFormatProfileJson } = await import("./profile-io-CAKRPQRD.js");
759
759
  profile = parseFormatProfileJson(readFileSync(resolve(profile_path), "utf-8"));
760
760
  }
761
761
  const buf = await markdownToHwpx(markdown, gongmun || profile ? { ...gongmun ? { gongmun } : {}, ...profile ? { profile } : {} } : void 0);
@@ -0,0 +1,7 @@
1
+ import {
2
+ parsePageRange
3
+ } from "./chunk-AIQ3ISQU.js";
4
+ export {
5
+ parsePageRange
6
+ };
7
+ //# sourceMappingURL=page-range-CIRRJPXJ.js.map
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ parsePageRange
4
+ } from "./chunk-3TBUDJDE.js";
5
+ export {
6
+ parsePageRange
7
+ };
8
+ //# sourceMappingURL=page-range-OF5I4PQY.js.map
@@ -0,0 +1,8 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkX34YWRL5cjs = require('./chunk-X34YWRL5.cjs');
4
+ require('./chunk-GS7T56RP.cjs');
5
+
6
+
7
+ exports.parsePageRange = _chunkX34YWRL5cjs.parsePageRange;
8
+ //# sourceMappingURL=page-range-TPIRSA3J.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["d:\\AI_Project\\kordoc\\dist\\page-range-TPIRSA3J.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACF,0DAAC","file":"D:\\AI_Project\\kordoc\\dist\\page-range-TPIRSA3J.cjs"}
@@ -4,15 +4,15 @@ import {
4
4
  HEADING_RATIO_H2,
5
5
  HEADING_RATIO_H3,
6
6
  blocksToMarkdown
7
- } from "./chunk-UVSOSFER.js";
7
+ } from "./chunk-2SN3CKME.js";
8
8
  import {
9
9
  parsePageRange
10
- } from "./chunk-MOL7MDBG.js";
10
+ } from "./chunk-3TBUDJDE.js";
11
11
  import {
12
12
  KordocError,
13
13
  safeMax,
14
14
  safeMin
15
- } from "./chunk-L3I4TIRP.js";
15
+ } from "./chunk-CNM75ZSX.js";
16
16
 
17
17
  // src/pdf/line-extract.ts
18
18
  import { OPS } from "pdfjs-dist/legacy/build/pdf.mjs";
@@ -1224,9 +1224,15 @@ function normalizeUndersegmentedTable(originalCells, colXs, items) {
1224
1224
  }
1225
1225
 
1226
1226
  // src/pdf/quality.ts
1227
+ var RARE_JONG = /* @__PURE__ */ new Set([3, 5, 6, 9, 10, 11, 12, 13, 14, 15, 18, 24, 25, 26]);
1228
+ var MOJIBAKE_MIN_HANGUL = 30;
1229
+ var MOJIBAKE_MAX_NOBATCHIM = 0.15;
1230
+ var MOJIBAKE_MIN_RAREBATCHIM = 0.25;
1227
1231
  function computePageQuality(page, text) {
1228
1232
  let total = 0;
1229
1233
  let hangul = 0;
1234
+ let hangulNoBatchim = 0;
1235
+ let hangulRareBatchim = 0;
1230
1236
  let control = 0;
1231
1237
  let replacement = 0;
1232
1238
  let pua = 0;
@@ -1244,6 +1250,9 @@ function computePageQuality(page, text) {
1244
1250
  }
1245
1251
  if (code >= 44032 && code <= 55203) {
1246
1252
  hangul++;
1253
+ const jong = (code - 44032) % 28;
1254
+ if (jong === 0) hangulNoBatchim++;
1255
+ else if (RARE_JONG.has(jong)) hangulRareBatchim++;
1247
1256
  continue;
1248
1257
  }
1249
1258
  if (code >= 57344 && code <= 63743 || code >= 56192 && code <= 56319) {
@@ -1255,6 +1264,9 @@ function computePageQuality(page, text) {
1255
1264
  const puaRatio = pua / denom;
1256
1265
  const controlCharRatio = control / denom;
1257
1266
  const replacementCharRatio = replacement / denom;
1267
+ const hangulNoBatchimRatio = hangul > 0 ? hangulNoBatchim / hangul : 0;
1268
+ const hangulRareBatchimRatio = hangul > 0 ? hangulRareBatchim / hangul : 0;
1269
+ const garbledHangul = hangul >= MOJIBAKE_MIN_HANGUL && hangulNoBatchimRatio < MOJIBAKE_MAX_NOBATCHIM && hangulRareBatchimRatio >= MOJIBAKE_MIN_RAREBATCHIM;
1258
1270
  let needsOcr = false;
1259
1271
  let ocrReason;
1260
1272
  if (total < LOW_TEXT_THRESHOLD) {
@@ -1269,6 +1281,9 @@ function computePageQuality(page, text) {
1269
1281
  } else if (replacementCharRatio >= HIGH_REPLACEMENT_THRESHOLD) {
1270
1282
  needsOcr = true;
1271
1283
  ocrReason = "high_replacement";
1284
+ } else if (garbledHangul) {
1285
+ needsOcr = true;
1286
+ ocrReason = "garbled_hangul";
1272
1287
  }
1273
1288
  return {
1274
1289
  page,
@@ -1277,6 +1292,8 @@ function computePageQuality(page, text) {
1277
1292
  controlCharRatio,
1278
1293
  replacementCharRatio,
1279
1294
  puaRatio,
1295
+ hangulNoBatchimRatio,
1296
+ hangulRareBatchimRatio,
1280
1297
  needsOcr,
1281
1298
  ocrReason
1282
1299
  };
@@ -3373,7 +3390,7 @@ function mergeKoreanLines(text) {
3373
3390
 
3374
3391
  // src/pdf/formula-ocr.ts
3375
3392
  async function applyFormulaOcr(buffer, blocks, pageFilter, effectivePageCount, warnings, _onProgress) {
3376
- const formulaMod = await import("./formula-JCNF43NE.js");
3393
+ const formulaMod = await import("./formula-KOQV353G.js");
3377
3394
  const { FormulaPipeline, ensureFormulaModels } = formulaMod;
3378
3395
  await ensureFormulaModels((p) => {
3379
3396
  if (p.phase === "download" && p.total) {
@@ -3646,7 +3663,8 @@ async function parsePdfDocument(buffer, options) {
3646
3663
  low_text: "\uD14D\uC2A4\uD2B8\uAC00 \uAC70\uC758 \uC5C6\uB294 \uD398\uC774\uC9C0 (\uC2A4\uCE94/\uC774\uBBF8\uC9C0 \uCD94\uC815)",
3647
3664
  high_pua: "\uAE00\uAF34 \uB9E4\uD551 \uC2E4\uD328 (PUA \uBE44\uC728 \uB192\uC74C) \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8 \uC2E0\uB8B0 \uBD88\uAC00",
3648
3665
  high_control: "\uC81C\uC5B4\uBB38\uC790 \uBE44\uC728 \uB192\uC74C \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8 \uC2E0\uB8B0 \uBD88\uAC00",
3649
- high_replacement: "\uB300\uCCB4\uBB38\uC790(U+FFFD) \uBE44\uC728 \uB192\uC74C \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8 \uC2E0\uB8B0 \uBD88\uAC00"
3666
+ high_replacement: "\uB300\uCCB4\uBB38\uC790(U+FFFD) \uBE44\uC728 \uB192\uC74C \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8 \uC2E0\uB8B0 \uBD88\uAC00",
3667
+ garbled_hangul: "\uAE00\uAF34 \uB9E4\uD551 \uC2E4\uD328 (\uD55C\uAE00 \uC790\uC18C \uBD84\uD3EC \uC774\uC0C1) \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8\uAC00 \uAE68\uC84C\uC744 \uC218 \uC788\uC74C"
3650
3668
  };
3651
3669
  for (const pq of pageQuality) {
3652
3670
  if (!pq.needsOcr || !pq.ocrReason) continue;
@@ -3744,4 +3762,4 @@ export {
3744
3762
  parsePdfDocument,
3745
3763
  removeHeaderFooterBlocks
3746
3764
  };
3747
- //# sourceMappingURL=parser-C636QIOB.js.map
3765
+ //# sourceMappingURL=parser-5EHWYJMC.js.map