kordoc 4.11.0 → 4.12.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 (105) hide show
  1. package/README.md +7 -0
  2. package/dist/{-LFHXUYGZ.js → -B3EUUBPV.js} +8 -8
  3. package/dist/{chunk-LYTFBD6P.js → chunk-2IR3PEZU.js} +2 -2
  4. package/dist/{chunk-476CF3WL.js → chunk-46UDI56N.js} +3 -3
  5. package/dist/{chunk-CF2FQBVN.js → chunk-4PKNWBXJ.js} +2 -2
  6. package/dist/{chunk-SD3ITJLU.js → chunk-7JQ2ITT2.js} +2 -2
  7. package/dist/{chunk-RSATURJN.cjs → chunk-AT23GFSK.cjs} +7 -7
  8. package/dist/{chunk-RSATURJN.cjs.map → chunk-AT23GFSK.cjs.map} +1 -1
  9. package/dist/{chunk-W6537QWB.js → chunk-BQE7AMFS.js} +2 -2
  10. package/dist/{chunk-JO3W54E5.cjs → chunk-BQSWSMRG.cjs} +2 -2
  11. package/dist/{chunk-JO3W54E5.cjs.map → chunk-BQSWSMRG.cjs.map} +1 -1
  12. package/dist/{chunk-4F4PZQTW.js → chunk-COGFPMEB.js} +2 -2
  13. package/dist/{chunk-3P6XONHY.js → chunk-DRLKMFDV.js} +3 -3
  14. package/dist/{chunk-FNNOBF36.js → chunk-GHVXLV52.js} +2 -2
  15. package/dist/{chunk-YBTTQQBH.cjs → chunk-HFJWCAJ2.cjs} +6 -6
  16. package/dist/{chunk-YBTTQQBH.cjs.map → chunk-HFJWCAJ2.cjs.map} +1 -1
  17. package/dist/{chunk-7XDCXPWC.js → chunk-HGUNWAXK.js} +2 -2
  18. package/dist/{chunk-Z37BVIRF.js → chunk-I2OETEEL.js} +2 -2
  19. package/dist/{chunk-Z6NFU6DA.js → chunk-MJPRWCI5.js} +2 -2
  20. package/dist/{chunk-W4DVZN5M.js → chunk-PFUW4I4I.js} +231 -77
  21. package/dist/chunk-PFUW4I4I.js.map +1 -0
  22. package/dist/{chunk-HXR7TSXU.js → chunk-QKFCGJJY.js} +2 -2
  23. package/dist/{chunk-V2TMM6OD.js → chunk-SKGYPM6L.js} +2 -2
  24. package/dist/{chunk-B6IA745V.js → chunk-SMGSCP57.js} +2 -2
  25. package/dist/{chunk-LXMQUWGU.js → chunk-TF5DS74F.js} +3 -3
  26. package/dist/{chunk-X25PKMMD.js → chunk-TJYZY2O6.js} +3 -3
  27. package/dist/{chunk-FN6NBZ34.cjs → chunk-TROD36DK.cjs} +3 -3
  28. package/dist/{chunk-FN6NBZ34.cjs.map → chunk-TROD36DK.cjs.map} +1 -1
  29. package/dist/{chunk-FQTPFGVG.cjs → chunk-TYYJSOZS.cjs} +4 -4
  30. package/dist/{chunk-FQTPFGVG.cjs.map → chunk-TYYJSOZS.cjs.map} +1 -1
  31. package/dist/{chunk-LM5A4DOY.js → chunk-YASFVKDT.js} +2 -2
  32. package/dist/chunks-Q4GCPRRU.js +10 -0
  33. package/dist/cli.js +20 -20
  34. package/dist/{formula-YCFGCLUF.js → formula-G4CD5KQ6.js} +3 -3
  35. package/dist/{formula-2ORTZGRU.js → formula-WGKKR5OQ.js} +4 -4
  36. package/dist/{formula-KFSWOSCF.cjs → formula-YMGXXRBQ.cjs} +9 -9
  37. package/dist/{formula-KFSWOSCF.cjs.map → formula-YMGXXRBQ.cjs.map} +1 -1
  38. package/dist/{image-ocr-ZV4AP2I6.cjs → image-ocr-BE2HHMVN.cjs} +11 -11
  39. package/dist/{image-ocr-ZV4AP2I6.cjs.map → image-ocr-BE2HHMVN.cjs.map} +1 -1
  40. package/dist/{image-ocr-2B7NVDRS.js → image-ocr-M4RP4INO.js} +7 -7
  41. package/dist/{image-ocr-JCKC4QWU.js → image-ocr-MBWZK3ZT.js} +5 -5
  42. package/dist/index.cjs +398 -244
  43. package/dist/index.cjs.map +1 -1
  44. package/dist/index.js +227 -73
  45. package/dist/index.js.map +1 -1
  46. package/dist/mcp.js +15 -15
  47. package/dist/{model-bundle-EX75CSEI.js → model-bundle-BIMP5DIH.js} +5 -5
  48. package/dist/{models-KJCNM77P.js → models-QPOEGHVA.js} +5 -5
  49. package/dist/{parser-2KFORGOT.js → parser-CMNHBVTL.js} +6 -6
  50. package/dist/{parser-TXBQATM7.js → parser-NR3XO4SM.js} +6 -6
  51. package/dist/{parser-WY5PY5V4.cjs → parser-QJY5W47V.cjs} +26 -26
  52. package/dist/{parser-WY5PY5V4.cjs.map → parser-QJY5W47V.cjs.map} +1 -1
  53. package/dist/pdf-ocr-DF3OTBKH.js +13 -0
  54. package/dist/pdf-ocr-R4DIKF4Q.js +16 -0
  55. package/dist/pdf-ocr-T3RHIZKY.cjs +14 -0
  56. package/dist/{pdf-ocr-JXYOCUGR.cjs.map → pdf-ocr-T3RHIZKY.cjs.map} +1 -1
  57. package/dist/{profile-io-Z5NKKNGW.js → profile-io-UZ43CLWX.js} +3 -3
  58. package/dist/{rasterize-66QIXE2S.js → rasterize-JC2JVVOF.js} +2 -2
  59. package/dist/render-KSQ6UGCP.js +10 -0
  60. package/dist/seal-EOFFQ4JR.js +10 -0
  61. package/dist/{setup-L2LYDZ6N.js → setup-WDUVPFX3.js} +3 -3
  62. package/dist/{watch-HJAEDIKZ.js → watch-UI7OXIES.js} +9 -9
  63. package/package.json +1 -1
  64. package/dist/chunk-W4DVZN5M.js.map +0 -1
  65. package/dist/chunks-Y32RX6IF.js +0 -10
  66. package/dist/pdf-ocr-GD6KYSH7.js +0 -16
  67. package/dist/pdf-ocr-JXYOCUGR.cjs +0 -14
  68. package/dist/pdf-ocr-MNCYWT4Z.js +0 -13
  69. package/dist/render-ILBFLY3A.js +0 -10
  70. package/dist/seal-AKUPO4YT.js +0 -10
  71. /package/dist/{-LFHXUYGZ.js.map → -B3EUUBPV.js.map} +0 -0
  72. /package/dist/{chunk-LYTFBD6P.js.map → chunk-2IR3PEZU.js.map} +0 -0
  73. /package/dist/{chunk-476CF3WL.js.map → chunk-46UDI56N.js.map} +0 -0
  74. /package/dist/{chunk-CF2FQBVN.js.map → chunk-4PKNWBXJ.js.map} +0 -0
  75. /package/dist/{chunk-SD3ITJLU.js.map → chunk-7JQ2ITT2.js.map} +0 -0
  76. /package/dist/{chunk-W6537QWB.js.map → chunk-BQE7AMFS.js.map} +0 -0
  77. /package/dist/{chunk-4F4PZQTW.js.map → chunk-COGFPMEB.js.map} +0 -0
  78. /package/dist/{chunk-3P6XONHY.js.map → chunk-DRLKMFDV.js.map} +0 -0
  79. /package/dist/{chunk-FNNOBF36.js.map → chunk-GHVXLV52.js.map} +0 -0
  80. /package/dist/{chunk-7XDCXPWC.js.map → chunk-HGUNWAXK.js.map} +0 -0
  81. /package/dist/{chunk-Z37BVIRF.js.map → chunk-I2OETEEL.js.map} +0 -0
  82. /package/dist/{chunk-Z6NFU6DA.js.map → chunk-MJPRWCI5.js.map} +0 -0
  83. /package/dist/{chunk-HXR7TSXU.js.map → chunk-QKFCGJJY.js.map} +0 -0
  84. /package/dist/{chunk-V2TMM6OD.js.map → chunk-SKGYPM6L.js.map} +0 -0
  85. /package/dist/{chunk-B6IA745V.js.map → chunk-SMGSCP57.js.map} +0 -0
  86. /package/dist/{chunk-LXMQUWGU.js.map → chunk-TF5DS74F.js.map} +0 -0
  87. /package/dist/{chunk-X25PKMMD.js.map → chunk-TJYZY2O6.js.map} +0 -0
  88. /package/dist/{chunk-LM5A4DOY.js.map → chunk-YASFVKDT.js.map} +0 -0
  89. /package/dist/{chunks-Y32RX6IF.js.map → chunks-Q4GCPRRU.js.map} +0 -0
  90. /package/dist/{formula-YCFGCLUF.js.map → formula-G4CD5KQ6.js.map} +0 -0
  91. /package/dist/{formula-2ORTZGRU.js.map → formula-WGKKR5OQ.js.map} +0 -0
  92. /package/dist/{image-ocr-2B7NVDRS.js.map → image-ocr-M4RP4INO.js.map} +0 -0
  93. /package/dist/{image-ocr-JCKC4QWU.js.map → image-ocr-MBWZK3ZT.js.map} +0 -0
  94. /package/dist/{model-bundle-EX75CSEI.js.map → model-bundle-BIMP5DIH.js.map} +0 -0
  95. /package/dist/{models-KJCNM77P.js.map → models-QPOEGHVA.js.map} +0 -0
  96. /package/dist/{parser-2KFORGOT.js.map → parser-CMNHBVTL.js.map} +0 -0
  97. /package/dist/{parser-TXBQATM7.js.map → parser-NR3XO4SM.js.map} +0 -0
  98. /package/dist/{pdf-ocr-GD6KYSH7.js.map → pdf-ocr-DF3OTBKH.js.map} +0 -0
  99. /package/dist/{pdf-ocr-MNCYWT4Z.js.map → pdf-ocr-R4DIKF4Q.js.map} +0 -0
  100. /package/dist/{profile-io-Z5NKKNGW.js.map → profile-io-UZ43CLWX.js.map} +0 -0
  101. /package/dist/{rasterize-66QIXE2S.js.map → rasterize-JC2JVVOF.js.map} +0 -0
  102. /package/dist/{render-ILBFLY3A.js.map → render-KSQ6UGCP.js.map} +0 -0
  103. /package/dist/{seal-AKUPO4YT.js.map → seal-EOFFQ4JR.js.map} +0 -0
  104. /package/dist/{setup-L2LYDZ6N.js.map → setup-WDUVPFX3.js.map} +0 -0
  105. /package/dist/{watch-HJAEDIKZ.js.map → watch-UI7OXIES.js.map} +0 -0
