kordoc 4.24.30 → 4.24.32

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 (171) hide show
  1. package/README.md +6 -6
  2. package/dist/{-LTYXURUV.js → -LUXUXRRP.js} +21 -21
  3. package/dist/{chunk-2P7Y3BT3.js → chunk-2KT3O555.js} +2 -2
  4. package/dist/{chunk-C4NF2E7X.js → chunk-3IYHSDWU.js} +2 -2
  5. package/dist/{chunk-MYYXPR42.js → chunk-43LXQDAF.js} +2 -2
  6. package/dist/{chunk-FICCE4LN.js → chunk-5422GANH.js} +5 -5
  7. package/dist/{chunk-HYACQOK6.js → chunk-5EL3BLQQ.js} +10 -10
  8. package/dist/{chunk-EH744WIF.js → chunk-5VOP7CS4.js} +2 -2
  9. package/dist/{chunk-QIM4I2IO.js → chunk-6P3CSX22.js} +2 -2
  10. package/dist/{chunk-GFV5RSHS.js → chunk-7L6K647Z.js} +3 -3
  11. package/dist/{chunk-CAAW52SA.js → chunk-ACJ2RKB5.js} +2 -2
  12. package/dist/{chunk-EFSZHHEP.cjs → chunk-AFKBT7U7.cjs} +6 -6
  13. package/dist/{chunk-EFSZHHEP.cjs.map → chunk-AFKBT7U7.cjs.map} +1 -1
  14. package/dist/{chunk-JSLRB4XE.js → chunk-BYMJHMCO.js} +2 -2
  15. package/dist/{chunk-4LOXBT7W.js → chunk-CHTHOA5Q.js} +2 -2
  16. package/dist/{chunk-64CA5E3N.js → chunk-CS5HJ33Q.js} +4 -4
  17. package/dist/{chunk-6KXAVROI.js → chunk-EJGNHZH4.js} +2 -2
  18. package/dist/{chunk-AL6DVHWS.js → chunk-EQSZI34W.js} +2 -2
  19. package/dist/{chunk-FW2OQZ3D.cjs → chunk-F2MJ743H.cjs} +3 -3
  20. package/dist/{chunk-FW2OQZ3D.cjs.map → chunk-F2MJ743H.cjs.map} +1 -1
  21. package/dist/{chunk-XXFF4HE4.cjs → chunk-GQ4QXT3L.cjs} +2 -2
  22. package/dist/{chunk-XXFF4HE4.cjs.map → chunk-GQ4QXT3L.cjs.map} +1 -1
  23. package/dist/{chunk-IM66ER3N.js → chunk-GQF5FWHC.js} +6 -6
  24. package/dist/{chunk-KR6UDBIV.js → chunk-H2QIVR7G.js} +2 -2
  25. package/dist/{chunk-AI2YUNVV.js → chunk-HAO3GCFN.js} +2 -2
  26. package/dist/{chunk-44Y7SP3W.js → chunk-HL2MKMAB.js} +2 -2
  27. package/dist/{chunk-CATJO2L2.js → chunk-IHPVJVMY.js} +2 -2
  28. package/dist/{chunk-H6YTDIDW.cjs → chunk-ILRK3SQE.cjs} +98 -98
  29. package/dist/{chunk-H6YTDIDW.cjs.map → chunk-ILRK3SQE.cjs.map} +1 -1
  30. package/dist/{chunk-MTOZEYOT.js → chunk-IVWTLATP.js} +11 -11
  31. package/dist/{chunk-N2Y5LEOQ.js → chunk-IXR4R6WY.js} +2 -2
  32. package/dist/{chunk-JRWQEYSV.cjs → chunk-KCGJYMT5.cjs} +57 -57
  33. package/dist/{chunk-JRWQEYSV.cjs.map → chunk-KCGJYMT5.cjs.map} +1 -1
  34. package/dist/{chunk-SFFX26HF.js → chunk-LC7UADO4.js} +2 -2
  35. package/dist/{chunk-QQXNGBN2.cjs → chunk-M47OMWZB.cjs} +77 -77
  36. package/dist/{chunk-QQXNGBN2.cjs.map → chunk-M47OMWZB.cjs.map} +1 -1
  37. package/dist/{chunk-DBUSSWBU.js → chunk-MQT2KQPZ.js} +56 -21
  38. package/dist/chunk-MQT2KQPZ.js.map +1 -0
  39. package/dist/{chunk-VOF2VCUF.js → chunk-NDY5GTXO.js} +6 -6
  40. package/dist/{chunk-N3LJARDG.js → chunk-NGWZKYCM.js} +15 -15
  41. package/dist/{chunk-L4WWG3U7.js → chunk-NYJFLIIY.js} +4 -4
  42. package/dist/{chunk-TXYE3JUL.js → chunk-SUXMLHGD.js} +5 -5
  43. package/dist/{chunk-SJMAND23.js → chunk-T76RA73M.js} +55 -20
  44. package/dist/chunk-T76RA73M.js.map +1 -0
  45. package/dist/{chunk-VNTU326I.js → chunk-UTG6ZMOQ.js} +3 -3
  46. package/dist/{chunk-PZO3WTII.js → chunk-VC7RNGWI.js} +2 -2
  47. package/dist/{chunk-NLP5AB6W.cjs → chunk-VKALZCFP.cjs} +3 -3
  48. package/dist/{chunk-NLP5AB6W.cjs.map → chunk-VKALZCFP.cjs.map} +1 -1
  49. package/dist/{chunk-WW47MOC6.js → chunk-VNQNBAQR.js} +2 -2
  50. package/dist/{chunk-BVAKONSV.cjs → chunk-WSLTEGNZ.cjs} +134 -99
  51. package/dist/chunk-WSLTEGNZ.cjs.map +1 -0
  52. package/dist/{chunk-ACMWKNEF.js → chunk-XAZ75O4F.js} +3 -3
  53. package/dist/{chunk-WRZDSWMV.js → chunk-XX4RPLJE.js} +2 -2
  54. package/dist/{chunk-7LEWA5WH.js → chunk-ZOJ4Y6FU.js} +3 -3
  55. package/dist/{chunk-XNCPKOIP.js → chunk-ZSRU2NAN.js} +6 -6
  56. package/dist/chunks-KM5LQBRQ.js +11 -0
  57. package/dist/cli.js +43 -43
  58. package/dist/{formula-4IAJ4J5W.js → formula-5EUTAHFF.js} +4 -4
  59. package/dist/{formula-E3VGHFAI.cjs → formula-KUW2TCLV.cjs} +9 -9
  60. package/dist/{formula-E3VGHFAI.cjs.map → formula-KUW2TCLV.cjs.map} +1 -1
  61. package/dist/{formula-NJZUDYQO.js → formula-YHE5IXHF.js} +3 -3
  62. package/dist/generator-MVIHCXCO.cjs +11 -0
  63. package/dist/{generator-SUPBH2Q6.cjs.map → generator-MVIHCXCO.cjs.map} +1 -1
  64. package/dist/generator-PWHCWSNS.js +10 -0
  65. package/dist/generator-S7YCIZY5.js +17 -0
  66. package/dist/{image-ocr-7DKSLHV3.js → image-ocr-G75XSAG3.js} +9 -9
  67. package/dist/{image-ocr-KOZT553E.cjs → image-ocr-T6SWDPCQ.cjs} +17 -17
  68. package/dist/{image-ocr-KOZT553E.cjs.map → image-ocr-T6SWDPCQ.cjs.map} +1 -1
  69. package/dist/{image-ocr-2ZA6RJB2.js → image-ocr-WXIPZM4K.js} +6 -6
  70. package/dist/index.cjs +1105 -1105
  71. package/dist/index.js +9 -9
  72. package/dist/mcp.js +36 -36
  73. package/dist/memo-F25NX6AO.js +17 -0
  74. package/dist/{model-bundle-DFIFP2XF.js → model-bundle-K7TMFTQG.js} +5 -5
  75. package/dist/{models-25SH2DS7.js → models-FC2VFYTT.js} +5 -5
  76. package/dist/{parse-worker-v2-RJ3ED73F.js → parse-worker-v2-XGYCMQX3.js} +22 -22
  77. package/dist/{parser-GBYPD4QF.js → parser-4NZS7RHU.js} +33 -18
  78. package/dist/{parser-GBYPD4QF.js.map → parser-4NZS7RHU.js.map} +1 -1
  79. package/dist/{parser-NEYOWPAK.js → parser-OF5RON3O.js} +30 -15
  80. package/dist/{parser-NEYOWPAK.js.map → parser-OF5RON3O.js.map} +1 -1
  81. package/dist/{parser-3ODQI4QF.cjs → parser-WY2TNR3F.cjs} +178 -163
  82. package/dist/parser-WY2TNR3F.cjs.map +1 -0
  83. package/dist/pdf-ocr-A2XZEFKU.cjs +36 -0
  84. package/dist/{pdf-ocr-76NT4TCS.cjs.map → pdf-ocr-A2XZEFKU.cjs.map} +1 -1
  85. package/dist/{pdf-ocr-5LHY3NXV.js → pdf-ocr-GBAI4WPI.js} +6 -6
  86. package/dist/{pdf-ocr-N6VQ72SP.js → pdf-ocr-PHEITXPB.js} +9 -9
  87. package/dist/{profile-io-WCBBMCOR.js → profile-io-KAWLYNZG.js} +3 -3
  88. package/dist/{rasterize-GD325A5X.js → rasterize-3T32WACR.js} +3 -3
  89. package/dist/{redact-doc-R4F5VYUA.js → redact-doc-SESRIZDG.js} +21 -21
  90. package/dist/{render-7GV7GKZE.js → render-F2Y24CIV.js} +12 -12
  91. package/dist/{rewrite-fallback-STVHEDFQ.js → rewrite-fallback-PA77CDG2.js} +13 -13
  92. package/dist/seal-RL3JRMDU.js +16 -0
  93. package/dist/{setup-EG7ZQNBB.js → setup-3V4TAVDL.js} +3 -3
  94. package/dist/{to-hwpx-2UZJV377.js → to-hwpx-UYEHTR52.js} +7 -7
  95. package/dist/{to-hwpx-XURJVKKH.js → to-hwpx-ZKGWWYLW.js} +4 -4
  96. package/dist/to-hwpx-ZZ6MRK6J.cjs +16 -0
  97. package/dist/{to-hwpx-ZTVZ6SRI.cjs.map → to-hwpx-ZZ6MRK6J.cjs.map} +1 -1
  98. package/dist/visual-CAR6NUV3.js +37 -0
  99. package/dist/{watch-NSVI3VIY.js → watch-EVXHD7FG.js} +22 -22
  100. package/package.json +1 -1
  101. package/dist/chunk-BVAKONSV.cjs.map +0 -1
  102. package/dist/chunk-DBUSSWBU.js.map +0 -1
  103. package/dist/chunk-SJMAND23.js.map +0 -1
  104. package/dist/chunks-EMHL6JYG.js +0 -11
  105. package/dist/generator-GPT76OML.js +0 -17
  106. package/dist/generator-MIX4R7HL.js +0 -10
  107. package/dist/generator-SUPBH2Q6.cjs +0 -11
  108. package/dist/memo-GFUUEHGA.js +0 -17
  109. package/dist/parser-3ODQI4QF.cjs.map +0 -1
  110. package/dist/pdf-ocr-76NT4TCS.cjs +0 -36
  111. package/dist/seal-XTZXAGHU.js +0 -16
  112. package/dist/to-hwpx-ZTVZ6SRI.cjs +0 -16
  113. package/dist/visual-C33QKCQ6.js +0 -37
  114. /package/dist/{-LTYXURUV.js.map → -LUXUXRRP.js.map} +0 -0
  115. /package/dist/{chunk-2P7Y3BT3.js.map → chunk-2KT3O555.js.map} +0 -0
  116. /package/dist/{chunk-C4NF2E7X.js.map → chunk-3IYHSDWU.js.map} +0 -0
  117. /package/dist/{chunk-MYYXPR42.js.map → chunk-43LXQDAF.js.map} +0 -0
  118. /package/dist/{chunk-FICCE4LN.js.map → chunk-5422GANH.js.map} +0 -0
  119. /package/dist/{chunk-HYACQOK6.js.map → chunk-5EL3BLQQ.js.map} +0 -0
  120. /package/dist/{chunk-EH744WIF.js.map → chunk-5VOP7CS4.js.map} +0 -0
  121. /package/dist/{chunk-QIM4I2IO.js.map → chunk-6P3CSX22.js.map} +0 -0
  122. /package/dist/{chunk-GFV5RSHS.js.map → chunk-7L6K647Z.js.map} +0 -0
  123. /package/dist/{chunk-CAAW52SA.js.map → chunk-ACJ2RKB5.js.map} +0 -0
  124. /package/dist/{chunk-JSLRB4XE.js.map → chunk-BYMJHMCO.js.map} +0 -0
  125. /package/dist/{chunk-4LOXBT7W.js.map → chunk-CHTHOA5Q.js.map} +0 -0
  126. /package/dist/{chunk-64CA5E3N.js.map → chunk-CS5HJ33Q.js.map} +0 -0
  127. /package/dist/{chunk-6KXAVROI.js.map → chunk-EJGNHZH4.js.map} +0 -0
  128. /package/dist/{chunk-AL6DVHWS.js.map → chunk-EQSZI34W.js.map} +0 -0
  129. /package/dist/{chunk-IM66ER3N.js.map → chunk-GQF5FWHC.js.map} +0 -0
  130. /package/dist/{chunk-KR6UDBIV.js.map → chunk-H2QIVR7G.js.map} +0 -0
  131. /package/dist/{chunk-AI2YUNVV.js.map → chunk-HAO3GCFN.js.map} +0 -0
  132. /package/dist/{chunk-44Y7SP3W.js.map → chunk-HL2MKMAB.js.map} +0 -0
  133. /package/dist/{chunk-CATJO2L2.js.map → chunk-IHPVJVMY.js.map} +0 -0
  134. /package/dist/{chunk-MTOZEYOT.js.map → chunk-IVWTLATP.js.map} +0 -0
  135. /package/dist/{chunk-N2Y5LEOQ.js.map → chunk-IXR4R6WY.js.map} +0 -0
  136. /package/dist/{chunk-SFFX26HF.js.map → chunk-LC7UADO4.js.map} +0 -0
  137. /package/dist/{chunk-VOF2VCUF.js.map → chunk-NDY5GTXO.js.map} +0 -0
  138. /package/dist/{chunk-N3LJARDG.js.map → chunk-NGWZKYCM.js.map} +0 -0
  139. /package/dist/{chunk-L4WWG3U7.js.map → chunk-NYJFLIIY.js.map} +0 -0
  140. /package/dist/{chunk-TXYE3JUL.js.map → chunk-SUXMLHGD.js.map} +0 -0
  141. /package/dist/{chunk-VNTU326I.js.map → chunk-UTG6ZMOQ.js.map} +0 -0
  142. /package/dist/{chunk-PZO3WTII.js.map → chunk-VC7RNGWI.js.map} +0 -0
  143. /package/dist/{chunk-WW47MOC6.js.map → chunk-VNQNBAQR.js.map} +0 -0
  144. /package/dist/{chunk-ACMWKNEF.js.map → chunk-XAZ75O4F.js.map} +0 -0
  145. /package/dist/{chunk-WRZDSWMV.js.map → chunk-XX4RPLJE.js.map} +0 -0
  146. /package/dist/{chunk-7LEWA5WH.js.map → chunk-ZOJ4Y6FU.js.map} +0 -0
  147. /package/dist/{chunk-XNCPKOIP.js.map → chunk-ZSRU2NAN.js.map} +0 -0
  148. /package/dist/{chunks-EMHL6JYG.js.map → chunks-KM5LQBRQ.js.map} +0 -0
  149. /package/dist/{formula-4IAJ4J5W.js.map → formula-5EUTAHFF.js.map} +0 -0
  150. /package/dist/{formula-NJZUDYQO.js.map → formula-YHE5IXHF.js.map} +0 -0
  151. /package/dist/{generator-GPT76OML.js.map → generator-PWHCWSNS.js.map} +0 -0
  152. /package/dist/{generator-MIX4R7HL.js.map → generator-S7YCIZY5.js.map} +0 -0
  153. /package/dist/{image-ocr-7DKSLHV3.js.map → image-ocr-G75XSAG3.js.map} +0 -0
  154. /package/dist/{image-ocr-2ZA6RJB2.js.map → image-ocr-WXIPZM4K.js.map} +0 -0
  155. /package/dist/{memo-GFUUEHGA.js.map → memo-F25NX6AO.js.map} +0 -0
  156. /package/dist/{model-bundle-DFIFP2XF.js.map → model-bundle-K7TMFTQG.js.map} +0 -0
  157. /package/dist/{models-25SH2DS7.js.map → models-FC2VFYTT.js.map} +0 -0
  158. /package/dist/{parse-worker-v2-RJ3ED73F.js.map → parse-worker-v2-XGYCMQX3.js.map} +0 -0
  159. /package/dist/{pdf-ocr-5LHY3NXV.js.map → pdf-ocr-GBAI4WPI.js.map} +0 -0
  160. /package/dist/{pdf-ocr-N6VQ72SP.js.map → pdf-ocr-PHEITXPB.js.map} +0 -0
  161. /package/dist/{profile-io-WCBBMCOR.js.map → profile-io-KAWLYNZG.js.map} +0 -0
  162. /package/dist/{rasterize-GD325A5X.js.map → rasterize-3T32WACR.js.map} +0 -0
  163. /package/dist/{redact-doc-R4F5VYUA.js.map → redact-doc-SESRIZDG.js.map} +0 -0
  164. /package/dist/{render-7GV7GKZE.js.map → render-F2Y24CIV.js.map} +0 -0
  165. /package/dist/{rewrite-fallback-STVHEDFQ.js.map → rewrite-fallback-PA77CDG2.js.map} +0 -0
  166. /package/dist/{seal-XTZXAGHU.js.map → seal-RL3JRMDU.js.map} +0 -0
  167. /package/dist/{setup-EG7ZQNBB.js.map → setup-3V4TAVDL.js.map} +0 -0
  168. /package/dist/{to-hwpx-2UZJV377.js.map → to-hwpx-UYEHTR52.js.map} +0 -0
  169. /package/dist/{to-hwpx-XURJVKKH.js.map → to-hwpx-ZKGWWYLW.js.map} +0 -0
  170. /package/dist/{visual-C33QKCQ6.js.map → visual-CAR6NUV3.js.map} +0 -0
  171. /package/dist/{watch-NSVI3VIY.js.map → watch-EVXHD7FG.js.map} +0 -0
