xlsx-to-markdown 0.1.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 -0
- package/README.md +300 -0
- package/dist/__tests__/helpers.d.ts +16 -0
- package/dist/__tests__/helpers.d.ts.map +1 -0
- package/dist/__tests__/helpers.js +63 -0
- package/dist/__tests__/helpers.js.map +1 -0
- package/dist/cell-formatter.d.ts +16 -0
- package/dist/cell-formatter.d.ts.map +1 -0
- package/dist/cell-formatter.js +257 -0
- package/dist/cell-formatter.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +129 -0
- package/dist/index.js.map +1 -0
- package/dist/options.d.ts +3 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +20 -0
- package/dist/options.js.map +1 -0
- package/dist/paragraph-renderer.d.ts +14 -0
- package/dist/paragraph-renderer.d.ts.map +1 -0
- package/dist/paragraph-renderer.js +85 -0
- package/dist/paragraph-renderer.js.map +1 -0
- package/dist/region-detector.d.ts +19 -0
- package/dist/region-detector.d.ts.map +1 -0
- package/dist/region-detector.js +192 -0
- package/dist/region-detector.js.map +1 -0
- package/dist/sheet-converter.d.ts +7 -0
- package/dist/sheet-converter.d.ts.map +1 -0
- package/dist/sheet-converter.js +299 -0
- package/dist/sheet-converter.js.map +1 -0
- package/dist/table-renderer.d.ts +22 -0
- package/dist/table-renderer.d.ts.map +1 -0
- package/dist/table-renderer.js +236 -0
- package/dist/table-renderer.js.map +1 -0
- package/dist/types.d.ts +172 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cell-formatter.js","sourceRoot":"","sources":["../src/cell-formatter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as XLSX from "xlsx";
|
|
2
|
+
import type { ConvertOptions, ConvertResult } from "./types.js";
|
|
3
|
+
export type { ConvertOptions, ConvertResult, SheetResult, Region, RegionType } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Convert an XLSX file (given as a file path or a Buffer/Uint8Array) to Markdown.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { convertXlsxToMarkdown } from 'xlsx-to-markdown';
|
|
10
|
+
*
|
|
11
|
+
* const result = await convertXlsxToMarkdown('report.xlsx');
|
|
12
|
+
* console.log(result.markdown);
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare function convertXlsxToMarkdown(input: string | Buffer | Uint8Array, options?: ConvertOptions): Promise<ConvertResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Convert an already-parsed XLSX.WorkBook to Markdown.
|
|
18
|
+
* Useful when you have already read the workbook using SheetJS.
|
|
19
|
+
*/
|
|
20
|
+
export declare function convertWorkbook(workbook: XLSX.WorkBook, options?: ConvertOptions): ConvertResult;
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEjG;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,EACnC,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAYxB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,GAAE,cAAmB,GAC3B,aAAa,CAGf"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.convertXlsxToMarkdown = convertXlsxToMarkdown;
|
|
37
|
+
exports.convertWorkbook = convertWorkbook;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const XLSX = __importStar(require("xlsx"));
|
|
40
|
+
const options_js_1 = require("./options.js");
|
|
41
|
+
const sheet_converter_js_1 = require("./sheet-converter.js");
|
|
42
|
+
/**
|
|
43
|
+
* Convert an XLSX file (given as a file path or a Buffer/Uint8Array) to Markdown.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* import { convertXlsxToMarkdown } from 'xlsx-to-markdown';
|
|
48
|
+
*
|
|
49
|
+
* const result = await convertXlsxToMarkdown('report.xlsx');
|
|
50
|
+
* console.log(result.markdown);
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
async function convertXlsxToMarkdown(input, options = {}) {
|
|
54
|
+
const opts = (0, options_js_1.resolveOptions)(options);
|
|
55
|
+
let workbook;
|
|
56
|
+
if (typeof input === "string") {
|
|
57
|
+
const buffer = await fs.promises.readFile(input);
|
|
58
|
+
workbook = XLSX.read(buffer, { type: "buffer", cellStyles: true, cellDates: false });
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
workbook = XLSX.read(input, { type: "buffer", cellStyles: true, cellDates: false });
|
|
62
|
+
}
|
|
63
|
+
return _convert(workbook, opts);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Convert an already-parsed XLSX.WorkBook to Markdown.
|
|
67
|
+
* Useful when you have already read the workbook using SheetJS.
|
|
68
|
+
*/
|
|
69
|
+
function convertWorkbook(workbook, options = {}) {
|
|
70
|
+
const opts = (0, options_js_1.resolveOptions)(options);
|
|
71
|
+
return _convert(workbook, opts);
|
|
72
|
+
}
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
// Internal
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
/**
|
|
77
|
+
* Escape Markdown inline special characters in a sheet name used as a heading.
|
|
78
|
+
* Prevents characters like *, _, `, [, ] from being interpreted as Markdown syntax.
|
|
79
|
+
*/
|
|
80
|
+
function escapeMarkdownHeading(name) {
|
|
81
|
+
return name.replace(/[\\*_`[\]<>!]/g, "\\$&");
|
|
82
|
+
}
|
|
83
|
+
function _convert(workbook, opts) {
|
|
84
|
+
const allSheetNames = workbook.SheetNames;
|
|
85
|
+
// Filter sheets
|
|
86
|
+
let sheetNames;
|
|
87
|
+
if (opts.sheets && opts.sheets.length > 0) {
|
|
88
|
+
// When an explicit filter is given, honour it regardless of sheet visibility.
|
|
89
|
+
sheetNames = opts.sheets.map((s) => {
|
|
90
|
+
if (typeof s === "number") {
|
|
91
|
+
const name = allSheetNames[s];
|
|
92
|
+
if (!name)
|
|
93
|
+
throw new Error(`Sheet index ${s} is out of range`);
|
|
94
|
+
return name;
|
|
95
|
+
}
|
|
96
|
+
if (!allSheetNames.includes(s))
|
|
97
|
+
throw new Error(`Sheet "${s}" not found`);
|
|
98
|
+
return s;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// Default: process only visible sheets (ADR-0021).
|
|
103
|
+
sheetNames = allSheetNames.filter((_, i) => {
|
|
104
|
+
const meta = workbook.Workbook?.Sheets?.[i];
|
|
105
|
+
return !meta?.Hidden; // Hidden=0 visible, Hidden=1 hidden, Hidden=2 very hidden
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// Resolve heading behaviour
|
|
109
|
+
const addSheetHeadings = opts.sheetHeadings === "auto" ? sheetNames.length > 1 : opts.sheetHeadings;
|
|
110
|
+
const sheetResults = sheetNames.map((name) => {
|
|
111
|
+
const ws = workbook.Sheets[name];
|
|
112
|
+
return (0, sheet_converter_js_1.convertSheet)(ws, name, allSheetNames.indexOf(name), opts);
|
|
113
|
+
});
|
|
114
|
+
// Combine sheets
|
|
115
|
+
const parts = [];
|
|
116
|
+
for (const sheet of sheetResults) {
|
|
117
|
+
if (addSheetHeadings) {
|
|
118
|
+
// Escape special characters so sheet names don't break Markdown inline syntax (ADR-0020).
|
|
119
|
+
parts.push(`## ${escapeMarkdownHeading(sheet.name)}\n\n${sheet.markdown}`);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
parts.push(sheet.markdown);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const separator = "\n".repeat(opts.blankLinesBetweenRegions + 2);
|
|
126
|
+
const markdown = parts.filter(Boolean).join(separator);
|
|
127
|
+
return { markdown, sheets: sheetResults };
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElE,wBAAgB,cAAc,CAAC,IAAI,GAAE,cAAmB,GAAG,eAAe,CAezE"}
|
package/dist/options.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveOptions = resolveOptions;
|
|
4
|
+
function resolveOptions(opts = {}) {
|
|
5
|
+
return {
|
|
6
|
+
sheets: opts.sheets,
|
|
7
|
+
sheetHeadings: opts.sheetHeadings ?? "auto",
|
|
8
|
+
headerRow: opts.headerRow ?? true,
|
|
9
|
+
tableDetection: {
|
|
10
|
+
minColumns: opts.tableDetection?.minColumns ?? 2,
|
|
11
|
+
minRows: opts.tableDetection?.minRows ?? 2,
|
|
12
|
+
useBorders: opts.tableDetection?.useBorders ?? true,
|
|
13
|
+
},
|
|
14
|
+
richText: opts.richText ?? true,
|
|
15
|
+
emptyCell: opts.emptyCell ?? "",
|
|
16
|
+
dateFormat: opts.dateFormat ?? "YYYY-MM-DD",
|
|
17
|
+
blankLinesBetweenRegions: opts.blankLinesBetweenRegions ?? 1,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":";;AAEA,wCAeC;AAfD,SAAgB,cAAc,CAAC,OAAuB,EAAE;IACtD,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,MAAM;QAC3C,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;QACjC,cAAc,EAAE;YACd,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,IAAI,CAAC;YAChD,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,IAAI,CAAC;YAC1C,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,IAAI,IAAI;SACpD;QACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;QAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;QAC/B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,YAAY;QAC3C,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,IAAI,CAAC;KAC7D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as XLSX from "xlsx";
|
|
2
|
+
import type { ResolvedOptions } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Render a paragraph region as a Markdown paragraph.
|
|
5
|
+
*
|
|
6
|
+
* For each non-empty cell in the region (scanned left-to-right, top-to-bottom),
|
|
7
|
+
* the text content is collected. Multiple cells in the same row are joined
|
|
8
|
+
* with a space. Each row becomes one "line" in the paragraph block.
|
|
9
|
+
* Consecutive non-empty lines are separated by a blank line only when a
|
|
10
|
+
* completely empty row appears between them; otherwise they are joined as a
|
|
11
|
+
* single paragraph.
|
|
12
|
+
*/
|
|
13
|
+
export declare function renderParagraph(ws: XLSX.WorkSheet, startRow: number, endRow: number, startCol: number, endCol: number, merges: XLSX.Range[], opts: ResolvedOptions, hiddenRows?: Set<number>, hiddenCols?: Set<number>): string;
|
|
14
|
+
//# sourceMappingURL=paragraph-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paragraph-renderer.d.ts","sourceRoot":"","sources":["../src/paragraph-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,IAAI,CAAC,SAAS,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EACpB,IAAI,EAAE,eAAe,EACrB,UAAU,GAAE,GAAG,CAAC,MAAM,CAAa,EACnC,UAAU,GAAE,GAAG,CAAC,MAAM,CAAa,GAClC,MAAM,CAuBR"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.renderParagraph = renderParagraph;
|
|
37
|
+
const XLSX = __importStar(require("xlsx"));
|
|
38
|
+
const cell_formatter_js_1 = require("./cell-formatter.js");
|
|
39
|
+
/**
|
|
40
|
+
* Render a paragraph region as a Markdown paragraph.
|
|
41
|
+
*
|
|
42
|
+
* For each non-empty cell in the region (scanned left-to-right, top-to-bottom),
|
|
43
|
+
* the text content is collected. Multiple cells in the same row are joined
|
|
44
|
+
* with a space. Each row becomes one "line" in the paragraph block.
|
|
45
|
+
* Consecutive non-empty lines are separated by a blank line only when a
|
|
46
|
+
* completely empty row appears between them; otherwise they are joined as a
|
|
47
|
+
* single paragraph.
|
|
48
|
+
*/
|
|
49
|
+
function renderParagraph(ws, startRow, endRow, startCol, endCol, merges, opts, hiddenRows = new Set(), hiddenCols = new Set()) {
|
|
50
|
+
const mergedChildCells = buildMergedChildSet(merges);
|
|
51
|
+
const lines = [];
|
|
52
|
+
for (let r = startRow; r <= endRow; r++) {
|
|
53
|
+
if (hiddenRows.has(r))
|
|
54
|
+
continue;
|
|
55
|
+
const parts = [];
|
|
56
|
+
for (let c = startCol; c <= endCol; c++) {
|
|
57
|
+
if (hiddenCols.has(c))
|
|
58
|
+
continue;
|
|
59
|
+
const addr = XLSX.utils.encode_cell({ r, c });
|
|
60
|
+
const cell = ws[addr];
|
|
61
|
+
const data = (0, cell_formatter_js_1.extractCellData)(cell, mergedChildCells, addr, opts);
|
|
62
|
+
if (!data.isMergedChild && data.value.trim()) {
|
|
63
|
+
parts.push(data.value.trim());
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (parts.length > 0) {
|
|
67
|
+
lines.push(parts.join(" "));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return lines.join("\n\n");
|
|
71
|
+
}
|
|
72
|
+
function buildMergedChildSet(merges) {
|
|
73
|
+
const set = new Set();
|
|
74
|
+
for (const m of merges) {
|
|
75
|
+
for (let r = m.s.r; r <= m.e.r; r++) {
|
|
76
|
+
for (let c = m.s.c; c <= m.e.c; c++) {
|
|
77
|
+
if (r === m.s.r && c === m.s.c)
|
|
78
|
+
continue;
|
|
79
|
+
set.add(XLSX.utils.encode_cell({ r, c }));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return set;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=paragraph-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paragraph-renderer.js","sourceRoot":"","sources":["../src/paragraph-renderer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,0CAiCC;AA/CD,2CAA6B;AAE7B,2DAAsD;AAEtD;;;;;;;;;GASG;AACH,SAAgB,eAAe,CAC7B,EAAkB,EAClB,QAAgB,EAChB,MAAc,EACd,QAAgB,EAChB,MAAc,EACd,MAAoB,EACpB,IAAqB,EACrB,aAA0B,IAAI,GAAG,EAAE,EACnC,aAA0B,IAAI,GAAG,EAAE;IAEnC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAErD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QAChC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,SAAS;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAgC,EAAE,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,IAAA,mCAAe,EAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACjE,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAoB;IAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAE,SAAS;gBACzC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { RowInfo, RegionType, ResolvedOptions } from "./types.js";
|
|
2
|
+
export interface RawRegion {
|
|
3
|
+
type: RegionType;
|
|
4
|
+
startRow: number;
|
|
5
|
+
endRow: number;
|
|
6
|
+
startCol: number;
|
|
7
|
+
endCol: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Detect content regions from a list of RowInfo objects.
|
|
11
|
+
*
|
|
12
|
+
* Algorithm (recursive):
|
|
13
|
+
* 1. Split rows by empty rows → "bands" of consecutive non-empty rows
|
|
14
|
+
* 2. Within each band, find contiguous column groups (split at all-empty columns)
|
|
15
|
+
* 3. If multiple column groups exist → recurse into each (handles side-by-side tables)
|
|
16
|
+
* 4. If a single column group → classify rows as table or paragraph by density
|
|
17
|
+
*/
|
|
18
|
+
export declare function detectRegions(rows: RowInfo[], opts: ResolvedOptions): RawRegion[];
|
|
19
|
+
//# sourceMappingURL=region-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"region-detector.d.ts","sourceRoot":"","sources":["../src/region-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEvE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,GAAG,SAAS,EAAE,CAMjF"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectRegions = detectRegions;
|
|
4
|
+
/**
|
|
5
|
+
* Detect content regions from a list of RowInfo objects.
|
|
6
|
+
*
|
|
7
|
+
* Algorithm (recursive):
|
|
8
|
+
* 1. Split rows by empty rows → "bands" of consecutive non-empty rows
|
|
9
|
+
* 2. Within each band, find contiguous column groups (split at all-empty columns)
|
|
10
|
+
* 3. If multiple column groups exist → recurse into each (handles side-by-side tables)
|
|
11
|
+
* 4. If a single column group → classify rows as table or paragraph by density
|
|
12
|
+
*/
|
|
13
|
+
function detectRegions(rows, opts) {
|
|
14
|
+
const nonEmpty = rows.filter((r) => r.filledCount > 0);
|
|
15
|
+
if (nonEmpty.length === 0)
|
|
16
|
+
return [];
|
|
17
|
+
const colStart = Math.min(...nonEmpty.map((r) => r.minCol));
|
|
18
|
+
const colEnd = Math.max(...nonEmpty.map((r) => r.maxCol));
|
|
19
|
+
return detectInRange(rows, colStart, colEnd, opts);
|
|
20
|
+
}
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Core recursive implementation
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
function detectInRange(rows, colStart, colEnd, opts) {
|
|
25
|
+
const regions = [];
|
|
26
|
+
let i = 0;
|
|
27
|
+
while (i < rows.length) {
|
|
28
|
+
if (countInRange(rows[i].filledCols, colStart, colEnd) === 0) {
|
|
29
|
+
i++;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
// Collect a band: consecutive rows with ≥1 filled cell in [colStart, colEnd]
|
|
33
|
+
const band = [];
|
|
34
|
+
let j = i;
|
|
35
|
+
while (j < rows.length && countInRange(rows[j].filledCols, colStart, colEnd) > 0) {
|
|
36
|
+
band.push(rows[j]);
|
|
37
|
+
j++;
|
|
38
|
+
}
|
|
39
|
+
// Build the set of filled columns within this band
|
|
40
|
+
const bandFilledCols = new Set();
|
|
41
|
+
for (const r of band) {
|
|
42
|
+
for (const c of r.filledCols) {
|
|
43
|
+
if (c >= colStart && c <= colEnd)
|
|
44
|
+
bandFilledCols.add(c);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Split the band by column gaps
|
|
48
|
+
const subRanges = findColSubRanges(bandFilledCols);
|
|
49
|
+
if (subRanges.length > 1) {
|
|
50
|
+
// Multiple column groups → recurse into each (separates side-by-side tables)
|
|
51
|
+
for (const [sc, ec] of subRanges) {
|
|
52
|
+
regions.push(...detectInRange(band, sc, ec, opts));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Single column group → classify rows by density
|
|
57
|
+
const [sc, ec] = subRanges[0] ?? [colStart, colEnd];
|
|
58
|
+
regions.push(...classifyBand(band, sc, ec, opts));
|
|
59
|
+
}
|
|
60
|
+
i = j;
|
|
61
|
+
}
|
|
62
|
+
return regions;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Classify a band of rows (no empty rows) within a fixed column range into
|
|
66
|
+
* table and paragraph regions based on row density.
|
|
67
|
+
*
|
|
68
|
+
* When useBorders is enabled two extra rules apply:
|
|
69
|
+
* 1. Table-start boundary: all rows before the first row that has a vertical
|
|
70
|
+
* border (left or right) are emitted as paragraphs, regardless of density.
|
|
71
|
+
* This lets a caption/title row sitting directly above a bordered table
|
|
72
|
+
* be correctly classified as a paragraph even when it is "dense".
|
|
73
|
+
* 2. Table-row criterion: within the density loop, a row is treated as a
|
|
74
|
+
* table-candidate when it has vertical borders, even if its filled-column
|
|
75
|
+
* count is below minColumns. This ensures that rows with only vertical
|
|
76
|
+
* cell borders (no horizontal borders) are still included in the table.
|
|
77
|
+
*/
|
|
78
|
+
function classifyBand(band, colStart, colEnd, opts) {
|
|
79
|
+
const { minColumns, minRows, useBorders } = opts.tableDetection;
|
|
80
|
+
const regions = [];
|
|
81
|
+
let i = 0;
|
|
82
|
+
// Border-based table-start detection: emit leading rows without vertical
|
|
83
|
+
// borders as paragraphs so that the table starts at the first row that has
|
|
84
|
+
// vertical (column-structure) borders.
|
|
85
|
+
if (useBorders) {
|
|
86
|
+
const firstVerticalBorderIdx = band.findIndex((r) => r.hasVerticalBorder);
|
|
87
|
+
if (firstVerticalBorderIdx > 0) {
|
|
88
|
+
const paraRows = band.slice(0, firstVerticalBorderIdx);
|
|
89
|
+
regions.push({
|
|
90
|
+
type: "paragraph",
|
|
91
|
+
startRow: paraRows[0].index,
|
|
92
|
+
endRow: paraRows[paraRows.length - 1].index,
|
|
93
|
+
startCol: colStart,
|
|
94
|
+
endCol: colEnd,
|
|
95
|
+
});
|
|
96
|
+
i = firstVerticalBorderIdx;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Helper: is this row a table candidate?
|
|
100
|
+
// When useBorders is on, vertical borders are sufficient even without density.
|
|
101
|
+
const isTableCandidate = (row) => {
|
|
102
|
+
if (countInRange(row.filledCols, colStart, colEnd) >= minColumns)
|
|
103
|
+
return true;
|
|
104
|
+
if (useBorders && row.hasVerticalBorder)
|
|
105
|
+
return true;
|
|
106
|
+
return false;
|
|
107
|
+
};
|
|
108
|
+
while (i < band.length) {
|
|
109
|
+
if (isTableCandidate(band[i])) {
|
|
110
|
+
// Table candidate row — try to extend a table downward
|
|
111
|
+
const tableRows = [band[i]];
|
|
112
|
+
let j = i + 1;
|
|
113
|
+
while (j < band.length && isTableCandidate(band[j])) {
|
|
114
|
+
tableRows.push(band[j]);
|
|
115
|
+
j++;
|
|
116
|
+
}
|
|
117
|
+
if (tableRows.length >= minRows) {
|
|
118
|
+
regions.push({
|
|
119
|
+
type: "table",
|
|
120
|
+
startRow: tableRows[0].index,
|
|
121
|
+
endRow: tableRows[tableRows.length - 1].index,
|
|
122
|
+
startCol: colStart,
|
|
123
|
+
endCol: colEnd,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
// Below minRows → demote each row to its own paragraph
|
|
128
|
+
for (const r of tableRows) {
|
|
129
|
+
regions.push({
|
|
130
|
+
type: "paragraph",
|
|
131
|
+
startRow: r.index,
|
|
132
|
+
endRow: r.index,
|
|
133
|
+
startCol: colStart,
|
|
134
|
+
endCol: colEnd,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
i = j;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// Non-candidate rows → paragraph
|
|
142
|
+
const paraRows = [band[i]];
|
|
143
|
+
let j = i + 1;
|
|
144
|
+
while (j < band.length && !isTableCandidate(band[j])) {
|
|
145
|
+
paraRows.push(band[j]);
|
|
146
|
+
j++;
|
|
147
|
+
}
|
|
148
|
+
regions.push({
|
|
149
|
+
type: "paragraph",
|
|
150
|
+
startRow: paraRows[0].index,
|
|
151
|
+
endRow: paraRows[paraRows.length - 1].index,
|
|
152
|
+
startCol: colStart,
|
|
153
|
+
endCol: colEnd,
|
|
154
|
+
});
|
|
155
|
+
i = j;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return regions;
|
|
159
|
+
}
|
|
160
|
+
// ---------------------------------------------------------------------------
|
|
161
|
+
// Helpers
|
|
162
|
+
// ---------------------------------------------------------------------------
|
|
163
|
+
/**
|
|
164
|
+
* Find contiguous column sub-ranges from a set of filled column indices.
|
|
165
|
+
* Columns with a gap (≥2 apart) start a new sub-range.
|
|
166
|
+
*/
|
|
167
|
+
function findColSubRanges(filledCols) {
|
|
168
|
+
const sorted = [...filledCols].sort((a, b) => a - b);
|
|
169
|
+
if (sorted.length === 0)
|
|
170
|
+
return [];
|
|
171
|
+
const ranges = [];
|
|
172
|
+
let rangeStart = sorted[0];
|
|
173
|
+
let prev = sorted[0];
|
|
174
|
+
for (let i = 1; i < sorted.length; i++) {
|
|
175
|
+
if (sorted[i] > prev + 1) {
|
|
176
|
+
ranges.push([rangeStart, prev]);
|
|
177
|
+
rangeStart = sorted[i];
|
|
178
|
+
}
|
|
179
|
+
prev = sorted[i];
|
|
180
|
+
}
|
|
181
|
+
ranges.push([rangeStart, prev]);
|
|
182
|
+
return ranges;
|
|
183
|
+
}
|
|
184
|
+
function countInRange(filledCols, colStart, colEnd) {
|
|
185
|
+
let count = 0;
|
|
186
|
+
for (const c of filledCols) {
|
|
187
|
+
if (c >= colStart && c <= colEnd)
|
|
188
|
+
count++;
|
|
189
|
+
}
|
|
190
|
+
return count;
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=region-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"region-detector.js","sourceRoot":"","sources":["../src/region-detector.ts"],"names":[],"mappings":";;AAmBA,sCAMC;AAfD;;;;;;;;GAQG;AACH,SAAgB,aAAa,CAAC,IAAe,EAAE,IAAqB;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,OAAO,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,SAAS,aAAa,CACpB,IAAe,EACf,QAAgB,EAChB,MAAc,EACd,IAAqB;IAErB,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7D,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,6EAA6E;QAC7E,MAAM,IAAI,GAAc,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACjF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,EAAE,CAAC;QACN,CAAC;QAED,mDAAmD;QACnD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM;oBAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,gCAAgC;QAChC,MAAM,SAAS,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAEnD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,6EAA6E;YAC7E,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,iDAAiD;YACjD,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,CAAC,GAAG,CAAC,CAAC;IACR,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,YAAY,CACnB,IAAe,EACf,QAAgB,EAChB,MAAc,EACd,IAAqB;IAErB,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;IAChE,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,yEAAyE;IACzE,2EAA2E;IAC3E,uCAAuC;IACvC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC1E,IAAI,sBAAsB,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK;gBAC3B,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK;gBAC3C,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;YACH,CAAC,GAAG,sBAAsB,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,+EAA+E;IAC/E,MAAM,gBAAgB,GAAG,CAAC,GAAY,EAAW,EAAE;QACjD,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,UAAU;YAAE,OAAO,IAAI,CAAC;QAC9E,IAAI,UAAU,IAAI,GAAG,CAAC,iBAAiB;YAAE,OAAO,IAAI,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,uDAAuD;YACvD,MAAM,SAAS,GAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxB,CAAC,EAAE,CAAC;YACN,CAAC;YAED,IAAI,SAAS,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK;oBAC5B,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK;oBAC7C,QAAQ,EAAE,QAAQ;oBAClB,MAAM,EAAE,MAAM;iBACf,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,uDAAuD;gBACvD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;oBAC1B,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,WAAW;wBACjB,QAAQ,EAAE,CAAC,CAAC,KAAK;wBACjB,MAAM,EAAE,CAAC,CAAC,KAAK;wBACf,QAAQ,EAAE,QAAQ;wBAClB,MAAM,EAAE,MAAM;qBACf,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,CAAC,GAAG,CAAC,CAAC;QACR,CAAC;aAAM,CAAC;YACN,iCAAiC;YACjC,MAAM,QAAQ,GAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC,EAAE,CAAC;YACN,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK;gBAC3B,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK;gBAC3C,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;YACH,CAAC,GAAG,CAAC,CAAC;QACR,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,gBAAgB,CAAC,UAAuB;IAC/C,MAAM,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,IAAI,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;YAChC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,UAAuB,EAAE,QAAgB,EAAE,MAAc;IAC7E,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM;YAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as XLSX from "xlsx";
|
|
2
|
+
import type { ResolvedOptions, SheetResult } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Convert a single worksheet to Markdown.
|
|
5
|
+
*/
|
|
6
|
+
export declare function convertSheet(ws: XLSX.WorkSheet, sheetName: string, sheetIndex: number, opts: ResolvedOptions): SheetResult;
|
|
7
|
+
//# sourceMappingURL=sheet-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheet-converter.d.ts","sourceRoot":"","sources":["../src/sheet-converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAU,eAAe,EAAW,WAAW,EAAE,MAAM,YAAY,CAAC;AAKhF;;GAEG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,IAAI,CAAC,SAAS,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,eAAe,GACpB,WAAW,CA6Rb"}
|