kordoc 4.9.2 → 4.10.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 (127) hide show
  1. package/README.md +44 -0
  2. package/dist/{-Z4LCTGQR.js → -AN4MKOOO.js} +9 -9
  3. package/dist/{chunk-BAJVZXC7.cjs → chunk-2FNQN23O.cjs} +3 -3
  4. package/dist/chunk-2FNQN23O.cjs.map +1 -0
  5. package/dist/{chunk-WLZX2HTC.js → chunk-34IBS3JN.js} +3 -3
  6. package/dist/{chunk-6WYMV73J.js → chunk-4EJLRZ7A.js} +50 -16
  7. package/dist/chunk-4EJLRZ7A.js.map +1 -0
  8. package/dist/{chunk-KATZTHWA.cjs → chunk-4SIKWOLQ.cjs} +2 -2
  9. package/dist/chunk-4SIKWOLQ.cjs.map +1 -0
  10. package/dist/{chunk-OOT54JF2.js → chunk-7UUQXASL.js} +2 -2
  11. package/dist/{chunk-OOT54JF2.js.map → chunk-7UUQXASL.js.map} +1 -1
  12. package/dist/{chunk-LJP3PK2S.js → chunk-AOTA4XTU.js} +2 -2
  13. package/dist/{chunk-LUY46O7O.js → chunk-B4MQXOU5.js} +2 -2
  14. package/dist/chunk-DCZVOIEO.cjs.map +1 -1
  15. package/dist/{chunk-JHPEDWJX.js → chunk-EWUFLCRP.js} +3 -3
  16. package/dist/{chunk-OYQL3D4B.js → chunk-F3OPGGQ2.js} +2 -2
  17. package/dist/chunk-GS7T56RP.cjs.map +1 -1
  18. package/dist/{chunk-PIUPP3FL.js → chunk-HO7N6T36.js} +3 -3
  19. package/dist/{chunk-PKCDYIIJ.js → chunk-JAY6BXZ6.js} +2 -2
  20. package/dist/{chunk-TK7WUS47.js → chunk-KEF4UQYI.js} +2 -2
  21. package/dist/{chunk-XINP35F4.js → chunk-N3DLQ2YH.js} +1 -1
  22. package/dist/{chunk-XINP35F4.js.map → chunk-N3DLQ2YH.js.map} +1 -1
  23. package/dist/{chunk-GL6BCNJV.js → chunk-NE7GR65O.js} +3 -3
  24. package/dist/{chunk-5ZPXRDS2.js → chunk-NMXDXHHW.js} +2 -2
  25. package/dist/{chunk-5ZPXRDS2.js.map → chunk-NMXDXHHW.js.map} +1 -1
  26. package/dist/{chunk-BN33O25L.js → chunk-ONQHGZTS.js} +1 -1
  27. package/dist/{chunk-BN33O25L.js.map → chunk-ONQHGZTS.js.map} +1 -1
  28. package/dist/{chunk-NIQ4JCQF.cjs → chunk-OQNZCCJI.cjs} +6 -6
  29. package/dist/chunk-OQNZCCJI.cjs.map +1 -0
  30. package/dist/{chunk-Y7QB4IB6.js → chunk-PDXRLQD6.js} +2 -2
  31. package/dist/{chunk-NOEYLJGJ.js → chunk-QYXQJPB7.js} +3 -3
  32. package/dist/{chunk-NIBRVLGS.js → chunk-SV2YYPBO.js} +3 -3
  33. package/dist/{chunk-L5CDTOC3.cjs → chunk-T7GRHAIW.cjs} +1 -1
  34. package/dist/chunk-T7GRHAIW.cjs.map +1 -0
  35. package/dist/{chunk-V3Q6I2AQ.cjs → chunk-V7F5765M.cjs} +4 -4
  36. package/dist/chunk-V7F5765M.cjs.map +1 -0
  37. package/dist/{chunk-VYGNPB2X.js → chunk-VR3ECURZ.js} +2 -2
  38. package/dist/{chunk-LKZQ4564.js → chunk-WLUDCIOK.js} +2 -2
  39. package/dist/{chunk-LREEDIEF.js → chunk-YVPYCQOG.js} +2 -2
  40. package/dist/{chunk-SHBVD23C.cjs → chunk-ZOLKTMBS.cjs} +11 -11
  41. package/dist/chunk-ZOLKTMBS.cjs.map +1 -0
  42. package/dist/chunks-JUBR2TW7.js +10 -0
  43. package/dist/cli.js +37 -33
  44. package/dist/cli.js.map +1 -1
  45. package/dist/{formula-JVBJ6QRG.cjs → formula-4QA6ZSFP.cjs} +9 -9
  46. package/dist/formula-4QA6ZSFP.cjs.map +1 -0
  47. package/dist/{formula-LFWZG7T7.js → formula-LFDXPFQH.js} +4 -4
  48. package/dist/{formula-77TJPACH.js → formula-UYS7Z7IH.js} +3 -3
  49. package/dist/{image-ocr-YZ56O63S.js → image-ocr-3YP5I2H4.js} +6 -6
  50. package/dist/{image-ocr-6SY623KL.js → image-ocr-NOU6O7ZY.js} +8 -8
  51. package/dist/{image-ocr-YTGAUHEP.cjs → image-ocr-POPCJGL5.cjs} +12 -12
  52. package/dist/image-ocr-POPCJGL5.cjs.map +1 -0
  53. package/dist/index.cjs +222 -189
  54. package/dist/index.cjs.map +1 -1
  55. package/dist/index.d.cts +2 -0
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.js +45 -12
  58. package/dist/index.js.map +1 -1
  59. package/dist/mcp.js +16 -16
  60. package/dist/{model-bundle-W7B3BIYS.js → model-bundle-AUKJF6GA.js} +5 -5
  61. package/dist/{models-FUKPEVPE.js → models-QKSQSUWJ.js} +5 -5
  62. package/dist/page-range-P7SDW6LR.cjs.map +1 -1
  63. package/dist/{parser-6UL2HLDH.js → parser-6HKVNDZM.js} +7 -7
  64. package/dist/{parser-WIRWVN5E.cjs → parser-VAIMONF2.cjs} +27 -27
  65. package/dist/parser-VAIMONF2.cjs.map +1 -0
  66. package/dist/{parser-GDYZDBZI.js → parser-VVGAZIAX.js} +7 -7
  67. package/dist/pdf-ocr-4CWHKKTX.cjs +14 -0
  68. package/dist/pdf-ocr-4CWHKKTX.cjs.map +1 -0
  69. package/dist/pdf-ocr-D6HR23OB.js +13 -0
  70. package/dist/pdf-ocr-WIMNTEVH.js +16 -0
  71. package/dist/{profile-io-4EE64K6Y.js → profile-io-PYCSBITE.js} +3 -3
  72. package/dist/{rasterize-QW7SSKHB.js → rasterize-TUBHYALD.js} +2 -2
  73. package/dist/render-QW5Z4IMW.js +10 -0
  74. package/dist/seal-OTOP5CLA.js +10 -0
  75. package/dist/{setup-JS7E2HFM.js → setup-6EUKBDMC.js} +3 -3
  76. package/dist/{watch-YISVPGW3.js → watch-JVGXPTCI.js} +10 -10
  77. package/package.json +1 -1
  78. package/dist/chunk-6WYMV73J.js.map +0 -1
  79. package/dist/chunk-BAJVZXC7.cjs.map +0 -1
  80. package/dist/chunk-KATZTHWA.cjs.map +0 -1
  81. package/dist/chunk-L5CDTOC3.cjs.map +0 -1
  82. package/dist/chunk-NIQ4JCQF.cjs.map +0 -1
  83. package/dist/chunk-SHBVD23C.cjs.map +0 -1
  84. package/dist/chunk-V3Q6I2AQ.cjs.map +0 -1
  85. package/dist/chunks-TRJGNO4N.js +0 -10
  86. package/dist/formula-JVBJ6QRG.cjs.map +0 -1
  87. package/dist/image-ocr-YTGAUHEP.cjs.map +0 -1
  88. package/dist/parser-WIRWVN5E.cjs.map +0 -1
  89. package/dist/pdf-ocr-O373AAN6.cjs +0 -14
  90. package/dist/pdf-ocr-O373AAN6.cjs.map +0 -1
  91. package/dist/pdf-ocr-OHUAQQMN.js +0 -16
  92. package/dist/pdf-ocr-XTE234WC.js +0 -13
  93. package/dist/render-2NID54BX.js +0 -10
  94. package/dist/seal-PTP4TWYR.js +0 -10
  95. /package/dist/{-Z4LCTGQR.js.map → -AN4MKOOO.js.map} +0 -0
  96. /package/dist/{chunk-WLZX2HTC.js.map → chunk-34IBS3JN.js.map} +0 -0
  97. /package/dist/{chunk-LJP3PK2S.js.map → chunk-AOTA4XTU.js.map} +0 -0
  98. /package/dist/{chunk-LUY46O7O.js.map → chunk-B4MQXOU5.js.map} +0 -0
  99. /package/dist/{chunk-JHPEDWJX.js.map → chunk-EWUFLCRP.js.map} +0 -0
  100. /package/dist/{chunk-OYQL3D4B.js.map → chunk-F3OPGGQ2.js.map} +0 -0
  101. /package/dist/{chunk-PIUPP3FL.js.map → chunk-HO7N6T36.js.map} +0 -0
  102. /package/dist/{chunk-PKCDYIIJ.js.map → chunk-JAY6BXZ6.js.map} +0 -0
  103. /package/dist/{chunk-TK7WUS47.js.map → chunk-KEF4UQYI.js.map} +0 -0
  104. /package/dist/{chunk-GL6BCNJV.js.map → chunk-NE7GR65O.js.map} +0 -0
  105. /package/dist/{chunk-Y7QB4IB6.js.map → chunk-PDXRLQD6.js.map} +0 -0
  106. /package/dist/{chunk-NOEYLJGJ.js.map → chunk-QYXQJPB7.js.map} +0 -0
  107. /package/dist/{chunk-NIBRVLGS.js.map → chunk-SV2YYPBO.js.map} +0 -0
  108. /package/dist/{chunk-VYGNPB2X.js.map → chunk-VR3ECURZ.js.map} +0 -0
  109. /package/dist/{chunk-LKZQ4564.js.map → chunk-WLUDCIOK.js.map} +0 -0
  110. /package/dist/{chunk-LREEDIEF.js.map → chunk-YVPYCQOG.js.map} +0 -0
  111. /package/dist/{chunks-TRJGNO4N.js.map → chunks-JUBR2TW7.js.map} +0 -0
  112. /package/dist/{formula-LFWZG7T7.js.map → formula-LFDXPFQH.js.map} +0 -0
  113. /package/dist/{formula-77TJPACH.js.map → formula-UYS7Z7IH.js.map} +0 -0
  114. /package/dist/{image-ocr-YZ56O63S.js.map → image-ocr-3YP5I2H4.js.map} +0 -0
  115. /package/dist/{image-ocr-6SY623KL.js.map → image-ocr-NOU6O7ZY.js.map} +0 -0
  116. /package/dist/{model-bundle-W7B3BIYS.js.map → model-bundle-AUKJF6GA.js.map} +0 -0
  117. /package/dist/{models-FUKPEVPE.js.map → models-QKSQSUWJ.js.map} +0 -0
  118. /package/dist/{parser-6UL2HLDH.js.map → parser-6HKVNDZM.js.map} +0 -0
  119. /package/dist/{parser-GDYZDBZI.js.map → parser-VVGAZIAX.js.map} +0 -0
  120. /package/dist/{pdf-ocr-OHUAQQMN.js.map → pdf-ocr-D6HR23OB.js.map} +0 -0
  121. /package/dist/{pdf-ocr-XTE234WC.js.map → pdf-ocr-WIMNTEVH.js.map} +0 -0
  122. /package/dist/{profile-io-4EE64K6Y.js.map → profile-io-PYCSBITE.js.map} +0 -0
  123. /package/dist/{rasterize-QW7SSKHB.js.map → rasterize-TUBHYALD.js.map} +0 -0
  124. /package/dist/{render-2NID54BX.js.map → render-QW5Z4IMW.js.map} +0 -0
  125. /package/dist/{seal-PTP4TWYR.js.map → seal-OTOP5CLA.js.map} +0 -0
  126. /package/dist/{setup-JS7E2HFM.js.map → setup-6EUKBDMC.js.map} +0 -0
  127. /package/dist/{watch-YISVPGW3.js.map → watch-JVGXPTCI.js.map} +0 -0
