kordoc 4.5.0 → 4.6.0

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 (184) hide show
  1. package/LICENSE +21 -21
  2. package/NOTICE +176 -176
  3. package/README.md +958 -951
  4. package/THIRD_PARTY/apache-2.0.LICENSE +201 -201
  5. package/THIRD_PARTY/claw-hwp.LICENSE +21 -21
  6. package/THIRD_PARTY/hml-equation-parser.LICENSE +201 -201
  7. package/THIRD_PARTY/hml-equation-parser.txt +35 -35
  8. package/THIRD_PARTY/opendataloader-pdf.txt +32 -32
  9. package/THIRD_PARTY/pix2text.txt +17 -17
  10. package/THIRD_PARTY/rhwp-forms.txt +35 -35
  11. package/dist/{-CWYIC4ES.js → -DEVLQKIT.js} +12 -12
  12. package/dist/{chunk-M4I5F6GK.js → chunk-2CABQYTT.js} +9 -9
  13. package/dist/chunk-2CABQYTT.js.map +1 -0
  14. package/dist/{chunk-NBOVSNSR.js → chunk-2CENWSAW.js} +10 -10
  15. package/dist/chunk-2CENWSAW.js.map +1 -0
  16. package/dist/{chunk-3H5X63BQ.js → chunk-3FFPHTXD.js} +1 -1
  17. package/dist/chunk-3FFPHTXD.js.map +1 -0
  18. package/dist/{chunk-MOL7MDBG.js → chunk-3TBUDJDE.js} +1 -1
  19. package/dist/chunk-3TBUDJDE.js.map +1 -0
  20. package/dist/{chunk-5RPYBC2Q.js → chunk-6GBLFQMA.js} +1 -1
  21. package/dist/chunk-6GBLFQMA.js.map +1 -0
  22. package/dist/{chunk-GZDOWYJM.js → chunk-6XPXIG57.js} +2 -2
  23. package/dist/chunk-6XPXIG57.js.map +1 -0
  24. package/dist/{chunk-45EUJ2P6.js → chunk-7BTO44Q7.js} +37 -21
  25. package/dist/chunk-7BTO44Q7.js.map +1 -0
  26. package/dist/{chunk-GE43BE46.js → chunk-AIQ3ISQU.js} +1 -1
  27. package/dist/chunk-AIQ3ISQU.js.map +1 -0
  28. package/dist/{chunk-GLPLLT4Q.cjs → chunk-CARNWWGI.cjs} +4 -4
  29. package/dist/chunk-CARNWWGI.cjs.map +1 -0
  30. package/dist/chunk-GS7T56RP.cjs.map +1 -1
  31. package/dist/{chunk-TCPO6XAY.cjs → chunk-HPRGVU6A.cjs} +11 -11
  32. package/dist/chunk-HPRGVU6A.cjs.map +1 -0
  33. package/dist/{chunk-U3ZNF4SO.cjs → chunk-I42DND3B.cjs} +17 -17
  34. package/dist/chunk-I42DND3B.cjs.map +1 -0
  35. package/dist/{chunk-ZHNUH2IW.js → chunk-IBVMJIHR.js} +2 -2
  36. package/dist/chunk-IBVMJIHR.js.map +1 -0
  37. package/dist/{chunk-XYSTZIIL.js → chunk-IHK5LCYX.js} +2 -2
  38. package/dist/chunk-IHK5LCYX.js.map +1 -0
  39. package/dist/{chunk-TP4P7M4I.js → chunk-KC63W72C.js} +2 -2
  40. package/dist/chunk-KC63W72C.js.map +1 -0
  41. package/dist/{chunk-GCHH4WHT.js → chunk-KQOTL4WI.js} +2 -2
  42. package/dist/chunk-KQOTL4WI.js.map +1 -0
  43. package/dist/{chunk-ZV5OKQ3Z.cjs → chunk-MGGU3ZRK.cjs} +1 -1
  44. package/dist/chunk-MGGU3ZRK.cjs.map +1 -0
  45. package/dist/{chunk-FT2EXMMP.js → chunk-MSMSHU2F.js} +9 -9
  46. package/dist/chunk-MSMSHU2F.js.map +1 -0
  47. package/dist/{chunk-DZIXKL7E.js → chunk-O5EK52TG.js} +1 -1
  48. package/dist/chunk-O5EK52TG.js.map +1 -0
  49. package/dist/{chunk-CBUC73JM.js → chunk-OPL22SYF.js} +3 -3
  50. package/dist/chunk-OPL22SYF.js.map +1 -0
  51. package/dist/{chunk-2CF2WXBG.js → chunk-PQDNCWAZ.js} +11 -11
  52. package/dist/chunk-PQDNCWAZ.js.map +1 -0
  53. package/dist/{chunk-UEWW3DH2.js → chunk-PSAHY5XW.js} +1 -1
  54. package/dist/chunk-PSAHY5XW.js.map +1 -0
  55. package/dist/{chunk-EYLOFSA5.js → chunk-UGKXJA3W.js} +4 -3
  56. package/dist/chunk-UGKXJA3W.js.map +1 -0
  57. package/dist/{chunk-WDIPTY3Q.js → chunk-UQ4NSK66.js} +3 -3
  58. package/dist/chunk-UQ4NSK66.js.map +1 -0
  59. package/dist/{chunk-7ZQKECQT.js → chunk-VNEV6VKD.js} +2 -2
  60. package/dist/chunk-VNEV6VKD.js.map +1 -0
  61. package/dist/{chunk-7FCNOKOR.js → chunk-W34QSJFF.js} +1 -1
  62. package/dist/chunk-W34QSJFF.js.map +1 -0
  63. package/dist/{chunk-UQ6KDJWE.cjs → chunk-WX7WQTOT.cjs} +4 -3
  64. package/dist/chunk-WX7WQTOT.cjs.map +1 -0
  65. package/dist/{chunk-DCZVOIEO.cjs → chunk-X34YWRL5.cjs} +1 -1
  66. package/dist/chunk-X34YWRL5.cjs.map +1 -0
  67. package/dist/{chunk-UAFSPWU7.js → chunk-YNJDNP44.js} +1 -1
  68. package/dist/chunk-YNJDNP44.js.map +1 -0
  69. package/dist/{chunk-TTEHX4FN.js → chunk-ZYQ5X6PG.js} +4 -3
  70. package/dist/chunk-ZYQ5X6PG.js.map +1 -0
  71. package/dist/chunks-Y2VE2WCJ.js +10 -0
  72. package/dist/cli.js +54 -29
  73. package/dist/cli.js.map +1 -1
  74. package/dist/{formula-JLYS73QL.js → formula-ETB6MESN.js} +2 -2
  75. package/dist/formula-ETB6MESN.js.map +1 -0
  76. package/dist/{formula-LIVQSCMM.js → formula-KW4NI5IO.js} +2 -2
  77. package/dist/formula-KW4NI5IO.js.map +1 -0
  78. package/dist/{formula-CG4S7TWO.cjs → formula-WKGP3D3Y.cjs} +8 -8
  79. package/dist/formula-WKGP3D3Y.cjs.map +1 -0
  80. package/dist/{image-ocr-BWQIUUVC.js → image-ocr-C6U7YHRC.js} +6 -6
  81. package/dist/image-ocr-C6U7YHRC.js.map +1 -0
  82. package/dist/{image-ocr-EDZOUU6Q.js → image-ocr-YIBJCOUQ.js} +8 -8
  83. package/dist/image-ocr-YIBJCOUQ.js.map +1 -0
  84. package/dist/{image-ocr-KZ4MGVJ3.cjs → image-ocr-YID6TDN5.cjs} +11 -11
  85. package/dist/image-ocr-YID6TDN5.cjs.map +1 -0
  86. package/dist/index.cjs +209 -193
  87. package/dist/index.cjs.map +1 -1
  88. package/dist/index.d.cts +13 -1
  89. package/dist/index.d.ts +13 -1
  90. package/dist/index.js +31 -15
  91. package/dist/index.js.map +1 -1
  92. package/dist/mcp.js +25 -23
  93. package/dist/mcp.js.map +1 -1
  94. package/dist/{models-6SIKLKRH.js → models-6VMAVZR6.js} +3 -3
  95. package/dist/page-range-CIRRJPXJ.js +7 -0
  96. package/dist/page-range-OF5I4PQY.js +8 -0
  97. package/dist/page-range-TPIRSA3J.cjs +8 -0
  98. package/dist/page-range-TPIRSA3J.cjs.map +1 -0
  99. package/dist/{parser-7G2QFIYZ.cjs → parser-EYCVDUJA.cjs} +33 -33
  100. package/dist/parser-EYCVDUJA.cjs.map +1 -0
  101. package/dist/{parser-JLEKXA2Z.js → parser-GFXZV2VJ.js} +11 -11
  102. package/dist/parser-GFXZV2VJ.js.map +1 -0
  103. package/dist/{parser-6OJOFJ64.js → parser-SHM3JEH6.js} +9 -9
  104. package/dist/parser-SHM3JEH6.js.map +1 -0
  105. package/dist/pdf-ocr-TMAWPOHC.cjs +13 -0
  106. package/dist/pdf-ocr-TMAWPOHC.cjs.map +1 -0
  107. package/dist/pdf-ocr-UKFYODLP.js +15 -0
  108. package/dist/pdf-ocr-ZG4UVUIT.js +12 -0
  109. package/dist/{profile-io-FMPT6VEZ.js → profile-io-FQZNNA3O.js} +3 -3
  110. package/dist/{rasterize-LARCX6CS.js → rasterize-QGKFNTXO.js} +2 -2
  111. package/dist/rasterize-QGKFNTXO.js.map +1 -0
  112. package/dist/{redact-7ILEAUTS.js → redact-W5K3ILQH.js} +2 -2
  113. package/dist/render-YFIWQYVB.js +10 -0
  114. package/dist/seal-GZ7NDWLR.js +10 -0
  115. package/dist/{setup-GUQT5ELJ.js → setup-I4I75QJU.js} +1 -1
  116. package/dist/setup-I4I75QJU.js.map +1 -0
  117. package/dist/{watch-Y2VKD2MN.js → watch-OIVXH2RN.js} +12 -12
  118. package/dist/watch-OIVXH2RN.js.map +1 -0
  119. package/package.json +103 -103
  120. package/templates//352/260/204/354/235/264/352/270/260/354/225/210/353/254/270_/354/230/210/354/213/234/352/260/222.json +9 -9
  121. package/templates//354/235/274/353/260/230/352/270/260/354/225/210/353/254/270_/354/230/210/354/213/234/352/260/222.json +24 -24
  122. package/dist/chunk-2CF2WXBG.js.map +0 -1
  123. package/dist/chunk-3H5X63BQ.js.map +0 -1
  124. package/dist/chunk-45EUJ2P6.js.map +0 -1
  125. package/dist/chunk-5RPYBC2Q.js.map +0 -1
  126. package/dist/chunk-7FCNOKOR.js.map +0 -1
  127. package/dist/chunk-7ZQKECQT.js.map +0 -1
  128. package/dist/chunk-CBUC73JM.js.map +0 -1
  129. package/dist/chunk-DCZVOIEO.cjs.map +0 -1
  130. package/dist/chunk-DZIXKL7E.js.map +0 -1
  131. package/dist/chunk-EYLOFSA5.js.map +0 -1
  132. package/dist/chunk-FT2EXMMP.js.map +0 -1
  133. package/dist/chunk-GCHH4WHT.js.map +0 -1
  134. package/dist/chunk-GE43BE46.js.map +0 -1
  135. package/dist/chunk-GLPLLT4Q.cjs.map +0 -1
  136. package/dist/chunk-GZDOWYJM.js.map +0 -1
  137. package/dist/chunk-M4I5F6GK.js.map +0 -1
  138. package/dist/chunk-MOL7MDBG.js.map +0 -1
  139. package/dist/chunk-NBOVSNSR.js.map +0 -1
  140. package/dist/chunk-TCPO6XAY.cjs.map +0 -1
  141. package/dist/chunk-TP4P7M4I.js.map +0 -1
  142. package/dist/chunk-TTEHX4FN.js.map +0 -1
  143. package/dist/chunk-U3ZNF4SO.cjs.map +0 -1
  144. package/dist/chunk-UAFSPWU7.js.map +0 -1
  145. package/dist/chunk-UEWW3DH2.js.map +0 -1
  146. package/dist/chunk-UQ6KDJWE.cjs.map +0 -1
  147. package/dist/chunk-WDIPTY3Q.js.map +0 -1
  148. package/dist/chunk-XYSTZIIL.js.map +0 -1
  149. package/dist/chunk-ZHNUH2IW.js.map +0 -1
  150. package/dist/chunk-ZV5OKQ3Z.cjs.map +0 -1
  151. package/dist/chunks-EYDY4Y6O.js +0 -10
  152. package/dist/formula-CG4S7TWO.cjs.map +0 -1
  153. package/dist/formula-JLYS73QL.js.map +0 -1
  154. package/dist/formula-LIVQSCMM.js.map +0 -1
  155. package/dist/image-ocr-BWQIUUVC.js.map +0 -1
  156. package/dist/image-ocr-EDZOUU6Q.js.map +0 -1
  157. package/dist/image-ocr-KZ4MGVJ3.cjs.map +0 -1
  158. package/dist/page-range-737B4EZW.js +0 -8
  159. package/dist/page-range-LNMXJU6W.js +0 -7
  160. package/dist/page-range-P7SDW6LR.cjs +0 -8
  161. package/dist/page-range-P7SDW6LR.cjs.map +0 -1
  162. package/dist/parser-6OJOFJ64.js.map +0 -1
  163. package/dist/parser-7G2QFIYZ.cjs.map +0 -1
  164. package/dist/parser-JLEKXA2Z.js.map +0 -1
  165. package/dist/pdf-ocr-364VNE6N.cjs +0 -13
  166. package/dist/pdf-ocr-364VNE6N.cjs.map +0 -1
  167. package/dist/pdf-ocr-OWUZLWQ3.js +0 -15
  168. package/dist/pdf-ocr-YQGMCT53.js +0 -12
  169. package/dist/rasterize-LARCX6CS.js.map +0 -1
  170. package/dist/render-4WHQ7JCX.js +0 -10
  171. package/dist/seal-BX6YA6PI.js +0 -10
  172. package/dist/setup-GUQT5ELJ.js.map +0 -1
  173. package/dist/watch-Y2VKD2MN.js.map +0 -1
  174. /package/dist/{-CWYIC4ES.js.map → -DEVLQKIT.js.map} +0 -0
  175. /package/dist/{chunks-EYDY4Y6O.js.map → chunks-Y2VE2WCJ.js.map} +0 -0
  176. /package/dist/{models-6SIKLKRH.js.map → models-6VMAVZR6.js.map} +0 -0
  177. /package/dist/{page-range-737B4EZW.js.map → page-range-CIRRJPXJ.js.map} +0 -0
  178. /package/dist/{page-range-LNMXJU6W.js.map → page-range-OF5I4PQY.js.map} +0 -0
  179. /package/dist/{pdf-ocr-OWUZLWQ3.js.map → pdf-ocr-UKFYODLP.js.map} +0 -0
  180. /package/dist/{pdf-ocr-YQGMCT53.js.map → pdf-ocr-ZG4UVUIT.js.map} +0 -0
  181. /package/dist/{profile-io-FMPT6VEZ.js.map → profile-io-FQZNNA3O.js.map} +0 -0
  182. /package/dist/{redact-7ILEAUTS.js.map → redact-W5K3ILQH.js.map} +0 -0
  183. /package/dist/{render-4WHQ7JCX.js.map → render-YFIWQYVB.js.map} +0 -0
  184. /package/dist/{seal-BX6YA6PI.js.map → seal-GZ7NDWLR.js.map} +0 -0