package/README.md CHANGED
@@ -110,20 +110,20 @@ await writeFile("보고서.hwpx", Buffer.from(hwpx))
110
110
 
111
111
  ## 검증 결과
112
112
 
113
- **4.22.14 · 2026-10-19 검증**(렌더 배치·PDF 글·표·별표는 4.24.24 · 2026-10-30, OCR 은 4.24.30 · 2026-10-31, HWP → HWPX 변환은 4.24.29 · 2026-10-31). 고정 코퍼스와 참조 기준으로 측정한 결과입니다.
113
+ **4.22.14 · 2026-10-19 검증**(렌더 배치·별표는 4.24.24 · 2026-10-30, PDF 글·OCR 은 4.24.32 · 2026-11-01, PDF 표는 4.24.31 · 2026-10-31, HWP → HWPX 변환은 4.24.29 · 2026-10-31). 고정 코퍼스와 참조 기준으로 측정한 결과입니다.
114
114
 
115
115
  | 대상 | 규모 | 결과 |
116
116
  | --- | --- | --- |
117
117
  | HWPX | 2,424문서 · 10,342표 | 표 구조 일치 **10,342/10,342 · 100%** |
118
118
  | HWP 5.x ↔ HWPX | 1,130쌍 · 4,315표 | 짝 문서의 표 구조 일치 **100%** |
