kordoc 4.21.9 → 4.21.11

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 (129) hide show
  1. package/README.md +16 -12
  2. package/dist/{-QXIJTZUP.js → -VONBNRVD.js} +11 -11
  3. package/dist/{chunk-6EKJ6J47.js → chunk-2LFYBDX2.js} +2 -2
  4. package/dist/{chunk-TAPXIXAD.js → chunk-4U5ISDBU.js} +3 -3
  5. package/dist/{chunk-QACOMAEX.js → chunk-4UMTGSRH.js} +3 -3
  6. package/dist/{chunk-LORBG6MG.cjs → chunk-5JRL2VQ6.cjs} +56 -30
  7. package/dist/chunk-5JRL2VQ6.cjs.map +1 -0
  8. package/dist/{chunk-FWCKZXJY.js → chunk-5MNDRMFV.js} +2 -2
  9. package/dist/{chunk-MGSUORGY.js → chunk-6FUFKXB2.js} +50 -25
  10. package/dist/chunk-6FUFKXB2.js.map +1 -0
  11. package/dist/{chunk-EFTJ35T6.js → chunk-B6UZYIAR.js} +2 -2
  12. package/dist/{chunk-EG3UE3BC.cjs → chunk-BVWRQNWQ.cjs} +3 -3
  13. package/dist/{chunk-EG3UE3BC.cjs.map → chunk-BVWRQNWQ.cjs.map} +1 -1
  14. package/dist/{chunk-B6QMZ5H6.js → chunk-FUXOABQZ.js} +31 -5
  15. package/dist/chunk-FUXOABQZ.js.map +1 -0
  16. package/dist/{chunk-FRM6WYNC.js → chunk-GLZ4XPKX.js} +2 -2
  17. package/dist/{chunk-BJP4IWGE.js → chunk-J772QFJ5.js} +2 -2
  18. package/dist/{chunk-LMICG6MM.js → chunk-JDEWFE46.js} +2 -2
  19. package/dist/{chunk-V4XBYDKE.cjs → chunk-KGA6PQUQ.cjs} +13 -13
  20. package/dist/{chunk-V4XBYDKE.cjs.map → chunk-KGA6PQUQ.cjs.map} +1 -1
  21. package/dist/{chunk-O53OIPMY.js → chunk-L652BNX6.js} +2 -2
  22. package/dist/{chunk-O53OIPMY.js.map → chunk-L652BNX6.js.map} +1 -1
  23. package/dist/{chunk-HE5XFKH2.js → chunk-LZGPS3FH.js} +2 -2
  24. package/dist/{chunk-HE5XFKH2.js.map → chunk-LZGPS3FH.js.map} +1 -1
  25. package/dist/{chunk-5NO6L655.cjs → chunk-MZPJOJO2.cjs} +3 -3
  26. package/dist/{chunk-5NO6L655.cjs.map → chunk-MZPJOJO2.cjs.map} +1 -1
  27. package/dist/{chunk-62HRSQL3.js → chunk-N2GL4NZH.js} +2 -2
  28. package/dist/{chunk-ZK5L7VPR.js → chunk-NI3RMQTS.js} +6 -6
  29. package/dist/{chunk-B6WEXUMV.js → chunk-NMXMBYRP.js} +2 -2
  30. package/dist/{chunk-HDPQ7QBF.js → chunk-OEF4V654.js} +3 -3
  31. package/dist/{chunk-FVCIEW26.cjs → chunk-OZG342GJ.cjs} +84 -59
  32. package/dist/chunk-OZG342GJ.cjs.map +1 -0
  33. package/dist/{chunk-MWH3WQ2C.js → chunk-PUAKSOZD.js} +51 -26
  34. package/dist/chunk-PUAKSOZD.js.map +1 -0
  35. package/dist/{chunk-2PSKHMH2.js → chunk-Q2F3ZGGS.js} +4 -4
  36. package/dist/{chunk-EBYYQO6A.js → chunk-S7J7VI4R.js} +10 -10
  37. package/dist/{chunk-EXCGDQPB.js → chunk-SWV27B56.js} +28 -4
  38. package/dist/chunk-SWV27B56.js.map +1 -0
  39. package/dist/{chunk-TS4GX4WP.js → chunk-WAYSJYK4.js} +2 -2
  40. package/dist/{chunk-R6BSCIZR.cjs → chunk-WSSCBJSU.cjs} +2 -2
  41. package/dist/{chunk-R6BSCIZR.cjs.map → chunk-WSSCBJSU.cjs.map} +1 -1
  42. package/dist/{chunk-UKCOUVER.js → chunk-YRWSOFJW.js} +2 -2
  43. package/dist/{chunk-UK4UHB23.js → chunk-ZTNZ4UZM.js} +5 -3
  44. package/dist/{chunk-UK4UHB23.js.map → chunk-ZTNZ4UZM.js.map} +1 -1
  45. package/dist/chunks-CKWDRCT2.js +10 -0
  46. package/dist/cli.js +30 -30
  47. package/dist/{formula-3REO53LY.cjs → formula-AYKY6JN4.cjs} +9 -9
  48. package/dist/{formula-3REO53LY.cjs.map → formula-AYKY6JN4.cjs.map} +1 -1
  49. package/dist/{formula-KSDCEDLB.js → formula-E7IFGURT.js} +4 -4
  50. package/dist/{formula-HJ54W6OC.js → formula-ROYY4OPC.js} +3 -3
  51. package/dist/{image-ocr-Q7QV4L4N.cjs → image-ocr-CVVWQHOV.cjs} +15 -15
  52. package/dist/{image-ocr-Q7QV4L4N.cjs.map → image-ocr-CVVWQHOV.cjs.map} +1 -1
  53. package/dist/{image-ocr-YYOYHZDE.js → image-ocr-SIO5GLQK.js} +9 -9
  54. package/dist/{image-ocr-IFL6L5TW.js → image-ocr-YZHJHHPA.js} +6 -6
  55. package/dist/index.cjs +276 -276
  56. package/dist/index.js +5 -5
  57. package/dist/mcp.js +22 -22
  58. package/dist/{model-bundle-BY4E4RB4.js → model-bundle-5JREYZVZ.js} +5 -5
  59. package/dist/{models-KN7YXMZR.js → models-MW56BJEC.js} +5 -5
  60. package/dist/{parse-worker-v2-YEGH3LDV.js → parse-worker-v2-MGIF63HD.js} +12 -12
  61. package/dist/{parser-EBH4V7UW.js → parser-53TGQ4FC.js} +34 -18
  62. package/dist/parser-53TGQ4FC.js.map +1 -0
  63. package/dist/{parser-H2UDOCP6.cjs → parser-VUJQJDZI.cjs} +221 -205
  64. package/dist/parser-VUJQJDZI.cjs.map +1 -0
  65. package/dist/{parser-K67MDRVQ.js → parser-W46CWSPY.js} +31 -15
  66. package/dist/parser-W46CWSPY.js.map +1 -0
  67. package/dist/pdf-ocr-BQG3O6HQ.cjs +19 -0
  68. package/dist/{pdf-ocr-URHROKTL.cjs.map → pdf-ocr-BQG3O6HQ.cjs.map} +1 -1
  69. package/dist/pdf-ocr-EWS374FU.js +22 -0
  70. package/dist/pdf-ocr-GKRBJXT4.js +18 -0
  71. package/dist/{profile-io-5AUIY4ZK.js → profile-io-AYQO4RLD.js} +3 -3
  72. package/dist/{rasterize-FCFSKOJN.js → rasterize-U23B3ZK4.js} +3 -3
  73. package/dist/{redact-doc-XNHWZBLI.js → redact-doc-FV5NHVRH.js} +11 -11
  74. package/dist/{render-GKYMLICR.js → render-TLLHZCMS.js} +7 -7
  75. package/dist/seal-BLZIPLWT.js +10 -0
  76. package/dist/{setup-YTGXU6UG.js → setup-HWI3THDP.js} +3 -3
  77. package/dist/visual-PW74S3AP.js +20 -0
  78. package/dist/{watch-PGLPSQZB.js → watch-7UBV5B5E.js} +12 -12
  79. package/package.json +1 -1
  80. package/dist/chunk-B6QMZ5H6.js.map +0 -1
  81. package/dist/chunk-EXCGDQPB.js.map +0 -1
  82. package/dist/chunk-FVCIEW26.cjs.map +0 -1
  83. package/dist/chunk-LORBG6MG.cjs.map +0 -1
  84. package/dist/chunk-MGSUORGY.js.map +0 -1
  85. package/dist/chunk-MWH3WQ2C.js.map +0 -1
  86. package/dist/chunks-OR6UM6IP.js +0 -10
  87. package/dist/parser-EBH4V7UW.js.map +0 -1
  88. package/dist/parser-H2UDOCP6.cjs.map +0 -1
  89. package/dist/parser-K67MDRVQ.js.map +0 -1
  90. package/dist/pdf-ocr-ECPSNDNK.js +0 -22
  91. package/dist/pdf-ocr-URHROKTL.cjs +0 -19
  92. package/dist/pdf-ocr-XFHI32BK.js +0 -18
  93. package/dist/seal-VQS7DK5S.js +0 -10
  94. package/dist/visual-7PEKXK3M.js +0 -20
  95. /package/dist/{-QXIJTZUP.js.map → -VONBNRVD.js.map} +0 -0
  96. /package/dist/{chunk-6EKJ6J47.js.map → chunk-2LFYBDX2.js.map} +0 -0
  97. /package/dist/{chunk-TAPXIXAD.js.map → chunk-4U5ISDBU.js.map} +0 -0
  98. /package/dist/{chunk-QACOMAEX.js.map → chunk-4UMTGSRH.js.map} +0 -0
  99. /package/dist/{chunk-FWCKZXJY.js.map → chunk-5MNDRMFV.js.map} +0 -0
  100. /package/dist/{chunk-EFTJ35T6.js.map → chunk-B6UZYIAR.js.map} +0 -0
  101. /package/dist/{chunk-FRM6WYNC.js.map → chunk-GLZ4XPKX.js.map} +0 -0
  102. /package/dist/{chunk-BJP4IWGE.js.map → chunk-J772QFJ5.js.map} +0 -0
  103. /package/dist/{chunk-LMICG6MM.js.map → chunk-JDEWFE46.js.map} +0 -0
  104. /package/dist/{chunk-62HRSQL3.js.map → chunk-N2GL4NZH.js.map} +0 -0
  105. /package/dist/{chunk-ZK5L7VPR.js.map → chunk-NI3RMQTS.js.map} +0 -0
  106. /package/dist/{chunk-B6WEXUMV.js.map → chunk-NMXMBYRP.js.map} +0 -0
  107. /package/dist/{chunk-HDPQ7QBF.js.map → chunk-OEF4V654.js.map} +0 -0
  108. /package/dist/{chunk-2PSKHMH2.js.map → chunk-Q2F3ZGGS.js.map} +0 -0
  109. /package/dist/{chunk-EBYYQO6A.js.map → chunk-S7J7VI4R.js.map} +0 -0
  110. /package/dist/{chunk-TS4GX4WP.js.map → chunk-WAYSJYK4.js.map} +0 -0
  111. /package/dist/{chunk-UKCOUVER.js.map → chunk-YRWSOFJW.js.map} +0 -0
  112. /package/dist/{chunks-OR6UM6IP.js.map → chunks-CKWDRCT2.js.map} +0 -0
  113. /package/dist/{formula-KSDCEDLB.js.map → formula-E7IFGURT.js.map} +0 -0
  114. /package/dist/{formula-HJ54W6OC.js.map → formula-ROYY4OPC.js.map} +0 -0
  115. /package/dist/{image-ocr-YYOYHZDE.js.map → image-ocr-SIO5GLQK.js.map} +0 -0
  116. /package/dist/{image-ocr-IFL6L5TW.js.map → image-ocr-YZHJHHPA.js.map} +0 -0
  117. /package/dist/{model-bundle-BY4E4RB4.js.map → model-bundle-5JREYZVZ.js.map} +0 -0
  118. /package/dist/{models-KN7YXMZR.js.map → models-MW56BJEC.js.map} +0 -0
  119. /package/dist/{parse-worker-v2-YEGH3LDV.js.map → parse-worker-v2-MGIF63HD.js.map} +0 -0
  120. /package/dist/{pdf-ocr-ECPSNDNK.js.map → pdf-ocr-EWS374FU.js.map} +0 -0
  121. /package/dist/{pdf-ocr-XFHI32BK.js.map → pdf-ocr-GKRBJXT4.js.map} +0 -0
  122. /package/dist/{profile-io-5AUIY4ZK.js.map → profile-io-AYQO4RLD.js.map} +0 -0
  123. /package/dist/{rasterize-FCFSKOJN.js.map → rasterize-U23B3ZK4.js.map} +0 -0
  124. /package/dist/{redact-doc-XNHWZBLI.js.map → redact-doc-FV5NHVRH.js.map} +0 -0
  125. /package/dist/{render-GKYMLICR.js.map → render-TLLHZCMS.js.map} +0 -0
  126. /package/dist/{seal-VQS7DK5S.js.map → seal-BLZIPLWT.js.map} +0 -0
  127. /package/dist/{setup-YTGXU6UG.js.map → setup-HWI3THDP.js.map} +0 -0
  128. /package/dist/{visual-7PEKXK3M.js.map → visual-PW74S3AP.js.map} +0 -0
  129. /package/dist/{watch-PGLPSQZB.js.map → watch-7UBV5B5E.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,286문서의 보이는 표 **9,865개 전부 구조 일치**. [4.18.8 검증](docs/release-4.18.8.json)
15
+ - 🇰🇷 **한국 공문서 표 구조 100%** — 원본 HWPX 2,424문서의 보이는 표 **10,342개 전부 구조 일치**. [4.21.11 검증](docs/benchmarks.md)
16
16
 
17
17
  [![Kordoc 활용하기 — 영상 보기](./docs/video-demo.jpg)](https://youtu.be/Q13GmgDcIw0)
18
18
 
@@ -98,28 +98,32 @@ await writeFile("보고서.hwpx", Buffer.from(hwpx))
98
98
 
99
99
  ## 검증 결과
100
100
 
101
- **4.18.8 · 2026-10-02 배포 검증**. 고정 코퍼스와 참조 기준으로 측정한 결과입니다.
101
+ **4.21.11 · 2026-10-10 배포 검증**. 고정 코퍼스와 참조 기준으로 측정한 결과입니다.
102
102
 
103
103
  | 대상 | 규모 | 결과 |
104
104
  | --- | --- | --- |
105
- | HWPX | 2,286문서 · 9,865표 | 표 구조 일치 **9,865/9,865 · 100%** |
106
- | HWP 5.x ↔ HWPX | 1,120쌍 · 4,258표 | 짝 문서의 표 구조 일치 **100%** |
107
- | PDF 글 | 744쌍 | 글자 재현율 **99.83%** · 읽기 순서 **99.15%** |
108
- | PDF 표 | 708쌍 · 2,331표 | 표 탐지 **99.83%** · 구조 일치 **97.94%** |
105
+ | HWPX | 2,424문서 · 10,342표 | 표 구조 일치 **10,342/10,342 · 100%** |
106
+ | HWP 5.x ↔ HWPX | 1,130쌍 · 4,315표 | 짝 문서의 표 구조 일치 **100%** |
107
+ | PDF 글 | 744쌍 | 글자 재현율 **99.83%** · 정확도 **99.64%** · 읽기 순서 **99.16%** · 어절 F1 **98.86%** |
108
+ | PDF 표 | 708쌍 · 2,331표 | 표 탐지 **99.83%** · 구조 일치 **97.98%** · 칸 F1 **0.991** |
109
+ | PDF 전체 | 1,911문서 중 1,729건 채점 | 글 커버리지 **99.80%** |
110
+ | OCR | 53문서 · 102쪽 | CER **0.0412** · 글자 재현율 **99.03%** |
109
111
 
110
- 표 구조 점수와 셀 내용·화면 재현은 별도 지표입니다. 채점 범위·제외 기준·OCR 결과는 [벤치마크 상세](docs/benchmarks.md), 실제 게시 검증은 [4.18.8 기록](docs/release-4.18.8.json)에 있습니다.
112
+ 표 구조 점수와 셀 내용·화면 재현은 별도 지표입니다. 채점 범위·제외 기준·전 벤치 문서별 비교는 [벤치마크 상세](docs/benchmarks.md)에 있습니다.
111
113
 
112
- 외부 PDF 벤치 **opendataloader-bench 200문서**는 4.21.5 별도 측정에서 기본값 종합 **0.963**, OCR 끔 **0.939**입니다. [옵션별 결과와 재현 방법](docs/benchmarks.md#pdf--markdown--opendataloader-bench)
114
+ 외부 PDF 벤치 **opendataloader-bench 200문서**는 4.21.11 배포 측정에서 기본값 종합 **0.963**, OCR 끔 **0.939**입니다. [옵션별 결과와 재현 방법](docs/benchmarks.md#pdf--markdown--opendataloader-bench)
113
115
 
114
116
  ## 최근 업데이트
115
117
 
116
- 최신 배포: **[4.21.9](https://github.com/chrisryugj/kordoc/releases/tag/v4.21.9)** · 2026-10-10
118
+ 최신 배포: **[4.21.11](https://github.com/chrisryugj/kordoc/releases/tag/v4.21.11)** · 2026-10-10
117
119
 
118
120
  | 버전 | 주요 변경 |
119
121
  | --- | --- |
120
- | 4.21.9 | PDF 줄 꺾임 이음 — 낱말 가운데 꺾임·겹조사·계사·접미사·명사+하다, 본문 위 첨자 행 흡수 (문서별 하락 0) |
121
- | 4.21.8 | PDF 표 묶음 — 돌려 찍은 가로 표 세우기·데이터 표의 차트 오판·좁은 숫자 열·칸 걸친 한 조각·칸 안 쌓인 금액 (문서별 하락 0) |
122
- | 4.21.7 | PDF 토막 괘선 칸·글 조각 클립·연락처 표 — 예산서 상세 칸(OCR CER 0.0512 → 0.0445), ezPDF·MS Print 글 조각 클립이 만든 가짜 표, 연락처 6열 (문서별 하락 0) |
122
+ | 4.21.11 | PDF 목차·라벨탭 상자·칸 첨자 — 목차 리더 걷기, 제목 칩 상자를 글로, 목차 칸 제목·쪽 번호 짝짓기, 서식 칸 붙은 첨자 흡수 (PDF 글 정확도 99.58 → 99.64%·OCR CER 0.0421 → 0.0412, 문서별 하락 0 — 열화 OCR 은 표본 쪽 셋 이동) |
123
+ | 4.21.10 | PDF 흐름도 표·괄호 풀이 — 선 격자 표를 품은 클러스터 후보 거름, 짧은 괄호 풀이 앞 줄 꺾임 이음 (PDF 어절 F1 98.84 → 98.85%·OCR CER 0.0443 → 0.0421, 문서별 하락 0) |
124
+ | 4.21.9 | PDF 줄 꺾임 이음 — 낱말 가운데 꺾임·겹조사·계사·접미사·명사+하다, 본문 위 첨자 행 흡수 (PDF 어절 F1 98.81 → 98.84%·글 커버리지 99.79 → 99.80%, 문서별 하락 0) |
125
+ | 4.21.8 | PDF 표 묶음 — 돌려 찍은 가로 표 세우기·데이터 표의 차트 오판·좁은 숫자 열·칸 걸친 한 조각·칸 안 쌓인 금액 (OCR CER 0.0445 → 0.0443·열화 OCR scan 0.0821 → 0.0805, 문서별 하락 0) |
126
+ | 4.21.7 | PDF 토막 괘선 칸·글 조각 클립·연락처 표 — 예산서 상세 칸(OCR CER 0.0512 → 0.0445), ezPDF·MS Print 글 조각 클립이 만든 가짜 표, 연락처 6열 (열화 OCR scan 0.0954 → 0.0821·글 커버리지 99.78 → 99.79%, 문서별 하락 0) |
123
127
  | 4.21.6 | 연락처 표 부서별 병합·여러 사람 칸 분할(PDF 표 구조 일치 97.94→97.98%), XLSX·XLS 200열 밖 칸 유실 수리, HWP3 포함 그림 추출, 수식 OCR LaTeX 명령 쪼개기·영역 상한 수리, PPTX 서식 트랙·코퍼스 보강(HWP3 75·서식 58·rhwp 230) |
124
128
  | 4.21.5 | PDF 품질 묶음 — OCR 두 단 가짜 표(#141 부작용)·그림 OCR 라벨 묶음·한 자리 눈금, 주소 링크·벡터 차트 값 축·단 끝줄·각주 순서 (ODL 기본 0.958 → 0.963, 문서별 하락 0) · 개조식·보고서 요약 상자가 md→hwpx→md→hwpx 왕복에서 유지 |
125
129
  | 4.21.4 | MCP `fill_form` 값 파일 입력 `fields_file`(값이 대화에 안 남고 응답은 글자 수만), 전 벤치 묶음 러너·문서별 비교기 `bench/suite.mjs` |
@@ -54,17 +54,17 @@ import {
54
54
  unknownFontWarnings,
55
55
  usesGaejosikMunche,
56
56
  validateHwpx
57
- } from "./chunk-EBYYQO6A.js";
57
+ } from "./chunk-S7J7VI4R.js";
58
58
  import {
59
59
  blocksToPages
60
- } from "./chunk-6EKJ6J47.js";
60
+ } from "./chunk-2LFYBDX2.js";
61
61
  import {
62
62
  applySplices,
63
63
  buildParagraphSplices,
64
64
  buildRangeSplices,
65
65
  placeSealHwpx,
66
66
  scanSectionXml
67
- } from "./chunk-HDPQ7QBF.js";
67
+ } from "./chunk-OEF4V654.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-FRM6WYNC.js";
75
+ } from "./chunk-GLZ4XPKX.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-ZK5L7VPR.js";
100
+ } from "./chunk-NI3RMQTS.js";
101
101
  import "./chunk-7FCNOKOR.js";
102
- import "./chunk-EXCGDQPB.js";
102
+ import "./chunk-SWV27B56.js";
103
103
  import "./chunk-VQFA55IC.js";
104
- import "./chunk-B6WEXUMV.js";
104
+ import "./chunk-NMXMBYRP.js";
105
105
  import {
106
106
  blocksToMarkdown,
107
107
  flattenLayoutTables,
108
108
  hasStructuredCellContent
109
- } from "./chunk-UK4UHB23.js";
110
- import "./chunk-LMICG6MM.js";
109
+ } from "./chunk-ZTNZ4UZM.js";
110
+ import "./chunk-JDEWFE46.js";
111
111
  import {
112
112
  VERSION
113
- } from "./chunk-O53OIPMY.js";
113
+ } from "./chunk-L652BNX6.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=-QXIJTZUP.js.map
207
+ //# sourceMappingURL=-VONBNRVD.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  blocksToMarkdown
4
- } from "./chunk-UK4UHB23.js";
4
+ } from "./chunk-ZTNZ4UZM.js";
5
5
 
