kordoc 4.7.2 → 4.8.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 (131) hide show
  1. package/README.md +24 -2
  2. package/dist/{-CVPGGSAB.js → -URO5XBEB.js} +11 -9
  3. package/dist/{chunk-IMY4LQ3J.js → chunk-2ANLGAUG.js} +2 -2
  4. package/dist/{chunk-7CWNBDWQ.js → chunk-37SAM3LH.js} +3 -3
  5. package/dist/{chunk-QXC5NPO2.js → chunk-3CBHCDYD.js} +418 -80
  6. package/dist/chunk-3CBHCDYD.js.map +1 -0
  7. package/dist/{chunk-PV6WSN6E.cjs → chunk-5IRX3TQP.cjs} +3 -3
  8. package/dist/chunk-5IRX3TQP.cjs.map +1 -0
  9. package/dist/{chunk-O4VLHQVG.js → chunk-7OHDTS5Q.js} +2 -2
  10. package/dist/{chunk-I4TP7HYB.js → chunk-BN33O25L.js} +1 -1
  11. package/dist/chunk-BN33O25L.js.map +1 -0
  12. package/dist/{chunk-E2XTVK7H.cjs → chunk-CX2LRBC5.cjs} +11 -11
  13. package/dist/chunk-CX2LRBC5.cjs.map +1 -0
  14. package/dist/chunk-DCZVOIEO.cjs.map +1 -1
  15. package/dist/{chunk-Y3VDFFAW.js → chunk-E6OJKTYS.js} +2 -2
  16. package/dist/{chunk-IN2AOMX6.js → chunk-F7RZZI5P.js} +3 -3
  17. package/dist/{chunk-46VU6YXF.cjs → chunk-GGZ5PSJO.cjs} +4 -4
  18. package/dist/chunk-GGZ5PSJO.cjs.map +1 -0
  19. package/dist/chunk-GS7T56RP.cjs.map +1 -1
  20. package/dist/{chunk-IVSEGHI2.js → chunk-HFVMCUXF.js} +3 -3
  21. package/dist/{chunk-TYIFZT5H.js → chunk-HS4762CD.js} +2 -2
  22. package/dist/{chunk-DZBMQC2N.cjs → chunk-J7DBL77B.cjs} +2 -2
  23. package/dist/chunk-J7DBL77B.cjs.map +1 -0
  24. package/dist/{chunk-VXB52EWX.js → chunk-L2Q3NLHX.js} +2 -2
  25. package/dist/{chunk-URTDBXV6.cjs → chunk-L5CDTOC3.cjs} +1 -1
  26. package/dist/chunk-L5CDTOC3.cjs.map +1 -0
  27. package/dist/{chunk-PGDJUJ4L.js → chunk-NFCQ5XNT.js} +2 -2
  28. package/dist/{chunk-P7HPLWEP.js → chunk-OKE6G67G.js} +2 -2
  29. package/dist/{chunk-YU3PLOX4.cjs → chunk-OKISH2NK.cjs} +6 -6
  30. package/dist/chunk-OKISH2NK.cjs.map +1 -0
  31. package/dist/{chunk-JMWBMGNH.js → chunk-S4SMUQAT.js} +2 -2
  32. package/dist/{chunk-BSWJCSG7.js → chunk-TXRTH5BV.js} +2 -2
  33. package/dist/{chunk-FJBOVJAG.js → chunk-VPAYFTMH.js} +3 -3
  34. package/dist/{chunk-QKHN7LEV.js → chunk-WG473BIB.js} +2 -2
  35. package/dist/{chunk-VEBTOI3I.js → chunk-WXC4HKSD.js} +3 -3
  36. package/dist/{chunk-4VNUQYUE.js → chunk-XINP35F4.js} +1 -1
  37. package/dist/chunk-XINP35F4.js.map +1 -0
  38. package/dist/{chunk-GLZMUKYL.js → chunk-YB2TYOYY.js} +3 -3
  39. package/dist/{chunk-LJW5EQXS.js → chunk-ZEQPTIWN.js} +8 -3
  40. package/dist/chunk-ZEQPTIWN.js.map +1 -0
  41. package/dist/chunks-M64IY7AK.js +10 -0
  42. package/dist/cli.js +22 -22
  43. package/dist/cli.js.map +1 -1
  44. package/dist/{formula-7D3MLOSV.cjs → formula-3K5KC3VV.cjs} +9 -9
  45. package/dist/formula-3K5KC3VV.cjs.map +1 -0
  46. package/dist/{formula-GHGK7T3S.js → formula-7BNCJ55B.js} +3 -3
  47. package/dist/{formula-RTGCS55B.js → formula-YRMQ7BTI.js} +4 -4
  48. package/dist/{image-ocr-PRI2JKDW.cjs → image-ocr-CBMJIJTQ.cjs} +12 -12
  49. package/dist/image-ocr-CBMJIJTQ.cjs.map +1 -0
  50. package/dist/{image-ocr-2UMWFGRS.js → image-ocr-O7TKPDTY.js} +8 -8
  51. package/dist/{image-ocr-TQ5THN35.js → image-ocr-XRVXVYKO.js} +6 -6
  52. package/dist/index.cjs +896 -553
  53. package/dist/index.cjs.map +1 -1
  54. package/dist/index.d.cts +52 -3
  55. package/dist/index.d.ts +52 -3
  56. package/dist/index.js +420 -77
  57. package/dist/index.js.map +1 -1
  58. package/dist/mcp.js +19 -18
  59. package/dist/mcp.js.map +1 -1
  60. package/dist/{model-bundle-5RLZV7P2.js → model-bundle-GNDUKNME.js} +5 -5
  61. package/dist/{models-RSHR2BY7.js → models-TJ45RB2Z.js} +5 -5
  62. package/dist/page-range-P7SDW6LR.cjs.map +1 -1
  63. package/dist/{parser-FXEIK3VJ.js → parser-5MLJHSRX.js} +8 -8
  64. package/dist/{parser-QPMTNRPU.js.map → parser-5MLJHSRX.js.map} +1 -1
  65. package/dist/{parser-SCQ7NJUJ.cjs → parser-GIVQWVKJ.cjs} +28 -28
  66. package/dist/parser-GIVQWVKJ.cjs.map +1 -0
  67. package/dist/{parser-QPMTNRPU.js → parser-U3SMCGRK.js} +8 -8
  68. package/dist/{parser-FXEIK3VJ.js.map → parser-U3SMCGRK.js.map} +1 -1
  69. package/dist/pdf-ocr-BUBZA4EE.cjs +14 -0
  70. package/dist/pdf-ocr-BUBZA4EE.cjs.map +1 -0
  71. package/dist/pdf-ocr-HITVPJLV.js +13 -0
  72. package/dist/pdf-ocr-K4WOCJGJ.js +16 -0
  73. package/dist/{profile-io-I4UGTNP6.js → profile-io-VATWYLZX.js} +3 -3
  74. package/dist/{rasterize-QY3XJKCH.js → rasterize-PNRXMSL2.js} +2 -2
  75. package/dist/render-YY5RKZEB.js +10 -0
  76. package/dist/seal-5ZNJXOOQ.js +10 -0
  77. package/dist/{setup-T2BY3VME.js → setup-OEUDZ4BT.js} +3 -3
  78. package/dist/{watch-JJE2UGVK.js → watch-USNQJXQC.js} +10 -10
  79. package/package.json +2 -2
  80. package/dist/chunk-46VU6YXF.cjs.map +0 -1
  81. package/dist/chunk-4VNUQYUE.js.map +0 -1
  82. package/dist/chunk-DZBMQC2N.cjs.map +0 -1
  83. package/dist/chunk-E2XTVK7H.cjs.map +0 -1
  84. package/dist/chunk-I4TP7HYB.js.map +0 -1
  85. package/dist/chunk-LJW5EQXS.js.map +0 -1
  86. package/dist/chunk-PV6WSN6E.cjs.map +0 -1
  87. package/dist/chunk-QXC5NPO2.js.map +0 -1
  88. package/dist/chunk-URTDBXV6.cjs.map +0 -1
  89. package/dist/chunk-YU3PLOX4.cjs.map +0 -1
  90. package/dist/chunks-RNP6VLGK.js +0 -10
  91. package/dist/formula-7D3MLOSV.cjs.map +0 -1
  92. package/dist/image-ocr-PRI2JKDW.cjs.map +0 -1
  93. package/dist/parser-SCQ7NJUJ.cjs.map +0 -1
  94. package/dist/pdf-ocr-HPRM24SP.js +0 -16
  95. package/dist/pdf-ocr-I6DISTBR.js +0 -13
  96. package/dist/pdf-ocr-JNWL65YW.cjs +0 -14
  97. package/dist/pdf-ocr-JNWL65YW.cjs.map +0 -1
  98. package/dist/render-HEQX5DII.js +0 -10
  99. package/dist/seal-NB2YJ5F4.js +0 -10
  100. /package/dist/{-CVPGGSAB.js.map → -URO5XBEB.js.map} +0 -0
  101. /package/dist/{chunk-IMY4LQ3J.js.map → chunk-2ANLGAUG.js.map} +0 -0
  102. /package/dist/{chunk-7CWNBDWQ.js.map → chunk-37SAM3LH.js.map} +0 -0
  103. /package/dist/{chunk-O4VLHQVG.js.map → chunk-7OHDTS5Q.js.map} +0 -0
  104. /package/dist/{chunk-Y3VDFFAW.js.map → chunk-E6OJKTYS.js.map} +0 -0
  105. /package/dist/{chunk-IN2AOMX6.js.map → chunk-F7RZZI5P.js.map} +0 -0
  106. /package/dist/{chunk-IVSEGHI2.js.map → chunk-HFVMCUXF.js.map} +0 -0
  107. /package/dist/{chunk-TYIFZT5H.js.map → chunk-HS4762CD.js.map} +0 -0
  108. /package/dist/{chunk-VXB52EWX.js.map → chunk-L2Q3NLHX.js.map} +0 -0
  109. /package/dist/{chunk-PGDJUJ4L.js.map → chunk-NFCQ5XNT.js.map} +0 -0
  110. /package/dist/{chunk-P7HPLWEP.js.map → chunk-OKE6G67G.js.map} +0 -0
  111. /package/dist/{chunk-JMWBMGNH.js.map → chunk-S4SMUQAT.js.map} +0 -0
  112. /package/dist/{chunk-BSWJCSG7.js.map → chunk-TXRTH5BV.js.map} +0 -0
  113. /package/dist/{chunk-FJBOVJAG.js.map → chunk-VPAYFTMH.js.map} +0 -0
  114. /package/dist/{chunk-QKHN7LEV.js.map → chunk-WG473BIB.js.map} +0 -0
  115. /package/dist/{chunk-VEBTOI3I.js.map → chunk-WXC4HKSD.js.map} +0 -0
  116. /package/dist/{chunk-GLZMUKYL.js.map → chunk-YB2TYOYY.js.map} +0 -0
  117. /package/dist/{chunks-RNP6VLGK.js.map → chunks-M64IY7AK.js.map} +0 -0
  118. /package/dist/{formula-GHGK7T3S.js.map → formula-7BNCJ55B.js.map} +0 -0
  119. /package/dist/{formula-RTGCS55B.js.map → formula-YRMQ7BTI.js.map} +0 -0
  120. /package/dist/{image-ocr-2UMWFGRS.js.map → image-ocr-O7TKPDTY.js.map} +0 -0
  121. /package/dist/{image-ocr-TQ5THN35.js.map → image-ocr-XRVXVYKO.js.map} +0 -0
  122. /package/dist/{model-bundle-5RLZV7P2.js.map → model-bundle-GNDUKNME.js.map} +0 -0
  123. /package/dist/{models-RSHR2BY7.js.map → models-TJ45RB2Z.js.map} +0 -0
  124. /package/dist/{pdf-ocr-HPRM24SP.js.map → pdf-ocr-HITVPJLV.js.map} +0 -0
  125. /package/dist/{pdf-ocr-I6DISTBR.js.map → pdf-ocr-K4WOCJGJ.js.map} +0 -0
  126. /package/dist/{profile-io-I4UGTNP6.js.map → profile-io-VATWYLZX.js.map} +0 -0
  127. /package/dist/{rasterize-QY3XJKCH.js.map → rasterize-PNRXMSL2.js.map} +0 -0
  128. /package/dist/{render-HEQX5DII.js.map → render-YY5RKZEB.js.map} +0 -0
  129. /package/dist/{seal-NB2YJ5F4.js.map → seal-5ZNJXOOQ.js.map} +0 -0
  130. /package/dist/{setup-T2BY3VME.js.map → setup-OEUDZ4BT.js.map} +0 -0
  131. /package/dist/{watch-JJE2UGVK.js.map → watch-USNQJXQC.js.map} +0 -0
package/dist/index.cjs CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- var _chunk46VU6YXFcjs = require('./chunk-46VU6YXF.cjs');
11
+ var _chunkGGZ5PSJOcjs = require('./chunk-GGZ5PSJO.cjs');
12
12
 
13
13
 
14
14
  var _chunkDCZVOIEOcjs = require('./chunk-DCZVOIEO.cjs');
@@ -16,7 +16,7 @@ var _chunkDCZVOIEOcjs = require('./chunk-DCZVOIEO.cjs');
16
16
 
17
17
 
18
18
 
19
- var _chunkURTDBXV6cjs = require('./chunk-URTDBXV6.cjs');
19
+ var _chunkL5CDTOC3cjs = require('./chunk-L5CDTOC3.cjs');
20
20
 
21
21
 
22
22
 
@@ -29,7 +29,7 @@ var _chunkURTDBXV6cjs = require('./chunk-URTDBXV6.cjs');
29
29
 
30
30
 
31
31
 
32
- var _chunkDZBMQC2Ncjs = require('./chunk-DZBMQC2N.cjs');
32
+ var _chunkJ7DBL77Bcjs = require('./chunk-J7DBL77B.cjs');
33
33
 
34
34
 
35
35
  var _chunkGS7T56RPcjs = require('./chunk-GS7T56RP.cjs');
@@ -398,7 +398,7 @@ function comResultToParseResult(pages, pageCount, warnings) {
398
398
  }
399
399
  }
400
400
  const markdown = lines.join("\n\n");
401
- const metadata = { pageCount };
401
+ const metadata = { pageCount, pageMode: "layout" };
402
402
  warnings.push({
403
403
  message: "DRM \uBB38\uC11C: \uD55C\uCEF4 COM API\uB85C \uD14D\uC2A4\uD2B8 \uCD94\uCD9C (\uC11C\uC2DD/\uD45C \uC815\uBCF4 \uC81C\uD55C\uC801)",
404
404
  code: "DRM_COM_FALLBACK"
@@ -484,7 +484,7 @@ function rawTextContent(node, depth = 0) {
484
484
  // src/hwpx/parser-shared.ts
485
485
  var MAX_DECOMPRESS_SIZE = 256 * 1024 * 1024;
486
486
  var MAX_ZIP_ENTRIES = 500;
487
- var ZipBombError = class extends _chunkDZBMQC2Ncjs.KordocError {
487
+ var ZipBombError = class extends _chunkJ7DBL77Bcjs.KordocError {
488
488
  constructor(message) {
489
489
  super(message);
490
490
  this.name = "ZipBombError";
@@ -494,12 +494,17 @@ function clampSpan(val, max) {
494
494
  return Math.max(1, Math.min(val, max));
495
495
  }
496
496
  function createSectionShared() {
497
- return { numState: /* @__PURE__ */ new Map(), pageText: { headers: [], footers: [] }, track: { deleteDepth: 0, warned: false } };
497
+ return {
498
+ numState: /* @__PURE__ */ new Map(),
499
+ pageText: { headers: [], footers: [] },
500
+ track: { deleteDepth: 0, warned: false },
501
+ pageState: { base: 0, allUsable: true }
502
+ };
498
503
  }
499
504
  function createXmlParser(warnings) {
500
505
  return new (0, _xmldom.DOMParser)({
501
506
  onError(level, msg2) {
502
- if (level === "fatalError") throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`XML \uD30C\uC2F1 \uC2E4\uD328: ${msg2}`);
507
+ if (level === "fatalError") throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`XML \uD30C\uC2F1 \uC2E4\uD328: ${msg2}`);
503
508
  _optionalChain([warnings, 'optionalAccess', _3 => _3.push, 'call', _4 => _4({ code: "MALFORMED_XML", message: `XML ${level === "warning" ? "\uACBD\uACE0" : "\uC624\uB958"}: ${msg2}` })]);
504
509
  }
505
510
  });
@@ -534,13 +539,13 @@ function parseEncryptionManifest(manifestXml) {
534
539
  const startKey = attrOf(inner, "start-key-generation-name");
535
540
  const checksumType = attrOf(inner, "checksum-type");
536
541
  if (algorithm !== AES256_CBC) {
537
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 HWPX \uC554\uD638\uD654 \uBC29\uC2DD\uC785\uB2C8\uB2E4: ${_nullishCoalesce(algorithm, () => ( "(\uBBF8\uC0C1)"))}`);
542
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 HWPX \uC554\uD638\uD654 \uBC29\uC2DD\uC785\uB2C8\uB2E4: ${_nullishCoalesce(algorithm, () => ( "(\uBBF8\uC0C1)"))}`);
538
543
  }
539
544
  if (startKey !== START_KEY_SHA256) {
540
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 HWPX \uC2DC\uC791\uD0A4 \uC0DD\uC131 \uBC29\uC2DD\uC785\uB2C8\uB2E4: ${_nullishCoalesce(startKey, () => ( "(\uBBF8\uC0C1)"))}`);
545
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 HWPX \uC2DC\uC791\uD0A4 \uC0DD\uC131 \uBC29\uC2DD\uC785\uB2C8\uB2E4: ${_nullishCoalesce(startKey, () => ( "(\uBBF8\uC0C1)"))}`);
541
546
  }
542
547
  if (!_optionalChain([checksumType, 'optionalAccess', _8 => _8.endsWith, 'call', _9 => _9(CHECKSUM_SHA256_1K)])) {
543
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 HWPX \uCCB4\uD06C\uC12C \uBC29\uC2DD\uC785\uB2C8\uB2E4: ${_nullishCoalesce(checksumType, () => ( "(\uBBF8\uC0C1)"))}`);
548
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 HWPX \uCCB4\uD06C\uC12C \uBC29\uC2DD\uC785\uB2C8\uB2E4: ${_nullishCoalesce(checksumType, () => ( "(\uBBF8\uC0C1)"))}`);
544
549
  }
545
550
  const iterations = parseInt(_nullishCoalesce(attrOf(inner, "iteration-count"), () => ( "")), 10);
546
551
  const keySize = parseInt(_nullishCoalesce(attrOf(inner, "key-size"), () => ( "")), 10);
@@ -548,10 +553,10 @@ function parseEncryptionManifest(manifestXml) {
548
553
  const salt = Buffer.from(_nullishCoalesce(attrOf(inner, "salt"), () => ( "")), "base64");
549
554
  const checksum = Buffer.from(_nullishCoalesce(attrOf(inner, "checksum"), () => ( "")), "base64");
550
555
  if (!(iterations > 0 && iterations <= MAX_ITERATION_COUNT)) {
551
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`HWPX \uC554\uD638\uD654 \uBC18\uBCF5 \uD69F\uC218\uAC00 \uD5C8\uC6A9 \uBC94\uC704\uB97C \uBC97\uC5B4\uB0AC\uC2B5\uB2C8\uB2E4: ${iterations}`);
556
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`HWPX \uC554\uD638\uD654 \uBC18\uBCF5 \uD69F\uC218\uAC00 \uD5C8\uC6A9 \uBC94\uC704\uB97C \uBC97\uC5B4\uB0AC\uC2B5\uB2C8\uB2E4: ${iterations}`);
552
557
  }
553
558
  if (keySize !== 32 || iv.length !== 16 || salt.length === 0 || checksum.length !== 32) {
554
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`HWPX \uC554\uD638\uD654 \uD30C\uB77C\uBBF8\uD130\uAC00 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 (${path})`);
559
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`HWPX \uC554\uD638\uD654 \uD30C\uB77C\uBBF8\uD130\uAC00 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 (${path})`);
555
560
  }
556
561
  entries.push({ path, checksum, iv, salt, iterations, keySize });
557
562
  }
@@ -584,11 +589,11 @@ async function decryptHwpxInPlace(zip, manifestXml, password) {
584
589
  for (const entry of entries) {
585
590
  const file = zip.file(entry.path);
586
591
  if (!file) {
587
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`\uC554\uD638 \uBAA9\uB85D\uC5D0 \uC788\uB294 \uD30C\uC77C\uC774 \uBB38\uC11C\uC5D0 \uC5C6\uC2B5\uB2C8\uB2E4: ${entry.path}`);
592
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`\uC554\uD638 \uBAA9\uB85D\uC5D0 \uC788\uB294 \uD30C\uC77C\uC774 \uBB38\uC11C\uC5D0 \uC5C6\uC2B5\uB2C8\uB2E4: ${entry.path}`);
588
593
  }
589
594
  const plain = decryptEntry(await file.async("nodebuffer"), entry, startKey);
590
595
  if (!plain) {
591
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uAC70\uB098 \uC554\uD638\uD654 \uB370\uC774\uD130\uAC00 \uC190\uC0C1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
596
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uAC70\uB098 \uC554\uD638\uD654 \uB370\uC774\uD130\uAC00 \uC190\uC0C1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
592
597
  }
593
598
  decrypted.push({ path: entry.path, plain });
594
599
  }
@@ -636,10 +641,10 @@ async function extractHwpxStyles(zip, decompressed) {
636
641
  const xml = await file.async("text");
637
642
  if (decompressed) {
638
643
  decompressed.total += xml.length * 2;
639
- if (decompressed.total > MAX_DECOMPRESS_SIZE) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("ZIP \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (ZIP bomb \uC758\uC2EC)");
644
+ if (decompressed.total > MAX_DECOMPRESS_SIZE) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("ZIP \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (ZIP bomb \uC758\uC2EC)");
640
645
  }
641
646
  const parser = createXmlParser();
642
- const doc = parser.parseFromString(_chunkDZBMQC2Ncjs.stripDtd.call(void 0, xml), "text/xml");
647
+ const doc = parser.parseFromString(_chunkJ7DBL77Bcjs.stripDtd.call(void 0, xml), "text/xml");
643
648
  if (!doc.documentElement) continue;
644
649
  const domDoc = doc;
645
650
  parseCharProperties(domDoc, result.charProperties);
@@ -828,9 +833,9 @@ function detectHwpxHeadings(blocks, styleMap) {
828
833
  let level = 0;
829
834
  if (baseFontSize > 0 && _optionalChain([block, 'access', _16 => _16.style, 'optionalAccess', _17 => _17.fontSize])) {
830
835
  const ratio = block.style.fontSize / baseFontSize;
831
- if (ratio >= _chunkURTDBXV6cjs.HEADING_RATIO_H1) level = 1;
832
- else if (ratio >= _chunkURTDBXV6cjs.HEADING_RATIO_H2) level = 2;
833
- else if (ratio >= _chunkURTDBXV6cjs.HEADING_RATIO_H3) level = 3;
836
+ if (ratio >= _chunkL5CDTOC3cjs.HEADING_RATIO_H1) level = 1;
837
+ else if (ratio >= _chunkL5CDTOC3cjs.HEADING_RATIO_H2) level = 2;
838
+ else if (ratio >= _chunkL5CDTOC3cjs.HEADING_RATIO_H3) level = 3;
834
839
  }
835
840
  const compactText = text.replace(/\s+/g, "");
836
841
  if (/^제\d+[조장절편]/.test(compactText) && text.length <= 50) {
@@ -1423,7 +1428,7 @@ function resolveParaHeading(paraEl, ctx) {
1423
1428
 
1424
1429
  // src/hwpx/table-build.ts
1425
1430
  function buildTableWithCellMeta(state, keepAnchoredEmptyCols, keepEmptyParagraphs) {
1426
- const table2 = _chunk46VU6YXFcjs.buildTable.call(void 0, state.rows, { keepAnchoredEmptyCols, keepEmptyParagraphs });
1431
+ const table2 = _chunkGGZ5PSJOcjs.buildTable.call(void 0, state.rows, { keepAnchoredEmptyCols, keepEmptyParagraphs });
1427
1432
  if (state.caption) table2.caption = state.caption;
1428
1433
  if (_optionalChain([state, 'access', _21 => _21.captionBlocks, 'optionalAccess', _22 => _22.length])) table2.captionBlocks = state.captionBlocks;
1429
1434
  const anchors = [];
@@ -1485,16 +1490,16 @@ function buildTableWithCellMeta(state, keepAnchoredEmptyCols, keepEmptyParagraph
1485
1490
  function completeTable(newTable, tableStack, blocks, ctx) {
1486
1491
  const parentTable = tableStack.length > 0 ? tableStack.pop() : null;
1487
1492
  if (newTable.rows.length === 0) {
1488
- if (newTable.caption) blocks.push({ type: "paragraph", text: newTable.caption, pageNumber: ctx.sectionNum });
1493
+ if (newTable.caption) blocks.push({ type: "paragraph", text: newTable.caption, pageNumber: ctx.page });
1489
1494
  return parentTable;
1490
1495
  }
1491
1496
  const ir = buildTableWithCellMeta(newTable, ctx.shared.keepTrailingEmptyCols, ctx.shared.keepEmptyParagraphs);
1492
- const block = { type: "table", table: ir, pageNumber: ctx.sectionNum };
1497
+ const block = { type: "table", table: ir, pageNumber: ctx.page };
1493
1498
  if (_optionalChain([parentTable, 'optionalAccess', _29 => _29.cell])) {
1494
1499
  const cell2 = parentTable.cell;
1495
1500
  (cell2.blocks ??= []).push(block);
1496
1501
  cell2.hasStructure = true;
1497
- let flat = _chunk46VU6YXFcjs.convertTableToText.call(void 0, newTable.rows);
1502
+ let flat = _chunkGGZ5PSJOcjs.convertTableToText.call(void 0, newTable.rows);
1498
1503
  if (newTable.caption) flat = newTable.caption + (flat ? "\n" + flat : "");
1499
1504
  if (flat) {
1500
1505
  const inlineJoin = newTable.inline === true && cell2.lineOpen === true;
@@ -1507,13 +1512,147 @@ function completeTable(newTable, tableStack, blocks, ctx) {
1507
1512
  return parentTable;
1508
1513
  }
1509
1514
 
1515
+ // src/hwpx/page-boundary.ts
1516
+ var MIDPAGE_V = 2e3;
1517
+ var localName2 = (el) => {
1518
+ const n = el.nodeName;
1519
+ const i = n.indexOf(":");
1520
+ return i >= 0 ? n.slice(i + 1) : n;
1521
+ };
1522
+ var childElements = (parent) => {
1523
+ const out = [];
1524
+ for (let c = parent.firstChild; c; c = c.nextSibling) {
1525
+ if (c.nodeType === 1) out.push(c);
1526
+ }
1527
+ return out;
1528
+ };
1529
+ var numAttr = (el, name) => {
1530
+ const v = el.getAttribute(name);
1531
+ const n = v == null ? NaN : Number(v);
1532
+ return Number.isFinite(n) ? n : 0;
1533
+ };
1534
+ var findDescendant = (root, local, maxDepth = 8) => {
1535
+ if (maxDepth < 0) return null;
1536
+ for (const c of childElements(root)) {
1537
+ if (localName2(c) === local) return c;
1538
+ const found = findDescendant(c, local, maxDepth - 1);
1539
+ if (found) return found;
1540
+ }
1541
+ return null;
1542
+ };
1543
+ function linesegsOf(p) {
1544
+ const lsa = childElements(p).find((c) => localName2(c) === "linesegarray");
1545
+ return lsa ? childElements(lsa).filter((s) => localName2(s) === "lineseg") : [];
1546
+ }
1547
+ function cellFlowResets(subList) {
1548
+ let prevV = Number.NEGATIVE_INFINITY;
1549
+ let resets = 0;
1550
+ for (const p of childElements(subList)) {
1551
+ if (localName2(p) !== "p") continue;
1552
+ for (const s of linesegsOf(p)) {
1553
+ const v = numAttr(s, "vertpos");
1554
+ if (v < prevV) resets++;
1555
+ prevV = v;
1556
+ }
1557
+ }
1558
+ return resets;
1559
+ }
1560
+ function tableIntraBreaks(tbl2) {
1561
+ const rowMax = /* @__PURE__ */ new Map();
1562
+ for (const tr of childElements(tbl2)) {
1563
+ if (localName2(tr) !== "tr") continue;
1564
+ for (const tc2 of childElements(tr)) {
1565
+ if (localName2(tc2) !== "tc") continue;
1566
+ const addr = childElements(tc2).find((e) => localName2(e) === "cellAddr");
1567
+ const row = addr ? numAttr(addr, "rowAddr") : 0;
1568
+ const sub = childElements(tc2).find((e) => localName2(e) === "subList");
1569
+ if (!sub) continue;
1570
+ const r = cellFlowResets(sub);
1571
+ rowMax.set(row, Math.max(_nullishCoalesce(rowMax.get(row), () => ( 0)), r));
1572
+ }
1573
+ }
1574
+ let sum = 0;
1575
+ for (const v of rowMax.values()) sum += v;
1576
+ return sum;
1577
+ }
1578
+ function detectHwpxSectionPages(root) {
1579
+ const colPr = findDescendant(root, "colPr");
1580
+ const multiCol = colPr ? numAttr(colPr, "colCount") > 1 : false;
1581
+ const paraPage = /* @__PURE__ */ new Map();
1582
+ let cur = 0;
1583
+ let prevV = Number.NEGATIVE_INFINITY;
1584
+ let prevH = Number.NEGATIVE_INFINITY;
1585
+ let first = true;
1586
+ let suppressMidReset = false;
1587
+ let topParas = 0;
1588
+ let parasWithSegs = 0;
1589
+ for (const p of childElements(root)) {
1590
+ if (localName2(p) !== "p") continue;
1591
+ topParas++;
1592
+ const explicit = p.getAttribute("pageBreak") === "1";
1593
+ let brokeByExplicit = false;
1594
+ if (explicit && !first) {
1595
+ cur++;
1596
+ brokeByExplicit = true;
1597
+ suppressMidReset = false;
1598
+ }
1599
+ const segs = linesegsOf(p);
1600
+ if (segs.length > 0) parasWithSegs++;
1601
+ let paraFirst = true;
1602
+ let startPage = cur;
1603
+ for (const s of segs) {
1604
+ const v = numAttr(s, "vertpos");
1605
+ const h = numAttr(s, "horzpos");
1606
+ const brk = v < prevV ? !multiCol || h <= prevH : paraFirst && v === prevV && h <= prevH;
1607
+ if (brk && !(paraFirst && brokeByExplicit)) {
1608
+ if (paraFirst && suppressMidReset && v >= MIDPAGE_V) {
1609
+ } else {
1610
+ cur++;
1611
+ }
1612
+ }
1613
+ if (paraFirst) {
1614
+ suppressMidReset = false;
1615
+ startPage = cur;
1616
+ }
1617
+ paraFirst = false;
1618
+ prevV = v;
1619
+ prevH = h;
1620
+ }
1621
+ paraPage.set(p, startPage);
1622
+ first = false;
1623
+ let add = 0;
1624
+ for (const r of childElements(p)) {
1625
+ if (localName2(r) !== "run") continue;
1626
+ for (const t of childElements(r)) {
1627
+ if (localName2(t) === "tbl") add += tableIntraBreaks(t);
1628
+ }
1629
+ }
1630
+ if (add > 0) {
1631
+ cur += add;
1632
+ suppressMidReset = true;
1633
+ }
1634
+ }
1635
+ return {
1636
+ paraPage,
1637
+ pages: cur + 1,
1638
+ usable: topParas > 0 && parasWithSegs === topParas
1639
+ };
1640
+ }
1641
+
1510
1642
  // src/hwpx/section-walker.ts
1511
1643
  function parseSectionXml(xml, styleMap, warnings, sectionNum, shared) {
1512
1644
  const parser = createXmlParser(warnings);
1513
- const doc = parser.parseFromString(_chunkDZBMQC2Ncjs.stripDtd.call(void 0, xml), "text/xml");
1645
+ const doc = parser.parseFromString(_chunkJ7DBL77Bcjs.stripDtd.call(void 0, xml), "text/xml");
1514
1646
  if (!doc.documentElement) return [];
1515
1647
  const ctx = { styleMap, warnings, sectionNum, shared: _nullishCoalesce(shared, () => ( createSectionShared())) };
1516
1648
  ctx.shared.track.deleteDepth = 0;
1649
+ const detect = detectHwpxSectionPages(doc.documentElement);
1650
+ const ps = ctx.shared.pageState;
1651
+ if (!detect.usable) ps.allUsable = false;
1652
+ ctx.paraPage = detect.paraPage;
1653
+ ctx.pageBase = ps.base;
1654
+ ctx.page = ps.base + 1;
1655
+ ps.base += detect.pages;
1517
1656
  for (const tagName of ["hp:secPr", "secPr"]) {
1518
1657
  const els = doc.getElementsByTagName(tagName);
1519
1658
  if (els.length > 0) {
@@ -1560,7 +1699,7 @@ function walkSection(node, blocks, tableCtx, tableStack, ctx, depth = 0) {
1560
1699
  const chan = kordocTableChannel(el, ctx);
1561
1700
  if (chan) {
1562
1701
  if (chan.kind === "heading" && chan.text) {
1563
- blocks.push({ type: "heading", level: chan.level, text: chan.text, pageNumber: ctx.sectionNum });
1702
+ blocks.push({ type: "heading", level: chan.level, text: chan.text, pageNumber: ctx.page });
1564
1703
  }
1565
1704
  break;
1566
1705
  }
@@ -1579,7 +1718,7 @@ function walkSection(node, blocks, tableCtx, tableStack, ctx, depth = 0) {
1579
1718
  tableCtx.caption = (tableCtx.caption ? tableCtx.caption + "\n" : "") + cap.text;
1580
1719
  if (cap.hasStructure) (tableCtx.captionBlocks ??= []).push(...cap.blocks);
1581
1720
  } else {
1582
- blocks.push({ type: "paragraph", text: cap.text, pageNumber: ctx.sectionNum });
1721
+ blocks.push({ type: "paragraph", text: cap.text, pageNumber: ctx.page });
1583
1722
  }
1584
1723
  }
1585
1724
  break;
@@ -1617,24 +1756,26 @@ function walkSection(node, blocks, tableCtx, tableStack, ctx, depth = 0) {
1617
1756
  const cs = isNaN(rawCs) ? 1 : rawCs;
1618
1757
  const rawRs = parseInt(el.getAttribute("rowSpan") || "1", 10);
1619
1758
  const rs = isNaN(rawRs) ? 1 : rawRs;
1620
- tableCtx.cell.colSpan = clampSpan(cs, _chunk46VU6YXFcjs.MAX_COLS);
1621
- tableCtx.cell.rowSpan = clampSpan(rs, _chunk46VU6YXFcjs.MAX_ROWS);
1759
+ tableCtx.cell.colSpan = clampSpan(cs, _chunkGGZ5PSJOcjs.MAX_COLS);
1760
+ tableCtx.cell.rowSpan = clampSpan(rs, _chunkGGZ5PSJOcjs.MAX_ROWS);
1622
1761
  }
1623
1762
  break;
1624
1763
  case "p": {
1764
+ const paraPg = _optionalChain([ctx, 'access', _32 => _32.paraPage, 'optionalAccess', _33 => _33.get, 'call', _34 => _34(el)]);
1765
+ if (paraPg !== void 0 && ctx.pageBase !== void 0) ctx.page = ctx.pageBase + paraPg + 1;
1625
1766
  const { text: rawText, href, footnote, style, segments } = extractParagraphInfo(el, ctx.styleMap, ctx);
1626
1767
  let text = rawText;
1627
1768
  let headingLevel;
1628
1769
  const ph = resolveParaHeading(el, ctx);
1629
1770
  if (text) {
1630
- if (_optionalChain([ph, 'optionalAccess', _32 => _32.prefix])) text = ph.prefix + " " + text;
1631
- headingLevel = _optionalChain([ph, 'optionalAccess', _33 => _33.headingLevel]);
1771
+ if (_optionalChain([ph, 'optionalAccess', _35 => _35.prefix])) text = ph.prefix + " " + text;
1772
+ headingLevel = _optionalChain([ph, 'optionalAccess', _36 => _36.headingLevel]);
1632
1773
  }
1633
1774
  if (segments) {
1634
- const cell2 = _nullishCoalesce(_optionalChain([tableCtx, 'optionalAccess', _34 => _34.cell]), () => ( null));
1775
+ const cell2 = _nullishCoalesce(_optionalChain([tableCtx, 'optionalAccess', _37 => _37.cell]), () => ( null));
1635
1776
  if (cell2) cell2.lineOpen = false;
1636
1777
  const segs = [...segments];
1637
- if (_optionalChain([ph, 'optionalAccess', _35 => _35.prefix])) {
1778
+ if (_optionalChain([ph, 'optionalAccess', _38 => _38.prefix])) {
1638
1779
  const fi = segs.findIndex((s) => s);
1639
1780
  if (fi >= 0) segs[fi] = ph.prefix + " " + segs[fi];
1640
1781
  }
@@ -1643,7 +1784,7 @@ function walkSection(node, blocks, tableCtx, tableStack, ctx, depth = 0) {
1643
1784
  const flush = () => {
1644
1785
  const s = segs[segIdx++];
1645
1786
  if (!s) return;
1646
- const block = { type: "paragraph", text: s, pageNumber: ctx.sectionNum };
1787
+ const block = { type: "paragraph", text: s, pageNumber: ctx.page };
1647
1788
  if (first && !cell2) {
1648
1789
  first = false;
1649
1790
  if (style) block.style = style;
@@ -1662,14 +1803,14 @@ function walkSection(node, blocks, tableCtx, tableStack, ctx, depth = 0) {
1662
1803
  break;
1663
1804
  }
1664
1805
  if (text) {
1665
- if (_optionalChain([tableCtx, 'optionalAccess', _36 => _36.cell])) {
1806
+ if (_optionalChain([tableCtx, 'optionalAccess', _39 => _39.cell])) {
1666
1807
  const cell2 = tableCtx.cell;
1667
1808
  if (footnote) text += ` (\uC8FC: ${footnote})`;
1668
1809
  cell2.text += (cell2.text || cell2.paraSeen ? "\n" : "") + text;
1669
1810
  cell2.paraSeen = true;
1670
- const cellBlock = { type: "paragraph", text, pageNumber: ctx.sectionNum };
1811
+ const cellBlock = { type: "paragraph", text, pageNumber: ctx.page };
1671
1812
  const cellSpanMode = spanModeOf(ctx.shared.kordocLayout);
1672
- if (cellSpanMode && !_optionalChain([ph, 'optionalAccess', _37 => _37.prefix])) {
1813
+ if (cellSpanMode && !_optionalChain([ph, 'optionalAccess', _40 => _40.prefix])) {
1673
1814
  const spans = extractRunSpans(el, ctx, cellSpanMode, cellSpanMode !== "kordoc");
1674
1815
  if (spans && spans.map((s) => s.text).join("").replace(/[ \t]+/g, " ").trim() === text) {
1675
1816
  cellBlock.spans = spans;
@@ -1679,16 +1820,16 @@ function walkSection(node, blocks, tableCtx, tableStack, ctx, depth = 0) {
1679
1820
  (cell2.blocks ??= []).push(cellBlock);
1680
1821
  } else if (!tableCtx) {
1681
1822
  if (ctx.shared.kordocLayout && /^─{10,}$/.test(text)) {
1682
- blocks.push({ type: "separator", pageNumber: ctx.sectionNum });
1823
+ blocks.push({ type: "separator", pageNumber: ctx.page });
1683
1824
  tableCtx = walkParagraphChildren(el, blocks, tableCtx, tableStack, ctx, depth + 1);
1684
1825
  break;
1685
1826
  }
1686
- const block = { type: headingLevel ? "heading" : "paragraph", text, pageNumber: ctx.sectionNum };
1827
+ const block = { type: headingLevel ? "heading" : "paragraph", text, pageNumber: ctx.page };
1687
1828
  if (headingLevel) block.level = headingLevel;
1688
1829
  if (style) block.style = style;
1689
1830
  if (href) block.href = href;
1690
1831
  if (footnote) block.footnoteText = footnote;
1691
- const ind = _optionalChain([ctx, 'access', _38 => _38.styleMap, 'optionalAccess', _39 => _39.paraIndents, 'access', _40 => _40.get, 'call', _41 => _41(_nullishCoalesce(el.getAttribute("paraPrIDRef"), () => ( "")))]);
1832
+ const ind = _optionalChain([ctx, 'access', _41 => _41.styleMap, 'optionalAccess', _42 => _42.paraIndents, 'access', _43 => _43.get, 'call', _44 => _44(_nullishCoalesce(el.getAttribute("paraPrIDRef"), () => ( "")))]);
1692
1833
  if (ind) {
1693
1834
  const eff = ind.left + Math.max(0, ind.intent);
1694
1835
  if (eff > 0) block.indent = eff;
@@ -1699,7 +1840,7 @@ function walkSection(node, blocks, tableCtx, tableStack, ctx, depth = 0) {
1699
1840
  }
1700
1841
  const spanMode = spanModeOf(ctx.shared.kordocLayout);
1701
1842
  if (!headingLevel && spanMode) {
1702
- if (!_optionalChain([ph, 'optionalAccess', _42 => _42.prefix])) {
1843
+ if (!_optionalChain([ph, 'optionalAccess', _45 => _45.prefix])) {
1703
1844
  const spans = extractRunSpans(el, ctx, spanMode, spanMode === "gongmun");
1704
1845
  if (spans && spans.map((s) => s.text).join("").replace(/[ \t]+/g, " ").trim() === text) {
1705
1846
  block.spans = spans;
@@ -1709,17 +1850,17 @@ function walkSection(node, blocks, tableCtx, tableStack, ctx, depth = 0) {
1709
1850
  }
1710
1851
  blocks.push(block);
1711
1852
  } else {
1712
- blocks.push({ type: "paragraph", text, pageNumber: ctx.sectionNum });
1853
+ blocks.push({ type: "paragraph", text, pageNumber: ctx.page });
1713
1854
  }
1714
1855
  } else if (ctx.shared.keepEmptyParagraphs && !hasObjectDescendant(el)) {
1715
- if (_optionalChain([tableCtx, 'optionalAccess', _43 => _43.cell])) {
1856
+ if (_optionalChain([tableCtx, 'optionalAccess', _46 => _46.cell])) {
1716
1857
  const cell2 = tableCtx.cell;
1717
1858
  if (cell2.text || cell2.paraSeen) cell2.text += "\n";
1718
1859
  cell2.paraSeen = true;
1719
1860
  cell2.lineOpen = false;
1720
- (cell2.blocks ??= []).push({ type: "paragraph", text: "", pageNumber: ctx.sectionNum });
1861
+ (cell2.blocks ??= []).push({ type: "paragraph", text: "", pageNumber: ctx.page });
1721
1862
  } else if (!tableCtx) {
1722
- blocks.push({ type: "paragraph", text: "", pageNumber: ctx.sectionNum });
1863
+ blocks.push({ type: "paragraph", text: "", pageNumber: ctx.page });
1723
1864
  }
1724
1865
  }
1725
1866
  tableCtx = walkParagraphChildren(el, blocks, tableCtx, tableStack, ctx, depth + 1);
@@ -1729,7 +1870,7 @@ function walkSection(node, blocks, tableCtx, tableStack, ctx, depth = 0) {
1729
1870
  case "pic":
1730
1871
  case "shape":
1731
1872
  case "drawingObject": {
1732
- if (_optionalChain([tableCtx, 'optionalAccess', _44 => _44.cell])) {
1873
+ if (_optionalChain([tableCtx, 'optionalAccess', _47 => _47.cell])) {
1733
1874
  const sink = [];
1734
1875
  handleShape(el, sink, ctx);
1735
1876
  mergeBlocksIntoCell(tableCtx.cell, sink);
@@ -1742,7 +1883,7 @@ function walkSection(node, blocks, tableCtx, tableStack, ctx, depth = 0) {
1742
1883
  case "memogroup":
1743
1884
  case "memo": {
1744
1885
  if (ctx.warnings && extractTextFromNode(el)) {
1745
- ctx.warnings.push({ page: ctx.sectionNum, message: "\uBA54\uBAA8 \uD14D\uC2A4\uD2B8 \uBCF8\uBB38 \uC81C\uC678: memogroup", code: "HIDDEN_TEXT_FILTERED" });
1886
+ ctx.warnings.push({ page: ctx.page, message: "\uBA54\uBAA8 \uD14D\uC2A4\uD2B8 \uBCF8\uBB38 \uC81C\uC678: memogroup", code: "HIDDEN_TEXT_FILTERED" });
1746
1887
  }
1747
1888
  break;
1748
1889
  }
@@ -1754,9 +1895,9 @@ function walkSection(node, blocks, tableCtx, tableStack, ctx, depth = 0) {
1754
1895
  }
1755
1896
  function handleShape(el, sink, ctx) {
1756
1897
  const imgRef = extractImageRef(el);
1757
- const drawTextChild = findDescendant(el, "drawText");
1898
+ const drawTextChild = findDescendant2(el, "drawText");
1758
1899
  if (imgRef) {
1759
- const block = { type: "image", text: imgRef, pageNumber: ctx.sectionNum };
1900
+ const block = { type: "image", text: imgRef, pageNumber: ctx.page };
1760
1901
  const alt = userShapeComment(el);
1761
1902
  if (alt) block.footnoteText = alt;
1762
1903
  sink.push(block);
@@ -1767,11 +1908,11 @@ function handleShape(el, sink, ctx) {
1767
1908
  const capEl = findChildByLocalName(el, "caption");
1768
1909
  if (capEl) {
1769
1910
  const capText = collectSubListText(capEl, ctx);
1770
- if (capText) sink.push({ type: "paragraph", text: capText, pageNumber: ctx.sectionNum });
1911
+ if (capText) sink.push({ type: "paragraph", text: capText, pageNumber: ctx.page });
1771
1912
  }
1772
1913
  if (!imgRef && !drawTextChild && ctx.warnings && ctx.sectionNum) {
1773
1914
  const localTag = (el.tagName || el.localName || "").replace(/^[^:]+:/, "");
1774
- ctx.warnings.push({ page: ctx.sectionNum, message: `\uC2A4\uD0B5\uB41C \uC694\uC18C: ${localTag}`, code: "SKIPPED_IMAGE" });
1915
+ ctx.warnings.push({ page: ctx.page, message: `\uC2A4\uD0B5\uB41C \uC694\uC18C: ${localTag}`, code: "SKIPPED_IMAGE" });
1775
1916
  }
1776
1917
  }
1777
1918
  function userShapeComment(el) {
@@ -1834,7 +1975,7 @@ function hasPageAutoNum(el, depth = 0) {
1834
1975
  const ch = children[i];
1835
1976
  if (ch.nodeType !== 1) continue;
1836
1977
  const tag = (ch.tagName || ch.localName || "").replace(/^[^:]+:/, "");
1837
- if (tag === "autoNum" && _optionalChain([ch, 'access', _45 => _45.getAttribute, 'optionalCall', _46 => _46("numType")]) === "PAGE") return true;
1978
+ if (tag === "autoNum" && _optionalChain([ch, 'access', _48 => _48.getAttribute, 'optionalCall', _49 => _49("numType")]) === "PAGE") return true;
1838
1979
  if (hasPageAutoNum(ch, depth + 1)) return true;
1839
1980
  }
1840
1981
  return false;
@@ -1856,7 +1997,7 @@ function collectSubListContent(el, ctx, depth = 0) {
1856
1997
  const t = extractParagraphInfo(ch, ctx.styleMap, ctx).text;
1857
1998
  if (t) {
1858
1999
  parts.push(t);
1859
- out.blocks.push({ type: "paragraph", text: t, pageNumber: ctx.sectionNum });
2000
+ out.blocks.push({ type: "paragraph", text: t, pageNumber: ctx.page });
1860
2001
  }
1861
2002
  const tbls = [];
1862
2003
  findTopLevelTbls(ch, tbls);
@@ -1889,7 +2030,7 @@ function buildSubListTable(el, ctx, depth) {
1889
2030
  const sink = [];
1890
2031
  const st = { rows: [], currentRow: [], cell: null };
1891
2032
  walkSection(el, sink, st, [], ctx, depth + 1);
1892
- let flat = _chunk46VU6YXFcjs.convertTableToText.call(void 0, st.rows);
2033
+ let flat = _chunkGGZ5PSJOcjs.convertTableToText.call(void 0, st.rows);
1893
2034
  if (st.caption) flat = st.caption + (flat ? "\n" + flat : "");
1894
2035
  const built = [];
1895
2036
  completeTable(st, [], built, ctx);
@@ -1929,7 +2070,7 @@ function walkParagraphChildren(node, blocks, tableCtx, tableStack, ctx, depth =
1929
2070
  const chan = kordocTableChannel(el, ctx);
1930
2071
  if (chan) {
1931
2072
  if (chan.kind === "heading" && chan.text) {
1932
- blocks.push({ type: "heading", level: chan.level, text: chan.text, pageNumber: ctx.sectionNum });
2073
+ blocks.push({ type: "heading", level: chan.level, text: chan.text, pageNumber: ctx.page });
1933
2074
  }
1934
2075
  continue;
1935
2076
  }
@@ -1941,14 +2082,14 @@ function walkParagraphChildren(node, blocks, tableCtx, tableStack, ctx, depth =
1941
2082
  } else if (localTag === "caption" && !inShape) {
1942
2083
  const cap = collectSubListContent(el, ctx);
1943
2084
  if (cap.text) {
1944
- if (_optionalChain([tableCtx, 'optionalAccess', _47 => _47.cell])) mergeBlocksIntoCell(tableCtx.cell, [{ type: "paragraph", text: cap.text, pageNumber: ctx.sectionNum }]);
2085
+ if (_optionalChain([tableCtx, 'optionalAccess', _50 => _50.cell])) mergeBlocksIntoCell(tableCtx.cell, [{ type: "paragraph", text: cap.text, pageNumber: ctx.page }]);
1945
2086
  else if (tableCtx) {
1946
2087
  tableCtx.caption = (tableCtx.caption ? tableCtx.caption + "\n" : "") + cap.text;
1947
2088
  if (cap.hasStructure) (tableCtx.captionBlocks ??= []).push(...cap.blocks);
1948
- } else blocks.push({ type: "paragraph", text: cap.text, pageNumber: ctx.sectionNum });
2089
+ } else blocks.push({ type: "paragraph", text: cap.text, pageNumber: ctx.page });
1949
2090
  }
1950
2091
  } else if (localTag === "pic" || localTag === "shape" || localTag === "drawingObject") {
1951
- if (_optionalChain([tableCtx, 'optionalAccess', _48 => _48.cell])) {
2092
+ if (_optionalChain([tableCtx, 'optionalAccess', _51 => _51.cell])) {
1952
2093
  const sink = [];
1953
2094
  handleShape(el, sink, ctx);
1954
2095
  mergeBlocksIntoCell(tableCtx.cell, sink);
@@ -1956,7 +2097,7 @@ function walkParagraphChildren(node, blocks, tableCtx, tableStack, ctx, depth =
1956
2097
  handleShape(el, blocks, ctx);
1957
2098
  }
1958
2099
  } else if (localTag === "drawText") {
1959
- if (_optionalChain([tableCtx, 'optionalAccess', _49 => _49.cell])) {
2100
+ if (_optionalChain([tableCtx, 'optionalAccess', _52 => _52.cell])) {
1960
2101
  const sink = [];
1961
2102
  extractDrawTextBlocks(el, sink, ctx);
1962
2103
  mergeBlocksIntoCell(tableCtx.cell, sink);
@@ -1988,9 +2129,9 @@ function hasObjectDescendant(node, depth = 0) {
1988
2129
  return false;
1989
2130
  }
1990
2131
  function isInlineTbl(tbl2) {
1991
- return _optionalChain([findChildByLocalName, 'call', _50 => _50(tbl2, "pos"), 'optionalAccess', _51 => _51.getAttribute, 'call', _52 => _52("treatAsChar")]) === "1";
2132
+ return _optionalChain([findChildByLocalName, 'call', _53 => _53(tbl2, "pos"), 'optionalAccess', _54 => _54.getAttribute, 'call', _55 => _55("treatAsChar")]) === "1";
1992
2133
  }
1993
- function findDescendant(node, targetTag, depth = 0) {
2134
+ function findDescendant2(node, targetTag, depth = 0) {
1994
2135
  if (depth > 5) return null;
1995
2136
  const children = node.childNodes;
1996
2137
  if (!children) return null;
@@ -1999,7 +2140,7 @@ function findDescendant(node, targetTag, depth = 0) {
1999
2140
  if (child.nodeType !== 1) continue;
2000
2141
  const tag = (child.tagName || child.localName || "").replace(/^[^:]+:/, "");
2001
2142
  if (tag === targetTag) return child;
2002
- const found = findDescendant(child, targetTag, depth + 1);
2143
+ const found = findDescendant2(child, targetTag, depth + 1);
2003
2144
  if (found) return found;
2004
2145
  }
2005
2146
  return null;
@@ -2019,8 +2160,8 @@ function extractDrawTextBlocks(drawTextNode, blocks, ctx) {
2019
2160
  let text = info.text.trim();
2020
2161
  const ph = resolveParaHeading(child, ctx);
2021
2162
  if (text) {
2022
- if (_optionalChain([ph, 'optionalAccess', _53 => _53.prefix])) text = ph.prefix + " " + text;
2023
- const block = { type: "paragraph", text, style: _nullishCoalesce(info.style, () => ( void 0)), pageNumber: ctx.sectionNum };
2163
+ if (_optionalChain([ph, 'optionalAccess', _56 => _56.prefix])) text = ph.prefix + " " + text;
2164
+ const block = { type: "paragraph", text, style: _nullishCoalesce(info.style, () => ( void 0)), pageNumber: ctx.page };
2024
2165
  if (info.href) block.href = info.href;
2025
2166
  if (info.footnote) block.footnoteText = info.footnote;
2026
2167
  blocks.push(block);
@@ -2044,13 +2185,13 @@ function extractHyperlinkHref(fieldBegin) {
2044
2185
  let url = (ch.textContent || "").trim();
2045
2186
  if (!url) continue;
2046
2187
  url = url.replace(/^https?:\/\/(?=https?:\/\/)/i, "");
2047
- const safe = _chunkDZBMQC2Ncjs.sanitizeHref.call(void 0, url);
2188
+ const safe = _chunkJ7DBL77Bcjs.sanitizeHref.call(void 0, url);
2048
2189
  if (safe) return safe;
2049
2190
  }
2050
2191
  return void 0;
2051
2192
  }
2052
2193
  function isInDeletedRange(ctx) {
2053
- return (_nullishCoalesce(_optionalChain([ctx, 'optionalAccess', _54 => _54.shared, 'access', _55 => _55.track, 'access', _56 => _56.deleteDepth]), () => ( 0))) > 0;
2194
+ return (_nullishCoalesce(_optionalChain([ctx, 'optionalAccess', _57 => _57.shared, 'access', _58 => _58.track, 'access', _59 => _59.deleteDepth]), () => ( 0))) > 0;
2054
2195
  }
2055
2196
  function extractParagraphInfo(para2, styleMap, ctx) {
2056
2197
  let text = "";
@@ -2071,7 +2212,7 @@ function extractParagraphInfo(para2, styleMap, ctx) {
2071
2212
  };
2072
2213
  const onFieldEnd = () => {
2073
2214
  const open = openFields.pop();
2074
- if (_optionalChain([open, 'optionalAccess', _57 => _57.rangeIdx]) !== void 0) linkRanges[open.rangeIdx].end = text.length;
2215
+ if (_optionalChain([open, 'optionalAccess', _60 => _60.rangeIdx]) !== void 0) linkRanges[open.rangeIdx].end = text.length;
2075
2216
  };
2076
2217
  const handleCtrl = (ctrlEl) => {
2077
2218
  const kids = ctrlEl.childNodes;
@@ -2122,8 +2263,8 @@ function extractParagraphInfo(para2, styleMap, ctx) {
2122
2263
  // 삽입분은 최종본에 포함
2123
2264
  // 숨은 설명 — 본문 혼입 차단
2124
2265
  case "hiddenComment": {
2125
- if (_optionalChain([ctx, 'optionalAccess', _58 => _58.warnings]) && extractTextFromNode(k)) {
2126
- ctx.warnings.push({ page: ctx.sectionNum, message: "\uC228\uC740 \uC124\uBA85 \uD14D\uC2A4\uD2B8 \uC81C\uC678: hiddenComment", code: "HIDDEN_TEXT_FILTERED" });
2266
+ if (_optionalChain([ctx, 'optionalAccess', _61 => _61.warnings]) && extractTextFromNode(k)) {
2267
+ ctx.warnings.push({ page: ctx.page, message: "\uC228\uC740 \uC124\uBA85 \uD14D\uC2A4\uD2B8 \uC81C\uC678: hiddenComment", code: "HIDDEN_TEXT_FILTERED" });
2127
2268
  }
2128
2269
  break;
2129
2270
  }
@@ -2142,8 +2283,8 @@ function extractParagraphInfo(para2, styleMap, ctx) {
2142
2283
  break;
2143
2284
  // 미지원 요소 — 텍스트를 가졌으면 무음 손실 대신 경고
2144
2285
  default: {
2145
- if (_optionalChain([ctx, 'optionalAccess', _59 => _59.warnings]) && extractTextFromNode(k)) {
2146
- ctx.warnings.push({ page: ctx.sectionNum, message: `\uBBF8\uC9C0\uC6D0 \uC81C\uC5B4 \uC694\uC18C\uC758 \uD14D\uC2A4\uD2B8 \uC190\uC2E4: ${ktag}`, code: "UNSUPPORTED_ELEMENT" });
2286
+ if (_optionalChain([ctx, 'optionalAccess', _62 => _62.warnings]) && extractTextFromNode(k)) {
2287
+ ctx.warnings.push({ page: ctx.page, message: `\uBBF8\uC9C0\uC6D0 \uC81C\uC5B4 \uC694\uC18C\uC758 \uD14D\uC2A4\uD2B8 \uC190\uC2E4: ${ktag}`, code: "UNSUPPORTED_ELEMENT" });
2147
2288
  }
2148
2289
  }
2149
2290
  }
@@ -2160,7 +2301,7 @@ function extractParagraphInfo(para2, styleMap, ctx) {
2160
2301
  if (isInDeletedRange(ctx)) {
2161
2302
  if (t && ctx && !ctx.shared.track.warned) {
2162
2303
  ctx.shared.track.warned = true;
2163
- _optionalChain([ctx, 'access', _60 => _60.warnings, 'optionalAccess', _61 => _61.push, 'call', _62 => _62({ page: ctx.sectionNum, message: "\uBCC0\uACBD\uCD94\uC801 \uC0AD\uC81C \uD14D\uC2A4\uD2B8 \uCD9C\uB825 \uC81C\uC678", code: "HIDDEN_TEXT_FILTERED" })]);
2304
+ _optionalChain([ctx, 'access', _63 => _63.warnings, 'optionalAccess', _64 => _64.push, 'call', _65 => _65({ page: ctx.page, message: "\uBCC0\uACBD\uCD94\uC801 \uC0AD\uC81C \uD14D\uC2A4\uD2B8 \uCD9C\uB825 \uC81C\uC678", code: "HIDDEN_TEXT_FILTERED" })]);
2164
2305
  }
2165
2306
  } else {
2166
2307
  text += t.replace(/\x1E/g, "");
@@ -2204,7 +2345,7 @@ function extractParagraphInfo(para2, styleMap, ctx) {
2204
2345
  case "hyperlink": {
2205
2346
  const url = child.getAttribute("url") || child.getAttribute("href") || "";
2206
2347
  if (url) {
2207
- const safe = _chunkDZBMQC2Ncjs.sanitizeHref.call(void 0, url);
2348
+ const safe = _chunkJ7DBL77Bcjs.sanitizeHref.call(void 0, url);
2208
2349
  if (safe) href = safe;
2209
2350
  }
2210
2351
  walk(child, depth + 1);
@@ -2270,9 +2411,9 @@ function extractParagraphInfo(para2, styleMap, ctx) {
2270
2411
  const latex = hmlToLatex(raw).trim();
2271
2412
  if (latex) text += " $" + latex + "$ ";
2272
2413
  } catch (e13) {
2273
- if (_optionalChain([ctx, 'optionalAccess', _63 => _63.warnings])) {
2414
+ if (_optionalChain([ctx, 'optionalAccess', _66 => _66.warnings])) {
2274
2415
  ctx.warnings.push({
2275
- page: ctx.sectionNum,
2416
+ page: ctx.page,
2276
2417
  message: `\uC218\uC2DD LaTeX \uBCC0\uD658 \uC2E4\uD328 \u2014 \uC218\uC2DD \uD14D\uC2A4\uD2B8 \uC81C\uC678: ${raw.trim().slice(0, 40)}`,
2277
2418
  code: "PARTIAL_PARSE"
2278
2419
  });
@@ -2358,13 +2499,13 @@ function extractRunSpans(para2, ctx, mode, requireMixed) {
2358
2499
  if (tag !== "run" && tag !== "r") return null;
2359
2500
  let text = "";
2360
2501
  const rkids = child.childNodes;
2361
- for (let j = 0; j < (_nullishCoalesce(_optionalChain([rkids, 'optionalAccess', _64 => _64.length]), () => ( 0))); j++) {
2502
+ for (let j = 0; j < (_nullishCoalesce(_optionalChain([rkids, 'optionalAccess', _67 => _67.length]), () => ( 0))); j++) {
2362
2503
  const rc = rkids[j];
2363
2504
  if (rc.nodeType !== 1) continue;
2364
2505
  const rtag = (rc.tagName || rc.localName || "").replace(/^[^:]+:/, "");
2365
2506
  if (rtag === "t") {
2366
2507
  const tkids = rc.childNodes;
2367
- for (let k = 0; k < (_nullishCoalesce(_optionalChain([tkids, 'optionalAccess', _65 => _65.length]), () => ( 0))); k++) {
2508
+ for (let k = 0; k < (_nullishCoalesce(_optionalChain([tkids, 'optionalAccess', _68 => _68.length]), () => ( 0))); k++) {
2368
2509
  const tk = tkids[k];
2369
2510
  if (tk.nodeType === 3 || tk.nodeType === 4) text += tk.textContent || "";
2370
2511
  else if (tk.nodeType === 1) return null;
@@ -2382,10 +2523,10 @@ function extractRunSpans(para2, ctx, mode, requireMixed) {
2382
2523
  const span = { text };
2383
2524
  if (mode !== "foreign" && prId === KORDOC_CHAR_CODE) span.code = true;
2384
2525
  else {
2385
- if (_optionalChain([cp, 'optionalAccess', _66 => _66.bold])) span.bold = true;
2386
- if (_optionalChain([cp, 'optionalAccess', _67 => _67.italic])) span.italic = true;
2387
- if (_optionalChain([cp, 'optionalAccess', _68 => _68.strike])) span.strike = true;
2388
- if (_optionalChain([cp, 'optionalAccess', _69 => _69.underline])) span.underline = true;
2526
+ if (_optionalChain([cp, 'optionalAccess', _69 => _69.bold])) span.bold = true;
2527
+ if (_optionalChain([cp, 'optionalAccess', _70 => _70.italic])) span.italic = true;
2528
+ if (_optionalChain([cp, 'optionalAccess', _71 => _71.strike])) span.strike = true;
2529
+ if (_optionalChain([cp, 'optionalAccess', _72 => _72.underline])) span.underline = true;
2389
2530
  }
2390
2531
  if (span.bold || span.italic || span.strike || span.underline || span.code) styled = true;
2391
2532
  spans.push(span);
@@ -2408,12 +2549,12 @@ function gongmunDepthFromIndent(para2, left, ctx) {
2408
2549
  if (!styleMap) return null;
2409
2550
  let unit = 0;
2410
2551
  const kids = para2.childNodes;
2411
- for (let i = 0; i < (_nullishCoalesce(_optionalChain([kids, 'optionalAccess', _70 => _70.length]), () => ( 0))); i++) {
2552
+ for (let i = 0; i < (_nullishCoalesce(_optionalChain([kids, 'optionalAccess', _73 => _73.length]), () => ( 0))); i++) {
2412
2553
  const child = kids[i];
2413
2554
  if (child.nodeType !== 1) continue;
2414
2555
  const tag = (child.tagName || child.localName || "").replace(/^[^:]+:/, "");
2415
2556
  if (tag !== "run" && tag !== "r") continue;
2416
- const size = _optionalChain([styleMap, 'access', _71 => _71.charProperties, 'access', _72 => _72.get, 'call', _73 => _73(_nullishCoalesce(child.getAttribute("charPrIDRef"), () => ( ""))), 'optionalAccess', _74 => _74.fontSize]);
2557
+ const size = _optionalChain([styleMap, 'access', _74 => _74.charProperties, 'access', _75 => _75.get, 'call', _76 => _76(_nullishCoalesce(child.getAttribute("charPrIDRef"), () => ( ""))), 'optionalAccess', _77 => _77.fontSize]);
2417
2558
  if (size) unit = size * 100;
2418
2559
  break;
2419
2560
  }
@@ -2429,6 +2570,7 @@ function gongmunDepthFromIndent(para2, left, ctx) {
2429
2570
  var TAG_PARA_HEADER = 66;
2430
2571
  var TAG_PARA_TEXT = 67;
2431
2572
  var TAG_CHAR_SHAPE = 68;
2573
+ var TAG_PARA_LINE_SEG = 69;
2432
2574
  var TAG_CTRL_HEADER = 71;
2433
2575
  var TAG_LIST_HEADER = 72;
2434
2576
  var TAG_TABLE = 77;
@@ -2486,7 +2628,7 @@ function decompressStream(data) {
2486
2628
  return _zlib.inflateRawSync.call(void 0, data, opts);
2487
2629
  }
2488
2630
  function parseFileHeader(data) {
2489
- if (data.length < 40) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("FileHeader\uAC00 \uB108\uBB34 \uC9E7\uC2B5\uB2C8\uB2E4 (\uCD5C\uC18C 40\uBC14\uC774\uD2B8)");
2631
+ if (data.length < 40) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("FileHeader\uAC00 \uB108\uBB34 \uC9E7\uC2B5\uB2C8\uB2E4 (\uCD5C\uC18C 40\uBC14\uC774\uD2B8)");
2490
2632
  const sig = data.subarray(0, 32).toString("utf8").replace(/\0+$/, "");
2491
2633
  return {
2492
2634
  signature: sig,
@@ -2619,7 +2761,7 @@ function appendParaText(state, data, resolveControl) {
2619
2761
  const resolveAt = (byteOffset, extended) => {
2620
2762
  const ctrlId = data.readUInt32LE(byteOffset);
2621
2763
  const idx = extended ? state.ctrlIdx : -1;
2622
- const replacement = _optionalChain([resolveControl, 'optionalCall', _75 => _75(idx, ctrlId)]);
2764
+ const replacement = _optionalChain([resolveControl, 'optionalCall', _78 => _78(idx, ctrlId)]);
2623
2765
  if (replacement) result += replacement;
2624
2766
  if (extended) state.ctrlIdx++;
2625
2767
  };
@@ -2823,7 +2965,7 @@ function extractHwp5Images(fileIndex, blocks, warnings, sweepUnreferenced) {
2823
2965
  const binDataMap = /* @__PURE__ */ new Map();
2824
2966
  if (fileIndex) {
2825
2967
  for (const entry of fileIndex) {
2826
- if (!_optionalChain([entry, 'optionalAccess', _76 => _76.name]) || !entry.content) continue;
2968
+ if (!_optionalChain([entry, 'optionalAccess', _79 => _79.name]) || !entry.content) continue;
2827
2969
  const match = entry.name.match(BIN_ENTRY_RE);
2828
2970
  if (!match) continue;
2829
2971
  const idx = parseInt(match[1], 16);
@@ -2899,11 +3041,11 @@ function collectImageBlocks2(blocks, out, ownerCell, depth = 0) {
2899
3041
  } else if (block.type === "table" && block.table) {
2900
3042
  for (const row of block.table.cells) {
2901
3043
  for (const cell2 of row) {
2902
- if (_optionalChain([cell2, 'access', _77 => _77.blocks, 'optionalAccess', _78 => _78.length])) collectImageBlocks2(cell2.blocks, out, cell2, depth + 1);
3044
+ if (_optionalChain([cell2, 'access', _80 => _80.blocks, 'optionalAccess', _81 => _81.length])) collectImageBlocks2(cell2.blocks, out, cell2, depth + 1);
2903
3045
  }
2904
3046
  }
2905
3047
  }
2906
- if (_optionalChain([block, 'access', _79 => _79.children, 'optionalAccess', _80 => _80.length])) collectImageBlocks2(block.children, out, ownerCell, depth + 1);
3048
+ if (_optionalChain([block, 'access', _82 => _82.children, 'optionalAccess', _83 => _83.length])) collectImageBlocks2(block.children, out, ownerCell, depth + 1);
2907
3049
  }
2908
3050
  }
2909
3051
  async function extractImagesFromZip(zip, blocks, decompressed, warnings, sweepUnreferenced) {
@@ -2938,13 +3080,13 @@ async function extractImagesFromZip(zip, blocks, decompressed, warnings, sweepUn
2938
3080
  }
2939
3081
  const allCandidates = resolvedPath ? [resolvedPath, ...candidates] : candidates;
2940
3082
  for (const path of allCandidates) {
2941
- if (_chunkDZBMQC2Ncjs.isPathTraversal.call(void 0, path)) continue;
3083
+ if (_chunkJ7DBL77Bcjs.isPathTraversal.call(void 0, path)) continue;
2942
3084
  const file = zip.file(path);
2943
3085
  if (!file) continue;
2944
3086
  try {
2945
3087
  const data = await file.async("uint8array");
2946
3088
  decompressed.total += data.length;
2947
- if (decompressed.total > MAX_DECOMPRESS_SIZE) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("ZIP \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (ZIP bomb \uC758\uC2EC)");
3089
+ if (decompressed.total > MAX_DECOMPRESS_SIZE) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("ZIP \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (ZIP bomb \uC758\uC2EC)");
2948
3090
  const ext = path.includes(".") ? path.split(".").pop() || "png" : "png";
2949
3091
  const mimeType = imageExtToMime(ext);
2950
3092
  imageIndex++;
@@ -2954,10 +3096,10 @@ async function extractImagesFromZip(zip, blocks, decompressed, warnings, sweepUn
2954
3096
  usedPaths.add(path);
2955
3097
  break;
2956
3098
  } catch (err) {
2957
- if (err instanceof _chunkDZBMQC2Ncjs.KordocError) throw err;
3099
+ if (err instanceof _chunkJ7DBL77Bcjs.KordocError) throw err;
2958
3100
  }
2959
3101
  }
2960
- if (!img) _optionalChain([warnings, 'optionalAccess', _81 => _81.push, 'call', _82 => _82({ page: block.pageNumber, message: `\uC774\uBBF8\uC9C0 \uD30C\uC77C \uC5C6\uC74C: ${ref}`, code: "SKIPPED_IMAGE" })]);
3102
+ if (!img) _optionalChain([warnings, 'optionalAccess', _84 => _84.push, 'call', _85 => _85({ page: block.pageNumber, message: `\uC774\uBBF8\uC9C0 \uD30C\uC77C \uC5C6\uC74C: ${ref}`, code: "SKIPPED_IMAGE" })]);
2961
3103
  resolved.set(ref, img);
2962
3104
  }
2963
3105
  if (!img) {
@@ -2974,11 +3116,11 @@ async function extractImagesFromZip(zip, blocks, decompressed, warnings, sweepUn
2974
3116
  if (sweepUnreferenced) {
2975
3117
  const binEntries = zip.file(/(?:^|\/)BinData\//i);
2976
3118
  for (const file of binEntries) {
2977
- if (file.dir || usedPaths.has(file.name) || _chunkDZBMQC2Ncjs.isPathTraversal.call(void 0, file.name)) continue;
3119
+ if (file.dir || usedPaths.has(file.name) || _chunkJ7DBL77Bcjs.isPathTraversal.call(void 0, file.name)) continue;
2978
3120
  try {
2979
3121
  const data = await file.async("uint8array");
2980
3122
  decompressed.total += data.length;
2981
- if (decompressed.total > MAX_DECOMPRESS_SIZE) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("ZIP \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (ZIP bomb \uC758\uC2EC)");
3123
+ if (decompressed.total > MAX_DECOMPRESS_SIZE) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("ZIP \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (ZIP bomb \uC758\uC2EC)");
2982
3124
  const ext = file.name.includes(".") ? file.name.split(".").pop() || "" : "";
2983
3125
  let mimeType = imageExtToMime(ext);
2984
3126
  if (mimeType === "application/octet-stream") {
@@ -2992,8 +3134,8 @@ async function extractImagesFromZip(zip, blocks, decompressed, warnings, sweepUn
2992
3134
  images.push(img);
2993
3135
  blocks.push({ type: "image", text: filename, imageData: { data, mimeType, filename: file.name } });
2994
3136
  } catch (err) {
2995
- if (err instanceof _chunkDZBMQC2Ncjs.KordocError) throw err;
2996
- _optionalChain([warnings, 'optionalAccess', _83 => _83.push, 'call', _84 => _84({ message: `\uC774\uBBF8\uC9C0 \uCD94\uCD9C \uC2E4\uD328: ${file.name}`, code: "SKIPPED_IMAGE" })]);
3137
+ if (err instanceof _chunkJ7DBL77Bcjs.KordocError) throw err;
3138
+ _optionalChain([warnings, 'optionalAccess', _86 => _86.push, 'call', _87 => _87({ message: `\uC774\uBBF8\uC9C0 \uCD94\uCD9C \uC2E4\uD328: ${file.name}`, code: "SKIPPED_IMAGE" })]);
2997
3139
  }
2998
3140
  }
2999
3141
  }
@@ -3043,7 +3185,7 @@ function extractFromBrokenZip(buffer) {
3043
3185
  }
3044
3186
  const nameBytes = data.slice(pos + 30, pos + 30 + nameLen);
3045
3187
  const name = new TextDecoder().decode(nameBytes);
3046
- if (_chunkDZBMQC2Ncjs.isPathTraversal.call(void 0, name)) {
3188
+ if (_chunkJ7DBL77Bcjs.isPathTraversal.call(void 0, name)) {
3047
3189
  pos = fileStart + compSize;
3048
3190
  continue;
3049
3191
  }
@@ -3061,16 +3203,18 @@ function extractFromBrokenZip(buffer) {
3061
3203
  continue;
3062
3204
  }
3063
3205
  totalDecompressed += content.length * 2;
3064
- if (totalDecompressed > MAX_DECOMPRESS_SIZE) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC");
3206
+ if (totalDecompressed > MAX_DECOMPRESS_SIZE) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC");
3065
3207
  sectionNum++;
3066
- blocks.push(...parseSectionXml(content, void 0, warnings, sectionNum, shared));
3208
+ const secBlocks = parseSectionXml(content, void 0, warnings, sectionNum, shared);
3209
+ for (const b of secBlocks) b.pageNumber = sectionNum;
3210
+ blocks.push(...secBlocks);
3067
3211
  } catch (e17) {
3068
3212
  continue;
3069
3213
  }
3070
3214
  }
3071
- if (blocks.length === 0) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uC190\uC0C1\uB41C HWPX\uC5D0\uC11C \uC139\uC158 \uB370\uC774\uD130\uB97C \uBCF5\uAD6C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
3215
+ if (blocks.length === 0) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uC190\uC0C1\uB41C HWPX\uC5D0\uC11C \uC139\uC158 \uB370\uC774\uD130\uB97C \uBCF5\uAD6C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
3072
3216
  applyPageText(blocks, shared);
3073
- const markdown = _chunk46VU6YXFcjs.blocksToMarkdown.call(void 0, blocks);
3217
+ const markdown = _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, blocks);
3074
3218
  return { markdown, blocks, warnings: warnings.length > 0 ? warnings : void 0 };
3075
3219
  }
3076
3220
  async function readKordocLayout(zip) {
@@ -3079,7 +3223,7 @@ async function readKordocLayout(zip) {
3079
3223
  try {
3080
3224
  const xml = await file.async("text");
3081
3225
  if (!/<opf:meta\b[^>]*name="generator"[^>]*content="kordoc"/.test(xml)) return null;
3082
- return _nullishCoalesce(_optionalChain([xml, 'access', _85 => _85.match, 'call', _86 => _86(/<opf:meta\b[^>]*name="kordoc-layout"[^>]*content="([^"]*)"/), 'optionalAccess', _87 => _87[1]]), () => ( null));
3226
+ return _nullishCoalesce(_optionalChain([xml, 'access', _88 => _88.match, 'call', _89 => _89(/<opf:meta\b[^>]*name="kordoc-layout"[^>]*content="([^"]*)"/), 'optionalAccess', _90 => _90[1]]), () => ( null));
3083
3227
  } catch (e18) {
3084
3228
  return null;
3085
3229
  }
@@ -3095,18 +3239,18 @@ async function resolveSectionPaths(zip) {
3095
3239
  if (paths.length > 0) return paths;
3096
3240
  }
3097
3241
  const sectionFiles = zip.file(/[Ss]ection\d+\.xml$/);
3098
- return sectionFiles.map((f) => f.name).sort(_chunkDZBMQC2Ncjs.compareSectionPaths);
3242
+ return sectionFiles.map((f) => f.name).sort(_chunkJ7DBL77Bcjs.compareSectionPaths);
3099
3243
  }
3100
3244
  function parseSectionPathsFromManifest(xml) {
3101
3245
  const parser = createXmlParser();
3102
- const doc = parser.parseFromString(_chunkDZBMQC2Ncjs.stripDtd.call(void 0, xml), "text/xml");
3246
+ const doc = parser.parseFromString(_chunkJ7DBL77Bcjs.stripDtd.call(void 0, xml), "text/xml");
3103
3247
  const items = doc.getElementsByTagName("opf:item");
3104
3248
  const spine = doc.getElementsByTagName("opf:itemref");
3105
3249
  const idToHref = /* @__PURE__ */ new Map();
3106
3250
  for (let i = 0; i < items.length; i++) {
3107
3251
  const item = items[i];
3108
3252
  const id = item.getAttribute("id") || "";
3109
- const href = _chunkDZBMQC2Ncjs.normalizeSectionHref.call(void 0, item.getAttribute("href") || "");
3253
+ const href = _chunkJ7DBL77Bcjs.normalizeSectionHref.call(void 0, item.getAttribute("href") || "");
3110
3254
  if (id && href) idToHref.set(id, href);
3111
3255
  }
3112
3256
  if (spine.length > 0) {
@@ -3117,7 +3261,7 @@ function parseSectionPathsFromManifest(xml) {
3117
3261
  }
3118
3262
  if (ordered.length > 0) return ordered;
3119
3263
  }
3120
- return Array.from(idToHref.values()).sort(_chunkDZBMQC2Ncjs.compareSectionPaths);
3264
+ return Array.from(idToHref.values()).sort(_chunkJ7DBL77Bcjs.compareSectionPaths);
3121
3265
  }
3122
3266
 
3123
3267
  // src/hwpx/metadata.ts
@@ -3130,7 +3274,7 @@ async function extractHwpxMetadata(zip, metadata, decompressed) {
3130
3274
  const xml = await file.async("text");
3131
3275
  if (decompressed) {
3132
3276
  decompressed.total += xml.length * 2;
3133
- if (decompressed.total > MAX_DECOMPRESS_SIZE) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("ZIP \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (ZIP bomb \uC758\uC2EC)");
3277
+ if (decompressed.total > MAX_DECOMPRESS_SIZE) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("ZIP \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (ZIP bomb \uC758\uC2EC)");
3134
3278
  }
3135
3279
  parseDublinCoreMetadata(xml, metadata);
3136
3280
  if (metadata.title || metadata.author) return;
@@ -3140,13 +3284,13 @@ async function extractHwpxMetadata(zip, metadata, decompressed) {
3140
3284
  }
3141
3285
  function parseDublinCoreMetadata(xml, metadata) {
3142
3286
  const parser = createXmlParser();
3143
- const doc = parser.parseFromString(_chunkDZBMQC2Ncjs.stripDtd.call(void 0, xml), "text/xml");
3287
+ const doc = parser.parseFromString(_chunkJ7DBL77Bcjs.stripDtd.call(void 0, xml), "text/xml");
3144
3288
  if (!doc.documentElement) return;
3145
3289
  const getText = (tagNames) => {
3146
3290
  for (const tag of tagNames) {
3147
3291
  const els = doc.getElementsByTagName(tag);
3148
3292
  if (els.length > 0) {
3149
- const text = _optionalChain([els, 'access', _88 => _88[0], 'access', _89 => _89.textContent, 'optionalAccess', _90 => _90.trim, 'call', _91 => _91()]);
3293
+ const text = _optionalChain([els, 'access', _91 => _91[0], 'access', _92 => _92.textContent, 'optionalAccess', _93 => _93.trim, 'call', _94 => _94()]);
3150
3294
  if (text) return text;
3151
3295
  }
3152
3296
  }
@@ -3165,7 +3309,7 @@ function parseDublinCoreMetadata(xml, metadata) {
3165
3309
 
3166
3310
  // src/hwpx/parser.ts
3167
3311
  async function parseHwpxDocument(buffer, options) {
3168
- _chunkDZBMQC2Ncjs.precheckZipSize.call(void 0, buffer, MAX_DECOMPRESS_SIZE, MAX_ZIP_ENTRIES);
3312
+ _chunkJ7DBL77Bcjs.precheckZipSize.call(void 0, buffer, MAX_DECOMPRESS_SIZE, MAX_ZIP_ENTRIES);
3169
3313
  let zip;
3170
3314
  try {
3171
3315
  zip = await _jszip2.default.loadAsync(buffer);
@@ -3174,22 +3318,22 @@ async function parseHwpxDocument(buffer, options) {
3174
3318
  }
3175
3319
  const actualEntryCount = Object.keys(zip.files).length;
3176
3320
  if (actualEntryCount > MAX_ZIP_ENTRIES) {
3177
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("ZIP \uC5D4\uD2B8\uB9AC \uC218 \uCD08\uACFC (ZIP bomb \uC758\uC2EC)");
3321
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("ZIP \uC5D4\uD2B8\uB9AC \uC218 \uCD08\uACFC (ZIP bomb \uC758\uC2EC)");
3178
3322
  }
3179
3323
  const manifestFile = zip.file("META-INF/manifest.xml");
3180
3324
  if (manifestFile) {
3181
3325
  const manifestXml = await manifestFile.async("text");
3182
3326
  if (isEncryptedHwpx(manifestXml)) {
3183
- if (_optionalChain([options, 'optionalAccess', _92 => _92.password])) {
3327
+ if (_optionalChain([options, 'optionalAccess', _95 => _95.password])) {
3184
3328
  await decryptHwpxInPlace(zip, manifestXml, options.password);
3185
3329
  } else {
3186
- if (isComFallbackAvailable() && _optionalChain([options, 'optionalAccess', _93 => _93.filePath])) {
3330
+ if (isComFallbackAvailable() && _optionalChain([options, 'optionalAccess', _96 => _96.filePath])) {
3187
3331
  const { pages, pageCount, warnings: warnings2 } = extractTextViaCom(options.filePath);
3188
3332
  if (pages.some((p) => p && p.trim().length > 0)) {
3189
3333
  return comResultToParseResult(pages, pageCount, warnings2);
3190
3334
  }
3191
3335
  }
3192
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(
3336
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(
3193
3337
  "\uC554\uD638\uB85C \uBCF4\uD638\uB41C HWPX \uD30C\uC77C\uC785\uB2C8\uB2E4. password \uC635\uC158\uC5D0 \uC5F4\uAE30 \uC554\uD638\uB97C \uC9C0\uC815\uD558\uC138\uC694."
3194
3338
  );
3195
3339
  }
@@ -3201,37 +3345,52 @@ async function parseHwpxDocument(buffer, options) {
3201
3345
  const styleMap = await extractHwpxStyles(zip, decompressed);
3202
3346
  const warnings = [];
3203
3347
  const sectionPaths = await resolveSectionPaths(zip);
3204
- if (sectionPaths.length === 0) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("HWPX\uC5D0\uC11C \uC139\uC158 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
3205
- metadata.pageCount = sectionPaths.length;
3206
- const pageFilter = _optionalChain([options, 'optionalAccess', _94 => _94.pages]) ? _chunkDCZVOIEOcjs.parsePageRange.call(void 0, options.pages, sectionPaths.length) : null;
3207
- const totalTarget = pageFilter ? pageFilter.size : sectionPaths.length;
3208
- const blocks = [];
3348
+ if (sectionPaths.length === 0) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("HWPX\uC5D0\uC11C \uC139\uC158 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
3349
+ let allBlocks = [];
3209
3350
  const shared = createSectionShared();
3210
3351
  shared.kordocLayout = await readKordocLayout(zip);
3211
- shared.keepTrailingEmptyCols = _optionalChain([options, 'optionalAccess', _95 => _95.keepTrailingEmptyCols]);
3212
- shared.keepEmptyParagraphs = _optionalChain([options, 'optionalAccess', _96 => _96.keepEmptyParagraphs]);
3352
+ shared.keepTrailingEmptyCols = _optionalChain([options, 'optionalAccess', _97 => _97.keepTrailingEmptyCols]);
3353
+ shared.keepEmptyParagraphs = _optionalChain([options, 'optionalAccess', _98 => _98.keepEmptyParagraphs]);
3354
+ const sectionRanges = [];
3213
3355
  let parsedSections = 0;
3214
3356
  for (let si = 0; si < sectionPaths.length; si++) {
3215
- if (pageFilter && !pageFilter.has(si + 1)) continue;
3216
3357
  const file = zip.file(sectionPaths[si]);
3217
3358
  if (!file) continue;
3218
3359
  try {
3219
3360
  const xml = await file.async("text");
3220
3361
  decompressed.total += xml.length * 2;
3221
3362
  if (decompressed.total > MAX_DECOMPRESS_SIZE) throw new ZipBombError("ZIP \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (ZIP bomb \uC758\uC2EC)");
3222
- blocks.push(...parseSectionXml(xml, styleMap, warnings, si + 1, shared));
3363
+ const start = allBlocks.length;
3364
+ allBlocks.push(...parseSectionXml(xml, styleMap, warnings, si + 1, shared));
3365
+ sectionRanges.push({ sectionNum: si + 1, start, end: allBlocks.length });
3223
3366
  parsedSections++;
3224
- _optionalChain([options, 'optionalAccess', _97 => _97.onProgress, 'optionalCall', _98 => _98(parsedSections, totalTarget)]);
3367
+ _optionalChain([options, 'optionalAccess', _99 => _99.onProgress, 'optionalCall', _100 => _100(parsedSections, sectionPaths.length)]);
3225
3368
  } catch (secErr) {
3226
3369
  if (secErr instanceof ZipBombError) throw secErr;
3227
3370
  warnings.push({ page: si + 1, message: `\uC139\uC158 ${si + 1} \uD30C\uC2F1 \uC2E4\uD328: ${secErr instanceof Error ? secErr.message : "\uC54C \uC218 \uC5C6\uB294 \uC624\uB958"}`, code: "PARTIAL_PARSE" });
3228
3371
  }
3229
3372
  }
3373
+ const layoutPages = shared.pageState.allUsable && parsedSections > 0;
3374
+ metadata.pageMode = layoutPages ? "layout" : "section";
3375
+ metadata.pageCount = layoutPages ? Math.max(shared.pageState.base, 1) : sectionPaths.length;
3376
+ if (!layoutPages) {
3377
+ for (const r of sectionRanges) {
3378
+ for (let b = r.start; b < r.end; b++) allBlocks[b].pageNumber = r.sectionNum;
3379
+ }
3380
+ }
3381
+ if (_optionalChain([options, 'optionalAccess', _101 => _101.pages])) {
3382
+ const pageFilter = _chunkDCZVOIEOcjs.parsePageRange.call(void 0, options.pages, metadata.pageCount);
3383
+ allBlocks = allBlocks.filter((b) => b.pageNumber != null && pageFilter.has(b.pageNumber));
3384
+ if (!layoutPages) {
3385
+ warnings.push({ code: "PAGE_BOUNDARY_APPROXIMATE", message: "\uC870\uD310 \uCE90\uC2DC\uAC00 \uC5C6\uC5B4 pages \uD544\uD130\uB97C \uC139\uC158 \uB2E8\uC704 \uADFC\uC0AC\uB85C \uC801\uC6A9\uD588\uC2B5\uB2C8\uB2E4" });
3386
+ }
3387
+ }
3388
+ const blocks = allBlocks;
3230
3389
  applyPageText(blocks, shared);
3231
- const images = await extractImagesFromZip(zip, blocks, decompressed, warnings, !pageFilter);
3390
+ const images = await extractImagesFromZip(zip, blocks, decompressed, warnings, !_optionalChain([options, 'optionalAccess', _102 => _102.pages]));
3232
3391
  detectHwpxHeadings(blocks, styleMap);
3233
3392
  const outline = blocks.filter((b) => b.type === "heading" && b.level && b.text).map((b) => ({ level: b.level, text: b.text, pageNumber: b.pageNumber }));
3234
- const markdown = _chunk46VU6YXFcjs.blocksToMarkdown.call(void 0, blocks);
3393
+ const markdown = _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, blocks);
3235
3394
  return { markdown, blocks, metadata, outline: outline.length > 0 ? outline : void 0, warnings: warnings.length > 0 ? warnings : void 0, images: images.length > 0 ? images : void 0 };
3236
3395
  }
3237
3396
 
@@ -4231,24 +4390,130 @@ function decryptPasswordStream(raw, password) {
4231
4390
  var TAG_DOCUMENT_PROPERTIES = 16;
4232
4391
  var TAG_ID_MAPPINGS = 17;
4233
4392
  function assertDecryptedDocInfo(data, readRecords3) {
4234
- const wrong = () => new (0, _chunkDZBMQC2Ncjs.KordocError)("\uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uAC70\uB098 \uC554\uD638\uD654 \uB370\uC774\uD130\uAC00 \uC190\uC0C1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
4393
+ const wrong = () => new (0, _chunkJ7DBL77Bcjs.KordocError)("\uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uAC70\uB098 \uC554\uD638\uD654 \uB370\uC774\uD130\uAC00 \uC190\uC0C1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
4235
4394
  let records;
4236
4395
  try {
4237
4396
  records = readRecords3(data);
4238
4397
  } catch (e22) {
4239
4398
  throw wrong();
4240
4399
  }
4241
- if (_optionalChain([records, 'access', _99 => _99[0], 'optionalAccess', _100 => _100.tagId]) !== TAG_DOCUMENT_PROPERTIES) throw wrong();
4400
+ if (_optionalChain([records, 'access', _103 => _103[0], 'optionalAccess', _104 => _104.tagId]) !== TAG_DOCUMENT_PROPERTIES) throw wrong();
4242
4401
  if (!records.some((r) => r.tagId === TAG_ID_MAPPINGS)) throw wrong();
4243
4402
  }
4244
4403
  function assertSupportedEncryptVersion(version) {
4245
4404
  if (version !== SUPPORTED_ENCRYPT_VERSION) {
4246
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(
4405
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(
4247
4406
  `\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 HWP \uC554\uD638\uD654 \uBC84\uC804\uC785\uB2C8\uB2E4 (EncryptVersion=${version}, \uC9C0\uC6D0: ${SUPPORTED_ENCRYPT_VERSION})`
4248
4407
  );
4249
4408
  }
4250
4409
  }
4251
4410
 
4411
+ // src/hwp5/page-boundary.ts
4412
+ var MIDPAGE_V2 = 2e3;
4413
+ var CTRL_ID_TBL = 1952607264;
4414
+ function tableIntraBreaks2(records, start, end) {
4415
+ const rowMax = /* @__PURE__ */ new Map();
4416
+ let curRow = -1;
4417
+ let prevV = Number.NEGATIVE_INFINITY;
4418
+ let resets = 0;
4419
+ const flush = () => {
4420
+ if (curRow >= 0) rowMax.set(curRow, Math.max(_nullishCoalesce(rowMax.get(curRow), () => ( 0)), resets));
4421
+ resets = 0;
4422
+ prevV = Number.NEGATIVE_INFINITY;
4423
+ };
4424
+ for (let i = start; i < end; i++) {
4425
+ const rec = records[i];
4426
+ if (rec.tagId === TAG_LIST_HEADER && rec.level === 2 && rec.data.length >= 12) {
4427
+ flush();
4428
+ curRow = rec.data.readUInt16LE(10);
4429
+ } else if (rec.tagId === TAG_PARA_LINE_SEG && rec.level === 3 && curRow >= 0) {
4430
+ for (let off = 0; off + 36 <= rec.data.length; off += 36) {
4431
+ const v = rec.data.readInt32LE(off + 4);
4432
+ if (v < prevV) resets++;
4433
+ prevV = v;
4434
+ }
4435
+ }
4436
+ }
4437
+ flush();
4438
+ let sum = 0;
4439
+ for (const v of rowMax.values()) sum += v;
4440
+ return sum;
4441
+ }
4442
+ function detectHwp5SectionPages(records) {
4443
+ const pageAtPara = [];
4444
+ let cur = 0;
4445
+ let prevV = Number.NEGATIVE_INFINITY;
4446
+ let prevH = Number.NEGATIVE_INFINITY;
4447
+ let first = true;
4448
+ let suppressMidReset = false;
4449
+ let parasWithSegs = 0;
4450
+ let i = 0;
4451
+ while (i < records.length) {
4452
+ const rec = records[i];
4453
+ if (rec.tagId !== TAG_PARA_HEADER || rec.level !== 0) {
4454
+ i++;
4455
+ continue;
4456
+ }
4457
+ let j = i + 1;
4458
+ while (j < records.length && records[j].level > 0) j++;
4459
+ const divideSort = rec.data.length >= 12 ? rec.data.readUInt8(11) : 0;
4460
+ const explicit = (divideSort & 4) !== 0;
4461
+ let brokeByExplicit = false;
4462
+ if (explicit && !first) {
4463
+ cur++;
4464
+ brokeByExplicit = true;
4465
+ suppressMidReset = false;
4466
+ }
4467
+ let paraFirst = true;
4468
+ let startPage = cur;
4469
+ let hadSegs = false;
4470
+ let intraAdd = 0;
4471
+ for (let k = i + 1; k < j; k++) {
4472
+ const r = records[k];
4473
+ if (r.tagId === TAG_PARA_LINE_SEG && r.level === 1) {
4474
+ hadSegs = true;
4475
+ for (let off = 0; off + 36 <= r.data.length; off += 36) {
4476
+ const v = r.data.readInt32LE(off + 4);
4477
+ const h = r.data.readInt32LE(off + 24);
4478
+ const brk = v < prevV || paraFirst && v === prevV && h <= prevH;
4479
+ if (brk && !(paraFirst && brokeByExplicit)) {
4480
+ if (paraFirst && suppressMidReset && v >= MIDPAGE_V2) {
4481
+ } else {
4482
+ cur++;
4483
+ }
4484
+ }
4485
+ if (paraFirst) {
4486
+ suppressMidReset = false;
4487
+ startPage = cur;
4488
+ }
4489
+ paraFirst = false;
4490
+ prevV = v;
4491
+ prevH = h;
4492
+ }
4493
+ }
4494
+ if (r.tagId === TAG_CTRL_HEADER && r.level === 1 && r.data.length >= 4 && r.data.readUInt32LE(0) === CTRL_ID_TBL) {
4495
+ let ce = k + 1;
4496
+ while (ce < j && records[ce].level > 1) ce++;
4497
+ intraAdd += tableIntraBreaks2(records, k + 1, ce);
4498
+ k = ce - 1;
4499
+ }
4500
+ }
4501
+ if (hadSegs) parasWithSegs++;
4502
+ pageAtPara.push(startPage);
4503
+ first = false;
4504
+ if (intraAdd > 0) {
4505
+ cur += intraAdd;
4506
+ suppressMidReset = true;
4507
+ }
4508
+ i = j;
4509
+ }
4510
+ return {
4511
+ pageAtPara,
4512
+ pages: cur + 1,
4513
+ usable: pageAtPara.length > 0 && parasWithSegs === pageAtPara.length
4514
+ };
4515
+ }
4516
+
4252
4517
  // src/hwp5/parser.ts
4253
4518
  var _module = require('module');
4254
4519
  var require2 = _module.createRequire.call(void 0, _chunkGS7T56RPcjs.importMetaUrl);
@@ -4326,25 +4591,25 @@ function parseHwp5Document(buffer, options) {
4326
4591
  lenientCfb = parseLenientCfb(buffer);
4327
4592
  warnings.push({ message: "\uC190\uC0C1\uB41C CFB \uCEE8\uD14C\uC774\uB108 \u2014 lenient \uBAA8\uB4DC\uB85C \uBCF5\uAD6C", code: "LENIENT_CFB_RECOVERY" });
4328
4593
  } catch (e24) {
4329
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("CFB \uCEE8\uD14C\uC774\uB108 \uD30C\uC2F1 \uC2E4\uD328 (strict \uBC0F lenient \uBAA8\uB450)");
4594
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("CFB \uCEE8\uD14C\uC774\uB108 \uD30C\uC2F1 \uC2E4\uD328 (strict \uBC0F lenient \uBAA8\uB450)");
4330
4595
  }
4331
4596
  }
4332
4597
  const readRawStream = (path) => {
4333
4598
  if (cfb) {
4334
4599
  const entry = CFB.find(cfb, path);
4335
- return _optionalChain([entry, 'optionalAccess', _101 => _101.content]) ? Buffer.from(entry.content) : null;
4600
+ return _optionalChain([entry, 'optionalAccess', _105 => _105.content]) ? Buffer.from(entry.content) : null;
4336
4601
  }
4337
4602
  return lenientCfb.findStream(path);
4338
4603
  };
4339
4604
  const headerData = readRawStream("/FileHeader");
4340
- if (!headerData) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("FileHeader \uC2A4\uD2B8\uB9BC \uC5C6\uC74C");
4605
+ if (!headerData) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("FileHeader \uC2A4\uD2B8\uB9BC \uC5C6\uC74C");
4341
4606
  const header = parseFileHeader(headerData);
4342
- if (header.signature !== "HWP Document File") throw new (0, _chunkDZBMQC2Ncjs.KordocError)("HWP \uC2DC\uADF8\uB2C8\uCC98 \uBD88\uC77C\uCE58");
4343
- if (header.flags & FLAG_DRM) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("DRM \uBCF4\uD638\uB41C HWP\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
4607
+ if (header.signature !== "HWP Document File") throw new (0, _chunkJ7DBL77Bcjs.KordocError)("HWP \uC2DC\uADF8\uB2C8\uCC98 \uBD88\uC77C\uCE58");
4608
+ if (header.flags & FLAG_DRM) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("DRM \uBCF4\uD638\uB41C HWP\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
4344
4609
  const encrypted = (header.flags & FLAG_ENCRYPTED) !== 0;
4345
4610
  if (encrypted) {
4346
- if (!_optionalChain([options, 'optionalAccess', _102 => _102.password])) {
4347
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uC554\uD638\uB85C \uBCF4\uD638\uB41C HWP \uBB38\uC11C\uC785\uB2C8\uB2E4. password \uC635\uC158\uC5D0 \uC5F4\uAE30 \uC554\uD638\uB97C \uC9C0\uC815\uD558\uC138\uC694.");
4611
+ if (!_optionalChain([options, 'optionalAccess', _106 => _106.password])) {
4612
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uC554\uD638\uB85C \uBCF4\uD638\uB41C HWP \uBB38\uC11C\uC785\uB2C8\uB2E4. password \uC635\uC158\uC5D0 \uC5F4\uAE30 \uC554\uD638\uB97C \uC9C0\uC815\uD558\uC138\uC694.");
4348
4613
  }
4349
4614
  assertSupportedEncryptVersion(readEncryptVersion(headerData));
4350
4615
  }
@@ -4362,48 +4627,80 @@ function parseHwp5Document(buffer, options) {
4362
4627
  if (cfb) extractHwp5Metadata(cfb, metadata);
4363
4628
  if (encrypted) {
4364
4629
  const rawDocInfo = findStream("/DocInfo");
4365
- if (!rawDocInfo) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("DocInfo \uC2A4\uD2B8\uB9BC \uC5C6\uC74C");
4630
+ if (!rawDocInfo) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("DocInfo \uC2A4\uD2B8\uB9BC \uC5C6\uC74C");
4366
4631
  let docInfoData;
4367
4632
  try {
4368
4633
  docInfoData = compressed ? decompressStream(rawDocInfo) : rawDocInfo;
4369
4634
  } catch (e25) {
4370
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uAC70\uB098 \uC554\uD638\uD654 \uB370\uC774\uD130\uAC00 \uC190\uC0C1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
4635
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uAC70\uB098 \uC554\uD638\uD654 \uB370\uC774\uD130\uAC00 \uC190\uC0C1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
4371
4636
  }
4372
4637
  assertDecryptedDocInfo(docInfoData, readRecords);
4373
4638
  }
4374
4639
  const docInfo = cfb && !encrypted ? parseDocInfoStream(cfb, compressed) : parseDocInfoFromStream(findStream("/DocInfo"), compressed);
4375
4640
  const sections = distribution ? cfb ? findViewTextSections(cfb, compressed) : findViewTextSectionsLenient(lenientCfb, compressed) : encrypted ? findSectionsVia(findStream) : cfb ? findSections(cfb) : findSectionsLenient(lenientCfb, compressed);
4376
- if (sections.length === 0) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uC139\uC158 \uC2A4\uD2B8\uB9BC\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
4377
- metadata.pageCount = sections.length;
4378
- const pageFilter = _optionalChain([options, 'optionalAccess', _103 => _103.pages]) ? _chunkDCZVOIEOcjs.parsePageRange.call(void 0, options.pages, sections.length) : null;
4379
- const totalTarget = pageFilter ? pageFilter.size : sections.length;
4380
- const bodyBlocks = [];
4381
- const doc = createHwp5DocState();
4382
- doc.keepTrailingEmptyCols = _optionalChain([options, 'optionalAccess', _104 => _104.keepTrailingEmptyCols]);
4641
+ if (sections.length === 0) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uC139\uC158 \uC2A4\uD2B8\uB9BC\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
4642
+ const sectionRecords = [];
4643
+ const sectionDetects = [];
4383
4644
  let totalDecompressed = 0;
4384
- let parsedSections = 0;
4385
4645
  for (let si = 0; si < sections.length; si++) {
4386
- if (pageFilter && !pageFilter.has(si + 1)) continue;
4387
4646
  try {
4388
- const sectionData = sections[si];
4389
- const data = !distribution && compressed ? decompressStream(Buffer.from(sectionData)) : Buffer.from(sectionData);
4647
+ const data = !distribution && compressed ? decompressStream(Buffer.from(sections[si])) : Buffer.from(sections[si]);
4390
4648
  totalDecompressed += data.length;
4391
- if (totalDecompressed > MAX_TOTAL_DECOMPRESS) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uCD1D \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (decompression bomb \uC758\uC2EC)");
4649
+ if (totalDecompressed > MAX_TOTAL_DECOMPRESS) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uCD1D \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (decompression bomb \uC758\uC2EC)");
4392
4650
  const records = readRecords(data);
4393
- const sectionBlocks = parseSection(records, docInfo, warnings, si + 1, doc);
4651
+ sectionRecords.push(records);
4652
+ sectionDetects.push(detectHwp5SectionPages(records));
4653
+ } catch (secErr) {
4654
+ if (secErr instanceof _chunkJ7DBL77Bcjs.KordocError) throw secErr;
4655
+ sectionRecords.push(null);
4656
+ sectionDetects.push(null);
4657
+ warnings.push({ page: si + 1, message: `\uC139\uC158 ${si + 1} \uD30C\uC2F1 \uC2E4\uD328: ${secErr instanceof Error ? secErr.message : "\uC54C \uC218 \uC5C6\uB294 \uC624\uB958"}`, code: "PARTIAL_PARSE" });
4658
+ }
4659
+ }
4660
+ const layoutPages = sectionDetects.length > 0 && sectionDetects.every((d) => d != null && d.usable);
4661
+ metadata.pageMode = layoutPages ? "layout" : "section";
4662
+ metadata.pageCount = layoutPages ? Math.max(sectionDetects.reduce((sum, d) => sum + (_nullishCoalesce(_optionalChain([d, 'optionalAccess', _107 => _107.pages]), () => ( 0))), 0), 1) : sections.length;
4663
+ const pageFilter = _optionalChain([options, 'optionalAccess', _108 => _108.pages]) ? _chunkDCZVOIEOcjs.parsePageRange.call(void 0, options.pages, metadata.pageCount) : null;
4664
+ if (pageFilter && !layoutPages) {
4665
+ warnings.push({ code: "PAGE_BOUNDARY_APPROXIMATE", message: "\uC870\uD310 \uCE90\uC2DC\uAC00 \uC5C6\uC5B4 pages \uD544\uD130\uB97C \uC139\uC158 \uB2E8\uC704 \uADFC\uC0AC\uB85C \uC801\uC6A9\uD588\uC2B5\uB2C8\uB2E4" });
4666
+ }
4667
+ let bodyBlocks = [];
4668
+ const doc = createHwp5DocState();
4669
+ doc.keepTrailingEmptyCols = _optionalChain([options, 'optionalAccess', _109 => _109.keepTrailingEmptyCols]);
4670
+ let parsedSections = 0;
4671
+ let pageBase = 0;
4672
+ for (let si = 0; si < sections.length; si++) {
4673
+ const records = sectionRecords[si];
4674
+ if (!records) continue;
4675
+ const detect = sectionDetects[si];
4676
+ if (!layoutPages && pageFilter && !pageFilter.has(si + 1)) continue;
4677
+ try {
4678
+ const sectionBlocks = parseSection(
4679
+ records,
4680
+ docInfo,
4681
+ warnings,
4682
+ si + 1,
4683
+ doc,
4684
+ layoutPages ? { base: pageBase, pageAtPara: detect.pageAtPara } : void 0
4685
+ );
4394
4686
  bodyBlocks.push(...sectionBlocks);
4395
4687
  parsedSections++;
4396
- _optionalChain([options, 'optionalAccess', _105 => _105.onProgress, 'optionalCall', _106 => _106(parsedSections, totalTarget)]);
4688
+ _optionalChain([options, 'optionalAccess', _110 => _110.onProgress, 'optionalCall', _111 => _111(parsedSections, sections.length)]);
4397
4689
  } catch (secErr) {
4398
- if (secErr instanceof _chunkDZBMQC2Ncjs.KordocError) throw secErr;
4690
+ if (secErr instanceof _chunkJ7DBL77Bcjs.KordocError) throw secErr;
4399
4691
  warnings.push({ page: si + 1, message: `\uC139\uC158 ${si + 1} \uD30C\uC2F1 \uC2E4\uD328: ${secErr instanceof Error ? secErr.message : "\uC54C \uC218 \uC5C6\uB294 \uC624\uB958"}`, code: "PARTIAL_PARSE" });
4692
+ } finally {
4693
+ pageBase += detect.pages;
4400
4694
  }
4401
4695
  }
4696
+ if (pageFilter && layoutPages) {
4697
+ bodyBlocks = bodyBlocks.filter((b) => b.pageNumber != null && pageFilter.has(b.pageNumber));
4698
+ }
4402
4699
  const blocks = [...doc.headerBlocks, ...bodyBlocks, ...doc.footerBlocks];
4403
4700
  const images = cfb ? extractHwp5Images(cfb.FileIndex, blocks, warnings, !pageFilter) : extractHwp5ImagesLenient(lenientCfb, blocks, warnings, !pageFilter);
4404
- let flatBlocks = _chunk46VU6YXFcjs.flattenLayoutTables.call(void 0, blocks);
4405
- if (_optionalChain([options, 'optionalAccess', _107 => _107.dedupeRunningHeaders])) {
4406
- const deduped = _chunk46VU6YXFcjs.dedupeRunningHeaders.call(void 0, flatBlocks);
4701
+ let flatBlocks = _chunkGGZ5PSJOcjs.flattenLayoutTables.call(void 0, blocks);
4702
+ if (_optionalChain([options, 'optionalAccess', _112 => _112.dedupeRunningHeaders])) {
4703
+ const deduped = _chunkGGZ5PSJOcjs.dedupeRunningHeaders.call(void 0, flatBlocks);
4407
4704
  const removed = flatBlocks.length - deduped.length;
4408
4705
  if (removed > 0) warnings.push({ message: `\uBC18\uBCF5 \uB7EC\uB2DD \uD5E4\uB354 ${removed}\uAC1C \uC81C\uAC70`, code: "HIDDEN_TEXT_FILTERED" });
4409
4706
  flatBlocks = deduped;
@@ -4412,10 +4709,10 @@ function parseHwp5Document(buffer, options) {
4412
4709
  detectHwp5Headings(flatBlocks, docInfo);
4413
4710
  }
4414
4711
  const outline = flatBlocks.filter((b) => b.type === "heading" && b.level && b.text).map((b) => ({ level: b.level, text: b.text, pageNumber: b.pageNumber }));
4415
- let markdown = _chunk46VU6YXFcjs.blocksToMarkdown.call(void 0, flatBlocks);
4416
- if (_optionalChain([options, 'optionalAccess', _108 => _108.inlineImages]) && images.length > 0) {
4712
+ let markdown = _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, flatBlocks);
4713
+ if (_optionalChain([options, 'optionalAccess', _113 => _113.inlineImages]) && images.length > 0) {
4417
4714
  try {
4418
- markdown = _chunk46VU6YXFcjs.inlineImagesIntoMarkdown.call(void 0, markdown, images, { compress: true });
4715
+ markdown = _chunkGGZ5PSJOcjs.inlineImagesIntoMarkdown.call(void 0, markdown, images, { compress: true });
4419
4716
  } catch (inlineErr) {
4420
4717
  warnings.push({ message: `\uC774\uBBF8\uC9C0 \uC778\uB77C\uC778 \uC2E4\uD328 \u2014 \uC6D0\uBCF8 \uD30C\uC77C \uCC38\uC870\uB85C \uD3F4\uBC31: ${inlineErr instanceof Error ? inlineErr.message : "\uC54C \uC218 \uC5C6\uB294 \uC624\uB958"}`, code: "SKIPPED_IMAGE" });
4421
4718
  }
@@ -4425,7 +4722,7 @@ function parseHwp5Document(buffer, options) {
4425
4722
  function parseDocInfoStream(cfb, compressed) {
4426
4723
  try {
4427
4724
  const entry = CFB.find(cfb, "/DocInfo");
4428
- if (!_optionalChain([entry, 'optionalAccess', _109 => _109.content])) return null;
4725
+ if (!_optionalChain([entry, 'optionalAccess', _114 => _114.content])) return null;
4429
4726
  const data = compressed ? decompressStream(Buffer.from(entry.content)) : Buffer.from(entry.content);
4430
4727
  const records = readRecords(data);
4431
4728
  return parseDocInfo(records);
@@ -4446,7 +4743,7 @@ function detectHwp5Headings(blocks, docInfo) {
4446
4743
  let baseFontSize = 0;
4447
4744
  const sizeFreq = /* @__PURE__ */ new Map();
4448
4745
  for (const b of blocks) {
4449
- if (_optionalChain([b, 'access', _110 => _110.style, 'optionalAccess', _111 => _111.fontSize]) && b.text) {
4746
+ if (_optionalChain([b, 'access', _115 => _115.style, 'optionalAccess', _116 => _116.fontSize]) && b.text) {
4450
4747
  sizeFreq.set(b.style.fontSize, (sizeFreq.get(b.style.fontSize) || 0) + b.text.length);
4451
4748
  }
4452
4749
  }
@@ -4462,7 +4759,7 @@ function detectHwp5Headings(blocks, docInfo) {
4462
4759
  const name = (style.nameKo || style.name).toLowerCase();
4463
4760
  if (name.includes("\uBC14\uD0D5") || name.includes("\uBCF8\uBB38") || name === "normal" || name === "body") {
4464
4761
  const cs = docInfo.charShapes[style.charShapeId];
4465
- if (_optionalChain([cs, 'optionalAccess', _112 => _112.fontSize]) > 0) {
4762
+ if (_optionalChain([cs, 'optionalAccess', _117 => _117.fontSize]) > 0) {
4466
4763
  baseFontSize = cs.fontSize / 10;
4467
4764
  break;
4468
4765
  }
@@ -4477,11 +4774,11 @@ function detectHwp5Headings(blocks, docInfo) {
4477
4774
  if (text.length === 0 || text.length > 200) continue;
4478
4775
  if (/^\d+$/.test(text)) continue;
4479
4776
  let level = 0;
4480
- if (_optionalChain([block, 'access', _113 => _113.style, 'optionalAccess', _114 => _114.fontSize]) && baseFontSize > 0) {
4777
+ if (_optionalChain([block, 'access', _118 => _118.style, 'optionalAccess', _119 => _119.fontSize]) && baseFontSize > 0) {
4481
4778
  const ratio = block.style.fontSize / baseFontSize;
4482
- if (ratio >= _chunkURTDBXV6cjs.HEADING_RATIO_H1) level = 1;
4483
- else if (ratio >= _chunkURTDBXV6cjs.HEADING_RATIO_H2) level = 2;
4484
- else if (ratio >= _chunkURTDBXV6cjs.HEADING_RATIO_H3) level = 3;
4779
+ if (ratio >= _chunkL5CDTOC3cjs.HEADING_RATIO_H1) level = 1;
4780
+ else if (ratio >= _chunkL5CDTOC3cjs.HEADING_RATIO_H2) level = 2;
4781
+ else if (ratio >= _chunkL5CDTOC3cjs.HEADING_RATIO_H3) level = 3;
4485
4782
  }
4486
4783
  if (/^제\d+[장절편]\s/.test(text) && text.length <= 50) {
4487
4784
  if (level === 0) level = 2;
@@ -4497,7 +4794,7 @@ function detectHwp5Headings(blocks, docInfo) {
4497
4794
  function extractHwp5Metadata(cfb, metadata) {
4498
4795
  try {
4499
4796
  const summaryEntry = CFB.find(cfb, "/HwpSummaryInformation") || CFB.find(cfb, "/SummaryInformation");
4500
- if (!_optionalChain([summaryEntry, 'optionalAccess', _115 => _115.content])) return;
4797
+ if (!_optionalChain([summaryEntry, 'optionalAccess', _120 => _120.content])) return;
4501
4798
  const data = Buffer.from(summaryEntry.content);
4502
4799
  if (data.length < 48) return;
4503
4800
  const numSets = data.readUInt32LE(24);
@@ -4530,7 +4827,7 @@ function findViewTextSections(cfb, compressed) {
4530
4827
  const sections = [];
4531
4828
  for (let i = 0; i < MAX_SECTIONS; i++) {
4532
4829
  const entry = CFB.find(cfb, `/ViewText/Section${i}`);
4533
- if (!_optionalChain([entry, 'optionalAccess', _116 => _116.content])) break;
4830
+ if (!_optionalChain([entry, 'optionalAccess', _121 => _121.content])) break;
4534
4831
  try {
4535
4832
  const decrypted = decryptViewText(Buffer.from(entry.content), compressed);
4536
4833
  sections.push({ idx: i, content: decrypted });
@@ -4553,13 +4850,13 @@ function findSections(cfb) {
4553
4850
  const sections = [];
4554
4851
  for (let i = 0; i < MAX_SECTIONS; i++) {
4555
4852
  const entry = CFB.find(cfb, `/BodyText/Section${i}`);
4556
- if (!_optionalChain([entry, 'optionalAccess', _117 => _117.content])) break;
4853
+ if (!_optionalChain([entry, 'optionalAccess', _122 => _122.content])) break;
4557
4854
  sections.push({ idx: i, content: Buffer.from(entry.content) });
4558
4855
  }
4559
4856
  if (sections.length === 0 && cfb.FileIndex) {
4560
4857
  for (const entry of cfb.FileIndex) {
4561
4858
  if (sections.length >= MAX_SECTIONS) break;
4562
- if (_optionalChain([entry, 'access', _118 => _118.name, 'optionalAccess', _119 => _119.startsWith, 'call', _120 => _120("Section")]) && entry.content) {
4859
+ if (_optionalChain([entry, 'access', _123 => _123.name, 'optionalAccess', _124 => _124.startsWith, 'call', _125 => _125("Section")]) && entry.content) {
4563
4860
  const idx = parseInt(entry.name.replace("Section", ""), 10) || 0;
4564
4861
  sections.push({ idx, content: Buffer.from(entry.content) });
4565
4862
  }
@@ -4575,7 +4872,7 @@ function findSectionsLenient(lcfb, compressed) {
4575
4872
  if (!raw) break;
4576
4873
  const content = compressed ? decompressStream(raw) : raw;
4577
4874
  totalDecompressed += content.length;
4578
- if (totalDecompressed > MAX_TOTAL_DECOMPRESS) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uCD1D \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (decompression bomb \uC758\uC2EC)");
4875
+ if (totalDecompressed > MAX_TOTAL_DECOMPRESS) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uCD1D \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (decompression bomb \uC758\uC2EC)");
4579
4876
  sections.push({ idx: i, content });
4580
4877
  }
4581
4878
  if (sections.length === 0) {
@@ -4587,7 +4884,7 @@ function findSectionsLenient(lcfb, compressed) {
4587
4884
  if (raw) {
4588
4885
  const content = compressed ? decompressStream(raw) : raw;
4589
4886
  totalDecompressed += content.length;
4590
- if (totalDecompressed > MAX_TOTAL_DECOMPRESS) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uCD1D \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (decompression bomb \uC758\uC2EC)");
4887
+ if (totalDecompressed > MAX_TOTAL_DECOMPRESS) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uCD1D \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (decompression bomb \uC758\uC2EC)");
4591
4888
  sections.push({ idx, content });
4592
4889
  }
4593
4890
  }
@@ -4604,7 +4901,7 @@ function findViewTextSectionsLenient(lcfb, compressed) {
4604
4901
  try {
4605
4902
  const content = decryptViewText(raw, compressed);
4606
4903
  totalDecompressed += content.length;
4607
- if (totalDecompressed > MAX_TOTAL_DECOMPRESS) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uCD1D \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (decompression bomb \uC758\uC2EC)");
4904
+ if (totalDecompressed > MAX_TOTAL_DECOMPRESS) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uCD1D \uC555\uCD95 \uD574\uC81C \uD06C\uAE30 \uCD08\uACFC (decompression bomb \uC758\uC2EC)");
4608
4905
  sections.push({ idx: i, content });
4609
4906
  } catch (e30) {
4610
4907
  break;
@@ -4635,8 +4932,17 @@ function createHwp5DocState() {
4635
4932
  footerBlocks: []
4636
4933
  };
4637
4934
  }
4638
- function parseSection(records, docInfo, warnings, sectionNum, doc) {
4639
- const ctx = { docInfo, warnings, sectionNum, doc: _nullishCoalesce(doc, () => ( createHwp5DocState())), depth: 0 };
4935
+ function parseSection(records, docInfo, warnings, sectionNum, doc, pageMap) {
4936
+ const ctx = {
4937
+ docInfo,
4938
+ warnings,
4939
+ sectionNum,
4940
+ doc: _nullishCoalesce(doc, () => ( createHwp5DocState())),
4941
+ depth: 0,
4942
+ page: pageMap ? pageMap.base + 1 : sectionNum,
4943
+ pageMap,
4944
+ topOrdinal: 0
4945
+ };
4640
4946
  return parseParagraphList(records, 0, records.length, ctx);
4641
4947
  }
4642
4948
  function parseParagraphList(records, start, end, ctx) {
@@ -4645,6 +4951,11 @@ function parseParagraphList(records, start, end, ctx) {
4645
4951
  while (i < end) {
4646
4952
  if (records[i].tagId === TAG_PARA_HEADER) {
4647
4953
  const baseLevel = records[i].level;
4954
+ if (baseLevel === 0 && ctx.depth === 0 && ctx.pageMap) {
4955
+ const pg = ctx.pageMap.pageAtPara[ctx.topOrdinal];
4956
+ if (pg !== void 0) ctx.page = ctx.pageMap.base + pg + 1;
4957
+ ctx.topOrdinal++;
4958
+ }
4648
4959
  let j = i + 1;
4649
4960
  while (j < end && records[j].level > baseLevel) j++;
4650
4961
  blocks.push(...parseParagraph(records, i, j, ctx));
@@ -4705,9 +5016,9 @@ function parseParagraph(records, start, end, ctx) {
4705
5016
  const applied = [];
4706
5017
  for (const r of ranges) {
4707
5018
  const ctrl = ctrls[r.ctrlIdx];
4708
- if (!_optionalChain([ctrl, 'optionalAccess', _121 => _121.href]) || r.end <= r.start) continue;
5019
+ if (!_optionalChain([ctrl, 'optionalAccess', _126 => _126.href]) || r.end <= r.start) continue;
4709
5020
  if (applied.some(([s, e]) => r.start < e && r.end > s)) continue;
4710
- const href = _chunkDZBMQC2Ncjs.sanitizeHref.call(void 0, ctrl.href);
5021
+ const href = _chunkJ7DBL77Bcjs.sanitizeHref.call(void 0, ctrl.href);
4711
5022
  if (!href) continue;
4712
5023
  const anchor = text.slice(r.start, r.end);
4713
5024
  if (!anchor.trim()) continue;
@@ -4725,7 +5036,7 @@ function parseParagraph(records, start, end, ctx) {
4725
5036
  }
4726
5037
  if (ps.headType === 1 || ps.headType === 2) {
4727
5038
  const nid = ps.numberingId || (ps.headType === 1 ? ctx.doc.outlineNumberingId : 0);
4728
- const numbering = nid >= 1 ? _optionalChain([ctx, 'access', _122 => _122.docInfo, 'optionalAccess', _123 => _123.numberings, 'access', _124 => _124[nid - 1]]) : void 0;
5039
+ const numbering = nid >= 1 ? _optionalChain([ctx, 'access', _127 => _127.docInfo, 'optionalAccess', _128 => _128.numberings, 'access', _129 => _129[nid - 1]]) : void 0;
4729
5040
  if (numbering) {
4730
5041
  const counters = ctx.doc.numbering.advance(nid, ps.paraLevel);
4731
5042
  const fmt = numbering.levelFormats[Math.min(ps.paraLevel, 6)];
@@ -4735,7 +5046,7 @@ function parseParagraph(records, start, end, ctx) {
4735
5046
  }
4736
5047
  }
4737
5048
  } else if (ps.headType === 3) {
4738
- const bullet = ps.numberingId >= 1 ? _optionalChain([ctx, 'access', _125 => _125.docInfo, 'optionalAccess', _126 => _126.bullets, 'access', _127 => _127[ps.numberingId - 1]]) : void 0;
5049
+ const bullet = ps.numberingId >= 1 ? _optionalChain([ctx, 'access', _130 => _130.docInfo, 'optionalAccess', _131 => _131.bullets, 'access', _132 => _132[ps.numberingId - 1]]) : void 0;
4739
5050
  if (bullet && bullet.char !== "\uFFFF") headMarker = bullet.char;
4740
5051
  }
4741
5052
  }
@@ -4745,7 +5056,7 @@ function parseParagraph(records, start, end, ctx) {
4745
5056
  const block = {
4746
5057
  type: headingLevel > 0 ? "heading" : "paragraph",
4747
5058
  text: headMarker ? `${headMarker} ${trimmed}` : trimmed,
4748
- pageNumber: ctx.sectionNum
5059
+ pageNumber: ctx.page
4749
5060
  };
4750
5061
  if (headingLevel > 0) block.level = headingLevel;
4751
5062
  if (ctx.docInfo && charShapeIds.length > 0) {
@@ -4762,7 +5073,7 @@ function parseParagraph(records, start, end, ctx) {
4762
5073
  if (footnotes.length > 0) block.footnoteText = footnotes.join("; ");
4763
5074
  blocks.push(block);
4764
5075
  } else if (footnotes.length > 0) {
4765
- blocks.push({ type: "paragraph", text: `(\uC8FC: ${footnotes.join("; ")})`, pageNumber: ctx.sectionNum });
5076
+ blocks.push({ type: "paragraph", text: `(\uC8FC: ${footnotes.join("; ")})`, pageNumber: ctx.page });
4766
5077
  }
4767
5078
  for (const ctrl of ctrls) {
4768
5079
  if (ctrl.afterBlocks) blocks.push(...ctrl.afterBlocks);
@@ -4773,7 +5084,7 @@ function applyCtrlEffect(ctrl, records, ctx) {
4773
5084
  switch (ctrl.id) {
4774
5085
  case CTRL_TBL: {
4775
5086
  const table2 = parseTableControl(ctrl, records, ctx);
4776
- if (table2) ctrl.afterBlocks = [{ type: "table", table: table2, pageNumber: ctx.sectionNum }];
5087
+ if (table2) ctrl.afterBlocks = [{ type: "table", table: table2, pageNumber: ctx.page }];
4777
5088
  return;
4778
5089
  }
4779
5090
  case CTRL_GSO: {
@@ -4825,7 +5136,7 @@ function applyCtrlEffect(ctrl, records, ctx) {
4825
5136
  return;
4826
5137
  }
4827
5138
  case CTRL_OLE: {
4828
- ctx.warnings.push({ page: ctx.sectionNum, message: "\uC2A4\uD0B5\uB41C OLE \uAC1C\uCCB4", code: "SKIPPED_OLE" });
5139
+ ctx.warnings.push({ page: ctx.page, message: "\uC2A4\uD0B5\uB41C OLE \uAC1C\uCCB4", code: "SKIPPED_OLE" });
4829
5140
  return;
4830
5141
  }
4831
5142
  // 숨은 설명/단 정의/쪽번호 위치/감추기/찾아보기/책갈피/글자겹침/덧말 — 본문 텍스트 없음 또는 의도적 스킵
@@ -4902,7 +5213,7 @@ function applyHeaderFooterEffect(ctrl, records, ctx, isHeader) {
4902
5213
  const key = (isHeader ? "h:" : "f:") + text;
4903
5214
  if (ctx.doc.headerTexts.has(key)) return;
4904
5215
  ctx.doc.headerTexts.add(key);
4905
- const block = { type: "paragraph", text, pageNumber: ctx.sectionNum };
5216
+ const block = { type: "paragraph", text, pageNumber: ctx.page };
4906
5217
  if (isHeader) ctx.doc.headerBlocks.push(block);
4907
5218
  else ctx.doc.footerBlocks.push(block);
4908
5219
  }
@@ -4947,8 +5258,8 @@ function parseTableControl(ctrl, records, ctx) {
4947
5258
  let tableIdx = -1;
4948
5259
  for (let i2 = childStart; i2 < childEnd; i2++) {
4949
5260
  if (records[i2].tagId === TAG_TABLE && records[i2].data.length >= 8) {
4950
- rows = Math.min(records[i2].data.readUInt16LE(4), _chunk46VU6YXFcjs.MAX_ROWS);
4951
- cols = Math.min(records[i2].data.readUInt16LE(6), _chunk46VU6YXFcjs.MAX_COLS);
5261
+ rows = Math.min(records[i2].data.readUInt16LE(4), _chunkGGZ5PSJOcjs.MAX_ROWS);
5262
+ cols = Math.min(records[i2].data.readUInt16LE(6), _chunkGGZ5PSJOcjs.MAX_COLS);
4952
5263
  tableIdx = i2;
4953
5264
  break;
4954
5265
  }
@@ -4988,7 +5299,7 @@ function parseTableControl(ctrl, records, ctx) {
4988
5299
  const cellRows2 = arrangeCells(rows, cols, cells);
4989
5300
  const irCells = cellRows2.map((row) => row.map((c) => {
4990
5301
  const ir = { text: c.text.trim(), colSpan: c.colSpan, rowSpan: c.rowSpan };
4991
- if (_optionalChain([c, 'access', _128 => _128.blocks, 'optionalAccess', _129 => _129.length])) ir.blocks = c.blocks;
5302
+ if (_optionalChain([c, 'access', _133 => _133.blocks, 'optionalAccess', _134 => _134.length])) ir.blocks = c.blocks;
4992
5303
  if (c.isHeader) ir.isHeader = true;
4993
5304
  return ir;
4994
5305
  }));
@@ -4997,7 +5308,7 @@ function parseTableControl(ctrl, records, ctx) {
4997
5308
  return table3;
4998
5309
  }
4999
5310
  const cellRows = arrangeCells(rows, cols, cells);
5000
- const table2 = _chunk46VU6YXFcjs.buildTable.call(void 0, cellRows, { keepAnchoredEmptyCols: ctx.doc.keepTrailingEmptyCols });
5311
+ const table2 = _chunkGGZ5PSJOcjs.buildTable.call(void 0, cellRows, { keepAnchoredEmptyCols: ctx.doc.keepTrailingEmptyCols });
5001
5312
  if (caption && table2.rows > 0) table2.caption = caption;
5002
5313
  return table2.rows > 0 ? table2 : null;
5003
5314
  }
@@ -5014,8 +5325,8 @@ function parseCell(records, lhIdx, end, ctx) {
5014
5325
  rowAddr = rec.data.readUInt16LE(10);
5015
5326
  const cs = rec.data.readUInt16LE(12);
5016
5327
  const rs = rec.data.readUInt16LE(14);
5017
- if (cs > 0) colSpan = Math.min(cs, _chunk46VU6YXFcjs.MAX_COLS);
5018
- if (rs > 0) rowSpan = Math.min(rs, _chunk46VU6YXFcjs.MAX_ROWS);
5328
+ if (cs > 0) colSpan = Math.min(cs, _chunkGGZ5PSJOcjs.MAX_COLS);
5329
+ if (rs > 0) rowSpan = Math.min(rs, _chunkGGZ5PSJOcjs.MAX_ROWS);
5019
5330
  }
5020
5331
  const blocks = ctx.depth < MAX_NEST_DEPTH ? parseParagraphList(records, lhIdx + 1, end, { ...ctx, depth: ctx.depth + 1 }) : [];
5021
5332
  const parts = [];
@@ -5025,7 +5336,7 @@ function parseCell(records, lhIdx, end, ctx) {
5025
5336
  parts.push(`![image](hwp5bin:${b.text})`);
5026
5337
  hasStructure = true;
5027
5338
  } else if (b.type === "table" && b.table) {
5028
- const flat = _chunk46VU6YXFcjs.convertTableToText.call(void 0, b.table.cells);
5339
+ const flat = _chunkGGZ5PSJOcjs.convertTableToText.call(void 0, b.table.cells);
5029
5340
  if (flat) parts.push(flat);
5030
5341
  hasStructure = true;
5031
5342
  } else if (b.text) {
@@ -5122,13 +5433,13 @@ function pictureToImageBlock(data, ctx) {
5122
5433
  if (data.length < 73) return null;
5123
5434
  const binDataId = data.readUInt16LE(71);
5124
5435
  if (binDataId === 0) return null;
5125
- const item = _optionalChain([ctx, 'access', _130 => _130.docInfo, 'optionalAccess', _131 => _131.binData, 'access', _132 => _132[binDataId - 1]]);
5126
- if (_optionalChain([item, 'optionalAccess', _133 => _133.kind]) === "link") {
5127
- ctx.warnings.push({ page: ctx.sectionNum, message: `\uC678\uBD80 \uC5F0\uACB0 \uC774\uBBF8\uC9C0 (binDataId ${binDataId})`, code: "SKIPPED_IMAGE" });
5436
+ const item = _optionalChain([ctx, 'access', _135 => _135.docInfo, 'optionalAccess', _136 => _136.binData, 'access', _137 => _137[binDataId - 1]]);
5437
+ if (_optionalChain([item, 'optionalAccess', _138 => _138.kind]) === "link") {
5438
+ ctx.warnings.push({ page: ctx.page, message: `\uC678\uBD80 \uC5F0\uACB0 \uC774\uBBF8\uC9C0 (binDataId ${binDataId})`, code: "SKIPPED_IMAGE" });
5128
5439
  return null;
5129
5440
  }
5130
5441
  const storageId = item && item.storageId > 0 ? item.storageId : binDataId;
5131
- return { type: "image", text: String(storageId), pageNumber: ctx.sectionNum };
5442
+ return { type: "image", text: String(storageId), pageNumber: ctx.page };
5132
5443
  }
5133
5444
  function resolveCharStyle(charShapeIds, docInfo) {
5134
5445
  if (charShapeIds.length === 0 || docInfo.charShapes.length === 0) return void 0;
@@ -17300,40 +17611,40 @@ function desEcbDecrypt(data, key) {
17300
17611
  }
17301
17612
  function readLayout(data) {
17302
17613
  if (data.length < FIXED_HEADER_BYTES) {
17303
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("HWP3 \uC554\uD638 \uBB38\uC11C: \uD5E4\uB354\uAC00 \uC798\uB838\uC2B5\uB2C8\uB2E4");
17614
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("HWP3 \uC554\uD638 \uBB38\uC11C: \uD5E4\uB354\uAC00 \uC798\uB838\uC2B5\uB2C8\uB2E4");
17304
17615
  }
17305
17616
  const infoBlockLength = data[INFO_BLOCK_LENGTH_OFFSET] | data[INFO_BLOCK_LENGTH_OFFSET + 1] << 8;
17306
17617
  const payloadOffset = FIXED_HEADER_BYTES + infoBlockLength;
17307
17618
  if (payloadOffset >= data.length) {
17308
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("HWP3 \uC554\uD638 \uBB38\uC11C: \uBCF8\uBB38\uC774 \uC5C6\uC2B5\uB2C8\uB2E4");
17619
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("HWP3 \uC554\uD638 \uBB38\uC11C: \uBCF8\uBB38\uC774 \uC5C6\uC2B5\uB2C8\uB2E4");
17309
17620
  }
17310
17621
  return { payloadOffset, compressed: data[COMPRESSION_FLAG_OFFSET] !== 0 };
17311
17622
  }
17312
17623
  function decryptHwp3Document(input, password) {
17313
17624
  const { payloadOffset, compressed } = readLayout(input);
17314
17625
  if (!compressed) {
17315
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 HWP3 \uC554\uD638\uD654 \uBC29\uC2DD\uC785\uB2C8\uB2E4 (\uC555\uCD95\uB418\uC9C0 \uC54A\uC740 \uC554\uD638 \uBCF8\uBB38)");
17626
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 HWP3 \uC554\uD638\uD654 \uBC29\uC2DD\uC785\uB2C8\uB2E4 (\uC555\uCD95\uB418\uC9C0 \uC54A\uC740 \uC554\uD638 \uBCF8\uBB38)");
17316
17627
  }
17317
17628
  const source = Buffer.from(input);
17318
17629
  const payload = source.subarray(payloadOffset);
17319
17630
  const aligned = payload.subarray(0, payload.length - payload.length % 8);
17320
17631
  if (aligned.length === 0) {
17321
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("HWP3 \uC554\uD638 \uBB38\uC11C: \uBCF8\uBB38\uC774 \uB108\uBB34 \uC9E7\uC2B5\uB2C8\uB2E4");
17632
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("HWP3 \uC554\uD638 \uBB38\uC11C: \uBCF8\uBB38\uC774 \uB108\uBB34 \uC9E7\uC2B5\uB2C8\uB2E4");
17322
17633
  }
17323
17634
  const decrypted = desEcbDecrypt(aligned, deriveDesKey(password));
17324
17635
  let inflated;
17325
17636
  try {
17326
17637
  inflated = _zlib.inflateRawSync.call(void 0, decrypted, { maxOutputLength: MAX_DECOMPRESSED_BYTES });
17327
17638
  } catch (err) {
17328
- if (_optionalChain([err, 'optionalAccess', _134 => _134.code]) === "ERR_BUFFER_TOO_LARGE") {
17329
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(
17639
+ if (_optionalChain([err, 'optionalAccess', _139 => _139.code]) === "ERR_BUFFER_TOO_LARGE") {
17640
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(
17330
17641
  `HWP3 \uC554\uD638 \uBCF8\uBB38\uC758 \uC555\uCD95 \uD574\uC81C \uACB0\uACFC\uAC00 \uCD5C\uB300 \uD5C8\uC6A9 \uD06C\uAE30(${MAX_DECOMPRESSED_BYTES / 1024 / 1024}MB)\uB97C \uCD08\uACFC\uD588\uC2B5\uB2C8\uB2E4`
17331
17642
  );
17332
17643
  }
17333
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uAC70\uB098 \uC554\uD638\uD654 \uB370\uC774\uD130\uAC00 \uC190\uC0C1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
17644
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uAC70\uB098 \uC554\uD638\uD654 \uB370\uC774\uD130\uAC00 \uC190\uC0C1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
17334
17645
  }
17335
17646
  if (inflated.length <= PASSWORD_PREFIX_BYTES) {
17336
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uAC70\uB098 \uC554\uD638\uD654 \uB370\uC774\uD130\uAC00 \uC190\uC0C1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
17647
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uAC70\uB098 \uC554\uD638\uD654 \uB370\uC774\uD130\uAC00 \uC190\uC0C1\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
17337
17648
  }
17338
17649
  const body = inflated.subarray(PASSWORD_PREFIX_BYTES);
17339
17650
  const out = Buffer.concat([source.subarray(0, payloadOffset), body]);
@@ -17367,8 +17678,8 @@ var SIMPLE_CTRL = /* @__PURE__ */ new Map([
17367
17678
  function parseHwp3Document(buffer, options) {
17368
17679
  let source = Buffer.from(buffer);
17369
17680
  if (isEncryptedHwp3(source)) {
17370
- if (!_optionalChain([options, 'optionalAccess', _135 => _135.password])) {
17371
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(
17681
+ if (!_optionalChain([options, 'optionalAccess', _140 => _140.password])) {
17682
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(
17372
17683
  "\uC554\uD638\uB85C \uBCF4\uD638\uB41C HWP3 \uBB38\uC11C\uC785\uB2C8\uB2E4. password \uC635\uC158\uC5D0 \uC5F4\uAE30 \uC554\uD638\uB97C \uC9C0\uC815\uD558\uC138\uC694."
17373
17684
  );
17374
17685
  }
@@ -17384,11 +17695,11 @@ function parseHwp3Document(buffer, options) {
17384
17695
  try {
17385
17696
  body = _zlib.inflateRawSync.call(void 0, tail, { maxOutputLength: MAX_DECOMPRESS_SIZE3 });
17386
17697
  } catch (err) {
17387
- if (_optionalChain([err, 'optionalAccess', _136 => _136.code]) === "ERR_BUFFER_TOO_LARGE") {
17388
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`HWP3 \uC555\uCD95 \uD574\uC81C \uACB0\uACFC\uAC00 \uCD5C\uB300 \uD5C8\uC6A9 \uD06C\uAE30(${MAX_DECOMPRESS_SIZE3 / 1024 / 1024}MB)\uB97C \uCD08\uACFC\uD588\uC2B5\uB2C8\uB2E4`);
17698
+ if (_optionalChain([err, 'optionalAccess', _141 => _141.code]) === "ERR_BUFFER_TOO_LARGE") {
17699
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`HWP3 \uC555\uCD95 \uD574\uC81C \uACB0\uACFC\uAC00 \uCD5C\uB300 \uD5C8\uC6A9 \uD06C\uAE30(${MAX_DECOMPRESS_SIZE3 / 1024 / 1024}MB)\uB97C \uCD08\uACFC\uD588\uC2B5\uB2C8\uB2E4`);
17389
17700
  }
17390
17701
  const msg2 = err instanceof Error ? err.message : String(err);
17391
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`HWP3 \uC555\uCD95 \uD574\uC81C \uC2E4\uD328: ${msg2}`);
17702
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`HWP3 \uC555\uCD95 \uD574\uC81C \uC2E4\uD328: ${msg2}`);
17392
17703
  }
17393
17704
  } else {
17394
17705
  body = tail;
@@ -17622,15 +17933,15 @@ function getElements(parent, tagName) {
17622
17933
  const result = [];
17623
17934
  for (let i = 0; i < nodes.length; i++) result.push(nodes[i]);
17624
17935
  if (result.length > 0) return result;
17625
- const nsNodes = _optionalChain([parent, 'access', _137 => _137.getElementsByTagNameNS, 'optionalCall', _138 => _138("*", tagName)]);
17936
+ const nsNodes = _optionalChain([parent, 'access', _142 => _142.getElementsByTagNameNS, 'optionalCall', _143 => _143("*", tagName)]);
17626
17937
  if (nsNodes) for (let i = 0; i < nsNodes.length; i++) result.push(nsNodes[i]);
17627
17938
  return result;
17628
17939
  }
17629
17940
  function getTextContent(el) {
17630
- return _nullishCoalesce(_optionalChain([el, 'access', _139 => _139.textContent, 'optionalAccess', _140 => _140.trim, 'call', _141 => _141()]), () => ( ""));
17941
+ return _nullishCoalesce(_optionalChain([el, 'access', _144 => _144.textContent, 'optionalAccess', _145 => _145.trim, 'call', _146 => _146()]), () => ( ""));
17631
17942
  }
17632
17943
  function parseXml(text) {
17633
- return new (0, _xmldom.DOMParser)().parseFromString(_chunkDZBMQC2Ncjs.stripDtd.call(void 0, text), "text/xml");
17944
+ return new (0, _xmldom.DOMParser)().parseFromString(_chunkJ7DBL77Bcjs.stripDtd.call(void 0, text), "text/xml");
17634
17945
  }
17635
17946
  function collectRichText(root) {
17636
17947
  let out = "";
@@ -17639,7 +17950,7 @@ function collectRichText(root) {
17639
17950
  for (let i = 0; i < children.length; i++) {
17640
17951
  if (children[i].nodeType !== 1) continue;
17641
17952
  const el = children[i];
17642
- const local = el.localName || _optionalChain([el, 'access', _142 => _142.tagName, 'optionalAccess', _143 => _143.replace, 'call', _144 => _144(/^[^:]+:/, "")]) || "";
17953
+ const local = el.localName || _optionalChain([el, 'access', _147 => _147.tagName, 'optionalAccess', _148 => _148.replace, 'call', _149 => _149(/^[^:]+:/, "")]) || "";
17643
17954
  if (local === "rPh") continue;
17644
17955
  if (local === "t") out += _nullishCoalesce(el.textContent, () => ( ""));
17645
17956
  else walk(el);
@@ -17858,14 +18169,14 @@ function sheetToBlocks(sheetName, grid, merges, maxRow, maxCol, sheetIndex, keep
17858
18169
  const merge = mergeMap.get(key);
17859
18170
  row.push({
17860
18171
  text,
17861
- colSpan: _nullishCoalesce(_optionalChain([merge, 'optionalAccess', _145 => _145.colSpan]), () => ( 1)),
17862
- rowSpan: _nullishCoalesce(_optionalChain([merge, 'optionalAccess', _146 => _146.rowSpan]), () => ( 1))
18172
+ colSpan: _nullishCoalesce(_optionalChain([merge, 'optionalAccess', _150 => _150.colSpan]), () => ( 1)),
18173
+ rowSpan: _nullishCoalesce(_optionalChain([merge, 'optionalAccess', _151 => _151.rowSpan]), () => ( 1))
17863
18174
  });
17864
18175
  }
17865
18176
  cellRows.push(row);
17866
18177
  }
17867
18178
  if (cellRows.length > 0) {
17868
- const table2 = _chunk46VU6YXFcjs.buildTable.call(void 0, cellRows, { keepAnchoredEmptyCols });
18179
+ const table2 = _chunkGGZ5PSJOcjs.buildTable.call(void 0, cellRows, { keepAnchoredEmptyCols });
17869
18180
  if (table2.rows > 0) {
17870
18181
  blocks.push({ type: "table", table: table2, pageNumber: sheetIndex + 1 });
17871
18182
  }
@@ -17873,12 +18184,12 @@ function sheetToBlocks(sheetName, grid, merges, maxRow, maxCol, sheetIndex, keep
17873
18184
  return blocks;
17874
18185
  }
17875
18186
  async function parseXlsxDocument(buffer, options) {
17876
- _chunkDZBMQC2Ncjs.precheckZipSize.call(void 0, buffer, MAX_DECOMPRESS_SIZE4);
18187
+ _chunkJ7DBL77Bcjs.precheckZipSize.call(void 0, buffer, MAX_DECOMPRESS_SIZE4);
17877
18188
  const zip = await _jszip2.default.loadAsync(buffer);
17878
18189
  const warnings = [];
17879
18190
  const workbookFile = zip.file("xl/workbook.xml");
17880
18191
  if (!workbookFile) {
17881
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 XLSX \uD30C\uC77C: xl/workbook.xml\uC774 \uC5C6\uC2B5\uB2C8\uB2E4");
18192
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 XLSX \uD30C\uC77C: xl/workbook.xml\uC774 \uC5C6\uC2B5\uB2C8\uB2E4");
17882
18193
  }
17883
18194
  let sharedStrings = [];
17884
18195
  const ssFile = zip.file("xl/sharedStrings.xml");
@@ -17887,7 +18198,7 @@ async function parseXlsxDocument(buffer, options) {
17887
18198
  }
17888
18199
  const { sheets, date1904 } = parseWorkbook(await workbookFile.async("text"));
17889
18200
  if (sheets.length === 0) {
17890
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("XLSX \uD30C\uC77C\uC5D0 \uC2DC\uD2B8\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4");
18201
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("XLSX \uD30C\uC77C\uC5D0 \uC2DC\uD2B8\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4");
17891
18202
  }
17892
18203
  let dateXfs = /* @__PURE__ */ new Map();
17893
18204
  const stylesFile = zip.file("xl/styles.xml");
@@ -17907,7 +18218,7 @@ async function parseXlsxDocument(buffer, options) {
17907
18218
  relsMap = parseRels(await relsFile.async("text"));
17908
18219
  }
17909
18220
  let pageFilter = null;
17910
- if (_optionalChain([options, 'optionalAccess', _147 => _147.pages])) {
18221
+ if (_optionalChain([options, 'optionalAccess', _152 => _152.pages])) {
17911
18222
  const { parsePageRange: parsePageRange2 } = await Promise.resolve().then(() => _interopRequireWildcard(require("./page-range-P7SDW6LR.cjs")));
17912
18223
  pageFilter = parsePageRange2(options.pages, sheets.length);
17913
18224
  }
@@ -17916,7 +18227,7 @@ async function parseXlsxDocument(buffer, options) {
17916
18227
  for (let i = 0; i < processedSheets; i++) {
17917
18228
  if (pageFilter && !pageFilter.has(i + 1)) continue;
17918
18229
  const sheet = sheets[i];
17919
- _optionalChain([options, 'optionalAccess', _148 => _148.onProgress, 'optionalCall', _149 => _149(i + 1, processedSheets)]);
18230
+ _optionalChain([options, 'optionalAccess', _153 => _153.onProgress, 'optionalCall', _154 => _154(i + 1, processedSheets)]);
17920
18231
  let sheetPath = relsMap.get(sheet.rId);
17921
18232
  if (sheetPath) {
17922
18233
  if (!sheetPath.startsWith("xl/") && !sheetPath.startsWith("/")) {
@@ -17939,7 +18250,7 @@ async function parseXlsxDocument(buffer, options) {
17939
18250
  try {
17940
18251
  const sheetXml = await sheetFile.async("text");
17941
18252
  const { grid, merges, maxRow, maxCol } = parseWorksheet(sheetXml, sharedStrings, dateXfs, date1904);
17942
- const sheetBlocks = sheetToBlocks(sheet.name, grid, merges, maxRow, maxCol, i, _optionalChain([options, 'optionalAccess', _150 => _150.keepTrailingEmptyCols]));
18253
+ const sheetBlocks = sheetToBlocks(sheet.name, grid, merges, maxRow, maxCol, i, _optionalChain([options, 'optionalAccess', _155 => _155.keepTrailingEmptyCols]));
17943
18254
  blocks.push(...sheetBlocks);
17944
18255
  } catch (err) {
17945
18256
  warnings.push({
@@ -17971,7 +18282,7 @@ async function parseXlsxDocument(buffer, options) {
17971
18282
  } catch (e32) {
17972
18283
  }
17973
18284
  }
17974
- const markdown = _chunk46VU6YXFcjs.blocksToMarkdown.call(void 0, blocks);
18285
+ const markdown = _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, blocks);
17975
18286
  return { markdown, blocks, metadata, warnings: warnings.length > 0 ? warnings : void 0 };
17976
18287
  }
17977
18288
 
@@ -18422,11 +18733,11 @@ function processGlobals(records) {
18422
18733
  const xfFmtIds = [];
18423
18734
  const firstBof = records[0];
18424
18735
  if (!firstBof || firstBof.opcode !== OP_BOF) {
18425
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("XLS: \uCCAB \uB808\uCF54\uB4DC\uAC00 BOF\uAC00 \uC544\uB2D8");
18736
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("XLS: \uCCAB \uB808\uCF54\uB4DC\uAC00 BOF\uAC00 \uC544\uB2D8");
18426
18737
  }
18427
18738
  const bof = decodeBof(firstBof.data);
18428
18739
  if (!bof || bof.dt !== DT_GLOBALS) {
18429
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("XLS: Globals \uC11C\uBE0C\uC2A4\uD2B8\uB9BC BOF \uB204\uB77D");
18740
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("XLS: Globals \uC11C\uBE0C\uC2A4\uD2B8\uB9BC BOF \uB204\uB77D");
18430
18741
  }
18431
18742
  let i = 1;
18432
18743
  while (i < records.length) {
@@ -18554,14 +18865,14 @@ function sheetToBlocks2(sheetName, sheet, sheetIndex, keepAnchoredEmptyCols) {
18554
18865
  const merge = mergeMap.get(key);
18555
18866
  row.push({
18556
18867
  text: grid[r][c],
18557
- colSpan: _nullishCoalesce(_optionalChain([merge, 'optionalAccess', _151 => _151.colSpan]), () => ( 1)),
18558
- rowSpan: _nullishCoalesce(_optionalChain([merge, 'optionalAccess', _152 => _152.rowSpan]), () => ( 1))
18868
+ colSpan: _nullishCoalesce(_optionalChain([merge, 'optionalAccess', _156 => _156.colSpan]), () => ( 1)),
18869
+ rowSpan: _nullishCoalesce(_optionalChain([merge, 'optionalAccess', _157 => _157.rowSpan]), () => ( 1))
18559
18870
  });
18560
18871
  }
18561
18872
  cellRows.push(row);
18562
18873
  }
18563
18874
  if (cellRows.length > 0) {
18564
- const table2 = _chunk46VU6YXFcjs.buildTable.call(void 0, cellRows, { keepAnchoredEmptyCols });
18875
+ const table2 = _chunkGGZ5PSJOcjs.buildTable.call(void 0, cellRows, { keepAnchoredEmptyCols });
18565
18876
  if (table2.rows > 0) {
18566
18877
  blocks.push({ type: "table", table: table2, pageNumber: sheetIndex + 1 });
18567
18878
  }
@@ -18574,28 +18885,28 @@ async function parseXlsDocument(buffer, options) {
18574
18885
  try {
18575
18886
  cfb = parseLenientCfb(buf);
18576
18887
  } catch (e) {
18577
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(
18888
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(
18578
18889
  `XLS: OLE2 \uC2DC\uADF8\uB2C8\uCC98 \uAC80\uC99D \uC2E4\uD328 \u2014 ${e instanceof Error ? e.message : "\uC54C \uC218 \uC5C6\uB294 \uC624\uB958"}`
18579
18890
  );
18580
18891
  }
18581
18892
  const wb = _nullishCoalesce(cfb.findStream("/Workbook"), () => ( cfb.findStream("/Book")));
18582
18893
  if (!wb) {
18583
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("XLS: Workbook \uC2A4\uD2B8\uB9BC\uC774 \uC5C6\uC74C (BIFF5 \uB610\uB294 \uBE44\uD45C\uC900 \uD30C\uC77C)");
18894
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("XLS: Workbook \uC2A4\uD2B8\uB9BC\uC774 \uC5C6\uC74C (BIFF5 \uB610\uB294 \uBE44\uD45C\uC900 \uD30C\uC77C)");
18584
18895
  }
18585
18896
  const records = readRecords2(wb);
18586
18897
  if (records.length === 0) {
18587
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("XLS: \uC2DC\uADF8\uB2C8\uCC98 \uB808\uCF54\uB4DC\uAC00 \uC5C6\uC74C (Workbook \uC2A4\uD2B8\uB9BC \uC190\uC0C1)");
18898
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("XLS: \uC2DC\uADF8\uB2C8\uCC98 \uB808\uCF54\uB4DC\uAC00 \uC5C6\uC74C (Workbook \uC2A4\uD2B8\uB9BC \uC190\uC0C1)");
18588
18899
  }
18589
18900
  const firstBof = decodeBof(records[0].data);
18590
18901
  if (firstBof && firstBof.vers !== 1536) {
18591
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(
18902
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(
18592
18903
  `XLS: BIFF8(0x0600)\uB9CC \uC9C0\uC6D0 \u2014 \uBCF8 \uD30C\uC77C\uC740 0x${firstBof.vers.toString(16)}`
18593
18904
  );
18594
18905
  }
18595
18906
  const globals = processGlobals(records);
18596
18907
  const warnings = [];
18597
18908
  if (globals.encrypted) {
18598
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("XLS \uD30C\uC77C\uC774 \uC554\uD638\uD654\uB418\uC5B4 \uC788\uC5B4 \uD30C\uC2F1\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
18909
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("XLS \uD30C\uC77C\uC774 \uC554\uD638\uD654\uB418\uC5B4 \uC788\uC5B4 \uD30C\uC2F1\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
18599
18910
  }
18600
18911
  const convertNum = globals.dateXfs.size > 0 ? (n, ixfe) => {
18601
18912
  const kind = globals.dateXfs.get(ixfe);
@@ -18607,7 +18918,7 @@ async function parseXlsDocument(buffer, options) {
18607
18918
  } : void 0;
18608
18919
  const totalSheets = Math.min(globals.sheets.length, MAX_SHEETS2);
18609
18920
  let pageFilter = null;
18610
- if (_optionalChain([options, 'optionalAccess', _153 => _153.pages])) {
18921
+ if (_optionalChain([options, 'optionalAccess', _158 => _158.pages])) {
18611
18922
  const { parsePageRange: parsePageRange2 } = await Promise.resolve().then(() => _interopRequireWildcard(require("./page-range-P7SDW6LR.cjs")));
18612
18923
  pageFilter = parsePageRange2(options.pages, totalSheets);
18613
18924
  }
@@ -18616,7 +18927,7 @@ async function parseXlsDocument(buffer, options) {
18616
18927
  if (pageFilter && !pageFilter.has(i + 1)) continue;
18617
18928
  const meta = globals.sheets[i];
18618
18929
  if (meta.dt !== 0) continue;
18619
- _optionalChain([options, 'optionalAccess', _154 => _154.onProgress, 'optionalCall', _155 => _155(i + 1, totalSheets)]);
18930
+ _optionalChain([options, 'optionalAccess', _159 => _159.onProgress, 'optionalCall', _160 => _160(i + 1, totalSheets)]);
18620
18931
  const bofIdx = findSheetBofIndex(records, meta.lbPlyPos);
18621
18932
  if (bofIdx < 0) {
18622
18933
  warnings.push({
@@ -18632,7 +18943,7 @@ async function parseXlsDocument(buffer, options) {
18632
18943
  }
18633
18944
  try {
18634
18945
  const { sheet } = extractSheetCells(records, bofIdx, globals.sst, convertNum);
18635
- const blocks = sheetToBlocks2(meta.name, sheet, i, _optionalChain([options, 'optionalAccess', _156 => _156.keepTrailingEmptyCols]));
18946
+ const blocks = sheetToBlocks2(meta.name, sheet, i, _optionalChain([options, 'optionalAccess', _161 => _161.keepTrailingEmptyCols]));
18636
18947
  allBlocks.push(...blocks);
18637
18948
  } catch (e) {
18638
18949
  warnings.push({
@@ -18646,7 +18957,7 @@ async function parseXlsDocument(buffer, options) {
18646
18957
  pageCount: totalSheets
18647
18958
  };
18648
18959
  return {
18649
- markdown: _chunk46VU6YXFcjs.blocksToMarkdown.call(void 0, allBlocks),
18960
+ markdown: _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, allBlocks),
18650
18961
  blocks: allBlocks,
18651
18962
  metadata,
18652
18963
  warnings: warnings.length > 0 ? warnings : void 0
@@ -19019,8 +19330,8 @@ function isDisplayMath(el) {
19019
19330
 
19020
19331
  // src/docx/parser.ts
19021
19332
  var MAX_DECOMPRESS_SIZE5 = 100 * 1024 * 1024;
19022
- function matchesLocal(el, localName2) {
19023
- return el.localName === localName2 || (_nullishCoalesce(_optionalChain([el, 'access', _157 => _157.tagName, 'optionalAccess', _158 => _158.endsWith, 'call', _159 => _159(`:${localName2}`)]), () => ( false)));
19333
+ function matchesLocal(el, localName3) {
19334
+ return el.localName === localName3 || (_nullishCoalesce(_optionalChain([el, 'access', _162 => _162.tagName, 'optionalAccess', _163 => _163.endsWith, 'call', _164 => _164(`:${localName3}`)]), () => ( false)));
19024
19335
  }
19025
19336
  function effectiveChildElements(parent) {
19026
19337
  const result = [];
@@ -19044,10 +19355,10 @@ function effectiveChildElements(parent) {
19044
19355
  }
19045
19356
  return result;
19046
19357
  }
19047
- function getChildElements(parent, localName2) {
19048
- return effectiveChildElements(parent).filter((el) => matchesLocal(el, localName2));
19358
+ function getChildElements(parent, localName3) {
19359
+ return effectiveChildElements(parent).filter((el) => matchesLocal(el, localName3));
19049
19360
  }
19050
- function findElements(parent, localName2) {
19361
+ function findElements(parent, localName3) {
19051
19362
  const result = [];
19052
19363
  const walk = (node) => {
19053
19364
  const children = node.childNodes;
@@ -19055,7 +19366,7 @@ function findElements(parent, localName2) {
19055
19366
  const child = children[i];
19056
19367
  if (child.nodeType === 1) {
19057
19368
  const el = child;
19058
- if (el.localName === localName2 || _optionalChain([el, 'access', _160 => _160.tagName, 'optionalAccess', _161 => _161.endsWith, 'call', _162 => _162(`:${localName2}`)])) {
19369
+ if (el.localName === localName3 || _optionalChain([el, 'access', _165 => _165.tagName, 'optionalAccess', _166 => _166.endsWith, 'call', _167 => _167(`:${localName3}`)])) {
19059
19370
  result.push(el);
19060
19371
  }
19061
19372
  walk(el);
@@ -19065,16 +19376,16 @@ function findElements(parent, localName2) {
19065
19376
  walk(parent);
19066
19377
  return result;
19067
19378
  }
19068
- function getAttr(el, localName2) {
19379
+ function getAttr(el, localName3) {
19069
19380
  const attrs = el.attributes;
19070
19381
  for (let i = 0; i < attrs.length; i++) {
19071
19382
  const attr = attrs[i];
19072
- if (attr.localName === localName2 || attr.name === localName2) return attr.value;
19383
+ if (attr.localName === localName3 || attr.name === localName3) return attr.value;
19073
19384
  }
19074
19385
  return null;
19075
19386
  }
19076
19387
  function parseXml2(text) {
19077
- return new (0, _xmldom.DOMParser)().parseFromString(_chunkDZBMQC2Ncjs.stripDtd.call(void 0, text), "text/xml");
19388
+ return new (0, _xmldom.DOMParser)().parseFromString(_chunkJ7DBL77Bcjs.stripDtd.call(void 0, text), "text/xml");
19078
19389
  }
19079
19390
  function parseStyles(xml) {
19080
19391
  const doc = parseXml2(xml);
@@ -19191,7 +19502,7 @@ function collectOmmlRoots(p) {
19191
19502
  const child = children[i];
19192
19503
  if (child.nodeType !== 1) continue;
19193
19504
  const el = child;
19194
- const tag = el.localName || _optionalChain([el, 'access', _163 => _163.tagName, 'optionalAccess', _164 => _164.replace, 'call', _165 => _165(/^[^:]+:/, "")]) || "";
19505
+ const tag = el.localName || _optionalChain([el, 'access', _168 => _168.tagName, 'optionalAccess', _169 => _169.replace, 'call', _170 => _170(/^[^:]+:/, "")]) || "";
19195
19506
  if (tag === "oMath" || tag === "oMathPara") {
19196
19507
  out.push(el);
19197
19508
  } else if (tag === "txbxContent" || tag === "Fallback") {
@@ -19232,7 +19543,7 @@ function fieldUrlFromInstr(instr) {
19232
19543
  function makeLink(text, rawHref) {
19233
19544
  if (!text) return "";
19234
19545
  if (!rawHref) return text;
19235
- const href = _chunkDZBMQC2Ncjs.sanitizeHref.call(void 0, rawHref);
19546
+ const href = _chunkJ7DBL77Bcjs.sanitizeHref.call(void 0, rawHref);
19236
19547
  return href ? `[${text}](${href})` : text;
19237
19548
  }
19238
19549
  function collectInline(p, footnotes, rels) {
@@ -19334,7 +19645,7 @@ function parseParagraph2(p, styles, numbering, footnotes, rels) {
19334
19645
  const { text, bold: hasBold, italic: hasItalic, footnoteText } = collectInline(p, footnotes, rels);
19335
19646
  if (!text) return null;
19336
19647
  const style = styles.get(styleId);
19337
- if (_optionalChain([style, 'optionalAccess', _166 => _166.outlineLevel]) !== void 0 && style.outlineLevel >= 0 && style.outlineLevel <= 5) {
19648
+ if (_optionalChain([style, 'optionalAccess', _171 => _171.outlineLevel]) !== void 0 && style.outlineLevel >= 0 && style.outlineLevel <= 5) {
19338
19649
  return {
19339
19650
  type: "heading",
19340
19651
  text,
@@ -19343,8 +19654,8 @@ function parseParagraph2(p, styles, numbering, footnotes, rels) {
19343
19654
  }
19344
19655
  if (numId && numId !== "0") {
19345
19656
  const numDef = numbering.get(numId);
19346
- const levelInfo = _optionalChain([numDef, 'optionalAccess', _167 => _167.get, 'call', _168 => _168(ilvl)]);
19347
- const listType = _optionalChain([levelInfo, 'optionalAccess', _169 => _169.numFmt]) === "bullet" ? "unordered" : "ordered";
19657
+ const levelInfo = _optionalChain([numDef, 'optionalAccess', _172 => _172.get, 'call', _173 => _173(ilvl)]);
19658
+ const listType = _optionalChain([levelInfo, 'optionalAccess', _174 => _174.numFmt]) === "bullet" ? "unordered" : "ordered";
19348
19659
  return { type: "list", text, listType };
19349
19660
  }
19350
19661
  const block = { type: "paragraph", text };
@@ -19426,7 +19737,7 @@ ${cell2.text}` : cell2.text;
19426
19737
  return { text: cell2.text, colSpan: cell2.colSpan, rowSpan, colAddr: cell2.col, rowAddr: r };
19427
19738
  })
19428
19739
  );
19429
- const table2 = _chunk46VU6YXFcjs.buildTable.call(void 0, cellRows, { keepAnchoredEmptyCols: keepEmptyCols });
19740
+ const table2 = _chunkGGZ5PSJOcjs.buildTable.call(void 0, cellRows, { keepAnchoredEmptyCols: keepEmptyCols });
19430
19741
  if (table2.rows === 0 || table2.cols === 0) return null;
19431
19742
  return { type: "table", table: table2 };
19432
19743
  }
@@ -19436,10 +19747,10 @@ function collectCellText(tc2, styles, numbering, footnotes, rels, depth) {
19436
19747
  for (const el of effectiveChildElements(tc2)) {
19437
19748
  if (matchesLocal(el, "p")) {
19438
19749
  const block = parseParagraph2(el, styles, numbering, footnotes, rels);
19439
- if (_optionalChain([block, 'optionalAccess', _170 => _170.text])) parts.push(block.text);
19750
+ if (_optionalChain([block, 'optionalAccess', _175 => _175.text])) parts.push(block.text);
19440
19751
  for (const tp of collectTextboxParagraphs(el)) {
19441
19752
  const tb = parseParagraph2(tp, styles, numbering, footnotes, rels);
19442
- if (_optionalChain([tb, 'optionalAccess', _171 => _171.text])) parts.push(tb.text);
19753
+ if (_optionalChain([tb, 'optionalAccess', _176 => _176.text])) parts.push(tb.text);
19443
19754
  }
19444
19755
  } else if (matchesLocal(el, "tbl")) {
19445
19756
  for (const tr of getChildElements(el, "tr")) {
@@ -19474,7 +19785,7 @@ async function buildImageMap(zip, rels, doc, warnings) {
19474
19785
  try {
19475
19786
  const data = await imgFile.async("uint8array");
19476
19787
  imgIdx++;
19477
- const ext = _nullishCoalesce(_optionalChain([imgPath, 'access', _172 => _172.split, 'call', _173 => _173("."), 'access', _174 => _174.pop, 'call', _175 => _175(), 'optionalAccess', _176 => _176.toLowerCase, 'call', _177 => _177()]), () => ( "png"));
19788
+ const ext = _nullishCoalesce(_optionalChain([imgPath, 'access', _177 => _177.split, 'call', _178 => _178("."), 'access', _179 => _179.pop, 'call', _180 => _180(), 'optionalAccess', _181 => _181.toLowerCase, 'call', _182 => _182()]), () => ( "png"));
19478
19789
  const mimeMap = {
19479
19790
  png: "image/png",
19480
19791
  jpg: "image/jpeg",
@@ -19528,12 +19839,12 @@ function emitParagraphImages(p, imageMap, linked, out) {
19528
19839
  }
19529
19840
  }
19530
19841
  async function parseDocxDocument(buffer, options) {
19531
- _chunkDZBMQC2Ncjs.precheckZipSize.call(void 0, buffer, MAX_DECOMPRESS_SIZE5);
19842
+ _chunkJ7DBL77Bcjs.precheckZipSize.call(void 0, buffer, MAX_DECOMPRESS_SIZE5);
19532
19843
  const zip = await _jszip2.default.loadAsync(buffer);
19533
19844
  const warnings = [];
19534
19845
  const docFile = zip.file("word/document.xml");
19535
19846
  if (!docFile) {
19536
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 DOCX \uD30C\uC77C: word/document.xml\uC774 \uC5C6\uC2B5\uB2C8\uB2E4");
19847
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 DOCX \uD30C\uC77C: word/document.xml\uC774 \uC5C6\uC2B5\uB2C8\uB2E4");
19537
19848
  }
19538
19849
  let rels = /* @__PURE__ */ new Map();
19539
19850
  const relsFile = zip.file("word/_rels/document.xml.rels");
@@ -19580,7 +19891,7 @@ async function parseDocxDocument(buffer, options) {
19580
19891
  const doc = parseXml2(docXml);
19581
19892
  const body = findElements(doc, "body");
19582
19893
  if (body.length === 0) {
19583
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("DOCX \uBCF8\uBB38(w:body)\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
19894
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("DOCX \uBCF8\uBB38(w:body)\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
19584
19895
  }
19585
19896
  const { imageMap, images } = await buildImageMap(zip, rels, doc, warnings);
19586
19897
  const linkedImages = /* @__PURE__ */ new Set();
@@ -19588,8 +19899,8 @@ async function parseDocxDocument(buffer, options) {
19588
19899
  const bodyEl = body[0];
19589
19900
  const topLevel = effectiveChildElements(bodyEl);
19590
19901
  for (const el of topLevel) {
19591
- const localName2 = _nullishCoalesce(el.localName, () => ( _optionalChain([el, 'access', _178 => _178.tagName, 'optionalAccess', _179 => _179.split, 'call', _180 => _180(":"), 'access', _181 => _181.pop, 'call', _182 => _182()])));
19592
- if (localName2 === "p") {
19902
+ const localName3 = _nullishCoalesce(el.localName, () => ( _optionalChain([el, 'access', _183 => _183.tagName, 'optionalAccess', _184 => _184.split, 'call', _185 => _185(":"), 'access', _186 => _186.pop, 'call', _187 => _187()])));
19903
+ if (localName3 === "p") {
19593
19904
  const block = parseParagraph2(el, styles, numbering, footnotes, rels);
19594
19905
  if (block) blocks.push(block);
19595
19906
  if (imageMap.size > 0) emitParagraphImages(el, imageMap, linkedImages, blocks);
@@ -19598,8 +19909,8 @@ async function parseDocxDocument(buffer, options) {
19598
19909
  if (tb) blocks.push(tb);
19599
19910
  if (imageMap.size > 0) emitParagraphImages(tp, imageMap, linkedImages, blocks);
19600
19911
  }
19601
- } else if (localName2 === "tbl") {
19602
- const block = parseTable(el, styles, numbering, footnotes, rels, _optionalChain([options, 'optionalAccess', _183 => _183.keepTrailingEmptyCols]));
19912
+ } else if (localName3 === "tbl") {
19913
+ const block = parseTable(el, styles, numbering, footnotes, rels, _optionalChain([options, 'optionalAccess', _188 => _188.keepTrailingEmptyCols]));
19603
19914
  if (block) blocks.push(block);
19604
19915
  }
19605
19916
  }
@@ -19631,7 +19942,7 @@ async function parseDocxDocument(buffer, options) {
19631
19942
  }
19632
19943
  }
19633
19944
  const outline = blocks.filter((b) => b.type === "heading").map((b) => ({ level: _nullishCoalesce(b.level, () => ( 2)), text: _nullishCoalesce(b.text, () => ( "")) }));
19634
- const markdown = _chunk46VU6YXFcjs.blocksToMarkdown.call(void 0, blocks);
19945
+ const markdown = _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, blocks);
19635
19946
  return {
19636
19947
  markdown,
19637
19948
  blocks,
@@ -19649,11 +19960,11 @@ var MAX_TABLE_COLS = 500;
19649
19960
  var MAX_HWPML_BYTES = 50 * 1024 * 1024;
19650
19961
  function parseHwpmlDocument(buffer, options) {
19651
19962
  if (buffer.byteLength > MAX_HWPML_BYTES) {
19652
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`HWPML \uD30C\uC77C \uD06C\uAE30 \uCD08\uACFC (${(buffer.byteLength / 1024 / 1024).toFixed(1)}MB > 50MB)`);
19963
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`HWPML \uD30C\uC77C \uD06C\uAE30 \uCD08\uACFC (${(buffer.byteLength / 1024 / 1024).toFixed(1)}MB > 50MB)`);
19653
19964
  }
19654
19965
  const text = new TextDecoder("utf-8").decode(buffer).replace(/^\uFEFF/, "");
19655
19966
  const normalized = text.replace(/&nbsp;/g, "&#160;");
19656
- const xml = _chunkDZBMQC2Ncjs.stripDtd.call(void 0, normalized);
19967
+ const xml = _chunkJ7DBL77Bcjs.stripDtd.call(void 0, normalized);
19657
19968
  const warnings = [];
19658
19969
  const parser = new (0, _xmldom.DOMParser)({
19659
19970
  onError: (_level, msg2) => {
@@ -19681,7 +19992,7 @@ function parseHwpmlDocument(buffer, options) {
19681
19992
  return { markdown: "", blocks: [], metadata, warnings };
19682
19993
  }
19683
19994
  const blocks = [];
19684
- const pageFilter = _optionalChain([options, 'optionalAccess', _184 => _184.pages]) ? _chunkDCZVOIEOcjs.parsePageRange.call(void 0, options.pages, countSections(body)) : null;
19995
+ const pageFilter = _optionalChain([options, 'optionalAccess', _189 => _189.pages]) ? _chunkDCZVOIEOcjs.parsePageRange.call(void 0, options.pages, countSections(body)) : null;
19685
19996
  let sectionIdx = 0;
19686
19997
  const children = body.childNodes;
19687
19998
  for (let i = 0; i < children.length; i++) {
@@ -19690,10 +20001,10 @@ function parseHwpmlDocument(buffer, options) {
19690
20001
  if (localName(el) !== "SECTION") continue;
19691
20002
  sectionIdx++;
19692
20003
  if (pageFilter && !pageFilter.has(sectionIdx)) continue;
19693
- parseSection2(el, blocks, paraShapeMap, sectionIdx, warnings, _nullishCoalesce(_optionalChain([options, 'optionalAccess', _185 => _185.keepTrailingEmptyCols]), () => ( false)));
20004
+ parseSection2(el, blocks, paraShapeMap, sectionIdx, warnings, _nullishCoalesce(_optionalChain([options, 'optionalAccess', _190 => _190.keepTrailingEmptyCols]), () => ( false)));
19694
20005
  }
19695
20006
  const outline = blocks.filter((b) => b.type === "heading" && b.text).map((b) => ({ level: _nullishCoalesce(b.level, () => ( 1)), text: b.text, pageNumber: b.pageNumber }));
19696
- const markdown = _chunk46VU6YXFcjs.blocksToMarkdown.call(void 0, blocks);
20007
+ const markdown = _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, blocks);
19697
20008
  return {
19698
20009
  markdown,
19699
20010
  blocks,
@@ -19779,7 +20090,7 @@ function parseParagraph3(el, blocks, paraShapeMap, sectionNum) {
19779
20090
  const shapeInfo = paraShapeMap.get(paraShapeId);
19780
20091
  const text = extractParagraphText(el);
19781
20092
  if (!text) return;
19782
- if (_optionalChain([shapeInfo, 'optionalAccess', _186 => _186.headingLevel]) != null) {
20093
+ if (_optionalChain([shapeInfo, 'optionalAccess', _191 => _191.headingLevel]) != null) {
19783
20094
  blocks.push({ type: "heading", text, level: shapeInfo.headingLevel, pageNumber: sectionNum });
19784
20095
  } else {
19785
20096
  blocks.push({ type: "paragraph", text, pageNumber: sectionNum });
@@ -19858,11 +20169,11 @@ function buildHmlTable(el, warnings, keep, tableDepth) {
19858
20169
  const r = Math.min(Math.max(_nullishCoalesce(cell2.rowAddr, () => ( 0)), 0), rowCount - 1);
19859
20170
  cellRows[r].push(cell2);
19860
20171
  }
19861
- const table2 = _chunk46VU6YXFcjs.buildTable.call(void 0, cellRows, { keepAnchoredEmptyCols: keep });
20172
+ const table2 = _chunkGGZ5PSJOcjs.buildTable.call(void 0, cellRows, { keepAnchoredEmptyCols: keep });
19862
20173
  if (structured.length > 0) {
19863
20174
  const claimed = /* @__PURE__ */ new Set();
19864
20175
  for (const { ctx, cellBlocks } of structured) {
19865
- let target = _optionalChain([table2, 'access', _187 => _187.cells, 'access', _188 => _188[_nullishCoalesce(ctx.rowAddr, () => ( -1))], 'optionalAccess', _189 => _189[_nullishCoalesce(ctx.colAddr, () => ( -1))]]);
20176
+ let target = _optionalChain([table2, 'access', _192 => _192.cells, 'access', _193 => _193[_nullishCoalesce(ctx.rowAddr, () => ( -1))], 'optionalAccess', _194 => _194[_nullishCoalesce(ctx.colAddr, () => ( -1))]]);
19866
20177
  if (!target || claimed.has(target) || target.text !== ctx.text) {
19867
20178
  target = void 0;
19868
20179
  outer: for (const irRow of table2.cells) {
@@ -20166,7 +20477,7 @@ function fillInCellPatterns(cellText, values, matchedLabels, blockedLabels) {
20166
20477
  (match, prefix, suffix) => {
20167
20478
  const label = prefix + suffix;
20168
20479
  const normalizedLabel = normalizeLabel(label);
20169
- if (_optionalChain([blockedLabels, 'optionalAccess', _190 => _190.has, 'call', _191 => _191(normalizedLabel)])) return match;
20480
+ if (_optionalChain([blockedLabels, 'optionalAccess', _195 => _195.has, 'call', _196 => _196(normalizedLabel)])) return match;
20170
20481
  const matchKey = values.available(normalizedLabel) ? normalizedLabel : values.available(normalizeLabel(prefix)) ? normalizeLabel(prefix) : void 0;
20171
20482
  if (matchKey === void 0) return match;
20172
20483
  const newValue = values.consume(matchKey);
@@ -20245,17 +20556,17 @@ function matchInlineSegment(seg, values, blockedLabels) {
20245
20556
  const nlabel = normalizeLabel(seg.label);
20246
20557
  if (seg.extLabel !== void 0) {
20247
20558
  const nExt = normalizeLabel(seg.extLabel);
20248
- if (nExt !== nlabel && !_optionalChain([blockedLabels, 'optionalAccess', _192 => _192.has, 'call', _193 => _193(nExt)]) && values.has(nExt)) {
20559
+ if (nExt !== nlabel && !_optionalChain([blockedLabels, 'optionalAccess', _197 => _197.has, 'call', _198 => _198(nExt)]) && values.has(nExt)) {
20249
20560
  return { key: nExt, label: seg.extLabel, viaExt: true };
20250
20561
  }
20251
20562
  }
20252
- if (_optionalChain([blockedLabels, 'optionalAccess', _194 => _194.has, 'call', _195 => _195(nlabel)])) return void 0;
20563
+ if (_optionalChain([blockedLabels, 'optionalAccess', _199 => _199.has, 'call', _200 => _200(nlabel)])) return void 0;
20253
20564
  const key = findMatchingKey(nlabel, values);
20254
20565
  return key !== void 0 ? { key, label: seg.label, viaExt: false } : void 0;
20255
20566
  }
20256
20567
  function clampSegmentEnd(text, seg, next, nextViaExt) {
20257
20568
  let ve = seg.valueEnd;
20258
- if (nextViaExt && _optionalChain([next, 'optionalAccess', _196 => _196.extStart]) !== void 0 && next.extStart < ve) ve = next.extStart;
20569
+ if (nextViaExt && _optionalChain([next, 'optionalAccess', _201 => _201.extStart]) !== void 0 && next.extStart < ve) ve = next.extStart;
20259
20570
  while (ve > seg.valueStart && /\s/.test(text[ve - 1])) ve--;
20260
20571
  return ve;
20261
20572
  }
@@ -20270,7 +20581,7 @@ function normalizeValues(values, warnings) {
20270
20581
  const { value, format } = typeof raw === "object" && !Array.isArray(raw) ? raw : { value: raw, format: void 0 };
20271
20582
  const key = normalizeLabel(label);
20272
20583
  if (map.has(key)) {
20273
- _optionalChain([warnings, 'optionalAccess', _197 => _197.push, 'call', _198 => _198(`\uC785\uB825 \uB77C\uBCA8 "${label}"\uC774 \uC815\uADDC\uD654 \uD0A4 "${key}"\uC5D0\uC11C \uB2E4\uB978 \uB77C\uBCA8\uACFC \uCDA9\uB3CC \u2014 \uB4A4 \uAC12\uC73C\uB85C \uB36E\uC5B4\uC500`)]);
20584
+ _optionalChain([warnings, 'optionalAccess', _202 => _202.push, 'call', _203 => _203(`\uC785\uB825 \uB77C\uBCA8 "${label}"\uC774 \uC815\uADDC\uD654 \uD0A4 "${key}"\uC5D0\uC11C \uB2E4\uB978 \uB77C\uBCA8\uACFC \uCDA9\uB3CC \u2014 \uB4A4 \uAC12\uC73C\uB85C \uB36E\uC5B4\uC500`)]);
20274
20585
  }
20275
20586
  map.set(key, Array.isArray(value) ? value.map((v) => formatFillValue(v, format)) : formatFillValue(value, format));
20276
20587
  }
@@ -20447,8 +20758,8 @@ function extractFromTable(table2) {
20447
20758
  if (table2.cols >= 2) {
20448
20759
  for (let r = 0; r < table2.rows; r++) {
20449
20760
  for (let c = 0; c < table2.cols - 1; c++) {
20450
- const labelCell = _optionalChain([table2, 'access', _199 => _199.cells, 'access', _200 => _200[r], 'optionalAccess', _201 => _201[c]]);
20451
- const valueCell = _optionalChain([table2, 'access', _202 => _202.cells, 'access', _203 => _203[r], 'optionalAccess', _204 => _204[c + 1]]);
20761
+ const labelCell = _optionalChain([table2, 'access', _204 => _204.cells, 'access', _205 => _205[r], 'optionalAccess', _206 => _206[c]]);
20762
+ const valueCell = _optionalChain([table2, 'access', _207 => _207.cells, 'access', _208 => _208[r], 'optionalAccess', _209 => _209[c + 1]]);
20452
20763
  if (!labelCell || !valueCell) continue;
20453
20764
  if (isLabelCell(labelCell.text)) {
20454
20765
  fields.push({
@@ -20463,15 +20774,15 @@ function extractFromTable(table2) {
20463
20774
  }
20464
20775
  if (fields.length === 0 && table2.rows >= 2 && table2.cols >= 2) {
20465
20776
  const headerRow = table2.cells[0];
20466
- const allLabels = _nullishCoalesce(_optionalChain([headerRow, 'optionalAccess', _205 => _205.every, 'call', _206 => _206((cell2) => {
20467
- const t = _nullishCoalesce(_optionalChain([cell2, 'optionalAccess', _207 => _207.text, 'access', _208 => _208.trim, 'call', _209 => _209()]), () => ( ""));
20777
+ const allLabels = _nullishCoalesce(_optionalChain([headerRow, 'optionalAccess', _210 => _210.every, 'call', _211 => _211((cell2) => {
20778
+ const t = _nullishCoalesce(_optionalChain([cell2, 'optionalAccess', _212 => _212.text, 'access', _213 => _213.trim, 'call', _214 => _214()]), () => ( ""));
20468
20779
  return t.length > 0 && t.length <= 20;
20469
20780
  })]), () => ( false));
20470
20781
  if (allLabels) {
20471
20782
  for (let r = 1; r < table2.rows; r++) {
20472
20783
  for (let c = 0; c < table2.cols; c++) {
20473
- const label = _nullishCoalesce(_optionalChain([headerRow, 'access', _210 => _210[c], 'optionalAccess', _211 => _211.text, 'access', _212 => _212.trim, 'call', _213 => _213()]), () => ( ""));
20474
- const value = _nullishCoalesce(_optionalChain([table2, 'access', _214 => _214.cells, 'access', _215 => _215[r], 'optionalAccess', _216 => _216[c], 'optionalAccess', _217 => _217.text, 'access', _218 => _218.trim, 'call', _219 => _219()]), () => ( ""));
20784
+ const label = _nullishCoalesce(_optionalChain([headerRow, 'access', _215 => _215[c], 'optionalAccess', _216 => _216.text, 'access', _217 => _217.trim, 'call', _218 => _218()]), () => ( ""));
20785
+ const value = _nullishCoalesce(_optionalChain([table2, 'access', _219 => _219.cells, 'access', _220 => _220[r], 'optionalAccess', _221 => _221[c], 'optionalAccess', _222 => _222.text, 'access', _223 => _223.trim, 'call', _224 => _224()]), () => ( ""));
20475
20786
  if (label && value) {
20476
20787
  fields.push({ label, value, row: r, col: c });
20477
20788
  }
@@ -20565,7 +20876,7 @@ function fillFormFields(blocks, values, blockedLabels) {
20565
20876
  for (const table2 of allTables) {
20566
20877
  for (let r = 0; r < table2.rows; r++) {
20567
20878
  for (let c = 0; c < table2.cols; c++) {
20568
- const cell2 = _optionalChain([table2, 'access', _220 => _220.cells, 'access', _221 => _221[r], 'optionalAccess', _222 => _222[c]]);
20879
+ const cell2 = _optionalChain([table2, 'access', _225 => _225.cells, 'access', _226 => _226[r], 'optionalAccess', _227 => _227[c]]);
20569
20880
  if (!cell2) continue;
20570
20881
  const result = fillInCellPatterns(cell2.text, cursor, matchedLabels, blockedLabels);
20571
20882
  if (result) {
@@ -20597,7 +20908,7 @@ function collectIRTables(blocks, depth) {
20597
20908
  out.push(block.table);
20598
20909
  for (const row of block.table.cells) {
20599
20910
  for (const cell2 of row) {
20600
- if (_optionalChain([cell2, 'optionalAccess', _223 => _223.blocks, 'optionalAccess', _224 => _224.length])) out.push(...collectIRTables(cell2.blocks, depth + 1));
20911
+ if (_optionalChain([cell2, 'optionalAccess', _228 => _228.blocks, 'optionalAccess', _229 => _229.length])) out.push(...collectIRTables(cell2.blocks, depth + 1));
20601
20912
  }
20602
20913
  }
20603
20914
  }
@@ -20608,7 +20919,7 @@ function coveredPositions(table2) {
20608
20919
  for (let r = 0; r < table2.rows; r++) {
20609
20920
  for (let c = 0; c < table2.cols; c++) {
20610
20921
  if (covered.has(`${r},${c}`)) continue;
20611
- const cell2 = _optionalChain([table2, 'access', _225 => _225.cells, 'access', _226 => _226[r], 'optionalAccess', _227 => _227[c]]);
20922
+ const cell2 = _optionalChain([table2, 'access', _230 => _230.cells, 'access', _231 => _231[r], 'optionalAccess', _232 => _232[c]]);
20612
20923
  if (!cell2) continue;
20613
20924
  for (let dr = 0; dr < cell2.rowSpan; dr++) {
20614
20925
  for (let dc = 0; dc < cell2.colSpan; dc++) {
@@ -20624,15 +20935,15 @@ function coveredPositions(table2) {
20624
20935
  function isHeaderDataTable(table2, covered) {
20625
20936
  if (table2.rows < 2) return false;
20626
20937
  const headerRow = table2.cells[0];
20627
- if (!_optionalChain([headerRow, 'optionalAccess', _228 => _228.length])) return false;
20938
+ if (!_optionalChain([headerRow, 'optionalAccess', _233 => _233.length])) return false;
20628
20939
  const allLabels = headerRow.every((cell2) => {
20629
- const t = _nullishCoalesce(_optionalChain([cell2, 'optionalAccess', _229 => _229.text, 'access', _230 => _230.trim, 'call', _231 => _231()]), () => ( ""));
20940
+ const t = _nullishCoalesce(_optionalChain([cell2, 'optionalAccess', _234 => _234.text, 'access', _235 => _235.trim, 'call', _236 => _236()]), () => ( ""));
20630
20941
  return t.length > 0 && t.length <= 20 && isLabelCell(t);
20631
20942
  });
20632
20943
  if (!allLabels) return false;
20633
20944
  for (let c = 0; c < table2.cols; c++) {
20634
20945
  if (covered.has(`1,${c}`)) continue;
20635
- const cell2 = _optionalChain([table2, 'access', _232 => _232.cells, 'access', _233 => _233[1], 'optionalAccess', _234 => _234[c]]);
20946
+ const cell2 = _optionalChain([table2, 'access', _237 => _237.cells, 'access', _238 => _238[1], 'optionalAccess', _239 => _239[c]]);
20636
20947
  if (!cell2) break;
20637
20948
  return !isLabelCell(cell2.text);
20638
20949
  }
@@ -20645,7 +20956,7 @@ function fillTable(table2, values, filled, matchedLabels, patternFilledCells, bl
20645
20956
  for (let r = skipHeaderRow ? 1 : 0; r < table2.rows; r++) {
20646
20957
  for (let c = 0; c < table2.cols; c++) {
20647
20958
  if (covered.has(`${r},${c}`)) continue;
20648
- const labelCell = _optionalChain([table2, 'access', _235 => _235.cells, 'access', _236 => _236[r], 'optionalAccess', _237 => _237[c]]);
20959
+ const labelCell = _optionalChain([table2, 'access', _240 => _240.cells, 'access', _241 => _241[r], 'optionalAccess', _242 => _242[c]]);
20649
20960
  if (!labelCell) continue;
20650
20961
  if (!isLabelCell(labelCell.text)) continue;
20651
20962
  let vc = c + labelCell.colSpan;
@@ -20656,12 +20967,12 @@ function fillTable(table2, values, filled, matchedLabels, patternFilledCells, bl
20656
20967
  if (isKeywordLabel(valueCell.text)) continue;
20657
20968
  const normalizedCellLabel = normalizeLabel(labelCell.text);
20658
20969
  if (!normalizedCellLabel) continue;
20659
- if (_optionalChain([blockedLabels, 'optionalAccess', _238 => _238.has, 'call', _239 => _239(normalizedCellLabel)])) continue;
20970
+ if (_optionalChain([blockedLabels, 'optionalAccess', _243 => _243.has, 'call', _244 => _244(normalizedCellLabel)])) continue;
20660
20971
  const matchKey = findMatchingKey(normalizedCellLabel, values);
20661
20972
  if (matchKey === void 0) continue;
20662
20973
  const newValue = values.consume(matchKey);
20663
20974
  if (newValue === void 0) continue;
20664
- if (_optionalChain([patternFilledCells, 'optionalAccess', _240 => _240.has, 'call', _241 => _241(valueCell)])) {
20975
+ if (_optionalChain([patternFilledCells, 'optionalAccess', _245 => _245.has, 'call', _246 => _246(valueCell)])) {
20665
20976
  valueCell.text = newValue + " " + valueCell.text;
20666
20977
  } else {
20667
20978
  valueCell.text = newValue;
@@ -20678,8 +20989,8 @@ function fillTable(table2, values, filled, matchedLabels, patternFilledCells, bl
20678
20989
  }
20679
20990
  if (table2.rows >= 2 && table2.cols >= 2) {
20680
20991
  const headerRow = table2.cells[0];
20681
- const allLabels = _nullishCoalesce(_optionalChain([headerRow, 'optionalAccess', _242 => _242.every, 'call', _243 => _243((cell2) => {
20682
- const t = _nullishCoalesce(_optionalChain([cell2, 'optionalAccess', _244 => _244.text, 'access', _245 => _245.trim, 'call', _246 => _246()]), () => ( ""));
20992
+ const allLabels = _nullishCoalesce(_optionalChain([headerRow, 'optionalAccess', _247 => _247.every, 'call', _248 => _248((cell2) => {
20993
+ const t = _nullishCoalesce(_optionalChain([cell2, 'optionalAccess', _249 => _249.text, 'access', _250 => _250.trim, 'call', _251 => _251()]), () => ( ""));
20683
20994
  return t.length > 0 && t.length <= 20 && isLabelCell(t);
20684
20995
  })]), () => ( false));
20685
20996
  if (!allLabels) return;
@@ -20687,16 +20998,16 @@ function fillTable(table2, values, filled, matchedLabels, patternFilledCells, bl
20687
20998
  for (let c = 0; c < table2.cols; c++) {
20688
20999
  if (covered.has(`${r},${c}`)) continue;
20689
21000
  const headerCell = headerRow[c];
20690
- const valueCell = _optionalChain([table2, 'access', _247 => _247.cells, 'access', _248 => _248[r], 'optionalAccess', _249 => _249[c]]);
21001
+ const valueCell = _optionalChain([table2, 'access', _252 => _252.cells, 'access', _253 => _253[r], 'optionalAccess', _254 => _254[c]]);
20691
21002
  if (!headerCell || !valueCell) continue;
20692
21003
  const headerLabel = normalizeLabel(headerCell.text);
20693
- if (_optionalChain([blockedLabels, 'optionalAccess', _250 => _250.has, 'call', _251 => _251(headerLabel)])) continue;
21004
+ if (_optionalChain([blockedLabels, 'optionalAccess', _255 => _255.has, 'call', _256 => _256(headerLabel)])) continue;
20694
21005
  const matchKey = findMatchingKey(headerLabel, values);
20695
21006
  if (matchKey === void 0) continue;
20696
21007
  if (!values.isArray(matchKey) && matchedLabels.has(matchKey)) continue;
20697
21008
  const newValue = values.consume(matchKey);
20698
21009
  if (newValue === void 0) continue;
20699
- if (_optionalChain([patternFilledCells, 'optionalAccess', _252 => _252.has, 'call', _253 => _253(valueCell)])) {
21010
+ if (_optionalChain([patternFilledCells, 'optionalAccess', _257 => _257.has, 'call', _258 => _258(valueCell)])) {
20700
21011
  valueCell.text = newValue + " " + valueCell.text;
20701
21012
  } else {
20702
21013
  valueCell.text = newValue;
@@ -20728,7 +21039,7 @@ function fillInlineFields(text, values, filled, matchedLabels, blockedLabels) {
20728
21039
  if (newValue === void 0) continue;
20729
21040
  matchedLabels.add(matchKey);
20730
21041
  filled.push({ label: matched.label.trim(), value: newValue, row: -1, col: -1, key: matchKey });
20731
- const ve = clampSegmentEnd(text, seg, segments[i + 1], _nullishCoalesce(_optionalChain([matches, 'access', _254 => _254[i + 1], 'optionalAccess', _255 => _255.viaExt]), () => ( false)));
21042
+ const ve = clampSegmentEnd(text, seg, segments[i + 1], _nullishCoalesce(_optionalChain([matches, 'access', _259 => _259[i + 1], 'optionalAccess', _260 => _260.viaExt]), () => ( false)));
20732
21043
  out += text.slice(pos, seg.valueStart);
20733
21044
  out += seg.valueStart === ve ? padInsertion(text, seg.valueStart, newValue) : newValue;
20734
21045
  pos = ve;
@@ -21351,7 +21662,7 @@ function fillClickHereInXml(xml, cursor, blockedLabels) {
21351
21662
  const splices = [];
21352
21663
  for (const region of scanClickHereRegions(xml)) {
21353
21664
  const key = normalizeLabel(region.name);
21354
- if (!key || _optionalChain([blockedLabels, 'optionalAccess', _256 => _256.has, 'call', _257 => _257(key)])) continue;
21665
+ if (!key || _optionalChain([blockedLabels, 'optionalAccess', _261 => _261.has, 'call', _262 => _262(key)])) continue;
21355
21666
  if (!cursor.has(key)) continue;
21356
21667
  const value = cursor.consume(key);
21357
21668
  if (value === void 0) continue;
@@ -21369,7 +21680,7 @@ function fillClickHereInXml(xml, cursor, blockedLabels) {
21369
21680
  };
21370
21681
  }
21371
21682
  async function extractClickHereFields(hwpxBuffer) {
21372
- _chunkDZBMQC2Ncjs.precheckZipSize.call(void 0, hwpxBuffer);
21683
+ _chunkJ7DBL77Bcjs.precheckZipSize.call(void 0, hwpxBuffer);
21373
21684
  const zip = await _jszip2.default.loadAsync(hwpxBuffer);
21374
21685
  const sectionPaths = Object.keys(zip.files).filter((name) => /[Ss]ection\d+\.xml$/i.test(name)).sort();
21375
21686
  const fields = [];
@@ -21417,19 +21728,19 @@ function parseCentralDirectory(buf) {
21417
21728
  }
21418
21729
  }
21419
21730
  }
21420
- if (eocdOffset < 0) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("ZIP EOCD\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
21731
+ if (eocdOffset < 0) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("ZIP EOCD\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
21421
21732
  const totalEntries = view.getUint16(eocdOffset + 10, true);
21422
21733
  const cdSize = view.getUint32(eocdOffset + 12, true);
21423
21734
  const cdOffset = view.getUint32(eocdOffset + 16, true);
21424
- if (cdOffset === 4294967295 || totalEntries === 65535) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("ZIP64\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
21735
+ if (cdOffset === 4294967295 || totalEntries === 65535) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("ZIP64\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
21425
21736
  if (eocdOffset >= 20 && view.getUint32(eocdOffset - 20, true) === ZIP64_EOCD_LOC_SIG) {
21426
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("ZIP64\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
21737
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("ZIP64\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
21427
21738
  }
21428
21739
  const decoder = new TextDecoder("utf-8");
21429
21740
  const entries = [];
21430
21741
  let pos = cdOffset;
21431
21742
  for (let i = 0; i < totalEntries; i++) {
21432
- if (view.getUint32(pos, true) !== CD_SIG) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("ZIP Central Directory \uC190\uC0C1");
21743
+ if (view.getUint32(pos, true) !== CD_SIG) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("ZIP Central Directory \uC190\uC0C1");
21433
21744
  const flags = view.getUint16(pos + 8, true);
21434
21745
  const method = view.getUint16(pos + 10, true);
21435
21746
  const crc = view.getUint32(pos + 16, true);
@@ -21440,7 +21751,7 @@ function parseCentralDirectory(buf) {
21440
21751
  const commentLen = view.getUint16(pos + 32, true);
21441
21752
  const localOffset = view.getUint32(pos + 42, true);
21442
21753
  if (compSize === 4294967295 || uncompSize === 4294967295 || localOffset === 4294967295) {
21443
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("ZIP64\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
21754
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("ZIP64\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
21444
21755
  }
21445
21756
  const name = decoder.decode(buf.subarray(pos + 46, pos + 46 + nameLen));
21446
21757
  const cdEnd = pos + 46 + nameLen + extraLen + commentLen;
@@ -21469,11 +21780,11 @@ function patchZipEntries(original, replacements, additions) {
21469
21780
  const { entries, cdOffset, eocdOffset } = parseCentralDirectory(original);
21470
21781
  const view = new DataView(original.buffer, original.byteOffset, original.byteLength);
21471
21782
  for (const name of replacements.keys()) {
21472
- if (!entries.some((e) => e.name === name)) throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`ZIP\uC5D0 \uC5C6\uB294 \uC5D4\uD2B8\uB9AC: ${name}`);
21783
+ if (!entries.some((e) => e.name === name)) throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`ZIP\uC5D0 \uC5C6\uB294 \uC5D4\uD2B8\uB9AC: ${name}`);
21473
21784
  }
21474
21785
  if (additions) {
21475
21786
  for (const name of additions.keys()) {
21476
- if (entries.some((e) => e.name === name)) throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`ZIP\uC5D0 \uC774\uBBF8 \uC788\uB294 \uC5D4\uD2B8\uB9AC: ${name}`);
21787
+ if (entries.some((e) => e.name === name)) throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`ZIP\uC5D0 \uC774\uBBF8 \uC788\uB294 \uC5D4\uD2B8\uB9AC: ${name}`);
21477
21788
  }
21478
21789
  }
21479
21790
  const byLocal = [...entries].sort((a, b) => a.localOffset - b.localOffset);
@@ -21492,7 +21803,7 @@ function patchZipEntries(original, replacements, additions) {
21492
21803
  offset += seg.length;
21493
21804
  continue;
21494
21805
  }
21495
- if (view.getUint32(e.localOffset, true) !== LOCAL_SIG) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("ZIP \uB85C\uCEEC \uD5E4\uB354 \uC2DC\uADF8\uB2C8\uCC98 \uBD88\uC77C\uCE58");
21806
+ if (view.getUint32(e.localOffset, true) !== LOCAL_SIG) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("ZIP \uB85C\uCEEC \uD5E4\uB354 \uC2DC\uADF8\uB2C8\uCC98 \uBD88\uC77C\uCE58");
21496
21807
  const nameLen = view.getUint16(e.localOffset + 26, true);
21497
21808
  const extraLen = view.getUint16(e.localOffset + 28, true);
21498
21809
  const headerLen = 30 + nameLen + extraLen;
@@ -21500,7 +21811,7 @@ function patchZipEntries(original, replacements, additions) {
21500
21811
  const hview = new DataView(header.buffer, header.byteOffset, header.byteLength);
21501
21812
  const method = e.method;
21502
21813
  if (method !== 0 && method !== 8) {
21503
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 ZIP \uC555\uCD95 \uBC29\uC2DD(method=${method}): ${e.name} \u2014 STORE(0)/DEFLATE(8)\uB9CC \uAD50\uCCB4 \uAC00\uB2A5`);
21814
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 ZIP \uC555\uCD95 \uBC29\uC2DD(method=${method}): ${e.name} \u2014 STORE(0)/DEFLATE(8)\uB9CC \uAD50\uCCB4 \uAC00\uB2A5`);
21504
21815
  }
21505
21816
  const compData = method === 0 ? newData : new Uint8Array(_zlib.deflateRawSync.call(void 0, newData));
21506
21817
  const crc = crc32(newData);
@@ -21598,11 +21909,11 @@ function patchZipEntries(original, replacements, additions) {
21598
21909
  // src/form/filler-hwpx.ts
21599
21910
  async function fillHwpx(hwpxBuffer, values, blockedLabels) {
21600
21911
  const u8 = new Uint8Array(hwpxBuffer);
21601
- _chunkDZBMQC2Ncjs.precheckZipSize.call(void 0, hwpxBuffer);
21912
+ _chunkJ7DBL77Bcjs.precheckZipSize.call(void 0, hwpxBuffer);
21602
21913
  const zip = await _jszip2.default.loadAsync(hwpxBuffer);
21603
21914
  const sectionPaths = Object.keys(zip.files).filter((name) => /[Ss]ection\d+\.xml$/i.test(name)).sort();
21604
21915
  if (sectionPaths.length === 0) {
21605
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("HWPX\uC5D0\uC11C \uC139\uC158 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
21916
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("HWPX\uC5D0\uC11C \uC139\uC158 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
21606
21917
  }
21607
21918
  const warnings = [];
21608
21919
  const normalizedValues = normalizeValues(values, warnings);
@@ -21701,7 +22012,7 @@ async function fillHwpx(hwpxBuffer, values, blockedLabels) {
21701
22012
  if (isKeywordLabel(cellLabelText(valueCell))) continue;
21702
22013
  const normalizedCellLabel = normalizeLabel(labelText);
21703
22014
  if (!normalizedCellLabel) continue;
21704
- if (_optionalChain([blockedLabels, 'optionalAccess', _258 => _258.has, 'call', _259 => _259(normalizedCellLabel)])) continue;
22015
+ if (_optionalChain([blockedLabels, 'optionalAccess', _263 => _263.has, 'call', _264 => _264(normalizedCellLabel)])) continue;
21705
22016
  const matchKey = findMatchingKey(normalizedCellLabel, cursor);
21706
22017
  if (matchKey === void 0) continue;
21707
22018
  if (patternApplied.has(valueCell)) {
@@ -21759,7 +22070,7 @@ async function fillHwpx(hwpxBuffer, values, blockedLabels) {
21759
22070
  const dataCells = table2.rows[rowIdx];
21760
22071
  for (let colIdx = 0; colIdx < Math.min(headerCells.length, dataCells.length); colIdx++) {
21761
22072
  const headerLabel = normalizeLabel(cellLabelText(headerCells[colIdx]));
21762
- if (_optionalChain([blockedLabels, 'optionalAccess', _260 => _260.has, 'call', _261 => _261(headerLabel)])) continue;
22073
+ if (_optionalChain([blockedLabels, 'optionalAccess', _265 => _265.has, 'call', _266 => _266(headerLabel)])) continue;
21763
22074
  const matchKey = findMatchingKey(headerLabel, cursor);
21764
22075
  if (matchKey === void 0) continue;
21765
22076
  if (!cursor.isArray(matchKey) && matchedLabels.has(matchKey)) continue;
@@ -21813,7 +22124,7 @@ async function fillHwpx(hwpxBuffer, values, blockedLabels) {
21813
22124
  }
21814
22125
  for (const para2 of [...scan.bodyParagraphs, ...scan.excludedParagraphs]) {
21815
22126
  const existing = ledger.get(para2);
21816
- if (_optionalChain([existing, 'optionalAccess', _262 => _262.fullText]) !== void 0) continue;
22127
+ if (_optionalChain([existing, 'optionalAccess', _267 => _267.fullText]) !== void 0) continue;
21817
22128
  const text = matchText(para2);
21818
22129
  const segments = scanInlineSegments(text);
21819
22130
  const matches = segments.map((seg) => matchInlineSegment(seg, cursor, blockedLabels));
@@ -21824,7 +22135,7 @@ async function fillHwpx(hwpxBuffer, values, blockedLabels) {
21824
22135
  const matchKey = matched.key;
21825
22136
  const newValue = cursor.consume(matchKey);
21826
22137
  if (newValue === void 0) continue;
21827
- const ve = clampSegmentEnd(text, seg, segments[i + 1], _nullishCoalesce(_optionalChain([matches, 'access', _263 => _263[i + 1], 'optionalAccess', _264 => _264.viaExt]), () => ( false)));
22138
+ const ve = clampSegmentEnd(text, seg, segments[i + 1], _nullishCoalesce(_optionalChain([matches, 'access', _268 => _268[i + 1], 'optionalAccess', _269 => _269.viaExt]), () => ( false)));
21828
22139
  const replacement = seg.valueStart === ve ? padInsertion(text, seg.valueStart, newValue) : newValue;
21829
22140
  const l = led(para2);
21830
22141
  l.ranges.push({ start: seg.valueStart, end: ve, replacement });
@@ -21897,6 +22208,29 @@ async function fillHwpx(hwpxBuffer, values, blockedLabels) {
21897
22208
  };
21898
22209
  }
21899
22210
 
22211
+ // src/page-markdown.ts
22212
+ function blocksToPages(blocks) {
22213
+ const firstNumbered = _optionalChain([blocks, 'access', _270 => _270.find, 'call', _271 => _271((b) => typeof b.pageNumber === "number"), 'optionalAccess', _272 => _272.pageNumber]);
22214
+ if (firstNumbered === void 0) return void 0;
22215
+ const byPage = /* @__PURE__ */ new Map();
22216
+ let current = firstNumbered;
22217
+ for (const block of blocks) {
22218
+ if (typeof block.pageNumber === "number") current = block.pageNumber;
22219
+ const bucket = byPage.get(current);
22220
+ if (bucket) bucket.push(block);
22221
+ else byPage.set(current, [block]);
22222
+ }
22223
+ const numbers = [...byPage.keys()];
22224
+ const min = Math.min(...numbers);
22225
+ const max = Math.max(...numbers);
22226
+ const pages = [];
22227
+ for (let pageNumber = min; pageNumber <= max; pageNumber++) {
22228
+ const pageBlocks = byPage.get(pageNumber);
22229
+ pages.push({ pageNumber, markdown: pageBlocks ? _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, pageBlocks) : "" });
22230
+ }
22231
+ return pages;
22232
+ }
22233
+
21900
22234
  // src/hwpx/generator.ts
21901
22235
 
21902
22236
 
@@ -22065,9 +22399,9 @@ function fixedPitchWidthEm1000(cp) {
22065
22399
  return cp < 128 ? 500 : 1e3;
22066
22400
  }
22067
22401
  function measureTextWidth(text, height, ratioPct, opts) {
22068
- const spaceEm = _nullishCoalesce(_optionalChain([opts, 'optionalAccess', _265 => _265.spaceEm]), () => ( SPACE_EM_FIXED));
22069
- const spacing = _nullishCoalesce(_optionalChain([opts, 'optionalAccess', _266 => _266.spacingPct]), () => ( 0));
22070
- const widthEm = _optionalChain([opts, 'optionalAccess', _267 => _267.faceClass]) === "fixedPitch" ? fixedPitchWidthEm1000 : charWidthEm1000;
22402
+ const spaceEm = _nullishCoalesce(_optionalChain([opts, 'optionalAccess', _273 => _273.spaceEm]), () => ( SPACE_EM_FIXED));
22403
+ const spacing = _nullishCoalesce(_optionalChain([opts, 'optionalAccess', _274 => _274.spacingPct]), () => ( 0));
22404
+ const widthEm = _optionalChain([opts, 'optionalAccess', _275 => _275.faceClass]) === "fixedPitch" ? fixedPitchWidthEm1000 : charWidthEm1000;
22071
22405
  let em = 0;
22072
22406
  for (const ch of text) {
22073
22407
  const cp = ch.codePointAt(0);
@@ -22080,9 +22414,9 @@ var FORBID_START = /* @__PURE__ */ new Set([..."!%),.:;?]}\xA2\xB0\u2032\u2033\u
22080
22414
  var FORBID_END = /* @__PURE__ */ new Set([..."$([{\xA3\xA5\u3008\u300A\u300C\u300E\u3010\u3014$([{\u20A9"]);
22081
22415
  function simulateWrap(text, firstWidth, contWidth, height, ratioPct, mode = "keep", opts) {
22082
22416
  const EPS = 0.5;
22083
- const spaceEm = _nullishCoalesce(_optionalChain([opts, 'optionalAccess', _268 => _268.spaceEm]), () => ( SPACE_EM_FIXED));
22084
- const spacing = _nullishCoalesce(_optionalChain([opts, 'optionalAccess', _269 => _269.spacingPct]), () => ( 0));
22085
- const widthEm = _optionalChain([opts, 'optionalAccess', _270 => _270.faceClass]) === "fixedPitch" ? fixedPitchWidthEm1000 : charWidthEm1000;
22417
+ const spaceEm = _nullishCoalesce(_optionalChain([opts, 'optionalAccess', _276 => _276.spaceEm]), () => ( SPACE_EM_FIXED));
22418
+ const spacing = _nullishCoalesce(_optionalChain([opts, 'optionalAccess', _277 => _277.spacingPct]), () => ( 0));
22419
+ const widthEm = _optionalChain([opts, 'optionalAccess', _278 => _278.faceClass]) === "fixedPitch" ? fixedPitchWidthEm1000 : charWidthEm1000;
22086
22420
  const k = height * ratioPct / 100 / 1e3;
22087
22421
  const cwCp = (cp) => (cp === 32 ? spaceEm : widthEm(cp)) * (1 + spacing / 100) * k;
22088
22422
  const charW2 = (ch) => cwCp(ch.codePointAt(0));
@@ -22344,7 +22678,7 @@ function needsGaejosikAssets(gongmun) {
22344
22678
  }
22345
22679
  function assertFiniteRange(name, value, min, max) {
22346
22680
  if (!Number.isFinite(value) || value < min || value > max) {
22347
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`${name} must be a finite number between ${min} and ${max}`);
22681
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`${name} must be a finite number between ${min} and ${max}`);
22348
22682
  }
22349
22683
  }
22350
22684
  function validateGongmunOptions(opts) {
@@ -22359,10 +22693,10 @@ function validateGongmunOptions(opts) {
22359
22693
  assertFiniteRange(`margins.${side}`, value, 0, 200);
22360
22694
  }
22361
22695
  if (opts.margins.left + opts.margins.right >= 210) {
22362
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("margins.left + margins.right must be less than 210");
22696
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("margins.left + margins.right must be less than 210");
22363
22697
  }
22364
22698
  if (opts.margins.top + opts.margins.bottom >= 297) {
22365
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("margins.top + margins.bottom must be less than 297");
22699
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("margins.top + margins.bottom must be less than 297");
22366
22700
  }
22367
22701
  }
22368
22702
  if (opts.sizes) {
@@ -22371,7 +22705,7 @@ function validateGongmunOptions(opts) {
22371
22705
  }
22372
22706
  }
22373
22707
  if (opts.approval && opts.approval.length > 6) {
22374
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("approval must contain at most 6 labels");
22708
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("approval must contain at most 6 labels");
22375
22709
  }
22376
22710
  }
22377
22711
  function incompatibleGongmunWarnings(opts) {
@@ -22435,7 +22769,7 @@ function resolveGongmun(opts) {
22435
22769
  suppressSingle: _nullishCoalesce(opts.suppressSingle, () => ( false)),
22436
22770
  docHead: preset === "official" && opts.docHead ? opts.docHead : null,
22437
22771
  docFoot: preset === "official" && opts.docFoot ? opts.docFoot : null,
22438
- reportInfo: _optionalChain([opts, 'access', _271 => _271.reportInfo, 'optionalAccess', _272 => _272.trim, 'call', _273 => _273()]) || null,
22772
+ reportInfo: _optionalChain([opts, 'access', _279 => _279.reportInfo, 'optionalAccess', _280 => _280.trim, 'call', _281 => _281()]) || null,
22439
22773
  noticeHead: preset === "notice" && opts.noticeHead ? opts.noticeHead : null,
22440
22774
  // 보도자료 머리박스는 프리셋 자체가 요구 — 옵션 미지정이어도 빈 객체
22441
22775
  press: preset === "press" ? _nullishCoalesce(opts.press, () => ( {})) : null
@@ -22544,16 +22878,16 @@ var PARA_LIST = 7;
22544
22878
  var DEFAULT_TEXT_COLOR = "#000000";
22545
22879
  function resolveTheme(theme) {
22546
22880
  return {
22547
- h1: _nullishCoalesce(_optionalChain([theme, 'optionalAccess', _274 => _274.headingColors, 'optionalAccess', _275 => _275[1]]), () => ( DEFAULT_TEXT_COLOR)),
22548
- h2: _nullishCoalesce(_optionalChain([theme, 'optionalAccess', _276 => _276.headingColors, 'optionalAccess', _277 => _277[2]]), () => ( DEFAULT_TEXT_COLOR)),
22549
- h3: _nullishCoalesce(_optionalChain([theme, 'optionalAccess', _278 => _278.headingColors, 'optionalAccess', _279 => _279[3]]), () => ( DEFAULT_TEXT_COLOR)),
22550
- h4: _nullishCoalesce(_nullishCoalesce(_optionalChain([theme, 'optionalAccess', _280 => _280.headingColors, 'optionalAccess', _281 => _281[4]]), () => ( _optionalChain([theme, 'optionalAccess', _282 => _282.headingColors, 'optionalAccess', _283 => _283[3]]))), () => ( DEFAULT_TEXT_COLOR)),
22551
- body: _nullishCoalesce(_optionalChain([theme, 'optionalAccess', _284 => _284.bodyColor]), () => ( DEFAULT_TEXT_COLOR)),
22552
- quote: _nullishCoalesce(_optionalChain([theme, 'optionalAccess', _285 => _285.quoteColor]), () => ( DEFAULT_TEXT_COLOR)),
22881
+ h1: _nullishCoalesce(_optionalChain([theme, 'optionalAccess', _282 => _282.headingColors, 'optionalAccess', _283 => _283[1]]), () => ( DEFAULT_TEXT_COLOR)),
22882
+ h2: _nullishCoalesce(_optionalChain([theme, 'optionalAccess', _284 => _284.headingColors, 'optionalAccess', _285 => _285[2]]), () => ( DEFAULT_TEXT_COLOR)),
22883
+ h3: _nullishCoalesce(_optionalChain([theme, 'optionalAccess', _286 => _286.headingColors, 'optionalAccess', _287 => _287[3]]), () => ( DEFAULT_TEXT_COLOR)),
22884
+ h4: _nullishCoalesce(_nullishCoalesce(_optionalChain([theme, 'optionalAccess', _288 => _288.headingColors, 'optionalAccess', _289 => _289[4]]), () => ( _optionalChain([theme, 'optionalAccess', _290 => _290.headingColors, 'optionalAccess', _291 => _291[3]]))), () => ( DEFAULT_TEXT_COLOR)),
22885
+ body: _nullishCoalesce(_optionalChain([theme, 'optionalAccess', _292 => _292.bodyColor]), () => ( DEFAULT_TEXT_COLOR)),
22886
+ quote: _nullishCoalesce(_optionalChain([theme, 'optionalAccess', _293 => _293.quoteColor]), () => ( DEFAULT_TEXT_COLOR)),
22553
22887
  /** quoteColor가 명시되었는지 — blockquote charPr 분기에 사용 (baseline 호환) */
22554
- hasQuoteOption: _optionalChain([theme, 'optionalAccess', _286 => _286.quoteColor]) !== void 0,
22555
- tableHeader: _nullishCoalesce(_nullishCoalesce(_optionalChain([theme, 'optionalAccess', _287 => _287.tableHeaderColor]), () => ( _optionalChain([theme, 'optionalAccess', _288 => _288.bodyColor]))), () => ( DEFAULT_TEXT_COLOR)),
22556
- tableHeaderBold: !!_optionalChain([theme, 'optionalAccess', _289 => _289.tableHeaderBold])
22888
+ hasQuoteOption: _optionalChain([theme, 'optionalAccess', _294 => _294.quoteColor]) !== void 0,
22889
+ tableHeader: _nullishCoalesce(_nullishCoalesce(_optionalChain([theme, 'optionalAccess', _295 => _295.tableHeaderColor]), () => ( _optionalChain([theme, 'optionalAccess', _296 => _296.bodyColor]))), () => ( DEFAULT_TEXT_COLOR)),
22890
+ tableHeaderBold: !!_optionalChain([theme, 'optionalAccess', _297 => _297.tableHeaderBold])
22557
22891
  };
22558
22892
  }
22559
22893
  function escapeXml(text) {
@@ -22909,7 +23243,7 @@ function parseInlineMarkdown(text) {
22909
23243
  else spans.push(...emphasisSpans(m[0]));
22910
23244
  } else {
22911
23245
  const anchor = m[2] || m[3];
22912
- const href = _nullishCoalesce(_chunkDZBMQC2Ncjs.sanitizeHref.call(void 0, m[3].trim()), () => ( void 0));
23246
+ const href = _nullishCoalesce(_chunkJ7DBL77Bcjs.sanitizeHref.call(void 0, m[3].trim()), () => ( void 0));
22913
23247
  const sub = emphasisSpans(anchor);
22914
23248
  if (href) for (const s of sub) s.href = href;
22915
23249
  spans.push(...sub);
@@ -23075,8 +23409,8 @@ function resolvePage(opts) {
23075
23409
  // 실측: 용지 치수는 방향과 무관하게 유지, 방향은 landscape 속성만 바뀐다
23076
23410
  landscape: orientation === "landscape" ? "NARROWLY" : "WIDELY",
23077
23411
  columns: cols,
23078
- header: _optionalChain([header, 'optionalAccess', _290 => _290.trim, 'call', _291 => _291()]) ? header.trim() : null,
23079
- footer: _optionalChain([footer, 'optionalAccess', _292 => _292.trim, 'call', _293 => _293()]) ? footer.trim() : null
23412
+ header: _optionalChain([header, 'optionalAccess', _298 => _298.trim, 'call', _299 => _299()]) ? header.trim() : null,
23413
+ footer: _optionalChain([footer, 'optionalAccess', _300 => _300.trim, 'call', _301 => _301()]) ? footer.trim() : null
23080
23414
  };
23081
23415
  }
23082
23416
  function columnColPrXml(columns) {
@@ -23123,7 +23457,7 @@ function assertSequentialIds(rows, label, startId) {
23123
23457
  const m = rows[i].match(/\bid="(\d+)"/);
23124
23458
  const got = m ? Number(m[1]) : NaN;
23125
23459
  if (got !== startId + i) {
23126
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(
23460
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(
23127
23461
  `\uB0B4\uBD80 \uC624\uB958: ${label} id \uD30C\uD2F0\uC158 \uB4DC\uB9AC\uD504\uD2B8 \u2014 ${startId + i} \uC704\uCE58\uC5D0 id=${m ? m[1] : "?"} \uBC29\uCD9C. id \uC0C1\uC218(gen-ids)\uC640 \uC2E4\uC81C \uBC29\uCD9C \uC218\uAC00 \uC5B4\uAE0B\uB0AC\uB2E4 (GJ_CHAR_COUNT\uB958 \uCE74\uC6B4\uD2B8\xB7base \uC0B0\uC220 \uD655\uC778)`
23128
23462
  );
23129
23463
  }
@@ -23207,7 +23541,7 @@ function buildCharProperties(theme, gongmun, ratioVariants = [], extraCharPrXmls
23207
23541
  }
23208
23542
  const expectedBase = charVariantBase(richAssets, !!gongmun);
23209
23543
  if (rows.length !== expectedBase) {
23210
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(
23544
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(
23211
23545
  `\uB0B4\uBD80 \uC624\uB958: charPr \uAE30\uBCF8 \uBE14\uB85D \uBC29\uCD9C \uC218(${rows.length}) \u2260 charVariantBase(${expectedBase}) \u2014 gen-header \uBC29\uCD9C \uD589\uACFC gen-ids \uCE74\uC6B4\uD2B8 \uC0C1\uC218\uAC00 \uC5B4\uAE0B\uB0AC\uB2E4`
23212
23546
  );
23213
23547
  }
@@ -23435,7 +23769,7 @@ function buildStyles(gongmun) {
23435
23769
  </hh:styles>`;
23436
23770
  }
23437
23771
  function generateHeaderXml(theme, gongmun, ratioVariants = [], extraBorderFills = [], extraCharPrXmls = [], listIndentVariants = [], extraFonts = []) {
23438
- const bodyFace = _nullishCoalesce(_optionalChain([gongmun, 'optionalAccess', _294 => _294.fonts, 'access', _295 => _295.body]), () => ( (_optionalChain([gongmun, 'optionalAccess', _296 => _296.bodyFont]) === "gothic" ? "\uB9D1\uC740 \uACE0\uB515" : "\uD568\uCD08\uB86C\uBC14\uD0D5")));
23772
+ const bodyFace = _nullishCoalesce(_optionalChain([gongmun, 'optionalAccess', _302 => _302.fonts, 'access', _303 => _303.body]), () => ( (_optionalChain([gongmun, 'optionalAccess', _304 => _304.bodyFont]) === "gothic" ? "\uB9D1\uC740 \uACE0\uB515" : "\uD568\uCD08\uB86C\uBC14\uD0D5")));
23439
23773
  const charPropsXml = buildCharProperties(theme, gongmun, ratioVariants, extraCharPrXmls);
23440
23774
  const paraPropsXml = buildParaProperties(gongmun, gongmun ? listIndentVariants : []);
23441
23775
  return `<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
@@ -23564,8 +23898,8 @@ function parseChartFence(text) {
23564
23898
  const spec = chartSpec(type);
23565
23899
  let finalSeries = spec.pie ? [series[0]] : series;
23566
23900
  finalSeries = finalSeries.map((s) => ({ ...s }));
23567
- const ptLen = Math.max(_nullishCoalesce(_optionalChain([cat, 'optionalAccess', _297 => _297.length]), () => ( 0)), ...finalSeries.map((s) => s.values.length));
23568
- const catFinal = Array.from({ length: ptLen }, (_, i) => _nullishCoalesce(_optionalChain([cat, 'optionalAccess', _298 => _298[i]]), () => ( `\uD56D\uBAA9 ${i + 1}`)));
23901
+ const ptLen = Math.max(_nullishCoalesce(_optionalChain([cat, 'optionalAccess', _305 => _305.length]), () => ( 0)), ...finalSeries.map((s) => s.values.length));
23902
+ const catFinal = Array.from({ length: ptLen }, (_, i) => _nullishCoalesce(_optionalChain([cat, 'optionalAccess', _306 => _306[i]]), () => ( `\uD56D\uBAA9 ${i + 1}`)));
23569
23903
  if (!spec.scatter) {
23570
23904
  finalSeries = finalSeries.map((s) => ({ ...s, values: catFinal.map((_, i) => _nullishCoalesce(s.values[i], () => ( 0))) }));
23571
23905
  }
@@ -23607,7 +23941,7 @@ function serSpPr(color, stroke) {
23607
23941
  return stroke ? `<c:spPr><a:ln w="28575" cap="flat" cmpd="sng" algn="ctr">${f}<a:prstDash val="solid"/><a:round/></a:ln></c:spPr>` : `<c:spPr>${f}</c:spPr>`;
23608
23942
  }
23609
23943
  function dPtXml(pointColors, pie) {
23610
- if (!_optionalChain([pointColors, 'optionalAccess', _299 => _299.length])) return "";
23944
+ if (!_optionalChain([pointColors, 'optionalAccess', _307 => _307.length])) return "";
23611
23945
  return pointColors.map((col, i) => {
23612
23946
  const f = chartColorFill(col);
23613
23947
  if (!f) return "";
@@ -23846,8 +24180,8 @@ function buildGaejosikCover(title, gongmun, bodyWidth = GAEJOSIK_BASE_WIDTH) {
23846
24180
  const botRow = cell({ bf: GJ_BF_BAR_DARK, col: 0, row: 2, w: g.botDarkW, h: g.botBarH, paras: barEmpty }) + cell({ bf: GJ_BF_BAR_LIGHT, col: 1, colSpan: 2, row: 2, w: g.botLightW, h: g.botBarH, paras: barEmpty });
23847
24181
  const tbl2 = table([topRow, titleRow, botRow], g.totalW, g.barH + g.titleH + g.botBarH, 3, 1, bodyWidth);
23848
24182
  const host = `<hp:p paraPrIDRef="${PARA_NORMAL}" styleIDRef="0"><hp:run charPrIDRef="${CHAR_NORMAL}">${tbl2}</hp:run></hp:p>`;
23849
- const date = _nullishCoalesce(_optionalChain([gongmun, 'access', _300 => _300.cover, 'optionalAccess', _301 => _301.date]), () => ( formatGaejosikDate(/* @__PURE__ */ new Date())));
23850
- const org = _nullishCoalesce(_optionalChain([gongmun, 'access', _302 => _302.cover, 'optionalAccess', _303 => _303.org]), () => ( ""));
24183
+ const date = _nullishCoalesce(_optionalChain([gongmun, 'access', _308 => _308.cover, 'optionalAccess', _309 => _309.date]), () => ( formatGaejosikDate(/* @__PURE__ */ new Date())));
24184
+ const org = _nullishCoalesce(_optionalChain([gongmun, 'access', _310 => _310.cover, 'optionalAccess', _311 => _311.org]), () => ( ""));
23851
24185
  const sub = (t) => `<hp:p paraPrIDRef="${GJ_PARA_COVER}" styleIDRef="0"><hp:run charPrIDRef="${GJ_CHAR_COVER_SUB}"><hp:t>${escapeXml(t)}</hp:t></hp:run></hp:p>`;
23852
24186
  const subEmpty = emptyPara(GJ_PARA_COVER, false, GJ_CHAR_COVER_SUB);
23853
24187
  return [
@@ -24103,7 +24437,7 @@ function escapeGfm(text) {
24103
24437
  }
24104
24438
  var HWP_SHAPE_ALT_TEXT_RE = /^(?:모서리가 둥근 |둥근 )?(?:사각형|직사각형|정사각형|원|타원|삼각형|이등변 삼각형|직각 삼각형|선|직선|곡선|화살표|굵은 화살표|이중 화살표|오각형|육각형|팔각형|별|[4-8]점별|십자|십자형|구름|구름형|마름모|도넛|평행사변형|사다리꼴|부채꼴|호|반원|물결|번개|하트|빗금|블록 화살표|수식|표|그림|개체|그리기\s?개체|묶음\s?개체|글상자|수식\s?개체|OLE\s?개체)\s?입니다\.?$/gm;
24105
24439
  function sanitizeText(text) {
24106
- let result = _chunk46VU6YXFcjs.mapPuaText.call(void 0, text).replace(/[\u{F0000}-\u{FFFFD}]/gu, "").replace(HWP_SHAPE_ALT_TEXT_RE, "").replace(/ +/g, " ").trim();
24440
+ let result = _chunkGGZ5PSJOcjs.mapPuaText.call(void 0, text).replace(/[\u{F0000}-\u{FFFFD}]/gu, "").replace(HWP_SHAPE_ALT_TEXT_RE, "").replace(/ +/g, " ").trim();
24107
24441
  if (result.length <= 30 && result.includes(" ")) {
24108
24442
  const tokens = result.split(" ");
24109
24443
  const koreanSingleCharCount = tokens.filter((t) => t.length === 1 && /[가-힯ㄱ-ㆎ]/.test(t)).length;
@@ -24133,7 +24467,7 @@ function replicateGfmTable(table2) {
24133
24467
  for (let r = 0; r < numRows; r++) {
24134
24468
  for (let c = 0; c < numCols; c++) {
24135
24469
  if (skip.has(`${r},${c}`)) continue;
24136
- const cell2 = _optionalChain([cells, 'access', _304 => _304[r], 'optionalAccess', _305 => _305[c]]);
24470
+ const cell2 = _optionalChain([cells, 'access', _312 => _312[r], 'optionalAccess', _313 => _313[c]]);
24137
24471
  if (!cell2) continue;
24138
24472
  display[r][c] = {
24139
24473
  text: escapeGfm(sanitizeText(cell2.text)).replace(/\|/g, "\\|").replace(/\n/g, "<br>"),
@@ -24187,7 +24521,7 @@ function unescapeGfmCell(text) {
24187
24521
  return text.replace(/<br\s*\/?>/gi, "\n").replace(/\\\|/g, "|").replace(/\\([~*_`])/g, "$1");
24188
24522
  }
24189
24523
  function replicateCellInnerHtml(cell2) {
24190
- if (_optionalChain([cell2, 'access', _306 => _306.blocks, 'optionalAccess', _307 => _307.length])) {
24524
+ if (_optionalChain([cell2, 'access', _314 => _314.blocks, 'optionalAccess', _315 => _315.length])) {
24191
24525
  return cell2.blocks.map((b) => {
24192
24526
  if (b.type === "table" && b.table) {
24193
24527
  const cap = b.table.caption ? sanitizeText(b.table.caption) : "";
@@ -24226,7 +24560,7 @@ function replicateHtmlTable(table2) {
24226
24560
  const rowCells = [];
24227
24561
  for (let c = 0; c < numCols; c++) {
24228
24562
  if (skip.has(`${r},${c}`)) continue;
24229
- const cell2 = _optionalChain([cells, 'access', _308 => _308[r], 'optionalAccess', _309 => _309[c]]);
24563
+ const cell2 = _optionalChain([cells, 'access', _316 => _316[r], 'optionalAccess', _317 => _317[c]]);
24230
24564
  if (!cell2) continue;
24231
24565
  for (let dr = 0; dr < cell2.rowSpan; dr++) {
24232
24566
  for (let dc = 0; dc < cell2.colSpan; dc++) {
@@ -24272,10 +24606,10 @@ function parseHtmlTable(raw) {
24272
24606
  }
24273
24607
  } else {
24274
24608
  if (!isClose) {
24275
- const cs = parseInt(_optionalChain([attrs, 'access', _310 => _310.match, 'call', _311 => _311(/colspan\s*=\s*["']?(\d+)/i), 'optionalAccess', _312 => _312[1]]) || "1", 10);
24276
- const rs = parseInt(_optionalChain([attrs, 'access', _313 => _313.match, 'call', _314 => _314(/rowspan\s*=\s*["']?(\d+)/i), 'optionalAccess', _315 => _315[1]]) || "1", 10);
24609
+ const cs = parseInt(_optionalChain([attrs, 'access', _318 => _318.match, 'call', _319 => _319(/colspan\s*=\s*["']?(\d+)/i), 'optionalAccess', _320 => _320[1]]) || "1", 10);
24610
+ const rs = parseInt(_optionalChain([attrs, 'access', _321 => _321.match, 'call', _322 => _322(/rowspan\s*=\s*["']?(\d+)/i), 'optionalAccess', _323 => _323[1]]) || "1", 10);
24277
24611
  cellStart = m.index + m[0].length;
24278
- cellInfo = { colSpan: clampSpan(isNaN(cs) ? 1 : cs, _chunk46VU6YXFcjs.MAX_COLS), rowSpan: clampSpan(isNaN(rs) ? 1 : rs, _chunk46VU6YXFcjs.MAX_ROWS) };
24612
+ cellInfo = { colSpan: clampSpan(isNaN(cs) ? 1 : cs, _chunkGGZ5PSJOcjs.MAX_COLS), rowSpan: clampSpan(isNaN(rs) ? 1 : rs, _chunkGGZ5PSJOcjs.MAX_ROWS) };
24279
24613
  } else if (cellStart >= 0 && cellInfo && currentRow) {
24280
24614
  currentRow.push({ inner: raw.slice(cellStart, m.index), colSpan: cellInfo.colSpan, rowSpan: cellInfo.rowSpan });
24281
24615
  cellStart = -1;
@@ -24299,7 +24633,7 @@ function htmlCellInnerToLines(inner) {
24299
24633
  hadNonText = true;
24300
24634
  work = work.replace(/<img\s(?:"[^"]*"|'[^']*'|[^>"'])*?>/gi, (tag) => {
24301
24635
  const m = /\bsrc\s*=\s*(?:"([^"]*)"|'([^']*)')/i.exec(tag);
24302
- const src = _nullishCoalesce(_optionalChain([m, 'optionalAccess', _316 => _316[1]]), () => ( _optionalChain([m, 'optionalAccess', _317 => _317[2]])));
24636
+ const src = _nullishCoalesce(_optionalChain([m, 'optionalAccess', _324 => _324[1]]), () => ( _optionalChain([m, 'optionalAccess', _325 => _325[2]])));
24303
24637
  if (src) imgSrcs.push(src);
24304
24638
  return "";
24305
24639
  });
@@ -24442,7 +24776,7 @@ function edgeXml(tag, d) {
24442
24776
  return d ? `<hh:${tag} type="${escapeXml(d.type)}" width="${escapeXml(d.width)}" color="${escapeXml(d.color)}"/>` : `<hh:${tag} type="NONE" width="0.1 mm" color="#000000"/>`;
24443
24777
  }
24444
24778
  function borderFillDefToXml(id, def) {
24445
- const fill = _optionalChain([def, 'access', _318 => _318.fill, 'optionalAccess', _319 => _319.faceColor]) ? `<hh:fillBrush><hh:winBrush faceColor="${escapeXml(def.fill.faceColor)}" hatchColor="#000000" alpha="0"/></hh:fillBrush>` : "";
24779
+ const fill = _optionalChain([def, 'access', _326 => _326.fill, 'optionalAccess', _327 => _327.faceColor]) ? `<hh:fillBrush><hh:winBrush faceColor="${escapeXml(def.fill.faceColor)}" hatchColor="#000000" alpha="0"/></hh:fillBrush>` : "";
24446
24780
  return ` <hh:borderFill id="${id}" threeD="0" shadow="0" centerLine="NONE" breakCellSeparateLine="0">
24447
24781
  <hh:slash type="NONE" Crooked="0" isCounter="0"/>
24448
24782
  <hh:backSlash type="NONE" Crooked="0" isCounter="0"/>
@@ -24758,7 +25092,7 @@ var ImageRegistry = (_class5 = class {
24758
25092
  }
24759
25093
  /** 실데이터 등록 — images 맵 바이트·data: URI. 포맷 미상(webp 등)은 null → placeholder 폴백 */
24760
25094
  takeReal(url) {
24761
- let bytes = _optionalChain([this, 'access', _320 => _320.supplied, 'optionalAccess', _321 => _321.get, 'call', _322 => _322(url)]);
25095
+ let bytes = _optionalChain([this, 'access', _328 => _328.supplied, 'optionalAccess', _329 => _329.get, 'call', _330 => _330(url)]);
24762
25096
  if (!bytes && url.startsWith("data:")) {
24763
25097
  const m = /^data:image\/[a-z+]+;base64,([A-Za-z0-9+/=\s]+)$/i.exec(url);
24764
25098
  if (m) {
@@ -24933,11 +25267,11 @@ function estimateRowHeight(cells, widths, charHeight) {
24933
25267
  function generateTable(rows, theme, style = null, remap = null, seq = 0, images = null) {
24934
25268
  const rowCnt = rows.length;
24935
25269
  const colCnt = Math.max(...rows.map((r) => r.length), 1);
24936
- const reg = _nullishCoalesce(_optionalChain([style, 'optionalAccess', _323 => _323.bfRegistry]), () => ( null));
25270
+ const reg = _nullishCoalesce(_optionalChain([style, 'optionalAccess', _331 => _331.bfRegistry]), () => ( null));
24937
25271
  const totalW = style ? reg ? style.totalWidth - DATA_TABLE_INSET : style.totalWidth : 44e3;
24938
- const measureH = _nullishCoalesce(_optionalChain([style, 'optionalAccess', _324 => _324.charHeight]), () => ( 1e3));
25272
+ const measureH = _nullishCoalesce(_optionalChain([style, 'optionalAccess', _332 => _332.charHeight]), () => ( 1e3));
24939
25273
  const rowAnchor = normalizeRowAnchor((_nullishCoalesce(rows[0], () => ( []))).map((c) => c.replace(/!\[[^\]]*\]\([^)]*\)/g, "")));
24940
- const prof = takeProfile(remap, rowCnt, colCnt, anchorOfMarkdownCell(_nullishCoalesce(_optionalChain([rows, 'access', _325 => _325[0], 'optionalAccess', _326 => _326[0]]), () => ( ""))), seq, rowAnchor);
25274
+ const prof = takeProfile(remap, rowCnt, colCnt, anchorOfMarkdownCell(_nullishCoalesce(_optionalChain([rows, 'access', _333 => _333[0], 'optionalAccess', _334 => _334[0]]), () => ( ""))), seq, rowAnchor);
24941
25275
  const colMax = Array(colCnt).fill(0);
24942
25276
  const colMaxBody = Array(colCnt).fill(0);
24943
25277
  const colMinWord = Array(colCnt).fill(0);
@@ -24965,7 +25299,7 @@ function generateTable(rows, theme, style = null, remap = null, seq = 0, images
24965
25299
  const k = `${rowIdx},${colIdx}`;
24966
25300
  const isLabelCell2 = labelCol0 && colIdx === 0;
24967
25301
  const defaultCharPr = style ? reg && (isHeaderRow || isLabelCell2) ? style.boldCharPr : style.charPr : isHeaderRow ? headerCharPr : baseCharPr;
24968
- const cellCharPr = _nullishCoalesce(_optionalChain([prof, 'optionalAccess', _327 => _327.cellChar, 'access', _328 => _328.get, 'call', _329 => _329(k)]), () => ( defaultCharPr));
25302
+ const cellCharPr = _nullishCoalesce(_optionalChain([prof, 'optionalAccess', _335 => _335.cellChar, 'access', _336 => _336.get, 'call', _337 => _337(k)]), () => ( defaultCharPr));
24969
25303
  const centered = isHeaderRow || colCentered[colIdx];
24970
25304
  const paraPrId = style ? centered ? _nullishCoalesce(style.tblCenterParaPr, () => ( style.centerParaPr)) : reg ? _nullishCoalesce(style.tblLeftParaPr, () => ( PARA_NORMAL)) : PARA_NORMAL : PARA_NORMAL;
24971
25305
  const p = cell2.split(/<br\s*\/?>/i).map((seg) => {
@@ -24983,11 +25317,11 @@ function generateTable(rows, theme, style = null, remap = null, seq = 0, images
24983
25317
  }
24984
25318
  }
24985
25319
  }
24986
- const runs = generateRuns(seg, cellCharPr, _optionalChain([prof, 'optionalAccess', _330 => _330.cellChar, 'access', _331 => _331.has, 'call', _332 => _332(k)]) ? void 0 : mapId);
25320
+ const runs = generateRuns(seg, cellCharPr, _optionalChain([prof, 'optionalAccess', _338 => _338.cellChar, 'access', _339 => _339.has, 'call', _340 => _340(k)]) ? void 0 : mapId);
24987
25321
  const body = (runs || (picRuns ? "" : `<hp:run charPrIDRef="${cellCharPr}"><hp:t></hp:t></hp:run>`)) + picRuns;
24988
25322
  return `<hp:p paraPrIDRef="${paraPrId}" styleIDRef="0">${body}</hp:p>`;
24989
25323
  }).join("");
24990
- const bf = _nullishCoalesce(_optionalChain([prof, 'optionalAccess', _333 => _333.cellBf, 'access', _334 => _334.get, 'call', _335 => _335(k)]), () => ( (reg ? reg.get(dataCellSpec({
25324
+ const bf = _nullishCoalesce(_optionalChain([prof, 'optionalAccess', _341 => _341.cellBf, 'access', _342 => _342.get, 'call', _343 => _343(k)]), () => ( (reg ? reg.get(dataCellSpec({
24991
25325
  row: rowIdx,
24992
25326
  rowEnd: rowIdx,
24993
25327
  col: colIdx,
@@ -24997,7 +25331,7 @@ function generateTable(rows, theme, style = null, remap = null, seq = 0, images
24997
25331
  headerRows: 1,
24998
25332
  fill: isHeaderRow ? _nullishCoalesce(style.headerFill, () => ( "#E6E6E6")) : isLabelCell2 ? _nullishCoalesce(style.labelFill, () => ( "#E7E7E7")) : void 0
24999
25333
  })) : style && isHeaderRow ? style.headerBf : 2)));
25000
- const h = _nullishCoalesce(_optionalChain([prof, 'optionalAccess', _336 => _336.cellH, 'access', _337 => _337.get, 'call', _338 => _338(k)]), () => ( cellH));
25334
+ const h = _nullishCoalesce(_optionalChain([prof, 'optionalAccess', _344 => _344.cellH, 'access', _345 => _345.get, 'call', _346 => _346(k)]), () => ( cellH));
25001
25335
  return `<hp:tc name="" header="${isHeaderRow ? 1 : 0}" hasMargin="0" protect="0" editable="1" dirty="0" borderFillIDRef="${bf}"><hp:subList id="" textDirection="HORIZONTAL" lineWrap="BREAK" vertAlign="${style ? "CENTER" : "TOP"}" linkListIDRef="0" linkListNextIDRef="0" textWidth="0" textHeight="0" hasTextRef="0" hasNumRef="0">${p}</hp:subList><hp:cellAddr colAddr="${colIdx}" rowAddr="${rowIdx}"/><hp:cellSpan colSpan="1" rowSpan="1"/><hp:cellSz width="${colWidths[colIdx]}" height="${h}"/><hp:cellMargin left="141" right="141" top="141" bottom="141"/></hp:tc>`;
25002
25336
  }).join("");
25003
25337
  return `<hp:tr>${tdElements}</hp:tr>`;
@@ -25006,7 +25340,7 @@ function generateTable(rows, theme, style = null, remap = null, seq = 0, images
25006
25340
  const tblH = rowHeights.reduce((a, b) => a + b, 0);
25007
25341
  const tblInner = `<hp:sz width="${tblW}" widthRelTo="ABSOLUTE" height="${tblH}" heightRelTo="ABSOLUTE" protect="0"/><hp:pos treatAsChar="1" affectLSpacing="0" flowWithText="0" allowOverlap="0" holdAnchorAndSO="0" vertRelTo="PARA" horzRelTo="PARA" vertAlign="TOP" horzAlign="LEFT" vertOffset="0" horzOffset="0"/><hp:outMargin left="0" right="0" top="0" bottom="0"/><hp:inMargin left="510" right="510" top="141" bottom="141"/>` + trElements;
25008
25342
  const tbl2 = `<hp:tbl id="${tblId}" zOrder="0" numberingType="TABLE" pageBreak="CELL" repeatHeader="${style ? 1 : 0}" rowCnt="${rowCnt}" colCnt="${colCnt}" cellSpacing="0" borderFillIDRef="2" noShading="0">${tblInner}</hp:tbl>`;
25009
- const hostPr = reg && _optionalChain([style, 'optionalAccess', _339 => _339.rightParaPr]) !== void 0 ? style.rightParaPr : 0;
25343
+ const hostPr = reg && _optionalChain([style, 'optionalAccess', _347 => _347.rightParaPr]) !== void 0 ? style.rightParaPr : 0;
25010
25344
  return `<hp:p paraPrIDRef="${hostPr}" styleIDRef="0"><hp:run charPrIDRef="0">${tbl2}</hp:run></hp:p>`;
25011
25345
  }
25012
25346
  function layoutHtmlRows(rows) {
@@ -25017,8 +25351,8 @@ function layoutHtmlRows(rows) {
25017
25351
  let c = 0;
25018
25352
  for (const cell2 of rows[r].cells) {
25019
25353
  while (occupied.has(`${r},${c}`)) c++;
25020
- const colSpan = clampSpan(cell2.colSpan, _chunk46VU6YXFcjs.MAX_COLS);
25021
- const rowSpan = clampSpan(cell2.rowSpan, _chunk46VU6YXFcjs.MAX_ROWS);
25354
+ const colSpan = clampSpan(cell2.colSpan, _chunkGGZ5PSJOcjs.MAX_COLS);
25355
+ const rowSpan = clampSpan(cell2.rowSpan, _chunkGGZ5PSJOcjs.MAX_ROWS);
25022
25356
  placed.push({ r, c, colSpan, rowSpan, inner: cell2.inner, isHeader: rows[r].tag === "th" });
25023
25357
  for (let dr = 0; dr < rowSpan; dr++) {
25024
25358
  for (let dc = 0; dc < colSpan; dc++) occupied.add(`${r + dr},${c + dc}`);
@@ -25046,7 +25380,7 @@ function generateHtmlTableXml(rawHtml, theme, totalWidth = 44e3, style = null, r
25046
25380
  if (!rows || rows.length === 0) return null;
25047
25381
  const { placed, rowCnt, colCnt } = layoutHtmlRows(rows);
25048
25382
  if (rowCnt === 0 || colCnt === 0) return null;
25049
- const measureH = _nullishCoalesce(_optionalChain([style, 'optionalAccess', _340 => _340.charHeight]), () => ( 1e3));
25383
+ const measureH = _nullishCoalesce(_optionalChain([style, 'optionalAccess', _348 => _348.charHeight]), () => ( 1e3));
25050
25384
  const first = _nullishCoalesce(placed.find((p) => p.r === 0 && p.c === 0), () => ( placed[0]));
25051
25385
  const row0 = Array.from({ length: colCnt }, () => "");
25052
25386
  for (const cell2 of placed) {
@@ -25075,7 +25409,7 @@ function generateHtmlTableXml(rawHtml, theme, totalWidth = 44e3, style = null, r
25075
25409
  const tblId = nextTableId();
25076
25410
  const useHeaderStyle = !style && (theme.tableHeader !== theme.body || theme.tableHeaderBold);
25077
25411
  const spanW = (cell2) => colWidths.slice(cell2.c, cell2.c + cell2.colSpan).reduce((a, b) => a + b, 0);
25078
- const reg = _nullishCoalesce(_optionalChain([style, 'optionalAccess', _341 => _341.bfRegistry]), () => ( null));
25412
+ const reg = _nullishCoalesce(_optionalChain([style, 'optionalAccess', _349 => _349.bfRegistry]), () => ( null));
25079
25413
  let htmlHeaderRows = 0;
25080
25414
  while (htmlHeaderRows < rows.length && rows[htmlHeaderRows].tag === "th") htmlHeaderRows++;
25081
25415
  const tableRowHeights = Array(rowCnt).fill(cellH);
@@ -25089,7 +25423,7 @@ function generateHtmlTableXml(rawHtml, theme, totalWidth = 44e3, style = null, r
25089
25423
  const nestedW = Math.max(Math.min(Math.max(sw - 1020, 4e3), sw - 282), 500);
25090
25424
  const nestedXml = generateHtmlTableXml(nested, theme, nestedW, style ? { ...style, totalWidth: nestedW } : null);
25091
25425
  if (nestedXml) {
25092
- const szH = _optionalChain([nestedXml, 'access', _342 => _342.match, 'call', _343 => _343(/<hp:sz [^>]*height="(\d+)"/), 'optionalAccess', _344 => _344[1]]);
25426
+ const szH = _optionalChain([nestedXml, 'access', _350 => _350.match, 'call', _351 => _351(/<hp:sz [^>]*height="(\d+)"/), 'optionalAccess', _352 => _352[1]]);
25093
25427
  nestedH += (szH ? Number(szH) : (_nullishCoalesce(nested.match(/<tr[\s>]/gi), () => ( []))).length * cellH) + 300;
25094
25428
  }
25095
25429
  return nestedXml;
@@ -25100,7 +25434,7 @@ function generateHtmlTableXml(rawHtml, theme, totalWidth = 44e3, style = null, r
25100
25434
  for (const line of lines) wrapLines += Math.max(1, Math.ceil(measureTextWidth(unescapeHtml(line).trim(), measureH, 100) / usable));
25101
25435
  const lineH = style ? Math.round(measureH * 1.6) : 800;
25102
25436
  const contentH = Math.max(cellH * rowSpan, Math.max(wrapLines, 1) * lineH + nestedH);
25103
- const cellHeight = Math.max(_nullishCoalesce(_optionalChain([prof, 'optionalAccess', _345 => _345.cellH, 'access', _346 => _346.get, 'call', _347 => _347(`${cell2.r},${cell2.c}`)]), () => ( 0)), contentH);
25437
+ const cellHeight = Math.max(_nullishCoalesce(_optionalChain([prof, 'optionalAccess', _353 => _353.cellH, 'access', _354 => _354.get, 'call', _355 => _355(`${cell2.r},${cell2.c}`)]), () => ( 0)), contentH);
25104
25438
  const perRow = Math.ceil(cellHeight / rowSpan);
25105
25439
  for (let r = cell2.r; r < cell2.r + rowSpan; r++) tableRowHeights[r] = Math.max(tableRowHeights[r], perRow);
25106
25440
  return { cell: cell2, rowSpan, lines, nestedXmls, segLines, imgSrcs: cellParsed[i].imgSrcs };
@@ -25111,7 +25445,7 @@ function generateHtmlTableXml(rawHtml, theme, totalWidth = 44e3, style = null, r
25111
25445
  const baseCharPr = style ? style.charPr : CHAR_NORMAL;
25112
25446
  const headerCharPr = isHeader && useHeaderStyle ? CHAR_TABLE_HEADER : baseCharPr;
25113
25447
  const defaultCharPr = style && reg && isHeader ? style.boldCharPr : isHeader ? headerCharPr : baseCharPr;
25114
- const charPrId = _nullishCoalesce(_optionalChain([prof, 'optionalAccess', _348 => _348.cellChar, 'access', _349 => _349.get, 'call', _350 => _350(k)]), () => ( defaultCharPr));
25448
+ const charPrId = _nullishCoalesce(_optionalChain([prof, 'optionalAccess', _356 => _356.cellChar, 'access', _357 => _357.get, 'call', _358 => _358(k)]), () => ( defaultCharPr));
25115
25449
  const centered = isHeader || colCentered[cell2.c];
25116
25450
  const paraPrId = style ? centered ? reg ? _nullishCoalesce(style.tblCenterParaPr, () => ( style.centerParaPr)) : style.centerParaPr : reg ? _nullishCoalesce(style.tblLeftParaPr, () => ( PARA_NORMAL)) : PARA_NORMAL : PARA_NORMAL;
25117
25451
  const picUrls = images ? [...imgSrcs] : [];
@@ -25151,7 +25485,7 @@ function generateHtmlTableXml(rawHtml, theme, totalWidth = 44e3, style = null, r
25151
25485
  let cellHeight = 0;
25152
25486
  for (let r = cell2.r; r < cell2.r + rowSpan; r++) cellHeight += tableRowHeights[r];
25153
25487
  const rowEnd = cell2.r + rowSpan - 1;
25154
- const bf = _nullishCoalesce(_optionalChain([prof, 'optionalAccess', _351 => _351.cellBf, 'access', _352 => _352.get, 'call', _353 => _353(k)]), () => ( (reg ? reg.get(dataCellSpec({
25488
+ const bf = _nullishCoalesce(_optionalChain([prof, 'optionalAccess', _359 => _359.cellBf, 'access', _360 => _360.get, 'call', _361 => _361(k)]), () => ( (reg ? reg.get(dataCellSpec({
25155
25489
  row: cell2.r,
25156
25490
  rowEnd,
25157
25491
  col: cell2.c,
@@ -25321,7 +25655,7 @@ function buildPressHead(g, ids, bodyWidth, reg) {
25321
25655
  return [`<hp:p paraPrIDRef="${PARA_NORMAL}" styleIDRef="0"><hp:run charPrIDRef="${CHAR_NORMAL}">${table2}</hp:run></hp:p>`, blank()];
25322
25656
  }
25323
25657
  function buildPressContact(g, ids, bodyWidth, reg) {
25324
- const c = _optionalChain([g, 'access', _354 => _354.press, 'optionalAccess', _355 => _355.contact]);
25658
+ const c = _optionalChain([g, 'access', _362 => _362.press, 'optionalAccess', _363 => _363.contact]);
25325
25659
  if (!c || !c.dept && !c.manager && !c.phone) return [];
25326
25660
  const w = bodyWidth - 280;
25327
25661
  const cells = [["\uB2F4\uB2F9 \uBD80\uC11C", _nullishCoalesce(c.dept, () => ( ""))], ["\uB2F4\uB2F9\uC790", _nullishCoalesce(c.manager, () => ( ""))], ["\uC5F0\uB77D\uCC98", _nullishCoalesce(c.phone, () => ( ""))]];
@@ -25700,10 +26034,10 @@ function generateSecPr(gongmun, page = null) {
25700
26034
  m.header = gongmun.headerFooter;
25701
26035
  m.footer = gongmun.headerFooter;
25702
26036
  }
25703
- const secPr = `<hp:secPr textDirection="HORIZONTAL" spaceColumns="1134" tabStop="8000" outlineShapeIDRef="1" memoShapeIDRef="0" textVerticalWidthHead="0" masterPageCnt="0"><hp:grid lineGrid="0" charGrid="0" wonggojiFormat="0"/><hp:startNum pageStartsOn="BOTH" page="0" pic="0" tbl="0" equation="0"/><hp:visibility hideFirstHeader="0" hideFirstFooter="0" hideFirstMasterPage="0" border="SHOW_ALL" fill="SHOW_ALL" hideFirstPageNum="0" hideFirstEmptyLine="0" showLineNumber="0"/><hp:pagePr landscape="${_nullishCoalesce(_optionalChain([page, 'optionalAccess', _356 => _356.landscape]), () => ( "WIDELY"))}" width="${_nullishCoalesce(_optionalChain([page, 'optionalAccess', _357 => _357.widthHU]), () => ( A4_W_HU))}" height="${_nullishCoalesce(_optionalChain([page, 'optionalAccess', _358 => _358.heightHU]), () => ( A4_H_HU))}" gutterType="LEFT_ONLY"><hp:margin header="${m.header}" footer="${m.footer}" gutter="0" left="${m.left}" right="${m.right}" top="${m.top}" bottom="${m.bottom}"/></hp:pagePr><hp:footNotePr><hp:autoNumFormat type="DIGIT" userChar="" prefixChar="" suffixChar=")" supscript="0"/><hp:noteLine length="-1" type="SOLID" width="0.12 mm" color="#000000"/><hp:noteSpacing betweenNotes="283" belowLine="567" aboveLine="850"/><hp:numbering type="CONTINUOUS" newNum="1"/><hp:placement place="EACH_COLUMN" beneathText="0"/></hp:footNotePr><hp:endNotePr><hp:autoNumFormat type="DIGIT" userChar="" prefixChar="" suffixChar=")" supscript="0"/><hp:noteLine length="14692344" type="SOLID" width="0.12 mm" color="#000000"/><hp:noteSpacing betweenNotes="0" belowLine="567" aboveLine="850"/><hp:numbering type="CONTINUOUS" newNum="1"/><hp:placement place="END_OF_DOCUMENT" beneathText="0"/></hp:endNotePr></hp:secPr>`;
25704
- const colPr = columnColPrXml(_nullishCoalesce(_optionalChain([page, 'optionalAccess', _359 => _359.columns]), () => ( 1)));
25705
- const hf = (_optionalChain([page, 'optionalAccess', _360 => _360.header]) ? headerFooterCtrl("header", page.header, 1) : "") + (_optionalChain([page, 'optionalAccess', _361 => _361.footer]) ? headerFooterCtrl("footer", page.footer, 2) : "");
25706
- return secPr + colPr + hf + (_optionalChain([gongmun, 'optionalAccess', _362 => _362.pageNumbers]) ? pageNumCtrl() : "");
26037
+ const secPr = `<hp:secPr textDirection="HORIZONTAL" spaceColumns="1134" tabStop="8000" outlineShapeIDRef="1" memoShapeIDRef="0" textVerticalWidthHead="0" masterPageCnt="0"><hp:grid lineGrid="0" charGrid="0" wonggojiFormat="0"/><hp:startNum pageStartsOn="BOTH" page="0" pic="0" tbl="0" equation="0"/><hp:visibility hideFirstHeader="0" hideFirstFooter="0" hideFirstMasterPage="0" border="SHOW_ALL" fill="SHOW_ALL" hideFirstPageNum="0" hideFirstEmptyLine="0" showLineNumber="0"/><hp:pagePr landscape="${_nullishCoalesce(_optionalChain([page, 'optionalAccess', _364 => _364.landscape]), () => ( "WIDELY"))}" width="${_nullishCoalesce(_optionalChain([page, 'optionalAccess', _365 => _365.widthHU]), () => ( A4_W_HU))}" height="${_nullishCoalesce(_optionalChain([page, 'optionalAccess', _366 => _366.heightHU]), () => ( A4_H_HU))}" gutterType="LEFT_ONLY"><hp:margin header="${m.header}" footer="${m.footer}" gutter="0" left="${m.left}" right="${m.right}" top="${m.top}" bottom="${m.bottom}"/></hp:pagePr><hp:footNotePr><hp:autoNumFormat type="DIGIT" userChar="" prefixChar="" suffixChar=")" supscript="0"/><hp:noteLine length="-1" type="SOLID" width="0.12 mm" color="#000000"/><hp:noteSpacing betweenNotes="283" belowLine="567" aboveLine="850"/><hp:numbering type="CONTINUOUS" newNum="1"/><hp:placement place="EACH_COLUMN" beneathText="0"/></hp:footNotePr><hp:endNotePr><hp:autoNumFormat type="DIGIT" userChar="" prefixChar="" suffixChar=")" supscript="0"/><hp:noteLine length="14692344" type="SOLID" width="0.12 mm" color="#000000"/><hp:noteSpacing betweenNotes="0" belowLine="567" aboveLine="850"/><hp:numbering type="CONTINUOUS" newNum="1"/><hp:placement place="END_OF_DOCUMENT" beneathText="0"/></hp:endNotePr></hp:secPr>`;
26038
+ const colPr = columnColPrXml(_nullishCoalesce(_optionalChain([page, 'optionalAccess', _367 => _367.columns]), () => ( 1)));
26039
+ const hf = (_optionalChain([page, 'optionalAccess', _368 => _368.header]) ? headerFooterCtrl("header", page.header, 1) : "") + (_optionalChain([page, 'optionalAccess', _369 => _369.footer]) ? headerFooterCtrl("footer", page.footer, 2) : "");
26040
+ return secPr + colPr + hf + (_optionalChain([gongmun, 'optionalAccess', _370 => _370.pageNumbers]) ? pageNumCtrl() : "");
25707
26041
  }
25708
26042
  var SectionOpener = (_class6 = class {
25709
26043
  constructor(gongmun, page = null) {;_class6.prototype.__init13.call(this);
@@ -25743,19 +26077,19 @@ function buildPreamble(blocks, ctx) {
25743
26077
  const { gongmun, dfIds, bfReg, tableStyle, richAssets, gjBodyW } = ctx;
25744
26078
  const preamble = [];
25745
26079
  let hasFrontPages = false;
25746
- if (_optionalChain([gongmun, 'optionalAccess', _363 => _363.reportInfo]) && dfIds) {
26080
+ if (_optionalChain([gongmun, 'optionalAccess', _371 => _371.reportInfo]) && dfIds) {
25747
26081
  preamble.push(buildReportInfo(gongmun, dfIds));
25748
26082
  }
25749
- if (_optionalChain([gongmun, 'optionalAccess', _364 => _364.approval]) && bfReg) {
26083
+ if (_optionalChain([gongmun, 'optionalAccess', _372 => _372.approval]) && bfReg) {
25750
26084
  preamble.push(buildApprovalTable(gongmun.approval, bfReg, richAssets ? GJ_CHAR_APPROVAL : GONGMUN_APPROVAL_CHAR));
25751
26085
  }
25752
- if (_optionalChain([gongmun, 'optionalAccess', _365 => _365.docHead]) && dfIds) {
26086
+ if (_optionalChain([gongmun, 'optionalAccess', _373 => _373.docHead]) && dfIds) {
25753
26087
  preamble.push(...buildDocHead(gongmun, dfIds));
25754
26088
  }
25755
- if (_optionalChain([gongmun, 'optionalAccess', _366 => _366.noticeHead]) && dfIds) {
26089
+ if (_optionalChain([gongmun, 'optionalAccess', _374 => _374.noticeHead]) && dfIds) {
25756
26090
  preamble.push(...buildNoticeHead(gongmun));
25757
26091
  }
25758
- if (_optionalChain([gongmun, 'optionalAccess', _367 => _367.press]) && dfIds && bfReg && tableStyle) {
26092
+ if (_optionalChain([gongmun, 'optionalAccess', _375 => _375.press]) && dfIds && bfReg && tableStyle) {
25759
26093
  preamble.push(...buildPressHead(gongmun, dfIds, tableStyle.totalWidth, bfReg));
25760
26094
  }
25761
26095
  if (gongmun && (gongmun.cover || gongmun.toc)) {
@@ -25784,7 +26118,7 @@ function buildPreamble(blocks, ctx) {
25784
26118
  }
25785
26119
  if (gongmun && !ctx.gaejosik && ctx.coverH1Idx < 0 && bfReg && (gongmun.preset === "report" || gongmun.preset === "plan" || gongmun.preset === "notice")) {
25786
26120
  ctx.titleBoxH1Idx = blocks.findIndex((b) => b.type === "heading" && (_nullishCoalesce(b.level, () => ( 1))) === 1);
25787
- } else if (_optionalChain([gongmun, 'optionalAccess', _368 => _368.press]) && ctx.coverH1Idx < 0 && dfIds) {
26121
+ } else if (_optionalChain([gongmun, 'optionalAccess', _376 => _376.press]) && ctx.coverH1Idx < 0 && dfIds) {
25788
26122
  ctx.pressH1Idx = blocks.findIndex((b) => b.type === "heading" && (_nullishCoalesce(b.level, () => ( 1))) === 1);
25789
26123
  }
25790
26124
  if (preamble.length > 0) {
@@ -25799,7 +26133,7 @@ function renderHeading(block, blockIdx, ctx) {
25799
26133
  if (gongmun && blockIdx === ctx.coverH1Idx) return "";
25800
26134
  if (gongmun && blockIdx === ctx.pressH1Idx && dfIds) {
25801
26135
  const parts = [generateParagraph((block.text || "").trim(), GONGMUN_CENTER, dfIds.pressTitle)];
25802
- for (const s of _nullishCoalesce(_optionalChain([gongmun, 'access', _369 => _369.press, 'optionalAccess', _370 => _370.sub]), () => ( []))) {
26136
+ for (const s of _nullishCoalesce(_optionalChain([gongmun, 'access', _377 => _377.press, 'optionalAccess', _378 => _378.sub]), () => ( []))) {
25803
26137
  parts.push(generateParagraph(`- ${s} -`, GONGMUN_CENTER, dfIds.pressSub));
25804
26138
  }
25805
26139
  return parts.join("\n ");
@@ -25893,8 +26227,8 @@ function renderListItem(block, blockIdx, ctx) {
25893
26227
  const { gongmun, gongmunList, measured, fit, vBase, dfIds } = ctx;
25894
26228
  if (gongmun && gongmunList) {
25895
26229
  const info = gongmunList.items.get(blockIdx);
25896
- const depth = _nullishCoalesce(_optionalChain([info, 'optionalAccess', _371 => _371.depth]), () => ( 0));
25897
- const marker2 = _nullishCoalesce(_optionalChain([info, 'optionalAccess', _372 => _372.marker]), () => ( ""));
26230
+ const depth = _nullishCoalesce(_optionalChain([info, 'optionalAccess', _379 => _379.depth]), () => ( 0));
26231
+ const marker2 = _nullishCoalesce(_optionalChain([info, 'optionalAccess', _380 => _380.marker]), () => ( ""));
25898
26232
  const content = block.text || "";
25899
26233
  if (measured && content.trimStart().startsWith("\u203B")) {
25900
26234
  return generateParagraph(content.trim(), GJ_PARA_CHAM, GJ_CHAR_CHAM, ctx.chamMap);
@@ -25903,7 +26237,7 @@ function renderListItem(block, blockIdx, ctx) {
25903
26237
  return generateParagraph(`* ${content.trim()}`, GJ_PARA_CHAM, GJ_CHAR_CHAM, ctx.chamMap);
25904
26238
  }
25905
26239
  const text = marker2 ? `${marker2} ${content}` : content;
25906
- const listParaPr = marker2 ? _optionalChain([info, 'optionalAccess', _373 => _373.indentVariant]) !== void 0 ? GONGMUN_LIST_VARIANT_BASE + info.indentVariant : GONGMUN_LIST_BASE + depth : GONGMUN_LIST_PLAIN_BASE + depth;
26240
+ const listParaPr = marker2 ? _optionalChain([info, 'optionalAccess', _381 => _381.indentVariant]) !== void 0 ? GONGMUN_LIST_VARIANT_BASE + info.indentVariant : GONGMUN_LIST_BASE + depth : GONGMUN_LIST_PLAIN_BASE + depth;
25907
26241
  let listCharPr = gongmun.numbering === "report" && depth === 0 ? CHAR_BOLD : CHAR_NORMAL;
25908
26242
  let mapId = fit ? variantMapper(fit, blockIdx, vBase) : void 0;
25909
26243
  if (measured && depth === 0 && gongmun.numbering !== "standard") {
@@ -25962,18 +26296,18 @@ function renderHtmlTable(block, ctx) {
25962
26296
  }
25963
26297
  function appendPostamble(blocks, ctx) {
25964
26298
  const { gongmun, dfIds, bfReg, tableStyle, paraXmls } = ctx;
25965
- if (_optionalChain([gongmun, 'optionalAccess', _374 => _374.noticeHead]) && dfIds) {
26299
+ if (_optionalChain([gongmun, 'optionalAccess', _382 => _382.noticeHead]) && dfIds) {
25966
26300
  paraXmls.push(...buildNoticeFoot(gongmun));
25967
26301
  }
25968
- if (_optionalChain([gongmun, 'optionalAccess', _375 => _375.endMark]) && paraXmls.length > 0) {
25969
- const lastBlock = [...blocks].reverse().find((b) => (b.text || "").trim() || b.type === "table" && _optionalChain([b, 'access', _376 => _376.rows, 'optionalAccess', _377 => _377.length]));
26302
+ if (_optionalChain([gongmun, 'optionalAccess', _383 => _383.endMark]) && paraXmls.length > 0) {
26303
+ const lastBlock = [...blocks].reverse().find((b) => (b.text || "").trim() || b.type === "table" && _optionalChain([b, 'access', _384 => _384.rows, 'optionalAccess', _385 => _385.length]));
25970
26304
  const lastText = lastBlock && (lastBlock.type === "paragraph" || lastBlock.type === "list_item") ? lastBlock.text || "" : "";
25971
26305
  if (!hasEndMark(lastText)) paraXmls.push(buildEndMark());
25972
26306
  }
25973
- if (_optionalChain([gongmun, 'optionalAccess', _378 => _378.docFoot]) && dfIds) {
26307
+ if (_optionalChain([gongmun, 'optionalAccess', _386 => _386.docFoot]) && dfIds) {
25974
26308
  paraXmls.push(...buildDocFoot(gongmun, dfIds));
25975
26309
  }
25976
- if (_optionalChain([gongmun, 'optionalAccess', _379 => _379.press]) && dfIds && bfReg && tableStyle) {
26310
+ if (_optionalChain([gongmun, 'optionalAccess', _387 => _387.press]) && dfIds && bfReg && tableStyle) {
25977
26311
  paraXmls.push(...buildPressContact(gongmun, dfIds, tableStyle.totalWidth, bfReg));
25978
26312
  }
25979
26313
  }
@@ -25993,7 +26327,7 @@ function blocksToSectionXml(blocks, theme, gongmun, gongmunList = gongmun ? prec
25993
26327
  remap,
25994
26328
  dfIds,
25995
26329
  images,
25996
- gaejosik: _optionalChain([gongmun, 'optionalAccess', _380 => _380.preset]) === "gaejosik",
26330
+ gaejosik: _optionalChain([gongmun, 'optionalAccess', _388 => _388.preset]) === "gaejosik",
25997
26331
  measured,
25998
26332
  richAssets,
25999
26333
  vBase: charVariantBase(richAssets, !!gongmun),
@@ -26099,9 +26433,9 @@ function blocksToSectionXml(blocks, theme, gongmun, gongmunList = gongmun ? prec
26099
26433
 
26100
26434
  // src/hwpx/generator.ts
26101
26435
  async function markdownToHwpx(markdown, options) {
26102
- const theme = resolveTheme(_optionalChain([options, 'optionalAccess', _381 => _381.theme]));
26103
- const gongmun = _optionalChain([options, 'optionalAccess', _382 => _382.gongmun]) ? resolveGongmun(options.gongmun) : null;
26104
- const page = resolvePage(_optionalChain([options, 'optionalAccess', _383 => _383.page]));
26436
+ const theme = resolveTheme(_optionalChain([options, 'optionalAccess', _389 => _389.theme]));
26437
+ const gongmun = _optionalChain([options, 'optionalAccess', _390 => _390.gongmun]) ? resolveGongmun(options.gongmun) : null;
26438
+ const page = resolvePage(_optionalChain([options, 'optionalAccess', _391 => _391.page]));
26105
26439
  const { md: md2, defs } = extractFootnoteDefs(markdown);
26106
26440
  beginInlineDoc(defs);
26107
26441
  try {
@@ -26111,13 +26445,13 @@ async function markdownToHwpx(markdown, options) {
26111
26445
  const gongmunList = gongmun ? precomputeGongmunList(blocks, gongmun) : null;
26112
26446
  const fit = gongmun && gongmunList ? computeGongmunFitPlan(blocks, gongmun, gongmunList) : null;
26113
26447
  const staticBfEnd = staticBorderFillNext(gongmun);
26114
- const remap = _optionalChain([options, 'optionalAccess', _384 => _384.profile]) ? buildProfileRemap(options.profile, charVariantBase(richAssets, !!gongmun) + (_nullishCoalesce(_optionalChain([fit, 'optionalAccess', _385 => _385.variants, 'optionalAccess', _386 => _386.length]), () => ( 0))) * 4, staticBfEnd, staticFontNext(gongmun)) : null;
26115
- const bfReg = gongmun ? new TableBfRegistry(staticBfEnd + (_nullishCoalesce(_optionalChain([remap, 'optionalAccess', _387 => _387.borderFillXmls, 'access', _388 => _388.length]), () => ( 0)))) : null;
26448
+ const remap = _optionalChain([options, 'optionalAccess', _392 => _392.profile]) ? buildProfileRemap(options.profile, charVariantBase(richAssets, !!gongmun) + (_nullishCoalesce(_optionalChain([fit, 'optionalAccess', _393 => _393.variants, 'optionalAccess', _394 => _394.length]), () => ( 0))) * 4, staticBfEnd, staticFontNext(gongmun)) : null;
26449
+ const bfReg = gongmun ? new TableBfRegistry(staticBfEnd + (_nullishCoalesce(_optionalChain([remap, 'optionalAccess', _395 => _395.borderFillXmls, 'access', _396 => _396.length]), () => ( 0)))) : null;
26116
26450
  const dfActive = !!gongmun && docframeActive(gongmun);
26117
- const dfBase = charVariantBase(richAssets, !!gongmun) + (_nullishCoalesce(_optionalChain([fit, 'optionalAccess', _389 => _389.variants, 'optionalAccess', _390 => _390.length]), () => ( 0))) * 4 + (_nullishCoalesce(_optionalChain([remap, 'optionalAccess', _391 => _391.charPrXmls, 'access', _392 => _392.length]), () => ( 0)));
26451
+ const dfBase = charVariantBase(richAssets, !!gongmun) + (_nullishCoalesce(_optionalChain([fit, 'optionalAccess', _397 => _397.variants, 'optionalAccess', _398 => _398.length]), () => ( 0))) * 4 + (_nullishCoalesce(_optionalChain([remap, 'optionalAccess', _399 => _399.charPrXmls, 'access', _400 => _400.length]), () => ( 0)));
26118
26452
  const dfIds = dfActive ? docframeIds(dfBase) : null;
26119
26453
  const chartParts = [];
26120
- const supplied = _optionalChain([options, 'optionalAccess', _393 => _393.images]) ? new Map(Object.entries(options.images).map(([k, v]) => [k, v instanceof Uint8Array ? v : new Uint8Array(v)])) : void 0;
26454
+ const supplied = _optionalChain([options, 'optionalAccess', _401 => _401.images]) ? new Map(Object.entries(options.images).map(([k, v]) => [k, v instanceof Uint8Array ? v : new Uint8Array(v)])) : void 0;
26121
26455
  const images = new ImageRegistry(supplied);
26122
26456
  const sectionXml = blocksToSectionXml(blocks, theme, gongmun, gongmunList, fit, chartParts, bfReg, remap, dfIds, images, page);
26123
26457
  if (remap && remap.tables.length > 0) {
@@ -26126,7 +26460,7 @@ async function markdownToHwpx(markdown, options) {
26126
26460
  console.warn(`[kordoc] format profile: \uD504\uB85C\uD544 \uD45C ${unused}\uAC1C\uAC00 \uBB38\uC11C \uD45C\uC640 \uB9E4\uCE6D\uB418\uC9C0 \uC54A\uC544 \uBBF8\uC801\uC6A9 (\uD589\xB7\uC5F4/\uCCAB \uC140 \uD14D\uC2A4\uD2B8 \uBD88\uC77C\uCE58)`);
26127
26461
  }
26128
26462
  }
26129
- const extraBorderFills = [..._nullishCoalesce(_optionalChain([remap, 'optionalAccess', _394 => _394.borderFillXmls]), () => ( [])), ..._nullishCoalesce(_optionalChain([bfReg, 'optionalAccess', _395 => _395.emit, 'call', _396 => _396()]), () => ( []))];
26463
+ const extraBorderFills = [..._nullishCoalesce(_optionalChain([remap, 'optionalAccess', _402 => _402.borderFillXmls]), () => ( [])), ..._nullishCoalesce(_optionalChain([bfReg, 'optionalAccess', _403 => _403.emit, 'call', _404 => _404()]), () => ( []))];
26130
26464
  const zip = new (0, _jszip2.default)();
26131
26465
  zip.file("mimetype", "application/hwp+zip", { compression: "STORE" });
26132
26466
  zip.file("META-INF/container.xml", generateContainerXml());
@@ -26135,11 +26469,11 @@ async function markdownToHwpx(markdown, options) {
26135
26469
  zip.file("Contents/header.xml", generateHeaderXml(
26136
26470
  theme,
26137
26471
  gongmun,
26138
- _nullishCoalesce(_optionalChain([fit, 'optionalAccess', _397 => _397.variants]), () => ( [])),
26472
+ _nullishCoalesce(_optionalChain([fit, 'optionalAccess', _405 => _405.variants]), () => ( [])),
26139
26473
  extraBorderFills,
26140
- [..._nullishCoalesce(_optionalChain([remap, 'optionalAccess', _398 => _398.charPrXmls]), () => ( [])), ...dfActive ? docframeCharPrXmls(dfBase, richAssets) : []],
26141
- _nullishCoalesce(_optionalChain([gongmunList, 'optionalAccess', _399 => _399.indentVariants]), () => ( [])),
26142
- _nullishCoalesce(_optionalChain([remap, 'optionalAccess', _400 => _400.fontFaces]), () => ( []))
26474
+ [..._nullishCoalesce(_optionalChain([remap, 'optionalAccess', _406 => _406.charPrXmls]), () => ( [])), ...dfActive ? docframeCharPrXmls(dfBase, richAssets) : []],
26475
+ _nullishCoalesce(_optionalChain([gongmunList, 'optionalAccess', _407 => _407.indentVariants]), () => ( [])),
26476
+ _nullishCoalesce(_optionalChain([remap, 'optionalAccess', _408 => _408.fontFaces]), () => ( []))
26143
26477
  ));
26144
26478
  zip.file("Contents/section0.xml", sectionXml);
26145
26479
  for (const part of chartParts) zip.file(part.name, part.xml);
@@ -26193,7 +26527,7 @@ function alignBlocks(a, b) {
26193
26527
  const m = a.length, n = b.length;
26194
26528
  if (m * n > 1e7) return fallbackAlign(a, b);
26195
26529
  const lenOf = (blk) => {
26196
- const t = blk.text !== void 0 ? blk.text : blk.type === "table" && blk.table ? blk.table.cells.flat().map((c) => _nullishCoalesce(_optionalChain([c, 'optionalAccess', _401 => _401.text]), () => ( ""))).join(" ") : "";
26530
+ const t = blk.text !== void 0 ? blk.text : blk.type === "table" && blk.table ? blk.table.cells.flat().map((c) => _nullishCoalesce(_optionalChain([c, 'optionalAccess', _409 => _409.text]), () => ( ""))).join(" ") : "";
26197
26531
  return t.replace(/\s+/g, " ").trim().length;
26198
26532
  };
26199
26533
  const aLen = a.map(lenOf);
@@ -26266,8 +26600,8 @@ function blockSimilarity(a, b) {
26266
26600
  }
26267
26601
  function tableSimilarity(a, b) {
26268
26602
  const dimSim = 1 - Math.abs(a.rows * a.cols - b.rows * b.cols) / Math.max(a.rows * a.cols, b.rows * b.cols, 1);
26269
- const textsA = a.cells.flat().map((c) => _nullishCoalesce(_optionalChain([c, 'optionalAccess', _402 => _402.text]), () => ( ""))).join(" ");
26270
- const textsB = b.cells.flat().map((c) => _nullishCoalesce(_optionalChain([c, 'optionalAccess', _403 => _403.text]), () => ( ""))).join(" ");
26603
+ const textsA = a.cells.flat().map((c) => _nullishCoalesce(_optionalChain([c, 'optionalAccess', _410 => _410.text]), () => ( ""))).join(" ");
26604
+ const textsB = b.cells.flat().map((c) => _nullishCoalesce(_optionalChain([c, 'optionalAccess', _411 => _411.text]), () => ( ""))).join(" ");
26271
26605
  const contentSim = normalizedSimilarity(textsA, textsB);
26272
26606
  return dimSim * 0.3 + contentSim * 0.7;
26273
26607
  }
@@ -26278,8 +26612,8 @@ function diffTableCells(a, b) {
26278
26612
  for (let r = 0; r < maxRows; r++) {
26279
26613
  const row = [];
26280
26614
  for (let c = 0; c < maxCols; c++) {
26281
- const cellA = r < a.rows && c < a.cols ? _optionalChain([a, 'access', _404 => _404.cells, 'access', _405 => _405[r], 'optionalAccess', _406 => _406[c], 'optionalAccess', _407 => _407.text]) : void 0;
26282
- const cellB = r < b.rows && c < b.cols ? _optionalChain([b, 'access', _408 => _408.cells, 'access', _409 => _409[r], 'optionalAccess', _410 => _410[c], 'optionalAccess', _411 => _411.text]) : void 0;
26615
+ const cellA = r < a.rows && c < a.cols ? _optionalChain([a, 'access', _412 => _412.cells, 'access', _413 => _413[r], 'optionalAccess', _414 => _414[c], 'optionalAccess', _415 => _415.text]) : void 0;
26616
+ const cellB = r < b.rows && c < b.cols ? _optionalChain([b, 'access', _416 => _416.cells, 'access', _417 => _417[r], 'optionalAccess', _418 => _418[c], 'optionalAccess', _419 => _419.text]) : void 0;
26283
26617
  let type;
26284
26618
  if (cellA === void 0) type = "added";
26285
26619
  else if (cellB === void 0) type = "removed";
@@ -26329,7 +26663,7 @@ function builtinTemplateDir() {
26329
26663
  for (const c of candidates) {
26330
26664
  if (_fs.existsSync.call(void 0, _path.join.call(void 0, c, BUILTIN_TEMPLATES[0].file))) return c;
26331
26665
  }
26332
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uB0B4\uC7A5 templates \uB514\uB809\uD1A0\uB9AC\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 (\uD328\uD0A4\uC9C0 \uC124\uCE58\uAC00 \uC190\uC0C1\uB418\uC5C8\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4)");
26666
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uB0B4\uC7A5 templates \uB514\uB809\uD1A0\uB9AC\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 (\uD328\uD0A4\uC9C0 \uC124\uCE58\uAC00 \uC190\uC0C1\uB418\uC5C8\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4)");
26333
26667
  }
26334
26668
  function readBuiltinTemplate(t) {
26335
26669
  const buf = _fs.readFileSync.call(void 0, _path.join.call(void 0, builtinTemplateDir(), t.file));
@@ -26492,7 +26826,7 @@ function parseRenderStyles(headXml) {
26492
26826
  const underlineEl = findChildByLocalName(el, "underline");
26493
26827
  const textColor = el.getAttribute("textColor");
26494
26828
  const fontRef = findChildByLocalName(el, "fontRef");
26495
- const fontId = _nullishCoalesce(_optionalChain([fontRef, 'optionalAccess', _412 => _412.getAttribute, 'call', _413 => _413("hangul")]), () => ( _optionalChain([fontRef, 'optionalAccess', _414 => _414.getAttribute, 'call', _415 => _415("latin")])));
26829
+ const fontId = _nullishCoalesce(_optionalChain([fontRef, 'optionalAccess', _420 => _420.getAttribute, 'call', _421 => _421("hangul")]), () => ( _optionalChain([fontRef, 'optionalAccess', _422 => _422.getAttribute, 'call', _423 => _423("latin")])));
26496
26830
  const face = fontId != null ? hangulFonts.get(fontId) : void 0;
26497
26831
  styles.charPr.set(id, {
26498
26832
  height: Number(el.getAttribute("height")) || 1e3,
@@ -26500,8 +26834,8 @@ function parseRenderStyles(headXml) {
26500
26834
  italic: findChildByLocalName(el, "italic") != null,
26501
26835
  underline: underlineEl != null && (_nullishCoalesce(underlineEl.getAttribute("type"), () => ( "NONE"))) !== "NONE",
26502
26836
  color: textColor && textColor !== "#000000" && textColor.toLowerCase() !== "none" ? textColor : void 0,
26503
- ratio: Number(_optionalChain([ratioEl, 'optionalAccess', _416 => _416.getAttribute, 'call', _417 => _417("hangul")])) || 100,
26504
- spacing: Number(_optionalChain([spacingEl, 'optionalAccess', _418 => _418.getAttribute, 'call', _419 => _419("hangul")])) || 0,
26837
+ ratio: Number(_optionalChain([ratioEl, 'optionalAccess', _424 => _424.getAttribute, 'call', _425 => _425("hangul")])) || 100,
26838
+ spacing: Number(_optionalChain([spacingEl, 'optionalAccess', _426 => _426.getAttribute, 'call', _427 => _427("hangul")])) || 0,
26505
26839
  fontFamily: face ? hwpFaceToCssStack(face) : void 0,
26506
26840
  face
26507
26841
  });
@@ -26510,7 +26844,7 @@ function parseRenderStyles(headXml) {
26510
26844
  const id = el.getAttribute("id");
26511
26845
  if (id != null) {
26512
26846
  const align = findChildByLocalName(el, "align");
26513
- styles.paraAlign.set(id, _optionalChain([align, 'optionalAccess', _420 => _420.getAttribute, 'call', _421 => _421("horizontal")]) || "JUSTIFY");
26847
+ styles.paraAlign.set(id, _optionalChain([align, 'optionalAccess', _428 => _428.getAttribute, 'call', _429 => _429("horizontal")]) || "JUSTIFY");
26514
26848
  styles.paraGeom.set(id, parseParaGeom(el));
26515
26849
  }
26516
26850
  } else if (tag === "borderFill") {
@@ -26524,7 +26858,7 @@ function parseRenderStyles(headXml) {
26524
26858
  };
26525
26859
  const fillBrush = findChildByLocalName(el, "fillBrush");
26526
26860
  const winBrush = fillBrush ? findChildByLocalName(fillBrush, "winBrush") : null;
26527
- const face = _optionalChain([winBrush, 'optionalAccess', _422 => _422.getAttribute, 'call', _423 => _423("faceColor")]);
26861
+ const face = _optionalChain([winBrush, 'optionalAccess', _430 => _430.getAttribute, 'call', _431 => _431("faceColor")]);
26528
26862
  if (face && face.toLowerCase() !== "none") bf.fill = face;
26529
26863
  styles.borderFill.set(id, bf);
26530
26864
  }
@@ -26596,7 +26930,7 @@ function collectSites(scan) {
26596
26930
  }
26597
26931
  function attrOf3(openTag, name) {
26598
26932
  const m = openTag.match(new RegExp(`\\b${name}="([^"]*)"`));
26599
- return _optionalChain([m, 'optionalAccess', _424 => _424[1]]);
26933
+ return _optionalChain([m, 'optionalAccess', _432 => _432[1]]);
26600
26934
  }
26601
26935
  function paraOpenTag(xml, para2) {
26602
26936
  const end = xml.indexOf(">", para2.start);
@@ -26611,7 +26945,7 @@ function anchorRunInfo(xml, para2, anchor) {
26611
26945
  if (!tr) return null;
26612
26946
  const before = xml.slice(Math.max(0, para2.start), tr.contentStart);
26613
26947
  const runOpen = [...before.matchAll(/<([A-Za-z0-9]+):run\b[^>]*>/g)].pop();
26614
- const prefix = _nullishCoalesce(_nullishCoalesce(_optionalChain([runOpen, 'optionalAccess', _425 => _425[1]]), () => ( tr.prefix)), () => ( "hp"));
26948
+ const prefix = _nullishCoalesce(_nullishCoalesce(_optionalChain([runOpen, 'optionalAccess', _433 => _433[1]]), () => ( tr.prefix)), () => ( "hp"));
26615
26949
  const charPr2 = runOpen && attrOf3(runOpen[0], "charPrIDRef") || "0";
26616
26950
  const close = xml.indexOf(`</${prefix}:run>`, tr.contentEnd);
26617
26951
  if (close === -1) return null;
@@ -26638,7 +26972,7 @@ function cellContentWidthMm(xml, cell2) {
26638
26972
  if (width === null) return null;
26639
26973
  let content = width;
26640
26974
  const win = cellAddrWindow(xml, cell2);
26641
- const mg = _optionalChain([win, 'optionalAccess', _426 => _426.match, 'call', _427 => _427(/<[A-Za-z0-9]+:cellMargin\b[^>]*>/)]);
26975
+ const mg = _optionalChain([win, 'optionalAccess', _434 => _434.match, 'call', _435 => _435(/<[A-Za-z0-9]+:cellMargin\b[^>]*>/)]);
26642
26976
  if (mg) {
26643
26977
  content -= Number(_nullishCoalesce(attrOf3(mg[0], "left"), () => ( 0))) + Number(_nullishCoalesce(attrOf3(mg[0], "right"), () => ( 0)));
26644
26978
  }
@@ -26672,12 +27006,12 @@ function buildFloatPicXml(itemId, sizeHu, posXHu, posYHu, ids) {
26672
27006
  return `<hp:pic xmlns:hc="http://www.hancom.co.kr/hwpml/2011/core" id="${ids.id}" zOrder="0" numberingType="PICTURE" textWrap="IN_FRONT_OF_TEXT" textFlow="BOTH_SIDES" lock="0" dropcapstyle="None" href="" groupLevel="0" instid="${ids.instid}" reverse="0"><hp:offset x="0" y="0"/><hp:orgSz width="${w}" height="${h}"/><hp:curSz width="${w}" height="${h}"/><hp:flip horizontal="0" vertical="0"/><hp:rotationInfo angle="0" centerX="${Math.round(w / 2)}" centerY="${Math.round(h / 2)}" rotateimage="1"/><hp:renderingInfo><hc:transMatrix e1="1" e2="0" e3="0" e4="0" e5="1" e6="0"/><hc:scaMatrix e1="1" e2="0" e3="0" e4="0" e5="1" e6="0"/><hc:rotMatrix e1="1" e2="0" e3="0" e4="0" e5="1" e6="0"/></hp:renderingInfo><hp:imgRect><hc:pt0 x="0" y="0"/><hc:pt1 x="${w}" y="0"/><hc:pt2 x="${w}" y="${h}"/><hc:pt3 x="0" y="${h}"/></hp:imgRect><hp:imgClip left="0" right="${w}" top="0" bottom="${h}"/><hp:inMargin left="0" right="0" top="0" bottom="0"/><hp:imgDim dimwidth="${w}" dimheight="${h}"/><hc:img binaryItemIDRef="${itemId}" bright="0" contrast="0" effect="REAL_PIC" alpha="0"/><hp:effects/><hp:sz width="${w}" widthRelTo="ABSOLUTE" height="${h}" heightRelTo="ABSOLUTE" protect="0"/><hp:pos treatAsChar="0" affectLSpacing="0" flowWithText="0" allowOverlap="1" holdAnchorAndSO="0" vertRelTo="PARA" horzRelTo="COLUMN" vertAlign="TOP" horzAlign="LEFT" vertOffset="${posYHu}" horzOffset="${posXHu}"/><hp:outMargin left="0" right="0" top="0" bottom="0"/><hp:shapeComment>kordoc seal</hp:shapeComment></hp:pic>`;
26673
27007
  }
26674
27008
  async function placeSealHwpx(hwpxBuffer, ops) {
26675
- if (ops.length === 0) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("place_seal: \uBC30\uCE58\uD560 \uB3C4\uC7A5\uC774 \uC5C6\uC2B5\uB2C8\uB2E4");
27009
+ if (ops.length === 0) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("place_seal: \uBC30\uCE58\uD560 \uB3C4\uC7A5\uC774 \uC5C6\uC2B5\uB2C8\uB2E4");
26676
27010
  const u8 = new Uint8Array(hwpxBuffer);
26677
- _chunkDZBMQC2Ncjs.precheckZipSize.call(void 0, hwpxBuffer);
27011
+ _chunkJ7DBL77Bcjs.precheckZipSize.call(void 0, hwpxBuffer);
26678
27012
  const zip = await _jszip2.default.loadAsync(hwpxBuffer);
26679
- const sectionPaths = Object.keys(zip.files).filter((name) => /[Ss]ection\d+\.xml$/i.test(name)).sort((a, b) => Number(_nullishCoalesce(_optionalChain([a, 'access', _428 => _428.match, 'call', _429 => _429(/(\d+)\.xml$/i), 'optionalAccess', _430 => _430[1]]), () => ( 0))) - Number(_nullishCoalesce(_optionalChain([b, 'access', _431 => _431.match, 'call', _432 => _432(/(\d+)\.xml$/i), 'optionalAccess', _433 => _433[1]]), () => ( 0))));
26680
- if (sectionPaths.length === 0) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("HWPX\uC5D0\uC11C \uC139\uC158 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
27013
+ const sectionPaths = Object.keys(zip.files).filter((name) => /[Ss]ection\d+\.xml$/i.test(name)).sort((a, b) => Number(_nullishCoalesce(_optionalChain([a, 'access', _436 => _436.match, 'call', _437 => _437(/(\d+)\.xml$/i), 'optionalAccess', _438 => _438[1]]), () => ( 0))) - Number(_nullishCoalesce(_optionalChain([b, 'access', _439 => _439.match, 'call', _440 => _440(/(\d+)\.xml$/i), 'optionalAccess', _441 => _441[1]]), () => ( 0))));
27014
+ if (sectionPaths.length === 0) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("HWPX\uC5D0\uC11C \uC139\uC158 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4");
26681
27015
  const manifestPath = Object.keys(zip.files).find((name) => /\.hpf$/i.test(name));
26682
27016
  const headerPath = Object.keys(zip.files).find((name) => /(^|\/)header\.xml$/i.test(name));
26683
27017
  const styles = headerPath ? parseRenderStyles(await zip.file(headerPath).async("text")) : null;
@@ -26718,11 +27052,11 @@ async function placeSealHwpx(hwpxBuffer, ops) {
26718
27052
  const manifestItems = [];
26719
27053
  const placed = [];
26720
27054
  for (const op of ops) {
26721
- if (!op.anchor) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("place_seal: anchor \uBB38\uAD6C\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4");
26722
- if (!op.image || op.image.length === 0) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("place_seal: \uB3C4\uC7A5 \uC774\uBBF8\uC9C0\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4");
27055
+ if (!op.anchor) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("place_seal: anchor \uBB38\uAD6C\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4");
27056
+ if (!op.image || op.image.length === 0) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("place_seal: \uB3C4\uC7A5 \uC774\uBBF8\uC9C0\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4");
26723
27057
  const ext = (_nullishCoalesce(op.ext, () => ( "png"))).toLowerCase();
26724
- if (!MIME[ext]) throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`place_seal: \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uC774\uBBF8\uC9C0 \uD655\uC7A5\uC790 .${ext} (png/jpg/bmp/gif)`);
26725
- if (!imageMagicMatches(op.image, ext)) throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`place_seal: \uC774\uBBF8\uC9C0 \uB0B4\uC6A9\uC774 .${ext} \uD615\uC2DD\uC774 \uC544\uB2D9\uB2C8\uB2E4 (\uB9E4\uC9C1\uBC14\uC774\uD2B8 \uBD88\uC77C\uCE58)`);
27058
+ if (!MIME[ext]) throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`place_seal: \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uC774\uBBF8\uC9C0 \uD655\uC7A5\uC790 .${ext} (png/jpg/bmp/gif)`);
27059
+ if (!imageMagicMatches(op.image, ext)) throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`place_seal: \uC774\uBBF8\uC9C0 \uB0B4\uC6A9\uC774 .${ext} \uD615\uC2DD\uC774 \uC544\uB2D9\uB2C8\uB2E4 (\uB9E4\uC9C1\uBC14\uC774\uD2B8 \uBD88\uC77C\uCE58)`);
26726
27060
  const wantOcc = _nullishCoalesce(op.occurrence, () => ( 0));
26727
27061
  let found = null;
26728
27062
  let total = 0;
@@ -26755,7 +27089,7 @@ async function placeSealHwpx(hwpxBuffer, ops) {
26755
27089
  }
26756
27090
  }
26757
27091
  }
26758
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(
27092
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(
26759
27093
  `place_seal: \uC575\uCEE4 "${op.anchor}" ${wantOcc}\uBC88\uC9F8 \uB4F1\uC7A5\uC744 \uCC3E\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4 (\uBCF8\uBB38 \uB0B4 ${total}\uD68C \uB4F1\uC7A5 \u2014 occurrence 0..${Math.max(0, total - 1)})`
26760
27094
  );
26761
27095
  }
@@ -26763,9 +27097,9 @@ async function placeSealHwpx(hwpxBuffer, ops) {
26763
27097
  const xml = sectionXmls[si];
26764
27098
  const run = anchorRunInfo(xml, site.para, op.anchor);
26765
27099
  if (!run) {
26766
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(`place_seal: \uC575\uCEE4 "${op.anchor}" \uBB38\uB2E8\uC5D0\uC11C run\uC744 \uCC3E\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4`);
27100
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(`place_seal: \uC575\uCEE4 "${op.anchor}" \uBB38\uB2E8\uC5D0\uC11C run\uC744 \uCC3E\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4`);
26767
27101
  }
26768
- const charPrHeight = _nullishCoalesce(_optionalChain([styles, 'optionalAccess', _434 => _434.charPr, 'access', _435 => _435.get, 'call', _436 => _436(run.charPr), 'optionalAccess', _437 => _437.height]), () => ( 1e3));
27102
+ const charPrHeight = _nullishCoalesce(_optionalChain([styles, 'optionalAccess', _442 => _442.charPr, 'access', _443 => _443.get, 'call', _444 => _444(run.charPr), 'optionalAccess', _445 => _445.height]), () => ( 1e3));
26769
27103
  const fontPt = charPrHeight / 100;
26770
27104
  const emMm = fontPt * 25.4 / 72;
26771
27105
  const lineHMm = emMm;
@@ -26774,7 +27108,7 @@ async function placeSealHwpx(hwpxBuffer, ops) {
26774
27108
  const sizeMm = op.sizeMm != null && Number.isFinite(op.sizeMm) && op.sizeMm > 0 ? op.sizeMm : Math.max(7, Math.min(18, lineHMm * 1.6));
26775
27109
  const availMm = _nullishCoalesce((site.cell ? cellContentWidthMm(xml, site.cell) : null), () => ( bodyColumnWidthMm(xml)));
26776
27110
  const paraPrId = _nullishCoalesce(attrOf3(paraOpenTag(xml, site.para), "paraPrIDRef"), () => ( "0"));
26777
- const align = _optionalChain([styles, 'optionalAccess', _438 => _438.paraAlign, 'access', _439 => _439.get, 'call', _440 => _440(paraPrId)]);
27111
+ const align = _optionalChain([styles, 'optionalAccess', _446 => _446.paraAlign, 'access', _447 => _447.get, 'call', _448 => _448(paraPrId)]);
26778
27112
  let alignShiftMm = 0;
26779
27113
  if (align === "CENTER" || align === "RIGHT") {
26780
27114
  const paraWMm = measureMm(site.para.text, emMm);
@@ -26870,7 +27204,7 @@ function parseBorderFills(headerDoc) {
26870
27204
  };
26871
27205
  const fillBrush = findChildByLocalName(bf, "fillBrush");
26872
27206
  const winBrush = fillBrush ? findChildByLocalName(fillBrush, "winBrush") : null;
26873
- const face = _optionalChain([winBrush, 'optionalAccess', _441 => _441.getAttribute, 'call', _442 => _442("faceColor")]);
27207
+ const face = _optionalChain([winBrush, 'optionalAccess', _449 => _449.getAttribute, 'call', _450 => _450("faceColor")]);
26874
27208
  if (face && face !== "none") def.fill = { faceColor: face };
26875
27209
  map.set(id, def);
26876
27210
  }
@@ -26902,7 +27236,7 @@ function parseCharPrs(headerDoc, hangulFonts) {
26902
27236
  if (cp.getAttribute("italic") === "1") def.italic = true;
26903
27237
  if (findChildByLocalName(cp, "underline")) def.underline = true;
26904
27238
  const fontRef = findChildByLocalName(cp, "fontRef");
26905
- const hangul = _optionalChain([fontRef, 'optionalAccess', _443 => _443.getAttribute, 'call', _444 => _444("hangul")]);
27239
+ const hangul = _optionalChain([fontRef, 'optionalAccess', _451 => _451.getAttribute, 'call', _452 => _452("hangul")]);
26906
27240
  if (hangul) {
26907
27241
  def.fontRef_hangul = hangul;
26908
27242
  const face = hangulFonts.get(hangul);
@@ -26930,7 +27264,7 @@ function parseTable3(tbl2, tableIndex, borderFills, charPrs) {
26930
27264
  const rows = _nullishCoalesce(num(tbl2.getAttribute("rowCnt")), () => ( 0));
26931
27265
  const cols = _nullishCoalesce(num(tbl2.getAttribute("colCnt")), () => ( 0));
26932
27266
  const sz = findChildByLocalName(tbl2, "sz");
26933
- const width = _optionalChain([sz, 'optionalAccess', _445 => _445.getAttribute, 'call', _446 => _446("width")]) || void 0;
27267
+ const width = _optionalChain([sz, 'optionalAccess', _453 => _453.getAttribute, 'call', _454 => _454("width")]) || void 0;
26934
27268
  const cells = [];
26935
27269
  const usedBf = /* @__PURE__ */ new Set();
26936
27270
  const usedCp = /* @__PURE__ */ new Set();
@@ -26943,17 +27277,17 @@ function parseTable3(tbl2, tableIndex, borderFills, charPrs) {
26943
27277
  const addr = findChildByLocalName(tc2, "cellAddr");
26944
27278
  const span = findChildByLocalName(tc2, "cellSpan");
26945
27279
  const csz = findChildByLocalName(tc2, "cellSz");
26946
- const row = _nullishCoalesce(num(_optionalChain([addr, 'optionalAccess', _447 => _447.getAttribute, 'call', _448 => _448("rowAddr")])), () => ( 0));
26947
- const col = _nullishCoalesce(num(_optionalChain([addr, 'optionalAccess', _449 => _449.getAttribute, 'call', _450 => _450("colAddr")])), () => ( 0));
27280
+ const row = _nullishCoalesce(num(_optionalChain([addr, 'optionalAccess', _455 => _455.getAttribute, 'call', _456 => _456("rowAddr")])), () => ( 0));
27281
+ const col = _nullishCoalesce(num(_optionalChain([addr, 'optionalAccess', _457 => _457.getAttribute, 'call', _458 => _458("colAddr")])), () => ( 0));
26948
27282
  if (row === 0 && col === 0 && !anchorText) anchorText = directCellText(tc2);
26949
27283
  if (row === 0) row0Texts.set(col, directCellText(tc2));
26950
- const colSpan = _nullishCoalesce(num(_optionalChain([span, 'optionalAccess', _451 => _451.getAttribute, 'call', _452 => _452("colSpan")])), () => ( 1));
26951
- const rowSpan = _nullishCoalesce(num(_optionalChain([span, 'optionalAccess', _453 => _453.getAttribute, 'call', _454 => _454("rowSpan")])), () => ( 1));
27284
+ const colSpan = _nullishCoalesce(num(_optionalChain([span, 'optionalAccess', _459 => _459.getAttribute, 'call', _460 => _460("colSpan")])), () => ( 1));
27285
+ const rowSpan = _nullishCoalesce(num(_optionalChain([span, 'optionalAccess', _461 => _461.getAttribute, 'call', _462 => _462("rowSpan")])), () => ( 1));
26952
27286
  const bfId = tc2.getAttribute("borderFillIDRef") || void 0;
26953
27287
  const cpId = firstRunCharPr(tc2);
26954
27288
  const cell2 = { row, col, rowSpan, colSpan };
26955
- const w = _optionalChain([csz, 'optionalAccess', _455 => _455.getAttribute, 'call', _456 => _456("width")]);
26956
- const hh = _optionalChain([csz, 'optionalAccess', _457 => _457.getAttribute, 'call', _458 => _458("height")]);
27289
+ const w = _optionalChain([csz, 'optionalAccess', _463 => _463.getAttribute, 'call', _464 => _464("width")]);
27290
+ const hh = _optionalChain([csz, 'optionalAccess', _465 => _465.getAttribute, 'call', _466 => _466("height")]);
26957
27291
  if (w) cell2.width_hwpunit = w;
26958
27292
  if (hh) cell2.height_hwpunit = hh;
26959
27293
  if (bfId) {
@@ -27041,16 +27375,16 @@ function pick(map, keys) {
27041
27375
  return out;
27042
27376
  }
27043
27377
  async function hwpxToProfile(input) {
27044
- const buf = input instanceof ArrayBuffer ? input : _chunkDZBMQC2Ncjs.toArrayBuffer.call(void 0, input);
27378
+ const buf = input instanceof ArrayBuffer ? input : _chunkJ7DBL77Bcjs.toArrayBuffer.call(void 0, input);
27045
27379
  const zip = await _jszip2.default.loadAsync(buf);
27046
27380
  const parser = createXmlParser();
27047
- const headerFile = _nullishCoalesce(zip.file("Contents/header.xml"), () => ( _optionalChain([zip, 'access', _459 => _459.file, 'call', _460 => _460(/[Hh]eader\.xml$/), 'optionalAccess', _461 => _461[0]])));
27381
+ const headerFile = _nullishCoalesce(zip.file("Contents/header.xml"), () => ( _optionalChain([zip, 'access', _467 => _467.file, 'call', _468 => _468(/[Hh]eader\.xml$/), 'optionalAccess', _469 => _469[0]])));
27048
27382
  let headerXml = "<root/>";
27049
27383
  if (headerFile) headerXml = await headerFile.async("text");
27050
27384
  const headerDoc = parser.parseFromString(headerXml, "text/xml");
27051
27385
  const borderFills = parseBorderFills(headerDoc);
27052
27386
  const charPrs = parseCharPrs(headerDoc, parseHangulFonts(headerDoc));
27053
- const sectionFiles = zip.file(/[Ss]ection\d+\.xml$/).sort((a, b) => (_nullishCoalesce(num(_nullishCoalesce(_optionalChain([a, 'access', _462 => _462.name, 'access', _463 => _463.match, 'call', _464 => _464(/(\d+)\.xml$/), 'optionalAccess', _465 => _465[1]]), () => ( null))), () => ( 0))) - (_nullishCoalesce(num(_nullishCoalesce(_optionalChain([b, 'access', _466 => _466.name, 'access', _467 => _467.match, 'call', _468 => _468(/(\d+)\.xml$/), 'optionalAccess', _469 => _469[1]]), () => ( null))), () => ( 0))));
27387
+ const sectionFiles = zip.file(/[Ss]ection\d+\.xml$/).sort((a, b) => (_nullishCoalesce(num(_nullishCoalesce(_optionalChain([a, 'access', _470 => _470.name, 'access', _471 => _471.match, 'call', _472 => _472(/(\d+)\.xml$/), 'optionalAccess', _473 => _473[1]]), () => ( null))), () => ( 0))) - (_nullishCoalesce(num(_nullishCoalesce(_optionalChain([b, 'access', _474 => _474.name, 'access', _475 => _475.match, 'call', _476 => _476(/(\d+)\.xml$/), 'optionalAccess', _477 => _477[1]]), () => ( null))), () => ( 0))));
27054
27388
  const tables = [];
27055
27389
  let tableIndex = 0;
27056
27390
  for (const f of sectionFiles) {
@@ -27364,7 +27698,7 @@ var ROW_OBJECT_RE = /<(?:[A-Za-z0-9_]+:)?(?:tbl|pic|equation|ole|container|shape
27364
27698
  var TAG_AT_RE = /<[A-Za-z0-9_:]+(?:"[^"]*"|'[^']*'|[^>"'])*>/y;
27365
27699
  function patchTableRows(input) {
27366
27700
  const { table: table2, scanTable, ctx, skip, origKeys, editedKeys } = input;
27367
- const xml = _optionalChain([ctx, 'access', _470 => _470.scans, 'access', _471 => _471[scanTable.sectionIndex], 'optionalAccess', _472 => _472.xml]);
27701
+ const xml = _optionalChain([ctx, 'access', _478 => _478.scans, 'access', _479 => _479[scanTable.sectionIndex], 'optionalAccess', _480 => _480.xml]);
27368
27702
  if (!xml) return skip("\uC139\uC158 XML \uB9E4\uD551 \uC2E4\uD328");
27369
27703
  const numRows = table2.rows;
27370
27704
  if (origKeys.length !== numRows) return skip("\uD45C \uD589 \uC88C\uD45C \uBD88\uC77C\uCE58 \u2014 \uD589 \uCD94\uAC00/\uC0AD\uC81C \uBBF8\uC9C0\uC6D0");
@@ -27531,7 +27865,7 @@ function buildRowFragment(xml, scanTable, template, cells, finalRow, hasExplicit
27531
27865
  const rr = scanTable.rowRanges[template];
27532
27866
  const wrapped = FRAG_OPEN + xml.slice(rr.start, rr.end) + FRAG_CLOSE;
27533
27867
  const scan = scanSectionXml(wrapped, 0);
27534
- const row = _optionalChain([scan, 'access', _473 => _473.tables, 'access', _474 => _474[0], 'optionalAccess', _475 => _475.rows, 'access', _476 => _476[0]]);
27868
+ const row = _optionalChain([scan, 'access', _481 => _481.tables, 'access', _482 => _482[0], 'optionalAccess', _483 => _483.rows, 'access', _484 => _484[0]]);
27535
27869
  if (!row || row.length !== cells.length) return null;
27536
27870
  const splices = allLinesegRemovalSplices(wrapped);
27537
27871
  for (let i = 0; i < cells.length; i++) {
@@ -27574,7 +27908,7 @@ function rowHeightOf(fragment) {
27574
27908
  }
27575
27909
  function tableSzHeightSplice(xml, scanTable, tblOpenLen, delta) {
27576
27910
  const from = scanTable.start + tblOpenLen;
27577
- const to = _nullishCoalesce(_optionalChain([scanTable, 'access', _477 => _477.rowRanges, 'access', _478 => _478[0], 'optionalAccess', _479 => _479.start]), () => ( from));
27911
+ const to = _nullishCoalesce(_optionalChain([scanTable, 'access', _485 => _485.rowRanges, 'access', _486 => _486[0], 'optionalAccess', _487 => _487.start]), () => ( from));
27578
27912
  const slice = xml.slice(from, to);
27579
27913
  const szM = slice.match(/<(?:[A-Za-z0-9_]+:)?sz\b(?:"[^"]*"|'[^']*'|[^>"'])*>/);
27580
27914
  if (!szM || szM.index === void 0) return null;
@@ -27763,9 +28097,9 @@ function patchHtmlTableRows(table2, scanTable, replica, editedRows, ctx, skip, d
27763
28097
  });
27764
28098
  }
27765
28099
  function patchNestedTables(table2, scanTable, oc, origTables, editedTables, ctx, skip, depth) {
27766
- const irCell = _optionalChain([table2, 'access', _480 => _480.cells, 'access', _481 => _481[oc.gridR], 'optionalAccess', _482 => _482[oc.gridC]]);
28100
+ const irCell = _optionalChain([table2, 'access', _488 => _488.cells, 'access', _489 => _489[oc.gridR], 'optionalAccess', _490 => _490[oc.gridC]]);
27767
28101
  const scanCell = scanTable.cellByAnchor.get(`${oc.gridR},${oc.gridC}`);
27768
- const nestedIRs = (_nullishCoalesce(_optionalChain([irCell, 'optionalAccess', _483 => _483.blocks]), () => ( []))).filter((b) => b.type === "table" && b.table).map((b) => b.table);
28102
+ const nestedIRs = (_nullishCoalesce(_optionalChain([irCell, 'optionalAccess', _491 => _491.blocks]), () => ( []))).filter((b) => b.type === "table" && b.table).map((b) => b.table);
27769
28103
  if (!scanCell || nestedIRs.length !== origTables.length || scanCell.tables.length !== origTables.length) {
27770
28104
  return skip("\uC911\uCCA9\uD45C \uC18C\uC2A4\uB9F5 \uB9E4\uD551 \uC2E4\uD328");
27771
28105
  }
@@ -27833,7 +28167,7 @@ function applyCellEdit(table2, scanTable, gridR, gridC, newLines, ctx, before, a
27833
28167
  };
27834
28168
  const cell2 = scanTable.cellByAnchor.get(`${gridR},${gridC}`);
27835
28169
  if (!cell2) return skip("\uC140 \uC88C\uD45C \uB9E4\uD551 \uC2E4\uD328 (\uBCD1\uD569 \uC601\uC5ED\uC758 \uBE48 \uCE78\uC774\uAC70\uB098 \uC88C\uD45C \uBD88\uC77C\uCE58)");
27836
- const irCell = _optionalChain([table2, 'access', _484 => _484.cells, 'access', _485 => _485[gridR], 'optionalAccess', _486 => _486[gridC]]);
28170
+ const irCell = _optionalChain([table2, 'access', _492 => _492.cells, 'access', _493 => _493[gridR], 'optionalAccess', _494 => _494[gridC]]);
27837
28171
  const scanJoined = cell2.paragraphs.map((p) => p.text).filter((t) => normForMatch(t)).join("\n");
27838
28172
  if (irCell && normForMatch(scanJoined) !== normForMatch(stripCellTokens(irCell.text))) {
27839
28173
  if (normForMatch(irCell.text) !== "" || normForMatch(scanJoined) !== "") {
@@ -27857,7 +28191,7 @@ function applyCellEdit(table2, scanTable, gridR, gridC, newLines, ctx, before, a
27857
28191
  const target = cell2.paragraphs[0];
27858
28192
  if (!target) return skip("\uBE48 \uC140\uC5D0 \uBB38\uB2E8\uC774 \uC5C6\uC5B4 \uD14D\uC2A4\uD2B8 \uC0BD\uC785 \uBD88\uAC00");
27859
28193
  const value = newLines.join(" ");
27860
- const xml = _optionalChain([ctx, 'access', _487 => _487.scans, 'access', _488 => _488[target.sectionIndex], 'optionalAccess', _489 => _489.xml]);
28194
+ const xml = _optionalChain([ctx, 'access', _495 => _495.scans, 'access', _496 => _496[target.sectionIndex], 'optionalAccess', _497 => _497.xml]);
27861
28195
  const rawT = xml ? paraTText(target, xml) : null;
27862
28196
  let sp;
27863
28197
  if (xml && rawT === null) {
@@ -27891,7 +28225,7 @@ function applyCellEdit(table2, scanTable, gridR, gridC, newLines, ctx, before, a
27891
28225
  }
27892
28226
  for (let i = 0; i < nonEmpty.length; i++) {
27893
28227
  if (assigned[i] === nonEmpty[i].text || normForMatch(assigned[i]) === normForMatch(nonEmpty[i].text)) continue;
27894
- const sp = buildParagraphSplices(nonEmpty[i], assigned[i], _optionalChain([ctx, 'access', _490 => _490.scans, 'access', _491 => _491[nonEmpty[i].sectionIndex], 'optionalAccess', _492 => _492.xml]));
28228
+ const sp = buildParagraphSplices(nonEmpty[i], assigned[i], _optionalChain([ctx, 'access', _498 => _498.scans, 'access', _499 => _499[nonEmpty[i].sectionIndex], 'optionalAccess', _500 => _500.xml]));
27895
28229
  if (sp === null) return skip("\uC140 \uBB38\uB2E8\uC5D0 \uD14D\uC2A4\uD2B8 \uB178\uB4DC\uB97C \uB9CC\uB4E4 \uC218 \uC5C6\uC74C");
27896
28230
  splices.push(...sp);
27897
28231
  sectionIndex = nonEmpty[i].sectionIndex;
@@ -27972,7 +28306,7 @@ async function resolveSectionEntryNames(zip) {
27972
28306
  const paths = sectionPathsFromManifest(xml).filter((p) => zip.file(p) !== null);
27973
28307
  if (paths.length > 0) return paths;
27974
28308
  }
27975
- return Object.keys(zip.files).filter((n) => /[Ss]ection\d+\.xml$/.test(n)).sort(_chunkDZBMQC2Ncjs.compareSectionPaths);
28309
+ return Object.keys(zip.files).filter((n) => /[Ss]ection\d+\.xml$/.test(n)).sort(_chunkJ7DBL77Bcjs.compareSectionPaths);
27976
28310
  }
27977
28311
  function sectionPathsFromManifest(xml) {
27978
28312
  const attr = (tag, name) => {
@@ -27982,7 +28316,7 @@ function sectionPathsFromManifest(xml) {
27982
28316
  const idToHref = /* @__PURE__ */ new Map();
27983
28317
  for (const m of xml.matchAll(/<opf:item(\s(?:"[^"]*"|'[^']*'|[^>"'])*?)\/?>/g)) {
27984
28318
  const id = attr(m[1], "id");
27985
- const href = _chunkDZBMQC2Ncjs.normalizeSectionHref.call(void 0, attr(m[1], "href"));
28319
+ const href = _chunkJ7DBL77Bcjs.normalizeSectionHref.call(void 0, attr(m[1], "href"));
27986
28320
  if (id && href) idToHref.set(id, href);
27987
28321
  }
27988
28322
  const ordered = [];
@@ -27991,7 +28325,7 @@ function sectionPathsFromManifest(xml) {
27991
28325
  if (href) ordered.push(href);
27992
28326
  }
27993
28327
  if (ordered.length > 0) return ordered;
27994
- return Array.from(idToHref.values()).sort(_chunkDZBMQC2Ncjs.compareSectionPaths);
28328
+ return Array.from(idToHref.values()).sort(_chunkJ7DBL77Bcjs.compareSectionPaths);
27995
28329
  }
27996
28330
 
27997
28331
  // src/roundtrip/patcher.ts
@@ -28083,7 +28417,7 @@ async function patchHwpx(original, editedMarkdown, options) {
28083
28417
  }
28084
28418
  }
28085
28419
  let verification;
28086
- if (_optionalChain([options, 'optionalAccess', _493 => _493.verify]) !== false) {
28420
+ if (_optionalChain([options, 'optionalAccess', _501 => _501.verify]) !== false) {
28087
28421
  try {
28088
28422
  const reparsed = await parseHwpxDocument(u8ToArrayBuffer(data));
28089
28423
  verification = diffUnitLists(splitMarkdownUnits(reparsed.markdown), editedUnits);
@@ -28101,17 +28435,17 @@ function buildOrigUnits(blocks) {
28101
28435
  let chunk;
28102
28436
  if (block.type === "paragraph" && block.text && /^\[별표\s*\d+/.test(sanitizeText(block.text))) {
28103
28437
  const next = blocks[i + 1];
28104
- if (_optionalChain([next, 'optionalAccess', _494 => _494.type]) === "paragraph" && next.text && /관련\)?$/.test(next.text)) consume = 2;
28105
- chunk = _chunk46VU6YXFcjs.blocksToMarkdown.call(void 0, blocks.slice(i, i + consume));
28438
+ if (_optionalChain([next, 'optionalAccess', _502 => _502.type]) === "paragraph" && next.text && /관련\)?$/.test(next.text)) consume = 2;
28439
+ chunk = _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, blocks.slice(i, i + consume));
28106
28440
  } else {
28107
- chunk = _chunk46VU6YXFcjs.blocksToMarkdown.call(void 0, [block]);
28441
+ chunk = _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, [block]);
28108
28442
  }
28109
28443
  if (chunk) {
28110
28444
  const subUnits = splitMarkdownUnits(chunk);
28111
28445
  const isFragment = consume === 2 || (block.type === "paragraph" || block.type === "heading") && subUnits.length > 1;
28112
28446
  for (let s = 0; s < subUnits.length; s++) {
28113
28447
  const u = { ...subUnits[s], blockIdx: i, fragment: isFragment || void 0 };
28114
- if (block.type === "table" && _optionalChain([block, 'access', _495 => _495.table, 'optionalAccess', _496 => _496.caption]) && s === 0 && subUnits.length > 1 && u.kind === "text" && u.raw.startsWith("**")) {
28448
+ if (block.type === "table" && _optionalChain([block, 'access', _503 => _503.table, 'optionalAccess', _504 => _504.caption]) && s === 0 && subUnits.length > 1 && u.kind === "text" && u.raw.startsWith("**")) {
28115
28449
  u.role = "caption";
28116
28450
  }
28117
28451
  units.push(u);
@@ -28222,7 +28556,7 @@ function convertParagraphToTable(block, orig, edited, ctx, skip) {
28222
28556
  const ti = ctx.tableInsert;
28223
28557
  if (!ti) return skip("\uBB38\uB2E8\u2192\uD45C \uBCC0\uD658 \uBD88\uAC00 \u2014 header \uC5D4\uD2B8\uB9AC(borderFills) \uD574\uC11D \uC2E4\uD328");
28224
28558
  const mapping = ctx.paraMap.get(orig.blockIdx);
28225
- if (!_optionalChain([mapping, 'optionalAccess', _497 => _497.para])) return skip("\uBB38\uB2E8 \uC18C\uC2A4\uB9F5 \uB9E4\uD551 \uC2E4\uD328 (\uBA38\uB9AC\uB9D0/\uAE00\uC0C1\uC790/\uCEA1\uC158 \uC601\uC5ED) \u2014 \uD45C \uBCC0\uD658 \uBD88\uAC00");
28559
+ if (!_optionalChain([mapping, 'optionalAccess', _505 => _505.para])) return skip("\uBB38\uB2E8 \uC18C\uC2A4\uB9F5 \uB9E4\uD551 \uC2E4\uD328 (\uBA38\uB9AC\uB9D0/\uAE00\uC0C1\uC790/\uCEA1\uC158 \uC601\uC5ED) \u2014 \uD45C \uBCC0\uD658 \uBD88\uAC00");
28226
28560
  const para2 = mapping.para;
28227
28561
  if (para2.kind !== "body") return skip("\uBCF8\uBB38 \uC678 \uC601\uC5ED(\uD45C \uC140/\uAE00\uC0C1\uC790) \uBB38\uB2E8\uC758 \uD45C \uBCC0\uD658\uC740 \uBBF8\uC9C0\uC6D0");
28228
28562
  const scan = ctx.scans[para2.sectionIndex];
@@ -28250,7 +28584,7 @@ function convertParagraphToTable(block, orig, edited, ctx, skip) {
28250
28584
  }
28251
28585
  function patchParagraphUnit(block, orig, edited, ctx, skip) {
28252
28586
  const mapping = ctx.paraMap.get(orig.blockIdx);
28253
- if (!_optionalChain([mapping, 'optionalAccess', _498 => _498.para])) return skip("\uBB38\uB2E8 \uC18C\uC2A4\uB9F5 \uB9E4\uD551 \uC2E4\uD328 (\uBA38\uB9AC\uB9D0/\uAE00\uC0C1\uC790/\uCEA1\uC158 \uC601\uC5ED\uC774\uAC70\uB098 \uD14D\uC2A4\uD2B8 \uBD88\uC77C\uCE58)");
28587
+ if (!_optionalChain([mapping, 'optionalAccess', _506 => _506.para])) return skip("\uBB38\uB2E8 \uC18C\uC2A4\uB9F5 \uB9E4\uD551 \uC2E4\uD328 (\uBA38\uB9AC\uB9D0/\uAE00\uC0C1\uC790/\uCEA1\uC158 \uC601\uC5ED\uC774\uAC70\uB098 \uD14D\uC2A4\uD2B8 \uBD88\uC77C\uCE58)");
28254
28588
  if (block.text && block.text.includes("\n")) {
28255
28589
  return skip("\uBB38\uB2E8 \uB0B4 \uAC15\uC81C \uC904\uBC14\uAFC8 \uD3EC\uD568 \u2014 \uC218\uC815 \uC2DC \uC904\uBC14\uAFC8 \uBCF4\uC874 \uBD88\uAC00\uB85C \uBBF8\uC9C0\uC6D0 (v1)");
28256
28590
  }
@@ -28281,7 +28615,7 @@ function patchParagraphUnit(block, orig, edited, ctx, skip) {
28281
28615
  if (sanitizeText(newPlain) !== newPlain) {
28282
28616
  return skip("\uACF5\uBC31 \uC815\uADDC\uD654 \uBD88\uC548\uC815 \uD14D\uC2A4\uD2B8 \u2014 \uD328\uCE58 \uC2DC \uC6D0\uBB38 \uBCF4\uC874 \uBD88\uAC00\uB85C \uBBF8\uC9C0\uC6D0");
28283
28617
  }
28284
- const splices = buildParagraphSplices(mapping.para, newPlain, _optionalChain([ctx, 'access', _499 => _499.scans, 'access', _500 => _500[mapping.para.sectionIndex], 'optionalAccess', _501 => _501.xml]));
28618
+ const splices = buildParagraphSplices(mapping.para, newPlain, _optionalChain([ctx, 'access', _507 => _507.scans, 'access', _508 => _508[mapping.para.sectionIndex], 'optionalAccess', _509 => _509.xml]));
28285
28619
  if (splices === null) return skip("\uBB38\uB2E8\uC5D0 \uD14D\uC2A4\uD2B8 \uB178\uB4DC\uB97C \uB9CC\uB4E4 \uC218 \uC5C6\uC74C");
28286
28620
  ctx.sectionSplices[mapping.para.sectionIndex].push(...splices);
28287
28621
  return 1;
@@ -28473,7 +28807,7 @@ var Surgeon = (_class7 = class {
28473
28807
  /** 디렉토리 트리에서 경로 해석 (형제 = L/R 이진 트리, 자식 = child) */
28474
28808
  findEntry(path) {
28475
28809
  const parts = path.replace(/^\//, "").split("/");
28476
- let scope = _nullishCoalesce(_optionalChain([this, 'access', _502 => _502.entries, 'access', _503 => _503[0], 'optionalAccess', _504 => _504.child]), () => ( -1));
28810
+ let scope = _nullishCoalesce(_optionalChain([this, 'access', _510 => _510.entries, 'access', _511 => _511[0], 'optionalAccess', _512 => _512.child]), () => ( -1));
28477
28811
  let current;
28478
28812
  for (const part of parts) {
28479
28813
  const search = (idx) => {
@@ -28681,7 +29015,7 @@ var Surgeon = (_class7 = class {
28681
29015
  // src/roundtrip/hwp5-patch.ts
28682
29016
  var require3 = _module.createRequire.call(void 0, _chunkGS7T56RPcjs.importMetaUrl);
28683
29017
  var CFB2 = require3("cfb");
28684
- var TAG_PARA_LINE_SEG = 69;
29018
+ var TAG_PARA_LINE_SEG2 = 69;
28685
29019
  function cid2(s) {
28686
29020
  return (s.charCodeAt(0) << 24 | s.charCodeAt(1) << 16 | s.charCodeAt(2) << 8 | s.charCodeAt(3)) >>> 0;
28687
29021
  }
@@ -28726,8 +29060,8 @@ function serializeRecords(recs, repl, inserts) {
28726
29060
  parts.push(header, data);
28727
29061
  };
28728
29062
  for (let i = 0; i < recs.length; i++) {
28729
- for (const ins of _nullishCoalesce(_optionalChain([inserts, 'optionalAccess', _505 => _505.get, 'call', _506 => _506(i)]), () => ( []))) push(ins.tagId, ins.level, ins.data);
28730
- push(recs[i].tagId, recs[i].level, _nullishCoalesce(_optionalChain([repl, 'optionalAccess', _507 => _507.get, 'call', _508 => _508(i)]), () => ( recs[i].data)));
29063
+ for (const ins of _nullishCoalesce(_optionalChain([inserts, 'optionalAccess', _513 => _513.get, 'call', _514 => _514(i)]), () => ( []))) push(ins.tagId, ins.level, ins.data);
29064
+ push(recs[i].tagId, recs[i].level, _nullishCoalesce(_optionalChain([repl, 'optionalAccess', _515 => _515.get, 'call', _516 => _516(i)]), () => ( recs[i].data)));
28731
29065
  }
28732
29066
  return Buffer.concat(parts);
28733
29067
  }
@@ -28762,7 +29096,7 @@ function scanSection(stream, sectionIndex, compressed) {
28762
29096
  textIdx = textIdx === -1 ? j : -2;
28763
29097
  appendParaText(state, records[j].data);
28764
29098
  } else if (t === TAG_CHAR_SHAPE && charShapeIdx === -1) charShapeIdx = j;
28765
- else if (t === TAG_PARA_LINE_SEG && lineSegIdx === -1) lineSegIdx = j;
29099
+ else if (t === TAG_PARA_LINE_SEG2 && lineSegIdx === -1) lineSegIdx = j;
28766
29100
  }
28767
29101
  let ctrlSeen = false, nonGso = false;
28768
29102
  for (let a = parent[i]; a >= 0; a = parent[a]) {
@@ -28845,7 +29179,7 @@ async function patchHwp(original, editedMarkdown, options) {
28845
29179
  return fail(`CFB \uCEE8\uD14C\uC774\uB108 \uD30C\uC2F1 \uC2E4\uD328: ${msg(err)}`);
28846
29180
  }
28847
29181
  const fhEntry = CFB2.find(cfb, "/FileHeader");
28848
- if (!_optionalChain([fhEntry, 'optionalAccess', _509 => _509.content])) return fail("FileHeader \uC2A4\uD2B8\uB9BC\uC774 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 HWP 5.x \uD30C\uC77C\uC774 \uC544\uB2D9\uB2C8\uB2E4");
29182
+ if (!_optionalChain([fhEntry, 'optionalAccess', _517 => _517.content])) return fail("FileHeader \uC2A4\uD2B8\uB9BC\uC774 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 HWP 5.x \uD30C\uC77C\uC774 \uC544\uB2D9\uB2C8\uB2E4");
28849
29183
  let flags;
28850
29184
  try {
28851
29185
  flags = parseFileHeader(Buffer.from(fhEntry.content)).flags;
@@ -28867,7 +29201,7 @@ async function patchHwp(original, editedMarkdown, options) {
28867
29201
  const scans = [];
28868
29202
  for (let i = 0; i < sectionPaths.length; i++) {
28869
29203
  const entry = CFB2.find(cfb, sectionPaths[i]);
28870
- if (!_optionalChain([entry, 'optionalAccess', _510 => _510.content])) return fail(`\uC139\uC158 \uC2A4\uD2B8\uB9BC \uC77D\uAE30 \uC2E4\uD328: ${sectionPaths[i]}`);
29204
+ if (!_optionalChain([entry, 'optionalAccess', _518 => _518.content])) return fail(`\uC139\uC158 \uC2A4\uD2B8\uB9BC \uC77D\uAE30 \uC2E4\uD328: ${sectionPaths[i]}`);
28871
29205
  let stream;
28872
29206
  try {
28873
29207
  stream = compressed ? decompressStream(Buffer.from(entry.content)) : Buffer.from(entry.content);
@@ -28918,7 +29252,7 @@ async function patchHwp(original, editedMarkdown, options) {
28918
29252
  }
28919
29253
  }
28920
29254
  let verification;
28921
- if (_optionalChain([options, 'optionalAccess', _511 => _511.verify]) !== false) {
29255
+ if (_optionalChain([options, 'optionalAccess', _519 => _519.verify]) !== false) {
28922
29256
  try {
28923
29257
  const reparsed = parseHwp5Document(Buffer.from(data));
28924
29258
  const normBr = (u) => ({ ...u, raw: u.raw.replace(/<br\s*\/?\s*>/gi, "\n") });
@@ -29008,7 +29342,7 @@ function tableContentScore(irTable, scanTable) {
29008
29342
  for (const [key, scanCell] of scanTable.cells) {
29009
29343
  const comma = key.indexOf(",");
29010
29344
  const r = Number(key.slice(0, comma)), c = Number(key.slice(comma + 1));
29011
- const irCell = _optionalChain([irTable, 'access', _512 => _512.cells, 'access', _513 => _513[r], 'optionalAccess', _514 => _514[c]]);
29345
+ const irCell = _optionalChain([irTable, 'access', _520 => _520.cells, 'access', _521 => _521[r], 'optionalAccess', _522 => _522[c]]);
29012
29346
  if (!irCell) continue;
29013
29347
  const a = normForMatch(scanCell.paras.map((p) => p.rawText).join(" "));
29014
29348
  const b = normForMatch(stripCellTokens(irCell.text));
@@ -29044,7 +29378,7 @@ function handleModified(orig, edited, ctx) {
29044
29378
  }
29045
29379
  function patchParagraph(block, orig, edited, ctx, skip) {
29046
29380
  const mapping = ctx.paraMap.get(orig.blockIdx);
29047
- if (!_optionalChain([mapping, 'optionalAccess', _515 => _515.para])) return skip("\uBB38\uB2E8 \uC18C\uC2A4\uB9F5 \uB9E4\uD551 \uC2E4\uD328 (\uBA38\uB9AC\uB9D0/\uAE00\uC0C1\uC790/\uCEA1\uC158 \uC601\uC5ED\uC774\uAC70\uB098 \uD14D\uC2A4\uD2B8 \uBD88\uC77C\uCE58)");
29381
+ if (!_optionalChain([mapping, 'optionalAccess', _523 => _523.para])) return skip("\uBB38\uB2E8 \uC18C\uC2A4\uB9F5 \uB9E4\uD551 \uC2E4\uD328 (\uBA38\uB9AC\uB9D0/\uAE00\uC0C1\uC790/\uCEA1\uC158 \uC601\uC5ED\uC774\uAC70\uB098 \uD14D\uC2A4\uD2B8 \uBD88\uC77C\uCE58)");
29048
29382
  const restoreBr = (s) => s.replace(/(?:\s*<br\s*\/?\s*>\s*)+/gi, "\n");
29049
29383
  let newPlain = restoreBr(textUnitToPlain(edited.raw, block));
29050
29384
  if (block.text && block.text.includes("\n") && !newPlain.includes("\n")) {
@@ -29243,7 +29577,7 @@ function applyCellEdit5(table2, scanTable, gridR, gridC, newLines, ctx, before,
29243
29577
  };
29244
29578
  const cell2 = scanTable.cells.get(`${gridR},${gridC}`);
29245
29579
  if (!cell2) return skip("\uC140 \uC88C\uD45C \uB9E4\uD551 \uC2E4\uD328 (\uBCD1\uD569 \uC601\uC5ED\uC758 \uBE48 \uCE78\uC774\uAC70\uB098 \uC88C\uD45C \uBD88\uC77C\uCE58)");
29246
- const irCell = _optionalChain([table2, 'access', _516 => _516.cells, 'access', _517 => _517[gridR], 'optionalAccess', _518 => _518[gridC]]);
29580
+ const irCell = _optionalChain([table2, 'access', _524 => _524.cells, 'access', _525 => _525[gridR], 'optionalAccess', _526 => _526[gridC]]);
29247
29581
  const scanJoined = cell2.paras.map((p) => p.rawText).filter((t) => normForMatch(t)).join("\n");
29248
29582
  if (irCell && normForMatch(scanJoined) !== normForMatch(stripCellTokens(irCell.text))) {
29249
29583
  if (normForMatch(irCell.text) !== "" || normForMatch(scanJoined) !== "") {
@@ -29650,11 +29984,11 @@ var RULES2 = {
29650
29984
  }
29651
29985
  };
29652
29986
  function redactText(text, options) {
29653
- const maskChar = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _519 => _519.maskChar]), () => ( "\u25CF"));
29987
+ const maskChar = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _527 => _527.maskChar]), () => ( "\u25CF"));
29654
29988
  if (maskChar.length !== 1 || /[0-9A-Za-z]/.test(maskChar)) {
29655
29989
  throw new Error(`maskChar\uB294 \uC601\uC22B\uC790\uAC00 \uC544\uB2CC 1\uAE00\uC790\uC5EC\uC57C \uD568: ${JSON.stringify(maskChar)}`);
29656
29990
  }
29657
- const enabled = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _520 => _520.rules]), () => ( DEFAULT_REDACT_RULES));
29991
+ const enabled = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _528 => _528.rules]), () => ( DEFAULT_REDACT_RULES));
29658
29992
  const hits = [];
29659
29993
  if (text === "" || enabled.length === 0) return { text, hits };
29660
29994
  const occupied = [];
@@ -29709,8 +30043,8 @@ function sameBreadcrumb(a, b) {
29709
30043
  return a.length === b.length && a.every((v, i) => v === b[i]);
29710
30044
  }
29711
30045
  function blocksToChunks(blocks, options) {
29712
- const granularity = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _521 => _521.granularity]), () => ( "section"));
29713
- const includeCells = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _522 => _522.includeTableCells]), () => ( false));
30046
+ const granularity = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _529 => _529.granularity]), () => ( "section"));
30047
+ const includeCells = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _530 => _530.includeTableCells]), () => ( false));
29714
30048
  const chunks = [];
29715
30049
  const headingStack = [];
29716
30050
  const listStack = [];
@@ -29724,12 +30058,12 @@ function blocksToChunks(blocks, options) {
29724
30058
  let run = null;
29725
30059
  const flushRun = () => {
29726
30060
  if (!run) return;
29727
- push("text", run.breadcrumb, _chunk46VU6YXFcjs.blocksToMarkdown.call(void 0, run.blocks), [run.start, run.end], run.page);
30061
+ push("text", run.breadcrumb, _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, run.blocks), [run.start, run.end], run.page);
29728
30062
  run = null;
29729
30063
  };
29730
30064
  for (let i = 0; i < blocks.length; i++) {
29731
30065
  const block = blocks[i];
29732
- const md2 = _chunk46VU6YXFcjs.blocksToMarkdown.call(void 0, [block]);
30066
+ const md2 = _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, [block]);
29733
30067
  if (!md2) continue;
29734
30068
  if (block.type === "heading") {
29735
30069
  flushRun();
@@ -29845,7 +30179,7 @@ var HwpxSession = (_class8 = class _HwpxSession {
29845
30179
  const block = st.blocks[blockIndex];
29846
30180
  if (!block) return void 0;
29847
30181
  if (block.type === "paragraph" || block.type === "heading") {
29848
- const para2 = _optionalChain([st, 'access', _523 => _523.paraMap, 'access', _524 => _524.get, 'call', _525 => _525(blockIndex), 'optionalAccess', _526 => _526.para]);
30182
+ const para2 = _optionalChain([st, 'access', _531 => _531.paraMap, 'access', _532 => _532.get, 'call', _533 => _533(blockIndex), 'optionalAccess', _534 => _534.para]);
29849
30183
  if (!para2) return void 0;
29850
30184
  return { kind: "paragraph", sectionIndex: para2.sectionIndex, xmlStart: para2.start };
29851
30185
  }
@@ -29870,7 +30204,7 @@ var HwpxSession = (_class8 = class _HwpxSession {
29870
30204
  if (block.text && block.text.includes("\n")) {
29871
30205
  return { capability: "locked", reason: "\uBB38\uB2E8 \uB0B4 \uAC15\uC81C \uC904\uBC14\uAFC8 \uD3EC\uD568 \u2014 \uC218\uC815 \uC2DC \uC904\uBC14\uAFC8 \uBCF4\uC874 \uBD88\uAC00\uB85C \uBBF8\uC9C0\uC6D0 (v1)" };
29872
30206
  }
29873
- if (!_optionalChain([st, 'access', _527 => _527.paraMap, 'access', _528 => _528.get, 'call', _529 => _529(blockIndex), 'optionalAccess', _530 => _530.para])) {
30207
+ if (!_optionalChain([st, 'access', _535 => _535.paraMap, 'access', _536 => _536.get, 'call', _537 => _537(blockIndex), 'optionalAccess', _538 => _538.para])) {
29874
30208
  return { capability: "locked", reason: "\uBB38\uB2E8 \uC18C\uC2A4\uB9F5 \uB9E4\uD551 \uC2E4\uD328 (\uBA38\uB9AC\uB9D0/\uAE00\uC0C1\uC790/\uCEA1\uC158 \uC601\uC5ED\uC774\uAC70\uB098 \uD14D\uC2A4\uD2B8 \uBD88\uC77C\uCE58)" };
29875
30209
  }
29876
30210
  return { capability: "text" };
@@ -29936,7 +30270,7 @@ var HwpxSession = (_class8 = class _HwpxSession {
29936
30270
  continue;
29937
30271
  }
29938
30272
  if (block.type === "table" && block.table) {
29939
- if (!_optionalChain([edit, 'access', _531 => _531.cells, 'optionalAccess', _532 => _532.length])) {
30273
+ if (!_optionalChain([edit, 'access', _539 => _539.cells, 'optionalAccess', _540 => _540.length])) {
29940
30274
  skipped.push({ reason: "\uD45C \uBE14\uB85D\uC5D0\uB294 cells \uD3B8\uC9D1\uB9CC \uC9C0\uC6D0", before: summarize(_nullishCoalesce(block.table.caption, () => ( "(\uD45C)"))) });
29941
30275
  continue;
29942
30276
  }
@@ -29956,7 +30290,7 @@ var HwpxSession = (_class8 = class _HwpxSession {
29956
30290
  skipped.push({ reason: "\uAC19\uC740 \uC140\uC5D0 \uC911\uBCF5 \uD3B8\uC9D1 \u2014 \uBA3C\uC800 \uC801\uC6A9\uB41C \uD3B8\uC9D1 \uC720\uC9C0", after: summarize(cellEdit.text) });
29957
30291
  continue;
29958
30292
  }
29959
- const irCell = _optionalChain([block, 'access', _533 => _533.table, 'access', _534 => _534.cells, 'access', _535 => _535[cellEdit.row], 'optionalAccess', _536 => _536[cellEdit.col]]);
30293
+ const irCell = _optionalChain([block, 'access', _541 => _541.table, 'access', _542 => _542.cells, 'access', _543 => _543[cellEdit.row], 'optionalAccess', _544 => _544[cellEdit.col]]);
29960
30294
  if (!irCell) {
29961
30295
  skipped.push({ reason: `\uC140 \uC88C\uD45C \uBC94\uC704 \uBC16: ${cellEdit.row},${cellEdit.col}`, after: summarize(cellEdit.text) });
29962
30296
  continue;
@@ -30012,7 +30346,7 @@ var HwpxSession = (_class8 = class _HwpxSession {
30012
30346
  }
30013
30347
  if (replacements.size === 0) {
30014
30348
  let changes2;
30015
- if (_optionalChain([options, 'optionalAccess', _537 => _537.verify]) !== false) {
30349
+ if (_optionalChain([options, 'optionalAccess', _545 => _545.verify]) !== false) {
30016
30350
  const units = splitMarkdownUnits(st.markdown);
30017
30351
  changes2 = diffUnitLists(units, units);
30018
30352
  }
@@ -30033,7 +30367,7 @@ var HwpxSession = (_class8 = class _HwpxSession {
30033
30367
  }
30034
30368
  this.state = newState;
30035
30369
  let changes;
30036
- if (_optionalChain([options, 'optionalAccess', _538 => _538.verify]) !== false) {
30370
+ if (_optionalChain([options, 'optionalAccess', _546 => _546.verify]) !== false) {
30037
30371
  changes = diffUnitLists(splitMarkdownUnits(beforeMarkdown), splitMarkdownUnits(newState.markdown));
30038
30372
  }
30039
30373
  return { success: true, data: new Uint8Array(data), applied, skipped, changes };
@@ -30053,7 +30387,7 @@ var HwpxSession = (_class8 = class _HwpxSession {
30053
30387
  return skip("\uBB38\uB2E8 \uB0B4 \uAC15\uC81C \uC904\uBC14\uAFC8 \uD3EC\uD568 \u2014 \uC218\uC815 \uC2DC \uC904\uBC14\uAFC8 \uBCF4\uC874 \uBD88\uAC00\uB85C \uBBF8\uC9C0\uC6D0 (v1)");
30054
30388
  }
30055
30389
  const mapping = st.paraMap.get(blockIndex);
30056
- if (!_optionalChain([mapping, 'optionalAccess', _539 => _539.para])) {
30390
+ if (!_optionalChain([mapping, 'optionalAccess', _547 => _547.para])) {
30057
30391
  return skip("\uBB38\uB2E8 \uC18C\uC2A4\uB9F5 \uB9E4\uD551 \uC2E4\uD328 (\uBA38\uB9AC\uB9D0/\uAE00\uC0C1\uC790/\uCEA1\uC158 \uC601\uC5ED\uC774\uAC70\uB098 \uD14D\uC2A4\uD2B8 \uBD88\uC77C\uCE58)");
30058
30392
  }
30059
30393
  let newPlain = newTextRaw.split("\n").map((l) => l.trim()).filter(Boolean).join(" ");
@@ -30073,14 +30407,14 @@ var HwpxSession = (_class8 = class _HwpxSession {
30073
30407
  if (sanitizeText(newPlain) !== newPlain) {
30074
30408
  return skip("\uACF5\uBC31 \uC815\uADDC\uD654 \uBD88\uC548\uC815 \uD14D\uC2A4\uD2B8 \u2014 \uD328\uCE58 \uC2DC \uC6D0\uBB38 \uBCF4\uC874 \uBD88\uAC00\uB85C \uBBF8\uC9C0\uC6D0");
30075
30409
  }
30076
- const splices = buildParagraphSplices(mapping.para, newPlain, _optionalChain([st, 'access', _540 => _540.scans, 'access', _541 => _541[mapping.para.sectionIndex], 'optionalAccess', _542 => _542.xml]));
30410
+ const splices = buildParagraphSplices(mapping.para, newPlain, _optionalChain([st, 'access', _548 => _548.scans, 'access', _549 => _549[mapping.para.sectionIndex], 'optionalAccess', _550 => _550.xml]));
30077
30411
  if (splices === null) return skip("\uBB38\uB2E8\uC5D0 \uD14D\uC2A4\uD2B8 \uB178\uB4DC\uB97C \uB9CC\uB4E4 \uC218 \uC5C6\uC74C");
30078
30412
  sectionSplices[mapping.para.sectionIndex].push(...splices);
30079
30413
  return 1;
30080
30414
  }
30081
30415
  }, _class8);
30082
30416
  function cellStaticCheck(table2, scanTable, r, c) {
30083
- const irCell = _optionalChain([table2, 'access', _543 => _543.cells, 'access', _544 => _544[r], 'optionalAccess', _545 => _545[c]]);
30417
+ const irCell = _optionalChain([table2, 'access', _551 => _551.cells, 'access', _552 => _552[r], 'optionalAccess', _553 => _553[c]]);
30084
30418
  if (!irCell) return { editable: false, reason: "\uC140 \uC88C\uD45C \uBC94\uC704 \uBC16" };
30085
30419
  const cell2 = scanTable.cellByAnchor.get(`${r},${c}`);
30086
30420
  if (!cell2) return { editable: false, reason: "\uBCD1\uD569 \uC601\uC5ED\uC758 \uBE48 \uCE78\uC774\uAC70\uB098 \uC88C\uD45C \uBD88\uC77C\uCE58" };
@@ -30164,11 +30498,11 @@ var md = new (0, _markdownit2.default)({
30164
30498
  breaks: false
30165
30499
  });
30166
30500
  function renderHtml(markdown, options) {
30167
- const preset = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _546 => _546.preset]), () => ( "default"));
30168
- const css = PRESETS[preset] + (_nullishCoalesce(_optionalChain([options, 'optionalAccess', _547 => _547.extraCss]), () => ( "")));
30501
+ const preset = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _554 => _554.preset]), () => ( "default"));
30502
+ const css = PRESETS[preset] + (_nullishCoalesce(_optionalChain([options, 'optionalAccess', _555 => _555.extraCss]), () => ( "")));
30169
30503
  const body = md.render(markdown);
30170
- const watermark = _optionalChain([options, 'optionalAccess', _548 => _548.watermark]) ? `<div class="watermark">${escapeHtml(options.watermark)}</div>` : "";
30171
- const watermarkCss = _optionalChain([options, 'optionalAccess', _549 => _549.watermark]) ? `
30504
+ const watermark = _optionalChain([options, 'optionalAccess', _556 => _556.watermark]) ? `<div class="watermark">${escapeHtml(options.watermark)}</div>` : "";
30505
+ const watermarkCss = _optionalChain([options, 'optionalAccess', _557 => _557.watermark]) ? `
30172
30506
  .watermark {
30173
30507
  position: fixed;
30174
30508
  top: 50%; left: 50%;
@@ -30199,13 +30533,13 @@ async function htmlToPdf(html, options) {
30199
30533
  try {
30200
30534
  puppeteer = await Promise.resolve().then(() => _interopRequireWildcard(require("puppeteer-core")));
30201
30535
  } catch (e37) {
30202
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(
30536
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(
30203
30537
  "PDF \uC0DD\uC131\uC5D0 puppeteer-core\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4. \uC124\uCE58: npm install puppeteer-core"
30204
30538
  );
30205
30539
  }
30206
30540
  const executablePath = _nullishCoalesce(process.env.PUPPETEER_EXECUTABLE_PATH, () => ( findChromiumPath()));
30207
30541
  if (!executablePath) {
30208
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)(
30542
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)(
30209
30543
  "Chromium \uC2E4\uD589 \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. PUPPETEER_EXECUTABLE_PATH \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694."
30210
30544
  );
30211
30545
  }
@@ -30217,10 +30551,10 @@ async function htmlToPdf(html, options) {
30217
30551
  try {
30218
30552
  const page = await browser.newPage();
30219
30553
  await page.setContent(html, { waitUntil: "networkidle0" });
30220
- const margin = _optionalChain([options, 'optionalAccess', _550 => _550.margin]);
30554
+ const margin = _optionalChain([options, 'optionalAccess', _558 => _558.margin]);
30221
30555
  const pdf = await page.pdf({
30222
- format: _nullishCoalesce(_optionalChain([options, 'optionalAccess', _551 => _551.pageSize]), () => ( "A4")),
30223
- landscape: _optionalChain([options, 'optionalAccess', _552 => _552.orientation]) === "landscape",
30556
+ format: _nullishCoalesce(_optionalChain([options, 'optionalAccess', _559 => _559.pageSize]), () => ( "A4")),
30557
+ landscape: _optionalChain([options, 'optionalAccess', _560 => _560.orientation]) === "landscape",
30224
30558
  printBackground: true,
30225
30559
  margin: margin ? {
30226
30560
  top: toCss(margin.top),
@@ -30228,9 +30562,9 @@ async function htmlToPdf(html, options) {
30228
30562
  bottom: toCss(margin.bottom),
30229
30563
  left: toCss(margin.left)
30230
30564
  } : void 0,
30231
- displayHeaderFooter: !!(_optionalChain([options, 'optionalAccess', _553 => _553.header]) || _optionalChain([options, 'optionalAccess', _554 => _554.footer])),
30232
- headerTemplate: _nullishCoalesce(_optionalChain([options, 'optionalAccess', _555 => _555.header]), () => ( "<div></div>")),
30233
- footerTemplate: _nullishCoalesce(_optionalChain([options, 'optionalAccess', _556 => _556.footer]), () => ( '<div style="font-size:8pt;width:100%;text-align:center;color:#777;"><span class="pageNumber"></span>/<span class="totalPages"></span></div>'))
30565
+ displayHeaderFooter: !!(_optionalChain([options, 'optionalAccess', _561 => _561.header]) || _optionalChain([options, 'optionalAccess', _562 => _562.footer])),
30566
+ headerTemplate: _nullishCoalesce(_optionalChain([options, 'optionalAccess', _563 => _563.header]), () => ( "<div></div>")),
30567
+ footerTemplate: _nullishCoalesce(_optionalChain([options, 'optionalAccess', _564 => _564.footer]), () => ( '<div style="font-size:8pt;width:100%;text-align:center;color:#777;"><span class="pageNumber"></span>/<span class="totalPages"></span></div>'))
30234
30568
  });
30235
30569
  return Buffer.from(pdf);
30236
30570
  } finally {
@@ -30264,7 +30598,7 @@ async function markdownToPdf(markdown, options) {
30264
30598
  return htmlToPdf(html, options);
30265
30599
  }
30266
30600
  async function blocksToPdf(blocks, options) {
30267
- const markdown = _chunk46VU6YXFcjs.blocksToMarkdown.call(void 0, blocks);
30601
+ const markdown = _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, blocks);
30268
30602
  return markdownToPdf(markdown, options);
30269
30603
  }
30270
30604
 
@@ -30443,7 +30777,7 @@ function reflowPara(p, doc, styles, areaW, startV, mode) {
30443
30777
  }
30444
30778
  const wrapAttr = _nullishCoalesce(o.el.getAttribute("textWrap"), () => ( ""));
30445
30779
  if (wrapAttr === "BEHIND_TEXT" || wrapAttr === "IN_FRONT_OF_TEXT") continue;
30446
- const vertRel = _nullishCoalesce(_optionalChain([pos, 'optionalAccess', _557 => _557.getAttribute, 'call', _558 => _558("vertRelTo")]), () => ( "PARA"));
30780
+ const vertRel = _nullishCoalesce(_optionalChain([pos, 'optionalAccess', _565 => _565.getAttribute, 'call', _566 => _566("vertRelTo")]), () => ( "PARA"));
30447
30781
  if (vertRel === "PAGE" || vertRel === "PAPER") continue;
30448
30782
  const vo = Math.max(0, num2(pos, "vertOffset"));
30449
30783
  if (wrapAttr === "TOP_AND_BOTTOM") {
@@ -30504,7 +30838,7 @@ function reflowBlockFlow(container, doc, styles, areaW, mode, counter, bodyH) {
30504
30838
  if (ln(p) !== "p") continue;
30505
30839
  reflowTablesIn(p, doc, styles, mode, counter);
30506
30840
  const g = styles.paraGeom.get(_nullishCoalesce(p.getAttribute("paraPrIDRef"), () => ( "")));
30507
- const startV = cursorV + prevSpaceAfter + (_nullishCoalesce(_optionalChain([g, 'optionalAccess', _559 => _559.spaceBefore]), () => ( 0)));
30841
+ const startV = cursorV + prevSpaceAfter + (_nullishCoalesce(_optionalChain([g, 'optionalAccess', _567 => _567.spaceBefore]), () => ( 0)));
30508
30842
  const res = reflowPara(p, doc, styles, areaW, startV, mode);
30509
30843
  if (!res) {
30510
30844
  const lsa = findChildByLocalName(p, "linesegarray");
@@ -30517,7 +30851,7 @@ function reflowBlockFlow(container, doc, styles, areaW, mode, counter, bodyH) {
30517
30851
  }
30518
30852
  if (Number.isFinite(bottom)) {
30519
30853
  cursorV = bottom;
30520
- prevSpaceAfter = _nullishCoalesce(_optionalChain([g, 'optionalAccess', _560 => _560.spaceAfter]), () => ( 0));
30854
+ prevSpaceAfter = _nullishCoalesce(_optionalChain([g, 'optionalAccess', _568 => _568.spaceAfter]), () => ( 0));
30521
30855
  }
30522
30856
  }
30523
30857
  continue;
@@ -30623,7 +30957,7 @@ function buildPara(p) {
30623
30957
  const pos = findChildByLocalName(ch, "pos");
30624
30958
  const w = num3(sz, "width") || num3(findChildByLocalName(ch, "curSz"), "width") || num3(findChildByLocalName(ch, "orgSz"), "width");
30625
30959
  const h = num3(sz, "height") || num3(findChildByLocalName(ch, "curSz"), "height") || num3(findChildByLocalName(ch, "orgSz"), "height");
30626
- const inline = _optionalChain([pos, 'optionalAccess', _561 => _561.getAttribute, 'call', _562 => _562("treatAsChar")]) === "1";
30960
+ const inline = _optionalChain([pos, 'optionalAccess', _569 => _569.getAttribute, 'call', _570 => _570("treatAsChar")]) === "1";
30627
30961
  const om = inline && cn === "tbl" ? findChildByLocalName(ch, "outMargin") : null;
30628
30962
  objs.push({
30629
30963
  el: ch,
@@ -30883,15 +31217,15 @@ function drawShape(o, x, y, ctx, depth) {
30883
31217
  const sx = ow > 0 ? w / ow : 1;
30884
31218
  const sy = oh > 0 ? h / oh : 1;
30885
31219
  const lineShape = findChildByLocalName(el, "lineShape");
30886
- const lstyle = _nullishCoalesce(_optionalChain([lineShape, 'optionalAccess', _563 => _563.getAttribute, 'call', _564 => _564("style")]), () => ( "SOLID"));
30887
- const strokeCol = _optionalChain([lineShape, 'optionalAccess', _565 => _565.getAttribute, 'call', _566 => _566("color")]) || "#000000";
31220
+ const lstyle = _nullishCoalesce(_optionalChain([lineShape, 'optionalAccess', _571 => _571.getAttribute, 'call', _572 => _572("style")]), () => ( "SOLID"));
31221
+ const strokeCol = _optionalChain([lineShape, 'optionalAccess', _573 => _573.getAttribute, 'call', _574 => _574("color")]) || "#000000";
30888
31222
  const hasStroke = lstyle !== "NONE";
30889
31223
  const strokeW = hasStroke ? shapeStrokePt(lineShape ? num3(lineShape, "width") : 33) : 0;
30890
31224
  const dash = /DASH|DOT/.test(lstyle) ? ` stroke-dasharray="${lstyle.includes("DOT") ? "1,1.5" : "3,1.5"}"` : "";
30891
31225
  const strokeAttr = hasStroke ? ` stroke="${escapeXml3(strokeCol)}" stroke-width="${strokeW.toFixed(2)}"${dash}` : "";
30892
31226
  const fillBrush = findChildByLocalName(el, "fillBrush");
30893
31227
  const winBrush = fillBrush ? findChildByLocalName(fillBrush, "winBrush") : null;
30894
- const face = _optionalChain([winBrush, 'optionalAccess', _567 => _567.getAttribute, 'call', _568 => _568("faceColor")]);
31228
+ const face = _optionalChain([winBrush, 'optionalAccess', _575 => _575.getAttribute, 'call', _576 => _576("faceColor")]);
30895
31229
  const fill = face && face.toLowerCase() !== "none" ? face : "none";
30896
31230
  const fillAttr = ` fill="${fill === "none" ? "none" : escapeXml3(fill)}"`;
30897
31231
  if (o.tag === "rect") {
@@ -30918,14 +31252,14 @@ function drawShape(o, x, y, ctx, depth) {
30918
31252
  }
30919
31253
  function cellContentExtent(cell2, memo) {
30920
31254
  if (!cell2.sub) return 0;
30921
- const hit = _optionalChain([memo, 'optionalAccess', _569 => _569.cell, 'access', _570 => _570.get, 'call', _571 => _571(cell2.el)]);
31255
+ const hit = _optionalChain([memo, 'optionalAccess', _577 => _577.cell, 'access', _578 => _578.get, 'call', _579 => _579(cell2.el)]);
30922
31256
  if (hit !== void 0) return hit;
30923
31257
  let ext = 0;
30924
31258
  for (const p of elements2(cell2.sub)) {
30925
31259
  if (ln2(p) !== "p") continue;
30926
31260
  const m = buildPara(p);
30927
31261
  for (const s of m.segs) ext = Math.max(ext, s.vertpos + s.textheight);
30928
- const baseV = _nullishCoalesce(_optionalChain([m, 'access', _572 => _572.segs, 'access', _573 => _573[0], 'optionalAccess', _574 => _574.vertpos]), () => ( 0));
31262
+ const baseV = _nullishCoalesce(_optionalChain([m, 'access', _580 => _580.segs, 'access', _581 => _581[0], 'optionalAccess', _582 => _582.vertpos]), () => ( 0));
30929
31263
  for (const o of m.objs) {
30930
31264
  if (o.inline) {
30931
31265
  const h = o.tag === "tbl" ? Math.max(o.height, measureTableHeight(o.el, memo)) : o.height;
@@ -30933,14 +31267,14 @@ function cellContentExtent(cell2, memo) {
30933
31267
  continue;
30934
31268
  }
30935
31269
  const pos = findChildByLocalName(o.el, "pos");
30936
- if ((_nullishCoalesce(_optionalChain([pos, 'optionalAccess', _575 => _575.getAttribute, 'call', _576 => _576("vertRelTo")]), () => ( "PARA"))) !== "PARA") continue;
31270
+ if ((_nullishCoalesce(_optionalChain([pos, 'optionalAccess', _583 => _583.getAttribute, 'call', _584 => _584("vertRelTo")]), () => ( "PARA"))) !== "PARA") continue;
30937
31271
  const om = findChildByLocalName(o.el, "outMargin");
30938
31272
  const pushed = baseV - (num3(om, "top") + o.height + num3(om, "bottom"));
30939
31273
  const anchor = pushed >= -100 ? pushed : baseV;
30940
31274
  ext = Math.max(ext, anchor + num3(om, "top") + num3(pos, "vertOffset") + o.height);
30941
31275
  }
30942
31276
  }
30943
- _optionalChain([memo, 'optionalAccess', _577 => _577.cell, 'access', _578 => _578.set, 'call', _579 => _579(cell2.el, ext)]);
31277
+ _optionalChain([memo, 'optionalAccess', _585 => _585.cell, 'access', _586 => _586.set, 'call', _587 => _587(cell2.el, ext)]);
30944
31278
  return ext;
30945
31279
  }
30946
31280
  function edgeLine(x1, y1, x2, y2, e) {
@@ -30982,7 +31316,7 @@ function collectCells(tbl2) {
30982
31316
  return cells;
30983
31317
  }
30984
31318
  function measureTableHeight(tbl2, memo) {
30985
- const hit = _optionalChain([memo, 'optionalAccess', _580 => _580.table, 'access', _581 => _581.get, 'call', _582 => _582(tbl2)]);
31319
+ const hit = _optionalChain([memo, 'optionalAccess', _588 => _588.table, 'access', _589 => _589.get, 'call', _590 => _590(tbl2)]);
30986
31320
  if (hit !== void 0) return hit;
30987
31321
  const cells = collectCells(tbl2);
30988
31322
  if (cells.length === 0 || cells.length > 4096) return 0;
@@ -30993,7 +31327,7 @@ function measureTableHeight(tbl2, memo) {
30993
31327
  );
30994
31328
  let sum = 0;
30995
31329
  for (const h of rowH) sum += h;
30996
- _optionalChain([memo, 'optionalAccess', _583 => _583.table, 'access', _584 => _584.set, 'call', _585 => _585(tbl2, sum)]);
31330
+ _optionalChain([memo, 'optionalAccess', _591 => _591.table, 'access', _592 => _592.set, 'call', _593 => _593(tbl2, sum)]);
30997
31331
  return sum;
30998
31332
  }
30999
31333
  function drawTable(tbl2, tx, ty, ctx, depth) {
@@ -31024,7 +31358,7 @@ function drawTable(tbl2, tx, ty, ctx, depth) {
31024
31358
  }));
31025
31359
  for (const g of geom) {
31026
31360
  const bf = g.c.bfId != null ? ctx.styles.borderFill.get(g.c.bfId) : void 0;
31027
- if (_optionalChain([bf, 'optionalAccess', _586 => _586.fill])) emit(ctx, `<rect x="${pt(g.x)}" y="${pt(g.y)}" width="${pt(g.w)}" height="${pt(g.h)}" fill="${escapeXml3(bf.fill)}"/>`);
31361
+ if (_optionalChain([bf, 'optionalAccess', _594 => _594.fill])) emit(ctx, `<rect x="${pt(g.x)}" y="${pt(g.y)}" width="${pt(g.w)}" height="${pt(g.h)}" fill="${escapeXml3(bf.fill)}"/>`);
31028
31362
  }
31029
31363
  for (const g of geom) {
31030
31364
  const { c } = g;
@@ -31062,7 +31396,7 @@ function drawPic(pic, x, y, ctx) {
31062
31396
  const sz = findChildByLocalName(pic, "sz");
31063
31397
  const w = num3(sz, "width", 5669), h = num3(sz, "height", 5669);
31064
31398
  const img = findFirst(pic, "img");
31065
- const ref = _optionalChain([img, 'optionalAccess', _587 => _587.getAttribute, 'call', _588 => _588("binaryItemIDRef")]);
31399
+ const ref = _optionalChain([img, 'optionalAccess', _595 => _595.getAttribute, 'call', _596 => _596("binaryItemIDRef")]);
31066
31400
  const loaded = ref != null ? ctx.images.get(ref) : void 0;
31067
31401
  if (!loaded) {
31068
31402
  emit(ctx, `<rect x="${pt(x)}" y="${pt(y)}" width="${pt(w)}" height="${pt(h)}" fill="#eee" stroke="#c00" stroke-width="0.5"/>`);
@@ -31102,7 +31436,7 @@ function readSectionGeom(root) {
31102
31436
  const pagePr = findFirst(root, "pagePr");
31103
31437
  const margin = pagePr ? findChildByLocalName(pagePr, "margin") : null;
31104
31438
  let PW = num3(pagePr, "width", 59528), PH = num3(pagePr, "height", 84188);
31105
- if (_optionalChain([pagePr, 'optionalAccess', _589 => _589.getAttribute, 'call', _590 => _590("landscape")]) === "NARROWLY" && PW < PH) {
31439
+ if (_optionalChain([pagePr, 'optionalAccess', _597 => _597.getAttribute, 'call', _598 => _598("landscape")]) === "NARROWLY" && PW < PH) {
31106
31440
  const t = PW;
31107
31441
  PW = PH;
31108
31442
  PH = t;
@@ -31160,17 +31494,17 @@ function renderSectionToPages(root, geom, ctxBase, doReflow, reflowMode) {
31160
31494
  return { pages: ctx.pages, pageH };
31161
31495
  }
31162
31496
  async function renderHwpxToSvg(input, options) {
31163
- const maxImg = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _591 => _591.maxImageBytes]), () => ( 40 * 1024 * 1024));
31497
+ const maxImg = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _599 => _599.maxImageBytes]), () => ( 40 * 1024 * 1024));
31164
31498
  const ab = input instanceof Uint8Array ? input.buffer.slice(input.byteOffset, input.byteOffset + input.byteLength) : input;
31165
- _chunkDZBMQC2Ncjs.precheckZipSize.call(void 0, ab, MAX_DECOMPRESS_SIZE, MAX_ZIP_ENTRIES);
31499
+ _chunkJ7DBL77Bcjs.precheckZipSize.call(void 0, ab, MAX_DECOMPRESS_SIZE, MAX_ZIP_ENTRIES);
31166
31500
  let zip;
31167
31501
  try {
31168
31502
  zip = await _jszip2.default.loadAsync(input);
31169
31503
  } catch (e38) {
31170
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("HWPX(ZIP) \uD615\uC2DD\uC774 \uC544\uB2D9\uB2C8\uB2E4 \u2014 \uB80C\uB354\uB294 HWPX\uB9CC \uC9C0\uC6D0");
31504
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("HWPX(ZIP) \uD615\uC2DD\uC774 \uC544\uB2D9\uB2C8\uB2E4 \u2014 \uB80C\uB354\uB294 HWPX\uB9CC \uC9C0\uC6D0");
31171
31505
  }
31172
31506
  const secFiles = zip.file(/Contents\/section\d+\.xml$/i).sort((a, b) => a.name.localeCompare(b.name));
31173
- if (secFiles.length === 0) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("Contents/section0.xml \uC5C6\uC74C \u2014 HWPX\uAC00 \uC544\uB2C8\uAC70\uB098 \uC190\uC0C1\uB428");
31507
+ if (secFiles.length === 0) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("Contents/section0.xml \uC5C6\uC74C \u2014 HWPX\uAC00 \uC544\uB2C8\uAC70\uB098 \uC190\uC0C1\uB428");
31174
31508
  const warnings = [];
31175
31509
  const headFile = _nullishCoalesce(zip.file("Contents/header.xml"), () => ( zip.file("Contents/head.xml")));
31176
31510
  const styles = headFile ? parseRenderStyles(await headFile.async("string")) : { charPr: /* @__PURE__ */ new Map(), paraAlign: /* @__PURE__ */ new Map(), paraGeom: /* @__PURE__ */ new Map(), borderFill: /* @__PURE__ */ new Map() };
@@ -31178,7 +31512,7 @@ async function renderHwpxToSvg(input, options) {
31178
31512
  const secXmls = [];
31179
31513
  for (const f of secFiles) {
31180
31514
  const xml = await f.async("string");
31181
- if (xml.length > MAX_DECOMPRESS_SIZE) throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uC139\uC158 XML\uC774 \uD5C8\uC6A9 \uD06C\uAE30\uB97C \uCD08\uACFC");
31515
+ if (xml.length > MAX_DECOMPRESS_SIZE) throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uC139\uC158 XML\uC774 \uD5C8\uC6A9 \uD06C\uAE30\uB97C \uCD08\uACFC");
31182
31516
  secXmls.push(xml);
31183
31517
  }
31184
31518
  const binmap = /* @__PURE__ */ new Map();
@@ -31202,7 +31536,7 @@ async function renderHwpxToSvg(input, options) {
31202
31536
  let href = binmap.get(ref);
31203
31537
  if (!href) {
31204
31538
  const cand = zip.file(new RegExp(`BinData/.*${ref.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}`, "i"))[0];
31205
- href = _optionalChain([cand, 'optionalAccess', _592 => _592.name]);
31539
+ href = _optionalChain([cand, 'optionalAccess', _600 => _600.name]);
31206
31540
  }
31207
31541
  if (!href) continue;
31208
31542
  const f = _nullishCoalesce(zip.file(href), () => ( zip.file("Contents/" + href)));
@@ -31223,7 +31557,7 @@ async function renderHwpxToSvg(input, options) {
31223
31557
  styles,
31224
31558
  images,
31225
31559
  defs: [],
31226
- highlights: (_nullishCoalesce(_optionalChain([options, 'optionalAccess', _593 => _593.highlights]), () => ( []))).map((s) => s.trim().toLowerCase()).filter((s) => s.length > 0),
31560
+ highlights: (_nullishCoalesce(_optionalChain([options, 'optionalAccess', _601 => _601.highlights]), () => ( []))).map((s) => s.trim().toLowerCase()).filter((s) => s.length > 0),
31227
31561
  warnings,
31228
31562
  warned: /* @__PURE__ */ new Set(),
31229
31563
  stats: { texts: 0, images: 0, tables: 0 },
@@ -31234,7 +31568,7 @@ async function renderHwpxToSvg(input, options) {
31234
31568
  for (let si = 0; si < secXmls.length; si++) {
31235
31569
  const secXml = secXmls[si];
31236
31570
  const hasCache = /<(?:[A-Za-z][\w.-]*:)?linesegarray[\s/>]/.test(secXml);
31237
- if (!hasCache && !_optionalChain([options, 'optionalAccess', _594 => _594.reflow])) {
31571
+ if (!hasCache && !_optionalChain([options, 'optionalAccess', _602 => _602.reflow])) {
31238
31572
  noCacheSkipped = true;
31239
31573
  warnings.push(`\uAD6C\uC5ED ${si}: \uC870\uD310 \uCE90\uC2DC \uC5C6\uC74C \u2014 reflow \uC635\uC158 \uD544\uC694, \uC0DD\uB7B5`);
31240
31574
  continue;
@@ -31246,14 +31580,14 @@ async function renderHwpxToSvg(input, options) {
31246
31580
  continue;
31247
31581
  }
31248
31582
  const geom = readSectionGeom(root);
31249
- const { pages, pageH } = renderSectionToPages(root, geom, ctxBase, !!_optionalChain([options, 'optionalAccess', _595 => _595.reflow]), _nullishCoalesce(_optionalChain([options, 'optionalAccess', _596 => _596.reflowMode]), () => ( "keep")));
31583
+ const { pages, pageH } = renderSectionToPages(root, geom, ctxBase, !!_optionalChain([options, 'optionalAccess', _603 => _603.reflow]), _nullishCoalesce(_optionalChain([options, 'optionalAccess', _604 => _604.reflowMode]), () => ( "keep")));
31250
31584
  rendered.push({ pages, PW: geom.PW, pageH, clipId: `pgclip${si}` });
31251
31585
  }
31252
31586
  if (rendered.length === 0) {
31253
31587
  if (noCacheSkipped) {
31254
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uC870\uD310 \uCE90\uC2DC(linesegarray) \uC5C6\uC74C \u2014 \uD55C\uCEF4\uC5D0\uC11C \uC800\uC7A5\uD55C HWPX\uB9CC \uB80C\uB354 \uAC00\uB2A5 (reflow \uC635\uC158\uC73C\uB85C \uD569\uC131 \uB80C\uB354 \uAC00\uB2A5)");
31588
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uC870\uD310 \uCE90\uC2DC(linesegarray) \uC5C6\uC74C \u2014 \uD55C\uCEF4\uC5D0\uC11C \uC800\uC7A5\uD55C HWPX\uB9CC \uB80C\uB354 \uAC00\uB2A5 (reflow \uC635\uC158\uC73C\uB85C \uD569\uC131 \uB80C\uB354 \uAC00\uB2A5)");
31255
31589
  }
31256
- throw new (0, _chunkDZBMQC2Ncjs.KordocError)("\uB80C\uB354\uD560 \uAD6C\uC5ED\uC774 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 HWPX\uAC00 \uC190\uC0C1\uB418\uC5C8\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4");
31590
+ throw new (0, _chunkJ7DBL77Bcjs.KordocError)("\uB80C\uB354\uD560 \uAD6C\uC5ED\uC774 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 HWPX\uAC00 \uC190\uC0C1\uB418\uC5C8\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4");
31257
31591
  }
31258
31592
  const GAP = 2400;
31259
31593
  const clipDefs = [];
@@ -31285,17 +31619,17 @@ ${groups.join("\n")}
31285
31619
  // src/index.ts
31286
31620
  async function parse(input, options) {
31287
31621
  let buffer;
31288
- const opts = typeof input === "string" && !_optionalChain([options, 'optionalAccess', _597 => _597.filePath]) ? { ...options, filePath: input } : options;
31622
+ const opts = typeof input === "string" && !_optionalChain([options, 'optionalAccess', _605 => _605.filePath]) ? { ...options, filePath: input } : options;
31289
31623
  if (typeof input === "string") {
31290
31624
  try {
31291
31625
  const buf = await _promises.readFile.call(void 0, input);
31292
- buffer = _chunkDZBMQC2Ncjs.toArrayBuffer.call(void 0, buf);
31626
+ buffer = _chunkJ7DBL77Bcjs.toArrayBuffer.call(void 0, buf);
31293
31627
  } catch (err) {
31294
31628
  const msg2 = err instanceof Error && "code" in err && err.code === "ENOENT" ? `\uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${input}` : `\uD30C\uC77C \uC77D\uAE30 \uC2E4\uD328: ${input}`;
31295
31629
  return { success: false, fileType: "unknown", error: msg2, code: "PARSE_ERROR" };
31296
31630
  }
31297
31631
  } else if (Buffer.isBuffer(input)) {
31298
- buffer = _chunkDZBMQC2Ncjs.toArrayBuffer.call(void 0, input);
31632
+ buffer = _chunkJ7DBL77Bcjs.toArrayBuffer.call(void 0, input);
31299
31633
  } else {
31300
31634
  buffer = input;
31301
31635
  }
@@ -31303,6 +31637,14 @@ async function parse(input, options) {
31303
31637
  return { success: false, fileType: "unknown", error: "\uBE48 \uBC84\uD37C\uC774\uAC70\uB098 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uC785\uB825\uC785\uB2C8\uB2E4.", code: "EMPTY_INPUT" };
31304
31638
  }
31305
31639
  const format = detectFormat(buffer);
31640
+ const result = await dispatch(format, buffer, opts);
31641
+ if (result.success && !result.pages) {
31642
+ const pages = blocksToPages(result.blocks);
31643
+ if (pages) return { ...result, pages };
31644
+ }
31645
+ return result;
31646
+ }
31647
+ async function dispatch(format, buffer, opts) {
31306
31648
  switch (format) {
31307
31649
  case "hwpx": {
31308
31650
  const zipFormat = await detectZipFormat(buffer);
@@ -31329,40 +31671,40 @@ async function parse(input, options) {
31329
31671
  }
31330
31672
  async function parseImage(buffer, options) {
31331
31673
  try {
31332
- const { parseImageDocument } = await Promise.resolve().then(() => _interopRequireWildcard(require("./image-ocr-PRI2JKDW.cjs")));
31674
+ const { parseImageDocument } = await Promise.resolve().then(() => _interopRequireWildcard(require("./image-ocr-CBMJIJTQ.cjs")));
31333
31675
  const { blocks, warnings } = await parseImageDocument(buffer, options);
31334
31676
  return {
31335
31677
  success: true,
31336
31678
  fileType: "image",
31337
- markdown: _chunk46VU6YXFcjs.blocksToMarkdown.call(void 0, blocks),
31679
+ markdown: _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, blocks),
31338
31680
  blocks,
31339
31681
  warnings: warnings.length ? warnings : void 0,
31340
31682
  pageCount: 1
31341
31683
  };
31342
31684
  } catch (err) {
31343
- return { success: false, fileType: "image", error: _chunkDZBMQC2Ncjs.sanitizeError.call(void 0, err), code: _chunkDZBMQC2Ncjs.classifyError.call(void 0, err) };
31685
+ return { success: false, fileType: "image", error: _chunkJ7DBL77Bcjs.sanitizeError.call(void 0, err), code: _chunkJ7DBL77Bcjs.classifyError.call(void 0, err) };
31344
31686
  }
31345
31687
  }
31346
31688
  async function parseHwp3(buffer, options) {
31347
31689
  try {
31348
31690
  const { markdown, blocks, metadata, outline, warnings } = parseHwp3Document(buffer, options);
31349
- return { success: true, fileType: "hwp3", markdown, blocks, metadata, outline, warnings, pageCount: _optionalChain([metadata, 'optionalAccess', _598 => _598.pageCount]) };
31691
+ return { success: true, fileType: "hwp3", markdown, blocks, metadata, outline, warnings, pageCount: _optionalChain([metadata, 'optionalAccess', _606 => _606.pageCount]) };
31350
31692
  } catch (err) {
31351
- return { success: false, fileType: "hwp3", error: _chunkDZBMQC2Ncjs.sanitizeError.call(void 0, err), code: _chunkDZBMQC2Ncjs.classifyError.call(void 0, err) };
31693
+ return { success: false, fileType: "hwp3", error: _chunkJ7DBL77Bcjs.sanitizeError.call(void 0, err), code: _chunkJ7DBL77Bcjs.classifyError.call(void 0, err) };
31352
31694
  }
31353
31695
  }
31354
31696
  async function parseHwpx(buffer, options) {
31355
31697
  try {
31356
31698
  const { markdown, blocks, metadata, outline, warnings, images } = await parseHwpxDocument(buffer, options);
31357
- return { success: true, fileType: "hwpx", markdown, blocks, metadata, outline, warnings, images: _optionalChain([images, 'optionalAccess', _599 => _599.length]) ? images : void 0, pageCount: _optionalChain([metadata, 'optionalAccess', _600 => _600.pageCount]) };
31699
+ return { success: true, fileType: "hwpx", markdown, blocks, metadata, outline, warnings, images: _optionalChain([images, 'optionalAccess', _607 => _607.length]) ? images : void 0, pageCount: _optionalChain([metadata, 'optionalAccess', _608 => _608.pageCount]) };
31358
31700
  } catch (err) {
31359
- return { success: false, fileType: "hwpx", error: _chunkDZBMQC2Ncjs.sanitizeError.call(void 0, err), code: _chunkDZBMQC2Ncjs.classifyError.call(void 0, err) };
31701
+ return { success: false, fileType: "hwpx", error: _chunkJ7DBL77Bcjs.sanitizeError.call(void 0, err), code: _chunkJ7DBL77Bcjs.classifyError.call(void 0, err) };
31360
31702
  }
31361
31703
  }
31362
31704
  async function parseHwp(buffer, options) {
31363
31705
  try {
31364
31706
  const { markdown, blocks, metadata, outline, warnings, images } = parseHwp5Document(Buffer.from(buffer), options);
31365
- if (isDistributionSentinel(markdown) && isComFallbackAvailable() && _optionalChain([options, 'optionalAccess', _601 => _601.filePath])) {
31707
+ if (isDistributionSentinel(markdown) && isComFallbackAvailable() && _optionalChain([options, 'optionalAccess', _609 => _609.filePath])) {
31366
31708
  try {
31367
31709
  const { pages, pageCount, warnings: comWarns } = extractTextViaCom(options.filePath);
31368
31710
  if (pages.some((p) => p && p.trim().length > 0)) {
@@ -31380,15 +31722,15 @@ async function parseHwp(buffer, options) {
31380
31722
  } catch (e39) {
31381
31723
  }
31382
31724
  }
31383
- return { success: true, fileType: "hwp", markdown, blocks, metadata, outline, warnings, images: _optionalChain([images, 'optionalAccess', _602 => _602.length]) ? images : void 0, pageCount: _optionalChain([metadata, 'optionalAccess', _603 => _603.pageCount]) };
31725
+ return { success: true, fileType: "hwp", markdown, blocks, metadata, outline, warnings, images: _optionalChain([images, 'optionalAccess', _610 => _610.length]) ? images : void 0, pageCount: _optionalChain([metadata, 'optionalAccess', _611 => _611.pageCount]) };
31384
31726
  } catch (err) {
31385
- return { success: false, fileType: "hwp", error: _chunkDZBMQC2Ncjs.sanitizeError.call(void 0, err), code: _chunkDZBMQC2Ncjs.classifyError.call(void 0, err) };
31727
+ return { success: false, fileType: "hwp", error: _chunkJ7DBL77Bcjs.sanitizeError.call(void 0, err), code: _chunkJ7DBL77Bcjs.classifyError.call(void 0, err) };
31386
31728
  }
31387
31729
  }
31388
31730
  async function parsePdf(buffer, options) {
31389
31731
  let parsePdfDocument;
31390
31732
  try {
31391
- const mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./parser-SCQ7NJUJ.cjs")));
31733
+ const mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./parser-GIVQWVKJ.cjs")));
31392
31734
  parsePdfDocument = mod.parsePdfDocument;
31393
31735
  } catch (e40) {
31394
31736
  return {
@@ -31400,51 +31742,51 @@ async function parsePdf(buffer, options) {
31400
31742
  }
31401
31743
  try {
31402
31744
  const { markdown, blocks, metadata, outline, warnings, isImageBased, pageQuality, qualitySummary, images } = await parsePdfDocument(buffer, options);
31403
- return { success: true, fileType: "pdf", markdown, blocks, metadata, outline, warnings, isImageBased, pageQuality, qualitySummary, images, pageCount: _optionalChain([metadata, 'optionalAccess', _604 => _604.pageCount]) };
31745
+ return { success: true, fileType: "pdf", markdown, blocks, metadata, outline, warnings, isImageBased, pageQuality, qualitySummary, images, pageCount: _optionalChain([metadata, 'optionalAccess', _612 => _612.pageCount]) };
31404
31746
  } catch (err) {
31405
31747
  const isImageBased = err instanceof Error && "isImageBased" in err ? true : void 0;
31406
- return { success: false, fileType: "pdf", error: _chunkDZBMQC2Ncjs.sanitizeError.call(void 0, err), code: _chunkDZBMQC2Ncjs.classifyError.call(void 0, err), isImageBased };
31748
+ return { success: false, fileType: "pdf", error: _chunkJ7DBL77Bcjs.sanitizeError.call(void 0, err), code: _chunkJ7DBL77Bcjs.classifyError.call(void 0, err), isImageBased };
31407
31749
  }
31408
31750
  }
31409
31751
  async function parseXlsx(buffer, options) {
31410
31752
  try {
31411
31753
  const { markdown, blocks, metadata, warnings } = await parseXlsxDocument(buffer, options);
31412
- return { success: true, fileType: "xlsx", markdown, blocks, metadata, warnings, pageCount: _optionalChain([metadata, 'optionalAccess', _605 => _605.pageCount]) };
31754
+ return { success: true, fileType: "xlsx", markdown, blocks, metadata, warnings, pageCount: _optionalChain([metadata, 'optionalAccess', _613 => _613.pageCount]) };
31413
31755
  } catch (err) {
31414
- return { success: false, fileType: "xlsx", error: _chunkDZBMQC2Ncjs.sanitizeError.call(void 0, err), code: _chunkDZBMQC2Ncjs.classifyError.call(void 0, err) };
31756
+ return { success: false, fileType: "xlsx", error: _chunkJ7DBL77Bcjs.sanitizeError.call(void 0, err), code: _chunkJ7DBL77Bcjs.classifyError.call(void 0, err) };
31415
31757
  }
31416
31758
  }
31417
31759
  async function parseXls(buffer, options) {
31418
31760
  try {
31419
31761
  const { markdown, blocks, metadata, warnings } = await parseXlsDocument(buffer, options);
31420
- return { success: true, fileType: "xls", markdown, blocks, metadata, warnings, pageCount: _optionalChain([metadata, 'optionalAccess', _606 => _606.pageCount]) };
31762
+ return { success: true, fileType: "xls", markdown, blocks, metadata, warnings, pageCount: _optionalChain([metadata, 'optionalAccess', _614 => _614.pageCount]) };
31421
31763
  } catch (err) {
31422
- return { success: false, fileType: "xls", error: _chunkDZBMQC2Ncjs.sanitizeError.call(void 0, err), code: _chunkDZBMQC2Ncjs.classifyError.call(void 0, err) };
31764
+ return { success: false, fileType: "xls", error: _chunkJ7DBL77Bcjs.sanitizeError.call(void 0, err), code: _chunkJ7DBL77Bcjs.classifyError.call(void 0, err) };
31423
31765
  }
31424
31766
  }
31425
31767
  async function parseDocx(buffer, options) {
31426
31768
  try {
31427
31769
  const { markdown, blocks, metadata, outline, warnings, images } = await parseDocxDocument(buffer, options);
31428
- return { success: true, fileType: "docx", markdown, blocks, metadata, outline, warnings, images: _optionalChain([images, 'optionalAccess', _607 => _607.length]) ? images : void 0, pageCount: _optionalChain([metadata, 'optionalAccess', _608 => _608.pageCount]) };
31770
+ return { success: true, fileType: "docx", markdown, blocks, metadata, outline, warnings, images: _optionalChain([images, 'optionalAccess', _615 => _615.length]) ? images : void 0, pageCount: _optionalChain([metadata, 'optionalAccess', _616 => _616.pageCount]) };
31429
31771
  } catch (err) {
31430
- return { success: false, fileType: "docx", error: _chunkDZBMQC2Ncjs.sanitizeError.call(void 0, err), code: _chunkDZBMQC2Ncjs.classifyError.call(void 0, err) };
31772
+ return { success: false, fileType: "docx", error: _chunkJ7DBL77Bcjs.sanitizeError.call(void 0, err), code: _chunkJ7DBL77Bcjs.classifyError.call(void 0, err) };
31431
31773
  }
31432
31774
  }
31433
31775
  async function parseHwpml(buffer, options) {
31434
31776
  try {
31435
31777
  const { markdown, blocks, metadata, outline, warnings } = parseHwpmlDocument(buffer, options);
31436
- return { success: true, fileType: "hwpml", markdown, blocks, metadata, outline, warnings, pageCount: _optionalChain([metadata, 'optionalAccess', _609 => _609.pageCount]) };
31778
+ return { success: true, fileType: "hwpml", markdown, blocks, metadata, outline, warnings, pageCount: _optionalChain([metadata, 'optionalAccess', _617 => _617.pageCount]) };
31437
31779
  } catch (err) {
31438
- return { success: false, fileType: "hwpml", error: _chunkDZBMQC2Ncjs.sanitizeError.call(void 0, err), code: _chunkDZBMQC2Ncjs.classifyError.call(void 0, err) };
31780
+ return { success: false, fileType: "hwpml", error: _chunkJ7DBL77Bcjs.sanitizeError.call(void 0, err), code: _chunkJ7DBL77Bcjs.classifyError.call(void 0, err) };
31439
31781
  }
31440
31782
  }
31441
31783
  async function fillForm(input, values, outputFormat = "markdown") {
31442
31784
  let buffer;
31443
31785
  if (typeof input === "string") {
31444
31786
  const buf = await _promises.readFile.call(void 0, input);
31445
- buffer = _chunkDZBMQC2Ncjs.toArrayBuffer.call(void 0, buf);
31787
+ buffer = _chunkJ7DBL77Bcjs.toArrayBuffer.call(void 0, buf);
31446
31788
  } else if (Buffer.isBuffer(input)) {
31447
- buffer = _chunkDZBMQC2Ncjs.toArrayBuffer.call(void 0, input);
31789
+ buffer = _chunkJ7DBL77Bcjs.toArrayBuffer.call(void 0, input);
31448
31790
  } else {
31449
31791
  buffer = input;
31450
31792
  }
@@ -31470,7 +31812,7 @@ async function fillForm(input, values, outputFormat = "markdown") {
31470
31812
  throw new Error(`\uC11C\uC2DD \uD30C\uC2F1 \uC2E4\uD328: ${parsed.error}`);
31471
31813
  }
31472
31814
  const fill = fillFormFields(parsed.blocks, values);
31473
- const markdown = _chunk46VU6YXFcjs.blocksToMarkdown.call(void 0, fill.blocks);
31815
+ const markdown = _chunkGGZ5PSJOcjs.blocksToMarkdown.call(void 0, fill.blocks);
31474
31816
  if (outputFormat === "hwpx") {
31475
31817
  const hwpxBuffer = await markdownToHwpx(markdown);
31476
31818
  return { output: hwpxBuffer, format: "hwpx", fill };
@@ -31549,5 +31891,6 @@ async function fillForm(input, values, outputFormat = "markdown") {
31549
31891
 
31550
31892
 
31551
31893
 
31552
- exports.BUILTIN_TEMPLATES = BUILTIN_TEMPLATES; exports.DEFAULT_REDACT_RULES = DEFAULT_REDACT_RULES; exports.HwpxSession = HwpxSession; exports.PRESET_ALIAS = PRESET_ALIAS; exports.SPACE_EM_FIXED = SPACE_EM_FIXED; exports.SPACE_EM_FONT = SPACE_EM_FONT; exports.VERSION = _chunkDZBMQC2Ncjs.VERSION; exports.ValueCursor = ValueCursor; exports.applySplices = applySplices; exports.blocksToChunks = blocksToChunks; exports.blocksToMarkdown = _chunk46VU6YXFcjs.blocksToMarkdown; exports.blocksToPdf = blocksToPdf; exports.buildParagraphSplices = buildParagraphSplices; exports.buildRangeSplices = buildRangeSplices; exports.charWidthEm1000 = charWidthEm1000; exports.compare = compare; exports.detectFormat = detectFormat; exports.detectOle2Format = detectOle2Format; exports.detectZipFormat = detectZipFormat; exports.diffBlocks = diffBlocks; exports.extractClickHereFields = extractClickHereFields; exports.extractFormFields = extractFormFields; exports.extractFormSchema = extractFormSchema; exports.fillForm = fillForm; exports.fillFormFields = fillFormFields; exports.fillHwpx = fillHwpx; exports.fillWithUniqueGuard = fillWithUniqueGuard; exports.fitRatioForFewerLines = fitRatioForFewerLines; exports.formatFillValue = formatFillValue; exports.gongmunLintWarnings = gongmunLintWarnings; exports.hwpxToProfile = hwpxToProfile; exports.incompatibleGongmunWarnings = incompatibleGongmunWarnings; exports.inferFieldType = inferFieldType; exports.isHwpxFile = isHwpxFile; exports.isKnownFont = isKnownFont; exports.isLabelCell = isLabelCell; exports.isOldHwpFile = isOldHwpFile; exports.isPdfFile = isPdfFile; exports.isZipFile = isZipFile; exports.lintGongmunText = lintGongmunText; exports.markdownToHwpx = markdownToHwpx; exports.markdownToPdf = markdownToPdf; exports.measureTextWidth = measureTextWidth; exports.normalizeGongmunPreset = normalizeGongmunPreset; exports.openHwpxDocument = openHwpxDocument; exports.parse = parse; exports.parseDocx = parseDocx; exports.parseHwp = parseHwp; exports.parseHwp3 = parseHwp3; exports.parseHwpml = parseHwpml; exports.parseHwpx = parseHwpx; exports.parseImage = parseImage; exports.parsePdf = parsePdf; exports.parseXls = parseXls; exports.parseXlsx = parseXlsx; exports.patchHwp = patchHwp; exports.patchHwpx = patchHwpx; exports.patchHwpxBlocks = patchHwpxBlocks; exports.placeSealHwpx = placeSealHwpx; exports.readBuiltinTemplate = readBuiltinTemplate; exports.readBuiltinTemplateSample = readBuiltinTemplateSample; exports.redactMarkdown = redactMarkdown; exports.redactText = redactText; exports.renderHtml = renderHtml; exports.renderHwpxToSvg = renderHwpxToSvg; exports.resolveBuiltinTemplate = resolveBuiltinTemplate; exports.scanSectionXml = scanSectionXml; exports.simulateWrap = simulateWrap; exports.simulateWrapKeepWord = simulateWrapKeepWord; exports.unknownFontWarnings = unknownFontWarnings; exports.validateHwpx = validateHwpx;
31894
+
31895
+ exports.BUILTIN_TEMPLATES = BUILTIN_TEMPLATES; exports.DEFAULT_REDACT_RULES = DEFAULT_REDACT_RULES; exports.HwpxSession = HwpxSession; exports.PRESET_ALIAS = PRESET_ALIAS; exports.SPACE_EM_FIXED = SPACE_EM_FIXED; exports.SPACE_EM_FONT = SPACE_EM_FONT; exports.VERSION = _chunkJ7DBL77Bcjs.VERSION; exports.ValueCursor = ValueCursor; exports.applySplices = applySplices; exports.blocksToChunks = blocksToChunks; exports.blocksToMarkdown = _chunkGGZ5PSJOcjs.blocksToMarkdown; exports.blocksToPages = blocksToPages; exports.blocksToPdf = blocksToPdf; exports.buildParagraphSplices = buildParagraphSplices; exports.buildRangeSplices = buildRangeSplices; exports.charWidthEm1000 = charWidthEm1000; exports.compare = compare; exports.detectFormat = detectFormat; exports.detectOle2Format = detectOle2Format; exports.detectZipFormat = detectZipFormat; exports.diffBlocks = diffBlocks; exports.extractClickHereFields = extractClickHereFields; exports.extractFormFields = extractFormFields; exports.extractFormSchema = extractFormSchema; exports.fillForm = fillForm; exports.fillFormFields = fillFormFields; exports.fillHwpx = fillHwpx; exports.fillWithUniqueGuard = fillWithUniqueGuard; exports.fitRatioForFewerLines = fitRatioForFewerLines; exports.formatFillValue = formatFillValue; exports.gongmunLintWarnings = gongmunLintWarnings; exports.hwpxToProfile = hwpxToProfile; exports.incompatibleGongmunWarnings = incompatibleGongmunWarnings; exports.inferFieldType = inferFieldType; exports.isHwpxFile = isHwpxFile; exports.isKnownFont = isKnownFont; exports.isLabelCell = isLabelCell; exports.isOldHwpFile = isOldHwpFile; exports.isPdfFile = isPdfFile; exports.isZipFile = isZipFile; exports.lintGongmunText = lintGongmunText; exports.markdownToHwpx = markdownToHwpx; exports.markdownToPdf = markdownToPdf; exports.measureTextWidth = measureTextWidth; exports.normalizeGongmunPreset = normalizeGongmunPreset; exports.openHwpxDocument = openHwpxDocument; exports.parse = parse; exports.parseDocx = parseDocx; exports.parseHwp = parseHwp; exports.parseHwp3 = parseHwp3; exports.parseHwpml = parseHwpml; exports.parseHwpx = parseHwpx; exports.parseImage = parseImage; exports.parsePdf = parsePdf; exports.parseXls = parseXls; exports.parseXlsx = parseXlsx; exports.patchHwp = patchHwp; exports.patchHwpx = patchHwpx; exports.patchHwpxBlocks = patchHwpxBlocks; exports.placeSealHwpx = placeSealHwpx; exports.readBuiltinTemplate = readBuiltinTemplate; exports.readBuiltinTemplateSample = readBuiltinTemplateSample; exports.redactMarkdown = redactMarkdown; exports.redactText = redactText; exports.renderHtml = renderHtml; exports.renderHwpxToSvg = renderHwpxToSvg; exports.resolveBuiltinTemplate = resolveBuiltinTemplate; exports.scanSectionXml = scanSectionXml; exports.simulateWrap = simulateWrap; exports.simulateWrapKeepWord = simulateWrapKeepWord; exports.unknownFontWarnings = unknownFontWarnings; exports.validateHwpx = validateHwpx;
31553
31896
  //# sourceMappingURL=index.cjs.map