package/README.md CHANGED
@@ -89,6 +89,13 @@ MCP 등록 대신 스킬(SKILL.md) 형태로 쓰려면:
89
89
 
90
90
  ---
91
91
 
92
+ ## v4.12.0 변경사항
93
+
94
+ v4.11.0 이 걷어낸 HWP3 유실의 **잔여 전량**을 처리했습니다. rhwp `samples/` 의 HWP3 원본 9종을 한컴 변환본과 문자 멀티셋으로 대조하면, 이제 변환본에만 있는 문자는 그림 대체텍스트를 빼면 **0** 입니다.
95
+
96
+ - **🖼️ 그리기 개체 안 글상자 텍스트 회수 (#73)**: HWP3 의 ch=11(그림) 확장 블록은 `pic_type` 이 3 이면 그림이 아니라 **그리기 개체 트리**입니다. 표지 제목·순서도 라벨처럼 눈에 잘 띄는 본문이 그 안 글상자에 들어가는데, 종전에는 블록을 통째로 건너뛰어 사라졌습니다(sample16 618자, sample19 86자). 프레임 헤더 → 도형 트리(형제·자식 비트)를 훑어 글상자 문단 리스트를 본문과 같은 파서로 읽습니다. 비-글상자 도형이 '글상자로 만들기' 로 같은 블록을 실은 경우도, **잉여 길이가 스펙 표 78 과 정확히 맞을 때만** 회수합니다. 트리 해석은 확장 블록 슬라이스 안에서만 하므로 실패해도 본문 스트림 동기가 깨지지 않고 종전 동작으로 되돌아갑니다(재귀 256단계·도형 4,096개 상한).
97
+ - **🔣 비가시 마커가 대체 문자로 새던 것**: 새 번호·쪽 번호 위치·쪽 감추기 제어 문자 자리에 ``(U+FFFC)를 심어 마크다운에 그대로 남았습니다. 한글도 그 자리에 아무 글자를 내지 않습니다 — 차례 표식과 같은 계약으로 맞췄습니다.
98
+
92
99
  ## v4.11.0 변경사항
93
100
 
94
101
  rhwp 최신 devel(v0.8.3~0.8.4)을 훑어 kordoc 의 HWP3 디코더에 반영했습니다. 네 결함 모두 **글자가 경고 없이 사라지는** 형태라, 변환은 성공했는데 본문 일부가 비어 있는 식으로만 드러납니다.
@@ -56,7 +56,7 @@ import {
56
56
  unknownFontWarnings,
57
57
  usesGaejosikMunche,
58
58
  validateHwpx
59
- } from "./chunk-W4DVZN5M.js";
59
+ } from "./chunk-PFUW4I4I.js";
60
60
  import "./chunk-7FCNOKOR.js";
