kordoc 3.12.0 → 3.15.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 (48) hide show
  1. package/README.md +21 -1
  2. package/dist/{-OPZIF3QT.js → -EYPKRLMN.js} +13 -7
  3. package/dist/{chunk-ILR7GF3W.js → chunk-734GJLXH.js} +522 -135
  4. package/dist/chunk-734GJLXH.js.map +1 -0
  5. package/dist/chunk-DCZVOIEO.cjs.map +1 -1
  6. package/dist/{chunk-2C5GCXPJ.cjs → chunk-DMBTOJK4.cjs} +5 -5
  7. package/dist/chunk-DMBTOJK4.cjs.map +1 -0
  8. package/dist/chunk-GS7T56RP.cjs.map +1 -1
  9. package/dist/{chunk-RUYSNNYZ.js → chunk-Q3IHI3E6.js} +325 -29
  10. package/dist/chunk-Q3IHI3E6.js.map +1 -0
  11. package/dist/{chunk-BUDM6ULT.js → chunk-Q5ZPWQID.js} +5 -5
  12. package/dist/{chunk-BUDM6ULT.js.map → chunk-Q5ZPWQID.js.map} +1 -1
  13. package/dist/{chunk-7Z43WEML.js → chunk-SCFFABCT.js} +2 -2
  14. package/dist/{chunk-NGKIAZ6G.js → chunk-ZRNYYEE6.js} +5 -5
  15. package/dist/{chunk-NGKIAZ6G.js.map → chunk-ZRNYYEE6.js.map} +1 -1
  16. package/dist/cli.js +71 -10
  17. package/dist/cli.js.map +1 -1
  18. package/dist/formula-5NKVS2LR.cjs.map +1 -1
  19. package/dist/index.cjs +1018 -335
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.cts +80 -6
  22. package/dist/index.d.ts +80 -6
  23. package/dist/index.js +897 -214
  24. package/dist/index.js.map +1 -1
  25. package/dist/mcp.js +33 -10
  26. package/dist/mcp.js.map +1 -1
  27. package/dist/page-range-P7SDW6LR.cjs.map +1 -1
  28. package/dist/{parser-5FSEFR3R.js → parser-76JSTEP3.js} +107 -7
  29. package/dist/parser-76JSTEP3.js.map +1 -0
  30. package/dist/{parser-PCTX7LGN.cjs → parser-O2SD4DFR.cjs} +118 -18
  31. package/dist/parser-O2SD4DFR.cjs.map +1 -0
  32. package/dist/{parser-AWEGMHHV.js → parser-SNBQZO5E.js} +106 -6
  33. package/dist/parser-SNBQZO5E.js.map +1 -0
  34. package/dist/provider-G4C2V2PD.cjs.map +1 -1
  35. package/dist/render-LDI3LO2P.js +9 -0
  36. package/dist/{watch-Y7BAYXJE.js → watch-LEK5U5P6.js} +5 -5
  37. package/package.json +4 -3
  38. package/dist/chunk-2C5GCXPJ.cjs.map +0 -1
  39. package/dist/chunk-ILR7GF3W.js.map +0 -1
  40. package/dist/chunk-RUYSNNYZ.js.map +0 -1
  41. package/dist/parser-5FSEFR3R.js.map +0 -1
  42. package/dist/parser-AWEGMHHV.js.map +0 -1
  43. package/dist/parser-PCTX7LGN.cjs.map +0 -1
  44. package/dist/render-ATQNKOT2.js +0 -9
  45. /package/dist/{-OPZIF3QT.js.map → -EYPKRLMN.js.map} +0 -0
  46. /package/dist/{chunk-7Z43WEML.js.map → chunk-SCFFABCT.js.map} +0 -0
  47. /package/dist/{render-ATQNKOT2.js.map → render-LDI3LO2P.js.map} +0 -0
  48. /package/dist/{watch-Y7BAYXJE.js.map → watch-LEK5U5P6.js.map} +0 -0
package/README.md CHANGED
@@ -63,12 +63,32 @@ Windows 도 자동으로 `cmd /c npx` 래핑. 수동 JSON 편집 불필요. 재
63
63
  * **🔍 신구대조표 자동 생성**: 두 문서의 차이점을 분석하여 무엇이 바뀌었는지 한눈에 보여줍니다. (HWP와 HWPX 간의 비교도 가능!)
