kordoc 4.21.0 → 4.21.1

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 (125) hide show
  1. package/README.md +2 -1
  2. package/dist/{-LJL6UNRO.js → -OZRZ6ZMD.js} +11 -11
  3. package/dist/{chunk-XZ3HIQXC.js → chunk-3NZZKH5I.js} +2 -2
  4. package/dist/{chunk-WB6RROCW.js → chunk-3W73FORT.js} +2 -2
  5. package/dist/{chunk-MCMMGZOJ.js → chunk-5DDTO45D.js} +16 -4
  6. package/dist/chunk-5DDTO45D.js.map +1 -0
  7. package/dist/{chunk-LRHVFJ5J.js → chunk-6IODHI3E.js} +3 -3
  8. package/dist/{chunk-JL525ZAU.cjs → chunk-7YQEYPXF.cjs} +3 -3
  9. package/dist/{chunk-JL525ZAU.cjs.map → chunk-7YQEYPXF.cjs.map} +1 -1
  10. package/dist/{chunk-ZJDZH647.js → chunk-BV6TC5N3.js} +2 -2
  11. package/dist/{chunk-O33PS3VI.js → chunk-D2D3K6PK.js} +45 -9
  12. package/dist/{chunk-SEVFALDF.js.map → chunk-D2D3K6PK.js.map} +1 -1
  13. package/dist/{chunk-SEVFALDF.js → chunk-DUCUZI2U.js} +44 -8
  14. package/dist/{chunk-O33PS3VI.js.map → chunk-DUCUZI2U.js.map} +1 -1
  15. package/dist/{chunk-D4EDAS3V.js → chunk-EKOBLQOS.js} +3 -3
  16. package/dist/{chunk-GYPEF6GQ.js → chunk-F5S7BOR6.js} +2 -2
  17. package/dist/{chunk-ZNCOOG54.js → chunk-FS2FXE5F.js} +2 -2
  18. package/dist/{chunk-7QL3G7UF.cjs → chunk-FVO7GNEK.cjs} +35 -23
  19. package/dist/chunk-FVO7GNEK.cjs.map +1 -0
  20. package/dist/{chunk-ALCZCRIU.js → chunk-J4SN4BCM.js} +17 -5
  21. package/dist/chunk-J4SN4BCM.js.map +1 -0
  22. package/dist/{chunk-JUFEZMXC.cjs → chunk-K7FX24I2.cjs} +3 -3
  23. package/dist/{chunk-JUFEZMXC.cjs.map → chunk-K7FX24I2.cjs.map} +1 -1
  24. package/dist/{chunk-2OTAFZ2Y.cjs → chunk-LW63FZMQ.cjs} +6 -6
  25. package/dist/{chunk-2OTAFZ2Y.cjs.map → chunk-LW63FZMQ.cjs.map} +1 -1
  26. package/dist/{chunk-6EXVHTBH.js → chunk-LYTS6GNB.js} +2 -2
  27. package/dist/{chunk-HDP2H33I.js → chunk-MTEABK52.js} +2 -2
  28. package/dist/{chunk-JEKZXUIJ.js → chunk-O5NCN6ZS.js} +2 -2
  29. package/dist/{chunk-VSSMJKOX.js → chunk-OTHN3DU3.js} +6 -6
  30. package/dist/{chunk-G57LD7SG.js → chunk-PKT3I2DP.js} +2 -2
  31. package/dist/{chunk-OVBIDELJ.js → chunk-RSOPXKRC.js} +2 -2
  32. package/dist/{chunk-FNHELO37.js → chunk-RXX2GPV4.js} +2 -2
  33. package/dist/{chunk-UYKDMNLD.cjs → chunk-SVCXIEKS.cjs} +2 -2
  34. package/dist/{chunk-UYKDMNLD.cjs.map → chunk-SVCXIEKS.cjs.map} +1 -1
  35. package/dist/{chunk-WUJNUWZ4.js → chunk-TKYG2C3I.js} +2 -2
  36. package/dist/{chunk-O23XMVMP.js → chunk-TN3KO2XJ.js} +2 -2
  37. package/dist/{chunk-T3EVQHOP.js → chunk-TNB7RDIH.js} +2 -2
  38. package/dist/{chunk-QQERGR6C.js → chunk-UUWUGQT5.js} +10 -10
  39. package/dist/{chunk-3ITKDX7E.cjs → chunk-VVZL2JYD.cjs} +54 -18
  40. package/dist/chunk-VVZL2JYD.cjs.map +1 -0
  41. package/dist/{chunk-6SG56DDC.js → chunk-XIULHXJT.js} +2 -2
  42. package/dist/chunks-O6FB73OX.js +10 -0
  43. package/dist/cli.js +30 -30
  44. package/dist/{formula-AD75YRCB.js → formula-2P5T7GU2.js} +3 -3
  45. package/dist/{formula-JULH7HF6.js → formula-STBBUZL3.js} +4 -4
  46. package/dist/{formula-B7GGECPZ.cjs → formula-YNAYIUU7.cjs} +9 -9
  47. package/dist/{formula-B7GGECPZ.cjs.map → formula-YNAYIUU7.cjs.map} +1 -1
  48. package/dist/{image-ocr-E2IN6D4B.cjs → image-ocr-D7KEGYCN.cjs} +15 -15
  49. package/dist/{image-ocr-E2IN6D4B.cjs.map → image-ocr-D7KEGYCN.cjs.map} +1 -1
  50. package/dist/{image-ocr-2UJ6QP63.js → image-ocr-IQ27CCW6.js} +6 -6
  51. package/dist/{image-ocr-3C3K64AD.js → image-ocr-RYSLM2OK.js} +9 -9
  52. package/dist/index.cjs +280 -280
  53. package/dist/index.js +5 -5
  54. package/dist/mcp.js +22 -22
  55. package/dist/{model-bundle-XT5IXIZ3.js → model-bundle-ZFXH6CUU.js} +5 -5
  56. package/dist/{models-NDSZF5T2.js → models-TRN5BSLA.js} +5 -5
  57. package/dist/{parse-worker-v2-XTDC2E3M.js → parse-worker-v2-42ZZUQMA.js} +12 -12
  58. package/dist/{parser-3W5XWIE5.js → parser-KNJ6RK2C.js} +11 -11
  59. package/dist/{parser-V2JLOQIC.cjs → parser-TRFPHIP6.cjs} +132 -132
  60. package/dist/{parser-V2JLOQIC.cjs.map → parser-TRFPHIP6.cjs.map} +1 -1
  61. package/dist/{parser-VE7A5K7X.js → parser-X6KXSE7R.js} +8 -8
  62. package/dist/pdf-ocr-2MKLAFDN.js +22 -0
  63. package/dist/pdf-ocr-EB5XZDIZ.cjs +19 -0
  64. package/dist/pdf-ocr-EB5XZDIZ.cjs.map +1 -0
  65. package/dist/pdf-ocr-M5IERUF3.js +18 -0
  66. package/dist/{profile-io-7Z6CPLR2.js → profile-io-TDWZV5B2.js} +3 -3
  67. package/dist/{rasterize-IF2FNQ7Y.js → rasterize-UCZA2GNN.js} +3 -3
  68. package/dist/{redact-doc-HE42N4TZ.js → redact-doc-BOD7CI5F.js} +11 -11
  69. package/dist/{render-6ZE75NBK.js → render-FV6SM5FL.js} +7 -7
  70. package/dist/seal-H5CDZWYJ.js +10 -0
  71. package/dist/{setup-ZTYMTCEJ.js → setup-4DCDJD65.js} +3 -3
  72. package/dist/visual-E7LZ6QVO.js +20 -0
  73. package/dist/{watch-WELSQDEN.js → watch-MECSPFWF.js} +12 -12
  74. package/package.json +1 -1
  75. package/dist/chunk-3ITKDX7E.cjs.map +0 -1
  76. package/dist/chunk-7QL3G7UF.cjs.map +0 -1
  77. package/dist/chunk-ALCZCRIU.js.map +0 -1
  78. package/dist/chunk-MCMMGZOJ.js.map +0 -1
  79. package/dist/chunks-XOKXUJ67.js +0 -10
  80. package/dist/pdf-ocr-KZ56UECD.js +0 -20
  81. package/dist/pdf-ocr-L4EUIDIW.js +0 -16
  82. package/dist/pdf-ocr-XPLOCBYI.cjs +0 -17
  83. package/dist/pdf-ocr-XPLOCBYI.cjs.map +0 -1
  84. package/dist/seal-N2Q7WC4V.js +0 -10
  85. package/dist/visual-3YC2PLLG.js +0 -20
  86. /package/dist/{-LJL6UNRO.js.map → -OZRZ6ZMD.js.map} +0 -0
  87. /package/dist/{chunk-XZ3HIQXC.js.map → chunk-3NZZKH5I.js.map} +0 -0
  88. /package/dist/{chunk-WB6RROCW.js.map → chunk-3W73FORT.js.map} +0 -0
  89. /package/dist/{chunk-LRHVFJ5J.js.map → chunk-6IODHI3E.js.map} +0 -0
  90. /package/dist/{chunk-ZJDZH647.js.map → chunk-BV6TC5N3.js.map} +0 -0
  91. /package/dist/{chunk-D4EDAS3V.js.map → chunk-EKOBLQOS.js.map} +0 -0
  92. /package/dist/{chunk-GYPEF6GQ.js.map → chunk-F5S7BOR6.js.map} +0 -0
  93. /package/dist/{chunk-ZNCOOG54.js.map → chunk-FS2FXE5F.js.map} +0 -0
  94. /package/dist/{chunk-6EXVHTBH.js.map → chunk-LYTS6GNB.js.map} +0 -0
  95. /package/dist/{chunk-HDP2H33I.js.map → chunk-MTEABK52.js.map} +0 -0
  96. /package/dist/{chunk-JEKZXUIJ.js.map → chunk-O5NCN6ZS.js.map} +0 -0
  97. /package/dist/{chunk-VSSMJKOX.js.map → chunk-OTHN3DU3.js.map} +0 -0
  98. /package/dist/{chunk-G57LD7SG.js.map → chunk-PKT3I2DP.js.map} +0 -0
  99. /package/dist/{chunk-OVBIDELJ.js.map → chunk-RSOPXKRC.js.map} +0 -0
  100. /package/dist/{chunk-FNHELO37.js.map → chunk-RXX2GPV4.js.map} +0 -0
  101. /package/dist/{chunk-WUJNUWZ4.js.map → chunk-TKYG2C3I.js.map} +0 -0
  102. /package/dist/{chunk-O23XMVMP.js.map → chunk-TN3KO2XJ.js.map} +0 -0
  103. /package/dist/{chunk-T3EVQHOP.js.map → chunk-TNB7RDIH.js.map} +0 -0
  104. /package/dist/{chunk-QQERGR6C.js.map → chunk-UUWUGQT5.js.map} +0 -0
  105. /package/dist/{chunk-6SG56DDC.js.map → chunk-XIULHXJT.js.map} +0 -0
  106. /package/dist/{chunks-XOKXUJ67.js.map → chunks-O6FB73OX.js.map} +0 -0
  107. /package/dist/{formula-AD75YRCB.js.map → formula-2P5T7GU2.js.map} +0 -0
  108. /package/dist/{formula-JULH7HF6.js.map → formula-STBBUZL3.js.map} +0 -0
  109. /package/dist/{image-ocr-2UJ6QP63.js.map → image-ocr-IQ27CCW6.js.map} +0 -0
  110. /package/dist/{image-ocr-3C3K64AD.js.map → image-ocr-RYSLM2OK.js.map} +0 -0
  111. /package/dist/{model-bundle-XT5IXIZ3.js.map → model-bundle-ZFXH6CUU.js.map} +0 -0
  112. /package/dist/{models-NDSZF5T2.js.map → models-TRN5BSLA.js.map} +0 -0
  113. /package/dist/{parse-worker-v2-XTDC2E3M.js.map → parse-worker-v2-42ZZUQMA.js.map} +0 -0
  114. /package/dist/{parser-3W5XWIE5.js.map → parser-KNJ6RK2C.js.map} +0 -0
  115. /package/dist/{parser-VE7A5K7X.js.map → parser-X6KXSE7R.js.map} +0 -0
  116. /package/dist/{pdf-ocr-KZ56UECD.js.map → pdf-ocr-2MKLAFDN.js.map} +0 -0
  117. /package/dist/{pdf-ocr-L4EUIDIW.js.map → pdf-ocr-M5IERUF3.js.map} +0 -0
  118. /package/dist/{profile-io-7Z6CPLR2.js.map → profile-io-TDWZV5B2.js.map} +0 -0
  119. /package/dist/{rasterize-IF2FNQ7Y.js.map → rasterize-UCZA2GNN.js.map} +0 -0
  120. /package/dist/{redact-doc-HE42N4TZ.js.map → redact-doc-BOD7CI5F.js.map} +0 -0
  121. /package/dist/{render-6ZE75NBK.js.map → render-FV6SM5FL.js.map} +0 -0
  122. /package/dist/{seal-N2Q7WC4V.js.map → seal-H5CDZWYJ.js.map} +0 -0
  123. /package/dist/{setup-ZTYMTCEJ.js.map → setup-4DCDJD65.js.map} +0 -0
  124. /package/dist/{visual-3YC2PLLG.js.map → visual-E7LZ6QVO.js.map} +0 -0
  125. /package/dist/{watch-WELSQDEN.js.map → watch-MECSPFWF.js.map} +0 -0
