kordoc 4.12.0 → 4.12.2

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 (127) hide show
  1. package/README.md +26 -5
  2. package/dist/{-B3EUUBPV.js → -EZH6NKTE.js} +8 -8
  3. package/dist/{chunk-HGUNWAXK.js → chunk-2B7OIEJJ.js} +9 -5
  4. package/dist/chunk-2B7OIEJJ.js.map +1 -0
  5. package/dist/{chunk-QKFCGJJY.js → chunk-2HBYWA5X.js} +2 -2
  6. package/dist/{chunk-HFJWCAJ2.cjs → chunk-2LKYJ4G3.cjs} +6 -6
  7. package/dist/chunk-2LKYJ4G3.cjs.map +1 -0
  8. package/dist/{chunk-COGFPMEB.js → chunk-2LO525TL.js} +2 -2
  9. package/dist/{chunk-TROD36DK.cjs → chunk-2LPBIW2B.cjs} +3 -3
  10. package/dist/chunk-2LPBIW2B.cjs.map +1 -0
  11. package/dist/{chunk-BQSWSMRG.cjs → chunk-62IU4NV3.cjs} +2 -2
  12. package/dist/chunk-62IU4NV3.cjs.map +1 -0
  13. package/dist/{chunk-SMGSCP57.js → chunk-7XUXSDH5.js} +308 -53
  14. package/dist/chunk-7XUXSDH5.js.map +1 -0
  15. package/dist/{chunk-YASFVKDT.js → chunk-DBGEUDBY.js} +2 -2
  16. package/dist/chunk-DCZVOIEO.cjs.map +1 -1
  17. package/dist/{chunk-4PKNWBXJ.js → chunk-FBLMVHDK.js} +2 -2
  18. package/dist/{chunk-I2OETEEL.js → chunk-FVBR7SC3.js} +2 -2
  19. package/dist/chunk-GS7T56RP.cjs.map +1 -1
  20. package/dist/{chunk-46UDI56N.js → chunk-IOJX4Q63.js} +3 -3
  21. package/dist/{chunk-BQE7AMFS.js → chunk-JCMBQC5N.js} +2 -2
  22. package/dist/{chunk-TF5DS74F.js → chunk-KX7IYCCZ.js} +3 -3
  23. package/dist/{chunk-PFUW4I4I.js → chunk-LD2K4K5V.js} +170 -18
  24. package/dist/chunk-LD2K4K5V.js.map +1 -0
  25. package/dist/{chunk-MJPRWCI5.js → chunk-MUYU4JI5.js} +2 -2
  26. package/dist/{chunk-SKGYPM6L.js → chunk-OEYECZGV.js} +308 -53
  27. package/dist/chunk-OEYECZGV.js.map +1 -0
  28. package/dist/{chunk-AT23GFSK.cjs → chunk-ONNAHSPV.cjs} +323 -68
  29. package/dist/chunk-ONNAHSPV.cjs.map +1 -0
  30. package/dist/{chunk-GHVXLV52.js → chunk-Q6ETEJFK.js} +9 -5
  31. package/dist/chunk-Q6ETEJFK.js.map +1 -0
  32. package/dist/{chunk-2IR3PEZU.js → chunk-QBCMFNHS.js} +2 -2
  33. package/dist/{chunk-DRLKMFDV.js → chunk-QM2RSJ2S.js} +3 -3
  34. package/dist/chunk-T7GRHAIW.cjs.map +1 -1
  35. package/dist/{chunk-TJYZY2O6.js → chunk-UL2MDA5C.js} +3 -3
  36. package/dist/{chunk-TYYJSOZS.cjs → chunk-V5BUPZ6I.cjs} +23 -19
  37. package/dist/chunk-V5BUPZ6I.cjs.map +1 -0
  38. package/dist/{chunk-7JQ2ITT2.js → chunk-XXDZ2KTW.js} +2 -2
  39. package/dist/chunks-TT7ZE5QQ.js +10 -0
  40. package/dist/cli.js +21 -21
  41. package/dist/cli.js.map +1 -1
  42. package/dist/{formula-WGKKR5OQ.js → formula-6RQX4NMJ.js} +4 -4
  43. package/dist/{formula-YMGXXRBQ.cjs → formula-NBEO6CFC.cjs} +9 -9
  44. package/dist/formula-NBEO6CFC.cjs.map +1 -0
  45. package/dist/{formula-G4CD5KQ6.js → formula-NW33S4TA.js} +3 -3
  46. package/dist/{image-ocr-MBWZK3ZT.js → image-ocr-CAVU2TNZ.js} +5 -5
  47. package/dist/{image-ocr-M4RP4INO.js → image-ocr-SO56VETS.js} +7 -7
  48. package/dist/{image-ocr-BE2HHMVN.cjs → image-ocr-V4KY373B.cjs} +11 -11
  49. package/dist/image-ocr-V4KY373B.cjs.map +1 -0
  50. package/dist/index.cjs +547 -395
  51. package/dist/index.cjs.map +1 -1
  52. package/dist/index.d.cts +5 -2
  53. package/dist/index.d.ts +5 -2
  54. package/dist/index.js +166 -14
  55. package/dist/index.js.map +1 -1
  56. package/dist/mcp.js +15 -15
  57. package/dist/{model-bundle-BIMP5DIH.js → model-bundle-EIJF34DR.js} +5 -5
  58. package/dist/{models-QPOEGHVA.js → models-6V4CPQXC.js} +5 -5
  59. package/dist/page-range-P7SDW6LR.cjs.map +1 -1
  60. package/dist/{parser-CMNHBVTL.js → parser-GIREMEPD.js} +307 -6
  61. package/dist/parser-GIREMEPD.js.map +1 -0
  62. package/dist/{parser-NR3XO4SM.js → parser-OBHNXEQM.js} +307 -6
  63. package/dist/parser-OBHNXEQM.js.map +1 -0
  64. package/dist/{parser-QJY5W47V.cjs → parser-OMT25WH2.cjs} +334 -33
  65. package/dist/parser-OMT25WH2.cjs.map +1 -0
  66. package/dist/pdf-ocr-IRXQ5GBM.js +13 -0
  67. package/dist/pdf-ocr-SL4GCOGS.js +16 -0
  68. package/dist/pdf-ocr-TFYVK4FI.cjs +14 -0
  69. package/dist/pdf-ocr-TFYVK4FI.cjs.map +1 -0
  70. package/dist/{profile-io-UZ43CLWX.js → profile-io-PZVMM66V.js} +3 -3
  71. package/dist/{rasterize-JC2JVVOF.js → rasterize-NRWP2C6L.js} +2 -2
  72. package/dist/render-V5ZPTZQ7.js +10 -0
  73. package/dist/seal-LVG2DGAB.js +10 -0
  74. package/dist/{setup-WDUVPFX3.js → setup-V55AJP6H.js} +3 -3
  75. package/dist/{watch-UI7OXIES.js → watch-7CQSMDDP.js} +9 -9
  76. package/package.json +1 -1
  77. package/dist/chunk-AT23GFSK.cjs.map +0 -1
  78. package/dist/chunk-BQSWSMRG.cjs.map +0 -1
  79. package/dist/chunk-GHVXLV52.js.map +0 -1
  80. package/dist/chunk-HFJWCAJ2.cjs.map +0 -1
  81. package/dist/chunk-HGUNWAXK.js.map +0 -1
  82. package/dist/chunk-PFUW4I4I.js.map +0 -1
  83. package/dist/chunk-SKGYPM6L.js.map +0 -1
  84. package/dist/chunk-SMGSCP57.js.map +0 -1
  85. package/dist/chunk-TROD36DK.cjs.map +0 -1
  86. package/dist/chunk-TYYJSOZS.cjs.map +0 -1
  87. package/dist/chunks-Q4GCPRRU.js +0 -10
  88. package/dist/formula-YMGXXRBQ.cjs.map +0 -1
  89. package/dist/image-ocr-BE2HHMVN.cjs.map +0 -1
  90. package/dist/parser-CMNHBVTL.js.map +0 -1
  91. package/dist/parser-NR3XO4SM.js.map +0 -1
  92. package/dist/parser-QJY5W47V.cjs.map +0 -1
  93. package/dist/pdf-ocr-DF3OTBKH.js +0 -13
  94. package/dist/pdf-ocr-R4DIKF4Q.js +0 -16
  95. package/dist/pdf-ocr-T3RHIZKY.cjs +0 -14
  96. package/dist/pdf-ocr-T3RHIZKY.cjs.map +0 -1
  97. package/dist/render-KSQ6UGCP.js +0 -10
  98. package/dist/seal-EOFFQ4JR.js +0 -10
  99. /package/dist/{-B3EUUBPV.js.map → -EZH6NKTE.js.map} +0 -0
  100. /package/dist/{chunk-QKFCGJJY.js.map → chunk-2HBYWA5X.js.map} +0 -0
  101. /package/dist/{chunk-COGFPMEB.js.map → chunk-2LO525TL.js.map} +0 -0
  102. /package/dist/{chunk-YASFVKDT.js.map → chunk-DBGEUDBY.js.map} +0 -0
  103. /package/dist/{chunk-4PKNWBXJ.js.map → chunk-FBLMVHDK.js.map} +0 -0
  104. /package/dist/{chunk-I2OETEEL.js.map → chunk-FVBR7SC3.js.map} +0 -0
  105. /package/dist/{chunk-46UDI56N.js.map → chunk-IOJX4Q63.js.map} +0 -0
  106. /package/dist/{chunk-BQE7AMFS.js.map → chunk-JCMBQC5N.js.map} +0 -0
  107. /package/dist/{chunk-TF5DS74F.js.map → chunk-KX7IYCCZ.js.map} +0 -0
  108. /package/dist/{chunk-MJPRWCI5.js.map → chunk-MUYU4JI5.js.map} +0 -0
  109. /package/dist/{chunk-2IR3PEZU.js.map → chunk-QBCMFNHS.js.map} +0 -0
  110. /package/dist/{chunk-DRLKMFDV.js.map → chunk-QM2RSJ2S.js.map} +0 -0
  111. /package/dist/{chunk-TJYZY2O6.js.map → chunk-UL2MDA5C.js.map} +0 -0
  112. /package/dist/{chunk-7JQ2ITT2.js.map → chunk-XXDZ2KTW.js.map} +0 -0
  113. /package/dist/{chunks-Q4GCPRRU.js.map → chunks-TT7ZE5QQ.js.map} +0 -0
  114. /package/dist/{formula-WGKKR5OQ.js.map → formula-6RQX4NMJ.js.map} +0 -0
  115. /package/dist/{formula-G4CD5KQ6.js.map → formula-NW33S4TA.js.map} +0 -0
  116. /package/dist/{image-ocr-MBWZK3ZT.js.map → image-ocr-CAVU2TNZ.js.map} +0 -0
  117. /package/dist/{image-ocr-M4RP4INO.js.map → image-ocr-SO56VETS.js.map} +0 -0
  118. /package/dist/{model-bundle-BIMP5DIH.js.map → model-bundle-EIJF34DR.js.map} +0 -0
  119. /package/dist/{models-QPOEGHVA.js.map → models-6V4CPQXC.js.map} +0 -0
  120. /package/dist/{pdf-ocr-DF3OTBKH.js.map → pdf-ocr-IRXQ5GBM.js.map} +0 -0
  121. /package/dist/{pdf-ocr-R4DIKF4Q.js.map → pdf-ocr-SL4GCOGS.js.map} +0 -0
  122. /package/dist/{profile-io-UZ43CLWX.js.map → profile-io-PZVMM66V.js.map} +0 -0
  123. /package/dist/{rasterize-JC2JVVOF.js.map → rasterize-NRWP2C6L.js.map} +0 -0
  124. /package/dist/{render-KSQ6UGCP.js.map → render-V5ZPTZQ7.js.map} +0 -0
  125. /package/dist/{seal-EOFFQ4JR.js.map → seal-LVG2DGAB.js.map} +0 -0
  126. /package/dist/{setup-WDUVPFX3.js.map → setup-V55AJP6H.js.map} +0 -0
  127. /package/dist/{watch-UI7OXIES.js.map → watch-7CQSMDDP.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  blocksToMarkdown
4
- } from "./chunk-GHVXLV52.js";
4
+ } from "./chunk-Q6ETEJFK.js";
5
5
 