61
61
  import "./chunk-N3DLQ2YH.js";
62
62
  import "./chunk-MOL7MDBG.js";
@@ -66,7 +66,7 @@ import {
66
66
  buildRangeSplices,
67
67
  placeSealHwpx,
68
68
  scanSectionXml
69
- } from "./chunk-LXMQUWGU.js";
69
+ } from "./chunk-TF5DS74F.js";
70
70
  import {
71
71
  DEFAULT_REDACT_RULES,
72
72
  redactMarkdown,
@@ -74,10 +74,10 @@ import {
74
74
  } from "./chunk-DZIXKL7E.js";
75
75
  import {
76
76
  blocksToChunks
77
- } from "./chunk-LM5A4DOY.js";
77
+ } from "./chunk-YASFVKDT.js";
78
78
  import {
79
79
  blocksToMarkdown
80
- } from "./chunk-FNNOBF36.js";
80
+ } from "./chunk-GHVXLV52.js";
81
81
  import {
82
82
  SPACE_EM_FIXED,
83
83
  SPACE_EM_FONT,
@@ -87,11 +87,11 @@ import {
87
87
  renderHwpxToSvg,
88
88
  simulateWrap,
89
89
  simulateWrapKeepWord
90
- } from "./chunk-476CF3WL.js";
91
- import "./chunk-Z37BVIRF.js";
90
+ } from "./chunk-46UDI56N.js";
91
+ import "./chunk-I2OETEEL.js";
92
92
  import {
93
93
  VERSION
94
- } from "./chunk-CF2FQBVN.js";
94
+ } from "./chunk-4PKNWBXJ.js";
95
95
  export {
96
96
  BUILTIN_TEMPLATES,
97
97
  DEFAULT_REDACT_RULES,
@@ -169,4 +169,4 @@ export {
169
169
  usesGaejosikMunche,
170
170
  validateHwpx
171
171
  };
172
- //# sourceMappingURL=-LFHXUYGZ.js.map
172
+ //# sourceMappingURL=-B3EUUBPV.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  KordocError
4
- } from "./chunk-CF2FQBVN.js";
4
+ } from "./chunk-4PKNWBXJ.js";
5
5
 