64
64
  * **📝 마크다운을 다시 HWPX로**: AI가 작성한 내용을 다시 보고서 양식(`HWPX`)으로 되돌려줍니다. 이제 복사-붙여넣기 노가다에서 해방되세요.
65
65
  * **🔄 서식 보존 무손실 라운드트립 (v3.0)**: 변환된 마크다운을 편집해서 `patchHwpx`(HWPX) / `patchHwp`(HWP 5.x 바이너리)에 넘기면, **원본 서식을 1바이트도 건드리지 않고** 바뀐 문단/표 셀의 텍스트만 원본 안에서 교체합니다. v3.7부터는 **표에 행을 추가/삭제하는 편집**도 원본 서식을 승계하며 반영되고, v3.8부터는 HWP 5.x의 **빈 셀에 값 넣기**도 지원합니다.
66
- * **🖼️ 레이아웃 보존 렌더 (v3.10)**: 조판 엔진 없이 한컴이 저장한 조판 캐시 좌표만으로 결재문서·사진대지의 원본 1페이지 레이아웃을 SVG로 재현합니다. 서버에 한컴 없이 HWPX 미리보기 썸네일을 만들 수 있습니다.
66
+ * **🖼️ 레이아웃 보존 렌더 (v3.10~3.15)**: 한컴이 저장한 조판 캐시 좌표로 원본 레이아웃을 SVG로 재현하고, 캐시가 없는 파일(AI가 만든 HWPX·편집본)은 **순수 TS reflow 엔진**이 직접 조판합니다. 다페이지·표·그리기 도형·검색어 형광펜까지. 서버에 한컴 없이 HWPX 미리보기를 만들 수 있습니다.
67
67
  * **✏️ 양식 자동 채우기**: 공문서 양식 템플릿(신청서, 보고서)에 값을 넣으면 자동으로 빈칸을 채웁니다. 원본 서식(글꼴, 크기, 정렬)을 100% 보존합니다.
68
68
  * **🤖 AI 에이전트 연동 (MCP)**: `Claude`, `Cursor`와 같은 도구에서 직접 `kordoc`을 호출해 문서를 읽고 코딩할 수 있습니다.
69
69
 
70
70
  ---
71
71
 
72
+ ## v3.15.0 변경사항
73
+
74
+ - **🖋️ reflow 렌더 (캐시 없는 파일도 조판)**: `markdownToHwpx` 산출물·AI 생성본·편집본처럼 조판 캐시(linesegarray)가 없어 렌더가 거부되던 HWPX를 `renderHwpxToSvg(buf, { reflow: true })` / `kordoc render --reflow`로 순수 TS 조판합니다. 검증된 줄나눔 엔진(실측 98% 일치) + 실측 세로 모델로 lineseg를 합성해 기존 렌더 파이프(정렬·표·이미지·형광펜·다페이지)를 재사용합니다. 단문단·표 셀·표 밀어내기·자동 페이지 분할. 한컴 저장본은 캐시 재생 그대로(무회귀).
75
+ - **🔺 그리기 도형 렌더**: 사각형·타원·선·다각형·호를 SVG로 그립니다(선 색·굵기·점선, 채움, 크기 스케일). 조직도·화살표 등 "원본과 다르게 보이던" 큰 원인을 해결했습니다.
76
+ - **🚀 persistent 렌더 워커**: `kordoc render-worker`가 프로세스를 유지하며 연속 렌더 요청(stdin NDJSON)을 처리해 node 콜드스타트를 없앱니다(미리보기 앱 연동용).
77
+
78
+ ## v3.14.0 변경사항
79
+
80
+ - **📄 렌더 다페이지 지원**: `kordoc render`가 전 페이지를 세로 스택 SVG로 그립니다(페이지별 흰 배경·경계선·클립, `data-page` 속성, `RenderSvgResult.pageCount`). 기존엔 전 페이지가 첫 장 한 장에 겹쳐 그려졌습니다.
81
+ - **🖍️ 렌더 검색어 형광펜**: `--highlight <쉼표구분어>` / `RenderSvgOptions.highlights` — 텍스트를 매치 경계로 분할해 매치 세그먼트에만 배경을 깝니다(대소문자 무시, `textLength` 동일 계산으로 정렬 오차 없음).
82
+ - **📐 줄 경계 정합**: lineseg `textpos`를 HWP5 문자 스트림 슬롯(컨트롤 8·문자형 컨트롤 1·서로게이트 2슬롯) 기준으로 재구성해, 컨트롤·탭이 섞인 문단에서 첫 줄에 글자가 몰리고 다음 줄이 비던 어긋남을 해결했습니다(데모 1,132개 멀티라인 문단 검증).
83
+ - **🖼️ 이미지 크롭 오판 수정**: `imgClip`을 `imgDim`(내용 상자) 기준으로 해석 — 삽입 후 리사이즈된 이미지(로고 대부분)가 좌상단 코너로 잘못 잘려 깨지던 문제를 해결했습니다(데모 pic 267개 검증).
84
+
85
+ ## v3.13.0 변경사항
86
+
87
+ - **📄 프로즈 박스 감지**: 상단 라벨탭(제목 칩)이 박스 테두리에 걸쳐 만든 가짜 열 위로 본문이 전폭으로 흐르는 표(검정고시 응시자격 박스 등)를 감지해, 셀 경계에서 조각나던 본문을 자연 읽기 순서의 문단으로 복원합니다. 기하(전폭 행 지배)와 텍스트(긴 프로즈 셀)의 교집합에서만 발동해 정규 표는 건드리지 않습니다.
88
+ - **📝 HML 표 캡션 보존**: 표에 딸린 도형 캡션(`※ …참조` 등)이 hwpml 파싱에서 통째로 소실되던 문제를 수정했습니다. 캡션을 표 앞/뒤 문단으로 보존합니다.
89
+
90
+ ---
91
+
72
92
  ## v3.12.0 변경사항