6
6
  // src/page-markdown.ts
7
7
  function blocksToPages(blocks, render = blocksToMarkdown) {
@@ -29,4 +29,4 @@ function blocksToPages(blocks, render = blocksToMarkdown) {
29
29
  export {
30
30
  blocksToPages
31
31
  };
32
- //# sourceMappingURL=chunk-6EKJ6J47.js.map
32
+ //# sourceMappingURL=chunk-2LFYBDX2.js.map
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  parse
4
- } from "./chunk-EBYYQO6A.js";
4
+ } from "./chunk-S7J7VI4R.js";
5
5
  import {
6
6
  classifyError,
7
7
  sanitizeError,
8
8
  toArrayBuffer
9
- } from "./chunk-O53OIPMY.js";
9
+ } from "./chunk-L652BNX6.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-TAPXIXAD.js.map
29
+ //# sourceMappingURL=chunk-4U5ISDBU.js.map
@@ -10,10 +10,10 @@ import {
10
10
  extractPageBlocksWithLines,
11
11
  getOcrModelsDir,
12
12
  parseCharacterDict
13
- } from "./chunk-MWH3WQ2C.js";
13
+ } from "./chunk-PUAKSOZD.js";
14
14
  import {
15
15
  OPTIONAL_DEP_INSTALL_HINT
16
- } from "./chunk-HE5XFKH2.js";
16
+ } from "./chunk-LZGPS3FH.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-QACOMAEX.js.map
2133
+ //# sourceMappingURL=chunk-4UMTGSRH.js.map
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
3
 