119
119
  | HWP 5.x → HWPX 변환 | 한글 저장 짝 264쌍 (속성 대조 232쌍) | 속성 일치 **99.21%** · 완전 일치 **69/232** · 글 **264/264** · 한글 화면 대조 80문서 |
120
- | PDF 글 | 744쌍 | 글자 재현율 **99.883%** · 정확도 **99.678%** · 읽기 순서 **99.312%** · 어절 F1 **99.067%** |
120
+ | PDF 글 | 744쌍 | 글자 재현율 **99.883%** · 정확도 **99.682%** · 읽기 순서 **99.356%** · 어절 F1 **99.071%** |
121
121
  | PDF 표 | 708쌍 · 2,331표 | 표 탐지 **99.83%** · 구조 일치 **98.24%** · 칸 F1 **0.9919** |
122
122
  | HWPX 재조판 | 다중줄 25,187문단 (12개 폴더) | 모든 줄 시작 일치 **24,941/25,187 · 99.02%** |
123
123
  | PDF 중첩표 (텍스트층) | 29문서 · 101표 | 구조·칸 내용 **101/101 · 100%** |
124
124
  | 법령 별표 | 272건 · 346표 | HWP **346/346**, PDF **343/346 · 99.13%** |
125
125
  | PDF 전체 | 1,911문서 중 1,729건 채점 | 글 커버리지 **99.80%** |
