kordoc 2.2.0 → 2.2.1
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/LICENSE +21 -21
- package/README.md +318 -302
- package/dist/{chunk-MOL7MDBG.js → chunk-3TBUDJDE.js} +1 -1
- package/dist/chunk-3TBUDJDE.js.map +1 -0
- package/dist/{chunk-LYFG7AUT.js → chunk-FINXMRCH.js} +15 -12
- package/dist/chunk-FINXMRCH.js.map +1 -0
- package/dist/{chunk-5Y2Q3BRW.js → chunk-MUAWCQDY.js} +1 -1
- package/dist/chunk-MUAWCQDY.js.map +1 -0
- package/dist/cli.js +4 -4
- package/dist/cli.js.map +1 -1
- package/dist/{detect-GYK3HKD5.js → detect-63IGCXTH.js} +2 -2
- package/dist/index.cjs +11 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +11 -8
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +4 -4
- package/dist/mcp.js.map +1 -1
- package/dist/page-range-OF5I4PQY.js +8 -0
- package/dist/{watch-Q5OXA73S.js → watch-Q6L4UBTC.js} +4 -4
- package/package.json +1 -1
- package/dist/chunk-5Y2Q3BRW.js.map +0 -1
- package/dist/chunk-LYFG7AUT.js.map +0 -1
- package/dist/chunk-MOL7MDBG.js.map +0 -1
- package/dist/page-range-737B4EZW.js +0 -8
- /package/dist/{detect-GYK3HKD5.js.map → detect-63IGCXTH.js.map} +0 -0
- /package/dist/{page-range-737B4EZW.js.map → page-range-OF5I4PQY.js.map} +0 -0
- /package/dist/{watch-Q5OXA73S.js.map → watch-Q6L4UBTC.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/page-range.ts"],"sourcesContent":["/** 페이지/섹션 범위 파싱 유틸리티 */\r\n\r\n/**\r\n * 페이지 범위 지정을 1-based Set<number>로 변환.\r\n *\r\n * @param spec - [1,2,3] 또는 \"1-3\" 또는 \"1,3,5-7\"\r\n * @param maxPages - 최대 페이지 수 (클램핑 상한)\r\n * @returns 1-based 페이지 번호 Set\r\n */\r\nexport function parsePageRange(spec: number[] | string, maxPages: number): Set<number> {\r\n const result = new Set<number>()\r\n if (maxPages <= 0) return result\r\n\r\n if (Array.isArray(spec)) {\r\n for (const n of spec) {\r\n const page = Math.round(n)\r\n if (page >= 1 && page <= maxPages) result.add(page)\r\n }\r\n return result\r\n }\r\n\r\n if (typeof spec !== \"string\" || spec.trim() === \"\") return result\r\n\r\n const parts = spec.split(\",\")\r\n for (const part of parts) {\r\n const trimmed = part.trim()\r\n if (!trimmed) continue\r\n\r\n const rangeMatch = trimmed.match(/^(\\d+)\\s*-\\s*(\\d+)$/)\r\n if (rangeMatch) {\r\n const start = Math.max(1, parseInt(rangeMatch[1], 10))\r\n const end = Math.min(maxPages, parseInt(rangeMatch[2], 10))\r\n for (let i = start; i <= end; i++) result.add(i)\r\n } else {\r\n const page = parseInt(trimmed, 10)\r\n if (!isNaN(page) && page >= 1 && page <= maxPages) result.add(page)\r\n }\r\n }\r\n\r\n return result\r\n}\r\n"],"mappings":";;;AASO,SAAS,eAAe,MAAyB,UAA+B;AACrF,QAAM,SAAS,oBAAI,IAAY;AAC/B,MAAI,YAAY,EAAG,QAAO;AAE1B,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,eAAW,KAAK,MAAM;AACpB,YAAM,OAAO,KAAK,MAAM,CAAC;AACzB,UAAI,QAAQ,KAAK,QAAQ,SAAU,QAAO,IAAI,IAAI;AAAA,IACpD;AACA,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAAS,YAAY,KAAK,KAAK,MAAM,GAAI,QAAO;AAE3D,QAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,aAAW,QAAQ,OAAO;AACxB,UAAM,UAAU,KAAK,KAAK;AAC1B,QAAI,CAAC,QAAS;AAEd,UAAM,aAAa,QAAQ,MAAM,qBAAqB;AACtD,QAAI,YAAY;AACd,YAAM,QAAQ,KAAK,IAAI,GAAG,SAAS,WAAW,CAAC,GAAG,EAAE,CAAC;AACrD,YAAM,MAAM,KAAK,IAAI,UAAU,SAAS,WAAW,CAAC,GAAG,EAAE,CAAC;AAC1D,eAAS,IAAI,OAAO,KAAK,KAAK,IAAK,QAAO,IAAI,CAAC;AAAA,IACjD,OAAO;AACL,YAAM,OAAO,SAAS,SAAS,EAAE;AACjC,UAAI,CAAC,MAAM,IAAI,KAAK,QAAQ,KAAK,QAAQ,SAAU,QAAO,IAAI,IAAI;AAAA,IACpE;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
import {
|
|
3
3
|
detectFormat,
|
|
4
4
|
detectZipFormat
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-MUAWCQDY.js";
|
|
6
6
|
import {
|
|
7
7
|
parsePageRange
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-3TBUDJDE.js";
|
|
9
9
|
|
|
10
10
|
// src/utils.ts
|
|
11
|
-
var VERSION = true ? "2.2.
|
|
11
|
+
var VERSION = true ? "2.2.1" : "0.0.0-dev";
|
|
12
12
|
function toArrayBuffer(buf) {
|
|
13
13
|
if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {
|
|
14
14
|
return buf.buffer;
|
|
@@ -201,9 +201,12 @@ function trimAndReturn(grid, numRows, maxCols) {
|
|
|
201
201
|
}
|
|
202
202
|
function convertTableToText(rows) {
|
|
203
203
|
return rows.map(
|
|
204
|
-
(row) => row.map((c) => c.text.trim().replace(/\n/g, " ")).filter(Boolean).join("
|
|
204
|
+
(row) => row.map((c) => c.text.trim().replace(/\n/g, " ").replace(/\|/g, "\\|")).filter(Boolean).join(" / ")
|
|
205
205
|
).filter(Boolean).join("\n");
|
|
206
206
|
}
|
|
207
|
+
function escapeGfm(text) {
|
|
208
|
+
return text.replace(/~/g, "\\~");
|
|
209
|
+
}
|
|
207
210
|
var HWP_SHAPE_ALT_TEXT_RE = /(?:모서리가 둥근 |둥근 )?(?:사각형|직사각형|정사각형|원|타원|삼각형|이등변 삼각형|직각 삼각형|선|직선|곡선|화살표|굵은 화살표|이중 화살표|오각형|육각형|팔각형|별|[4-8]점별|십자|십자형|구름|구름형|마름모|도넛|평행사변형|사다리꼴|부채꼴|호|반원|물결|번개|하트|빗금|블록 화살표|수식|표|그림|개체|그리기\s?개체|묶음\s?개체|글상자|수식\s?개체|OLE\s?개체)\s?입니다\.?/g;
|
|
208
211
|
function sanitizeText(text) {
|
|
209
212
|
let result = text.replace(/[\u{F0000}-\u{FFFFD}]/gu, "").replace(HWP_SHAPE_ALT_TEXT_RE, "").replace(/ +/g, " ").trim();
|
|
@@ -313,7 +316,7 @@ function blocksToMarkdown(blocks) {
|
|
|
313
316
|
if (block.footnoteText) {
|
|
314
317
|
text += ` (\uC8FC: ${block.footnoteText})`;
|
|
315
318
|
}
|
|
316
|
-
lines.push(text);
|
|
319
|
+
lines.push(escapeGfm(text), "");
|
|
317
320
|
} else if (block.type === "table" && block.table) {
|
|
318
321
|
if (lines.length > 0 && lines[lines.length - 1] !== "") {
|
|
319
322
|
lines.push("");
|
|
@@ -336,13 +339,13 @@ function tableToMarkdown(table) {
|
|
|
336
339
|
return content.split(/\n/).map((line) => {
|
|
337
340
|
const trimmed = line.trim();
|
|
338
341
|
if (!trimmed) return "";
|
|
339
|
-
if (/^\d+\.\s/.test(trimmed)) return `**${trimmed}**`;
|
|
340
|
-
if (/^[가-힣]\.\s/.test(trimmed)) return ` ${trimmed}`;
|
|
341
|
-
return trimmed;
|
|
342
|
+
if (/^\d+\.\s/.test(trimmed)) return `**${escapeGfm(trimmed)}**`;
|
|
343
|
+
if (/^[가-힣]\.\s/.test(trimmed)) return ` ${escapeGfm(trimmed)}`;
|
|
344
|
+
return escapeGfm(trimmed);
|
|
342
345
|
}).filter(Boolean).join("\n");
|
|
343
346
|
}
|
|
344
347
|
if (numCols === 1 && numRows >= 2) {
|
|
345
|
-
return cells.map((row) => sanitizeText(row[0].text).replace(/\n/g, " ")).filter(Boolean).join("\n");
|
|
348
|
+
return cells.map((row) => escapeGfm(sanitizeText(row[0].text)).replace(/\n/g, " ")).filter(Boolean).join("\n");
|
|
346
349
|
}
|
|
347
350
|
const display = Array.from({ length: numRows }, () => Array(numCols).fill(""));
|
|
348
351
|
const skip = /* @__PURE__ */ new Set();
|
|
@@ -351,7 +354,7 @@ function tableToMarkdown(table) {
|
|
|
351
354
|
if (skip.has(`${r},${c}`)) continue;
|
|
352
355
|
const cell = cells[r]?.[c];
|
|
353
356
|
if (!cell) continue;
|
|
354
|
-
display[r][c] = sanitizeText(cell.text).replace(/\n/g, "<br>");
|
|
357
|
+
display[r][c] = escapeGfm(sanitizeText(cell.text)).replace(/\|/g, "\\|").replace(/\n/g, "<br>");
|
|
355
358
|
for (let dr = 0; dr < cell.rowSpan; dr++) {
|
|
356
359
|
for (let dc = 0; dc < cell.colSpan; dc++) {
|
|
357
360
|
if (dr === 0 && dc === 0) continue;
|
|
@@ -5365,7 +5368,7 @@ async function parseXlsxDocument(buffer, options) {
|
|
|
5365
5368
|
}
|
|
5366
5369
|
let pageFilter = null;
|
|
5367
5370
|
if (options?.pages) {
|
|
5368
|
-
const { parsePageRange: parsePageRange2 } = await import("./page-range-
|
|
5371
|
+
const { parsePageRange: parsePageRange2 } = await import("./page-range-OF5I4PQY.js");
|
|
5369
5372
|
pageFilter = parsePageRange2(options.pages, sheets.length);
|
|
5370
5373
|
}
|
|
5371
5374
|
const blocks = [];
|
|
@@ -6257,4 +6260,4 @@ export {
|
|
|
6257
6260
|
extractFormFields,
|
|
6258
6261
|
parse
|
|
6259
6262
|
};
|
|
6260
|
-
//# sourceMappingURL=chunk-
|
|
6263
|
+
//# sourceMappingURL=chunk-FINXMRCH.js.map
|