4
- var _chunkR6BSCIZRcjs = require('./chunk-R6BSCIZR.cjs');
4
+ var _chunkWSSCBJSUcjs = require('./chunk-WSSCBJSU.cjs');
5
5
 
6
6
  // src/script-tags.ts
7
7
  var LITERAL_TAG = /<(?=\/?(?:u|sup|sub)>)/g;
@@ -804,8 +804,10 @@ function blocksToMarkdown(blocks, options) {
804
804
  continue;
805
805
  }
806
806
  if (block.type === "list" && block.text) {
807
- const listText = sanitizeText(block.text);
807
+ let listText = sanitizeText(block.text);
808
808
  if (!listText) continue;
809
+ const num = _optionalChain([/^(\d{1,3}[.)])\s/, 'access', _28 => _28.exec, 'call', _29 => _29(block.text.trim()), 'optionalAccess', _30 => _30[1]]);
810
+ if (num && listText.startsWith(num) && !/^\s/.test(listText.slice(num.length))) listText = `${num} ${listText.slice(num.length)}`;
809
811
  const alreadyNumbered = block.listType === "ordered" && /^\d+\.\s/.test(listText);
810
812
  const alreadyBulleted = block.listType !== "ordered" && /^-\s/.test(listText);
811
813
  const prefix = alreadyNumbered || alreadyBulleted ? "" : block.listType === "ordered" ? "1. " : "- ";