126
- | OCR | 53문서 · 102쪽 · 66표 | CER **0.0237** · 글자 재현율 **99.32%** · 표 구조 일치 **34/66** |
126
+ | OCR | 53문서 · 102쪽 · 66표 | CER **0.0239** · 글자 재현율 **99.32%** · 표 구조 일치 **34/66** |
127
127
  | opendataloader-bench | PDF 200문서 | 종합 기본값 **0.964** · OCR 끔 **0.939** |
128
128
  | HWPX 렌더 배치 | 한컴 PDF 짝 1,565문서(쪽 수 일치 1,508) · 글 조각 111,480 · 그림 4,300 | 글 위치(±1.5pt) **106,904 · 95.9%** · 그림 위치(±2pt) **4,213 · 98.0%** |
129
129
 
@@ -131,15 +131,15 @@ await writeFile("보고서.hwpx", Buffer.from(hwpx))
131
131
 
132
132
  ## 최근 업데이트
133
133
 
134
- 최신 배포: **[4.24.30](https://github.com/chrisryugj/kordoc/releases/tag/v4.24.30)** · 2026-10-31
134
+ 최신 배포: **[4.24.32](https://github.com/chrisryugj/kordoc/releases/tag/v4.24.32)** · 2026-11-01
135
135
 
136
136
  | 버전 | 주요 변경 | 수치 변화 |
137
137
  | --- | --- | --- |
138
+ | 4.24.32 | PDF·OCR 두 단: 같은 줄 격자 두 단(속기록·시험지)을 단으로 · 옆 단 머리 문항이 앞 선지 하위 목록이 되던 것 · 짝·홀 쪽에서 칸 순서가 뒤집히는 머리말 상자 걷기 | PDF 글 읽기 순서 99.348% → **99.356%** · 정확도 99.680% → **99.682%** · 어절 F1 99.069% → **99.071%** · OCR 정답(텍스트층) 회의록 두 단이 바로잡혀 CER 0.0237 → 0.0239(정답 변화, 채점 그대로) |
139
+ | 4.24.31 | PDF 읽기 순서: 그림 위주 2-up 쪽 · 결재문서 머리 나란한 표(문서번호 → 결재 칸) · PDF 가짜 표: 고시안 머리 "○○고시 제 호" 아래 본문 · HWP 3 기술 교재 고정폭 낱말 줄 | PDF 글 읽기 순서 99.312% → **99.348%** · 정확도 99.678% → **99.680%** · 표 순서 뒤바뀜 5 → **2** · 그 밖 벤치 지표 그대로 |
138
140
  | 4.24.30 | 파서: 채운 누름틀·하이퍼링크가 든 문단의 굵게·밑줄 표지(보도자료 본문 누름틀 강조가 사라지던 것, HWPX·HWP) · PDF 표: 몇 칸에만 걸린 한컴 클립이 선 표 칸을 빼앗던 것 · to-hwpx: 그리기 선 투명도 | OCR 표 정답의 가짜 표가 빠져 34/67 → **34/66**·CER 0.0244 → **0.0237** · patch 굵은 낱말 넣기 잔차 HWPX 80 → **60**/489 · 벤치 지표 그대로 |
139
141
  | 4.24.29 | to-hwpx: 한글이 저장한 꼴로 — 문단 글 방향(textDir)·같은 문단 모양 합치기·홀수 값 여백·탭의 글자 단위·OLE 이름·메모 확장·옛 판 테두리 0번 등 · patch: 새 글에 표시한 강조(원문에 없던 서식도), 한 문단 여러 곳 고칠 때 사이 글 서식 보존, HTML 표 칸 강조 표지가 글자로 박히던 것, HWP 칸 안 중첩 표 칸 · HWP 파서: 위첨자가 든 굵은 문단 강조 | 변환 속성 일치 0.99194 → **0.99214** · 완전 일치 14 → **69**/232 · patch 굵은 낱말 넣기 잔차 HWPX 241 → **121**/265 · HWP 표 칸 끝 붙이기 83 → **93**/93 · HWP·HWPX parse 대조 다른 단위 118 → **98** · 벤치 지표 그대로 |
140
142
  | 4.24.28 | 메모 읽기·달기(`memos`·`kordoc memo`·MCP `add_memo`, #180) · patch: 굵은 글·위첨자 끝에 붙인 글이 서식을 물려받던 것(HWP·HWPX), 글머리표 문단(#179), HWPX 탭·엔티티·PUA 문단과 HWP PUA·강제 줄바꿈 문단·표 칸은 바뀐 자리만 · to-hwpx: 원·네모 겹치기 번호(#178) · HWP 파서: 굵게·기울임·취소선·밑줄 표지 | patch 검증 잔차 HWPX 45 → **3**/540 · HWP 24 → **4**/140·37 → **0**/605(파서 강조 반영 뒤 기준) · HWP 대체본 원본 서식 90 → **94**/98 · HWP·HWPX parse 대조 다른 단위 390 → **118** · 벤치 지표 그대로 |
141
- | 4.24.27 | 서식 채우기·도장(`fill_form`·`place_seal`): HWP 5.x 서식도 원본 서식 그대로 · patch: HWP 대체본을 원본 서식으로(서식 그대로 바꾼 HWPX 에 반영), 누름틀 자리에 쓴 값은 누름틀에 채움(HWP·HWPX), 굵은 칸 GFM 표·여러 줄 1열 표·같은 글 문단 짝짓기 | patch 편집 반영 HWPX 539 → **540**/540 · 표 칸 465 → **467**/467 · HWP 132 → **140**/140 · HWP 대체본 원본 서식 0 → **90**/98 · 벤치 지표 그대로 |
142
- | 4.24.26 | HWP → HWPX 변환(`kordoc to-hwpx`·MCP `convert_to_hwpx`): HWP 5.x 를 서식 그대로 — 바탕쪽·표·그림·도형·연결 글상자·수식·필드·메모·양식 개체·차트까지 · patch(HWP): 탭·필드가 든 문단도 바뀐 글자만 · 마크다운: 목록 항목 첫머리 표지 이스케이프 | 변환 속성 일치 **0.992** · 글 **264/264**(한글 저장 짝) · 한글 화면 대조 80문서 · patch HWP 123 → **132**/140 · 벤치 지표 그대로 |
143
143
 
144
144
  이전 버전과 상세 내용은 [변경 이력](CHANGELOG.md)에 있습니다.
145
145
 
@@ -53,26 +53,26 @@ import {
53
53
  usesGaejosikMunche,
54
54
  usesLogicStructure,
55
55
  validateHwpx
56
- } from "./chunk-N3LJARDG.js";
56
+ } from "./chunk-NGWZKYCM.js";
57
57
  import {
58
58
  blocksToPages
59
- } from "./chunk-WRZDSWMV.js";
59
+ } from "./chunk-XX4RPLJE.js";
60
60
  import {
61
61
  extractClickHereFields,
62
62
  patchHwp,
63
63
  patchHwpx
64
- } from "./chunk-MTOZEYOT.js";
64
+ } from "./chunk-IVWTLATP.js";
65
65
  import {
66
66
  addMemoHwpx
67
- } from "./chunk-IM66ER3N.js";
67
+ } from "./chunk-GQF5FWHC.js";
68
68
  import {
69
69
  placeSealHwpx
70
- } from "./chunk-TXYE3JUL.js";
71
- import "./chunk-MYYXPR42.js";
70
+ } from "./chunk-SUXMLHGD.js";
71
+ import "./chunk-43LXQDAF.js";
72
72
  import {
73
73
  convertToHwpx,
74
74
  hwpToHwpx
75
- } from "./chunk-VOF2VCUF.js";
75
+ } from "./chunk-NDY5GTXO.js";
76
76
  import {
77
77
  DEFAULT_REDACT_RULES,
78
78
  redactMarkdown,
@@ -80,7 +80,7 @@ import {
80
80
  } from "./chunk-3WSNLH4B.js";
81
81
  import {
82
82
  blocksToChunks
83
- } from "./chunk-44Y7SP3W.js";
83
+ } from "./chunk-HL2MKMAB.js";
84
84
  import {
85
85
  blocksToPdf,
86
86
  extractRenderedRegions,
@@ -91,13 +91,13 @@ import {
91
91
  renderHwp5Pages,
92
92
  renderHwpxToSvg,
93
93
  renderSceneToHtml
94
- } from "./chunk-HYACQOK6.js";
95
- import "./chunk-7LEWA5WH.js";
96
- import "./chunk-PZO3WTII.js";
97
- import "./chunk-FICCE4LN.js";
94
+ } from "./chunk-5EL3BLQQ.js";
95
+ import "./chunk-ZOJ4Y6FU.js";
96
+ import "./chunk-VC7RNGWI.js";
97
+ import "./chunk-5422GANH.js";
98
98
  import "./chunk-VKVDMH7X.js";