package/dist/index.d.cts CHANGED
@@ -329,6 +329,8 @@ interface ExtractedImage {
329
329
  data: Uint8Array;
330
330
  /** MIME 타입 */
331
331
  mimeType: string;
332
+ /** 원본 컨테이너 내 항목명 (HWPX/DOCX ZIP 경로, HWP5 BinData 스토리지명 — PDF 등 합성 이미지는 없음, #70) */
333
+ source?: string;
332
334
  }
333
335
  interface ParseFailure extends ParseResultBase {
334
336
  success: false;
package/dist/index.d.ts CHANGED
@@ -329,6 +329,8 @@ interface ExtractedImage {
329
329
  data: Uint8Array;
330
330
  /** MIME 타입 */
331
331
  mimeType: string;
332
+ /** 원본 컨테이너 내 항목명 (HWPX/DOCX ZIP 경로, HWP5 BinData 스토리지명 — PDF 등 합성 이미지는 없음, #70) */
333
+ source?: string;
332
334
  }
333
335
  interface ParseFailure extends ParseResultBase {
334
336
  success: false;
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  flattenLayoutTables,
9
9
  inlineImagesIntoMarkdown,
10
10
  mapPuaText
11
- } from "./chunk-VYGNPB2X.js";
11
+ } from "./chunk-VR3ECURZ.js";
12
12
  import {
13
13
  parsePageRange
14
14
  } from "./chunk-GE43BE46.js";
