kordoc 4.24.7 → 4.24.9

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 (142) hide show
  1. package/README.md +8 -9
  2. package/dist/{-GQDQXRQN.js → -6LXREJIR.js} +11 -11
  3. package/dist/{chunk-OMJPCWKS.js → chunk-2A54AIAG.js} +2 -2
  4. package/dist/{chunk-AYGMF6H5.cjs → chunk-2WWQ6NU5.cjs} +3 -3
  5. package/dist/chunk-2WWQ6NU5.cjs.map +1 -0
  6. package/dist/{chunk-7BZBMXWD.cjs → chunk-4BPHV36H.cjs} +6 -6
  7. package/dist/chunk-4BPHV36H.cjs.map +1 -0
  8. package/dist/{chunk-C4AY47C5.js → chunk-7NEBICPS.js} +2 -2
  9. package/dist/{chunk-7ICC55XY.js → chunk-A4TUSLGL.js} +2 -2
  10. package/dist/{chunk-FIS3WY5Q.js → chunk-BEPBXIKP.js} +2 -2
  11. package/dist/{chunk-E35YPWOX.js → chunk-C6QK3PY2.js} +2 -2
  12. package/dist/{chunk-MLFPEETP.js → chunk-D5S5S6OP.js} +2 -2
  13. package/dist/{chunk-JKZY6FX5.js → chunk-DF3YCAK6.js} +2 -2
  14. package/dist/{chunk-DZRXJEOF.js → chunk-EF4MEYFE.js} +3 -3
  15. package/dist/{chunk-ZQQGV7K2.js → chunk-ESSLFMY3.js} +6 -6
  16. package/dist/{chunk-BLWDQEBY.js → chunk-GINSLCL7.js} +2 -2
  17. package/dist/chunk-GS7T56RP.cjs.map +1 -1
  18. package/dist/chunk-J55UQC5H.cjs.map +1 -1
  19. package/dist/{chunk-WVZXPEHX.js → chunk-LVEY2XHM.js} +7 -5
  20. package/dist/chunk-LVEY2XHM.js.map +1 -0
  21. package/dist/{chunk-FQVWYJNM.js → chunk-MSPBBDR5.js} +2 -2
  22. package/dist/{chunk-EIGCAAVM.js → chunk-NDC4AGLX.js} +61 -16
  23. package/dist/chunk-NDC4AGLX.js.map +1 -0
  24. package/dist/{chunk-YQB3LPKQ.cjs → chunk-NSCYUL4P.cjs} +2 -2
  25. package/dist/chunk-NSCYUL4P.cjs.map +1 -0
  26. package/dist/{chunk-OPNMXBUR.js → chunk-O34AXZ4G.js} +2 -2
  27. package/dist/{chunk-EJPPVB2Y.js → chunk-R3DNJRDD.js} +2 -2
  28. package/dist/{chunk-GMKFXPEI.js → chunk-SB4VN4TR.js} +7 -5
  29. package/dist/chunk-SB4VN4TR.js.map +1 -0
  30. package/dist/{chunk-O4RQCDN2.js → chunk-SQCECEOH.js} +62 -17
  31. package/dist/chunk-SQCECEOH.js.map +1 -0
  32. package/dist/chunk-TK3FDAEE.cjs.map +1 -1
  33. package/dist/{chunk-MNG25FK4.cjs → chunk-TMHPNZ37.cjs} +222 -177
  34. package/dist/chunk-TMHPNZ37.cjs.map +1 -0
  35. package/dist/{chunk-EIUXBJZP.js → chunk-TO4T2M7R.js} +3 -3
  36. package/dist/{chunk-CG2Z6NB3.js → chunk-TY4PED6S.js} +2 -2
  37. package/dist/{chunk-VHAOAQZZ.cjs → chunk-UVMVLE3M.cjs} +3 -3
  38. package/dist/chunk-UVMVLE3M.cjs.map +1 -0
  39. package/dist/{chunk-DEDUWANG.js → chunk-VAR3NCSE.js} +151 -20
  40. package/dist/chunk-VAR3NCSE.js.map +1 -0
  41. package/dist/{chunk-N2JZGYFK.js → chunk-W6R7HH2Q.js} +4 -4
  42. package/dist/chunk-W6R7HH2Q.js.map +1 -0
  43. package/dist/{chunk-UDUEOBS5.js → chunk-WPA45TPL.js} +2 -2
  44. package/dist/{chunk-BNIXSB6D.js → chunk-YAKEEIR2.js} +2 -2
  45. package/dist/{chunk-V4PS653P.cjs → chunk-ZFM7UP72.cjs} +59 -57
  46. package/dist/chunk-ZFM7UP72.cjs.map +1 -0
  47. package/dist/chunks-L66VMJHU.js +10 -0
  48. package/dist/cli.js +30 -30
  49. package/dist/{formula-C55TRBHH.cjs → formula-3SARACGW.cjs} +9 -9
  50. package/dist/formula-3SARACGW.cjs.map +1 -0
  51. package/dist/{formula-6XLWGUCB.js → formula-MDHYCNKI.js} +4 -4
  52. package/dist/{formula-DCC5EOSX.js → formula-S7CTLTGZ.js} +3 -3
  53. package/dist/{image-ocr-EV7GVD3W.cjs → image-ocr-2T4NBJ73.cjs} +17 -17
  54. package/dist/image-ocr-2T4NBJ73.cjs.map +1 -0
  55. package/dist/{image-ocr-K3ZXDUNU.js → image-ocr-V6AQ4IAY.js} +6 -6
  56. package/dist/{image-ocr-L736MGYD.js → image-ocr-VDMEI7TD.js} +9 -9
  57. package/dist/index.cjs +826 -695
  58. package/dist/index.cjs.map +1 -1
  59. package/dist/index.js +146 -15
  60. package/dist/index.js.map +1 -1
  61. package/dist/mcp.js +23 -23
  62. package/dist/{model-bundle-OOOJFMGR.js → model-bundle-HCTCHMA2.js} +5 -5
  63. package/dist/{models-ELFZII4R.js → models-NJROM7JD.js} +5 -5
  64. package/dist/page-range-QHHFTL7X.cjs.map +1 -1
  65. package/dist/{parse-worker-v2-WS35WZY5.js → parse-worker-v2-ALTGW2J3.js} +12 -12
  66. package/dist/{parser-K7Y44QHS.js → parser-6J5HFER5.js} +13 -12
  67. package/dist/parser-6J5HFER5.js.map +1 -0
  68. package/dist/{parser-X6P3JBT2.cjs → parser-L3G6ON4U.cjs} +160 -159
  69. package/dist/parser-L3G6ON4U.cjs.map +1 -0
  70. package/dist/{parser-CNRI55MG.js → parser-MY4WE64G.js} +10 -9
  71. package/dist/parser-MY4WE64G.js.map +1 -0
  72. package/dist/{pdf-ocr-QQPZLIHM.js → pdf-ocr-3VVSR4LN.js} +9 -9
  73. package/dist/{pdf-ocr-MVNHXGPS.js → pdf-ocr-HUSU2XMV.js} +6 -6
  74. package/dist/pdf-ocr-RF2SCGXD.cjs +31 -0
  75. package/dist/pdf-ocr-RF2SCGXD.cjs.map +1 -0
  76. package/dist/{profile-io-GSRLMU4D.js → profile-io-SQI3X7MD.js} +3 -3
  77. package/dist/{rasterize-3H5QKDH2.js → rasterize-BHW5UZY2.js} +3 -3
  78. package/dist/{redact-doc-TLBF7J7W.js → redact-doc-KJ6M63BP.js} +11 -11
  79. package/dist/{render-FTCOQ6WO.js → render-Z6N2GGKL.js} +7 -7
  80. package/dist/seal-PM4624BB.js +10 -0
  81. package/dist/{setup-WVZ47AKV.js → setup-MUBZ674O.js} +3 -3
  82. package/dist/visual-AV46N5ZN.js +21 -0
  83. package/dist/{watch-CA32Z7XB.js → watch-D4AUDKVN.js} +12 -12
  84. package/package.json +4 -4
  85. package/dist/chunk-7BZBMXWD.cjs.map +0 -1
  86. package/dist/chunk-AYGMF6H5.cjs.map +0 -1
  87. package/dist/chunk-DEDUWANG.js.map +0 -1
  88. package/dist/chunk-EIGCAAVM.js.map +0 -1
  89. package/dist/chunk-GMKFXPEI.js.map +0 -1
  90. package/dist/chunk-MNG25FK4.cjs.map +0 -1
  91. package/dist/chunk-N2JZGYFK.js.map +0 -1
  92. package/dist/chunk-O4RQCDN2.js.map +0 -1
  93. package/dist/chunk-V4PS653P.cjs.map +0 -1
  94. package/dist/chunk-VHAOAQZZ.cjs.map +0 -1
  95. package/dist/chunk-WVZXPEHX.js.map +0 -1
  96. package/dist/chunk-YQB3LPKQ.cjs.map +0 -1
  97. package/dist/chunks-XURCANPP.js +0 -10
  98. package/dist/formula-C55TRBHH.cjs.map +0 -1
  99. package/dist/image-ocr-EV7GVD3W.cjs.map +0 -1
  100. package/dist/parser-CNRI55MG.js.map +0 -1
  101. package/dist/parser-K7Y44QHS.js.map +0 -1
  102. package/dist/parser-X6P3JBT2.cjs.map +0 -1
  103. package/dist/pdf-ocr-S6GSKOPT.cjs +0 -31
  104. package/dist/pdf-ocr-S6GSKOPT.cjs.map +0 -1
  105. package/dist/seal-74R7KDRY.js +0 -10
  106. package/dist/visual-TEW6Y3NH.js +0 -21
  107. /package/dist/{-GQDQXRQN.js.map → -6LXREJIR.js.map} +0 -0
  108. /package/dist/{chunk-OMJPCWKS.js.map → chunk-2A54AIAG.js.map} +0 -0
  109. /package/dist/{chunk-C4AY47C5.js.map → chunk-7NEBICPS.js.map} +0 -0
  110. /package/dist/{chunk-7ICC55XY.js.map → chunk-A4TUSLGL.js.map} +0 -0
  111. /package/dist/{chunk-FIS3WY5Q.js.map → chunk-BEPBXIKP.js.map} +0 -0
  112. /package/dist/{chunk-E35YPWOX.js.map → chunk-C6QK3PY2.js.map} +0 -0
  113. /package/dist/{chunk-MLFPEETP.js.map → chunk-D5S5S6OP.js.map} +0 -0
  114. /package/dist/{chunk-JKZY6FX5.js.map → chunk-DF3YCAK6.js.map} +0 -0
  115. /package/dist/{chunk-DZRXJEOF.js.map → chunk-EF4MEYFE.js.map} +0 -0
  116. /package/dist/{chunk-ZQQGV7K2.js.map → chunk-ESSLFMY3.js.map} +0 -0
  117. /package/dist/{chunk-BLWDQEBY.js.map → chunk-GINSLCL7.js.map} +0 -0
  118. /package/dist/{chunk-FQVWYJNM.js.map → chunk-MSPBBDR5.js.map} +0 -0
  119. /package/dist/{chunk-OPNMXBUR.js.map → chunk-O34AXZ4G.js.map} +0 -0
  120. /package/dist/{chunk-EJPPVB2Y.js.map → chunk-R3DNJRDD.js.map} +0 -0
  121. /package/dist/{chunk-EIUXBJZP.js.map → chunk-TO4T2M7R.js.map} +0 -0
  122. /package/dist/{chunk-CG2Z6NB3.js.map → chunk-TY4PED6S.js.map} +0 -0
  123. /package/dist/{chunk-UDUEOBS5.js.map → chunk-WPA45TPL.js.map} +0 -0
  124. /package/dist/{chunk-BNIXSB6D.js.map → chunk-YAKEEIR2.js.map} +0 -0
  125. /package/dist/{chunks-XURCANPP.js.map → chunks-L66VMJHU.js.map} +0 -0
  126. /package/dist/{formula-6XLWGUCB.js.map → formula-MDHYCNKI.js.map} +0 -0
  127. /package/dist/{formula-DCC5EOSX.js.map → formula-S7CTLTGZ.js.map} +0 -0
  128. /package/dist/{image-ocr-K3ZXDUNU.js.map → image-ocr-V6AQ4IAY.js.map} +0 -0
  129. /package/dist/{image-ocr-L736MGYD.js.map → image-ocr-VDMEI7TD.js.map} +0 -0
  130. /package/dist/{model-bundle-OOOJFMGR.js.map → model-bundle-HCTCHMA2.js.map} +0 -0
  131. /package/dist/{models-ELFZII4R.js.map → models-NJROM7JD.js.map} +0 -0
  132. /package/dist/{parse-worker-v2-WS35WZY5.js.map → parse-worker-v2-ALTGW2J3.js.map} +0 -0
  133. /package/dist/{pdf-ocr-MVNHXGPS.js.map → pdf-ocr-3VVSR4LN.js.map} +0 -0
  134. /package/dist/{pdf-ocr-QQPZLIHM.js.map → pdf-ocr-HUSU2XMV.js.map} +0 -0
  135. /package/dist/{profile-io-GSRLMU4D.js.map → profile-io-SQI3X7MD.js.map} +0 -0
  136. /package/dist/{rasterize-3H5QKDH2.js.map → rasterize-BHW5UZY2.js.map} +0 -0
  137. /package/dist/{redact-doc-TLBF7J7W.js.map → redact-doc-KJ6M63BP.js.map} +0 -0
  138. /package/dist/{render-FTCOQ6WO.js.map → render-Z6N2GGKL.js.map} +0 -0
  139. /package/dist/{seal-74R7KDRY.js.map → seal-PM4624BB.js.map} +0 -0
  140. /package/dist/{setup-WVZ47AKV.js.map → setup-MUBZ674O.js.map} +0 -0
  141. /package/dist/{visual-TEW6Y3NH.js.map → visual-AV46N5ZN.js.map} +0 -0
  142. /package/dist/{watch-CA32Z7XB.js.map → watch-D4AUDKVN.js.map} +0 -0