99
- import "./chunk-WW47MOC6.js";
100
- import "./chunk-QIM4I2IO.js";
99
+ import "./chunk-VNQNBAQR.js";
100
+ import "./chunk-6P3CSX22.js";
101
101
  import "./chunk-VQFA55IC.js";
102
102
  import {
103
103
  detectFormat,
@@ -119,7 +119,7 @@ import {
119
119
  markdownToHwpx,
120
120
  normalizeGongmunPreset,
121
121
  placeTotalRow
122
- } from "./chunk-XNCPKOIP.js";
122
+ } from "./chunk-ZSRU2NAN.js";
123
123
  import {
124
124
  ValueCursor,
125
125
  applySplices,
@@ -141,20 +141,20 @@ import {
141
141
  measureTextWidth,
142
142
  simulateWrap,
143
143
  simulateWrapKeepWord
144
- } from "./chunk-CATJO2L2.js";
145
- import "./chunk-EH744WIF.js";
144
+ } from "./chunk-IHPVJVMY.js";
145
+ import "./chunk-5VOP7CS4.js";
146
146
  import "./chunk-OFVHQ2TZ.js";
147
147
  import "./chunk-WFKFG2RT.js";
148
- import "./chunk-SFFX26HF.js";
148
+ import "./chunk-LC7UADO4.js";
149
149
  import {
150
150
  blocksToMarkdown,
151
151
  flattenLayoutTables,
152
152
  hasStructuredCellContent
153
- } from "./chunk-N2Y5LEOQ.js";
153
+ } from "./chunk-IXR4R6WY.js";
154
154
  import "./chunk-KFF47XZ7.js";
