kordoc 4.18.4 → 4.18.6
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/dist/{-DDAVBMHD.js → -DE2KWCGY.js} +11 -11
- package/dist/{chunk-4IBY5LTJ.js → chunk-3KLL62JC.js} +2 -2
- package/dist/{chunk-IAXGGQGD.js → chunk-3QJPAKDQ.js} +2 -2
- package/dist/{chunk-274ZPMHK.js → chunk-4DVAKBXW.js} +2 -2
- package/dist/{chunk-OIUSF2VA.cjs → chunk-4JMV3G4Y.cjs} +12 -12
- package/dist/{chunk-OIUSF2VA.cjs.map → chunk-4JMV3G4Y.cjs.map} +1 -1
- package/dist/{chunk-3WLZOJIE.cjs → chunk-5TUGAXAI.cjs} +6 -6
- package/dist/{chunk-3WLZOJIE.cjs.map → chunk-5TUGAXAI.cjs.map} +1 -1
- package/dist/{chunk-7GR2GCJF.js → chunk-6N5TBPPV.js} +2 -2
- package/dist/{chunk-XG4SYOZL.js → chunk-7P2JOHWA.js} +2 -2
- package/dist/{chunk-DUV7Y6IQ.js → chunk-BY7UEIZH.js} +3 -3
- package/dist/{chunk-TMJVD6FW.js → chunk-CWJJTCCH.js} +2 -2
- package/dist/{chunk-HRJJDNRD.js → chunk-DVLKNRAA.js} +2 -2
- package/dist/{chunk-AVIZ55NQ.cjs → chunk-FJI44TS5.cjs} +3 -3
- package/dist/{chunk-AVIZ55NQ.cjs.map → chunk-FJI44TS5.cjs.map} +1 -1
- package/dist/{chunk-VTVK2JMI.js → chunk-FVF57U3O.js} +2 -2
- package/dist/{chunk-Z2PPDQK2.js → chunk-GJJVMC2G.js} +2 -2
- package/dist/{chunk-RCI7LY4N.js → chunk-I5RRAR64.js} +4 -4
- package/dist/{chunk-ELOPDQES.js → chunk-IW2WVEZU.js} +2 -2
- package/dist/{chunk-E2644XCO.cjs → chunk-J5HIKXQF.cjs} +142 -45
- package/dist/chunk-J5HIKXQF.cjs.map +1 -0
- package/dist/{chunk-MXA6YW2W.js → chunk-JYX46LZT.js} +111 -94
- package/dist/chunk-JYX46LZT.js.map +1 -0
- package/dist/{chunk-T2BJPT6D.js → chunk-LW5SNBU7.js} +2 -2
- package/dist/{chunk-F5YVCJVF.js → chunk-NM6WGVOR.js} +2 -2
- package/dist/{chunk-F2GDLA45.js → chunk-OWKGNWRS.js} +10 -10
- package/dist/{chunk-QVCHFCT2.js → chunk-PFXSGQNN.js} +2 -2
- package/dist/{chunk-V5X4LLVM.js → chunk-PMPAREFJ.js} +6 -6
- package/dist/{chunk-LGF2IO66.js → chunk-QND3QFIX.js} +2 -2
- package/dist/{chunk-IBQCK4F3.js → chunk-SYWZ3SRQ.js} +3 -3
- package/dist/{chunk-KUUSP6OS.js → chunk-T45W6EIA.js} +191 -14
- package/dist/chunk-T45W6EIA.js.map +1 -0
- package/dist/{chunk-YCY2R4FM.js → chunk-TOHCMCDL.js} +2 -2
- package/dist/{chunk-3XSP7V5P.cjs → chunk-UIPMCOHH.cjs} +2 -2
- package/dist/{chunk-3XSP7V5P.cjs.map → chunk-UIPMCOHH.cjs.map} +1 -1
- package/dist/{chunk-SVNBZEL6.cjs → chunk-UUK2TZQ2.cjs} +3 -3
- package/dist/{chunk-SVNBZEL6.cjs.map → chunk-UUK2TZQ2.cjs.map} +1 -1
- package/dist/chunks-3NIK3E7X.js +10 -0
- package/dist/cli.js +33 -27
- package/dist/cli.js.map +1 -1
- package/dist/{formula-HQFZEXFF.js → formula-P77ISY24.js} +3 -3
- package/dist/{formula-YYJQBKEN.cjs → formula-QQZ62X3A.cjs} +9 -9
- package/dist/{formula-YYJQBKEN.cjs.map → formula-QQZ62X3A.cjs.map} +1 -1
- package/dist/{formula-7ZOZ5QJ6.js → formula-XQXGM25B.js} +4 -4
- package/dist/{image-ocr-4BGX2EJJ.js → image-ocr-7FIUVJN6.js} +6 -6
- package/dist/{image-ocr-RK3HJVCI.js → image-ocr-LCEJXRAW.js} +9 -9
- package/dist/{image-ocr-CC26Q5KG.cjs → image-ocr-XILDGKJT.cjs} +15 -15
- package/dist/{image-ocr-CC26Q5KG.cjs.map → image-ocr-XILDGKJT.cjs.map} +1 -1
- package/dist/index.cjs +277 -277
- package/dist/index.js +5 -5
- package/dist/mcp.js +22 -22
- package/dist/{model-bundle-VHRXG63R.js → model-bundle-SQZ3W5YY.js} +5 -5
- package/dist/{models-G3WA24SY.js → models-JZCTRP7M.js} +5 -5
- package/dist/{parser-GFDGAVLV.js → parser-IKKZQMTJ.js} +8 -8
- package/dist/{parser-SOWTUOMK.js → parser-JCVDTWZK.js} +11 -11
- package/dist/{parser-BGORCLIU.cjs → parser-QHJZTPLI.cjs} +126 -126
- package/dist/{parser-BGORCLIU.cjs.map → parser-QHJZTPLI.cjs.map} +1 -1
- package/dist/pdf-ocr-53LWVES4.js +16 -0
- package/dist/pdf-ocr-72EYTUTO.cjs +17 -0
- package/dist/{pdf-ocr-EJ2HNZN6.cjs.map → pdf-ocr-72EYTUTO.cjs.map} +1 -1
- package/dist/pdf-ocr-EZGDVPJR.js +20 -0
- package/dist/{profile-io-Q2T47RVH.js → profile-io-ZOPP3ZZF.js} +3 -3
- package/dist/{rasterize-OAVMUTE6.js → rasterize-SSVBOWS7.js} +3 -3
- package/dist/{redact-doc-ECFOVR4X.js → redact-doc-NKOEXJLS.js} +11 -11
- package/dist/{render-NSKWZVTD.js → render-Z3UINVKW.js} +7 -7
- package/dist/seal-UVB4GNMX.js +10 -0
- package/dist/{setup-REH2KZP2.js → setup-XFGSO4EL.js} +3 -3
- package/dist/visual-WKOKF77U.js +20 -0
- package/dist/{watch-JXDUZYBY.js → watch-OYDMGGU6.js} +12 -12
- package/package.json +1 -1
- package/dist/chunk-E2644XCO.cjs.map +0 -1
- package/dist/chunk-KUUSP6OS.js.map +0 -1
- package/dist/chunk-MXA6YW2W.js.map +0 -1
- package/dist/chunks-5QTTAT5T.js +0 -10
- package/dist/pdf-ocr-7IOOVR2I.js +0 -20
- package/dist/pdf-ocr-EJ2HNZN6.cjs +0 -17
- package/dist/pdf-ocr-RACAZU3N.js +0 -16
- package/dist/seal-A4MG7MPQ.js +0 -10
- package/dist/visual-B56WQAGW.js +0 -20
- /package/dist/{-DDAVBMHD.js.map → -DE2KWCGY.js.map} +0 -0
- /package/dist/{chunk-4IBY5LTJ.js.map → chunk-3KLL62JC.js.map} +0 -0
- /package/dist/{chunk-IAXGGQGD.js.map → chunk-3QJPAKDQ.js.map} +0 -0
- /package/dist/{chunk-274ZPMHK.js.map → chunk-4DVAKBXW.js.map} +0 -0
- /package/dist/{chunk-7GR2GCJF.js.map → chunk-6N5TBPPV.js.map} +0 -0
- /package/dist/{chunk-XG4SYOZL.js.map → chunk-7P2JOHWA.js.map} +0 -0
- /package/dist/{chunk-DUV7Y6IQ.js.map → chunk-BY7UEIZH.js.map} +0 -0
- /package/dist/{chunk-TMJVD6FW.js.map → chunk-CWJJTCCH.js.map} +0 -0
- /package/dist/{chunk-HRJJDNRD.js.map → chunk-DVLKNRAA.js.map} +0 -0
- /package/dist/{chunk-VTVK2JMI.js.map → chunk-FVF57U3O.js.map} +0 -0
- /package/dist/{chunk-Z2PPDQK2.js.map → chunk-GJJVMC2G.js.map} +0 -0
- /package/dist/{chunk-RCI7LY4N.js.map → chunk-I5RRAR64.js.map} +0 -0
- /package/dist/{chunk-ELOPDQES.js.map → chunk-IW2WVEZU.js.map} +0 -0
- /package/dist/{chunk-T2BJPT6D.js.map → chunk-LW5SNBU7.js.map} +0 -0
- /package/dist/{chunk-F5YVCJVF.js.map → chunk-NM6WGVOR.js.map} +0 -0
- /package/dist/{chunk-F2GDLA45.js.map → chunk-OWKGNWRS.js.map} +0 -0
- /package/dist/{chunk-QVCHFCT2.js.map → chunk-PFXSGQNN.js.map} +0 -0
- /package/dist/{chunk-V5X4LLVM.js.map → chunk-PMPAREFJ.js.map} +0 -0
- /package/dist/{chunk-LGF2IO66.js.map → chunk-QND3QFIX.js.map} +0 -0
- /package/dist/{chunk-IBQCK4F3.js.map → chunk-SYWZ3SRQ.js.map} +0 -0
- /package/dist/{chunk-YCY2R4FM.js.map → chunk-TOHCMCDL.js.map} +0 -0
- /package/dist/{chunks-5QTTAT5T.js.map → chunks-3NIK3E7X.js.map} +0 -0
- /package/dist/{formula-HQFZEXFF.js.map → formula-P77ISY24.js.map} +0 -0
- /package/dist/{formula-7ZOZ5QJ6.js.map → formula-XQXGM25B.js.map} +0 -0
- /package/dist/{image-ocr-4BGX2EJJ.js.map → image-ocr-7FIUVJN6.js.map} +0 -0
- /package/dist/{image-ocr-RK3HJVCI.js.map → image-ocr-LCEJXRAW.js.map} +0 -0
- /package/dist/{model-bundle-VHRXG63R.js.map → model-bundle-SQZ3W5YY.js.map} +0 -0
- /package/dist/{models-G3WA24SY.js.map → models-JZCTRP7M.js.map} +0 -0
- /package/dist/{parser-GFDGAVLV.js.map → parser-IKKZQMTJ.js.map} +0 -0
- /package/dist/{parser-SOWTUOMK.js.map → parser-JCVDTWZK.js.map} +0 -0
- /package/dist/{pdf-ocr-7IOOVR2I.js.map → pdf-ocr-53LWVES4.js.map} +0 -0
- /package/dist/{pdf-ocr-RACAZU3N.js.map → pdf-ocr-EZGDVPJR.js.map} +0 -0
- /package/dist/{profile-io-Q2T47RVH.js.map → profile-io-ZOPP3ZZF.js.map} +0 -0
- /package/dist/{rasterize-OAVMUTE6.js.map → rasterize-SSVBOWS7.js.map} +0 -0
- /package/dist/{redact-doc-ECFOVR4X.js.map → redact-doc-NKOEXJLS.js.map} +0 -0
- /package/dist/{render-NSKWZVTD.js.map → render-Z3UINVKW.js.map} +0 -0
- /package/dist/{seal-A4MG7MPQ.js.map → seal-UVB4GNMX.js.map} +0 -0
- /package/dist/{setup-REH2KZP2.js.map → setup-XFGSO4EL.js.map} +0 -0
- /package/dist/{visual-B56WQAGW.js.map → visual-WKOKF77U.js.map} +0 -0
- /package/dist/{watch-JXDUZYBY.js.map → watch-OYDMGGU6.js.map} +0 -0
|
@@ -1,88 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
1
2
|
import {
|
|
2
3
|
CELL_EDGES,
|
|
3
4
|
HEADING_RATIO_H1,
|
|
4
5
|
HEADING_RATIO_H2,
|
|
5
6
|
HEADING_RATIO_H3,
|
|
6
7
|
tidyScriptTags
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import {
|
|
9
|
-
ensureModelsIn,
|
|
10
|
-
getModelsDir
|
|
11
|
-
} from "./chunk-ELOPDQES.js";
|
|
8
|
+
} from "./chunk-CWJJTCCH.js";
|
|
12
9
|
import {
|
|
13
10
|
safeMax,
|
|
14
11
|
safeMin
|
|
15
|
-
} from "./chunk-
|
|
16
|
-
|
|
17
|
-
// src/ocr/models.ts
|
|
18
|
-
import { join } from "path";
|
|
19
|
-
import { stat } from "fs/promises";
|
|
20
|
-
var OCR_DET_MODEL = {
|
|
21
|
-
name: "PP-OCRv5 mobile det",
|
|
22
|
-
filename: "det.onnx",
|
|
23
|
-
url: "https://huggingface.co/PaddlePaddle/PP-OCRv5_mobile_det_onnx/resolve/main/inference.onnx",
|
|
24
|
-
sha256: "a431985659dc921974177a95adcfbb90fd9e51989a5e04d70d0b75f597b6e61d",
|
|
25
|
-
sizeMb: 5
|
|
26
|
-
};
|
|
27
|
-
var OCR_REC_MODEL = {
|
|
28
|
-
name: "PP-OCRv5 korean rec",
|
|
29
|
-
filename: "rec_korean.onnx",
|
|
30
|
-
url: "https://huggingface.co/PaddlePaddle/korean_PP-OCRv5_mobile_rec_onnx/resolve/main/inference.onnx",
|
|
31
|
-
sha256: "92f0b7785e64fc9090106a241cf4c1eb97472824558272751b88a2a4476d3a08",
|
|
32
|
-
sizeMb: 13
|
|
33
|
-
};
|
|
34
|
-
var OCR_REC_DICT = {
|
|
35
|
-
name: "PP-OCRv5 korean dict",
|
|
36
|
-
filename: "rec_korean.yml",
|
|
37
|
-
url: "https://huggingface.co/PaddlePaddle/korean_PP-OCRv5_mobile_rec_onnx/resolve/main/inference.yml",
|
|
38
|
-
sha256: "f757fa1c40e99edcf27e9cce879b93eb2a51fa46f5ef39095689b8c37dd75998",
|
|
39
|
-
sizeMb: 1
|
|
40
|
-
};
|
|
41
|
-
var ALL_OCR_MODELS = [OCR_DET_MODEL, OCR_REC_MODEL, OCR_REC_DICT];
|
|
42
|
-
function getOcrModelsDir() {
|
|
43
|
-
return getModelsDir("ppocr");
|
|
44
|
-
}
|
|
45
|
-
async function ensureOcrModels(onProgress) {
|
|
46
|
-
return ensureModelsIn(getOcrModelsDir(), ALL_OCR_MODELS, onProgress);
|
|
47
|
-
}
|
|
48
|
-
async function ocrModelsCached() {
|
|
49
|
-
const dir = getOcrModelsDir();
|
|
50
|
-
for (const spec of ALL_OCR_MODELS) {
|
|
51
|
-
try {
|
|
52
|
-
if (!(await stat(join(dir, spec.filename))).size) return false;
|
|
53
|
-
} catch {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
function parseCharacterDict(yml) {
|
|
60
|
-
const lines = yml.split("\n");
|
|
61
|
-
const chars = [];
|
|
62
|
-
let inDict = false;
|
|
63
|
-
let dictIndent = -1;
|
|
64
|
-
for (const line of lines) {
|
|
65
|
-
if (!inDict) {
|
|
66
|
-
const m2 = /^(\s*)character_dict:\s*$/.exec(line);
|
|
67
|
-
if (m2) {
|
|
68
|
-
inDict = true;
|
|
69
|
-
dictIndent = m2[1].length;
|
|
70
|
-
}
|
|
71
|
-
continue;
|
|
72
|
-
}
|
|
73
|
-
const m = /^(\s*)- (.*)$/.exec(line);
|
|
74
|
-
if (m && m[1].length >= dictIndent) {
|
|
75
|
-
let v = m[2];
|
|
76
|
-
if (v.length >= 2 && (v.startsWith("'") && v.endsWith("'") || v.startsWith('"') && v.endsWith('"'))) {
|
|
77
|
-
v = v.slice(1, -1).replace(/''/g, "'");
|
|
78
|
-
}
|
|
79
|
-
chars.push(v);
|
|
80
|
-
continue;
|
|
81
|
-
}
|
|
82
|
-
if (line.trim() !== "") break;
|
|
83
|
-
}
|
|
84
|
-
return chars;
|
|
85
|
-
}
|
|
12
|
+
} from "./chunk-NM6WGVOR.js";
|
|
86
13
|
|
|
87
14
|
// src/pdf/line-extract.ts
|
|
88
15
|
import { OPS } from "pdfjs-dist/legacy/build/pdf.mjs";
|
|
@@ -4888,6 +4815,7 @@ function detectClusterTables(items, pageNum, rejected) {
|
|
|
4888
4815
|
});
|
|
4889
4816
|
}
|
|
4890
4817
|
var SIDE_TAB_MIN = 6;
|
|
4818
|
+
var SIDE_TAB_CAP_GROUPS = /* @__PURE__ */ new WeakMap();
|
|
4891
4819
|
function sideTabGlyphs(items) {
|
|
4892
4820
|
const found = /* @__PURE__ */ new Set();
|
|
4893
4821
|
const singles = items.filter((i) => i.fontSize > 0 && [...i.text.trim()].length === 1);
|
|
@@ -4933,11 +4861,22 @@ function sideTabGlyphs(items) {
|
|
|
4933
4861
|
if (!others.length) continue;
|
|
4934
4862
|
const left = Math.min(...col.map((i) => i.x)), right = Math.max(...col.map((i) => i.x + i.w));
|
|
4935
4863
|
const rest = items.filter((i) => !members.has(i) && i.text.trim());
|
|
4936
|
-
const
|
|
4864
|
+
const cap = (i) => i.y > top && i.y - top <= fs * 3 && i.w <= fs * 3 && i.fontSize <= fs * 3 && [...i.text.trim()].length <= 3 && Math.abs(i.x + i.w / 2 - (left + right) / 2) <= fs * 0.5;
|
|
4865
|
+
const bodyRest = rest.filter((i) => !cap(i));
|
|
4866
|
+
const outside = bodyRest.every((i) => i.x >= right + fs) || bodyRest.every((i) => i.x + i.w <= left - fs);
|
|
4937
4867
|
if (!outside) continue;
|
|
4938
4868
|
const alone = col.filter((g) => !others.some((i) => Math.abs(i.y - g.y) <= Y_TOL)).length;
|
|
4939
4869
|
if (alone < col.length * 0.4) continue;
|
|
4940
|
-
|
|
4870
|
+
const legacyOutside = rest.every((i) => i.x >= right + fs) || rest.every((i) => i.x + i.w <= left - fs);
|
|
4871
|
+
const head = !legacyOutside ? rest.find(cap) : void 0;
|
|
4872
|
+
for (const g of col) {
|
|
4873
|
+
found.add(g);
|
|
4874
|
+
if (head) {
|
|
4875
|
+
const caps = SIDE_TAB_CAP_GROUPS.get(found) ?? /* @__PURE__ */ new Map();
|
|
4876
|
+
caps.set(g, head);
|
|
4877
|
+
SIDE_TAB_CAP_GROUPS.set(found, caps);
|
|
4878
|
+
}
|
|
4879
|
+
}
|
|
4941
4880
|
}
|
|
4942
4881
|
return found;
|
|
4943
4882
|
}
|
|
@@ -6901,6 +6840,55 @@ function frameLayoutBoxes(blocks) {
|
|
|
6901
6840
|
}
|
|
6902
6841
|
return boxes;
|
|
6903
6842
|
}
|
|
6843
|
+
function takeFrameSpanningText(items, cutX, pageNum, lex) {
|
|
6844
|
+
let minX = Infinity, maxR = -Infinity;
|
|
6845
|
+
for (const item of items) {
|
|
6846
|
+
minX = Math.min(minX, item.x);
|
|
6847
|
+
maxR = Math.max(maxR, item.x + item.w);
|
|
6848
|
+
}
|
|
6849
|
+
const span = maxR - minX;
|
|
6850
|
+
const rows = groupByY([...items].sort((a, b) => b.y - a.y || a.x - b.x)).map((line) => {
|
|
6851
|
+
const runs = [];
|
|
6852
|
+
for (const item of [...line].sort((a, b) => a.x - b.x)) {
|
|
6853
|
+
const run = runs[runs.length - 1], prev = run?.[run.length - 1];
|
|
6854
|
+
if (prev && item.x - (prev.x + prev.w) <= Math.max(prev.fontSize, item.fontSize) * 0.6) run.push(item);
|
|
6855
|
+
else runs.push([item]);
|
|
6856
|
+
}
|
|
6857
|
+
return runs;
|
|
6858
|
+
});
|
|
6859
|
+
const taken = /* @__PURE__ */ new Set(), blocks = [];
|
|
6860
|
+
for (let r = 0; r < rows.length; r++) for (const run of rows[r]) {
|
|
6861
|
+
if (taken.has(run[0]) || run[0].x >= cutX || Math.max(...run.map((i) => i.x + i.w)) <= cutX) continue;
|
|
6862
|
+
const lines = [run], fs = Math.max(...run.map((i) => i.fontSize));
|
|
6863
|
+
const left = run[0].x, right = Math.max(...run.map((i) => i.x + i.w));
|
|
6864
|
+
if (right - left < span * 0.75) continue;
|
|
6865
|
+
let prevY = run[0].y;
|
|
6866
|
+
for (let next = r + 1; next < rows.length && rows[next].length === 1; next++) {
|
|
6867
|
+
const tail = rows[next][0], y = tail[0].y;
|
|
6868
|
+
if (taken.has(tail[0]) || prevY - y > fs * 1.8 || tail[0].x < left - 1 || tail[0].x > left + fs * 2 || tail.some((i) => Math.abs(i.fontSize - fs) > fs * 0.15) || Math.max(...tail.map((i) => i.x + i.w)) > right + 1) break;
|
|
6869
|
+
lines.push(tail);
|
|
6870
|
+
prevY = y;
|
|
6871
|
+
}
|
|
6872
|
+
for (const line of lines) for (const item of line) taken.add(item);
|
|
6873
|
+
pushLineParagraphs(blocks, mergeSuperscriptLines(lines), pageNum, lex);
|
|
6874
|
+
}
|
|
6875
|
+
let keep = 0;
|
|
6876
|
+
for (const item of items) if (!taken.has(item)) items[keep++] = item;
|
|
6877
|
+
items.length = keep;
|
|
6878
|
+
return blocks;
|
|
6879
|
+
}
|
|
6880
|
+
function frameColumnTextBands(items, spanning, cutX) {
|
|
6881
|
+
const tops = spanning.filter((b) => b.bbox).map((b) => b.bbox.y + b.bbox.height).sort((a, b) => b - a);
|
|
6882
|
+
const bands = /* @__PURE__ */ new Map();
|
|
6883
|
+
for (const item of items) {
|
|
6884
|
+
let band = 0;
|
|
6885
|
+
while (band < tops.length && tops[band] > item.y + item.h) band++;
|
|
6886
|
+
const sides = bands.get(band) ?? [[], [], []];
|
|
6887
|
+
sides[item.x + item.w <= cutX ? 0 : item.x >= cutX ? 2 : 1].push(item);
|
|
6888
|
+
bands.set(band, sides);
|
|
6889
|
+
}
|
|
6890
|
+
return [...bands].sort((a, b) => a[0] - b[0]).flatMap(([, sides]) => sides.filter((side) => side.length));
|
|
6891
|
+
}
|
|
6904
6892
|
function groupFrameParagraphUnits(units, frames) {
|
|
6905
6893
|
const source = /* @__PURE__ */ new Map();
|
|
6906
6894
|
for (const unit of units) for (const block of unit) source.set(block, unit);
|
|
@@ -7013,6 +7001,41 @@ function extendNestedShadedHeaders(clipGrids, lineGrids, horizontals, verticals,
|
|
|
7013
7001
|
return extended;
|
|
7014
7002
|
}
|
|
7015
7003
|
|
|
7004
|
+
// src/pdf/side-tab-blocks.ts
|
|
7005
|
+
function attachSideTabBlocks(tab, body, pageNum) {
|
|
7006
|
+
const ordered = [...tab].sort((a, b) => b.y - a.y);
|
|
7007
|
+
const caps = SIDE_TAB_CAP_GROUPS.get(tab);
|
|
7008
|
+
const block = (items) => ({
|
|
7009
|
+
type: "paragraph",
|
|
7010
|
+
text: mergeLineSimple(items).trim(),
|
|
7011
|
+
pageNumber: pageNum,
|
|
7012
|
+
bbox: computeBBox(items, pageNum),
|
|
7013
|
+
style: dominantStyle(items)
|
|
7014
|
+
});
|
|
7015
|
+
const prefix = ordered.filter((g) => !caps?.has(g)).map((g) => ({
|
|
7016
|
+
type: "paragraph",
|
|
7017
|
+
text: g.text.trim(),
|
|
7018
|
+
pageNumber: pageNum,
|
|
7019
|
+
bbox: computeBBox([g], pageNum),
|
|
7020
|
+
style: dominantStyle([g])
|
|
7021
|
+
}));
|
|
7022
|
+
const groups = /* @__PURE__ */ new Map();
|
|
7023
|
+
for (const g of ordered) {
|
|
7024
|
+
const cap = caps?.get(g);
|
|
7025
|
+
if (cap) groups.set(cap, [...groups.get(cap) ?? [], g]);
|
|
7026
|
+
}
|
|
7027
|
+
for (const [cap, glyphs] of groups) {
|
|
7028
|
+
const blocks = groupByY(glyphs).map(block);
|
|
7029
|
+
const anchor = body.reduce((best, b, i) => {
|
|
7030
|
+
const box = b.bbox;
|
|
7031
|
+
if (b.type === "image" || b.type === "separator" || !box || !b.text && !b.table || box.x > cap.x + 1 || box.x + box.width < cap.x + cap.w - 1 || box.y > cap.y + 1 || box.y + box.height < cap.y + cap.fontSize - 1) return best;
|
|
7032
|
+
return best < 0 || box.width * box.height < body[best].bbox.width * body[best].bbox.height ? i : best;
|
|
7033
|
+
}, -1);
|
|
7034
|
+
body.splice(anchor >= 0 ? anchor + 1 : body.length, 0, ...blocks);
|
|
7035
|
+
}
|
|
7036
|
+
return [...prefix, ...body];
|
|
7037
|
+
}
|
|
7038
|
+
|
|
7016
7039
|
// src/pdf/page-regions.ts
|
|
7017
7040
|
function splitTwoColumnProse(items, cutX) {
|
|
7018
7041
|
const left = [];
|
|
@@ -7347,8 +7370,8 @@ function extractPageBlocksWithLines(items, pageNum, opList, pageWidth, pageHeigh
|
|
|
7347
7370
|
}
|
|
7348
7371
|
const tab = sideTabGlyphs(items);
|
|
7349
7372
|
if (tab.size) {
|
|
7350
|
-
const
|
|
7351
|
-
return
|
|
7373
|
+
const body = extractPageBlocksWithLines(items.filter((i) => !tab.has(i)), pageNum, opList, pageWidth, pageHeight, extraLines, detectTables, carry, lexicon, verifiedRightArrows);
|
|
7374
|
+
return attachSideTabBlocks(tab, body, pageNum);
|
|
7352
7375
|
}
|
|
7353
7376
|
const lex = lexicon ?? new WrapLexicon();
|
|
7354
7377
|
for (const line of streamLines(items)) lex.addLine(mergeLineSimple(line));
|
|
@@ -7811,14 +7834,15 @@ function extractBlocksWithGrids(items, pageNum, pageWidth, pageHeight, grids, ho
|
|
|
7811
7834
|
if (remaining.length > 0) {
|
|
7812
7835
|
if (gutterX !== null) {
|
|
7813
7836
|
const gx = gutterX;
|
|
7837
|
+
const spanning = detectListBlocks(takeFrameSpanningText(remaining, gx, pageNum, lex));
|
|
7838
|
+
for (const block of spanning) {
|
|
7839
|
+
finalTextBlocks.push(block);
|
|
7840
|
+
groupSizes.push(1);
|
|
7841
|
+
}
|
|
7814
7842
|
const allY = remaining.map((i) => i.y);
|
|
7815
7843
|
const pageH = safeMax(allY) - safeMin(allY);
|
|
7816
7844
|
const gapThreshold = Math.max(15, pageH * 0.03);
|
|
7817
|
-
const sides =
|
|
7818
|
-
remaining.filter((i) => i.x + i.w <= gx),
|
|
7819
|
-
remaining.filter((i) => i.x < gx && i.x + i.w > gx),
|
|
7820
|
-
remaining.filter((i) => i.x >= gx)
|
|
7821
|
-
];
|
|
7845
|
+
const sides = frameColumnTextBands(remaining, spanning, gx);
|
|
7822
7846
|
const textBlocks = [];
|
|
7823
7847
|
for (const side of sides) {
|
|
7824
7848
|
if (side.length === 0) continue;
|
|
@@ -7829,7 +7853,7 @@ function extractBlocksWithGrids(items, pageNum, pageWidth, pageHeight, grids, ho
|
|
|
7829
7853
|
groupSizes.push(groupBlocks.length);
|
|
7830
7854
|
}
|
|
7831
7855
|
}
|
|
7832
|
-
finalTextBlocks
|
|
7856
|
+
finalTextBlocks.push(...detectListBlocks(textBlocks));
|
|
7833
7857
|
} else {
|
|
7834
7858
|
const allY = remaining.map((i) => i.y);
|
|
7835
7859
|
const pageH = safeMax(allY) - safeMin(allY);
|
|
@@ -8178,13 +8202,6 @@ function extractPageBlocksFallback(items, pageNum, fullPage = false, detectTable
|
|
|
8178
8202
|
}
|
|
8179
8203
|
|
|
8180
8204
|
export {
|
|
8181
|
-
OCR_DET_MODEL,
|
|
8182
|
-
OCR_REC_MODEL,
|
|
8183
|
-
OCR_REC_DICT,
|
|
8184
|
-
getOcrModelsDir,
|
|
8185
|
-
ensureOcrModels,
|
|
8186
|
-
ocrModelsCached,
|
|
8187
|
-
parseCharacterDict,
|
|
8188
8205
|
extractLines,
|
|
8189
8206
|
extractImageRegions,
|
|
8190
8207
|
filterHiddenText,
|
|
@@ -8235,4 +8252,4 @@ export {
|
|
|
8235
8252
|
removeSideTabs,
|
|
8236
8253
|
extractPageBlocksWithLines
|
|
8237
8254
|
};
|
|
8238
|
-
//# sourceMappingURL=chunk-
|
|
8255
|
+
//# sourceMappingURL=chunk-JYX46LZT.js.map
|