package/dist/index.d.cts CHANGED
@@ -205,6 +205,16 @@ interface ParseOptions {
205
205
  * (현재 HWP5 경로 지원)
206
206
  */
207
207
  inlineImages?: boolean;
208
+ /**
209
+ * PDF 표 감지 활성화 (기본 true). false 면 선 기반 그리드·클러스터 표 감지를 모두 끄고
210
+ * 자연 읽기순 텍스트만 뽑는다 (#64).
211
+ *
212
+ * 시각적 테두리 박스(시험지 안내문·보기 상자)가 표로 잡히면 주변 본문이 셀 매핑으로
213
+ * 끌려 들어가 문항 순서가 뒤집히는데, 표가 애초에 필요 없는 텍스트 중심 사용처에는
214
+ * 우회 수단이 없었다. 표가 실제로 있는 문서에 켜면 표 구조가 문단으로 흩어지므로
215
+ * 문서 종류를 아는 호출자만 쓰는 opt-out 이다. PDF 전용 — 다른 포맷은 무시.
216
+ */
217
+ tables?: boolean;
208
218
  }
209
219
  /** 파싱 중 스킵/실패한 요소 보고 */
210
220
  interface ParseWarning {
@@ -223,7 +233,9 @@ interface OutlineItem {
223
233
  pageNumber?: number;
224
234
  }
225
235
  /** 구조화된 에러 코드 — 프로그래밍적 에러 핸들링용 */
226
- type ErrorCode = "EMPTY_INPUT" | "UNSUPPORTED_FORMAT" | "ENCRYPTED" | "DRM_PROTECTED" | "CORRUPTED" | "DECOMPRESSION_BOMB" | "ZIP_BOMB" | "IMAGE_BASED_PDF" | "NO_SECTIONS" | "PARSE_ERROR" | "MISSING_DEPENDENCY";
236
+ type ErrorCode = "EMPTY_INPUT" | "UNSUPPORTED_FORMAT" | "ENCRYPTED" | "DRM_PROTECTED" | "CORRUPTED" | "DECOMPRESSION_BOMB" | "ZIP_BOMB" | "IMAGE_BASED_PDF" | "NO_SECTIONS" | "PARSE_ERROR" | "MISSING_DEPENDENCY"
237
+ /** 결과 직렬화가 런타임 문자열 한계를 넘음 — 이미지 다량 문서의 JSON 출력 (#65) */
238
+ | "OUTPUT_TOO_LARGE";
227
239
  type FileType = "hwpx" | "hwp" | "hwp3" | "hwpml" | "pdf" | "xlsx" | "xls" | "docx" | "image" | "unknown";
228
240
  interface ParseResultBase {
229
241
  fileType: FileType;
package/dist/index.d.ts CHANGED
@@ -205,6 +205,16 @@ interface ParseOptions {
205
205
  * (현재 HWP5 경로 지원)
206
206
  */
207
207
  inlineImages?: boolean;
208
+ /**
209
+ * PDF 표 감지 활성화 (기본 true). false 면 선 기반 그리드·클러스터 표 감지를 모두 끄고
210
+ * 자연 읽기순 텍스트만 뽑는다 (#64).
211
+ *
212
+ * 시각적 테두리 박스(시험지 안내문·보기 상자)가 표로 잡히면 주변 본문이 셀 매핑으로
213
+ * 끌려 들어가 문항 순서가 뒤집히는데, 표가 애초에 필요 없는 텍스트 중심 사용처에는
214
+ * 우회 수단이 없었다. 표가 실제로 있는 문서에 켜면 표 구조가 문단으로 흩어지므로
215
+ * 문서 종류를 아는 호출자만 쓰는 opt-out 이다. PDF 전용 — 다른 포맷은 무시.
216
+ */
217
+ tables?: boolean;
208
218
  }
209
219
  /** 파싱 중 스킵/실패한 요소 보고 */
210
220
  interface ParseWarning {
@@ -223,7 +233,9 @@ interface OutlineItem {
223
233
  pageNumber?: number;
224
234
  }
225
235
  /** 구조화된 에러 코드 — 프로그래밍적 에러 핸들링용 */
226
- type ErrorCode = "EMPTY_INPUT" | "UNSUPPORTED_FORMAT" | "ENCRYPTED" | "DRM_PROTECTED" | "CORRUPTED" | "DECOMPRESSION_BOMB" | "ZIP_BOMB" | "IMAGE_BASED_PDF" | "NO_SECTIONS" | "PARSE_ERROR" | "MISSING_DEPENDENCY";
236
+ type ErrorCode = "EMPTY_INPUT" | "UNSUPPORTED_FORMAT" | "ENCRYPTED" | "DRM_PROTECTED" | "CORRUPTED" | "DECOMPRESSION_BOMB" | "ZIP_BOMB" | "IMAGE_BASED_PDF" | "NO_SECTIONS" | "PARSE_ERROR" | "MISSING_DEPENDENCY"
237
+ /** 결과 직렬화가 런타임 문자열 한계를 넘음 — 이미지 다량 문서의 JSON 출력 (#65) */
238
+ | "OUTPUT_TOO_LARGE";
227
239
  type FileType = "hwpx" | "hwp" | "hwp3" | "hwpml" | "pdf" | "xlsx" | "xls" | "docx" | "image" | "unknown";
228
240
  interface ParseResultBase {
229
241
  fileType: FileType;
package/dist/index.js CHANGED
@@ -8,10 +8,10 @@ import {
8
8
  flattenLayoutTables,
9
9
  inlineImagesIntoMarkdown,
10
10
  mapPuaText
11
- } from "./chunk-XYSTZIIL.js";
11
+ } from "./chunk-IHK5LCYX.js";
12
12
  import {
13
13
  parsePageRange
14
- } from "./chunk-GE43BE46.js";
14
+ } from "./chunk-AIQ3ISQU.js";
15
15
  import {
16
16
  HEADING_RATIO_H1,
17
17
  HEADING_RATIO_H2,
@@ -27,7 +27,7 @@ import {
27
27
  sanitizeHref,
28
28
  stripDtd,
29
29
  toArrayBuffer
30
- } from "./chunk-EYLOFSA5.js";
30
+ } from "./chunk-UGKXJA3W.js";
31
31
 
32
32
  // src/index.ts
33
33
  import { readFile } from "fs/promises";
@@ -17892,7 +17892,7 @@ async function parseXlsxDocument(buffer, options) {
17892
17892
  }
17893
17893
  let pageFilter = null;
17894
17894
  if (options?.pages) {
17895
- const { parsePageRange: parsePageRange2 } = await import("./page-range-LNMXJU6W.js");
17895
+ const { parsePageRange: parsePageRange2 } = await import("./page-range-CIRRJPXJ.js");
17896
17896
  pageFilter = parsePageRange2(options.pages, sheets.length);
17897
17897
  }
17898
17898
  const blocks = [];
@@ -18592,7 +18592,7 @@ async function parseXlsDocument(buffer, options) {
18592
18592
  const totalSheets = Math.min(globals.sheets.length, MAX_SHEETS2);
18593
18593
  let pageFilter = null;
18594
18594
  if (options?.pages) {
18595
- const { parsePageRange: parsePageRange2 } = await import("./page-range-LNMXJU6W.js");
18595
+ const { parsePageRange: parsePageRange2 } = await import("./page-range-CIRRJPXJ.js");
18596
18596
  pageFilter = parsePageRange2(options.pages, totalSheets);
18597
18597
  }
18598
18598
  const allBlocks = [];
@@ -22915,11 +22915,11 @@ function parseInlineMarkdown(text) {
22915
22915
  }
22916
22916
  return spans;
22917
22917
  }
22918
- function emphasisSpans(text) {
22918
+ var INLINE_REGEX = /(`[^`]+`|\*{3}(?:[^*]|\*(?!\*\*))+\*{3}|\*{2}(?:[^*]|\*(?!\*))+\*{2}|\*(?:[^*]|\*{2}(?:[^*]|\*(?!\*))+\*{2})+\*|(?<![^\s\p{P}\p{S}\x00])(?<!_)_{2}(?=\S)[^_]+(?<=\S)_{2}(?!_)(?![^\s\p{P}\p{S}\x00])|(?<![^\s\p{P}\p{S}\x00])(?<!_)_(?=\S)[^_]+(?<=\S)_(?!_)(?![^\s\p{P}\p{S}\x00]))/gu;
22919
+ function emphasisSpans(text, depth = 0) {
22919
22920
  const spans = [];
22920
- const regex = /(`[^`]+`|\*{3}[^*]+\*{3}|\*{2}[^*]+\*{2}|\*[^*]+\*|(?<![^\s\p{P}\p{S}\x00])(?<!_)_{2}(?=\S)[^_]+(?<=\S)_{2}(?!_)(?![^\s\p{P}\p{S}\x00])|(?<![^\s\p{P}\p{S}\x00])(?<!_)_(?=\S)[^_]+(?<=\S)_(?!_)(?![^\s\p{P}\p{S}\x00]))/gu;
22921
22921
  let lastIdx = 0;
22922
- for (const match of text.matchAll(regex)) {
22922
+ for (const match of text.matchAll(INLINE_REGEX)) {
22923
22923
  const idx = match.index;
22924
22924
  if (idx > lastIdx) {
22925
22925
  spans.push({ text: text.slice(lastIdx, idx), bold: false, italic: false, code: false });
@@ -22927,12 +22927,28 @@ function emphasisSpans(text) {
22927
22927
  const raw = match[0];
22928
22928
  if (raw.startsWith("`")) {
22929
22929
  spans.push({ text: raw.slice(1, -1), bold: false, italic: false, code: true });
22930
- } else if (raw.startsWith("***") || raw.startsWith("___")) {
22931
- spans.push({ text: raw.slice(3, -3), bold: true, italic: true, code: false });
22932
- } else if (raw.startsWith("**") || raw.startsWith("__")) {
22933
- spans.push({ text: raw.slice(2, -2), bold: true, italic: false, code: false });
22934
22930
  } else {
22935
- spans.push({ text: raw.slice(1, -1), bold: false, italic: true, code: false });
22931
+ let inner;
22932
+ let bold = false;
22933
+ let italic = false;
22934
+ if (raw.startsWith("***") || raw.startsWith("___")) {
22935
+ inner = raw.slice(3, -3);
22936
+ bold = true;
22937
+ italic = true;
22938
+ } else if (raw.startsWith("**") || raw.startsWith("__")) {
22939
+ inner = raw.slice(2, -2);
22940
+ bold = true;
22941
+ } else {
22942
+ inner = raw.slice(1, -1);
22943
+ italic = true;
22944
+ }
22945
+ if (depth < 3 && /[`*_]/.test(inner)) {
22946
+ for (const child of emphasisSpans(inner, depth + 1)) {
22947
+ spans.push(child.code ? child : { ...child, bold: child.bold || bold, italic: child.italic || italic });
22948
+ }
22949
+ } else {
22950
+ spans.push({ text: inner, bold, italic, code: false });
22951
+ }
22936
22952
  }
22937
22953
  lastIdx = idx + raw.length;
22938
22954
  }
@@ -31296,7 +31312,7 @@ async function parse(input, options) {
31296
31312
  }
31297
31313
  async function parseImage(buffer, options) {
31298
31314
  try {
31299
- const { parseImageDocument } = await import("./image-ocr-BWQIUUVC.js");
31315
+ const { parseImageDocument } = await import("./image-ocr-C6U7YHRC.js");
31300
31316
  const { blocks, warnings } = await parseImageDocument(buffer, options);
31301
31317
  return {
31302
31318
  success: true,
@@ -31355,7 +31371,7 @@ async function parseHwp(buffer, options) {
31355
31371
  async function parsePdf(buffer, options) {
31356
31372
  let parsePdfDocument;
31357
31373
  try {
31358
- const mod = await import("./parser-6OJOFJ64.js");
31374
+ const mod = await import("./parser-SHM3JEH6.js");
31359
31375
  parsePdfDocument = mod.parsePdfDocument;
31360
31376
  } catch {
31361
31377
  return {