@@ -16,7 +16,7 @@ import {
16
16
  HEADING_RATIO_H1,
17
17
  HEADING_RATIO_H2,
18
18
  HEADING_RATIO_H3
19
- } from "./chunk-BN33O25L.js";
19
+ } from "./chunk-ONQHGZTS.js";
20
20
  import {
21
21
  KordocError,
22
22
  VERSION,
@@ -29,7 +29,7 @@ import {
29
29
  sanitizeHref,
30
30
  stripDtd,
31
31
  toArrayBuffer
32
- } from "./chunk-OOT54JF2.js";
32
+ } from "./chunk-7UUQXASL.js";
33
33
 
34
34
  // src/index.ts
35
35
  import { readFile } from "fs/promises";
@@ -2927,7 +2927,7 @@ function resolveImageBlocks(binDataMap, blocks, warnings, sweepUnreferenced) {
2927
2927
  const ext = mime.includes("jpeg") ? "jpg" : mime.includes("png") ? "png" : mime.includes("gif") ? "gif" : mime.includes("bmp") ? "bmp" : "bin";
2928
2928
  img = { filename: `image_${String(imageIndex).padStart(3, "0")}.${ext}`, data: new Uint8Array(bin.data), mime };
2929
2929
  resolved.set(storageId, img);
2930
- images.push({ filename: img.filename, data: img.data, mimeType: img.mime });
2930
+ images.push({ filename: img.filename, data: img.data, mimeType: img.mime, source: bin.name });
2931
2931
  renamed.set(storageId, img.filename);
2932
2932
  }