155
155
  import {
156
156
  VERSION
157
- } from "./chunk-2P7Y3BT3.js";
157
+ } from "./chunk-2KT3O555.js";
158
158
  export {
159
159
  AGENCY_COMMON_NAME,
160
160
  BUILTIN_TEMPLATES,
@@ -268,4 +268,4 @@ export {
268
268
  usesLogicStructure,
269
269
  validateHwpx
270
270
  };
271
- //# sourceMappingURL=-LTYXURUV.js.map
271
+ //# sourceMappingURL=-LUXUXRRP.js.map
@@ -2,7 +2,7 @@
2
2
 
3
3
  // src/utils.ts
4
4
  import { format } from "util";
5
- var VERSION = true ? "4.24.30" : "0.0.0-dev";
5
+ var VERSION = true ? "4.24.32" : "0.0.0-dev";
6
6
  function toArrayBuffer(buf) {
7
7
  if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {
8
8
  return buf.buffer;
@@ -172,4 +172,4 @@ export {
172
172
  classifyError,
173
173
  partExtension
174
174
  };
175
- //# sourceMappingURL=chunk-2P7Y3BT3.js.map
175
+ //# sourceMappingURL=chunk-2KT3O555.js.map
@@ -3,7 +3,7 @@ import {
3
3
  ensureModelsIn,
4
4
  getModelStatusIn,
5
5
  getModelsDir
6
- } from "./chunk-AL6DVHWS.js";
6
+ } from "./chunk-EQSZI34W.js";
7
7
 
8
8
  // src/ocr/models.ts
9
9
  import { join } from "path";
@@ -171,4 +171,4 @@ export {
171
171
  parseCharacterDict,
172
172
  ocrModelPath
173
173
  };
174
- //# sourceMappingURL=chunk-C4NF2E7X.js.map
174
+ //# sourceMappingURL=chunk-3IYHSDWU.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  KordocError
4
- } from "./chunk-2P7Y3BT3.js";
4
+ } from "./chunk-2KT3O555.js";
5
5
 
6
6
  // src/roundtrip/zip-patch.ts
7
7
  import { deflateRawSync } from "zlib";
@@ -233,4 +233,4 @@ export {
233
233
  readZipEntries,
234
234
  patchZipEntries
235
235
  };
236
- //# sourceMappingURL=chunk-MYYXPR42.js.map
236
+ //# sourceMappingURL=chunk-43LXQDAF.js.map
@@ -31,7 +31,7 @@ import {
31
31
  parseFileHeader,
32
32
  readRecords,
33
33
  resolveLiteralLt
34
- } from "./chunk-WW47MOC6.js";
34
+ } from "./chunk-VNQNBAQR.js";
35
35
  import {
36
36
  parsePageRange
37
37
  } from "./chunk-VQFA55IC.js";
