@rhwp/core 0.7.2 → 0.7.3

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rhwp/core",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "description": "HWP/HWPX file parser and renderer — Rust + WebAssembly",
5
5
  "type": "module",
6
6
  "main": "rhwp.js",
package/rhwp.d.ts CHANGED
@@ -252,8 +252,32 @@ export class HwpDocument {
252
252
  * 문서를 HWP 바이너리로 내보낸다.
253
253
  *
254
254
  * Document IR을 HWP 5.0 CFB 바이너리로 직렬화하여 반환한다.
255
+ * HWPX 출처 문서는 `export_hwp_with_adapter` 를 통해 HWPX→HWP IR 매핑 어댑터를
256
+ * 자동 적용하여 한컴 호환성과 자기 재로드 페이지 보존을 보장한다 (#178).
257
+ * HWP 출처는 어댑터가 no-op 이므로 기존 동작과 동일.
255
258
  */
256
259
  exportHwp(): Uint8Array;
260
+ /**
261
+ * 어댑터 적용 + HWP 직렬화 + 자기 재로드 검증을 수행하고 결과를 JSON 으로 반환한다 (#178).
262
+ *
263
+ * 반환 JSON:
264
+ * ```json
265
+ * {
266
+ * "bytesLen": 678912,
267
+ * "pageCountBefore": 9,
268
+ * "pageCountAfter": 9,
269
+ * "recovered": true
270
+ * }
271
+ * ```
272
+ *
273
+ * 본 함수는 검증 메타데이터만 반환하며 bytes 자체는 별도 호출 (`exportHwp`) 로 받아야 한다.
274
+ * 검증과 실제 사용을 분리하여 호출자가 결과에 따라 다른 동작을 취할 수 있도록 한다.
275
+ */
276
+ exportHwpVerify(): string;
277
+ /**
278
+ * Document IR을 HWPX(ZIP+XML)로 직렬화하여 반환한다.
279
+ */
280
+ exportHwpx(): Uint8Array;
257
281
  /**
258
282
  * 선택 영역을 HTML 문자열로 변환한다 (본문).
259
283
  */
@@ -622,6 +646,10 @@ export class HwpDocument {
622
646
  * 투명선 표시 여부를 반환한다.
623
647
  */
624
648
  getShowTransparentBorders(): boolean;
649
+ /**
650
+ * 원본 파일 형식을 반환한다 ("hwp" 또는 "hwpx").
651
+ */
652
+ getSourceFormat(): string;
625
653
  /**
626
654
  * 특정 문단의 스타일을 조회한다.
627
655
  *
@@ -690,6 +718,36 @@ export class HwpDocument {
690
718
  * 문단에서 텍스트 부분 문자열을 반환한다 (Undo용 텍스트 보존).
691
719
  */
692
720
  getTextRange(section_idx: number, para_idx: number, char_offset: number, count: number): string;
721
+ /**
722
+ * HWPX 비표준 감지 경고를 JSON 문자열로 반환한다 (#177).
723
+ *
724
+ * ## 반환 형식
725
+ *
726
+ * ```json
727
+ * {
728
+ * "count": 3,
729
+ * "summary": {
730
+ * "lineseg 배열이 비어있음": 1,
731
+ * "lineseg 가 미계산 상태 (line_height=0)": 2
732
+ * },
733
+ * "warnings": [
734
+ * {
735
+ * "section": 0,
736
+ * "paragraph": 5,
737
+ * "kind": "LinesegArrayEmpty",
738
+ * "cell": null
739
+ * },
740
+ * {
741
+ * "section": 0,
742
+ * "paragraph": 10,
743
+ * "kind": "LinesegUncomputed",
744
+ * "cell": {"ctrl": 0, "row": 0, "col": 1, "innerPara": 0}
745
+ * }
746
+ * ]
747
+ * }
748
+ * ```
749
+ */
750
+ getValidationWarnings(): string;
693
751
  /**
694
752
  * 선택된 개체들을 하나의 GroupShape로 묶는다.
695
753
  * json: `{"sectionIdx":N, "targets":[{"paraIdx":N,"controlIdx":N},...]}`
@@ -909,6 +967,15 @@ export class HwpDocument {
909
967
  * 반환값: JSON `{"ok":true,"cellParaIdx":<idx>,"charOffset":<offset>}`
910
968
  */
911
969
  pasteInternalInCell(section_idx: number, parent_para_idx: number, control_idx: number, cell_idx: number, cell_para_idx: number, char_offset: number): string;
970
+ /**
971
+ * 사용자 명시 요청에 의한 lineseg 전체 reflow (#177).
972
+ *
973
+ * `reflow_zero_height_paragraphs` 의 자동 경로와 달리, "빈 line_segs + text 존재"
974
+ * 케이스까지 포함해 재계산한다. 반환값은 실제로 reflow 된 문단 개수.
975
+ *
976
+ * 호출 이후 렌더 캐시·페이지네이션이 갱신되므로 즉시 렌더링하면 보정된 결과가 보인다.
977
+ */
978
+ reflowLinesegs(): number;
912
979
  /**
913
980
  * 커서 위치의 누름틀 필드를 제거한다 (본문 문단).
914
981
  */
@@ -1242,8 +1309,6 @@ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembl
1242
1309
 
1243
1310
  export interface InitOutput {
1244
1311
  readonly memory: WebAssembly.Memory;
1245
- readonly version: () => [number, number];
1246
- readonly init_panic_hook: () => void;
1247
1312
  readonly __wbg_hwpdocument_free: (a: number, b: number) => void;
1248
1313
  readonly __wbg_hwpviewer_free: (a: number, b: number) => void;
1249
1314
  readonly extractThumbnail: (a: number, b: number) => any;
@@ -1295,6 +1360,8 @@ export interface InitOutput {
1295
1360
  readonly hwpdocument_evaluateTableFormula: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number, number];
1296
1361
  readonly hwpdocument_exportControlHtml: (a: number, b: number, c: number, d: number) => [number, number, number, number];
1297
1362
  readonly hwpdocument_exportHwp: (a: number) => [number, number, number, number];
1363
+ readonly hwpdocument_exportHwpVerify: (a: number) => [number, number, number, number];
1364
+ readonly hwpdocument_exportHwpx: (a: number) => [number, number, number, number];
1298
1365
  readonly hwpdocument_exportSelectionHtml: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
1299
1366
  readonly hwpdocument_exportSelectionInCellHtml: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number, number];
1300
1367
  readonly hwpdocument_findNearestControlBackward: (a: number, b: number, c: number, d: number) => [number, number];
@@ -1370,6 +1437,7 @@ export interface InitOutput {
1370
1437
  readonly hwpdocument_getShapeProperties: (a: number, b: number, c: number, d: number) => [number, number, number, number];
1371
1438
  readonly hwpdocument_getShowControlCodes: (a: number) => number;
1372
1439
  readonly hwpdocument_getShowTransparentBorders: (a: number) => number;
1440
+ readonly hwpdocument_getSourceFormat: (a: number) => [number, number];
1373
1441
  readonly hwpdocument_getStyleAt: (a: number, b: number, c: number) => [number, number];
1374
1442
  readonly hwpdocument_getStyleDetail: (a: number, b: number) => [number, number];
1375
1443
  readonly hwpdocument_getStyleList: (a: number) => [number, number];
@@ -1383,6 +1451,7 @@ export interface InitOutput {
1383
1451
  readonly hwpdocument_getTextInCell: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number];
1384
1452
  readonly hwpdocument_getTextInCellByPath: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
1385
1453
  readonly hwpdocument_getTextRange: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
1454
+ readonly hwpdocument_getValidationWarnings: (a: number) => [number, number];
1386
1455
  readonly hwpdocument_groupShapes: (a: number, b: number, c: number) => [number, number, number, number];
1387
1456
  readonly hwpdocument_hasInternalClipboard: (a: number) => number;
1388
1457
  readonly hwpdocument_hitTest: (a: number, b: number, c: number, d: number) => [number, number, number, number];
@@ -1424,6 +1493,7 @@ export interface InitOutput {
1424
1493
  readonly hwpdocument_pasteHtmlInCell: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number, number];
1425
1494
  readonly hwpdocument_pasteInternal: (a: number, b: number, c: number, d: number) => [number, number, number, number];
1426
1495
  readonly hwpdocument_pasteInternalInCell: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
1496
+ readonly hwpdocument_reflowLinesegs: (a: number) => number;
1427
1497
  readonly hwpdocument_removeFieldAt: (a: number, b: number, c: number, d: number) => [number, number];
1428
1498
  readonly hwpdocument_removeFieldAtInCell: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
1429
1499
  readonly hwpdocument_renameBookmark: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
@@ -1487,6 +1557,8 @@ export interface InitOutput {
1487
1557
  readonly hwpviewer_updateViewport: (a: number, b: number, c: number, d: number, e: number) => void;
1488
1558
  readonly hwpviewer_visiblePages: (a: number) => [number, number];
1489
1559
  readonly hwpviewer_pageCount: (a: number) => number;
1560
+ readonly version: () => [number, number];
1561
+ readonly init_panic_hook: () => void;
1490
1562
  readonly __wbindgen_exn_store: (a: number) => void;
1491
1563
  readonly __externref_table_alloc: () => number;
1492
1564
  readonly __wbindgen_externrefs: WebAssembly.Table;
package/rhwp.js CHANGED
@@ -1151,6 +1151,9 @@ export class HwpDocument {
1151
1151
  * 문서를 HWP 바이너리로 내보낸다.
1152
1152
  *
1153
1153
  * Document IR을 HWP 5.0 CFB 바이너리로 직렬화하여 반환한다.
1154
+ * HWPX 출처 문서는 `export_hwp_with_adapter` 를 통해 HWPX→HWP IR 매핑 어댑터를
1155
+ * 자동 적용하여 한컴 호환성과 자기 재로드 페이지 보존을 보장한다 (#178).
1156
+ * HWP 출처는 어댑터가 no-op 이므로 기존 동작과 동일.
1154
1157
  * @returns {Uint8Array}
1155
1158
  */
1156
1159
  exportHwp() {
@@ -1162,6 +1165,54 @@ export class HwpDocument {
1162
1165
  wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
1163
1166
  return v1;
1164
1167
  }
1168
+ /**
1169
+ * 어댑터 적용 + HWP 직렬화 + 자기 재로드 검증을 수행하고 결과를 JSON 으로 반환한다 (#178).
1170
+ *
1171
+ * 반환 JSON:
1172
+ * ```json
1173
+ * {
1174
+ * "bytesLen": 678912,
1175
+ * "pageCountBefore": 9,
1176
+ * "pageCountAfter": 9,
1177
+ * "recovered": true
1178
+ * }
1179
+ * ```
1180
+ *
1181
+ * 본 함수는 검증 메타데이터만 반환하며 bytes 자체는 별도 호출 (`exportHwp`) 로 받아야 한다.
1182
+ * 검증과 실제 사용을 분리하여 호출자가 결과에 따라 다른 동작을 취할 수 있도록 한다.
1183
+ * @returns {string}
1184
+ */
1185
+ exportHwpVerify() {
1186
+ let deferred2_0;
1187
+ let deferred2_1;
1188
+ try {
1189
+ const ret = wasm.hwpdocument_exportHwpVerify(this.__wbg_ptr);
1190
+ var ptr1 = ret[0];
1191
+ var len1 = ret[1];
1192
+ if (ret[3]) {
1193
+ ptr1 = 0; len1 = 0;
1194
+ throw takeFromExternrefTable0(ret[2]);
1195
+ }
1196
+ deferred2_0 = ptr1;
1197
+ deferred2_1 = len1;
1198
+ return getStringFromWasm0(ptr1, len1);
1199
+ } finally {
1200
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
1201
+ }
1202
+ }
1203
+ /**
1204
+ * Document IR을 HWPX(ZIP+XML)로 직렬화하여 반환한다.
1205
+ * @returns {Uint8Array}
1206
+ */
1207
+ exportHwpx() {
1208
+ const ret = wasm.hwpdocument_exportHwpx(this.__wbg_ptr);
1209
+ if (ret[3]) {
1210
+ throw takeFromExternrefTable0(ret[2]);
1211
+ }
1212
+ var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
1213
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
1214
+ return v1;
1215
+ }
1165
1216
  /**
1166
1217
  * 선택 영역을 HTML 문자열로 변환한다 (본문).
1167
1218
  * @param {number} section_idx
@@ -2821,6 +2872,22 @@ export class HwpDocument {
2821
2872
  const ret = wasm.hwpdocument_getShowTransparentBorders(this.__wbg_ptr);
2822
2873
  return ret !== 0;
2823
2874
  }
2875
+ /**
2876
+ * 원본 파일 형식을 반환한다 ("hwp" 또는 "hwpx").
2877
+ * @returns {string}
2878
+ */
2879
+ getSourceFormat() {
2880
+ let deferred1_0;
2881
+ let deferred1_1;
2882
+ try {
2883
+ const ret = wasm.hwpdocument_getSourceFormat(this.__wbg_ptr);
2884
+ deferred1_0 = ret[0];
2885
+ deferred1_1 = ret[1];
2886
+ return getStringFromWasm0(ret[0], ret[1]);
2887
+ } finally {
2888
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
2889
+ }
2890
+ }
2824
2891
  /**
2825
2892
  * 특정 문단의 스타일을 조회한다.
2826
2893
  *
@@ -3139,6 +3206,48 @@ export class HwpDocument {
3139
3206
  wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
3140
3207
  }
3141
3208
  }
3209
+ /**
3210
+ * HWPX 비표준 감지 경고를 JSON 문자열로 반환한다 (#177).
3211
+ *
3212
+ * ## 반환 형식
3213
+ *
3214
+ * ```json
3215
+ * {
3216
+ * "count": 3,
3217
+ * "summary": {
3218
+ * "lineseg 배열이 비어있음": 1,
3219
+ * "lineseg 가 미계산 상태 (line_height=0)": 2
3220
+ * },
3221
+ * "warnings": [
3222
+ * {
3223
+ * "section": 0,
3224
+ * "paragraph": 5,
3225
+ * "kind": "LinesegArrayEmpty",
3226
+ * "cell": null
3227
+ * },
3228
+ * {
3229
+ * "section": 0,
3230
+ * "paragraph": 10,
3231
+ * "kind": "LinesegUncomputed",
3232
+ * "cell": {"ctrl": 0, "row": 0, "col": 1, "innerPara": 0}
3233
+ * }
3234
+ * ]
3235
+ * }
3236
+ * ```
3237
+ * @returns {string}
3238
+ */
3239
+ getValidationWarnings() {
3240
+ let deferred1_0;
3241
+ let deferred1_1;
3242
+ try {
3243
+ const ret = wasm.hwpdocument_getValidationWarnings(this.__wbg_ptr);
3244
+ deferred1_0 = ret[0];
3245
+ deferred1_1 = ret[1];
3246
+ return getStringFromWasm0(ret[0], ret[1]);
3247
+ } finally {
3248
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
3249
+ }
3250
+ }
3142
3251
  /**
3143
3252
  * 선택된 개체들을 하나의 GroupShape로 묶는다.
3144
3253
  * json: `{"sectionIdx":N, "targets":[{"paraIdx":N,"controlIdx":N},...]}`
@@ -4252,6 +4361,19 @@ export class HwpDocument {
4252
4361
  wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
4253
4362
  }
4254
4363
  }
4364
+ /**
4365
+ * 사용자 명시 요청에 의한 lineseg 전체 reflow (#177).
4366
+ *
4367
+ * `reflow_zero_height_paragraphs` 의 자동 경로와 달리, "빈 line_segs + text 존재"
4368
+ * 케이스까지 포함해 재계산한다. 반환값은 실제로 reflow 된 문단 개수.
4369
+ *
4370
+ * 호출 이후 렌더 캐시·페이지네이션이 갱신되므로 즉시 렌더링하면 보정된 결과가 보인다.
4371
+ * @returns {number}
4372
+ */
4373
+ reflowLinesegs() {
4374
+ const ret = wasm.hwpdocument_reflowLinesegs(this.__wbg_ptr);
4375
+ return ret >>> 0;
4376
+ }
4255
4377
  /**
4256
4378
  * 커서 위치의 누름틀 필드를 제거한다 (본문 문단).
4257
4379
  * @param {number} section_idx
@@ -5770,7 +5892,7 @@ function __wbg_get_imports() {
5770
5892
  __wbg_lineTo_c9f1e0dd4824ae31: function(arg0, arg1, arg2) {
5771
5893
  arg0.lineTo(arg1, arg2);
5772
5894
  },
5773
- __wbg_measureTextWidth_3f7ab3a9f314ad03: function(arg0, arg1, arg2, arg3) {
5895
+ __wbg_measureTextWidth_0962d94b80b2a16a: function(arg0, arg1, arg2, arg3) {
5774
5896
  const ret = globalThis.measureTextWidth(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
5775
5897
  return ret;
5776
5898
  },
package/rhwp_bg.wasm CHANGED
Binary file
package/rhwp_bg.wasm.d.ts CHANGED
@@ -1,8 +1,6 @@
1
1
  /* tslint:disable */
2
2
  /* eslint-disable */
3
3
  export const memory: WebAssembly.Memory;
4
- export const version: () => [number, number];
5
- export const init_panic_hook: () => void;
6
4
  export const __wbg_hwpdocument_free: (a: number, b: number) => void;
7
5
  export const __wbg_hwpviewer_free: (a: number, b: number) => void;
8
6
  export const extractThumbnail: (a: number, b: number) => any;
@@ -54,6 +52,8 @@ export const hwpdocument_ensureDefaultNumbering: (a: number) => number;
54
52
  export const hwpdocument_evaluateTableFormula: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number, number];
55
53
  export const hwpdocument_exportControlHtml: (a: number, b: number, c: number, d: number) => [number, number, number, number];
56
54
  export const hwpdocument_exportHwp: (a: number) => [number, number, number, number];
55
+ export const hwpdocument_exportHwpVerify: (a: number) => [number, number, number, number];
56
+ export const hwpdocument_exportHwpx: (a: number) => [number, number, number, number];
57
57
  export const hwpdocument_exportSelectionHtml: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
58
58
  export const hwpdocument_exportSelectionInCellHtml: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number, number];
59
59
  export const hwpdocument_findNearestControlBackward: (a: number, b: number, c: number, d: number) => [number, number];
@@ -129,6 +129,7 @@ export const hwpdocument_getSelectionRectsInCell: (a: number, b: number, c: numb
129
129
  export const hwpdocument_getShapeProperties: (a: number, b: number, c: number, d: number) => [number, number, number, number];
130
130
  export const hwpdocument_getShowControlCodes: (a: number) => number;
131
131
  export const hwpdocument_getShowTransparentBorders: (a: number) => number;
132
+ export const hwpdocument_getSourceFormat: (a: number) => [number, number];
132
133
  export const hwpdocument_getStyleAt: (a: number, b: number, c: number) => [number, number];
133
134
  export const hwpdocument_getStyleDetail: (a: number, b: number) => [number, number];
134
135
  export const hwpdocument_getStyleList: (a: number) => [number, number];
@@ -142,6 +143,7 @@ export const hwpdocument_getTextBoxControlIndex: (a: number, b: number, c: numbe
142
143
  export const hwpdocument_getTextInCell: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number];
143
144
  export const hwpdocument_getTextInCellByPath: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
144
145
  export const hwpdocument_getTextRange: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
146
+ export const hwpdocument_getValidationWarnings: (a: number) => [number, number];
145
147
  export const hwpdocument_groupShapes: (a: number, b: number, c: number) => [number, number, number, number];
146
148
  export const hwpdocument_hasInternalClipboard: (a: number) => number;
147
149
  export const hwpdocument_hitTest: (a: number, b: number, c: number, d: number) => [number, number, number, number];
@@ -183,6 +185,7 @@ export const hwpdocument_pasteHtml: (a: number, b: number, c: number, d: number,
183
185
  export const hwpdocument_pasteHtmlInCell: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number, number];
184
186
  export const hwpdocument_pasteInternal: (a: number, b: number, c: number, d: number) => [number, number, number, number];
185
187
  export const hwpdocument_pasteInternalInCell: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
188
+ export const hwpdocument_reflowLinesegs: (a: number) => number;
186
189
  export const hwpdocument_removeFieldAt: (a: number, b: number, c: number, d: number) => [number, number];
187
190
  export const hwpdocument_removeFieldAtInCell: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
188
191
  export const hwpdocument_renameBookmark: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
@@ -246,6 +249,8 @@ export const hwpviewer_setZoom: (a: number, b: number) => void;
246
249
  export const hwpviewer_updateViewport: (a: number, b: number, c: number, d: number, e: number) => void;
247
250
  export const hwpviewer_visiblePages: (a: number) => [number, number];
248
251
  export const hwpviewer_pageCount: (a: number) => number;
252
+ export const version: () => [number, number];
253
+ export const init_panic_hook: () => void;
249
254
  export const __wbindgen_exn_store: (a: number) => void;
250
255
  export const __externref_table_alloc: () => number;
251
256
  export const __wbindgen_externrefs: WebAssembly.Table;