2933
2933
  }
@@ -2951,7 +2951,7 @@ function resolveImageBlocks(binDataMap, blocks, warnings, sweepUnreferenced) {
2951
2951
  const ext = mime.includes("jpeg") ? "jpg" : mime.includes("png") ? "png" : mime.includes("gif") ? "gif" : mime.includes("bmp") ? "bmp" : "bin";
2952
2952
  const filename = `image_${String(imageIndex).padStart(3, "0")}.${ext}`;
2953
2953
  const data = new Uint8Array(bin.data);
2954
- images.push({ filename, data, mimeType: mime });
2954
+ images.push({ filename, data, mimeType: mime, source: bin.name });
2955
2955
  blocks.push({ type: "image", text: filename, imageData: { data, mimeType: mime, filename: bin.name } });
2956
2956
  }
2957
2957
  }
@@ -3088,7 +3088,7 @@ async function extractImagesFromZip(zip, blocks, decompressed, warnings, sweepUn
3088
3088
  const mimeType = imageExtToMime(ext);
3089
3089
  imageIndex++;
3090
3090
  const filename2 = `image_${String(imageIndex).padStart(3, "0")}.${mimeToExt(mimeType)}`;
3091
- img = { filename: filename2, data, mimeType };
3091
+ img = { filename: filename2, data, mimeType, source: path };
3092
3092
  images.push(img);
3093
3093
  usedPaths.add(path);
3094
3094
  break;
@@ -3127,7 +3127,7 @@ async function extractImagesFromZip(zip, blocks, decompressed, warnings, sweepUn
3127
3127
  }
3128
3128
  imageIndex++;
3129
3129
  const filename = `image_${String(imageIndex).padStart(3, "0")}.${mimeToExt(mimeType)}`;
3130
- const img = { filename, data, mimeType };
3130
+ const img = { filename, data, mimeType, source: file.name };
3131
3131
  images.push(img);
3132
3132
  blocks.push({ type: "image", text: filename, imageData: { data, mimeType, filename: file.name } });
3133
3133
  } catch (err) {
@@ -19790,10 +19790,14 @@ async function buildImageMap(zip, rels, doc, warnings) {
19790
19790
  gif: "image/gif",
19791
19791
  bmp: "image/bmp",
19792
19792
  wmf: "image/wmf",
19793
- emf: "image/emf"
19793
+ emf: "image/emf",
19794
+ tif: "image/tiff",
19795
+ tiff: "image/tiff",
19796
+ svg: "image/svg+xml"
19794
19797
  };
19795
19798
  const filename = `image_${String(imgIdx).padStart(3, "0")}.${ext}`;
19796
- images.push({ filename, data, mimeType: mimeMap[ext] ?? "image/png" });
19799
+ const mimeType = mimeMap[ext] ?? detectImageMime(data) ?? "application/octet-stream";
19800
+ images.push({ filename, data, mimeType, source: imgPath });
19797
19801
  imageMap.set(embedId, filename);
19798
19802
  } catch (err) {
19799
19803
  warnings.push({
@@ -29530,7 +29534,7 @@ async function patchHwp(original, editedMarkdown, options) {
29530
29534
  for (let i = 0; i < scans.length; i++) {
29531
29535
  if (scans[i].repl.size === 0 && scans[i].inserts.size === 0) continue;
29532
29536
  const newStream = serializeRecords(scans[i].records, scans[i].repl, scans[i].inserts);
29533
- const content = compressed ? deflateRawSync2(newStream) : newStream;
29537
+ const content = compressed ? compressWithTail(newStream) : newStream;
29534
29538
  out = replaceOleStream(out, sectionPaths[i], content);
29535
29539
  }
29536
29540
  data = new Uint8Array(out);
@@ -30013,6 +30017,26 @@ function rebuildCharShape(csData, coreStartUnit) {
30013
30017
  });
30014
30018
  return { buf, count: kept.length };
30015
30019
  }
30020
+ var CRC_TABLE2 = (() => {
30021
+ const t = new Uint32Array(256);
30022
+ for (let n = 0; n < 256; n++) {
30023
+ let c = n;
30024
+ for (let k = 0; k < 8; k++) c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;
30025
+ t[n] = c >>> 0;
30026
+ }
30027
+ return t;
30028
+ })();
30029
+ function crc322(buf) {
30030
+ let c = 4294967295;
30031
+ for (let i = 0; i < buf.length; i++) c = CRC_TABLE2[(c ^ buf[i]) & 255] ^ c >>> 8;
30032
+ return (c ^ 4294967295) >>> 0;
30033
+ }
30034
+ function compressWithTail(raw) {
30035
+ const tail = Buffer.alloc(8);
30036
+ tail.writeUInt32LE(crc322(raw), 0);
30037
+ tail.writeUInt32LE(raw.length >>> 0, 4);
30038
+ return Buffer.concat([deflateRawSync2(raw), tail]);
30039
+ }
30016
30040
  function synthesizeLineSegs(lineSegData, newRaw, startUnits) {
30017
30041
  if (lineSegData.length < 36) return null;
30018
30042
  const seg0 = lineSegData.subarray(0, 36);
@@ -30090,6 +30114,15 @@ function stageParaPatch(scan, para2, newPlain, skip) {
30090
30114
  scan.repl.set(para2.lineSegIdx, synth.buf);
30091
30115
  newHeader.writeUInt16LE(synth.count, 16);
30092
30116
  }
30117
+ } else {
30118
+ const lineSegData = records[para2.lineSegIdx].data;
30119
+ const segCount = Math.floor(lineSegData.length / 36);
30120
+ let keep = 1;
30121
+ while (keep < segCount && lineSegData.readUInt32LE(keep * 36) < nChars) keep++;
30122
+ if (keep < segCount) {
30123
+ scan.repl.set(para2.lineSegIdx, Buffer.from(lineSegData.subarray(0, keep * 36)));
30124
+ newHeader.writeUInt16LE(keep, 16);
30125
+ }
30093
30126
  }
30094
30127
  scan.repl.set(para2.headerIdx, newHeader);
30095
30128
  return 1;
@@ -31959,7 +31992,7 @@ async function dispatch(format, buffer, opts) {
31959
31992
  }
31960
31993
  async function parseImage(buffer, options) {
31961
31994
  try {
31962
- const { parseImageDocument } = await import("./image-ocr-YZ56O63S.js");
31995
+ const { parseImageDocument } = await import("./image-ocr-3YP5I2H4.js");
31963
31996
  const { blocks, warnings } = await parseImageDocument(buffer, options);
31964
31997
  return {
31965
31998
  success: true,
@@ -32018,7 +32051,7 @@ async function parseHwp(buffer, options) {
32018
32051
  async function parsePdf(buffer, options) {
32019
32052
  let parsePdfDocument;
32020
32053
  try {
32021
- const mod = await import("./parser-6UL2HLDH.js");
32054
+ const mod = await import("./parser-6HKVNDZM.js");
32022
32055
  parsePdfDocument = mod.parsePdfDocument;
32023
32056
  } catch {
32024
32057
  return {