@@ -54,7 +54,7 @@ import {
54
54
  HEADING_RATIO_H3,
55
55
  tidyScriptTags,
56
56
  unframeLayoutTables
57
- } from "./chunk-SFFX26HF.js";
57
+ } from "./chunk-LC7UADO4.js";
58
58
  import {
59
59
  MAX_COLS,
60
60
  MAX_ROWS,
@@ -67,7 +67,7 @@ import {
67
67
  flattenLayoutTables,
68
68
  markNonLayoutTable,
69
69
  sanitizeText
70
- } from "./chunk-N2Y5LEOQ.js";
70
+ } from "./chunk-IXR4R6WY.js";
71
71
  import {
72
72
  circledHangul,
73
73
  circledNumber,
@@ -78,7 +78,7 @@ import {
78
78
  import {
79
79
  KordocError,
80
80
  sanitizeHref
81
- } from "./chunk-2P7Y3BT3.js";
81
+ } from "./chunk-2KT3O555.js";
82
82
 
83
83
  // src/memo-notes.ts
84
84
  var squash = (s) => sanitizeText(s).replace(/\s+/g, "");
@@ -2833,4 +2833,4 @@ export {
2833
2833
  parseHwp5Document,
2834
2834
  extractHwp5MetadataOnly
2835
2835
  };
2836
- //# sourceMappingURL=chunk-FICCE4LN.js.map
2836
+ //# sourceMappingURL=chunk-5422GANH.js.map
@@ -3,7 +3,7 @@ import {
3
3
  decryptHwpxInPlace,
4
4
  isEncryptedManifest,
5
5
  lockedHwpxError
6
- } from "./chunk-7LEWA5WH.js";
6
+ } from "./chunk-ZOJ4Y6FU.js";
7
7
  import {
8
8
  DEFAULT_CHAR,
9
9
  DEFAULT_PARA_GEOM,
@@ -12,7 +12,7 @@ import {
12
12
  hwpxAppBuild,
13
13
  hwpxAppMajor,
14
14
  parseRenderStyles
15
- } from "./chunk-PZO3WTII.js";
15
+ } from "./chunk-VC7RNGWI.js";
16
16
  import {
17
17
  detectImageMime,
18
18
  hwpEquationToLatex,
@@ -22,7 +22,7 @@ import {
22
22
  readHwp5DocInfoRecords,
23
23
  readHwp5SectionRecords,
24
24
  readHwp5SectionStreams
25
- } from "./chunk-FICCE4LN.js";
25
+ } from "./chunk-5422GANH.js";
26
26
  import {
27
27
  TAG_CHAR_SHAPE,
28
28
  TAG_CTRL_HEADER,
@@ -39,11 +39,11 @@ import {
39
39
  TAG_TABLE,
40
40
  isExtendedOnlyCtrlChar,
41
41
  parseDocInfo
42
- } from "./chunk-WW47MOC6.js";
42
+ } from "./chunk-VNQNBAQR.js";
43
43
  import {
44
44
  loadSharp,
45
45
  rasterizePageSvg
46
- } from "./chunk-QIM4I2IO.js";
46
+ } from "./chunk-6P3CSX22.js";
47
47
  import {
48
48
  parsePageRange
49
49
  } from "./chunk-VQFA55IC.js";
@@ -67,17 +67,17 @@ import {
67
67
  readSectionNoteFormats,
68
68
  simulateWrap,
69
69
  syntheticBoldEm
70
- } from "./chunk-CATJO2L2.js";
70
+ } from "./chunk-IHPVJVMY.js";
71
71
  import {
72
72
  MAX_DECOMPRESS_SIZE,
73
73
  MAX_ZIP_ENTRIES,
74
74
  createXmlParser,
75
75
  findChildByLocalName,
76
76
  readZipEntry
77
- } from "./chunk-EH744WIF.js";
77
+ } from "./chunk-5VOP7CS4.js";
78
78
  import {
79
79
  blocksToMarkdown
80
- } from "./chunk-N2Y5LEOQ.js";
80
+ } from "./chunk-IXR4R6WY.js";
81
81
  import {
82
82
  mapPuaText
83
83
  } from "./chunk-KFF47XZ7.js";
@@ -88,7 +88,7 @@ import {
88
88
  precheckZipSize,
89
89
  stripDtd,
90
90
  toArrayBuffer
91
- } from "./chunk-2P7Y3BT3.js";
91
+ } from "./chunk-2KT3O555.js";
92
92
 
93
93
  // src/render/svg-render.ts
94
94
  import JSZip from "jszip";
@@ -5730,4 +5730,4 @@ export {
5730
5730
  cropRect,
5731
5731
  extractRenderedRegions
5732
5732
  };
5733
- //# sourceMappingURL=chunk-HYACQOK6.js.map
5733
+ //# sourceMappingURL=chunk-5EL3BLQQ.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  KordocError,
4
4
  unzipLimitBytes
5
- } from "./chunk-2P7Y3BT3.js";
5
+ } from "./chunk-2KT3O555.js";
6
6
 
7
7
  // src/hwpx/parser-shared.ts
8
8
  import { DOMParser } from "@xmldom/xmldom";
@@ -156,4 +156,4 @@ export {
156
156
  createXmlParser,
157
157
  applyPageText
158
158
  };
159
- //# sourceMappingURL=chunk-EH744WIF.js.map
159
+ //# sourceMappingURL=chunk-5VOP7CS4.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  KordocError,
4
4
  OPTIONAL_DEP_INSTALL_HINT
5
- } from "./chunk-2P7Y3BT3.js";
5
+ } from "./chunk-2KT3O555.js";
6
6
 
7
7
  // src/render/rasterize.ts
8
8
  var densityExponent = null;
@@ -88,4 +88,4 @@ export {
88
88
  rasterizeSvg,
89
89
  rasterizePageSvg
90
90
  };
91
- //# sourceMappingURL=chunk-QIM4I2IO.js.map
91
+ //# sourceMappingURL=chunk-6P3CSX22.js.map
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  parse
4
- } from "./chunk-N3LJARDG.js";
4
+ } from "./chunk-NGWZKYCM.js";
5
5
  import {
6
6
  classifyError,
7
7
  sanitizeError,
8
8
  toArrayBuffer
9
- } from "./chunk-2P7Y3BT3.js";
9
+ } from "./chunk-2KT3O555.js";
10
10
 
11
11
  // src/cli/worker-parse.ts
12
12
  import { readFileSync, statSync } from "fs";
@@ -26,4 +26,4 @@ async function parseWorkerFile(absPath, options) {
26
26
  export {
27
27
  parseWorkerFile
28
28
  };
29
- //# sourceMappingURL=chunk-GFV5RSHS.js.map
29
+ //# sourceMappingURL=chunk-7L6K647Z.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  KordocError
4
- } from "./chunk-2P7Y3BT3.js";
4
+ } from "./chunk-2KT3O555.js";
5
5
 
6
6
  // src/shared/offline.ts
7
7
  import { realpathSync } from "fs";
@@ -49,4 +49,4 @@ export {
49
49
  getAccessRoot,
50
50
  assertWithinRoot
51
51
  };
52
- //# sourceMappingURL=chunk-CAAW52SA.js.map
52
+ //# sourceMappingURL=chunk-ACJ2RKB5.js.map
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
3
 
4
- var _chunkXXFF4HE4cjs = require('./chunk-XXFF4HE4.cjs');
4
+ var _chunkGQ4QXT3Lcjs = require('./chunk-GQ4QXT3L.cjs');
5
5
 
6
6
  // src/script-tags.ts
7
7
  var LITERAL_TAG = /<(?=\/?(?:u|sup|sub)>)/g;