6
6
  // src/shared/offline.ts
7
7
  import { realpathSync } from "fs";
@@ -49,4 +49,4 @@ export {
49
49
  getAccessRoot,
50
50
  assertWithinRoot
51
51
  };
52
- //# sourceMappingURL=chunk-LYTFBD6P.js.map
52
+ //# sourceMappingURL=chunk-2IR3PEZU.js.map
@@ -7,11 +7,11 @@ import {
7
7
  createXmlParser,
8
8
  findChildByLocalName,
9
9
  parseRenderStyles
10
- } from "./chunk-Z37BVIRF.js";
10
+ } from "./chunk-I2OETEEL.js";
11
11
  import {
12
12
  KordocError,
13
13
  precheckZipSize
14
- } from "./chunk-CF2FQBVN.js";
14
+ } from "./chunk-4PKNWBXJ.js";
15
15
 
16
16
  // src/render/svg-render.ts
17
17
  import JSZip from "jszip";
@@ -1286,4 +1286,4 @@ export {
1286
1286
  fitRatioForFewerLines,
1287
1287
  renderHwpxToSvg
1288
1288
  };
1289
- //# sourceMappingURL=chunk-476CF3WL.js.map
1289
+ //# sourceMappingURL=chunk-46UDI56N.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/utils.ts
4
- var VERSION = true ? "4.11.0" : "0.0.0-dev";
4
+ var VERSION = true ? "4.12.0" : "0.0.0-dev";
5
5
  function toArrayBuffer(buf) {
6
6
  if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {
7
7
  return buf.buffer;
@@ -123,4 +123,4 @@ export {
123
123
  safeMax,
124
124
  classifyError
125
125
  };
126
- //# sourceMappingURL=chunk-CF2FQBVN.js.map
126
+ //# sourceMappingURL=chunk-4PKNWBXJ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  KordocError
3
- } from "./chunk-Z6NFU6DA.js";
3
+ } from "./chunk-MJPRWCI5.js";
4
4
 