73
93
 
74
94
  - **🏷️ 라벨 헤더 표 강등 면제**: 첫 행이 라벨(채용분야|담당업무|우대조건, 성명|응시분야|비고)인 표가 본문 셀의 ○/ㅇ 항목부호나 빈 기입란 때문에 텍스트 박스로 오인돼 문단으로 강등되던 문제를 수정했습니다. 예산표·업무분장표·양식 표가 표로 살아납니다.
@@ -14,6 +14,8 @@ import {
14
14
  fillForm,
15
15
  fillFormFields,
16
16
  fillHwpx,
17
+ fillWithUniqueGuard,
18
+ formatFillValue,
17
19
  inferFieldType,
18
20
  isLabelCell,
19
21
  markdownToHwpx,
@@ -33,8 +35,9 @@ import {
33
35
  patchHwpx,
34
36
  patchHwpxBlocks,
35
37
  renderHtml,
36
- scanSectionXml
37
- } from "./chunk-RUYSNNYZ.js";
38
+ scanSectionXml,
39
+ validateHwpx
40
+ } from "./chunk-Q3IHI3E6.js";
38
41
  import {
39
42
  detectFormat,
40
43
  detectOle2Format,
@@ -53,14 +56,14 @@ import {
53
56
  renderHwpxToSvg,
54
57
  simulateWrap,
55
58
  simulateWrapKeepWord
56
- } from "./chunk-ILR7GF3W.js";
59
+ } from "./chunk-734GJLXH.js";
57
60
  import {
58
61
  blocksToMarkdown
59
- } from "./chunk-BUDM6ULT.js";
62
+ } from "./chunk-Q5ZPWQID.js";
60
63
  import "./chunk-MOL7MDBG.js";
61
64
  import {
62
65
  VERSION
63
- } from "./chunk-7Z43WEML.js";
66
+ } from "./chunk-SCFFABCT.js";
64
67
  export {
65
68
  HwpxSession,
66
69
  PRESET_ALIAS,
@@ -84,7 +87,9 @@ export {
84
87
  fillForm,
85
88
  fillFormFields,
86
89
  fillHwpx,
90
+ fillWithUniqueGuard,
87
91
  fitRatioForFewerLines,
92
+ formatFillValue,
88
93
  inferFieldType,
89
94
  isHwpxFile,
90
95
  isLabelCell,
@@ -112,6 +117,7 @@ export {
112
117
  renderHwpxToSvg,
113
118
  scanSectionXml,
114
119
  simulateWrap,
115
- simulateWrapKeepWord
120
+ simulateWrapKeepWord,
121
+ validateHwpx
116
122
  };
117
- //# sourceMappingURL=-OPZIF3QT.js.map
123
+ //# sourceMappingURL=-EYPKRLMN.js.map