package/README.md CHANGED
@@ -111,10 +111,11 @@ await writeFile("보고서.hwpx", Buffer.from(hwpx))
111
111
 
112
112
  ## 최근 업데이트
113
113
 
114
- 최신 배포: **[4.21.0](https://github.com/chrisryugj/kordoc/releases/tag/v4.21.0)** · 2026-10-08
114
+ 최신 배포: **[4.21.1](https://github.com/chrisryugj/kordoc/releases/tag/v4.21.1)** · 2026-10-08
115
115
 
116
116
  | 버전 | 주요 변경 |
117
117
  | --- | --- |
118
+ | 4.21.1 | 이미지 OCR 에서 같은 줄 조각이 갈려 순서가 뒤집히던 것과 테두리 없는 영수증 표의 품목 행이 섞이던 것 (#141) |
118
119
  | 4.21.0 | 중앙부처 기관 서식 `--agency`(보도자료 2,670건·52개 기관 실측 단계 글꼴·크기·2단계 부호 ◦·❍·표 머리·기관 색), 보도자료 담당 표 사람별 행(`--press-people`), 폭표 없는 글꼴의 생성 폭 계산 보정 |
119
120
  | 4.20.0 | 표기법 검수 7룰(기간 대시·요일·금액 한글·공공언어·맞춤법·2타)과 문서 직접 검수·수치 대조·단계별 서식 편차, 견본 HWPX 단계별 서식 학습(`levels`·`--levels-from`), `compare`·`patch --json`, 패치 무결성 검사, 붙여넣기 흔적 정리 |
120
121
  | 4.19.2 | rhwp v0.8.7 파서 수정 반영 — HWP3 체크박스 □, HWP5 짝 없는 서로게이트 □, 손상 CFB 복구의 본문 경로 오인 수정, HWPX 압축 해제 상한을 엔트리 읽는 도중에 적용 |
@@ -54,17 +54,17 @@ import {
54
54
  unknownFontWarnings,
55
55
  usesGaejosikMunche,
56
56
  validateHwpx
57
- } from "./chunk-QQERGR6C.js";
57
+ } from "./chunk-UUWUGQT5.js";
58
58
  import {
59
59
  blocksToPages
60
- } from "./chunk-JEKZXUIJ.js";
60
+ } from "./chunk-O5NCN6ZS.js";
61
61
  import {
62
62
  applySplices,
63
63
  buildParagraphSplices,
64
64
  buildRangeSplices,
65
65
  placeSealHwpx,
66
66
  scanSectionXml
67
- } from "./chunk-D4EDAS3V.js";
67
+ } from "./chunk-EKOBLQOS.js";
68
68
  import {
69
69
  DEFAULT_REDACT_RULES,
70
70
  redactMarkdown,
@@ -72,7 +72,7 @@ import {
72
72
  } from "./chunk-3WSNLH4B.js";
73
73
  import {
74
74
  blocksToChunks
75
- } from "./chunk-GYPEF6GQ.js";
75
+ } from "./chunk-F5S7BOR6.js";
76
76
  import {
77
77
  SPACE_EM_FIXED,
78
78
  SPACE_EM_FONT,
@@ -97,20 +97,20 @@ import {
97
97
  renderSceneToHtml,
98
98
  simulateWrap,
99
99
  simulateWrapKeepWord
100
- } from "./chunk-VSSMJKOX.js";
100
+ } from "./chunk-OTHN3DU3.js";
101
101
  import "./chunk-7FCNOKOR.js";