@@ -5,15 +5,15 @@ import {
5
5
  HEADING_RATIO_H3,
6
6
  tidyScriptTags,
7
7
  toTex
8
- } from "./chunk-BNIXSB6D.js";
8
+ } from "./chunk-YAKEEIR2.js";
9
9
  import {
10
10
  ensureModelsIn,
11
11
  getModelsDir
12
- } from "./chunk-EJPPVB2Y.js";
12
+ } from "./chunk-R3DNJRDD.js";
13
13
  import {
14
14
  safeMax,
15
15
  safeMin
16
- } from "./chunk-JKZY6FX5.js";
16
+ } from "./chunk-DF3YCAK6.js";
17
17
 
18
18
  // src/ocr/models.ts
19
19
  import { join } from "path";
@@ -616,6 +616,7 @@ function gapGlyphs(gray, w, h, ink) {
616
616
  if (ch >= bh * 0.9 && cw <= bh * 0.15) continue;
617
617
  const others = comps.filter((o) => o !== c && inBand(o) && !(o.x0 >= c.x0 && o.x1 <= c.x1 && o.y0 >= c.y0 && o.y1 <= c.y1));
618
618
  const apart = !others.some((o) => o.x0 < c.x1 + 1 && o.x1 > c.x0 - 1);
619
+ const abut = !apart && ch >= bh * 0.3 && ch <= bh * 0.65 && !others.some((o) => o.x0 < c.x1 && o.x1 > c.x0);
619
620
  const nearlyApart = !others.some((o) => Math.min(o.x1, c.x1) - Math.max(o.x0, c.x0) > 2);
620
621
  const spans = [], runs = [];
621
622
  let n = 0;
@@ -640,18 +641,11 @@ function gapGlyphs(gray, w, h, ink) {
640
641
  const speck = Math.max(3, bh * 0.08);
641
642
  const dot = ch <= bh * 0.25 && cw <= bh * 0.25 && ch >= speck && cw >= speck && cw >= ch * 0.6 && cw <= ch * 1.6;
642
643
  const small = ch <= bh * 0.25 && cw <= bh * 0.25 && ch >= 2 && cw >= 2 && cw >= ch * 0.6 && cw <= ch * 1.6 && fill >= 0.6 && cy >= 0.3 && cy <= 0.7;
643
- if (!apart && !(nearlyApart && ch >= bh * 0.6)) {
644
+ if (!apart && !abut && !(nearlyApart && ch >= bh * 0.6)) {
644
645
  if (small) out.push({ x0: c.x0, x1: c.x1, mark: "\xB7" });
645
646
  continue;
646
647
  }
647
- if (!apart) {
648
- } else if (dot && fill >= 0.6 && cy >= 0.3 && cy <= 0.7) mark = "\xB7";
649
- else if (small) mark = "\xB7";
650
- else if (dot && fill >= 0.6 && cy >= 0.75 && cw >= ch * 0.8) mark = ".";
651
- else if (ch <= bh * 0.4 && ch >= speck && cw >= ch * 0.75 && cw <= ch * 1.3 && fill < 0.6 && runs[ch >> 1] === 2 && cy >= 0.6) mark = "\u3002";
652
- else if (ch <= bh * 0.15 && cw >= ch * 2 && cw <= bh * 0.8 && fill >= 0.7 && cy >= 0.35 && cy <= 0.75) mark = "-";
653
- else if (ch >= bh * 0.5 && cw >= ch * 0.9 && cw <= ch * 1.4 && fill >= 0.4 && runs.every((r) => r <= 1) && top <= 0.4 && bottom >= 0.8) mark = "\u25B2";
654
- else if (ch >= bh * 0.3 && ch <= bh * 0.65 && fill < 0.5) {
648
+ const bracket = () => {
655
649
  const stem = (from, to) => {
656
650
  let sx = 0, k = 0;
657
651
  for (let y = from; y < to; y++) for (let x = c.x0; x < c.x1; x++) if (label[y * w + x] === c.id) {
@@ -660,9 +654,21 @@ function gapGlyphs(gray, w, h, ink) {
660
654
  }
661
655
  return k ? sx / k / cw : 0.5;
662
656
  };
663
- if (c.y0 <= bandT + bh * 0.15 && top >= 0.7 && bottom <= 0.5 && stem(c.y0 + band, c.y1) <= 0.35) mark = "\u300C";
664
- else if (c.y1 >= bandB - bh * 0.15 && bottom >= 0.7 && top <= 0.5 && stem(c.y0, c.y1 - band) >= 0.65) mark = "\u300D";
665
- } else if (ch >= charH * 0.6 && cw >= ch * 0.8 && cw <= ch * 1.25 && fill < 0.5 && top >= 0.8 && bottom >= 0.8 && runs[ch >> 1] === 2) mark = ch <= charH * 0.92 ? "\u25A1" : "\u25A1\0";
657
+ if (c.y0 <= bandT + bh * 0.15 && top >= 0.7 && bottom <= 0.5 && stem(c.y0 + band, c.y1) <= 0.35) return "\u300C";
658
+ if (c.y1 >= bandB - bh * 0.15 && bottom >= 0.7 && top <= 0.5 && stem(c.y0, c.y1 - band) >= 0.65) return "\u300D";
659
+ return null;
660
+ };
661
+ if (!apart && !abut) {
662
+ } else if (abut) {
663
+ if (fill < 0.5) mark = bracket();
664
+ } else if (dot && fill >= 0.6 && cy >= 0.3 && cy <= 0.7) mark = "\xB7";
665
+ else if (small) mark = "\xB7";
666
+ else if (dot && fill >= 0.6 && cy >= 0.75 && cw >= ch * 0.8) mark = ".";
667
+ else if (ch <= bh * 0.4 && ch >= speck && cw >= ch * 0.75 && cw <= ch * 1.3 && fill < 0.6 && runs[ch >> 1] === 2 && cy >= 0.6) mark = "\u3002";
668
+ else if (ch <= bh * 0.15 && cw >= ch * 2 && cw <= bh * 0.8 && fill >= 0.7 && cy >= 0.35 && cy <= 0.75) mark = "-";
669
+ else if (ch >= bh * 0.5 && cw >= ch * 0.9 && cw <= ch * 1.4 && fill >= 0.4 && runs.every((r) => r <= 1) && top <= 0.4 && bottom >= 0.8) mark = "\u25B2";
670
+ else if (ch >= bh * 0.3 && ch <= bh * 0.65 && fill < 0.5) mark = bracket();
671
+ else if (ch >= charH * 0.6 && cw >= ch * 0.8 && cw <= ch * 1.25 && fill < 0.5 && top >= 0.8 && bottom >= 0.8 && runs[ch >> 1] === 2) mark = ch <= charH * 0.92 ? "\u25A1" : "\u25A1\0";
666
672
  if (!mark && ch >= bh * 0.6 && cw >= ch * 0.25 && cw <= ch * 0.7 && fill <= 0.4 && runs.every((r) => r <= 1)) {
667
673
  const mx = (y) => {
668
674
  let sx = 0, k = 0;
@@ -732,6 +738,34 @@ function dashRatio(gray, w, h, ink, cx) {
732
738
  const dash = comps.filter((c) => c.y1 - c.y0 <= bh * 0.25 && c.x1 - c.x0 >= (c.y1 - c.y0) * 2 && Math.abs((c.x0 + c.x1) / 2 - cx) <= bh * 0.6).sort((a, b) => Math.abs((a.x0 + a.x1) / 2 - cx) - Math.abs((b.x0 + b.x1) / 2 - cx))[0];
733
739
  return dash ? (dash.x1 - dash.x0) / bh : null;
734
740
  }
741
+ function leadingRing(gray, w, h, ink, firstX) {
742
+ if (firstX < h * 0.8) return false;
743
+ const isInk = (v) => ink.darkInk ? v <= ink.threshold : v > ink.threshold;
744
+ let left = -1;
745
+ for (let x = 0; x < w && left < 0; x++) for (let y = 0; y < h; y++) if (isInk(gray[y * w + x])) {
746
+ left = x;
747
+ break;
748
+ }
749
+ if (left < 0 || ringBullet(gray, w, h, ink, left + h * 0.25) !== "\u25CB") return false;
750
+ const colInk = (x) => {
751
+ for (let y = 0; y < h; y++) if (isInk(gray[y * w + x])) return true;
752
+ return false;
753
+ };
754
+ let right = left;
755
+ while (right + 1 < w && colInk(right + 1)) right++;
756
+ let top = h, bottom = -1;
757
+ for (let y = 0; y < h; y++) for (let x = left; x <= right; x++) if (isInk(gray[y * w + x])) {
758
+ top = Math.min(top, y);
759
+ bottom = Math.max(bottom, y);
760
+ break;
761
+ }
762
+ const cw = right - left + 1, ch = bottom - top + 1, kx = Math.max(1, Math.round(cw * 0.1)), ky = Math.max(1, Math.round(ch * 0.1));
763
+ const corner = (x0, y0) => {
764
+ for (let y = y0; y < y0 + ky; y++) for (let x = x0; x < x0 + kx; x++) if (isInk(gray[y * w + x])) return true;
765
+ return false;
766
+ };
767
+ return !corner(left, top) && !corner(right + 1 - kx, top) && !corner(left, bottom + 1 - ky) && !corner(right + 1 - kx, bottom + 1 - ky);
768
+ }
735
769
  function discAt(gray, w, h, ink, cx) {
736
770
  const { comps, label } = components(gray, w, h, ink);
737
771
  let charH = 0;
@@ -2007,7 +2041,17 @@ function dropHeadBandClipGrids(clipGrids, lineGrids) {
2007
2041
  if (clipGrids.length === 0 || lineGrids.length === 0) return clipGrids;
2008
2042
  const near2 = (a, b) => Math.abs(a - b) <= SHADE_CLIP_TOL;
2009
2043
  const overlaps = (a, b) => Math.min(a.x2, b.x2) > Math.max(a.x1, b.x1) && Math.min(a.y2, b.y2) > Math.max(a.y1, b.y1);
2010
- return clipGrids.filter((c) => c.clipParent || !c.cells?.length || !lineGrids.some((l) => l.rowYs.length > c.rowYs.length && l.colXs.length === c.colXs.length && c.colXs.every((x, k) => near2(x, l.colXs[k])) && c.rowYs.every((y, k) => near2(y, l.rowYs[k])) && !clipGrids.some((o) => o !== c && overlaps(o.bbox, l.bbox))));
2044
+ const kept = clipGrids.filter((c) => c.clipParent || !c.cells?.length || !lineGrids.some((l) => l.rowYs.length > c.rowYs.length && l.colXs.length === c.colXs.length && c.colXs.every((x, k) => near2(x, l.colXs[k])) && c.rowYs.every((y, k) => near2(y, l.rowYs[k])) && !clipGrids.some((o) => o !== c && overlaps(o.bbox, l.bbox))));
2045
+ return kept.filter((c) => !lineGrids.some((l) => headBandTiles(kept, l, near2, overlaps).includes(c)));
2046
+ }
2047
+ function headBandTiles(clips, l, near2, overlaps) {
2048
+ const onRow = (y) => l.rowYs.some((r) => near2(r, y));
2049
+ const band = clips.filter((c) => !c.clipParent && c.cells?.length && near2(c.bbox.y2, l.bbox.y2) && c.bbox.y1 > l.bbox.y1 + SHADE_CLIP_TOL && c.bbox.x1 >= l.bbox.x1 - SHADE_CLIP_TOL && c.bbox.x2 <= l.bbox.x2 + SHADE_CLIP_TOL && c.rowYs.every(onRow)).sort((a, b) => a.bbox.x1 - b.bbox.x1);
2050
+ if (band.length < 2 || !near2(band[0].bbox.x1, l.bbox.x1) || !near2(band[band.length - 1].bbox.x2, l.bbox.x2)) return [];
2051
+ if (band.some((c, k) => k > 0 && c.bbox.x1 > band[k - 1].bbox.x2 + SHADE_CLIP_TOL)) return [];
2052
+ const bottom = Math.min(...band.map((c) => c.bbox.y1));
2053
+ const body = { ...l.bbox, y2: bottom };
2054
+ return clips.some((o) => !band.includes(o) && overlaps(o.bbox, body)) ? [] : band;
2011
2055
  }
2012
2056
  function enforceMinWidth(colXs, minWidth, narrowRuns = true) {
2013
2057
  if (colXs.length <= 2) return colXs;
@@ -10129,6 +10173,7 @@ export {
10129
10173
  gapGlyphs,
10130
10174
  ringBullet,
10131
10175
  dashRatio,
10176
+ leadingRing,
10132
10177
  discAt,
10133
10178
  serifOne,
10134
10179
  starRun,
@@ -10191,4 +10236,4 @@ export {
10191
10236
  UNRULED_REGION_TABLES,
10192
10237
  mergeOcrImageRegions
10193
10238
  };
10194
- //# sourceMappingURL=chunk-O4RQCDN2.js.map
10239
+ //# sourceMappingURL=chunk-SQCECEOH.js.map