@@ -949,7 +949,7 @@ function blocksToMarkdown(blocks, options) {
949
949
  if (_optionalChain([block, 'access', _35 => _35.spans, 'optionalAccess', _36 => _36.length])) {
950
950
  let rendered = spansToMarkdown(block.spans);
951
951
  if (block.href) {
952
- const href = _chunkXXFF4HE4cjs.sanitizeHref.call(void 0, block.href);
952
+ const href = _chunkGQ4QXT3Lcjs.sanitizeHref.call(void 0, block.href);
953
953
  if (href) rendered = `[${rendered}](${href})`;
954
954
  }
955
955
  if (block.footnoteText) rendered += noteTable || escapeGfm(` (\uC8FC: ${block.footnoteText})`);
@@ -957,7 +957,7 @@ function blocksToMarkdown(blocks, options) {
957
957
  continue;
958
958
  }
959
959
  if (block.href) {
960
- const href = _chunkXXFF4HE4cjs.sanitizeHref.call(void 0, block.href);
960
+ const href = _chunkGQ4QXT3Lcjs.sanitizeHref.call(void 0, block.href);
961
961
  if (href) text = `[${text}](${href})`;
962
962
  }
963
963
  if (block.footnoteText && !noteTable) {
@@ -1046,7 +1046,7 @@ function visibleText(b) {
1046
1046
  return _optionalChain([b, 'access', _50 => _50.spans, 'optionalAccess', _51 => _51.some, 'call', _52 => _52((s) => s.placeholder)]) ? b.spans.filter((s) => !s.placeholder).map((s) => s.text).join("") : _nullishCoalesce(b.text, () => ( ""));
1047
1047
  }
1048
1048
  function escapeHtmlCellText(text) {
1049
- return _chunkXXFF4HE4cjs.escapeHtml.call(void 0, text).replace(/(\\)?&lt;(\/?)(u|sup|sub)&gt;/g, (_, esc, sl, tag) => esc ? `&lt;${sl}${tag}&gt;` : `<${sl}${tag}>`);
1049
+ return _chunkGQ4QXT3Lcjs.escapeHtml.call(void 0, text).replace(/(\\)?&lt;(\/?)(u|sup|sub)&gt;/g, (_, esc, sl, tag) => esc ? `&lt;${sl}${tag}&gt;` : `<${sl}${tag}>`);
1050
1050
  }
1051
1051
  function cellInnerHtml(cell) {
1052
1052
  if (_optionalChain([cell, 'access', _53 => _53.blocks, 'optionalAccess', _54 => _54.length])) {
@@ -1055,7 +1055,7 @@ function cellInnerHtml(cell) {
1055
1055
  const cap = captionToHtml(b.table);
1056
1056
  return (cap ? cap + "<br>" : "") + tableToHtml(b.table);
1057
1057
  }
1058
- if (b.type === "image" && b.text) return `<img src="${_chunkXXFF4HE4cjs.escapeHtml.call(void 0, b.text, true)}" alt="image">`;
1058
+ if (b.type === "image" && b.text) return `<img src="${_chunkGQ4QXT3Lcjs.escapeHtml.call(void 0, b.text, true)}" alt="image">`;
1059
1059
  const note = noteTableHtml(b);
1060
1060
  const t = (sanitizeText(visibleText(b)) + (note ? "" : noteSuffix(b))).trim();
1061
1061
  return ((t ? escapeHtmlCellText(t).replace(/\n/g, "<br>") : "") + note).trim();
@@ -1530,4 +1530,4 @@ var HEADING_RATIO_H3 = 1.15;
1530
1530
 
1531
1531
 
1532
1532
  exports.escapeLiteralTags = escapeLiteralTags; exports.wrapScript = wrapScript; exports.tidyScriptTags = tidyScriptTags; exports.plainScripts = plainScripts; exports.stripScriptTags = stripScriptTags; exports.WINGDINGS = WINGDINGS; exports.hangulOrdinal = hangulOrdinal; exports.circledNumber = circledNumber; exports.circledHangul = circledHangul; exports.hangulAmount = hangulAmount; exports.romanNumeral = romanNumeral; exports.enclosedNumber = enclosedNumber; exports.composeDigits = composeDigits; exports.pairedNumber = pairedNumber; exports.composeText = composeText; exports.mapPuaText = mapPuaText; exports.MAX_COLS = MAX_COLS; exports.MAX_ROWS = MAX_ROWS; exports.MAX_TABLE_CELLS = MAX_TABLE_CELLS; exports.buildTable = buildTable; exports.captionedText = captionedText; exports.convertTableToText = convertTableToText; exports.escapeGfm = escapeGfm; exports.escapeLiteralDollar = escapeLiteralDollar; exports.sanitizeText = sanitizeText; exports.markNonLayoutTable = markNonLayoutTable; exports.flattenLayoutTables = flattenLayoutTables; exports.dedupeRunningHeaders = dedupeRunningHeaders; exports.assignTableIds = assignTableIds; exports.blocksToMarkdown = blocksToMarkdown; exports.hasStructuredCellContent = hasStructuredCellContent; exports.noteSuffix = noteSuffix; exports.noteTableHtml = noteTableHtml; exports.visibleText = visibleText; exports.escapeHtmlCellText = escapeHtmlCellText; exports.hasInlineCellBlocks = hasInlineCellBlocks; exports.cellToMarkdown = cellToMarkdown; exports.CELL_EDGES = CELL_EDGES; exports.CELL_PAGES = CELL_PAGES; exports.CONTENT_CELLS = CONTENT_CELLS; exports.CELL_BASELINES = CELL_BASELINES; exports.toTex = toTex; exports.unframeLayoutTables = unframeLayoutTables; exports.HEADING_RATIO_H1 = HEADING_RATIO_H1; exports.HEADING_RATIO_H2 = HEADING_RATIO_H2; exports.HEADING_RATIO_H3 = HEADING_RATIO_H3;
1533
- //# sourceMappingURL=chunk-EFSZHHEP.cjs.map
1533
+ //# sourceMappingURL=chunk-AFKBT7U7.cjs.map