kordoc 3.3.0 → 3.4.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.
- package/dist/{-RAVJL5UK.js → -56JCPGII.js} +3 -3
- package/dist/{chunk-HNUFTEV5.js → chunk-MHYDBT2Q.js} +2 -2
- package/dist/{chunk-J72F7FIT.js → chunk-YFNBHLLM.js} +222 -63
- package/dist/chunk-YFNBHLLM.js.map +1 -0
- package/dist/{chunk-FUB2BGXV.cjs → chunk-YYKQN7SA.cjs} +2 -2
- package/dist/{chunk-FUB2BGXV.cjs.map → chunk-YYKQN7SA.cjs.map} +1 -1
- package/dist/{chunk-ESBGMBRF.js → chunk-ZPLRG2SJ.js} +2 -2
- package/dist/cli.js +4 -4
- package/dist/index.cjs +351 -192
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +221 -62
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +3 -3
- package/dist/{parser-DADWQYCQ.js → parser-PQDICHD5.js} +2 -2
- package/dist/{parser-FLE2ZPAW.js → parser-VZL3MK5X.js} +2 -2
- package/dist/{parser-YWKNDGKI.cjs → parser-XDW6I25C.cjs} +14 -14
- package/dist/{parser-YWKNDGKI.cjs.map → parser-XDW6I25C.cjs.map} +1 -1
- package/dist/{watch-6QPQU277.js → watch-KERZCCNR.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-J72F7FIT.js.map +0 -1
- /package/dist/{-RAVJL5UK.js.map → -56JCPGII.js.map} +0 -0
- /package/dist/{chunk-HNUFTEV5.js.map → chunk-MHYDBT2Q.js.map} +0 -0
- /package/dist/{chunk-ESBGMBRF.js.map → chunk-ZPLRG2SJ.js.map} +0 -0
- /package/dist/{parser-DADWQYCQ.js.map → parser-PQDICHD5.js.map} +0 -0
- /package/dist/{parser-FLE2ZPAW.js.map → parser-VZL3MK5X.js.map} +0 -0
- /package/dist/{watch-6QPQU277.js.map → watch-KERZCCNR.js.map} +0 -0
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
patchHwpxBlocks,
|
|
32
32
|
renderHtml,
|
|
33
33
|
scanSectionXml
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-YFNBHLLM.js";
|
|
35
35
|
import {
|
|
36
36
|
detectFormat,
|
|
37
37
|
detectOle2Format,
|
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
import {
|
|
45
45
|
VERSION,
|
|
46
46
|
blocksToMarkdown
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-MHYDBT2Q.js";
|
|
48
48
|
import "./chunk-MOL7MDBG.js";
|
|
49
49
|
export {
|
|
50
50
|
HwpxSession,
|
|
@@ -88,4 +88,4 @@ export {
|
|
|
88
88
|
renderHtml,
|
|
89
89
|
scanSectionXml
|
|
90
90
|
};
|
|
91
|
-
//# sourceMappingURL=-
|
|
91
|
+
//# sourceMappingURL=-56JCPGII.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
// src/utils.ts
|
|
4
|
-
var VERSION = true ? "3.
|
|
4
|
+
var VERSION = true ? "3.4.0" : "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;
|
|
@@ -634,4 +634,4 @@ export {
|
|
|
634
634
|
HEADING_RATIO_H2,
|
|
635
635
|
HEADING_RATIO_H3
|
|
636
636
|
};
|
|
637
|
-
//# sourceMappingURL=chunk-
|
|
637
|
+
//# sourceMappingURL=chunk-MHYDBT2Q.js.map
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
sanitizeHref,
|
|
24
24
|
stripDtd,
|
|
25
25
|
toArrayBuffer
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-MHYDBT2Q.js";
|
|
27
27
|
import {
|
|
28
28
|
parsePageRange
|
|
29
29
|
} from "./chunk-MOL7MDBG.js";
|
|
@@ -22029,14 +22029,7 @@ async function patchHwp(original, editedMarkdown, options) {
|
|
|
22029
22029
|
const editedUnits = splitMarkdownUnits(editedMarkdown);
|
|
22030
22030
|
const pairs = alignUnits(origUnits.map((u) => u.raw), editedUnits.map((u) => u.raw));
|
|
22031
22031
|
const paraMap = resolveParaMappings(origBlocks, scans);
|
|
22032
|
-
const
|
|
22033
|
-
const obTableOrdinals = /* @__PURE__ */ new Map();
|
|
22034
|
-
{
|
|
22035
|
-
let ordinal = 0;
|
|
22036
|
-
for (let i = 0; i < origBlocks.length; i++) {
|
|
22037
|
-
if (origBlocks[i].type === "table" && origBlocks[i].table) obTableOrdinals.set(i, ordinal++);
|
|
22038
|
-
}
|
|
22039
|
-
}
|
|
22032
|
+
const tableMap = resolveTableMappings(origBlocks, scans.flatMap((s) => s.tables));
|
|
22040
22033
|
for (const [oi, ei] of pairs) {
|
|
22041
22034
|
if (oi !== null && ei !== null) {
|
|
22042
22035
|
const orig = origUnits[oi];
|
|
@@ -22046,8 +22039,7 @@ async function patchHwp(original, editedMarkdown, options) {
|
|
|
22046
22039
|
origBlocks,
|
|
22047
22040
|
paraMap,
|
|
22048
22041
|
scans,
|
|
22049
|
-
|
|
22050
|
-
obTableOrdinals,
|
|
22042
|
+
tableMap,
|
|
22051
22043
|
skipped
|
|
22052
22044
|
});
|
|
22053
22045
|
} else if (oi !== null) {
|
|
@@ -22132,6 +22124,46 @@ function resolveParaMappings(blocks, scans) {
|
|
|
22132
22124
|
}
|
|
22133
22125
|
return result;
|
|
22134
22126
|
}
|
|
22127
|
+
function resolveTableMappings(blocks, scanTables) {
|
|
22128
|
+
const result = /* @__PURE__ */ new Map();
|
|
22129
|
+
let si = 0;
|
|
22130
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
22131
|
+
const table = blocks[i].table;
|
|
22132
|
+
if (blocks[i].type !== "table" || !table) continue;
|
|
22133
|
+
const cands = [];
|
|
22134
|
+
for (let k = si; k < scanTables.length; k++) {
|
|
22135
|
+
if (scanTables[k].rows === table.rows && scanTables[k].cols === table.cols) cands.push(k);
|
|
22136
|
+
}
|
|
22137
|
+
if (cands.length === 0) continue;
|
|
22138
|
+
let pick = cands[0];
|
|
22139
|
+
if (cands.length > 1) {
|
|
22140
|
+
let best = tableContentScore(table, scanTables[cands[0]]);
|
|
22141
|
+
for (let ci = 1; ci < cands.length; ci++) {
|
|
22142
|
+
const sc = tableContentScore(table, scanTables[cands[ci]]);
|
|
22143
|
+
if (sc > best) {
|
|
22144
|
+
best = sc;
|
|
22145
|
+
pick = cands[ci];
|
|
22146
|
+
}
|
|
22147
|
+
}
|
|
22148
|
+
}
|
|
22149
|
+
result.set(i, scanTables[pick]);
|
|
22150
|
+
si = pick + 1;
|
|
22151
|
+
}
|
|
22152
|
+
return result;
|
|
22153
|
+
}
|
|
22154
|
+
function tableContentScore(irTable, scanTable) {
|
|
22155
|
+
let matched = 0;
|
|
22156
|
+
for (const [key, scanCell] of scanTable.cells) {
|
|
22157
|
+
const comma = key.indexOf(",");
|
|
22158
|
+
const r = Number(key.slice(0, comma)), c = Number(key.slice(comma + 1));
|
|
22159
|
+
const irCell = irTable.cells[r]?.[c];
|
|
22160
|
+
if (!irCell) continue;
|
|
22161
|
+
const a = normForMatch(scanCell.paras.map((p) => p.rawText).join(" "));
|
|
22162
|
+
const b = normForMatch(stripCellTokens(irCell.text));
|
|
22163
|
+
if (a && a === b) matched++;
|
|
22164
|
+
}
|
|
22165
|
+
return matched;
|
|
22166
|
+
}
|
|
22135
22167
|
function handleModified(orig, edited, ctx) {
|
|
22136
22168
|
const block = ctx.origBlocks[orig.blockIdx];
|
|
22137
22169
|
const skip = (reason) => {
|
|
@@ -22144,12 +22176,10 @@ function handleModified(orig, edited, ctx) {
|
|
|
22144
22176
|
if (orig.fragment) return skip("\uBB38\uB2E8 \uBD84\uC808(\uAC15\uC81C \uC904\uBC14\uAFC8/\uBCD1\uD569 \uC720\uB2DB) \u2014 \uBD80\uBD84 \uC218\uC815\uC740 \uBBF8\uC9C0\uC6D0 (v1)");
|
|
22145
22177
|
if (block.type === "table" && block.table) {
|
|
22146
22178
|
if (orig.kind !== edited.kind) return skip("\uD45C \u2194 \uBE44\uD45C \uBCC0\uACBD\uC740 \uBBF8\uC9C0\uC6D0 (\uD45C \uAD6C\uC870 \uBCC0\uACBD)");
|
|
22147
|
-
|
|
22148
|
-
|
|
22149
|
-
const scanTable = ordinal !== void 0 ? ctx.scanTables[ordinal] : void 0;
|
|
22150
|
-
if (!scanTable) return skip("\uD45C \uC18C\uC2A4\uB9F5 \uB9E4\uD551 \uC2E4\uD328");
|
|
22179
|
+
const scanTable = ctx.tableMap.get(orig.blockIdx);
|
|
22180
|
+
if (!scanTable) return skip("\uD45C \uC18C\uC2A4\uB9F5 \uB9E4\uD551 \uC2E4\uD328 \u2014 \uD45C \uAC1C\uC218/\uAD6C\uC870 \uBD88\uC77C\uCE58\uB85C \uC2E0\uB8B0 \uBD88\uAC00");
|
|
22151
22181
|
if (orig.kind === "gfm-table") return patchGfmCells(scanTable, orig, edited, ctx, skip);
|
|
22152
|
-
if (orig.kind === "html-table") return
|
|
22182
|
+
if (orig.kind === "html-table") return patchHtmlCells5(block.table, scanTable, orig, edited, ctx, skip);
|
|
22153
22183
|
return patchTextChunk5(block.table, scanTable, orig, edited, ctx, skip);
|
|
22154
22184
|
}
|
|
22155
22185
|
if ((block.type === "paragraph" || block.type === "heading") && orig.kind === "text" && edited.kind === "text") {
|
|
@@ -22206,35 +22236,87 @@ function patchGfmCells(scanTable, orig, edited, ctx, skip) {
|
|
|
22206
22236
|
ctx.skipped.push({ reason, before: summarize(origRows[r][c]), after: summarize(editedRows[r][c]) });
|
|
22207
22237
|
return 0;
|
|
22208
22238
|
};
|
|
22209
|
-
const before = gfmCellToPlain(origRows[r][c]);
|
|
22210
|
-
const after = gfmCellToPlain(editedRows[r][c]);
|
|
22211
|
-
if (before === null || after === null) {
|
|
22212
|
-
cellSkip("\uC11C\uC2DD/\uB9C1\uD06C/\uC774\uBBF8\uC9C0 \uD3EC\uD568 \uC140 \uC218\uC815\uC740 \uBBF8\uC9C0\uC6D0 (v1)");
|
|
22213
|
-
continue;
|
|
22214
|
-
}
|
|
22215
|
-
if (after.includes("\n")) {
|
|
22216
|
-
cellSkip("\uC140 \uB0B4 \uC904\uBC14\uAFC8 \uCD94\uAC00\uB294 \uBBF8\uC9C0\uC6D0 (v1)");
|
|
22217
|
-
continue;
|
|
22218
|
-
}
|
|
22219
22239
|
const cell = scanTable.cells.get(`${r},${c}`);
|
|
22220
22240
|
if (!cell) {
|
|
22221
22241
|
cellSkip("\uBCD1\uD569 \uC601\uC5ED \uC140 \u2014 \uC575\uCEE4 \uC140\uC774 \uC544\uB2C8\uBBC0\uB85C \uBBF8\uC9C0\uC6D0");
|
|
22222
22242
|
continue;
|
|
22223
22243
|
}
|
|
22224
|
-
|
|
22225
|
-
|
|
22244
|
+
const beforeParts = origRows[r][c].split(/<br\s*\/?>/i);
|
|
22245
|
+
const afterParts = editedRows[r][c].split(/<br\s*\/?>/i);
|
|
22246
|
+
if (beforeParts.length !== cell.paras.length || afterParts.length !== cell.paras.length) {
|
|
22247
|
+
cellSkip("\uC140 \uBB38\uB2E8 \uC218 \uBCC0\uACBD \u2014 \uBBF8\uC9C0\uC6D0 (\uBB38\uB2E8 \uCD94\uAC00/\uC0AD\uC81C)");
|
|
22226
22248
|
continue;
|
|
22227
22249
|
}
|
|
22228
|
-
|
|
22229
|
-
|
|
22230
|
-
|
|
22231
|
-
|
|
22250
|
+
for (let k = 0; k < cell.paras.length; k++) {
|
|
22251
|
+
const before = gfmCellToPlain(beforeParts[k]);
|
|
22252
|
+
const after = gfmCellToPlain(afterParts[k]);
|
|
22253
|
+
if (before === null || after === null) {
|
|
22254
|
+
cellSkip("\uC11C\uC2DD/\uB9C1\uD06C/\uC774\uBBF8\uC9C0 \uD3EC\uD568 \uC140 \uC218\uC815\uC740 \uBBF8\uC9C0\uC6D0 (v1)");
|
|
22255
|
+
break;
|
|
22256
|
+
}
|
|
22257
|
+
if (before === after) continue;
|
|
22258
|
+
if (after.includes("\n")) {
|
|
22259
|
+
cellSkip("\uC140 \uB0B4 \uC904\uBC14\uAFC8 \uCD94\uAC00\uB294 \uBBF8\uC9C0\uC6D0 (v1)");
|
|
22260
|
+
break;
|
|
22261
|
+
}
|
|
22262
|
+
const para = cell.paras[k];
|
|
22263
|
+
if (normForMatch(para.rawText) !== normForMatch(before)) {
|
|
22264
|
+
cellSkip("\uC140 \uD14D\uC2A4\uD2B8 \uBD88\uC77C\uCE58 \u2014 \uC18C\uC2A4\uB9F5 \uC2E0\uB8B0 \uBD88\uAC00");
|
|
22265
|
+
break;
|
|
22266
|
+
}
|
|
22267
|
+
if (sanitizeText(after) !== after) {
|
|
22268
|
+
cellSkip("\uACF5\uBC31 \uC815\uADDC\uD654 \uBD88\uC548\uC815 \uD14D\uC2A4\uD2B8 \u2014 \uBBF8\uC9C0\uC6D0");
|
|
22269
|
+
break;
|
|
22270
|
+
}
|
|
22271
|
+
applied += stageParaPatch(ctx.scans[para.sectionIndex], para, after, cellSkip);
|
|
22232
22272
|
}
|
|
22233
|
-
|
|
22234
|
-
|
|
22273
|
+
}
|
|
22274
|
+
}
|
|
22275
|
+
return applied;
|
|
22276
|
+
}
|
|
22277
|
+
function extractImgTags5(inner) {
|
|
22278
|
+
return (inner.match(/<img\s(?:"[^"]*"|'[^']*'|[^>"'])*?>/gi) || []).join(" ");
|
|
22279
|
+
}
|
|
22280
|
+
function patchHtmlCells5(table, scanTable, orig, edited, ctx, skip) {
|
|
22281
|
+
if (replicateTableToHtml(table) !== orig.raw) return skip("\uD45C \uC88C\uD45C \uC7AC\uD604 \uBD88\uC77C\uCE58 \u2014 \uB9E4\uD551 \uC2E0\uB8B0 \uBD88\uAC00");
|
|
22282
|
+
const replica = replicateHtmlTable(table);
|
|
22283
|
+
const origRows = parseHtmlTable(orig.raw);
|
|
22284
|
+
if (!origRows || origRows.length !== replica.length || origRows.some((r, i) => r.cells.length !== replica[i].cells.length || r.cells.some((c, j) => c.inner !== replica[i].cells[j].inner))) {
|
|
22285
|
+
return skip("\uC140 \uACBD\uACC4 \uBAA8\uD638 (\uB9AC\uD130\uB7F4 \uD0DC\uADF8 \uC758\uC2EC) \u2014 \uB9E4\uD551 \uC2E0\uB8B0 \uBD88\uAC00");
|
|
22286
|
+
}
|
|
22287
|
+
const editedRows = parseHtmlTable(edited.raw);
|
|
22288
|
+
if (!editedRows) return skip("\uD3B8\uC9D1\uB41C HTML \uD45C \uD30C\uC2F1 \uC2E4\uD328");
|
|
22289
|
+
if (editedRows.length !== replica.length) return skip("\uD45C \uD589 \uCD94\uAC00/\uC0AD\uC81C\uB294 \uBBF8\uC9C0\uC6D0 (\uD45C \uAD6C\uC870 \uBCC0\uACBD)");
|
|
22290
|
+
let applied = 0;
|
|
22291
|
+
for (let r = 0; r < replica.length; r++) {
|
|
22292
|
+
if (editedRows[r].cells.length !== replica[r].cells.length) {
|
|
22293
|
+
skip(`\uD45C ${r + 1}\uD589 \uC140 \uC218 \uBCC0\uACBD\uC740 \uBBF8\uC9C0\uC6D0`);
|
|
22294
|
+
continue;
|
|
22295
|
+
}
|
|
22296
|
+
for (let c = 0; c < replica[r].cells.length; c++) {
|
|
22297
|
+
const oc = replica[r].cells[c];
|
|
22298
|
+
const ec = editedRows[r].cells[c];
|
|
22299
|
+
if (oc.colSpan !== ec.colSpan || oc.rowSpan !== ec.rowSpan) {
|
|
22300
|
+
skip("\uC140 \uBCD1\uD569(colspan/rowspan) \uBCC0\uACBD\uC740 \uBBF8\uC9C0\uC6D0");
|
|
22235
22301
|
continue;
|
|
22236
22302
|
}
|
|
22237
|
-
|
|
22303
|
+
if (oc.inner === ec.inner) continue;
|
|
22304
|
+
const origContent = htmlCellInnerToLines(oc.inner);
|
|
22305
|
+
const editedContent = htmlCellInnerToLines(ec.inner);
|
|
22306
|
+
if (origContent.hadNonText || editedContent.hadNonText) {
|
|
22307
|
+
if (extractImgTags5(oc.inner) !== extractImgTags5(ec.inner)) {
|
|
22308
|
+
skip("\uC140 \uB0B4 \uC774\uBBF8\uC9C0 \uBCC0\uACBD\uC740 \uBBF8\uC9C0\uC6D0");
|
|
22309
|
+
continue;
|
|
22310
|
+
}
|
|
22311
|
+
if (extractTopLevelTables(oc.inner).join("\n") !== extractTopLevelTables(ec.inner).join("\n")) {
|
|
22312
|
+
skip("\uC140 \uB0B4 \uC911\uCCA9\uD45C \uC218\uC815\uC740 HWP5 \uBBF8\uC9C0\uC6D0 (v1)");
|
|
22313
|
+
continue;
|
|
22314
|
+
}
|
|
22315
|
+
}
|
|
22316
|
+
if (origContent.lines.join("\n") !== editedContent.lines.join("\n")) {
|
|
22317
|
+
const newLines = editedContent.lines.map((l) => unescapeGfm(l));
|
|
22318
|
+
applied += applyCellEdit5(table, scanTable, oc.gridR, oc.gridC, newLines, ctx, oc.inner, ec.inner, origContent.lines.length);
|
|
22319
|
+
}
|
|
22238
22320
|
}
|
|
22239
22321
|
}
|
|
22240
22322
|
return applied;
|
|
@@ -22326,15 +22408,103 @@ function gfmCellToPlain(md2) {
|
|
|
22326
22408
|
let t = md2.trim();
|
|
22327
22409
|
const bold = t.match(/^\*\*([\s\S]+)\*\*$/);
|
|
22328
22410
|
if (bold) t = bold[1];
|
|
22329
|
-
if (/[*`]|!\[|\]\(
|
|
22411
|
+
if (/[*`]|!\[|\]\(/.test(t)) return null;
|
|
22412
|
+
if (/<(?!br\s*\/?>)[a-zA-Z/]/i.test(t)) return null;
|
|
22330
22413
|
return unescapeGfm(unescapeGfmCell(t));
|
|
22331
22414
|
}
|
|
22332
|
-
|
|
22415
|
+
function splitParaText(data) {
|
|
22416
|
+
const toks = [];
|
|
22417
|
+
let i = 0;
|
|
22418
|
+
while (i + 1 < data.length) {
|
|
22419
|
+
const ch = data.readUInt16LE(i);
|
|
22420
|
+
const start = i;
|
|
22421
|
+
i += 2;
|
|
22422
|
+
if (ch >= 32) {
|
|
22423
|
+
let units = 1;
|
|
22424
|
+
if (ch >= 55296 && ch <= 56319 && i + 1 < data.length) {
|
|
22425
|
+
const lo = data.readUInt16LE(i);
|
|
22426
|
+
if (lo >= 56320 && lo <= 57343) {
|
|
22427
|
+
i += 2;
|
|
22428
|
+
units = 2;
|
|
22429
|
+
}
|
|
22430
|
+
}
|
|
22431
|
+
toks.push({ start, end: i, units, plain: true, visible: true });
|
|
22432
|
+
continue;
|
|
22433
|
+
}
|
|
22434
|
+
switch (ch) {
|
|
22435
|
+
case 0:
|
|
22436
|
+
case 24:
|
|
22437
|
+
case 25:
|
|
22438
|
+
case 30:
|
|
22439
|
+
case 31:
|
|
22440
|
+
toks.push({ start, end: i, units: 1, plain: false, visible: true });
|
|
22441
|
+
break;
|
|
22442
|
+
case 9:
|
|
22443
|
+
if (i + 14 <= data.length) i += 14;
|
|
22444
|
+
toks.push({ start, end: i, units: 1, plain: false, visible: true });
|
|
22445
|
+
break;
|
|
22446
|
+
case 13:
|
|
22447
|
+
toks.push({ start, end: i, units: 1, plain: false, visible: false });
|
|
22448
|
+
break;
|
|
22449
|
+
case 10:
|
|
22450
|
+
if (i + 16 <= data.length && data.readUInt16LE(i) === 11) {
|
|
22451
|
+
i += 16;
|
|
22452
|
+
toks.push({ start, end: i, units: 1, plain: false, visible: false });
|
|
22453
|
+
} else {
|
|
22454
|
+
if (i + 14 <= data.length) i += 14;
|
|
22455
|
+
toks.push({ start, end: i, units: 1, plain: false, visible: true });
|
|
22456
|
+
}
|
|
22457
|
+
break;
|
|
22458
|
+
default: {
|
|
22459
|
+
const ext = isExtendedOnlyCtrlChar(ch);
|
|
22460
|
+
const inl = ch >= 4 && ch <= 9 || ch >= 19 && ch <= 20;
|
|
22461
|
+
if ((ext || inl) && i + 14 <= data.length) i += 14;
|
|
22462
|
+
toks.push({ start, end: i, units: 1, plain: false, visible: false });
|
|
22463
|
+
break;
|
|
22464
|
+
}
|
|
22465
|
+
}
|
|
22466
|
+
}
|
|
22467
|
+
if (i !== data.length) return null;
|
|
22468
|
+
let firstP = -1, lastP = -1;
|
|
22469
|
+
for (let k = 0; k < toks.length; k++) if (toks[k].plain) {
|
|
22470
|
+
if (firstP < 0) firstP = k;
|
|
22471
|
+
lastP = k;
|
|
22472
|
+
}
|
|
22473
|
+
if (firstP < 0) return null;
|
|
22474
|
+
for (let k = firstP; k <= lastP; k++) if (!toks[k].plain) return null;
|
|
22475
|
+
for (let k = 0; k < firstP; k++) if (toks[k].visible) return null;
|
|
22476
|
+
for (let k = lastP + 1; k < toks.length; k++) if (toks[k].visible) return null;
|
|
22477
|
+
const prefixEnd = toks[firstP].start;
|
|
22478
|
+
const coreEnd = toks[lastP].end;
|
|
22479
|
+
const prefixUnits = prefixEnd / 2;
|
|
22480
|
+
const suffixUnits = (data.length - coreEnd) / 2;
|
|
22481
|
+
return {
|
|
22482
|
+
prefix: data.subarray(0, prefixEnd),
|
|
22483
|
+
prefixUnits,
|
|
22484
|
+
core: data.subarray(prefixEnd, coreEnd).toString("utf16le"),
|
|
22485
|
+
suffix: data.subarray(coreEnd),
|
|
22486
|
+
suffixUnits
|
|
22487
|
+
};
|
|
22488
|
+
}
|
|
22489
|
+
function rebuildCharShape(csData, coreStartUnit) {
|
|
22490
|
+
const pairs = [];
|
|
22491
|
+
for (let o = 0; o + 8 <= csData.length; o += 8) pairs.push([csData.readUInt32LE(o), csData.readUInt32LE(o + 4)]);
|
|
22492
|
+
if (pairs.length === 0) return { buf: Buffer.from(csData.subarray(0, 8)), count: 1 };
|
|
22493
|
+
let coreId = pairs[0][1];
|
|
22494
|
+
for (const [p, id] of pairs) if (p <= coreStartUnit) coreId = id;
|
|
22495
|
+
const kept = pairs.filter(([p]) => p < coreStartUnit);
|
|
22496
|
+
if (kept.length === 0 || kept[kept.length - 1][1] !== coreId) kept.push([coreStartUnit, coreId]);
|
|
22497
|
+
const buf = Buffer.alloc(kept.length * 8);
|
|
22498
|
+
kept.forEach(([p, id], k) => {
|
|
22499
|
+
buf.writeUInt32LE(p >>> 0, k * 8);
|
|
22500
|
+
buf.writeUInt32LE(id >>> 0, k * 8 + 4);
|
|
22501
|
+
});
|
|
22502
|
+
return { buf, count: kept.length };
|
|
22503
|
+
}
|
|
22333
22504
|
function stageParaPatch(scan, para, newPlain, skip) {
|
|
22334
22505
|
if (!scan.safe) return skip("\uC139\uC158 \uB808\uCF54\uB4DC \uC7AC\uC9C1\uB82C\uD654 \uBD88\uC77C\uCE58 \u2014 \uC548\uC804\uC744 \uC704\uD574 \uC774 \uC139\uC158\uC740 \uBBF8\uC9C0\uC6D0");
|
|
22335
22506
|
if (para.textIdx === -1) return skip("\uBE48 \uBB38\uB2E8 \uD14D\uC2A4\uD2B8 \uCD94\uAC00\uB294 \uBBF8\uC9C0\uC6D0 (v1)");
|
|
22336
22507
|
if (para.textIdx === -2) return skip("\uBCF5\uC218 PARA_TEXT \uB808\uCF54\uB4DC \uBB38\uB2E8 \u2014 \uBBF8\uC9C0\uC6D0 (v1)");
|
|
22337
|
-
if (para.ctrlMask !== 0) return skip("\uCEE8\uD2B8\uB864 \uBB38\uC790 \uD3EC\uD568 \uBB38\uB2E8(\uD0ED/\uAC1C\uCCB4/\uD544\uB4DC/\uD2B9\uC218\uACF5\uBC31) \u2014 \uBBF8\uC9C0\uC6D0 (v1)");
|
|
22338
22508
|
if (para.rangeTagCount > 0) return skip("\uBC94\uC704 \uD0DC\uADF8(\uD615\uAD11\uD39C/\uAD50\uC815\uBD80\uD638) \uBB38\uB2E8 \u2014 \uBBF8\uC9C0\uC6D0 (v1)");
|
|
22339
22509
|
if (para.charShapeIdx < 0 || para.lineSegIdx < 0) return skip("\uBB38\uB2E8 \uB808\uCF54\uB4DC \uAD6C\uC131 \uBE44\uC815\uD615 \u2014 \uBBF8\uC9C0\uC6D0");
|
|
22340
22510
|
if (scan.repl.has(para.headerIdx)) return skip("\uB3D9\uC77C \uBB38\uB2E8 \uC911\uBCF5 \uC218\uC815 \u2014 \uCCAB \uC218\uC815\uB9CC \uC801\uC6A9");
|
|
@@ -22343,36 +22513,25 @@ function stageParaPatch(scan, para, newPlain, skip) {
|
|
|
22343
22513
|
const headerRec = records[para.headerIdx];
|
|
22344
22514
|
const textRec = records[para.textIdx];
|
|
22345
22515
|
const charShapeRec = records[para.charShapeIdx];
|
|
22346
|
-
|
|
22347
|
-
|
|
22348
|
-
|
|
22516
|
+
if (charShapeRec.data.length < 8) {
|
|
22517
|
+
return skip("CHAR_SHAPE \uB808\uCF54\uB4DC \uBE44\uC815\uD615 \u2014 \uBBF8\uC9C0\uC6D0");
|
|
22518
|
+
}
|
|
22519
|
+
const seg = splitParaText(textRec.data);
|
|
22520
|
+
if (!seg) {
|
|
22521
|
+
return skip(para.ctrlMask !== 0 ? "\uCEE8\uD2B8\uB864 \uBB38\uC790(\uD0ED/\uD544\uB4DC/\uD2B9\uC218\uACF5\uBC31 \uB4F1 \uD14D\uC2A4\uD2B8 \uC911\uAC04) \uD3EC\uD568 \uBB38\uB2E8 \u2014 \uBBF8\uC9C0\uC6D0 (v1)" : "PARA_TEXT \uC7AC\uAD6C\uC131 \uBD88\uC77C\uCE58 \u2014 \uC6D0\uBB38 \uBCF4\uC874 \uBD88\uAC00\uB85C \uBBF8\uC9C0\uC6D0");
|
|
22349
22522
|
}
|
|
22350
|
-
|
|
22351
|
-
const expect = hadBreak ? Buffer.concat([Buffer.from(para.rawText, "utf16le"), PARA_BREAK]) : Buffer.from(para.rawText, "utf16le");
|
|
22352
|
-
if (!expect.equals(textRec.data)) return skip("PARA_TEXT \uC7AC\uAD6C\uC131 \uBD88\uC77C\uCE58 \u2014 \uC6D0\uBB38 \uBCF4\uC874 \uBD88\uAC00\uB85C \uBBF8\uC9C0\uC6D0");
|
|
22523
|
+
if (seg.core !== para.rawText) return skip("PARA_TEXT \uC7AC\uAD6C\uC131 \uBD88\uC77C\uCE58 \u2014 \uC6D0\uBB38 \uBCF4\uC874 \uBD88\uAC00\uB85C \uBBF8\uC9C0\uC6D0");
|
|
22353
22524
|
const lead = para.rawText.match(/^\s*/)[0];
|
|
22354
22525
|
const trail = para.rawText.match(/\s*$/)[0];
|
|
22355
22526
|
const newRaw = para.rawText.trim() === para.rawText ? newPlain : lead + newPlain + trail;
|
|
22356
|
-
const newText =
|
|
22527
|
+
const newText = Buffer.concat([seg.prefix, Buffer.from(newRaw, "utf16le"), seg.suffix]);
|
|
22357
22528
|
scan.repl.set(para.textIdx, newText);
|
|
22358
22529
|
const newHeader = Buffer.from(headerRec.data);
|
|
22359
|
-
const nChars = newRaw.length +
|
|
22530
|
+
const nChars = seg.prefixUnits + newRaw.length + seg.suffixUnits;
|
|
22360
22531
|
newHeader.writeUInt32LE((para.nCharsRaw & 2147483648 | nChars) >>> 0, 0);
|
|
22361
|
-
|
|
22362
|
-
|
|
22363
|
-
|
|
22364
|
-
}
|
|
22365
|
-
const csData = scan.repl.get(para.charShapeIdx) ?? Buffer.from(charShapeRec.data);
|
|
22366
|
-
if (csData.readUInt32LE(0) !== 0) {
|
|
22367
|
-
csData.writeUInt32LE(0, 0);
|
|
22368
|
-
scan.repl.set(para.charShapeIdx, csData);
|
|
22369
|
-
}
|
|
22370
|
-
if (lineSegRec.data.length > 36 || lineSegRec.data.readUInt32LE(0) !== 0) {
|
|
22371
|
-
const seg = Buffer.from(lineSegRec.data.subarray(0, 36));
|
|
22372
|
-
seg.writeUInt32LE(0, 0);
|
|
22373
|
-
newHeader.writeUInt16LE(1, 16);
|
|
22374
|
-
scan.repl.set(para.lineSegIdx, seg);
|
|
22375
|
-
}
|
|
22532
|
+
const cs = rebuildCharShape(charShapeRec.data, seg.prefixUnits);
|
|
22533
|
+
scan.repl.set(para.charShapeIdx, cs.buf);
|
|
22534
|
+
newHeader.writeUInt16LE(cs.count, 12);
|
|
22376
22535
|
scan.repl.set(para.headerIdx, newHeader);
|
|
22377
22536
|
return 1;
|
|
22378
22537
|
}
|
|
@@ -22961,7 +23120,7 @@ async function parseHwp(buffer, options) {
|
|
|
22961
23120
|
async function parsePdf(buffer, options) {
|
|
22962
23121
|
let parsePdfDocument;
|
|
22963
23122
|
try {
|
|
22964
|
-
const mod = await import("./parser-
|
|
23123
|
+
const mod = await import("./parser-PQDICHD5.js");
|
|
22965
23124
|
parsePdfDocument = mod.parsePdfDocument;
|
|
22966
23125
|
} catch {
|
|
22967
23126
|
return {
|
|
@@ -23086,4 +23245,4 @@ export {
|
|
|
23086
23245
|
parseHwpml,
|
|
23087
23246
|
fillForm
|
|
23088
23247
|
};
|
|
23089
|
-
//# sourceMappingURL=chunk-
|
|
23248
|
+
//# sourceMappingURL=chunk-YFNBHLLM.js.map
|