5
5
  // src/pdf/formula/models.ts
6
6
  import { createHash } from "crypto";
@@ -266,4 +266,4 @@ export {
266
266
  ensureFormulaModels,
267
267
  ensureSingleModel
268
268
  };
269
- //# sourceMappingURL=chunk-SD3ITJLU.js.map
269
+ //# sourceMappingURL=chunk-7JQ2ITT2.js.map
@@ -6,7 +6,7 @@ var _chunkT7GRHAIWcjs = require('./chunk-T7GRHAIW.cjs');
6
6
 
7
7
 
8
8
 
9
- var _chunkJO3W54E5cjs = require('./chunk-JO3W54E5.cjs');
9
+ var _chunkBQSWSMRGcjs = require('./chunk-BQSWSMRG.cjs');
10
10
 
11
11
  // src/pdf/image-regions.ts
12
12
  var _pdfmjs = require('pdfjs-dist/legacy/build/pdf.mjs');
@@ -2834,14 +2834,14 @@ function isProseSpread(items) {
2834
2834
  for (let i = 1; i < sorted.length; i++) {
2835
2835
  gaps.push(sorted[i].x - (sorted[i - 1].x + sorted[i - 1].w));
2836
2836
  }
2837
- const maxGap = _chunkJO3W54E5cjs.safeMax.call(void 0, gaps);
2837
+ const maxGap = _chunkBQSWSMRGcjs.safeMax.call(void 0, gaps);
2838
2838
  const avgLen = items.reduce((s, i) => s + i.text.length, 0) / items.length;
2839
2839
  return maxGap < 40 && avgLen < 5;
2840
2840
  }
