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.
Files changed (119) hide show
  1. package/dist/{-DDAVBMHD.js → -DE2KWCGY.js} +11 -11
  2. package/dist/{chunk-4IBY5LTJ.js → chunk-3KLL62JC.js} +2 -2
  3. package/dist/{chunk-IAXGGQGD.js → chunk-3QJPAKDQ.js} +2 -2
  4. package/dist/{chunk-274ZPMHK.js → chunk-4DVAKBXW.js} +2 -2
  5. package/dist/{chunk-OIUSF2VA.cjs → chunk-4JMV3G4Y.cjs} +12 -12
  6. package/dist/{chunk-OIUSF2VA.cjs.map → chunk-4JMV3G4Y.cjs.map} +1 -1
  7. package/dist/{chunk-3WLZOJIE.cjs → chunk-5TUGAXAI.cjs} +6 -6
  8. package/dist/{chunk-3WLZOJIE.cjs.map → chunk-5TUGAXAI.cjs.map} +1 -1
  9. package/dist/{chunk-7GR2GCJF.js → chunk-6N5TBPPV.js} +2 -2
  10. package/dist/{chunk-XG4SYOZL.js → chunk-7P2JOHWA.js} +2 -2
  11. package/dist/{chunk-DUV7Y6IQ.js → chunk-BY7UEIZH.js} +3 -3
  12. package/dist/{chunk-TMJVD6FW.js → chunk-CWJJTCCH.js} +2 -2
  13. package/dist/{chunk-HRJJDNRD.js → chunk-DVLKNRAA.js} +2 -2
  14. package/dist/{chunk-AVIZ55NQ.cjs → chunk-FJI44TS5.cjs} +3 -3
  15. package/dist/{chunk-AVIZ55NQ.cjs.map → chunk-FJI44TS5.cjs.map} +1 -1
  16. package/dist/{chunk-VTVK2JMI.js → chunk-FVF57U3O.js} +2 -2
  17. package/dist/{chunk-Z2PPDQK2.js → chunk-GJJVMC2G.js} +2 -2
  18. package/dist/{chunk-RCI7LY4N.js → chunk-I5RRAR64.js} +4 -4
  19. package/dist/{chunk-ELOPDQES.js → chunk-IW2WVEZU.js} +2 -2
  20. package/dist/{chunk-E2644XCO.cjs → chunk-J5HIKXQF.cjs} +142 -45
  21. package/dist/chunk-J5HIKXQF.cjs.map +1 -0
  22. package/dist/{chunk-MXA6YW2W.js → chunk-JYX46LZT.js} +111 -94
  23. package/dist/chunk-JYX46LZT.js.map +1 -0
  24. package/dist/{chunk-T2BJPT6D.js → chunk-LW5SNBU7.js} +2 -2
  25. package/dist/{chunk-F5YVCJVF.js → chunk-NM6WGVOR.js} +2 -2
  26. package/dist/{chunk-F2GDLA45.js → chunk-OWKGNWRS.js} +10 -10
  27. package/dist/{chunk-QVCHFCT2.js → chunk-PFXSGQNN.js} +2 -2
  28. package/dist/{chunk-V5X4LLVM.js → chunk-PMPAREFJ.js} +6 -6
  29. package/dist/{chunk-LGF2IO66.js → chunk-QND3QFIX.js} +2 -2
  30. package/dist/{chunk-IBQCK4F3.js → chunk-SYWZ3SRQ.js} +3 -3
  31. package/dist/{chunk-KUUSP6OS.js → chunk-T45W6EIA.js} +191 -14
  32. package/dist/chunk-T45W6EIA.js.map +1 -0
  33. package/dist/{chunk-YCY2R4FM.js → chunk-TOHCMCDL.js} +2 -2
  34. package/dist/{chunk-3XSP7V5P.cjs → chunk-UIPMCOHH.cjs} +2 -2
  35. package/dist/{chunk-3XSP7V5P.cjs.map → chunk-UIPMCOHH.cjs.map} +1 -1
  36. package/dist/{chunk-SVNBZEL6.cjs → chunk-UUK2TZQ2.cjs} +3 -3
  37. package/dist/{chunk-SVNBZEL6.cjs.map → chunk-UUK2TZQ2.cjs.map} +1 -1
  38. package/dist/chunks-3NIK3E7X.js +10 -0
  39. package/dist/cli.js +33 -27
  40. package/dist/cli.js.map +1 -1
  41. package/dist/{formula-HQFZEXFF.js → formula-P77ISY24.js} +3 -3
  42. package/dist/{formula-YYJQBKEN.cjs → formula-QQZ62X3A.cjs} +9 -9
  43. package/dist/{formula-YYJQBKEN.cjs.map → formula-QQZ62X3A.cjs.map} +1 -1
  44. package/dist/{formula-7ZOZ5QJ6.js → formula-XQXGM25B.js} +4 -4
  45. package/dist/{image-ocr-4BGX2EJJ.js → image-ocr-7FIUVJN6.js} +6 -6
  46. package/dist/{image-ocr-RK3HJVCI.js → image-ocr-LCEJXRAW.js} +9 -9
  47. package/dist/{image-ocr-CC26Q5KG.cjs → image-ocr-XILDGKJT.cjs} +15 -15
  48. package/dist/{image-ocr-CC26Q5KG.cjs.map → image-ocr-XILDGKJT.cjs.map} +1 -1
  49. package/dist/index.cjs +277 -277
  50. package/dist/index.js +5 -5
  51. package/dist/mcp.js +22 -22
  52. package/dist/{model-bundle-VHRXG63R.js → model-bundle-SQZ3W5YY.js} +5 -5
  53. package/dist/{models-G3WA24SY.js → models-JZCTRP7M.js} +5 -5
  54. package/dist/{parser-GFDGAVLV.js → parser-IKKZQMTJ.js} +8 -8
  55. package/dist/{parser-SOWTUOMK.js → parser-JCVDTWZK.js} +11 -11
  56. package/dist/{parser-BGORCLIU.cjs → parser-QHJZTPLI.cjs} +126 -126
  57. package/dist/{parser-BGORCLIU.cjs.map → parser-QHJZTPLI.cjs.map} +1 -1
  58. package/dist/pdf-ocr-53LWVES4.js +16 -0
  59. package/dist/pdf-ocr-72EYTUTO.cjs +17 -0
  60. package/dist/{pdf-ocr-EJ2HNZN6.cjs.map → pdf-ocr-72EYTUTO.cjs.map} +1 -1
  61. package/dist/pdf-ocr-EZGDVPJR.js +20 -0
  62. package/dist/{profile-io-Q2T47RVH.js → profile-io-ZOPP3ZZF.js} +3 -3
  63. package/dist/{rasterize-OAVMUTE6.js → rasterize-SSVBOWS7.js} +3 -3
  64. package/dist/{redact-doc-ECFOVR4X.js → redact-doc-NKOEXJLS.js} +11 -11
  65. package/dist/{render-NSKWZVTD.js → render-Z3UINVKW.js} +7 -7
  66. package/dist/seal-UVB4GNMX.js +10 -0
  67. package/dist/{setup-REH2KZP2.js → setup-XFGSO4EL.js} +3 -3
  68. package/dist/visual-WKOKF77U.js +20 -0
  69. package/dist/{watch-JXDUZYBY.js → watch-OYDMGGU6.js} +12 -12
  70. package/package.json +1 -1
  71. package/dist/chunk-E2644XCO.cjs.map +0 -1
  72. package/dist/chunk-KUUSP6OS.js.map +0 -1
  73. package/dist/chunk-MXA6YW2W.js.map +0 -1
  74. package/dist/chunks-5QTTAT5T.js +0 -10
  75. package/dist/pdf-ocr-7IOOVR2I.js +0 -20
  76. package/dist/pdf-ocr-EJ2HNZN6.cjs +0 -17
  77. package/dist/pdf-ocr-RACAZU3N.js +0 -16
  78. package/dist/seal-A4MG7MPQ.js +0 -10
  79. package/dist/visual-B56WQAGW.js +0 -20
  80. /package/dist/{-DDAVBMHD.js.map → -DE2KWCGY.js.map} +0 -0
  81. /package/dist/{chunk-4IBY5LTJ.js.map → chunk-3KLL62JC.js.map} +0 -0
  82. /package/dist/{chunk-IAXGGQGD.js.map → chunk-3QJPAKDQ.js.map} +0 -0
  83. /package/dist/{chunk-274ZPMHK.js.map → chunk-4DVAKBXW.js.map} +0 -0
  84. /package/dist/{chunk-7GR2GCJF.js.map → chunk-6N5TBPPV.js.map} +0 -0
  85. /package/dist/{chunk-XG4SYOZL.js.map → chunk-7P2JOHWA.js.map} +0 -0
  86. /package/dist/{chunk-DUV7Y6IQ.js.map → chunk-BY7UEIZH.js.map} +0 -0
  87. /package/dist/{chunk-TMJVD6FW.js.map → chunk-CWJJTCCH.js.map} +0 -0
  88. /package/dist/{chunk-HRJJDNRD.js.map → chunk-DVLKNRAA.js.map} +0 -0
  89. /package/dist/{chunk-VTVK2JMI.js.map → chunk-FVF57U3O.js.map} +0 -0
  90. /package/dist/{chunk-Z2PPDQK2.js.map → chunk-GJJVMC2G.js.map} +0 -0
  91. /package/dist/{chunk-RCI7LY4N.js.map → chunk-I5RRAR64.js.map} +0 -0
  92. /package/dist/{chunk-ELOPDQES.js.map → chunk-IW2WVEZU.js.map} +0 -0
  93. /package/dist/{chunk-T2BJPT6D.js.map → chunk-LW5SNBU7.js.map} +0 -0
  94. /package/dist/{chunk-F5YVCJVF.js.map → chunk-NM6WGVOR.js.map} +0 -0
  95. /package/dist/{chunk-F2GDLA45.js.map → chunk-OWKGNWRS.js.map} +0 -0
  96. /package/dist/{chunk-QVCHFCT2.js.map → chunk-PFXSGQNN.js.map} +0 -0
  97. /package/dist/{chunk-V5X4LLVM.js.map → chunk-PMPAREFJ.js.map} +0 -0
  98. /package/dist/{chunk-LGF2IO66.js.map → chunk-QND3QFIX.js.map} +0 -0
  99. /package/dist/{chunk-IBQCK4F3.js.map → chunk-SYWZ3SRQ.js.map} +0 -0
  100. /package/dist/{chunk-YCY2R4FM.js.map → chunk-TOHCMCDL.js.map} +0 -0
  101. /package/dist/{chunks-5QTTAT5T.js.map → chunks-3NIK3E7X.js.map} +0 -0
  102. /package/dist/{formula-HQFZEXFF.js.map → formula-P77ISY24.js.map} +0 -0
  103. /package/dist/{formula-7ZOZ5QJ6.js.map → formula-XQXGM25B.js.map} +0 -0
  104. /package/dist/{image-ocr-4BGX2EJJ.js.map → image-ocr-7FIUVJN6.js.map} +0 -0
  105. /package/dist/{image-ocr-RK3HJVCI.js.map → image-ocr-LCEJXRAW.js.map} +0 -0
  106. /package/dist/{model-bundle-VHRXG63R.js.map → model-bundle-SQZ3W5YY.js.map} +0 -0
  107. /package/dist/{models-G3WA24SY.js.map → models-JZCTRP7M.js.map} +0 -0
  108. /package/dist/{parser-GFDGAVLV.js.map → parser-IKKZQMTJ.js.map} +0 -0
  109. /package/dist/{parser-SOWTUOMK.js.map → parser-JCVDTWZK.js.map} +0 -0
  110. /package/dist/{pdf-ocr-7IOOVR2I.js.map → pdf-ocr-53LWVES4.js.map} +0 -0
  111. /package/dist/{pdf-ocr-RACAZU3N.js.map → pdf-ocr-EZGDVPJR.js.map} +0 -0
  112. /package/dist/{profile-io-Q2T47RVH.js.map → profile-io-ZOPP3ZZF.js.map} +0 -0
  113. /package/dist/{rasterize-OAVMUTE6.js.map → rasterize-SSVBOWS7.js.map} +0 -0
  114. /package/dist/{redact-doc-ECFOVR4X.js.map → redact-doc-NKOEXJLS.js.map} +0 -0
  115. /package/dist/{render-NSKWZVTD.js.map → render-Z3UINVKW.js.map} +0 -0
  116. /package/dist/{seal-A4MG7MPQ.js.map → seal-UVB4GNMX.js.map} +0 -0
  117. /package/dist/{setup-REH2KZP2.js.map → setup-XFGSO4EL.js.map} +0 -0
  118. /package/dist/{visual-B56WQAGW.js.map → visual-WKOKF77U.js.map} +0 -0
  119. /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-XG4SYOZL.js";
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-7GR2GCJF.js";
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 outside = rest.every((i) => i.x >= right + fs) || rest.every((i) => i.x + i.w <= left - fs);
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
- for (const g of col) found.add(g);
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 glyphs = [...tab].sort((a, b) => b.y - a.y).map((g) => ({ type: "paragraph", text: g.text.trim(), pageNumber: pageNum, bbox: computeBBox([g], pageNum), style: dominantStyle([g]) }));
7351
- return [...glyphs, ...extractPageBlocksWithLines(items.filter((i) => !tab.has(i)), pageNum, opList, pageWidth, pageHeight, extraLines, detectTables, carry, lexicon, verifiedRightArrows)];
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 = detectListBlocks(textBlocks);
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-MXA6YW2W.js.map
8255
+ //# sourceMappingURL=chunk-JYX46LZT.js.map