kordoc 4.21.20 → 4.21.22
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.
- package/README.md +7 -5
- package/dist/{-QHQ2QKM7.js → -PLOEMNCA.js} +11 -11
- package/dist/{chunk-LO5A36FU.js → chunk-3BJW5KXR.js} +2 -2
- package/dist/{chunk-AINZICPE.js → chunk-64MCJ5GC.js} +2 -2
- package/dist/{chunk-DBFAQJCX.js → chunk-64V65GZM.js} +3 -3
- package/dist/{chunk-N47I6OS7.js → chunk-6LJ22335.js} +6 -6
- package/dist/{chunk-I4HF4UCA.js → chunk-6Z4NAN36.js} +4 -4
- package/dist/{chunk-ZMGWKGSC.js → chunk-7MIA3IFO.js} +2 -2
- package/dist/{chunk-G6G25HUO.js → chunk-7TLZ56ZK.js} +2 -2
- package/dist/{chunk-F5PISJEI.js → chunk-BMQATDUY.js} +2 -2
- package/dist/{chunk-LQSF4JSV.js → chunk-BZC24YXS.js} +2 -2
- package/dist/{chunk-E5L6DUOE.js → chunk-EL7BGP7X.js} +3 -3
- package/dist/{chunk-75INFYVC.js → chunk-G4DVIZTZ.js} +2 -2
- package/dist/{chunk-F5KWC7I3.js → chunk-GYQGKVTQ.js} +82 -7
- package/dist/chunk-GYQGKVTQ.js.map +1 -0
- package/dist/{chunk-KS2SASZH.cjs → chunk-H5Q6J2MB.cjs} +6 -6
- package/dist/{chunk-KS2SASZH.cjs.map → chunk-H5Q6J2MB.cjs.map} +1 -1
- package/dist/{chunk-KBL24ZCP.js → chunk-H6EXISSP.js} +3 -3
- package/dist/{chunk-CKEO54YN.cjs → chunk-HY5O4B6O.cjs} +3 -3
- package/dist/{chunk-CKEO54YN.cjs.map → chunk-HY5O4B6O.cjs.map} +1 -1
- package/dist/{chunk-PALYDA3M.js → chunk-K7FP2VOU.js} +2 -2
- package/dist/{chunk-JDVOYDIA.js → chunk-KFJP2HYL.js} +2 -2
- package/dist/{chunk-2FALZL3E.cjs → chunk-LNKHTD47.cjs} +13 -13
- package/dist/{chunk-2FALZL3E.cjs.map → chunk-LNKHTD47.cjs.map} +1 -1
- package/dist/{chunk-FU3SCGE7.js → chunk-LZVOL2H2.js} +2 -2
- package/dist/{chunk-42XYVZ2B.js → chunk-M5SPGZKY.js} +2 -2
- package/dist/{chunk-BLKAJD2G.js → chunk-NT4LPP2I.js} +10 -10
- package/dist/{chunk-6HIDMA5O.js → chunk-PQW2RPZZ.js} +2 -2
- package/dist/{chunk-TYYKK5DX.js → chunk-PY72S2AG.js} +2 -2
- package/dist/{chunk-M37GOXT5.cjs → chunk-QSOWCFOV.cjs} +2 -2
- package/dist/{chunk-M37GOXT5.cjs.map → chunk-QSOWCFOV.cjs.map} +1 -1
- package/dist/{chunk-WWMHVDRG.cjs → chunk-QY627PK3.cjs} +3 -3
- package/dist/{chunk-WWMHVDRG.cjs.map → chunk-QY627PK3.cjs.map} +1 -1
- package/dist/{chunk-LY4ITNAL.js → chunk-SQSGBKCL.js} +81 -6
- package/dist/chunk-SQSGBKCL.js.map +1 -0
- package/dist/{chunk-MOT7WOP5.cjs → chunk-SZM6BSK4.cjs} +101 -26
- package/dist/chunk-SZM6BSK4.cjs.map +1 -0
- package/dist/{chunk-WINHSKFD.js → chunk-VUSPHKQ6.js} +2 -2
- package/dist/{chunk-7ITWGPNB.js → chunk-ZQZDGIN4.js} +2 -2
- package/dist/chunks-YV22WKEN.js +10 -0
- package/dist/cli.js +30 -30
- package/dist/{formula-KHPAZKOK.js → formula-I7GNHDP4.js} +4 -4
- package/dist/{formula-XAPMN6HX.js → formula-L4ISZCZ7.js} +3 -3
- package/dist/{formula-G5LTBMGC.cjs → formula-LDXFM42U.cjs} +9 -9
- package/dist/{formula-G5LTBMGC.cjs.map → formula-LDXFM42U.cjs.map} +1 -1
- package/dist/{image-ocr-RNPHQ4C2.js → image-ocr-BSAPJIFP.js} +6 -6
- package/dist/{image-ocr-N5LAIHRV.js → image-ocr-I7IVLLPD.js} +9 -9
- package/dist/{image-ocr-MHPVAYOB.cjs → image-ocr-NCKZ4EOH.cjs} +15 -15
- package/dist/{image-ocr-MHPVAYOB.cjs.map → image-ocr-NCKZ4EOH.cjs.map} +1 -1
- package/dist/index.cjs +276 -276
- package/dist/index.js +5 -5
- package/dist/mcp.js +22 -22
- package/dist/{model-bundle-XP4AHFLT.js → model-bundle-M3GRBX2A.js} +5 -5
- package/dist/{models-AD2KAUNC.js → models-5RXMJK6N.js} +5 -5
- package/dist/{parse-worker-v2-7UHOQ2TK.js → parse-worker-v2-72KKZMDO.js} +12 -12
- package/dist/{parser-5WGRQKPI.js → parser-AHSXHMAF.js} +16 -8
- package/dist/{parser-2RN5WNPJ.js.map → parser-AHSXHMAF.js.map} +1 -1
- package/dist/{parser-2RN5WNPJ.js → parser-QLNX2EFP.js} +19 -11
- package/dist/{parser-5WGRQKPI.js.map → parser-QLNX2EFP.js.map} +1 -1
- package/dist/{parser-ZPCCXCVO.cjs → parser-XQL37S4F.cjs} +142 -134
- package/dist/parser-XQL37S4F.cjs.map +1 -0
- package/dist/pdf-ocr-CR4W75XF.js +22 -0
- package/dist/pdf-ocr-FL32Z4MB.js +18 -0
- package/dist/pdf-ocr-V42HOZKB.cjs +19 -0
- package/dist/{pdf-ocr-SFIWMJQL.cjs.map → pdf-ocr-V42HOZKB.cjs.map} +1 -1
- package/dist/{profile-io-UP7H2J6I.js → profile-io-FTGHBFAH.js} +3 -3
- package/dist/{rasterize-XBCDG4MD.js → rasterize-346O4XV4.js} +3 -3
- package/dist/{redact-doc-CJ6W6YNR.js → redact-doc-O6UVSWKP.js} +11 -11
- package/dist/{render-K5UDHXRI.js → render-CUR3VCK5.js} +7 -7
- package/dist/seal-QUUK6RBL.js +10 -0
- package/dist/{setup-S66RLBBM.js → setup-6EA7CJZU.js} +3 -3
- package/dist/visual-EMOEYBC4.js +20 -0
- package/dist/{watch-PB7IOD73.js → watch-EQRSWNAQ.js} +12 -12
- package/package.json +1 -1
- package/dist/chunk-F5KWC7I3.js.map +0 -1
- package/dist/chunk-LY4ITNAL.js.map +0 -1
- package/dist/chunk-MOT7WOP5.cjs.map +0 -1
- package/dist/chunks-BJRBKGKZ.js +0 -10
- package/dist/parser-ZPCCXCVO.cjs.map +0 -1
- package/dist/pdf-ocr-KHY3P4EP.js +0 -18
- package/dist/pdf-ocr-LFDH6DFD.js +0 -22
- package/dist/pdf-ocr-SFIWMJQL.cjs +0 -19
- package/dist/seal-YCK6TM5I.js +0 -10
- package/dist/visual-S5ZNFWFH.js +0 -20
- /package/dist/{-QHQ2QKM7.js.map → -PLOEMNCA.js.map} +0 -0
- /package/dist/{chunk-LO5A36FU.js.map → chunk-3BJW5KXR.js.map} +0 -0
- /package/dist/{chunk-AINZICPE.js.map → chunk-64MCJ5GC.js.map} +0 -0
- /package/dist/{chunk-DBFAQJCX.js.map → chunk-64V65GZM.js.map} +0 -0
- /package/dist/{chunk-N47I6OS7.js.map → chunk-6LJ22335.js.map} +0 -0
- /package/dist/{chunk-I4HF4UCA.js.map → chunk-6Z4NAN36.js.map} +0 -0
- /package/dist/{chunk-ZMGWKGSC.js.map → chunk-7MIA3IFO.js.map} +0 -0
- /package/dist/{chunk-G6G25HUO.js.map → chunk-7TLZ56ZK.js.map} +0 -0
- /package/dist/{chunk-F5PISJEI.js.map → chunk-BMQATDUY.js.map} +0 -0
- /package/dist/{chunk-LQSF4JSV.js.map → chunk-BZC24YXS.js.map} +0 -0
- /package/dist/{chunk-E5L6DUOE.js.map → chunk-EL7BGP7X.js.map} +0 -0
- /package/dist/{chunk-75INFYVC.js.map → chunk-G4DVIZTZ.js.map} +0 -0
- /package/dist/{chunk-KBL24ZCP.js.map → chunk-H6EXISSP.js.map} +0 -0
- /package/dist/{chunk-PALYDA3M.js.map → chunk-K7FP2VOU.js.map} +0 -0
- /package/dist/{chunk-JDVOYDIA.js.map → chunk-KFJP2HYL.js.map} +0 -0
- /package/dist/{chunk-FU3SCGE7.js.map → chunk-LZVOL2H2.js.map} +0 -0
- /package/dist/{chunk-42XYVZ2B.js.map → chunk-M5SPGZKY.js.map} +0 -0
- /package/dist/{chunk-BLKAJD2G.js.map → chunk-NT4LPP2I.js.map} +0 -0
- /package/dist/{chunk-6HIDMA5O.js.map → chunk-PQW2RPZZ.js.map} +0 -0
- /package/dist/{chunk-TYYKK5DX.js.map → chunk-PY72S2AG.js.map} +0 -0
- /package/dist/{chunk-WINHSKFD.js.map → chunk-VUSPHKQ6.js.map} +0 -0
- /package/dist/{chunk-7ITWGPNB.js.map → chunk-ZQZDGIN4.js.map} +0 -0
- /package/dist/{chunks-BJRBKGKZ.js.map → chunks-YV22WKEN.js.map} +0 -0
- /package/dist/{formula-KHPAZKOK.js.map → formula-I7GNHDP4.js.map} +0 -0
- /package/dist/{formula-XAPMN6HX.js.map → formula-L4ISZCZ7.js.map} +0 -0
- /package/dist/{image-ocr-RNPHQ4C2.js.map → image-ocr-BSAPJIFP.js.map} +0 -0
- /package/dist/{image-ocr-N5LAIHRV.js.map → image-ocr-I7IVLLPD.js.map} +0 -0
- /package/dist/{model-bundle-XP4AHFLT.js.map → model-bundle-M3GRBX2A.js.map} +0 -0
- /package/dist/{models-AD2KAUNC.js.map → models-5RXMJK6N.js.map} +0 -0
- /package/dist/{parse-worker-v2-7UHOQ2TK.js.map → parse-worker-v2-72KKZMDO.js.map} +0 -0
- /package/dist/{pdf-ocr-KHY3P4EP.js.map → pdf-ocr-CR4W75XF.js.map} +0 -0
- /package/dist/{pdf-ocr-LFDH6DFD.js.map → pdf-ocr-FL32Z4MB.js.map} +0 -0
- /package/dist/{profile-io-UP7H2J6I.js.map → profile-io-FTGHBFAH.js.map} +0 -0
- /package/dist/{rasterize-XBCDG4MD.js.map → rasterize-346O4XV4.js.map} +0 -0
- /package/dist/{redact-doc-CJ6W6YNR.js.map → redact-doc-O6UVSWKP.js.map} +0 -0
- /package/dist/{render-K5UDHXRI.js.map → render-CUR3VCK5.js.map} +0 -0
- /package/dist/{seal-YCK6TM5I.js.map → seal-QUUK6RBL.js.map} +0 -0
- /package/dist/{setup-S66RLBBM.js.map → setup-6EA7CJZU.js.map} +0 -0
- /package/dist/{visual-S5ZNFWFH.js.map → visual-EMOEYBC4.js.map} +0 -0
- /package/dist/{watch-PB7IOD73.js.map → watch-EQRSWNAQ.js.map} +0 -0
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ HWP 3.x·5.x, HWPX, HWPML, PDF, XLS·XLSX, DOCX, PPTX, PNG·JPG·WebP를 Markdow
|
|
|
12
12
|
[English](README-EN.md) · [상세 사용법](docs/usage.md) · [벤치마크](docs/benchmarks.md) · [변경 이력](CHANGELOG.md)
|
|
13
13
|
|
|
14
14
|
- 📊 **PDF 공개 벤치 종합 0.963** — opendataloader-bench 200문서. 공개 12개 파서 비교 1위(2026-09-29 기록). [측정 조건](docs/benchmarks.md)
|
|
15
|
-
- 🇰🇷 **한국 공문서 표 구조 100%** — 원본 HWPX 2,424문서의 보이는 표 **10,342개 전부 구조 일치**. [4.21.
|
|
15
|
+
- 🇰🇷 **한국 공문서 표 구조 100%** — 원본 HWPX 2,424문서의 보이는 표 **10,342개 전부 구조 일치**. [4.21.22 검증](docs/benchmarks.md)
|
|
16
16
|
|
|
17
17
|
쓸모 있었다면 GitHub ⭐ 하나 눌러주세요. 다른 사람이 이 도구를 찾는 데 도움이 됩니다.
|
|
18
18
|
|
|
@@ -100,27 +100,29 @@ await writeFile("보고서.hwpx", Buffer.from(hwpx))
|
|
|
100
100
|
|
|
101
101
|
## 검증 결과
|
|
102
102
|
|
|
103
|
-
**4.21.
|
|
103
|
+
**4.21.22 · 2026-10-11 배포 검증**. 고정 코퍼스와 참조 기준으로 측정한 결과입니다.
|
|
104
104
|
|
|
105
105
|
| 대상 | 규모 | 결과 |
|
|
106
106
|
| --- | --- | --- |
|
|
107
107
|
| HWPX | 2,424문서 · 10,342표 | 표 구조 일치 **10,342/10,342 · 100%** |
|
|
108
108
|
| HWP 5.x ↔ HWPX | 1,130쌍 · 4,315표 | 짝 문서의 표 구조 일치 **100%** |
|
|
109
|
-
| PDF 글 | 744쌍 | 글자 재현율 **99.85%** · 정확도 **99.
|
|
109
|
+
| PDF 글 | 744쌍 | 글자 재현율 **99.85%** · 정확도 **99.67%** · 읽기 순서 **99.23%** · 어절 F1 **99.02%** |
|
|
110
110
|
| PDF 표 | 708쌍 · 2,331표 | 표 탐지 **99.83%** · 구조 일치 **97.98%** · 칸 F1 **0.991** |
|
|
111
111
|
| PDF 전체 | 1,911문서 중 1,729건 채점 | 글 커버리지 **99.80%** |
|
|
112
112
|
| OCR | 53문서 · 102쪽 | CER **0.0412** · 글자 재현율 **99.02%** |
|
|
113
113
|
|
|
114
114
|
표 구조 점수와 셀 내용·화면 재현은 별도 지표입니다. 채점 범위·제외 기준·전 벤치 문서별 비교는 [벤치마크 상세](docs/benchmarks.md)에 있습니다.
|
|
115
115
|
|
|
116
|
-
외부 PDF 벤치 **opendataloader-bench 200문서**는 4.21.
|
|
116
|
+
외부 PDF 벤치 **opendataloader-bench 200문서**는 4.21.22 배포 측정에서 기본값 종합 **0.963**, OCR 끔 **0.939**입니다. [옵션별 결과와 재현 방법](docs/benchmarks.md#pdf--markdown--opendataloader-bench)
|
|
117
117
|
|
|
118
118
|
## 최근 업데이트
|
|
119
119
|
|
|
120
|
-
최신 배포: **[4.21.
|
|
120
|
+
최신 배포: **[4.21.22](https://github.com/chrisryugj/kordoc/releases/tag/v4.21.22)** · 2026-10-11
|
|
121
121
|
|
|
122
122
|
| 버전 | 주요 변경 |
|
|
123
123
|
| --- | --- |
|
|
124
|
+
| 4.21.22 | PDF 양쪽 정렬 영문 참고문헌 줄을 열로 읽어 낱말이 뒤섞이던 것 고침 (web052 읽기 순서 → 1, score 커버리지 2문서 → 1) |
|
|
125
|
+
| 4.21.21 | PDF 쪽 테두리 틀 안 바닥글 걷기 · 첨부 이름표("<붙임2>"·"<별지 서식 제3호>")·강의 번호를 머리말로 지우던 것 고침 (PDF 글 정확도 99.64 → 99.67%, 어절 F1 99.00 → 99.02%) |
|
|
124
126
|
| 4.21.20 | PDF 괘선 없는 표 칸의 어절 가운데 꺾임을 붙여 씀("남⏎편이") · 채우기·패치 서식 보존(바뀐 문단만 줄 배치 캐시 삭제·강조 표지·균등 띄어쓰기·라벨 칸 방향) (PDF 어절 F1 98.987 → 98.998%) |
|
|
125
127
|
| 4.21.19 | PDF 위아래로 쌓인 표와 사이 글줄을 한 표로 묶던 괘선 격자 버리기 — 지역 머리·각주가 제 표와 떨어지던 것 (PDF 읽기 순서 99.16 → 99.23%) |
|
|
126
128
|
| 4.21.18 | 쪽 넘김 문단 잇기도 줄 끝 공백 글리프를 어절 경계로 — "지원⏎활동이"·"계정⏎정보를" 을 띄워 씀 (PDF 어절 F1 98.986 → 98.987%, 5문서 상승) |
|
|
@@ -54,17 +54,17 @@ import {
|
|
|
54
54
|
unknownFontWarnings,
|
|
55
55
|
usesGaejosikMunche,
|
|
56
56
|
validateHwpx
|
|
57
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-NT4LPP2I.js";
|
|
58
58
|
import {
|
|
59
59
|
blocksToPages
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-LZVOL2H2.js";
|
|
61
61
|
import {
|
|
62
62
|
applySplices,
|
|
63
63
|
buildParagraphSplices,
|
|
64
64
|
buildRangeSplices,
|
|
65
65
|
placeSealHwpx,
|
|
66
66
|
scanSectionXml
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-H6EXISSP.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-
|
|
75
|
+
} from "./chunk-7TLZ56ZK.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-
|
|
100
|
+
} from "./chunk-6LJ22335.js";
|
|
101
101
|
import "./chunk-7FCNOKOR.js";
|
|
102
|
-
import "./chunk-
|
|
102
|
+
import "./chunk-7MIA3IFO.js";
|
|
103
103
|
import "./chunk-VQFA55IC.js";
|
|
104
|
-
import "./chunk-
|
|
104
|
+
import "./chunk-K7FP2VOU.js";
|
|
105
105
|
import {
|
|
106
106
|
blocksToMarkdown,
|
|
107
107
|
flattenLayoutTables,
|
|
108
108
|
hasStructuredCellContent
|
|
109
|
-
} from "./chunk-
|
|
110
|
-
import "./chunk-
|
|
109
|
+
} from "./chunk-3BJW5KXR.js";
|
|
110
|
+
import "./chunk-BZC24YXS.js";
|
|
111
111
|
import {
|
|
112
112
|
VERSION
|
|
113
|
-
} from "./chunk-
|
|
113
|
+
} from "./chunk-ZQZDGIN4.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=-
|
|
207
|
+
//# sourceMappingURL=-PLOEMNCA.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
escapeHtml,
|
|
4
4
|
sanitizeHref
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ZQZDGIN4.js";
|
|
6
6
|
|
|
7
7
|
// src/shared/symbol-fonts.ts
|
|
8
8
|
var WINGDINGS = [
|
|
@@ -1062,4 +1062,4 @@ export {
|
|
|
1062
1062
|
visibleText,
|
|
1063
1063
|
escapeHtmlCellText
|
|
1064
1064
|
};
|
|
1065
|
-
//# sourceMappingURL=chunk-
|
|
1065
|
+
//# sourceMappingURL=chunk-3BJW5KXR.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
KordocError
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BMQATDUY.js";
|
|
4
4
|
|
|
5
5
|
// src/pdf/formula/models.ts
|
|
6
6
|
import { createHash as createHash2 } from "crypto";
|
|
@@ -308,4 +308,4 @@ export {
|
|
|
308
308
|
ensureFormulaModels,
|
|
309
309
|
ensureSingleModel
|
|
310
310
|
};
|
|
311
|
-
//# sourceMappingURL=chunk-
|
|
311
|
+
//# sourceMappingURL=chunk-64MCJ5GC.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
parse
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-NT4LPP2I.js";
|
|
5
5
|
import {
|
|
6
6
|
classifyError,
|
|
7
7
|
sanitizeError,
|
|
8
8
|
toArrayBuffer
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-ZQZDGIN4.js";
|
|
10
10
|
|
|
11
11
|
// src/cli/worker-parse.ts
|
|
12
12
|
import { readFileSync, statSync } from "fs";
|
|
@@ -26,4 +26,4 @@ async function parseWorkerFile(absPath, options) {
|
|
|
26
26
|
export {
|
|
27
27
|
parseWorkerFile
|
|
28
28
|
};
|
|
29
|
-
//# sourceMappingURL=chunk-
|
|
29
|
+
//# sourceMappingURL=chunk-64V65GZM.js.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
HEADING_RATIO_H3,
|
|
10
10
|
tidyScriptTags,
|
|
11
11
|
unframeLayoutTables
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-7MIA3IFO.js";
|
|
13
13
|
import {
|
|
14
14
|
parsePageRange
|
|
15
15
|
} from "./chunk-VQFA55IC.js";
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
findChildByLocalName,
|
|
23
23
|
hwpFaceToCssStack,
|
|
24
24
|
parseRenderStyles
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-K7FP2VOU.js";
|
|
26
26
|
import {
|
|
27
27
|
MAX_COLS,
|
|
28
28
|
MAX_ROWS,
|
|
@@ -33,18 +33,18 @@ import {
|
|
|
33
33
|
flattenLayoutTables,
|
|
34
34
|
mapPuaText,
|
|
35
35
|
markNonLayoutTable
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-3BJW5KXR.js";
|
|
37
37
|
import {
|
|
38
38
|
loadSharp,
|
|
39
39
|
rasterizePageSvg
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-BZC24YXS.js";
|
|
41
41
|
import {
|
|
42
42
|
KordocError,
|
|
43
43
|
escapeHtml,
|
|
44
44
|
precheckZipSize,
|
|
45
45
|
sanitizeHref,
|
|
46
46
|
toArrayBuffer
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-ZQZDGIN4.js";
|
|
48
48
|
|
|
49
49
|
// src/render/svg-render.ts
|
|
50
50
|
import JSZip from "jszip";
|
|
@@ -7804,4 +7804,4 @@ export {
|
|
|
7804
7804
|
cropRect,
|
|
7805
7805
|
extractRenderedRegions
|
|
7806
7806
|
};
|
|
7807
|
-
//# sourceMappingURL=chunk-
|
|
7807
|
+
//# sourceMappingURL=chunk-6LJ22335.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
UNRULED_REGION_TABLES,
|
|
7
7
|
extractPageBlocksWithLines
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-SQSGBKCL.js";
|
|
9
9
|
import {
|
|
10
10
|
OCR_DET_MODEL,
|
|
11
11
|
OCR_REC_DICT,
|
|
@@ -13,10 +13,10 @@ import {
|
|
|
13
13
|
ensureOcrModels,
|
|
14
14
|
getOcrModelsDir,
|
|
15
15
|
parseCharacterDict
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-VUSPHKQ6.js";
|
|
17
17
|
import {
|
|
18
18
|
OPTIONAL_DEP_INSTALL_HINT
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-ZQZDGIN4.js";
|
|
20
20
|
|
|
21
21
|
// src/ocr/ruling-lines.ts
|
|
22
22
|
var INK_LUMA_MAX = 205;
|
|
@@ -2133,4 +2133,4 @@ export {
|
|
|
2133
2133
|
groupOcrLines,
|
|
2134
2134
|
ocrItemsToBlocks
|
|
2135
2135
|
};
|
|
2136
|
-
//# sourceMappingURL=chunk-
|
|
2136
|
+
//# sourceMappingURL=chunk-6Z4NAN36.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
visibleText
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-3BJW5KXR.js";
|
|
5
5
|
|
|
6
6
|
// src/script-tags.ts
|
|
7
7
|
var LITERAL_TAG = /<(?=\/?(?:u|sup|sub)>)/g;
|
|
@@ -304,4 +304,4 @@ export {
|
|
|
304
304
|
HEADING_RATIO_H2,
|
|
305
305
|
HEADING_RATIO_H3
|
|
306
306
|
};
|
|
307
|
-
//# sourceMappingURL=chunk-
|
|
307
|
+
//# sourceMappingURL=chunk-7MIA3IFO.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
assignTableIds,
|
|
4
4
|
blocksToMarkdown
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-3BJW5KXR.js";
|
|
6
6
|
|
|
7
7
|
// src/chunks.ts
|
|
8
8
|
var LIST_MARKER_RE = /^(?:[□■◇◆○◎●◦ㅇ•▪▸▶※-]|\d{1,3}[.)]|[가나다라마바사아자차카타파하][.)]|\([가나다라마바사아자차카타파하0-9]{1,3}\)|[①-⑳㉮-㉻㈎-㈛])\s/;
|
|
@@ -82,4 +82,4 @@ function blocksToChunks(blocks, options) {
|
|
|
82
82
|
export {
|
|
83
83
|
blocksToChunks
|
|
84
84
|
};
|
|
85
|
-
//# sourceMappingURL=chunk-
|
|
85
|
+
//# sourceMappingURL=chunk-7TLZ56ZK.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/utils.ts
|
|
2
|
-
var VERSION = true ? "4.21.
|
|
2
|
+
var VERSION = true ? "4.21.22" : "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-
|
|
162
|
+
//# sourceMappingURL=chunk-BMQATDUY.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
KordocError,
|
|
4
4
|
OPTIONAL_DEP_INSTALL_HINT
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ZQZDGIN4.js";
|
|
6
6
|
|
|
7
7
|
// src/render/rasterize.ts
|
|
8
8
|
var densityExponent = null;
|
|
@@ -88,4 +88,4 @@ export {
|
|
|
88
88
|
rasterizeSvg,
|
|
89
89
|
rasterizePageSvg
|
|
90
90
|
};
|
|
91
|
-
//# sourceMappingURL=chunk-
|
|
91
|
+
//# sourceMappingURL=chunk-BZC24YXS.js.map
|
|
@@ -10,10 +10,10 @@ import {
|
|
|
10
10
|
extractPageBlocksWithLines,
|
|
11
11
|
getOcrModelsDir,
|
|
12
12
|
parseCharacterDict
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-GYQGKVTQ.js";
|
|
14
14
|
import {
|
|
15
15
|
OPTIONAL_DEP_INSTALL_HINT
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-BMQATDUY.js";
|
|
17
17
|
|
|
18
18
|
// src/ocr/ruling-lines.ts
|
|
19
19
|
var INK_LUMA_MAX = 205;
|
|
@@ -2130,4 +2130,4 @@ export {
|
|
|
2130
2130
|
groupOcrLines,
|
|
2131
2131
|
ocrItemsToBlocks
|
|
2132
2132
|
};
|
|
2133
|
-
//# sourceMappingURL=chunk-
|
|
2133
|
+
//# sourceMappingURL=chunk-EL7BGP7X.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
KordocError
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ZQZDGIN4.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-
|
|
92
|
+
//# sourceMappingURL=chunk-G4DVIZTZ.js.map
|
|
@@ -4,15 +4,15 @@ import {
|
|
|
4
4
|
HEADING_RATIO_H2,
|
|
5
5
|
HEADING_RATIO_H3,
|
|
6
6
|
tidyScriptTags
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-KFJP2HYL.js";
|
|
8
8
|
import {
|
|
9
9
|
ensureModelsIn,
|
|
10
10
|
getModelsDir
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-64MCJ5GC.js";
|
|
12
12
|
import {
|
|
13
13
|
safeMax,
|
|
14
14
|
safeMin
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-BMQATDUY.js";
|
|
16
16
|
|
|
17
17
|
// src/ocr/models.ts
|
|
18
18
|
import { join } from "path";
|
|
@@ -5744,6 +5744,20 @@ function detectSpecialKoreanTables(blocks) {
|
|
|
5744
5744
|
flushKvTable();
|
|
5745
5745
|
return result;
|
|
5746
5746
|
}
|
|
5747
|
+
function tracksPages(occ) {
|
|
5748
|
+
const nums = occ.map((o) => [...o.text.matchAll(/\d+/g)].map((m) => +m[0]));
|
|
5749
|
+
if (!nums.length || nums.some((n) => n.length !== nums[0].length)) return false;
|
|
5750
|
+
return nums[0].some((_, j) => new Set(occ.map((o, k) => o.page - nums[k][j])).size === 1);
|
|
5751
|
+
}
|
|
5752
|
+
function looseVaryingNumber(occ) {
|
|
5753
|
+
const nums = occ.map((o) => [...o.text.matchAll(/\d+/g)]);
|
|
5754
|
+
if (!nums.length || nums.some((n) => n.length !== nums[0].length)) return false;
|
|
5755
|
+
const loose = (text, m) => !/\p{L}/u.test(text[m.index - 1] ?? " ") && !/\p{L}/u.test(text[m.index + m[0].length] ?? " ");
|
|
5756
|
+
for (let j = 0; j < nums[0].length; j++) {
|
|
5757
|
+
if (new Set(nums.map((n) => n[j][0])).size > 1 && occ.every((o, k) => loose(o.text, nums[k][j]))) return true;
|
|
5758
|
+
}
|
|
5759
|
+
return false;
|
|
5760
|
+
}
|
|
5747
5761
|
function removeHeaderFooterBlocks(blocks, pageHeights, warnings, notes, tables = false, context = []) {
|
|
5748
5762
|
if (context.length && !tables) {
|
|
5749
5763
|
const removed = removeHeaderFooterBlocks([...blocks, ...context], pageHeights, [], notes).filter((index) => index < blocks.length);
|
|
@@ -5773,6 +5787,7 @@ function removeHeaderFooterBlocks(blocks, pageHeights, warnings, notes, tables =
|
|
|
5773
5787
|
const patternCount = /* @__PURE__ */ new Map();
|
|
5774
5788
|
const patternPages = /* @__PURE__ */ new Map();
|
|
5775
5789
|
const patternNumbers = /* @__PURE__ */ new Map();
|
|
5790
|
+
const patternOcc = /* @__PURE__ */ new Map();
|
|
5776
5791
|
for (const e of entries) {
|
|
5777
5792
|
const norm = e.text.replace(/\d+/g, "#");
|
|
5778
5793
|
patternCount.set(norm, (patternCount.get(norm) || 0) + 1);
|
|
@@ -5782,13 +5797,18 @@ function removeHeaderFooterBlocks(blocks, pageHeights, warnings, notes, tables =
|
|
|
5782
5797
|
const pages = patternPages.get(norm) || /* @__PURE__ */ new Set();
|
|
5783
5798
|
pages.add(e.page);
|
|
5784
5799
|
patternPages.set(norm, pages);
|
|
5800
|
+
patternOcc.set(norm, [...patternOcc.get(norm) ?? [], e]);
|
|
5785
5801
|
}
|
|
5786
5802
|
const repeatedPatterns = /* @__PURE__ */ new Set();
|
|
5787
5803
|
for (const [p, count] of patternCount) {
|
|
5788
5804
|
const pages = [...patternPages.get(p) ?? []];
|
|
5789
5805
|
const span2 = pages.length ? Math.max(...pages) - Math.min(...pages) + 1 : 0;
|
|
5790
|
-
const
|
|
5791
|
-
|
|
5806
|
+
const varying = !tables && (patternNumbers.get(p)?.size ?? 0) > 1;
|
|
5807
|
+
const occ = patternOcc.get(p) ?? [];
|
|
5808
|
+
const dense = pages.length >= span2 * 0.4;
|
|
5809
|
+
const loose = looseVaryingNumber(occ) && (entries === bottomEntries || dense || tracksPages(occ));
|
|
5810
|
+
const pageNumbered = varying && (loose || dense && new Set(occ.map((o) => o.text)).size * 2 <= occ.length);
|
|
5811
|
+
if (count >= MIN_REPEAT2 && pages.length >= MIN_REPEAT2 && (varying ? pageNumbered : dense)) {
|
|
5792
5812
|
repeatedPatterns.add(p);
|
|
5793
5813
|
}
|
|
5794
5814
|
}
|
|
@@ -5826,6 +5846,59 @@ function removeHeaderFooterBlocks(blocks, pageHeights, warnings, notes, tables =
|
|
|
5826
5846
|
}
|
|
5827
5847
|
return [...removeSet].sort((a, b) => a - b);
|
|
5828
5848
|
}
|
|
5849
|
+
function runningLinePatterns(removed, pageHeights) {
|
|
5850
|
+
const occ = /* @__PURE__ */ new Map();
|
|
5851
|
+
for (const b of removed) {
|
|
5852
|
+
const ph = b.bbox && b.pageNumber ? pageHeights.get(b.bbox.page) || pageHeights.get(b.pageNumber) : void 0;
|
|
5853
|
+
const key = b.text ? runningKey(b.text) : "";
|
|
5854
|
+
if (!ph || !b.bbox || !b.pageNumber || !/\p{L}/u.test(key) || ph - b.bbox.y <= ph * 0.5) continue;
|
|
5855
|
+
(occ.get(key) ?? occ.set(key, []).get(key)).push({ page: b.pageNumber, nums: (b.text.match(/\d+/g) ?? []).join(",") });
|
|
5856
|
+
}
|
|
5857
|
+
const out = /* @__PURE__ */ new Map();
|
|
5858
|
+
for (const [key, list] of occ) {
|
|
5859
|
+
if (!pageNumberAtEnd(key)) continue;
|
|
5860
|
+
const offsets = new Set(list.map((o) => o.page - +o.nums));
|
|
5861
|
+
if (offsets.size === 1) out.set(key, [...offsets][0]);
|
|
5862
|
+
}
|
|
5863
|
+
return out;
|
|
5864
|
+
}
|
|
5865
|
+
var runningKey = (s) => s.replace(/\d+/g, "#").replace(/\s+/g, " ").trim();
|
|
5866
|
+
var pageNumberAtEnd = (key) => (key.match(/#/g) ?? []).length === 1 && /#\s*[)\]]?$/.test(key);
|
|
5867
|
+
function stripAbsorbedRunningLines(blocks, pageHeights, running) {
|
|
5868
|
+
if (!running.size) return blocks;
|
|
5869
|
+
const matches = (line, page) => {
|
|
5870
|
+
const offset = running.get(runningKey(line));
|
|
5871
|
+
return offset !== void 0 && page - +(line.match(/\d+/g) ?? []).pop() === offset;
|
|
5872
|
+
};
|
|
5873
|
+
const out = [];
|
|
5874
|
+
for (const b of blocks) {
|
|
5875
|
+
const ph = b.bbox && b.pageNumber ? pageHeights.get(b.bbox.page) || pageHeights.get(b.pageNumber) : void 0;
|
|
5876
|
+
if (!ph || !b.bbox || !b.pageNumber || b.bbox.y > ph * 0.12) {
|
|
5877
|
+
out.push(b);
|
|
5878
|
+
continue;
|
|
5879
|
+
}
|
|
5880
|
+
if (b.type === "paragraph" && b.text) {
|
|
5881
|
+
const lines = b.text.split("\n");
|
|
5882
|
+
let hi = lines.length;
|
|
5883
|
+
while (hi > 0 && !lines[hi - 1].trim()) hi--;
|
|
5884
|
+
if (hi > 0 && matches(lines[hi - 1], b.pageNumber)) {
|
|
5885
|
+
const text = lines.slice(0, hi - 1).join("\n").trim();
|
|
5886
|
+
if (!text) continue;
|
|
5887
|
+
b.text = text;
|
|
5888
|
+
}
|
|
5889
|
+
} else if (b.type === "table" && b.table && b.table.cells.length) {
|
|
5890
|
+
const t = b.table, last = t.cells.length - 1;
|
|
5891
|
+
if (matches(t.cells[last].map((c) => c.text.trim()).filter(Boolean).join(" "), b.pageNumber) && !t.cells.slice(0, last).some((row, i) => row.some((c) => i + (c.rowSpan || 1) - 1 >= last))) {
|
|
5892
|
+
t.cells.pop();
|
|
5893
|
+
if (!t.cells.length) continue;
|
|
5894
|
+
t.rows = t.cells.length;
|
|
5895
|
+
t.hasHeader = t.hasHeader && t.rows > 1;
|
|
5896
|
+
}
|
|
5897
|
+
}
|
|
5898
|
+
out.push(b);
|
|
5899
|
+
}
|
|
5900
|
+
return out;
|
|
5901
|
+
}
|
|
5829
5902
|
|
|
5830
5903
|
// src/pdf/table-meta.ts
|
|
5831
5904
|
var CLIP_TABLES = /* @__PURE__ */ new WeakSet();
|
|
@@ -6582,7 +6655,7 @@ function isProseSpread(items) {
|
|
|
6582
6655
|
const avgLen = items.reduce((s, i) => s + i.text.length, 0) / items.length;
|
|
6583
6656
|
if (items.length >= 4 && maxGap < 40 && avgLen < 5) return true;
|
|
6584
6657
|
const minGap = safeMin(gaps);
|
|
6585
|
-
return minGap > 0 && maxGap - minGap <= Math.max(2, maxGap * 0.15) && items.filter((i) => /^\P{L}*\p{Ll}/u.test(i.text)).length * 2 >= items.length;
|
|
6658
|
+
return minGap > 0 && maxGap - minGap <= Math.max(2, maxGap * 0.15) && (items.filter((i) => /^\P{L}*\p{Ll}/u.test(i.text)).length * 2 >= items.length || items.some((i) => /\p{L}[,.;:]["”’)]?$/u.test(i.text)));
|
|
6586
6659
|
}
|
|
6587
6660
|
function detectColumns(yLines) {
|
|
6588
6661
|
const allItems = yLines.flat();
|
|
@@ -8874,6 +8947,8 @@ export {
|
|
|
8874
8947
|
detectTableCaptions,
|
|
8875
8948
|
detectKoreanListBlocks,
|
|
8876
8949
|
removeHeaderFooterBlocks,
|
|
8950
|
+
runningLinePatterns,
|
|
8951
|
+
stripAbsorbedRunningLines,
|
|
8877
8952
|
CLIP_TABLES,
|
|
8878
8953
|
FRAME_TITLE_BLOCKS,
|
|
8879
8954
|
TABLE_COLXS,
|
|
@@ -8896,4 +8971,4 @@ export {
|
|
|
8896
8971
|
UNRULED_REGION_TABLES,
|
|
8897
8972
|
mergeOcrImageRegions
|
|
8898
8973
|
};
|
|
8899
|
-
//# sourceMappingURL=chunk-
|
|
8974
|
+
//# sourceMappingURL=chunk-GYQGKVTQ.js.map
|