@@ -824,7 +826,7 @@ function blocksToMarkdown(blocks, options) {
824
826
  if (lines.length && lines[lines.length - 1] !== "") lines.push("");
825
827
  if (/^\[별표\s*\d+/.test(text)) {
826
828
  const nextBlock = blocks[i + 1];
827
- if (_optionalChain([nextBlock, 'optionalAccess', _28 => _28.type]) === "paragraph" && nextBlock.text && /관련\)?$/.test(nextBlock.text)) {
829
+ if (_optionalChain([nextBlock, 'optionalAccess', _31 => _31.type]) === "paragraph" && nextBlock.text && /관련\)?$/.test(nextBlock.text)) {
828
830
  lines.push("", `## ${escapeGfm(text)} ${escapeGfm(nextBlock.text)}`, "");
829
831
  i++;
830
832
  } else {
@@ -837,10 +839,10 @@ function blocksToMarkdown(blocks, options) {
837
839
  continue;
838
840
  }
839
841
  const listIndent = block.listDepth ? " ".repeat(block.listDepth) : "";
840
- if (_optionalChain([block, 'access', _29 => _29.spans, 'optionalAccess', _30 => _30.length])) {
842
+ if (_optionalChain([block, 'access', _32 => _32.spans, 'optionalAccess', _33 => _33.length])) {
841
843
  let rendered = spansToMarkdown(block.spans);
842
844
  if (block.href) {
843
- const href = _chunkR6BSCIZRcjs.sanitizeHref.call(void 0, block.href);
845
+ const href = _chunkWSSCBJSUcjs.sanitizeHref.call(void 0, block.href);
844
846
  if (href) rendered = `[${rendered}](${href})`;
845
847
  }
846
848
  if (block.footnoteText) rendered += ` (\uC8FC: ${block.footnoteText})`;
@@ -848,7 +850,7 @@ function blocksToMarkdown(blocks, options) {
848
850
  continue;
849
851
  }
850
852
  if (block.href) {
851
- const href = _chunkR6BSCIZRcjs.sanitizeHref.call(void 0, block.href);
853
+ const href = _chunkWSSCBJSUcjs.sanitizeHref.call(void 0, block.href);
852
854
  if (href) text = `[${text}](${href})`;
853
855
  }
854
856
  if (block.footnoteText) {
@@ -870,7 +872,7 @@ function blocksToMarkdown(blocks, options) {
870
872
  return lines.join("\n").trim();
871
873
  }
872
874
  function captionToMarkdown(table, gfm = false) {
873
- if (_optionalChain([table, 'access', _31 => _31.captionBlocks, 'optionalAccess', _32 => _32.length])) {
875
+ if (_optionalChain([table, 'access', _34 => _34.captionBlocks, 'optionalAccess', _35 => _35.length])) {
874
876
  return table.captionBlocks.flatMap((b) => {
875
877
  if (b.type === "table" && b.table) {
876
878
  const md = tableToMarkdown(b.table, gfm);
@@ -885,7 +887,7 @@ function captionToMarkdown(table, gfm = false) {
885
887
  return caption ? [`**${escapeGfm(caption)}**`, ""] : [];
886
888
  }
887
889
  function captionToHtml(table) {
888
- if (_optionalChain([table, 'access', _33 => _33.captionBlocks, 'optionalAccess', _34 => _34.length])) return cellInnerHtml({ text: "", colSpan: 1, rowSpan: 1, blocks: table.captionBlocks });
890
+ if (_optionalChain([table, 'access', _36 => _36.captionBlocks, 'optionalAccess', _37 => _37.length])) return cellInnerHtml({ text: "", colSpan: 1, rowSpan: 1, blocks: table.captionBlocks });
889
891
  const cap = table.caption ? sanitizeText(table.caption) : "";
890
892
  return cap ? escapeHtmlCellText(cap).replace(/\n/g, "<br>") : "";
891
893
  }
@@ -900,7 +902,7 @@ function hasMergedCells(table) {
900
902
  function hasNestedTables(table) {
901
903
  for (const row of table.cells) {
902
904
  for (const cell of row) {
903
- if (_optionalChain([cell, 'access', _35 => _35.blocks, 'optionalAccess', _36 => _36.some, 'call', _37 => _37((b) => b.type === "table" && b.table)])) return true;
905
+ if (_optionalChain([cell, 'access', _38 => _38.blocks, 'optionalAccess', _39 => _39.some, 'call', _40 => _40((b) => b.type === "table" && b.table)])) return true;
904
906
  }
905
907
  }
906
908
  return false;
@@ -908,7 +910,7 @@ function hasNestedTables(table) {
908
910
  function hasStructuredCellContent(table) {
909
911
  for (const row of table.cells) {
910
912
  for (const cell of row) {
911
- if (_optionalChain([cell, 'access', _38 => _38.blocks, 'optionalAccess', _39 => _39.some, 'call', _40 => _40((b) => b.type === "table" && b.table || b.type === "separator")])) return true;
913
+ if (_optionalChain([cell, 'access', _41 => _41.blocks, 'optionalAccess', _42 => _42.some, 'call', _43 => _43((b) => b.type === "table" && b.table || b.type === "separator")])) return true;
912
914
  }
913
915
  }
914
916
  return false;
@@ -917,19 +919,19 @@ function noteSuffix(b) {
917
919
  return b.footnoteText ? ` (\uC8FC: ${b.footnoteText})` : "";
918
920
  }
919
921
  function visibleText(b) {
920
- return _optionalChain([b, 'access', _41 => _41.spans, 'optionalAccess', _42 => _42.some, 'call', _43 => _43((s) => s.placeholder)]) ? b.spans.filter((s) => !s.placeholder).map((s) => s.text).join("") : _nullishCoalesce(b.text, () => ( ""));
922
+ return _optionalChain([b, 'access', _44 => _44.spans, 'optionalAccess', _45 => _45.some, 'call', _46 => _46((s) => s.placeholder)]) ? b.spans.filter((s) => !s.placeholder).map((s) => s.text).join("") : _nullishCoalesce(b.text, () => ( ""));
921
923
  }
922
924
  function escapeHtmlCellText(text) {
923
- return _chunkR6BSCIZRcjs.escapeHtml.call(void 0, text).replace(/(\\)?&lt;(\/?)(u|sup|sub)&gt;/g, (_, esc, sl, tag) => esc ? `&lt;${sl}${tag}&gt;` : `<${sl}${tag}>`);
925
+ return _chunkWSSCBJSUcjs.escapeHtml.call(void 0, text).replace(/(\\)?&lt;(\/?)(u|sup|sub)&gt;/g, (_, esc, sl, tag) => esc ? `&lt;${sl}${tag}&gt;` : `<${sl}${tag}>`);
924
926
  }
925
927
  function cellInnerHtml(cell) {
926
- if (_optionalChain([cell, 'access', _44 => _44.blocks, 'optionalAccess', _45 => _45.length])) {
928
+ if (_optionalChain([cell, 'access', _47 => _47.blocks, 'optionalAccess', _48 => _48.length])) {
927
929
  return cell.blocks.map((b) => {
928
930
  if (b.type === "table" && b.table) {
929
931
  const cap = captionToHtml(b.table);
930
932
  return (cap ? cap + "<br>" : "") + tableToHtml(b.table);
931
933
  }
932
- if (b.type === "image" && b.text) return `<img src="${_chunkR6BSCIZRcjs.escapeHtml.call(void 0, b.text, true)}" alt="image">`;
934
+ if (b.type === "image" && b.text) return `<img src="${_chunkWSSCBJSUcjs.escapeHtml.call(void 0, b.text, true)}" alt="image">`;
933
935
  const t = (sanitizeText(visibleText(b)) + noteSuffix(b)).trim();
934
936
  return t ? escapeHtmlCellText(t).replace(/\n/g, "<br>") : "";
935
937
  }).filter(Boolean).join("<br>");
@@ -945,7 +947,7 @@ function tableToHtml(table) {
945
947
  const rowHtml = [];
946
948
  for (let c = 0; c < numCols; c++) {
947
949
  if (skip.has(`${r},${c}`)) continue;
948
- const cell = _optionalChain([cells, 'access', _46 => _46[r], 'optionalAccess', _47 => _47[c]]);
950
+ const cell = _optionalChain([cells, 'access', _49 => _49[r], 'optionalAccess', _50 => _50[c]]);
949
951
  if (!cell) continue;
950
952
  for (let dr = 0; dr < cell.rowSpan; dr++) {
951
953
  for (let dc = 0; dc < cell.colSpan; dc++) {
@@ -966,10 +968,10 @@ function tableToHtml(table) {
966
968
  return lines.join("\n");
967
969
  }
968
970
  function hasInlineCellBlocks(cell) {
969
- return !!_optionalChain([cell, 'access', _48 => _48.blocks, 'optionalAccess', _49 => _49.some, 'call', _50 => _50((b) => _optionalChain([b, 'access', _51 => _51.spans, 'optionalAccess', _52 => _52.length]) || b.footnoteText || b.type === "image" && b.text)]);
971
+ return !!_optionalChain([cell, 'access', _51 => _51.blocks, 'optionalAccess', _52 => _52.some, 'call', _53 => _53((b) => _optionalChain([b, 'access', _54 => _54.spans, 'optionalAccess', _55 => _55.length]) || b.footnoteText || b.type === "image" && b.text)]);
970
972
  }
971
973
  function cellBlockToMarkdown(b) {
972
- return b.type === "image" && b.text ? `![image](${b.text})` : _optionalChain([b, 'access', _53 => _53.spans, 'optionalAccess', _54 => _54.length]) ? spansToMarkdown(b.spans) + escapeGfm(noteSuffix(b)) : escapeGfm(sanitizeText(_nullishCoalesce(b.text, () => ( ""))) + noteSuffix(b));
974
+ return b.type === "image" && b.text ? `![image](${b.text})` : _optionalChain([b, 'access', _56 => _56.spans, 'optionalAccess', _57 => _57.length]) ? spansToMarkdown(b.spans) + escapeGfm(noteSuffix(b)) : escapeGfm(sanitizeText(_nullishCoalesce(b.text, () => ( ""))) + noteSuffix(b));
973
975
  }
974
976
  function cellToMarkdown(cell, separator) {
975
977
  if (!hasInlineCellBlocks(cell)) return escapeGfm(sanitizeText(cell.text));
@@ -988,7 +990,7 @@ function tableToGfm(table) {
988
990
  return out.join("\n");
989
991
  }
990
992
  function gfmCellText(cell, parentId, nested, markerless) {
991
- if (!_optionalChain([cell, 'access', _55 => _55.blocks, 'optionalAccess', _56 => _56.some, 'call', _57 => _57((b) => b.type === "table" && b.table || b.type === "separator")])) return cellToMarkdown(cell, "<br>");
993
+ if (!_optionalChain([cell, 'access', _58 => _58.blocks, 'optionalAccess', _59 => _59.some, 'call', _60 => _60((b) => b.type === "table" && b.table || b.type === "separator")])) return cellToMarkdown(cell, "<br>");
992
994
  let out = "";
993
995
  let text = "";
994
996
  let hasMarker = false;
@@ -1051,7 +1053,7 @@ function pipeTable(table, cellText, rowSpanFill) {
1051
1053
  for (let r = 0; r < numRows; r++) {
1052
1054
  for (let c = 0; c < numCols; c++) {
1053
1055
  if (skip.has(`${r},${c}`)) continue;
1054
- const cell = _optionalChain([cells, 'access', _58 => _58[r], 'optionalAccess', _59 => _59[c]]);
1056
+ const cell = _optionalChain([cells, 'access', _61 => _61[r], 'optionalAccess', _62 => _62[c]]);
1055
1057
  if (!cell) continue;
1056
1058
  const cellMd = (text2) => text2.replace(/\r\n|\r|\n/g, "<br>").replace(/(?<!\\)\|/g, "\\|");
1057
1059
  const text = cellText(cell);
@@ -1089,13 +1091,14 @@ function pipeTable(table, cellText, rowSpanFill) {
1089
1091
  var CELL_EDGES = /* @__PURE__ */ new WeakMap();
1090
1092
  var CELL_PAGES = /* @__PURE__ */ new WeakMap();
1091
1093
  var CONTENT_CELLS = /* @__PURE__ */ new WeakSet();
1094
+ var CELL_BASELINES = /* @__PURE__ */ new WeakMap();
1092
1095
  var FRACTION_MAX_CHARS = 40;
1093
1096
  function anchorsOf(t) {
1094
1097
  const out = [];
1095
1098
  const covered = /* @__PURE__ */ new Set();
1096
1099
  for (let r = 0; r < t.rows; r++) for (let c = 0; c < t.cols; c++) {
1097
1100
  if (covered.has(r * t.cols + c)) continue;
1098
- const cell = _optionalChain([t, 'access', _60 => _60.cells, 'access', _61 => _61[r], 'optionalAccess', _62 => _62[c]]);
1101
+ const cell = _optionalChain([t, 'access', _63 => _63.cells, 'access', _64 => _64[r], 'optionalAccess', _65 => _65[c]]);
1099
1102
  if (!cell) continue;
1100
1103
  const rs = Math.max(1, Math.min(cell.rowSpan, t.rows - r)), cs = Math.max(1, Math.min(cell.colSpan, t.cols - c));
1101
1104
  for (let dr = 0; dr < rs; dr++) for (let dc = 0; dc < cs; dc++) covered.add((r + dr) * t.cols + c + dc);
@@ -1124,7 +1127,7 @@ function toTex(s) {
1124
1127
  }
1125
1128
  function fractionPart(cell) {
1126
1129
  const t = cell.text.trim();
1127
- return !!t && !t.includes("\n") && !_optionalChain([cell, 'access', _63 => _63.blocks, 'optionalAccess', _64 => _64.length]) && t.replace(/<\/?(?:u|sup|sub)>/g, "").length <= FRACTION_MAX_CHARS && !/(?<!\\)\$/.test(t);
1130
+ return !!t && !t.includes("\n") && !_optionalChain([cell, 'access', _66 => _66.blocks, 'optionalAccess', _67 => _67.length]) && t.replace(/<\/?(?:u|sup|sub)>/g, "").length <= FRACTION_MAX_CHARS && !/(?<!\\)\$/.test(t);
1128
1131
  }
1129
1132
  function mergeFractions(t, anchors, H, V) {
1130
1133
  const at = /* @__PURE__ */ new Map();
@@ -1159,7 +1162,7 @@ function bandTable(t, anchors, V, H, r0, r1, keepEmptyCols) {
1159
1162
  let list = anchors.filter((a) => a.r >= r0 && a.r <= r1).map((a) => ({ ...a, rs: Math.min(a.rs, r1 - a.r + 1) }));
1160
1163
  const blank = (a) => {
1161
1164
  if (CONTENT_CELLS.has(a.cell)) return false;
1162
- if (!_optionalChain([a, 'access', _65 => _65.cell, 'access', _66 => _66.blocks, 'optionalAccess', _67 => _67.length])) return !a.cell.text.trim();
1165
+ if (!_optionalChain([a, 'access', _68 => _68.cell, 'access', _69 => _69.blocks, 'optionalAccess', _70 => _70.length])) return !a.cell.text.trim();
1163
1166
  return a.cell.blocks.every((b) => (b.type === "paragraph" || b.type === "heading") && !visibleText(b).trim() && !b.footnoteText);
1164
1167
  };
1165
1168
  let lo = Infinity, hi = -Infinity;
@@ -1210,25 +1213,47 @@ function bandTable(t, anchors, V, H, r0, r1, keepEmptyCols) {
1210
1213
  }
1211
1214
  return { rows, cols, cells, hasHeader: t.hasHeader, ...emptyBand ? { renderAsTable: true } : {} };
1212
1215
  }
1216
+ function tocLines(cells) {
1217
+ if (cells.length !== 2) return null;
1218
+ const [titles, pages] = cells.map((c) => c.text.trim().split("\n").map((l) => l.trim()));
1219
+ const [ty, py] = cells.map((c) => CELL_BASELINES.get(c));
1220
+ if (!ty || !py || ty.length !== titles.length || py.length !== pages.length || titles.length < 2 || !pages.every((l) => /^\d{1,4}$/.test(l)) || titles.some((l) => !l || /^\d{1,4}$/.test(l))) return null;
1221
+ const lines = [...titles], taken = /* @__PURE__ */ new Set();
1222
+ for (let j = 0; j < pages.length; j++) {
1223
+ const i = ty.findIndex((y) => Math.abs(y - py[j]) <= 3);
1224
+ if (i < 0 || taken.has(i)) return null;
1225
+ taken.add(i);
1226
+ lines[i] += " " + pages[j];
1227
+ }
1228
+ return lines;
1229
+ }
1213
1230
  function textRow(row, out, pageNumber, keepEmptyCols) {
1214
1231
  const parts = [];
1232
+ const cells = [];
1215
1233
  const flush = () => {
1216
1234
  if (!parts.length) return;
1217
- if (parts.length === 1) {
1235
+ const toc = tocLines(cells);
1236
+ if (toc) {
1237
+ for (const line of toc) out.push({ type: "paragraph", text: line, pageNumber });
1238
+ } else if (parts.length === 1) {
1218
1239
  for (const line of parts[0].split("\n")) if (line.trim()) out.push({ type: "paragraph", text: line.trim(), pageNumber });
1219
1240
  } else {
1220
1241
  const text = parts.map((p) => p.replace(/\s*\n\s*/g, " ").trim()).filter(Boolean).join(" ");
1221
1242
  if (text) out.push({ type: "paragraph", text, pageNumber });
1222
1243
  }
1223
1244
  parts.length = 0;
1245
+ cells.length = 0;
1224
1246
  };
1225
1247
  for (const a of row) {
1226
- if (_optionalChain([a, 'access', _68 => _68.cell, 'access', _69 => _69.blocks, 'optionalAccess', _70 => _70.length])) {
1248
+ if (_optionalChain([a, 'access', _71 => _71.cell, 'access', _72 => _72.blocks, 'optionalAccess', _73 => _73.length])) {
1227
1249
  flush();
1228
1250
  out.push(...unframeLayoutTables(a.cell.blocks, keepEmptyCols));
1229
1251
  continue;
1230
1252
  }
1231
- if (a.cell.text.trim()) parts.push(a.cell.text.trim());
1253
+ if (a.cell.text.trim()) {
1254
+ parts.push(a.cell.text.trim());
1255
+ cells.push(a.cell);
1256
+ }
1232
1257
  }
1233
1258
  flush();
1234
1259
  }
@@ -1257,7 +1282,7 @@ function unframeTable(t, pageNumber, keepEmptyCols) {
1257
1282
  }, pageNumber }];
1258
1283
  }
1259
1284
  const out = [];
1260
- if (_optionalChain([t, 'access', _71 => _71.captionBlocks, 'optionalAccess', _72 => _72.length])) out.push(...t.captionBlocks);
1285
+ if (_optionalChain([t, 'access', _74 => _74.captionBlocks, 'optionalAccess', _75 => _75.length])) out.push(...t.captionBlocks);
1261
1286
  else if (t.caption) out.push({ type: "paragraph", text: t.caption, pageNumber });
1262
1287
  const rowPage = (r) => {
1263
1288
  const marks = anchors.filter((a) => a.r === r).map((a) => CELL_PAGES.get(a.cell)).filter((p) => p !== void 0);
@@ -1284,12 +1309,12 @@ function unframeLayoutTables(blocks, keepEmptyCols = false) {
1284
1309
  out.push(b);
1285
1310
  continue;
1286
1311
  }
1287
- if (_optionalChain([b, 'access', _73 => _73.table, 'access', _74 => _74.captionBlocks, 'optionalAccess', _75 => _75.length])) b.table.captionBlocks = unframeLayoutTables(b.table.captionBlocks, keepEmptyCols);
1312
+ if (_optionalChain([b, 'access', _76 => _76.table, 'access', _77 => _77.captionBlocks, 'optionalAccess', _78 => _78.length])) b.table.captionBlocks = unframeLayoutTables(b.table.captionBlocks, keepEmptyCols);
1288
1313
  const flat = unframeTable(b.table, b.pageNumber, keepEmptyCols);
1289
1314
  const kept = _nullishCoalesce(flat, () => ( [b]));
1290
1315
  for (const k of kept) {
1291
1316
  if (k.type === "table" && k.table) {
1292
- for (const row of k.table.cells) for (const cell of row) if (_optionalChain([cell, 'access', _76 => _76.blocks, 'optionalAccess', _77 => _77.length])) cell.blocks = unframeLayoutTables(cell.blocks, keepEmptyCols);
1317
+ for (const row of k.table.cells) for (const cell of row) if (_optionalChain([cell, 'access', _79 => _79.blocks, 'optionalAccess', _80 => _80.length])) cell.blocks = unframeLayoutTables(cell.blocks, keepEmptyCols);
1293
1318
  }
1294
1319
  out.push(k);
1295
1320
  }
@@ -1332,5 +1357,6 @@ var HEADING_RATIO_H3 = 1.15;
1332
1357
 
1333
1358
 
1334
1359
 
1335
- exports.escapeLiteralTags = escapeLiteralTags; exports.wrapScript = wrapScript; exports.tidyScriptTags = tidyScriptTags; exports.plainScripts = plainScripts; exports.stripScriptTags = stripScriptTags; exports.WINGDINGS = WINGDINGS; exports.mapPuaText = mapPuaText; exports.MAX_COLS = MAX_COLS; exports.MAX_ROWS = MAX_ROWS; exports.MAX_TABLE_CELLS = MAX_TABLE_CELLS; exports.buildTable = buildTable; exports.convertTableToText = convertTableToText; exports.escapeGfm = escapeGfm; exports.escapeLiteralDollar = escapeLiteralDollar; exports.markNonLayoutTable = markNonLayoutTable; exports.flattenLayoutTables = flattenLayoutTables; exports.dedupeRunningHeaders = dedupeRunningHeaders; exports.assignTableIds = assignTableIds; exports.blocksToMarkdown = blocksToMarkdown; exports.hasStructuredCellContent = hasStructuredCellContent; exports.noteSuffix = noteSuffix; exports.escapeHtmlCellText = escapeHtmlCellText; exports.CELL_EDGES = CELL_EDGES; exports.CELL_PAGES = CELL_PAGES; exports.CONTENT_CELLS = CONTENT_CELLS; exports.unframeLayoutTables = unframeLayoutTables; exports.HEADING_RATIO_H1 = HEADING_RATIO_H1; exports.HEADING_RATIO_H2 = HEADING_RATIO_H2; exports.HEADING_RATIO_H3 = HEADING_RATIO_H3;
1336
- //# sourceMappingURL=chunk-LORBG6MG.cjs.map
1360
+
1361
+ exports.escapeLiteralTags = escapeLiteralTags; exports.wrapScript = wrapScript; exports.tidyScriptTags = tidyScriptTags; exports.plainScripts = plainScripts; exports.stripScriptTags = stripScriptTags; exports.WINGDINGS = WINGDINGS; exports.mapPuaText = mapPuaText; exports.MAX_COLS = MAX_COLS; exports.MAX_ROWS = MAX_ROWS; exports.MAX_TABLE_CELLS = MAX_TABLE_CELLS; exports.buildTable = buildTable; exports.convertTableToText = convertTableToText; exports.escapeGfm = escapeGfm; exports.escapeLiteralDollar = escapeLiteralDollar; exports.markNonLayoutTable = markNonLayoutTable; exports.flattenLayoutTables = flattenLayoutTables; exports.dedupeRunningHeaders = dedupeRunningHeaders; exports.assignTableIds = assignTableIds; exports.blocksToMarkdown = blocksToMarkdown; exports.hasStructuredCellContent = hasStructuredCellContent; exports.noteSuffix = noteSuffix; exports.escapeHtmlCellText = escapeHtmlCellText; exports.CELL_EDGES = CELL_EDGES; exports.CELL_PAGES = CELL_PAGES; exports.CONTENT_CELLS = CONTENT_CELLS; exports.CELL_BASELINES = CELL_BASELINES; exports.unframeLayoutTables = unframeLayoutTables; exports.HEADING_RATIO_H1 = HEADING_RATIO_H1; exports.HEADING_RATIO_H2 = HEADING_RATIO_H2; exports.HEADING_RATIO_H3 = HEADING_RATIO_H3;
1362
+ //# sourceMappingURL=chunk-5JRL2VQ6.cjs.map