6
6
  // src/chunks.ts
7
7
  var LIST_MARKER_RE = /^(?:[□■◇◆○◎●◦ㅇ•▪▸▶※-]|\d{1,3}[.)]|[가나다라마바사아자차카타파하][.)]|\([가나다라마바사아자차카타파하0-9]{1,3}\)|[①-⑳㉮-㉻㈎-㈛])\s/;
@@ -79,4 +79,4 @@ function blocksToChunks(blocks, options) {
79
79
  export {
80
80
  blocksToChunks
81
81
  };
82
- //# sourceMappingURL=chunk-YASFVKDT.js.map
82
+ //# sourceMappingURL=chunk-DBGEUDBY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/mong-e/workspace/kordoc/dist/chunk-DCZVOIEO.cjs","../src/page-range.ts"],"names":[],"mappings":"AAAA;ACSO,SAAS,cAAA,CAAe,IAAA,EAAyB,QAAA,EAA+B;AACrF,EAAA,MAAM,OAAA,kBAAS,IAAI,GAAA,CAAY,CAAA;AAC/B,EAAA,GAAA,CAAI,SAAA,GAAY,CAAA,EAAG,OAAO,MAAA;AAE1B,EAAA,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,IAAA,IAAA,CAAA,MAAW,EAAA,GAAK,IAAA,EAAM;AACpB,MAAA,MAAM,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACzB,MAAA,GAAA,CAAI,KAAA,GAAQ,EAAA,GAAK,KAAA,GAAQ,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAAA,IACpD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,GAAA,CAAI,OAAO,KAAA,IAAS,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,EAAA,IAAM,EAAA,EAAI,OAAO,MAAA;AAE3D,EAAA,MAAM,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,EAAA,IAAA,CAAA,MAAW,KAAA,GAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,QAAA,EAAU,IAAA,CAAK,IAAA,CAAK,CAAA;AAC1B,IAAA,GAAA,CAAI,CAAC,OAAA,EAAS,QAAA;AAEd,IAAA,MAAM,WAAA,EAAa,OAAA,CAAQ,KAAA,CAAM,qBAAqB,CAAA;AACtD,IAAA,GAAA,CAAI,UAAA,EAAY;AACd,MAAA,MAAM,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAA,CAAS,UAAA,CAAW,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA;AACrD,MAAA,MAAM,IAAA,EAAM,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,QAAA,CAAS,UAAA,CAAW,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA;AAC1D,MAAA,IAAA,CAAA,IAAS,EAAA,EAAI,KAAA,EAAO,EAAA,GAAK,GAAA,EAAK,CAAA,EAAA,EAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA;AAAA,IACjD,EAAA,KAAO;AACL,MAAA,MAAM,KAAA,EAAO,QAAA,CAAS,OAAA,EAAS,EAAE,CAAA;AACjC,MAAA,GAAA,CAAI,CAAC,KAAA,CAAM,IAAI,EAAA,GAAK,KAAA,GAAQ,EAAA,GAAK,KAAA,GAAQ,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAAA,IACpE;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;ADZA;AACA;AACE;AACF,wCAAC","file":"/Users/mong-e/workspace/kordoc/dist/chunk-DCZVOIEO.cjs","sourcesContent":[null,"/** 페이지/섹션 범위 파싱 유틸리티 */\n\n/**\n * 페이지 범위 지정을 1-based Set<number>로 변환.\n *\n * @param spec - [1,2,3] 또는 \"1-3\" 또는 \"1,3,5-7\"\n * @param maxPages - 최대 페이지 수 (클램핑 상한)\n * @returns 1-based 페이지 번호 Set\n */\nexport function parsePageRange(spec: number[] | string, maxPages: number): Set<number> {\n const result = new Set<number>()\n if (maxPages <= 0) return result\n\n if (Array.isArray(spec)) {\n for (const n of spec) {\n const page = Math.round(n)\n if (page >= 1 && page <= maxPages) result.add(page)\n }\n return result\n }\n\n if (typeof spec !== \"string\" || spec.trim() === \"\") return result\n\n const parts = spec.split(\",\")\n for (const part of parts) {\n const trimmed = part.trim()\n if (!trimmed) continue\n\n const rangeMatch = trimmed.match(/^(\\d+)\\s*-\\s*(\\d+)$/)\n if (rangeMatch) {\n const start = Math.max(1, parseInt(rangeMatch[1], 10))\n const end = Math.min(maxPages, parseInt(rangeMatch[2], 10))\n for (let i = start; i <= end; i++) result.add(i)\n } else {\n const page = parseInt(trimmed, 10)\n if (!isNaN(page) && page >= 1 && page <= maxPages) result.add(page)\n }\n }\n\n return result\n}\n"]}
1
+ {"version":3,"sources":["/Users/chris_gomdori/workspace/kordoc/dist/chunk-DCZVOIEO.cjs","../src/page-range.ts"],"names":[],"mappings":"AAAA;ACSO,SAAS,cAAA,CAAe,IAAA,EAAyB,QAAA,EAA+B;AACrF,EAAA,MAAM,OAAA,kBAAS,IAAI,GAAA,CAAY,CAAA;AAC/B,EAAA,GAAA,CAAI,SAAA,GAAY,CAAA,EAAG,OAAO,MAAA;AAE1B,EAAA,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,IAAA,IAAA,CAAA,MAAW,EAAA,GAAK,IAAA,EAAM;AACpB,MAAA,MAAM,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACzB,MAAA,GAAA,CAAI,KAAA,GAAQ,EAAA,GAAK,KAAA,GAAQ,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAAA,IACpD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,GAAA,CAAI,OAAO,KAAA,IAAS,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,EAAA,IAAM,EAAA,EAAI,OAAO,MAAA;AAE3D,EAAA,MAAM,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,EAAA,IAAA,CAAA,MAAW,KAAA,GAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,QAAA,EAAU,IAAA,CAAK,IAAA,CAAK,CAAA;AAC1B,IAAA,GAAA,CAAI,CAAC,OAAA,EAAS,QAAA;AAEd,IAAA,MAAM,WAAA,EAAa,OAAA,CAAQ,KAAA,CAAM,qBAAqB,CAAA;AACtD,IAAA,GAAA,CAAI,UAAA,EAAY;AACd,MAAA,MAAM,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAA,CAAS,UAAA,CAAW,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA;AACrD,MAAA,MAAM,IAAA,EAAM,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,QAAA,CAAS,UAAA,CAAW,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA;AAC1D,MAAA,IAAA,CAAA,IAAS,EAAA,EAAI,KAAA,EAAO,EAAA,GAAK,GAAA,EAAK,CAAA,EAAA,EAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA;AAAA,IACjD,EAAA,KAAO;AACL,MAAA,MAAM,KAAA,EAAO,QAAA,CAAS,OAAA,EAAS,EAAE,CAAA;AACjC,MAAA,GAAA,CAAI,CAAC,KAAA,CAAM,IAAI,EAAA,GAAK,KAAA,GAAQ,EAAA,GAAK,KAAA,GAAQ,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAAA,IACpE;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;ADZA;AACA;AACE;AACF,wCAAC","file":"/Users/chris_gomdori/workspace/kordoc/dist/chunk-DCZVOIEO.cjs","sourcesContent":[null,"/** 페이지/섹션 범위 파싱 유틸리티 */\n\n/**\n * 페이지 범위 지정을 1-based Set<number>로 변환.\n *\n * @param spec - [1,2,3] 또는 \"1-3\" 또는 \"1,3,5-7\"\n * @param maxPages - 최대 페이지 수 (클램핑 상한)\n * @returns 1-based 페이지 번호 Set\n */\nexport function parsePageRange(spec: number[] | string, maxPages: number): Set<number> {\n const result = new Set<number>()\n if (maxPages <= 0) return result\n\n if (Array.isArray(spec)) {\n for (const n of spec) {\n const page = Math.round(n)\n if (page >= 1 && page <= maxPages) result.add(page)\n }\n return result\n }\n\n if (typeof spec !== \"string\" || spec.trim() === \"\") return result\n\n const parts = spec.split(\",\")\n for (const part of parts) {\n const trimmed = part.trim()\n if (!trimmed) continue\n\n const rangeMatch = trimmed.match(/^(\\d+)\\s*-\\s*(\\d+)$/)\n if (rangeMatch) {\n const start = Math.max(1, parseInt(rangeMatch[1], 10))\n const end = Math.min(maxPages, parseInt(rangeMatch[2], 10))\n for (let i = start; i <= end; i++) result.add(i)\n } else {\n const page = parseInt(trimmed, 10)\n if (!isNaN(page) && page >= 1 && page <= maxPages) result.add(page)\n }\n }\n\n return result\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/utils.ts
4
- var VERSION = true ? "4.12.0" : "0.0.0-dev";
4
+ var VERSION = true ? "4.12.2" : "0.0.0-dev";
5
5
  function toArrayBuffer(buf) {
6
6
  if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {
7
7
  return buf.buffer;
@@ -123,4 +123,4 @@ export {
123
123
  safeMax,
124
124
  classifyError
125
125
  };
126
- //# sourceMappingURL=chunk-4PKNWBXJ.js.map
126
+ //# sourceMappingURL=chunk-FBLMVHDK.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  KordocError
4
- } from "./chunk-4PKNWBXJ.js";
4
+ } from "./chunk-FBLMVHDK.js";
5
5
 
6
6
  // src/hwpx/parser-shared.ts
7
7
  import { DOMParser } from "@xmldom/xmldom";
@@ -323,4 +323,4 @@ export {
323
323
  DEFAULT_CHAR,
324
324
  parseRenderStyles
325
325
  };
326
- //# sourceMappingURL=chunk-I2OETEEL.js.map
326
+ //# sourceMappingURL=chunk-FVBR7SC3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/mong-e/workspace/kordoc/dist/chunk-GS7T56RP.cjs","../node_modules/tsup/assets/cjs_shims.js"],"names":[],"mappings":"AAAA;ACKA,IAAM,iBAAA,EAAmB,CAAA,EAAA,GACvB,OAAO,SAAA,IAAa,YAAA,EAChB,IAAI,GAAA,CAAI,CAAA,KAAA,EAAQ,UAAU,CAAA,CAAA;AAK8B;ADT4B;AACA;AACA;AACA","file":"/Users/mong-e/workspace/kordoc/dist/chunk-GS7T56RP.cjs","sourcesContent":[null,"// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n"]}
1
+ {"version":3,"sources":["/Users/chris_gomdori/workspace/kordoc/dist/chunk-GS7T56RP.cjs","../node_modules/tsup/assets/cjs_shims.js"],"names":[],"mappings":"AAAA;ACKA,IAAM,iBAAA,EAAmB,CAAA,EAAA,GACvB,OAAO,SAAA,IAAa,YAAA,EAChB,IAAI,GAAA,CAAI,CAAA,KAAA,EAAQ,UAAU,CAAA,CAAA;AAK8B;ADT4B;AACA;AACA;AACA","file":"/Users/chris_gomdori/workspace/kordoc/dist/chunk-GS7T56RP.cjs","sourcesContent":[null,"// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n"]}
@@ -7,11 +7,11 @@ import {
7
7
  createXmlParser,
8
8
  findChildByLocalName,
9
9
  parseRenderStyles
10
- } from "./chunk-I2OETEEL.js";
10
+ } from "./chunk-FVBR7SC3.js";
11
11
  import {
12
12
  KordocError,
13
13
  precheckZipSize
14
- } from "./chunk-4PKNWBXJ.js";
14
+ } from "./chunk-FBLMVHDK.js";
15
15
 
16
16
  // src/render/svg-render.ts
17
17
  import JSZip from "jszip";
@@ -1286,4 +1286,4 @@ export {
1286
1286
  fitRatioForFewerLines,
1287
1287
  renderHwpxToSvg
1288
1288
  };
1289
- //# sourceMappingURL=chunk-46UDI56N.js.map
1289
+ //# sourceMappingURL=chunk-IOJX4Q63.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  assertNetworkAllowed
4
- } from "./chunk-2IR3PEZU.js";
4
+ } from "./chunk-QBCMFNHS.js";
5
5
 