102
- import "./chunk-6SG56DDC.js";
102
+ import "./chunk-XIULHXJT.js";
103
103
  import "./chunk-VQFA55IC.js";
104
- import "./chunk-G57LD7SG.js";
104
+ import "./chunk-PKT3I2DP.js";
105
105
  import {
106
106
  blocksToMarkdown,
107
107
  flattenLayoutTables,
108
108
  hasStructuredCellContent
109
- } from "./chunk-6EXVHTBH.js";
110
- import "./chunk-OVBIDELJ.js";
109
+ } from "./chunk-LYTS6GNB.js";
110
+ import "./chunk-RSOPXKRC.js";
111
111
  import {
112
112
  VERSION
113
- } from "./chunk-FNHELO37.js";
113
+ } from "./chunk-RXX2GPV4.js";
114
114
  export {
115
115
  AGENCY_COMMON_NAME,
116
116
  BUILTIN_TEMPLATES,
@@ -204,4 +204,4 @@ export {
204
204
  usesGaejosikMunche,
205
205
  validateHwpx
206
206
  };
207
- //# sourceMappingURL=-LJL6UNRO.js.map
207
+ //# sourceMappingURL=-OZRZ6ZMD.js.map
@@ -1,5 +1,5 @@
1
1
  // src/utils.ts
2
- var VERSION = true ? "4.21.0" : "0.0.0-dev";
2
+ var VERSION = true ? "4.21.1" : "0.0.0-dev";
3
3
  function toArrayBuffer(buf) {
4
4
  if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {
5
5
  return buf.buffer;
@@ -159,4 +159,4 @@ export {
159
159
  classifyError,
160
160
  partExtension
161
161
  };
162
- //# sourceMappingURL=chunk-XZ3HIQXC.js.map
162
+ //# sourceMappingURL=chunk-3NZZKH5I.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  KordocError
4
- } from "./chunk-FNHELO37.js";
4
+ } from "./chunk-RXX2GPV4.js";
5
5
 
6
6
  // src/hwpx/profile-io.ts
7
7
  import { z } from "zod";
@@ -89,4 +89,4 @@ export {
89
89
  formatProfileSchema,
90
90
  parseFormatProfileJson
91
91
  };
92
- //# sourceMappingURL=chunk-WB6RROCW.js.map
92
+ //# sourceMappingURL=chunk-3W73FORT.js.map
@@ -5,11 +5,11 @@ import {
5
5
  HEADING_RATIO_H2,
6
6
  HEADING_RATIO_H3,
7
7
  tidyScriptTags
8
- } from "./chunk-6SG56DDC.js";
8
+ } from "./chunk-XIULHXJT.js";
9
9
  import {
10
10
  safeMax,
11
11
  safeMin
12
- } from "./chunk-FNHELO37.js";
12
+ } from "./chunk-RXX2GPV4.js";
13
13
 