2841
2841
  function detectColumns(yLines) {
2842
2842
  const allItems = yLines.flat();
2843
2843
  if (allItems.length === 0) return null;
2844
- const pageWidth = _chunkJO3W54E5cjs.safeMax.call(void 0, allItems.map((i) => i.x + i.w)) - _chunkJO3W54E5cjs.safeMin.call(void 0, allItems.map((i) => i.x));
2844
+ const pageWidth = _chunkBQSWSMRGcjs.safeMax.call(void 0, allItems.map((i) => i.x + i.w)) - _chunkBQSWSMRGcjs.safeMin.call(void 0, allItems.map((i) => i.x));
2845
2845
  if (pageWidth < 100) return null;
2846
2846
  let bigoLineIdx = -1;
2847
2847
  for (let i = 0; i < yLines.length; i++) {
@@ -3419,7 +3419,7 @@ function extractBlocksWithGrids(items, pageNum, grids, horizontals, verticals) {
3419
3419
  if (gutterX !== null) {
3420
3420
  const gx = gutterX;
3421
3421
  const allY = remaining.map((i) => i.y);
3422
- const pageH = _chunkJO3W54E5cjs.safeMax.call(void 0, allY) - _chunkJO3W54E5cjs.safeMin.call(void 0, allY);
3422
+ const pageH = _chunkBQSWSMRGcjs.safeMax.call(void 0, allY) - _chunkBQSWSMRGcjs.safeMin.call(void 0, allY);
3423
3423
  const gapThreshold = Math.max(15, pageH * 0.03);
3424
3424
  const sides = [
3425
3425
  remaining.filter((i) => i.x + i.w <= gx),
@@ -3439,7 +3439,7 @@ function extractBlocksWithGrids(items, pageNum, grids, horizontals, verticals) {
3439
3439
  finalTextBlocks = detectListBlocks(textBlocks);
3440
3440
  } else {
3441
3441
  const allY = remaining.map((i) => i.y);
3442
- const pageH = _chunkJO3W54E5cjs.safeMax.call(void 0, allY) - _chunkJO3W54E5cjs.safeMin.call(void 0, allY);
3442
+ const pageH = _chunkBQSWSMRGcjs.safeMax.call(void 0, allY) - _chunkBQSWSMRGcjs.safeMin.call(void 0, allY);
3443
3443
  const groups = xyCutOrder(remaining, Math.max(15, pageH * 0.03));
3444
3444
  const textBlocks = [];
3445
3445
  for (const group of groups) {
@@ -3647,7 +3647,7 @@ function extractPageBlocksFallback(items, pageNum, fullPage = false, detectTable
3647
3647
  blocks.push({ type: "paragraph", text: tableText, pageNumber: pageNum, bbox, style: dominantStyle(items) });
3648
3648
  } else {
3649
3649
  const allY = items.map((i) => i.y);
3650
- const pageHeight = _chunkJO3W54E5cjs.safeMax.call(void 0, allY) - _chunkJO3W54E5cjs.safeMin.call(void 0, allY);
3650
+ const pageHeight = _chunkBQSWSMRGcjs.safeMax.call(void 0, allY) - _chunkBQSWSMRGcjs.safeMin.call(void 0, allY);
3651
3651
  const gapThreshold = Math.max(15, pageHeight * 0.03);
3652
3652
  const orderedGroups = proseCutX !== null ? splitTwoColumnProse(items, proseCutX) : xyCutOrder(items, gapThreshold);
3653
3653
  for (const group of orderedGroups) {
@@ -3686,4 +3686,4 @@ function extractPageBlocksFallback(items, pageNum, fullPage = false, detectTable
3686
3686
 
3687
3687
 
3688
3688
  exports.extractImageRegions = extractImageRegions; exports.filterHiddenText = filterHiddenText; exports.collapseEvenSpacing = collapseEvenSpacing; exports.normalizeItems = normalizeItems; exports.computeMedianFontSizeFromFreq = computeMedianFontSizeFromFreq; exports.detectHeadings = detectHeadings; exports.detectMarkerHeadings = detectMarkerHeadings; exports.detectTableCaptions = detectTableCaptions; exports.detectKoreanListBlocks = detectKoreanListBlocks; exports.removeHeaderFooterBlocks = removeHeaderFooterBlocks; exports.extractPageBlocksWithLines = extractPageBlocksWithLines; exports.mergeCrossPageTables = mergeCrossPageTables;
3689
- //# sourceMappingURL=chunk-RSATURJN.cjs.map
3689
+ //# sourceMappingURL=chunk-AT23GFSK.cjs.map