6
6
  // src/pdf/formula/models.ts
7
7
  import { createHash } from "crypto";
@@ -250,4 +250,4 @@ export {
250
250
  ensureFormulaModels,
251
251
  ensureSingleModel
252
252
  };
253
- //# sourceMappingURL=chunk-BQE7AMFS.js.map
253
+ //# sourceMappingURL=chunk-JCMBQC5N.js.map
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  parseRenderStyles
4
- } from "./chunk-I2OETEEL.js";
4
+ } from "./chunk-FVBR7SC3.js";
5
5
  import {
6
6
  KordocError,
7
7
  precheckZipSize
8
- } from "./chunk-4PKNWBXJ.js";
8
+ } from "./chunk-FBLMVHDK.js";
9
9
 
10
10
  // src/form/seal.ts
11
11
  import JSZip from "jszip";
@@ -1051,4 +1051,4 @@ export {
1051
1051
  patchZipEntries,
1052
1052
  placeSealHwpx
1053
1053
  };
1054
- //# sourceMappingURL=chunk-TF5DS74F.js.map
1054
+ //# sourceMappingURL=chunk-KX7IYCCZ.js.map
@@ -22,7 +22,7 @@ import {
22
22
  paraTextPureT,
23
23
  patchZipEntries,
24
24
  scanSectionXml
25
- } from "./chunk-TF5DS74F.js";
25
+ } from "./chunk-KX7IYCCZ.js";
26
26
  import {
27
27
  MAX_COLS,
28
28
  MAX_ROWS,
@@ -32,14 +32,14 @@ import {
32
32
  dedupeRunningHeaders,
33
33
  flattenLayoutTables,
34
34
  mapPuaText
35
- } from "./chunk-GHVXLV52.js";
35
+ } from "./chunk-Q6ETEJFK.js";
36
36
  import {
37
37
  SPACE_EM_FIXED,
38
38
  charWidthEm1000,
39
39
  fitRatioForFewerLines,
40
40
  measureTextWidth,
41
41
  simulateWrap
42
- } from "./chunk-46UDI56N.js";
42
+ } from "./chunk-IOJX4Q63.js";
43
43
  import {
44
44
  MAX_DECOMPRESS_SIZE,
45
45
  MAX_XML_DEPTH,
@@ -55,7 +55,7 @@ import {
55
55
  findChildByLocalName,
56
56
  localName,
57
57
  rawTextContent
58
- } from "./chunk-I2OETEEL.js";
58
+ } from "./chunk-FVBR7SC3.js";
59
59
  import {
60
60
  KordocError,
61
61
  classifyError,
@@ -67,7 +67,7 @@ import {
67
67
  sanitizeHref,
68
68
  stripDtd,
69
69
  toArrayBuffer
70
- } from "./chunk-4PKNWBXJ.js";
70
+ } from "./chunk-FBLMVHDK.js";
71
71
 
