kordoc 4.12.2 → 4.13.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 (137) hide show
  1. package/README.md +32 -1
  2. package/dist/{-EZH6NKTE.js → -UZDRUWTX.js} +43 -22
  3. package/dist/{chunk-FBLMVHDK.js → chunk-27QN27I3.js} +2 -2
  4. package/dist/{chunk-MUYU4JI5.js → chunk-2B45S7FM.js} +2 -2
  5. package/dist/{chunk-LD2K4K5V.js → chunk-2RREQZ44.js} +1662 -652
  6. package/dist/chunk-2RREQZ44.js.map +1 -0
  7. package/dist/{chunk-OEYECZGV.js → chunk-3ABHPKYA.js} +10 -6
  8. package/dist/chunk-3ABHPKYA.js.map +1 -0
  9. package/dist/{chunk-QM2RSJ2S.js → chunk-3MCFJIN2.js} +5 -5
  10. package/dist/{chunk-JCMBQC5N.js → chunk-5VHLKNCE.js} +2 -2
  11. package/dist/{chunk-FVBR7SC3.js → chunk-6JXMIX3G.js} +2 -2
  12. package/dist/chunk-6JXMIX3G.js.map +1 -0
  13. package/dist/{chunk-5RPYBC2Q.js → chunk-6NLXGGNH.js} +37 -6
  14. package/dist/chunk-6NLXGGNH.js.map +1 -0
  15. package/dist/{chunk-2B7OIEJJ.js → chunk-AGBFCFQY.js} +10 -6
  16. package/dist/chunk-AGBFCFQY.js.map +1 -0
  17. package/dist/{rasterize-NRWP2C6L.js → chunk-BQLZOQES.js} +22 -6
  18. package/dist/chunk-BQLZOQES.js.map +1 -0
  19. package/dist/{chunk-ONNAHSPV.cjs → chunk-CKMK42FV.cjs} +18 -14
  20. package/dist/chunk-CKMK42FV.cjs.map +1 -0
  21. package/dist/{chunk-T7GRHAIW.cjs → chunk-COUGOFT3.cjs} +1 -1
  22. package/dist/chunk-COUGOFT3.cjs.map +1 -0
  23. package/dist/{chunk-2LO525TL.js → chunk-F3FEIYI7.js} +2 -2
  24. package/dist/{chunk-Q6ETEJFK.js → chunk-GWFX5ZD7.js} +11 -7
  25. package/dist/chunk-GWFX5ZD7.js.map +1 -0
  26. package/dist/{chunk-2HBYWA5X.js → chunk-H5JWPWQP.js} +2 -2
  27. package/dist/{chunk-N3DLQ2YH.js → chunk-HG5LXXCC.js} +1 -1
  28. package/dist/chunk-HG5LXXCC.js.map +1 -0
  29. package/dist/{chunk-KX7IYCCZ.js → chunk-IEJR23OA.js} +3 -3
  30. package/dist/{chunk-7XUXSDH5.js → chunk-ILDTN72S.js} +10 -6
  31. package/dist/chunk-ILDTN72S.js.map +1 -0
  32. package/dist/{chunk-QBCMFNHS.js → chunk-L3CEPNQS.js} +2 -2
  33. package/dist/{chunk-XXDZ2KTW.js → chunk-LP5RTYFM.js} +2 -2
  34. package/dist/{chunk-2LKYJ4G3.cjs → chunk-MCD45IHO.cjs} +6 -6
  35. package/dist/{chunk-2LKYJ4G3.cjs.map → chunk-MCD45IHO.cjs.map} +1 -1
  36. package/dist/{chunk-V5BUPZ6I.cjs → chunk-OJV7HNGJ.cjs} +13 -9
  37. package/dist/chunk-OJV7HNGJ.cjs.map +1 -0
  38. package/dist/{chunk-DBGEUDBY.js → chunk-OSLJ3A6D.js} +2 -2
  39. package/dist/{chunk-2LPBIW2B.cjs → chunk-S2VKZKUX.cjs} +3 -3
  40. package/dist/{chunk-2LPBIW2B.cjs.map → chunk-S2VKZKUX.cjs.map} +1 -1
  41. package/dist/{chunk-IOJX4Q63.js → chunk-T7AFLXGA.js} +786 -19
  42. package/dist/chunk-T7AFLXGA.js.map +1 -0
  43. package/dist/{chunk-UL2MDA5C.js → chunk-TA2LEFOF.js} +3 -3
  44. package/dist/{chunk-62IU4NV3.cjs → chunk-TAYCQE6K.cjs} +2 -2
  45. package/dist/{chunk-62IU4NV3.cjs.map → chunk-TAYCQE6K.cjs.map} +1 -1
  46. package/dist/{chunk-ONQHGZTS.js → chunk-XVIJLHCW.js} +1 -1
  47. package/dist/chunk-XVIJLHCW.js.map +1 -0
  48. package/dist/chunks-G3GK536Y.js +10 -0
  49. package/dist/cli.js +187 -38
  50. package/dist/cli.js.map +1 -1
  51. package/dist/{formula-6RQX4NMJ.js → formula-3T7HQA4O.js} +4 -4
  52. package/dist/{formula-NW33S4TA.js → formula-FWVAOSIK.js} +3 -3
  53. package/dist/{formula-NBEO6CFC.cjs → formula-YALEMZMF.cjs} +9 -9
  54. package/dist/{formula-NBEO6CFC.cjs.map → formula-YALEMZMF.cjs.map} +1 -1
  55. package/dist/{image-ocr-SO56VETS.js → image-ocr-2M7K3CE5.js} +8 -8
  56. package/dist/{image-ocr-V4KY373B.cjs → image-ocr-4EUZIF6M.cjs} +12 -12
  57. package/dist/{image-ocr-V4KY373B.cjs.map → image-ocr-4EUZIF6M.cjs.map} +1 -1
  58. package/dist/{image-ocr-CAVU2TNZ.js → image-ocr-X3I2HUK2.js} +6 -6
  59. package/dist/index.cjs +2349 -576
  60. package/dist/index.cjs.map +1 -1
  61. package/dist/index.d.cts +305 -12
  62. package/dist/index.d.ts +305 -12
  63. package/dist/index.js +1980 -207
  64. package/dist/index.js.map +1 -1
  65. package/dist/mcp.js +109 -35
  66. package/dist/mcp.js.map +1 -1
  67. package/dist/{model-bundle-EIJF34DR.js → model-bundle-XXYZ6ELQ.js} +5 -5
  68. package/dist/{models-6V4CPQXC.js → models-APDSXJW7.js} +5 -5
  69. package/dist/{parser-OMT25WH2.cjs → parser-4KE2FR5F.cjs} +60 -39
  70. package/dist/parser-4KE2FR5F.cjs.map +1 -0
  71. package/dist/{parser-OBHNXEQM.js → parser-T5R4YVZS.js} +32 -11
  72. package/dist/parser-T5R4YVZS.js.map +1 -0
  73. package/dist/{parser-GIREMEPD.js → parser-XKSOS6GY.js} +32 -11
  74. package/dist/parser-XKSOS6GY.js.map +1 -0
  75. package/dist/pdf-ocr-JZKCEKWX.cjs +14 -0
  76. package/dist/{pdf-ocr-TFYVK4FI.cjs.map → pdf-ocr-JZKCEKWX.cjs.map} +1 -1
  77. package/dist/pdf-ocr-X62B7YDV.js +13 -0
  78. package/dist/pdf-ocr-YDJQEGDS.js +16 -0
  79. package/dist/{profile-io-PZVMM66V.js → profile-io-Y24GOHWM.js} +3 -3
  80. package/dist/rasterize-QCOBWHAG.js +13 -0
  81. package/dist/render-DHFQQCSV.js +38 -0
  82. package/dist/seal-UTHFQPLO.js +10 -0
  83. package/dist/seal-UTHFQPLO.js.map +1 -0
  84. package/dist/{setup-V55AJP6H.js → setup-UWX3KH3G.js} +3 -3
  85. package/dist/visual-DF2KSPEC.js +19 -0
  86. package/dist/visual-DF2KSPEC.js.map +1 -0
  87. package/dist/{watch-7CQSMDDP.js → watch-4ZUTMC3Q.js} +15 -13
  88. package/dist/{watch-7CQSMDDP.js.map → watch-4ZUTMC3Q.js.map} +1 -1
  89. package/package.json +1 -1
  90. package/dist/chunk-2B7OIEJJ.js.map +0 -1
  91. package/dist/chunk-5RPYBC2Q.js.map +0 -1
  92. package/dist/chunk-7XUXSDH5.js.map +0 -1
  93. package/dist/chunk-FVBR7SC3.js.map +0 -1
  94. package/dist/chunk-IOJX4Q63.js.map +0 -1
  95. package/dist/chunk-LD2K4K5V.js.map +0 -1
  96. package/dist/chunk-N3DLQ2YH.js.map +0 -1
  97. package/dist/chunk-OEYECZGV.js.map +0 -1
  98. package/dist/chunk-ONNAHSPV.cjs.map +0 -1
  99. package/dist/chunk-ONQHGZTS.js.map +0 -1
  100. package/dist/chunk-Q6ETEJFK.js.map +0 -1
  101. package/dist/chunk-T7GRHAIW.cjs.map +0 -1
  102. package/dist/chunk-V5BUPZ6I.cjs.map +0 -1
  103. package/dist/chunks-TT7ZE5QQ.js +0 -10
  104. package/dist/parser-GIREMEPD.js.map +0 -1
  105. package/dist/parser-OBHNXEQM.js.map +0 -1
  106. package/dist/parser-OMT25WH2.cjs.map +0 -1
  107. package/dist/pdf-ocr-IRXQ5GBM.js +0 -13
  108. package/dist/pdf-ocr-SL4GCOGS.js +0 -16
  109. package/dist/pdf-ocr-TFYVK4FI.cjs +0 -14
  110. package/dist/rasterize-NRWP2C6L.js.map +0 -1
  111. package/dist/render-V5ZPTZQ7.js +0 -10
  112. package/dist/seal-LVG2DGAB.js +0 -10
  113. /package/dist/{-EZH6NKTE.js.map → -UZDRUWTX.js.map} +0 -0
  114. /package/dist/{chunk-FBLMVHDK.js.map → chunk-27QN27I3.js.map} +0 -0
  115. /package/dist/{chunk-MUYU4JI5.js.map → chunk-2B45S7FM.js.map} +0 -0
  116. /package/dist/{chunk-QM2RSJ2S.js.map → chunk-3MCFJIN2.js.map} +0 -0
  117. /package/dist/{chunk-JCMBQC5N.js.map → chunk-5VHLKNCE.js.map} +0 -0
  118. /package/dist/{chunk-2LO525TL.js.map → chunk-F3FEIYI7.js.map} +0 -0
  119. /package/dist/{chunk-2HBYWA5X.js.map → chunk-H5JWPWQP.js.map} +0 -0
  120. /package/dist/{chunk-KX7IYCCZ.js.map → chunk-IEJR23OA.js.map} +0 -0
  121. /package/dist/{chunk-QBCMFNHS.js.map → chunk-L3CEPNQS.js.map} +0 -0
  122. /package/dist/{chunk-XXDZ2KTW.js.map → chunk-LP5RTYFM.js.map} +0 -0
  123. /package/dist/{chunk-DBGEUDBY.js.map → chunk-OSLJ3A6D.js.map} +0 -0
  124. /package/dist/{chunk-UL2MDA5C.js.map → chunk-TA2LEFOF.js.map} +0 -0
  125. /package/dist/{chunks-TT7ZE5QQ.js.map → chunks-G3GK536Y.js.map} +0 -0
  126. /package/dist/{formula-6RQX4NMJ.js.map → formula-3T7HQA4O.js.map} +0 -0
  127. /package/dist/{formula-NW33S4TA.js.map → formula-FWVAOSIK.js.map} +0 -0
  128. /package/dist/{image-ocr-SO56VETS.js.map → image-ocr-2M7K3CE5.js.map} +0 -0
  129. /package/dist/{image-ocr-CAVU2TNZ.js.map → image-ocr-X3I2HUK2.js.map} +0 -0
  130. /package/dist/{model-bundle-EIJF34DR.js.map → model-bundle-XXYZ6ELQ.js.map} +0 -0
  131. /package/dist/{models-6V4CPQXC.js.map → models-APDSXJW7.js.map} +0 -0
  132. /package/dist/{pdf-ocr-IRXQ5GBM.js.map → pdf-ocr-X62B7YDV.js.map} +0 -0
  133. /package/dist/{pdf-ocr-SL4GCOGS.js.map → pdf-ocr-YDJQEGDS.js.map} +0 -0
  134. /package/dist/{profile-io-PZVMM66V.js.map → profile-io-Y24GOHWM.js.map} +0 -0
  135. /package/dist/{render-V5ZPTZQ7.js.map → rasterize-QCOBWHAG.js.map} +0 -0
  136. /package/dist/{seal-LVG2DGAB.js.map → render-DHFQQCSV.js.map} +0 -0
  137. /package/dist/{setup-V55AJP6H.js.map → setup-UWX3KH3G.js.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -88,12 +88,28 @@ interface InlineStyle {
88
88
  fontSize?: number;
89
89
  fontName?: string;
90
90
  }
91
+ type TableClassificationKind = "semantic-table" | "non-tabular-layout" | "uncertain";
92
+ type TableClassificationReason = "repeated-row-schema" | "grid-regularity" | "high-active-density" | "column-type-consistency" | "nested-structure-wrapper" | "span-irregularity" | "spacer-bands" | "extreme-sparsity" | "diagram-context-keyword" | "low-evidence" | "ambiguous-scores";
93
+ /** 휴리스틱 분류 결과 — confidence 는 확률이 아니라 두 점수의 격차 */
94
+ interface TableClassificationSummary {
95
+ kind: TableClassificationKind;
96
+ confidence: number;
97
+ semanticScore: number;
98
+ nonTabularScore: number;
99
+ reasons: TableClassificationReason[];
100
+ }
91
101
  interface IRTable {
92
102
  rows: number;
93
103
  cols: number;
94
104
  cells: IRCell[][];
95
105
  /** 첫 행을 헤더로 렌더링할지 여부 (현재: rows > 1이면 true — 의미적 감지가 아닌 레이아웃 힌트) */
96
106
  hasHeader: boolean;
107
+ /** opt-in 분류(`ParseOptions.classifyTables`) 결과 — #76 */
108
+ classification?: TableClassificationSummary;
109
+ /** 원본 표 식별자(HWPX `hp:tbl id`) — 렌더 region(`RenderRegion.sourceId`)과의 조인 키 */
110
+ sourceId?: string;
111
+ /** 렌더 인프라가 준 페이지 로컬 pt 조각(다중 페이지 표는 여럿) — extractTables 가 채운다 */
112
+ regions?: BoundingBox[];
97
113
  /** 표 캡션 (예: "표 1. 부서별 예산") — v3.0 */
98
114
  caption?: string;
99
115
  /**
@@ -170,6 +186,9 @@ interface ParseOptions {
170
186
  * 기본 false: 마크다운 가독성을 위해 후행 빈 열을 트림.
171
187
  * 양식 인식 경로(parse_form·fill)는 내부적으로 항상 켠다. */
172
188
  keepTrailingEmptyCols?: boolean;
189
+ /** 구조 파싱 뒤 표를 의미표/레이아웃/불확실로 분류해 `IRTable.classification` 에 붙인다 (#76).
190
+ * 기본 false — 기본 parse 출력 불변. 중첩표·셀 blocks·캡션 blocks 까지 재귀, 원문 순서는 바꾸지 않는다. */
191
+ classifyTables?: boolean;
173
192
  /** 빈 문단(텍스트 없는 hp:p) 보존 (#57). 기본 false: 종전대로 빈 문단 제거.
174
193
  * 켜면 본문은 `text: ""` paragraph 블록으로, 표 셀은 빈 줄로 순서대로 보존해
175
194
  * "원문 문단 수 = 줄 수" 대응을 유지한다 (행 줄맞춤 서식 문서용).
@@ -781,6 +800,15 @@ type GongmunNumbering = "standard" | "report" | "gaejosik";
781
800
  type GongmunFont = "myeongjo" | "gothic";
782
801
  /** 프리셋 입력값 — 영문 키 또는 한글 별칭(기안문·보고서·계획서·통지·회의록 등) */
783
802
  type GongmunPresetInput = GongmunPreset | "기안문" | "시행문" | "공문" | "공문서" | "보고서" | "계획서" | "계획" | "통지" | "알림" | "안내" | "회의록" | "개조식" | "개조식보고서" | "정부보고서" | "정부표준개조식보고서" | "보도자료";
803
+ /** 항목부호 단계 하나의 타이포 — 셋 다 선택(미지정=본문 계열 유지) */
804
+ interface GongmunLevelStyle {
805
+ /** 글꼴명 (예: HY견고딕·한컴돋움·휴먼명조) */
806
+ font?: string;
807
+ /** 글자 크기 pt (6~60) */
808
+ pt?: number;
809
+ /** 굵게 */
810
+ bold?: boolean;
811
+ }
784
812
  /** 공문서 모드 옵션 (전부 선택 — 프리셋 기본값을 개별 override) */
785
813
  interface GongmunOptions {
786
814
  /** 문서 종류 프리셋(영문 키 또는 한글 별칭). 기본 'official'(일반 기안문) */
@@ -800,6 +828,7 @@ interface GongmunOptions {
800
828
  cover?: boolean | {
801
829
  date?: string;
802
830
  org?: string;
831
+ dept?: string;
803
832
  };
804
833
  /** 목차 페이지(개조식 프리셋 기본 켜짐) — h2 목록을 Ⅰ Ⅱ Ⅲ…로 자동 생성. false로 끔 */
805
834
  toc?: boolean;
@@ -834,6 +863,14 @@ interface GongmunOptions {
834
863
  };
835
864
  /** 개조식 요소별 글자 크기(pt) 오버라이드 — 미지정 요소는 bodyPt 비례 기본값 */
836
865
  sizes?: GaejosikSizeOverrides;
866
+ /**
867
+ * 항목부호 단계별 위계 타이포(v4.12.3) — depth(0~7)마다 글꼴·크기(pt)·굵기를 지정한다.
868
+ * 실측(실결재 기안문 206 + 보고서 337건): 법정 8단계(1. 가. 1))는 본문과 동일이 90%라 기본은
869
+ * 무변경, □/ㅇ/- 계열 전자결재 기안문은 □=HY견고딕 +2~3pt bold·ㅇ=한컴돋움 bold·-=휴먼명조가
870
+ * 지배 관행이다(docs/gongmunseo-reference.md 2.7). 지정한 단계만 바뀌고 나머지는 본문 계열.
871
+ * 개조식·보고서의 실측 □(HY헤드라인M)·보도자료 각주보다 우선한다(명시 옵션).
872
+ */
873
+ levels?: Record<number | string, GongmunLevelStyle>;
837
874
  /** 쪽번호(하단 중앙 "- 1 -", 표지·목차는 카운트 제외). 기본: 개조식·보고서·계획서 켜짐 */
838
875
  pageNumbers?: boolean;
839
876
  /** 본문 끝 2타+"끝." 표시(행정업무규정). 기본: 기안문(official)만 켜짐 */
@@ -843,11 +880,11 @@ interface GongmunOptions {
843
880
  /** 본문 첫 페이지 제목 박스(개조식) — 목차 뒤 본문 시작에 제목 반복(실측 관행). 기본: 표지 있으면 켜짐 */
844
881
  bodyTitleBox?: boolean;
845
882
  /**
846
- * h2 섹션 제목 말머리 (비개조식 — 개조식 h2는 로마숫자 장 헤더가 대체).
847
- * 'box'=□ 대항목(실측 보고서 양식 관행) / 'number'=아라비아 번호(1. 2. — 공고문 관행)
848
- * / 'none'=말머리 없음. 기본: 보고서·계획서 'box', 공고문 'number', 그 외 'none'.
883
+ * h2 장 제목 표기 (v5): 'band'=로마자 채움 칸 + 제목 띠 표(보고서·계획서 기본 — 계획서 장르 실측 37~39%) /
884
+ * 'roman'=Ⅰ. Ⅱ. 텍스트 / 'number'=1. 2. (통지 기본) / 'box'=장 없이 □ 대항목으로 / 'none'=번호 없음.
885
+ * 기안문 본문의 h2는 항상 법정 1. 항목.
849
886
  */
850
- h2Marker?: "box" | "number" | "none";
887
+ h2Marker?: "band" | "roman" | "box" | "number" | "none";
851
888
  /**
852
889
  * 2단계 항목부호 — 'ㅇ'(이응, 전자결재 기안문·공고문 실측 지배) / '○'(원, 보고서
853
890
  * 양식 계열 실측). 기본: notice·press 'ㅇ', 그 외 '○' (v4.1.0 실결재 60건 분포).
@@ -860,22 +897,29 @@ interface GongmunOptions {
860
897
  * 적용되지 않으므로, 기본 numbering이 report인 plan 프리셋은 numbering:'standard' 병기 필요.
861
898
  */
862
899
  suppressSingle?: boolean;
863
- /** 기안문 두문 — 행정기관명·수신·경유·제목 (별지 제1호서식, official 전용) */
900
+ /** 기안문 두문표 — 행정기관명·(원훈 slogan)·수신·경유·제목 (별지 제1호서식·서울 실결재 6행 표, official 전용) */
864
901
  docHead?: {
865
902
  org?: string;
903
+ slogan?: string;
866
904
  to?: string;
867
905
  via?: string;
868
906
  title?: string;
869
907
  };
870
- /** 기안문 결문 — 발신명의·기안/검토/결재·시행/접수·주소·연락처·공개구분 (official 전용) */
908
+ /**
909
+ * 기안문 결문표 — 발신명의·결재선(기안/검토/결재 또는 approvers 배열 "직위 성명")·협조자·수신자·
910
+ * 시행/접수·우편번호(zip)·주소·홈페이지·전화·전송·이메일·공개구분 (official 전용)
911
+ */
871
912
  docFoot?: {
872
913
  sender?: string;
873
914
  drafter?: string;
874
915
  reviewer?: string;
875
916
  approver?: string;
917
+ approvers?: string[];
876
918
  cooperator?: string;
919
+ recipients?: string;
877
920
  docNum?: string;
878
921
  receive?: string;
922
+ zip?: string;
879
923
  address?: string;
880
924
  site?: string;
881
925
  phone?: string;
@@ -883,6 +927,15 @@ interface GongmunOptions {
883
927
  email?: string;
884
928
  disclosure?: string;
885
929
  };
930
+ /** 보고서 요약 박스(제목표 아래 #DFE6F7 상자, 서울 실결재) — 마크다운 제목 직후 인용문(>)으로도 지정 가능 */
931
+ summary?: string;
932
+ /** 보고서 표지 문서정보표 — 문서번호·결재일자·공개여부·방침번호 (cover와 함께) */
933
+ docInfo?: {
934
+ docNum?: string;
935
+ date?: string;
936
+ disclosure?: string;
937
+ policyNo?: string;
938
+ };
886
939
  /** 업무보고 우상단 보고정보 행 — "(보고일시, 보고자, 연락처)" (실측 t3: 휴먼명조 12pt RIGHT) */
887
940
  reportInfo?: string;
888
941
  /** 공고문 두문·결문 — 공고번호(본문 위)·날짜·발신명의(본문 아래 우측, 실측 바이오헬스 공고) */
@@ -1102,6 +1155,11 @@ interface MarkdownToHwpxOptions {
1102
1155
  * URI는 이 맵 없이도 임베드. 바이트가 없는 url은 종전 placeholder 참조 보존.
1103
1156
  */
1104
1157
  images?: Record<string, Uint8Array | ArrayBuffer>;
1158
+ /**
1159
+ * 경고 수집 싱크 (v5) — 생성기가 조용히 처리한 것(□ 한 줄 축소 한계 초과·제목 축소 등)을
1160
+ * 여기에 push한다. 호출 표면(CLI stderr·MCP 응답)이 노출.
1161
+ */
1162
+ warnings?: string[];
1105
1163
  }
1106
1164
  /**
1107
1165
  * 마크다운 텍스트를 HWPX (ArrayBuffer)로 변환.
@@ -1151,6 +1209,7 @@ declare function unknownFontWarnings(fonts: Record<string, string | undefined>):
1151
1209
  * (v4.0.1). URL 쌍점 오탐 가드 등 일부 보강. v4.12.1 에 금액 한글 병기·물결표·두음법칙·
1152
1210
  * 외래어·차별 표현·"끝." 누락 6룰 보강 (pyhwpxlib Gongmun 검사 항목 대조). 검사는 조언용이다 — 생성은 막지 않고
1153
1211
  * 경고만 낸다 (A2 폰트경고와 같은 원칙). 별도 CLI `kordoc lint`는 error 시 exit 1.
1212
+ * v4.13.0: 하이픈 날짜(2026-07-18) 룰, 금액 한글 병기·하이픈 날짜는 실제 변환값을 제안.
1154
1213
  */
1155
1214
  interface GongmunLintFinding {
1156
1215
  /** 1-based 줄 번호 */
@@ -1248,7 +1307,7 @@ declare const SPACE_EM_FONT = 300;
1248
1307
  * 넓어 함초롬 테이블로 재면 줄당 1~2자 과대적재로 wrap 지점이 어긋난다
1249
1308
  * (bench/verify-linebreak.mjs seoul 코퍼스 실측: fixedPitch 테이블로 74/75 일치).
1250
1309
  */
1251
- type FaceClass = "hcr" | "fixedPitch";
1310
+ type FaceClass = "hcr" | "fixedPitch" | "gothic";
1252
1311
  interface MeasureOptions {
1253
1312
  /** 공백 폭(em×1000). 기본 SPACE_EM_FIXED(500) = useFontSpace 0 */
1254
1313
  spaceEm?: number;
@@ -1730,6 +1789,56 @@ declare function markdownToPdf(markdown: string, options?: PrintOptions): Promis
1730
1789
  /** IRBlock[] → PDF (Buffer). */
1731
1790
  declare function blocksToPdf(blocks: IRBlock[], options?: PrintOptions): Promise<Buffer>;
1732
1791
 
1792
+ /**
1793
+ * 공유 렌더 장면(RenderScene) 계약 — HWPX/HWP5 어댑터가 채우고 SVG·HTML·래스터·PDF·crop 이 소비한다 (#75).
1794
+ *
1795
+ * 좌표 규약: 공개 bbox 는 **pt**, **페이지 로컬**(물리 페이지 좌상단 원점), 페이지 번호 **1-based**.
1796
+ * 한 논리 개체가 여러 페이지에 걸치면 `regions` 에 페이지별 조각을 여럿 둔다(세로 스택 전역 좌표 금지).
1797
+ * region id 는 같은 문서·같은 옵션이면 결정적 — 그리기(문서) 순서로 유형별 일련번호를 매긴다.
1798
+ */
1799
+ type RenderSourceFormat = "hwpx" | "hwp";
1800
+ type RenderObjectType = "paragraph" | "table" | "image" | "shape" | "equation" | "unknown";
1801
+ interface PageBBox {
1802
+ /** 1-based 페이지 */
1803
+ page: number;
1804
+ /** pt, 페이지 로컬, 좌상단 원점 */
1805
+ x: number;
1806
+ y: number;
1807
+ width: number;
1808
+ height: number;
1809
+ }
1810
+ interface RenderRegion {
1811
+ /** 결정적 id — `table-000017` 꼴 */
1812
+ id: string;
1813
+ type: RenderObjectType;
1814
+ /** 첫 조각의 페이지 (편의 필드) */
1815
+ page: number;
1816
+ /** 페이지별 조각 — 한 논리 개체가 여러 물리 페이지에 걸칠 수 있다 */
1817
+ regions: PageBBox[];
1818
+ /** 원본 식별자(HWPX `hp:tbl id` 등) — 있을 때만 */
1819
+ sourceId?: string;
1820
+ /** 중첩 표·셀 안 이미지·문단 안 개체의 부모 region */
1821
+ parentId?: string;
1822
+ }
1823
+ interface ScenePage {
1824
+ page: number;
1825
+ /** pt */
1826
+ width: number;
1827
+ height: number;
1828
+ }
1829
+ interface RenderScene {
1830
+ format: RenderSourceFormat;
1831
+ pages: ScenePage[];
1832
+ regions: RenderRegion[];
1833
+ warnings: string[];
1834
+ stats: {
1835
+ texts: number;
1836
+ tables: number;
1837
+ images: number;
1838
+ shapes: number;
1839
+ };
1840
+ }
1841
+
1733
1842
  /**
1734
1843
  * 레이아웃 보존 렌더 — HWPX 조판 캐시(lineseg·cellAddr·hp:pos)를 SVG 절대배치로 그린다.
1735
1844
  *
@@ -1779,7 +1888,10 @@ interface RenderSvgResult {
1779
1888
  texts: number;
1780
1889
  images: number;
1781
1890
  tables: number;
1891
+ shapes: number;
1782
1892
  };
1893
+ /** 개체 region(페이지 로컬 pt bbox·결정적 id) — #75 */
1894
+ regions: RenderRegion[];
1783
1895
  }
1784
1896
  /**
1785
1897
  * HWPX(한컴 저장본) → 레이아웃 보존 SVG. **전 구역(section*)을 세로 스택으로** 렌더한다.
@@ -1788,6 +1900,191 @@ interface RenderSvgResult {
1788
1900
  */
1789
1901
  declare function renderHwpxToSvg(input: ArrayBuffer | Uint8Array, options?: RenderSvgOptions): Promise<RenderSvgResult>;
1790
1902
 
1903
+ /**
1904
+ * 통합 문서 렌더 API (#75 Task 3·8) — 입력(경로/버퍼) → 포맷 감지 → 어댑터 → RenderScene + 페이지 SVG
1905
+ * → SVG/HTML/PNG/JPEG/PDF 자산. 다운스트림은 RenderScene 만 알면 된다.
1906
+ *
1907
+ * hwpx → HWPX 어댑터(svg-render, 조판 캐시 재생·reflow 폴백)
1908
+ * hwp → HWP5 어댑터는 후속(#75 Task 7) — 지금은 KordocError
1909
+ * 기타 → 미지원
1910
+ */
1911
+
1912
+ type RenderFormat = "svg" | "html" | "png" | "jpeg" | "pdf";
1913
+ interface SceneRenderOptions {
1914
+ /** 1-based 페이지 선택 — [2,3] 또는 "1-3,7". 미지정이면 전 페이지 */
1915
+ pages?: number[] | string;
1916
+ /** 조판 캐시 없는 HWPX 를 순수 TS 조판으로 렌더 (기본 true — 캐시가 있으면 무시) */
1917
+ reflow?: boolean;
1918
+ reflowMode?: WrapMode;
1919
+ highlights?: string[];
1920
+ maxImageBytes?: number;
1921
+ }
1922
+ interface SceneRenderResult {
1923
+ scene: RenderScene;
1924
+ /** 선택된 페이지의 standalone SVG (페이지 로컬 좌표) */
1925
+ pageSvgs: Map<number, string>;
1926
+ }
1927
+ interface RenderDocumentOptions extends SceneRenderOptions {
1928
+ format: RenderFormat;
1929
+ /** 래스터 출력 최대 폭 px */
1930
+ maxWidthPx?: number;
1931
+ /** JPEG 품질 */
1932
+ quality?: number;
1933
+ /** PDF 용 Chromium 실행 파일 */
1934
+ browserExecutablePath?: string;
1935
+ /** HTML/PDF 문서 제목 */
1936
+ title?: string;
1937
+ }
1938
+ interface RenderAsset {
1939
+ format: RenderFormat;
1940
+ /** 페이지 단위 산출은 page, 문서 단위(HTML/PDF)는 없음 */
1941
+ page?: number;
1942
+ data: string | Buffer;
1943
+ /** 픽셀(래스터) 또는 pt(SVG) */
1944
+ width?: number;
1945
+ height?: number;
1946
+ /** 래스터 pt→px 실배율 */
1947
+ scale?: number;
1948
+ mimeType?: string;
1949
+ }
1950
+ interface RenderDocumentResult {
1951
+ scene: RenderScene;
1952
+ assets: RenderAsset[];
1953
+ }
1954
+ type RenderInput = string | ArrayBuffer | Buffer | Uint8Array;
1955
+ /**
1956
+ * 문서 → RenderScene + 선택 페이지 SVG. 페이지 선택은 조립 단계에서 걸러 비선택 페이지의 SVG 문자열을 만들지 않는다.
1957
+ * 선택 결과가 비면(범위 밖) KordocError.
1958
+ */
1959
+ declare function renderDocumentToScene(input: RenderInput, options?: SceneRenderOptions): Promise<SceneRenderResult>;
1960
+ /** 통합 렌더 — 포맷별 자산. 래스터·PDF 는 선택 페이지만 처리한다 */
1961
+ declare function renderDocument(input: RenderInput, options: RenderDocumentOptions): Promise<RenderDocumentResult>;
1962
+
1963
+ /**
1964
+ * 레이아웃 보존 HTML — 페이지별 standalone SVG 를 `.kordoc-page[data-page]` 로 감싼 자급자족 문서 (#75 Task 4).
1965
+ * 의미 HTML(IRBlock → <h1>/<p>/<table>) 이 아니다 — 원본 조판 재현이 목적. CDN·외부 자원 없음.
1966
+ * 인쇄 CSS(@page 크기 = 첫 페이지 크기, 페이지마다 break-after) 를 포함해 PDF 경로가 그대로 소비한다.
1967
+ */
1968
+
1969
+ interface SceneHtmlOptions {
1970
+ /** <title> — 기본 "kordoc" */
1971
+ title?: string;
1972
+ }
1973
+ /**
1974
+ * @param scene 페이지 크기 메타(전 페이지)
1975
+ * @param pageSvgs 페이지 번호 → standalone SVG (선택된 페이지만 있어도 된다 — 있는 페이지만 방출)
1976
+ */
1977
+ declare function renderSceneToHtml(scene: RenderScene, pageSvgs: Map<number, string>, options?: SceneHtmlOptions): string;
1978
+
1979
+ type RasterFormat = "png" | "jpeg";
1980
+
1981
+ /**
1982
+ * region crop (#75 Task 5) — RenderScene 의 페이지 로컬 bbox 를 래스터 실배율로 픽셀 환산해 잘라낸다.
1983
+ * DPI 를 여기서 다시 추정하지 않는다: pixel = pt × rasterize 가 돌려준 scale.
1984
+ * 의미 판단(진짜 표인지 조직도인지)은 하지 않는다 — 렌더러가 표라고 아는 개체를 자르는 것뿐.
1985
+ */
1986
+
1987
+ interface ExtractRegionOptions extends Pick<SceneRenderOptions, "pages" | "reflow" | "reflowMode"> {
1988
+ /** 기본 전 유형 */
1989
+ types?: RenderObjectType[];
1990
+ format?: RasterFormat;
1991
+ /** bbox 둘레 여백(pt) — 페이지 안으로 클램프 */
1992
+ paddingPt?: number;
1993
+ /** 페이지 래스터 최대 폭 px (crop 해상도) */
1994
+ maxWidthPx?: number;
1995
+ quality?: number;
1996
+ /** region 선별 — sourceId·id 로 특정 개체만 자를 때 (extractTables). types 필터 뒤에 적용 */
1997
+ filter?: (region: RenderRegion) => boolean;
1998
+ }
1999
+ interface RegionAsset {
2000
+ region: RenderRegion;
2001
+ page: number;
2002
+ bbox: PageBBox;
2003
+ mimeType: "image/png" | "image/jpeg";
2004
+ data: Buffer;
2005
+ widthPx: number;
2006
+ heightPx: number;
2007
+ }
2008
+ /** 렌더러가 아는 개체(표·이미지·문단·도형)를 페이지 이미지에서 잘라낸다. 페이지당 래스터 1회 */
2009
+ declare function extractRenderedRegions(input: RenderInput, options?: ExtractRegionOptions): Promise<RegionAsset[]>;
2010
+
2011
+ /**
2012
+ * 표 분류기 (#76) — IRTable 이 "데이터 표"인지 "표를 레이아웃 캔버스로 쓴 것"(조직도·비상연락망·체계도)인지 휴리스틱 판정.
2013
+ *
2014
+ * 신호는 두 축. 의미 신호: 반복 행 스키마·격자 규칙성·활성 밀도·열 타입 일관성. 비표 신호: 병합 불규칙·빈 띠(행/열)·
2015
+ * 극단적 희소·중첩 구조 래퍼. 도표 문맥 키워드(조직도 등)는 구조 증거가 있을 때만 가산한다 — "조직도" 한 단어가 정상 표를
2016
+ * 도표로 바꾸면 안 된다. LLM·네트워크 없음. confidence 는 확률이 아니라 두 점수의 격차.
2017
+ */
2018
+
2019
+ interface ClassifyContext {
2020
+ /** 표 앞뒤 문단·캡션 텍스트 — 도표 문맥 키워드 판정용 */
2021
+ nearbyText?: string[];
2022
+ }
2023
+ declare function classifyTable(table: IRTable, ctx?: ClassifyContext): TableClassificationSummary;
2024
+ /** 셀 안 블록에서 표 블록 재귀 수집 (문서 순서) — analyze·visual 이 공유 */
2025
+ declare function collectTableBlocks(blocks: IRBlock[], out?: IRBlock[]): IRBlock[];
2026
+
2027
+ /**
2028
+ * 표 분류 배선 (#76 Task 3·5) — 파싱이 끝난 IRBlock 트리를 재귀하며 `IRTable.classification` 을 붙인다.
2029
+ * 원문 순서·셀 텍스트·캡션은 건드리지 않는다(메타만 추가). 기본 parse 는 이 함수를 부르지 않는다(opt-in).
2030
+ */
2031
+
2032
+ /** 트리 전체 분류(변경은 classification 필드 추가뿐). 같은 배열을 돌려준다 */
2033
+ declare function classifyTableTree(blocks: IRBlock[]): IRBlock[];
2034
+ type TableRepresentation = "gfm" | "html" | "visual";
2035
+ /**
2036
+ * 분류 인식 표현 정책 — `visual` 은 명시 요청(스마트 시각 출력)에서만 나온다. 기본 마크다운 경로는 이 함수를 쓰지 않는다.
2037
+ * 단순 의미표 → gfm(손실 없을 때) · 구조 셀/병합 → html · non-tabular(+smart) → visual · uncertain(+smart) → html(구조)+시각은 호출자
2038
+ */
2039
+ declare function chooseTableRepresentation(table: IRTable, opts?: {
2040
+ smartVisual?: boolean;
2041
+ }): TableRepresentation;
2042
+
2043
+ /** 2-pass colSpan/rowSpan 테이블 빌더 및 Markdown 변환 */
2044
+
2045
+ declare function blocksToMarkdown(blocks: IRBlock[]): string;
2046
+ /**
2047
+ * 셀에 GFM 표 문법으로 담을 수 없는 구조 콘텐츠(중첩표·구분선)가 있는가 (#76 Task 4) — hasNestedTables 의 일반화.
2048
+ * 이미지는 GFM 셀에 `![image](src)` 로 인라인할 수 있어 여기 세지 않는다 — 대신 GFM 경로가 blocks 를 직접 직렬화해
2049
+ * (아래 tableToMarkdown) 병합 없는 단순 표의 셀 이미지가 사라지지 않게 한다. span 문단(왕복 채널)도 GFM 그대로.
2050
+ */
2051
+ declare function hasStructuredCellContent(table: IRTable): boolean;
2052
+
2053
+ /**
2054
+ * 분류된 표 ↔ 렌더 region 조인 (#76 Task 6·7). bbox 는 여기서 계산하지 않는다 — #75 의 RenderRegion.sourceId(hp:tbl id) 로 IRTable.sourceId 를 잇는다.
2055
+ * HWP5 는 렌더 어댑터가 없어 분류만 되고 regions/crops 는 비며 경고를 남긴다.
2056
+ */
2057
+
2058
+ type TableVisualPolicy = "none" | "non-tabular" | "non-tabular-and-uncertain" | "all";
2059
+ interface ExtractTableVisualOptions {
2060
+ /** 어떤 분류에 crop 을 만들지 — 기본 non-tabular-and-uncertain. none 이면 분류·region 만 */
2061
+ policy?: TableVisualPolicy;
2062
+ format?: "png" | "jpeg";
2063
+ paddingPt?: number;
2064
+ /** 페이지 래스터 최대 폭 px */
2065
+ maxWidthPx?: number;
2066
+ }
2067
+ interface ExtractedTableCrop {
2068
+ page: number;
2069
+ bbox: PageBBox;
2070
+ mimeType: "image/png" | "image/jpeg";
2071
+ data: Buffer;
2072
+ }
2073
+ interface ExtractedTable {
2074
+ /** sourceId(HWPX) 또는 문서 순서 `tbl-N` */
2075
+ id: string;
2076
+ page: number;
2077
+ table: IRTable;
2078
+ classification: TableClassificationSummary;
2079
+ sourceId?: string;
2080
+ regions: PageBBox[];
2081
+ crops: ExtractedTableCrop[];
2082
+ /** 표별 경고 — region 미매칭·중복 매칭·HWP5 미지원 */
2083
+ warnings: string[];
2084
+ }
2085
+ /** 문서 → 분류된 표 목록(+HWPX 는 region·crop). 정상 parse 는 래스터하지 않는다 — 이 API 만 명시적으로 */
2086
+ declare function extractTables(input: string | ArrayBuffer | Buffer, options?: ExtractTableVisualOptions): Promise<ExtractedTable[]>;
2087
+
1791
2088
  /** 매직 바이트 기반 파일 포맷 감지 */
1792
2089
 
1793
2090
  /** ZIP 파일 여부: PK\x03\x04 */
@@ -1813,10 +2110,6 @@ declare function detectOle2Format(buffer: ArrayBuffer): "hwp" | "xls" | "unknown
1813
2110
  */
1814
2111
  declare function detectZipFormat(buffer: ArrayBuffer): Promise<"hwpx" | "xlsx" | "docx" | "unknown">;
1815
2112
 
1816
- /** 2-pass colSpan/rowSpan 테이블 빌더 및 Markdown 변환 */
1817
-
1818
- declare function blocksToMarkdown(blocks: IRBlock[]): string;
1819
-
1820
2113
  /**
1821
2114
  * 페이지별 마크다운 사영 (#68)
1822
2115
  *
@@ -1913,4 +2206,4 @@ interface FillFormOutput {
1913
2206
  */
1914
2207
  declare function fillForm(input: string | ArrayBuffer | Buffer, values: Record<string, FillInput>, outputFormat?: FillOutputFormat): Promise<FillFormOutput>;
1915
2208
 
1916
- export { BUILTIN_TEMPLATES, type BlockCapability, type BlockCapabilityInfo, type BlockDiff, type BlockEdit, type BlockSourceRef, type BorderDef, type BorderFillDef, type BoundingBox, type BuiltinTemplate, type CellCapability, type CellContext, type CellDiff, type CellProfile, type CharPrDef, type ChunkOptions, type ClickHereField, DEFAULT_REDACT_RULES, type DiffChangeType, type DiffResult, type DocChunk, type DocumentMetadata, type DocumentQualitySummary, type ErrorCode, type ExtractedImage, type FileType, type FillFormOutput, type FillInput, type FillOutputFormat, type FillResult, type FillValue, type FormField, type FormFieldSchema, type FormFieldType, type FormResult, type FormSchemaResult, type FormatProfile, type GongmunFont, type GongmunLintFinding, type GongmunNumbering, type GongmunOptions, type GongmunPreset, type GongmunPresetInput, type HwpxFillResult, HwpxSession, type HwpxTheme, type IRBlock, type IRBlockType, type IRCell, type IRTable, type ImageData, type InlineStyle, type MarkdownToHwpxOptions, type MeasureOptions, type MuncheLineKind, type MuncheLintFinding, type OcrProvider, type OutlineItem, PRESET_ALIAS, type PageMargin, type PageMarkdown, type PageOptions, type PageQuality, type ParseFailure, type ParseOptions, type ParseResult, type ParseSuccess, type ParseWarning, type PatchOptions, type PatchResult, type PatchSkip, type PlaceSealResult, type PrintOptions, type PrintPreset, type RedactHit, type RedactOptions, type RedactRule, type RedactTextResult, type RenderSvgOptions, type RenderSvgResult, SPACE_EM_FIXED, SPACE_EM_FONT, type ScanCell, type ScanParaKind, type ScanParagraph, type ScanTable, type SealOp, type SealPlacement, type SectionScan, type SpliceEdit, type TRange, type TableProfile, VERSION, type ValidateIssue, type ValidateResult, ValueCursor, type WarningCode, type WatchOptions, type WrapMode, type WrapResult, applySplices, blocksToChunks, blocksToMarkdown, blocksToPages, blocksToPdf, buildParagraphSplices, buildRangeSplices, charWidthEm1000, compare, detectFormat, detectOle2Format, detectZipFormat, diffBlocks, extractClickHereFields, extractFormFields, extractFormSchema, fillForm, fillFormFields, fillHwpx, fillWithUniqueGuard, fitRatioForFewerLines, formatFillValue, gongmunLintWarnings, hwpxToProfile, incompatibleGongmunWarnings, inferFieldType, isHwpxFile, isKnownFont, isLabelCell, isOldHwpFile, isPdfFile, isZipFile, lintGongmunText, lintMuncheText, markdownToHwpx, markdownToPdf, measureTextWidth, muncheLintWarnings, normalizeGongmunPreset, openHwpxDocument, parse, parseDocx, parseHwp, parseHwp3, parseHwpml, parseHwpx, parseImage, parsePdf, parseXls, parseXlsx, patchHwp, patchHwpx, patchHwpxBlocks, placeSealHwpx, readBuiltinTemplate, readBuiltinTemplateSample, redactMarkdown, redactText, renderHtml, renderHwpxToSvg, resolveBuiltinTemplate, scanSectionXml, simulateWrap, simulateWrapKeepWord, unknownFontWarnings, usesGaejosikMunche, validateHwpx };
2209
+ export { BUILTIN_TEMPLATES, type BlockCapability, type BlockCapabilityInfo, type BlockDiff, type BlockEdit, type BlockSourceRef, type BorderDef, type BorderFillDef, type BoundingBox, type BuiltinTemplate, type CellCapability, type CellContext, type CellDiff, type CellProfile, type CharPrDef, type ChunkOptions, type ClassifyContext, type ClickHereField, DEFAULT_REDACT_RULES, type DiffChangeType, type DiffResult, type DocChunk, type DocumentMetadata, type DocumentQualitySummary, type ErrorCode, type ExtractRegionOptions, type ExtractTableVisualOptions, type ExtractedImage, type ExtractedTable, type ExtractedTableCrop, type FileType, type FillFormOutput, type FillInput, type FillOutputFormat, type FillResult, type FillValue, type FormField, type FormFieldSchema, type FormFieldType, type FormResult, type FormSchemaResult, type FormatProfile, type GongmunFont, type GongmunLintFinding, type GongmunNumbering, type GongmunOptions, type GongmunPreset, type GongmunPresetInput, type HwpxFillResult, HwpxSession, type HwpxTheme, type IRBlock, type IRBlockType, type IRCell, type IRTable, type ImageData, type InlineStyle, type MarkdownToHwpxOptions, type MeasureOptions, type MuncheLineKind, type MuncheLintFinding, type OcrProvider, type OutlineItem, PRESET_ALIAS, type PageBBox, type PageMargin, type PageMarkdown, type PageOptions, type PageQuality, type ParseFailure, type ParseOptions, type ParseResult, type ParseSuccess, type ParseWarning, type PatchOptions, type PatchResult, type PatchSkip, type PlaceSealResult, type PrintOptions, type PrintPreset, type RedactHit, type RedactOptions, type RedactRule, type RedactTextResult, type RegionAsset, type RenderAsset, type RenderDocumentOptions, type RenderDocumentResult, type RenderFormat, type RenderObjectType, type RenderRegion, type RenderScene, type RenderSourceFormat, type RenderSvgOptions, type RenderSvgResult, SPACE_EM_FIXED, SPACE_EM_FONT, type ScanCell, type ScanParaKind, type ScanParagraph, type ScanTable, type ScenePage, type SceneRenderOptions, type SceneRenderResult, type SealOp, type SealPlacement, type SectionScan, type SpliceEdit, type TRange, type TableProfile, type TableRepresentation, type TableVisualPolicy, VERSION, type ValidateIssue, type ValidateResult, ValueCursor, type WarningCode, type WatchOptions, type WrapMode, type WrapResult, applySplices, blocksToChunks, blocksToMarkdown, blocksToPages, blocksToPdf, buildParagraphSplices, buildRangeSplices, charWidthEm1000, chooseTableRepresentation, classifyTable, classifyTableTree, collectTableBlocks, compare, detectFormat, detectOle2Format, detectZipFormat, diffBlocks, extractClickHereFields, extractFormFields, extractFormSchema, extractRenderedRegions, extractTables, fillForm, fillFormFields, fillHwpx, fillWithUniqueGuard, fitRatioForFewerLines, formatFillValue, gongmunLintWarnings, hasStructuredCellContent, hwpxToProfile, incompatibleGongmunWarnings, inferFieldType, isHwpxFile, isKnownFont, isLabelCell, isOldHwpFile, isPdfFile, isZipFile, lintGongmunText, lintMuncheText, markdownToHwpx, markdownToPdf, measureTextWidth, muncheLintWarnings, normalizeGongmunPreset, openHwpxDocument, parse, parseDocx, parseHwp, parseHwp3, parseHwpml, parseHwpx, parseImage, parsePdf, parseXls, parseXlsx, patchHwp, patchHwpx, patchHwpxBlocks, placeSealHwpx, readBuiltinTemplate, readBuiltinTemplateSample, redactMarkdown, redactText, renderDocument, renderDocumentToScene, renderHtml, renderHwpxToSvg, renderSceneToHtml, resolveBuiltinTemplate, scanSectionXml, simulateWrap, simulateWrapKeepWord, unknownFontWarnings, usesGaejosikMunche, validateHwpx };