14
14
  // src/pdf/line-extract.ts
15
15
  import { OPS } from "pdfjs-dist/legacy/build/pdf.mjs";
@@ -5283,7 +5283,7 @@ function mergeMultiLineRows(rows, columns) {
5283
5283
  const curr = rows[i];
5284
5284
  const yGap = Math.abs(prev.y - curr.y);
5285
5285
  const matchedCols = countMatchedColumns(curr, columns);
5286
- if (yGap < avgFontSize * 1.8 && curr.items.length <= 2 && (matchedCols < MIN_COLS || curr.items.length === 1)) {
5286
+ if (yGap < avgFontSize * 1.8 && curr.items.length <= 2 && (matchedCols < MIN_COLS || curr.items.length === 1) && !startsNewRecord(prev, curr, columns)) {
5287
5287
  result[result.length - 1] = {
5288
5288
  y: prev.y,
5289
5289
  items: [...prev.items, ...curr.items]
@@ -5294,6 +5294,18 @@ function mergeMultiLineRows(rows, columns) {
5294
5294
  }
5295
5295
  return result;
5296
5296
  }
5297
+ function startsNewRecord(prev, curr, columns) {
5298
+ const colOf = (x) => {
5299
+ let ci = -1;
5300
+ for (let c = 0; c < columns.length; c++) if (columns[c].x <= x + COL_CLUSTER_TOL) ci = c;
5301
+ return ci;
5302
+ };
5303
+ return curr.items.some((it) => {
5304
+ const ci = colOf(it.x);
5305
+ if (ci < 0 || ci + 1 >= columns.length || it.x + it.w <= columns[ci + 1].x + COL_CLUSTER_TOL) return false;
5306
+ return prev.items.some((p) => colOf(p.x) === ci);
5307
+ });
5308
+ }
5297
5309
  function groupByBaseline(items) {
5298
5310
  if (items.length === 0) return [];
5299
5311
  const sorted = [...items].sort((a, b) => b.y - a.y || a.x - b.x);
@@ -8298,4 +8310,4 @@ export {
8298
8310
  removeSideTabs,
8299
8311
  extractPageBlocksWithLines
8300
8312
  };
8301
- //# sourceMappingURL=chunk-MCMMGZOJ.js.map
8313
+ //# sourceMappingURL=chunk-5DDTO45D.js.map