72
72
  // src/index.ts
73
73
  import { readFile } from "fs/promises";
@@ -2680,6 +2680,9 @@ function parseDocInfo(records) {
2680
2680
  function createParaTextState() {
2681
2681
  return { text: "", ctrlIdx: 0, fieldStack: [], fieldRanges: [] };
2682
2682
  }
2683
+ var HANCOM_FOLDED_PUA_START = 40960;
2684
+ var HANCOM_FOLDED_PUA_END = 42124;
2685
+ var HANCOM_FOLDED_PUA_SHIFT = 983040 - 40960;
2683
2686
  function isExtendedOnlyCtrlChar(ch) {
2684
2687
  return ch >= 1 && ch <= 3 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= 18 || ch >= 21 && ch <= 23;
2685
2688
  }
@@ -2747,6 +2750,10 @@ function appendParaText(state, data, resolveControl) {
2747
2750
  i += 14;
2748
2751
  }
2749
2752
  } else if (ch >= 32) {
2753
+ if (ch >= HANCOM_FOLDED_PUA_START && ch <= HANCOM_FOLDED_PUA_END) {
2754
+ result += String.fromCodePoint(ch + HANCOM_FOLDED_PUA_SHIFT);
2755
+ break;
2756
+ }
2750
2757
  if (ch >= 55296 && ch <= 56319 && i + 1 < data.length) {
2751
2758
  const lo = data.readUInt16LE(i);
2752
2759
  if (lo >= 56320 && lo <= 57343) {
@@ -21025,10 +21032,9 @@ function extractFormFields(blocks) {
21025
21032
  const fields = [];
21026
21033
  let totalTables = 0;
21027
21034
  let formTables = 0;
21028
- for (const block of blocks) {
21029
- if (block.type !== "table" || !block.table) continue;
21035
+ for (const table2 of collectTables(blocks)) {
21030
21036
  totalTables++;
21031
- const tableFields = extractFromTable(block.table);
21037
+ const tableFields = extractFromTable(table2);
21032
21038
  if (tableFields.length > 0) {
21033
21039
  formTables++;
21034
21040
  fields.push(...tableFields);
@@ -21043,6 +21049,17 @@ function extractFormFields(blocks) {
21043
21049
  const confidence = totalTables > 0 ? formTables / totalTables : fields.length > 0 ? 0.3 : 0;
21044
21050
  return { fields, confidence: Math.min(confidence, 1) };
21045
21051
  }
21052
+ function collectTables(blocks, out = [], depth = 0) {
21053
+ if (depth > 12) return out;
21054
+ for (const block of blocks) {
21055
+ if (block.type !== "table" || !block.table) continue;
21056
+ out.push(block.table);
21057
+ for (const row of block.table.cells) {
21058
+ for (const cell2 of row) if (cell2?.blocks?.length) collectTables(cell2.blocks, out, depth + 1);
21059
+ }
21060
+ }
21061
+ return out;
21062
+ }
21046
21063
  function extractFromTable(table2) {
21047
21064
  const fields = [];
21048
21065
  if (table2.cols >= 2) {
@@ -21511,17 +21528,17 @@ async function fillHwpx(hwpxBuffer, values, blockedLabels) {
21511
21528
  const matchText = (p) => paraTText(p, xml) ?? p.text;
21512
21529
  const cellLabelText = (cell2) => cell2.paragraphs.filter((p) => !p.inTextbox).map((p) => matchText(p)).join("");
21513
21530
  const allTables = [];
21514
- const collectTables = (tables, depth) => {
21531
+ const collectTables2 = (tables, depth) => {
21515
21532
  if (depth > 16) return;
21516
21533
  for (const t of tables) {
21517
21534
  allTables.push(t);
21518
21535
  for (const row of t.rows) {
21519
- for (const cell2 of row) collectTables(cell2.tables, depth + 1);
21536
+ for (const cell2 of row) collectTables2(cell2.tables, depth + 1);
21520
21537
  }
21521
21538
  }
21522
21539
  };
21523
- collectTables(scan.tables, 0);
21524
- collectTables(scan.orphanTables, 0);
21540
+ collectTables2(scan.tables, 0);
21541
+ collectTables2(scan.orphanTables, 0);
21525
21542
  const patternApplied = /* @__PURE__ */ new Set();
21526
21543
  for (const table2 of allTables) {
21527
21544
  for (const row of table2.rows) {
@@ -24957,10 +24974,13 @@ function footSep(g) {
24957
24974
  const bodyMm = 210 - g.margins.left - g.margins.right;
24958
24975
  return "\u2500".repeat(Math.max(10, Math.round(bodyMm * (46 / 175))));
24959
24976
  }
24977
+ function isInternalApproval(to) {
24978
+ return !!to && /^\s*내\s*부\s*결\s*재/.test(to);
24979
+ }
24960
24980
  function buildDocFoot(g, ids) {
24961
24981
  const f = g.docFoot;
24962
24982
  const out = [blank()];
24963
- if (f.sender) {
24983
+ if (f.sender && !isInternalApproval(g.docHead?.to)) {
24964
24984
  out.push(para(f.sender, GONGMUN_CENTER, ids.sender), blank());
24965
24985
  }
24966
24986
  const foot = (text) => para(text, GONGMUN_TBL_LEFT, ids.foot);
@@ -26412,6 +26432,77 @@ function unknownFontWarnings(fonts) {
26412
26432
  }
26413
26433
 
26414
26434
  // src/hwpx/gongmun-lint.ts
26435
+ var LOANWORD_FIXES = [
26436
+ ["\uCEE8\uD150\uCE20", "\uCF58\uD150\uCE20"],
26437
+ ["\uC5B4\uD50C\uB9AC\uCF00\uC774\uC158", "\uC560\uD50C\uB9AC\uCF00\uC774\uC158"],
26438
+ ["\uBA54\uC138\uC9C0", "\uBA54\uC2DC\uC9C0"],
26439
+ ["\uB9AC\uB354\uC27D", "\uB9AC\uB354\uC2ED"],
26440
+ ["\uC6CC\uD06C\uC0F5", "\uC6CC\uD06C\uC20D"],
26441
+ ["\uC2A4\uCF00\uC974", "\uC2A4\uCF00\uC904"],
26442
+ ["\uC545\uC138\uC0AC\uB9AC", "\uC561\uC138\uC11C\uB9AC"],
26443
+ ["\uB124\uBE44\uAC8C\uC774\uC158", "\uB0B4\uBE44\uAC8C\uC774\uC158"],
26444
+ ["\uD0C0\uAC9F", "\uD0C0\uAE43"],
26445
+ ["\uD654\uC774\uD305", "\uD30C\uC774\uD305"],
26446
+ ["\uBE44\uC9C0\uB2C8\uC2A4", "\uBE44\uC988\uB2C8\uC2A4"],
26447
+ ["\uD504\uB9AC\uC820\uD14C\uC774\uC158", "\uD504\uB808\uC820\uD14C\uC774\uC158"],
26448
+ ["\uB77C\uC774\uC13C\uC2A4", "\uB77C\uC774\uC120\uC2A4"],
26449
+ ["\uCE90\uBE44\uB137", "\uCE90\uBE44\uB2DB"],
26450
+ ["\uB80C\uD2B8\uCE74", "\uB80C\uD130\uCE74"],
26451
+ ["\uD50C\uB7AD\uCE74\uB4DC", "\uD50C\uB798\uCE74\uB4DC"],
26452
+ ["\uD50C\uB79C\uCE74\uB4DC", "\uD50C\uB798\uCE74\uB4DC"],
26453
+ ["\uCEE8\uC149", "\uCF58\uC149\uD2B8"],
26454
+ ["\uC2EC\uBCFC", "\uC2EC\uBC8C"],
26455
+ ["\uCE74\uB2EC\uB85C\uADF8", "\uCE74\uD0C8\uB85C\uADF8"],
26456
+ ["\uD31C\uD50C\uB81B", "\uD338\uD50C\uB9BF"],
26457
+ ["\uD31C\uD50C\uB9BF", "\uD338\uD50C\uB9BF"],
26458
+ ["\uB9AC\uBAA8\uCF58", "\uB9AC\uBAA8\uCEE8"],
26459
+ ["\uC5D0\uC5B4\uCF58", "\uC5D0\uC5B4\uCEE8"],
26460
+ ["\uC54C\uCF5C", "\uC54C\uCF54\uC62C"],
26461
+ ["\uBC1C\uB780\uC2A4", "\uBC38\uB7F0\uC2A4"],
26462
+ ["\uB9E4\uB2C8\uC544", "\uB9C8\uB2C8\uC544"],
26463
+ ["\uCF54\uBA54\uB514", "\uCF54\uBBF8\uB514"],
26464
+ ["\uD310\uB12C", "\uD328\uB110"],
26465
+ ["\uC575\uCF5C", "\uC559\uCF54\uB974"],
26466
+ ["\uB85C\uBCF4\uD2B8", "\uB85C\uBD07"],
26467
+ ["\uBC14\uBCA0\uD050", "\uBC14\uBE44\uD050"],
26468
+ ["\uBD80\uD398", "\uBDD4\uD398"],
26469
+ ["\uCD08\uCF54\uB81B", "\uCD08\uCF5C\uB9BF"],
26470
+ ["\uCE74\uD398\uD2B8", "\uCE74\uD3AB"],
26471
+ ["\uCF00\uC78C", "\uCF00\uC774\uD06C"],
26472
+ ["\uB3C4\uB108\uCE20", "\uB3C4\uB11B"],
26473
+ ["\uC288\uD37C\uB9C8\uCF19", "\uC288\uD37C\uB9C8\uCF13"],
26474
+ ["\uC368\uBE44\uC2A4", "\uC11C\uBE44\uC2A4"],
26475
+ ["\uC13C\uD0C0", "\uC13C\uD130"]
26476
+ ];
26477
+ var LOANWORD_RE = new RegExp(LOANWORD_FIXES.map(([w]) => w).sort((a, b) => b.length - a.length).join("|"), "g");
26478
+ var DISCRIM_FIXES = [
26479
+ ["\uC7A5\uC560\uC790", "\uC7A5\uC560\uC778"],
26480
+ ["\uC7A5\uC560\uC6B0", "\uC7A5\uC560\uC778"],
26481
+ ["\uBD88\uAD6C\uC790", "\uC7A5\uC560\uC778"],
26482
+ ["\uC815\uC2E0\uBC15\uC57D", "\uC9C0\uC801\uC7A5\uC560"],
26483
+ ["\uC815\uC0C1\uC778", "\uBE44\uC7A5\uC560\uC778"],
26484
+ ["\uD3B8\uBD80\uBAA8", "\uD55C\uBD80\uBAA8"],
26485
+ ["\uACB0\uC190\uAC00\uC815", "\uD55C\uBD80\uBAA8\uAC00\uC815"],
26486
+ ["\uBBF8\uB9DD\uC778", "\uACE0\uC778\uC758 \uBC30\uC6B0\uC790"],
26487
+ ["\uD559\uBD80\uD615", "\uD559\uBD80\uBAA8"],
26488
+ ["\uBD88\uC6B0\uC774\uC6C3", "\uC5B4\uB824\uC6B4 \uC774\uC6C3"],
26489
+ ["\uC720\uBAA8\uCC28", "\uC720\uC544\uCC28"],
26490
+ ["\uC800\uCD9C\uC0B0", "\uC800\uCD9C\uC0DD"],
26491
+ ["\uC7A1\uC0C1\uC778", "\uC774\uB3D9\uC0C1\uC778"],
26492
+ ["\uD30C\uCD9C\uBD80", "\uAC00\uC0AC\uB3C4\uC6B0\uBBF8"],
26493
+ ["\uCCAD\uC18C\uBD80", "\uD658\uACBD\uBBF8\uD654\uC6D0"],
26494
+ ["\uAC04\uD638\uC6D0", "\uAC04\uD638\uC0AC"],
26495
+ ["\uC6B4\uC804\uC218", "\uC6B4\uC804\uAE30\uC0AC"],
26496
+ ["\uB178\uAC00\uB2E4", "\uAC74\uC124\uB178\uB3D9\uC790"],
26497
+ ["\uC870\uC120\uC871", "\uC911\uAD6D\uB3D9\uD3EC"],
26498
+ ["\uB9E4\uB9E4\uCD98", "\uC131\uB9E4\uB9E4"],
26499
+ ["\uC0AC\uC0DD\uC544", "\uD63C\uC678\uC790"],
26500
+ ["\uBC99\uC5B4\uB9AC", "\uC5B8\uC5B4\uC7A5\uC560\uC778"],
26501
+ ["\uC808\uB984\uBC1C\uC774", "\uC9C0\uCCB4\uC7A5\uC560\uC778"],
26502
+ ["\uC560\uAFB8\uB208", "\uC2DC\uAC01\uC7A5\uC560\uC778"],
26503
+ ["\uADC0\uBA38\uAC70\uB9AC", "\uCCAD\uAC01\uC7A5\uC560\uC778"]
26504
+ ];
26505
+ var DISCRIM_RE = new RegExp(DISCRIM_FIXES.map(([w]) => w).sort((a, b) => b.length - a.length).join("|"), "g");
26415
26506
  var RULES = [
26416
26507
  // 날짜 ─ 온점 뒤 한 칸, 0 패딩 금지, 연도 4자리, 끝 마침표
26417
26508
  {
@@ -26510,6 +26601,51 @@ var RULES = [
26510
26601
  message: "\uC30D\uC810\uC740 \uC55E\uB9D0\uC5D0 \uBD99\uC774\uACE0 \uB4A4\uB294 \uD55C \uCE78 \uB744\uC6C0",
26511
26602
  suggest: "\uC608) \uC6D0\uC7A5: \uAE40\uAC11\uB3D9"
26512
26603
  },
26604
+ // ── 편람 보강 (v4.12.1) — pyhwpxlib Gongmun 검사·hwpx-skill gonmun_lint 대조로 빈 축 보충 ──
26605
+ // 금액 한글 병기 — 규정 시행규칙 제2조: 아라비아 숫자 다음 괄호 안에 한글로 적는다
26606
+ {
26607
+ code: "MONEY_NO_HANGUL",
26608
+ severity: "warning",
26609
+ pattern: /금\d[\d,]*원(?![\s]*[((])/g,
26610
+ message: "\uAE08\uC561\uC740 \uC22B\uC790 \uB2E4\uC74C \uAD04\uD638 \uC548\uC5D0 \uD55C\uAE00 \uBCD1\uAE30",
26611
+ suggest: "\uC608) \uAE08113,560\uC6D0(\uAE08\uC77C\uC2ED\uC77C\uB9CC\uC0BC\uCC9C\uC624\uBC31\uC721\uC2ED\uC6D0)"
26612
+ },
26613
+ // 물결표 앞뒤 붙여쓰기 — 기간·범위는 "2. 20.∼2. 24." 처럼 붙여 씀. 숫자·날짜·시각 범위(앞은 숫자·
26614
+ // 온점·괄호·년월일시분, 뒤는 숫자·연도 생략부호)에만 건다 — "기간( 부터 ~ 까지)" 기입란·"~ ※ 비고"·
26615
+ // "~ 수리완료시까지" 처럼 낱말이 붙는 물결표는 범위 표기가 아니다 (v4.12.2, 별지서식 47→30·기안문 32→27 실측)
26616
+ {
26617
+ code: "TILDE_SPACE",
26618
+ severity: "warning",
26619
+ pattern: /(?<=[\d.)일월년시분’'])[ \t]+[∼~~]|[∼~~][ \t]+(?=[\d'’])/g,
26620
+ message: "\uBB3C\uACB0\uD45C(\u223C) \uC55E\uB4A4\uB294 \uBD99\uC5EC \uC500",
26621
+ suggest: "\uC608) 2. 20.\u223C2. 24., 09:00\u223C18:00"
26622
+ },
26623
+ // 두음법칙 — 어두의 "년도·년간·년말…" 은 "연도·연간·연말" (숫자 뒤 '2026년도' 는 정상). 서식의
26624
+ // 기입란(" 년도", "( 년간)", "2026 년도")과 셀 하나가 "년도" 뿐인 표 머리글은 어두가 아니라
26625
+ // 빈칸 뒤 접미라 제외한다 (v4.12.2, 별지서식 실측 28건 전부 이 꼴·기안문 0건)
26626
+ {
26627
+ code: "DUEUM_ERROR",
26628
+ severity: "warning",
26629
+ pattern: /(?<![가-힣\d])(?<!\d[ \t]{1,3})(?<![((>|][ \t]*)(?<![ \t][ \t])년(?:도별|도|간|말|초|차|세|내)(?![가-힣])(?![ \t]*(?:<\/t[dh]>|\|))/g,
26630
+ message: "\uC5B4\uB450\uC758 '\uB144'\uC740 \uB450\uC74C\uBC95\uCE59\uC5D0 \uB530\uB77C '\uC5F0'\uC73C\uB85C \uC801\uC74C",
26631
+ suggest: "\uC608) \uC5F0\uB3C4, \uC5F0\uAC04, \uC5F0\uB9D0, \uC5F0\uCD08"
26632
+ },
26633
+ // 외래어 표기 — 국립국어원 표기법 기준 흔한 오기 (사전 매칭)
26634
+ {
26635
+ code: "LOANWORD_ERROR",
26636
+ severity: "warning",
26637
+ pattern: LOANWORD_RE,
26638
+ message: "\uC678\uB798\uC5B4 \uD45C\uAE30\uBC95\uC5D0 \uB9DE\uC9C0 \uC54A\uB294 \uD45C\uAE30",
26639
+ suggest: "\uC608) \uCF58\uD150\uCE20\xB7\uC560\uD50C\uB9AC\uCF00\uC774\uC158\xB7\uBA54\uC2DC\uC9C0\xB7\uC6CC\uD06C\uC20D\xB7\uC2A4\uCF00\uC904\xB7\uCF58\uC149\uD2B8"
26640
+ },
26641
+ // 차별·비하 표현 — 행안부 공문서 작성 지침·국립국어원 순화어
26642
+ {
26643
+ code: "DISCRIMINATORY_TERM",
26644
+ severity: "warning",
26645
+ pattern: DISCRIM_RE,
26646
+ message: "\uCC28\uBCC4\xB7\uBE44\uD558 \uD45C\uD604\uC740 \uC21C\uD654\uC5B4\uB85C",
26647
+ suggest: "\uC608) \uC7A5\uC560\uC790\u2192\uC7A5\uC560\uC778, \uD3B8\uBD80\uBAA8\u2192\uD55C\uBD80\uBAA8, \uD559\uBD80\uD615\u2192\uD559\uBD80\uBAA8, \uBBF8\uB9DD\uC778\u2192\uACE0\uC778\uC758 \uBC30\uC6B0\uC790"
26648
+ },
26513
26649
  // ── AI 문체 흔적(슬롭) — 편람 원전 외 kordoc 자체 룰 (v4.9.0) ──────────────
26514
26650
  // 생성형 AI 초안이 공문서로 흘러들 때 남는 기계 문체를 걸러낸다. 조언용 warning.
26515
26651
  {
@@ -26527,7 +26663,7 @@ var RULES = [
26527
26663
  suggest: "\uB9AC\uB4DC\uC5B4\xB7\uD575\uC2EC \uC218\uCE58 \uD55C \uACF3\uB9CC \uAC15\uC870"
26528
26664
  }
26529
26665
  ];
26530
- function lintGongmunText(text) {
26666
+ function lintGongmunText(text, opts) {
26531
26667
  const findings = [];
26532
26668
  let fenceMarker = null;
26533
26669
  const lines = text.split(/\r?\n/);
@@ -26550,13 +26686,29 @@ function lintGongmunText(text) {
26550
26686
  rule: r.code,
26551
26687
  severity: r.severity,
26552
26688
  message: r.message,
26553
- suggest: r.suggest
26689
+ suggest: dictSuggest(r.code, m[0]) ?? r.suggest
26554
26690
  });
26555
26691
  }
26556
26692
  }
26557
26693
  }
26694
+ if (opts?.document && /^\s*붙\s*임(?![가-힣])/m.test(text) && !/끝\.\s*$/m.test(text)) {
26695
+ findings.push({
26696
+ line: lines.length,
26697
+ match: "\uBD99\uC784",
26698
+ rule: "END_MARK_MISSING",
26699
+ severity: "warning",
26700
+ message: "\uBD99\uC784 \uD45C\uC2DC \uB4A4\uC5D0 '\uB05D.' \uD45C\uC2DC\uAC00 \uC5C6\uC74C",
26701
+ suggest: "\uC608) \uBD99\uC784 \uACC4\uD68D\uC11C 1\uBD80. \uB05D."
26702
+ });
26703
+ }
26558
26704
  return findings;
26559
26705
  }
26706
+ function dictSuggest(code, match) {
26707
+ const table2 = code === "LOANWORD_ERROR" ? LOANWORD_FIXES : code === "DISCRIMINATORY_TERM" ? DISCRIM_FIXES : null;
26708
+ if (!table2) return void 0;
26709
+ const hit = table2.find(([w]) => w === match.trim());
26710
+ return hit ? `${hit[0]} \u2192 ${hit[1]}` : void 0;
26711
+ }
26560
26712
  function gongmunLintWarnings(text, limit = 10) {
26561
26713
  const findings = lintGongmunText(text);
26562
26714
  const shown = findings.slice(0, limit).map(
@@ -29579,7 +29731,7 @@ async function dispatch(format, buffer, opts) {
29579
29731
  }
29580
29732
  async function parseImage(buffer, options) {
29581
29733
  try {
29582
- const { parseImageDocument } = await import("./image-ocr-M4RP4INO.js");
29734
+ const { parseImageDocument } = await import("./image-ocr-SO56VETS.js");
29583
29735
  const { blocks, warnings } = await parseImageDocument(buffer, options);
29584
29736
  return {
29585
29737
  success: true,
@@ -29638,7 +29790,7 @@ async function parseHwp(buffer, options) {
29638
29790
  async function parsePdf(buffer, options) {
29639
29791
  let parsePdfDocument;
29640
29792
  try {
29641
- const mod = await import("./parser-NR3XO4SM.js");
29793
+ const mod = await import("./parser-OBHNXEQM.js");
29642
29794
  parsePdfDocument = mod.parsePdfDocument;
29643
29795
  } catch {
29644
29796
  return {
@@ -29789,4 +29941,4 @@ export {
29789
29941
  parseHwpml,
29790
29942
  fillForm
29791
29943
  };
29792
- //# sourceMappingURL=chunk-PFUW4I4I.js.map
29944
+ //# sourceMappingURL=chunk-LD2K4K5V.js.map