file2md 1.1.10 → 1.2.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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +52 -6
- package/dist/index.js.map +1 -1
- package/dist/parsers/hwp-parser.d.ts +20 -0
- package/dist/parsers/hwp-parser.d.ts.map +1 -0
- package/dist/parsers/hwp-parser.js +474 -0
- package/dist/parsers/hwp-parser.js.map +1 -0
- package/dist/parsers/pptx-parser.d.ts +0 -4
- package/dist/parsers/pptx-parser.d.ts.map +1 -1
- package/dist/parsers/pptx-parser.js +92 -159
- package/dist/parsers/pptx-parser.js.map +1 -1
- package/dist/types/interfaces.d.ts +2 -0
- package/dist/types/interfaces.d.ts.map +1 -1
- package/dist/types/interfaces.js +3 -1
- package/dist/types/interfaces.js.map +1 -1
- package/package.json +10 -8
- package/dist/utils/puppeteer-renderer.d.ts +0 -65
- package/dist/utils/puppeteer-renderer.d.ts.map +0 -1
- package/dist/utils/puppeteer-renderer.js +0 -393
- package/dist/utils/puppeteer-renderer.js.map +0 -1
- package/dist/utils/slide-renderer.d.ts +0 -119
- package/dist/utils/slide-renderer.d.ts.map +0 -1
- package/dist/utils/slide-renderer.js +0 -801
- package/dist/utils/slide-renderer.js.map +0 -1
package/dist/index.d.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import type { ConvertInput, ConvertOptions, ConversionResult } from './types/index.js';
|
2
2
|
/**
|
3
|
-
* Convert a document (PDF, DOCX, XLSX, PPTX) to Markdown format
|
3
|
+
* Convert a document (PDF, DOCX, XLSX, PPTX, HWP, HWPX) to Markdown format
|
4
4
|
*
|
5
5
|
* @param input - File path (string) or Buffer containing the document data
|
6
6
|
* @param options - Conversion options
|
package/dist/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,EAGjB,MAAM,kBAAkB,CAAC;AAoC1B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+J1G;AAGD,mBAAmB,kBAAkB,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
CHANGED
@@ -7,9 +7,33 @@ import { parsePdf } from './parsers/pdf-parser.js';
|
|
7
7
|
import { parseDocx } from './parsers/docx-parser.js';
|
8
8
|
import { parseXlsx } from './parsers/xlsx-parser.js';
|
9
9
|
import { parsePptx } from './parsers/pptx-parser.js';
|
10
|
+
import { parseHwp } from './parsers/hwp-parser.js';
|
10
11
|
import { FileNotFoundError, UnsupportedFormatError, InvalidFileError, SUPPORTED_MIME_TYPES } from './types/index.js';
|
11
12
|
/**
|
12
|
-
*
|
13
|
+
* Detect HWP format based on file signature
|
14
|
+
*/
|
15
|
+
function detectHwpFormat(buffer) {
|
16
|
+
if (buffer.length < 4) {
|
17
|
+
return 'unknown';
|
18
|
+
}
|
19
|
+
// Check for CFB/OLE2 signature (HWP binary format)
|
20
|
+
if (buffer.length >= 8) {
|
21
|
+
const cfbSignature = buffer.subarray(0, 8);
|
22
|
+
const expectedCfb = Buffer.from([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1]);
|
23
|
+
if (cfbSignature.equals(expectedCfb)) {
|
24
|
+
return 'hwp';
|
25
|
+
}
|
26
|
+
}
|
27
|
+
// Check for ZIP signature (HWPX format)
|
28
|
+
const zipSignature = buffer.subarray(0, 4);
|
29
|
+
const expectedZip = Buffer.from([0x50, 0x4B, 0x03, 0x04]);
|
30
|
+
if (zipSignature.equals(expectedZip)) {
|
31
|
+
return 'hwpx';
|
32
|
+
}
|
33
|
+
return 'unknown';
|
34
|
+
}
|
35
|
+
/**
|
36
|
+
* Convert a document (PDF, DOCX, XLSX, PPTX, HWP, HWPX) to Markdown format
|
13
37
|
*
|
14
38
|
* @param input - File path (string) or Buffer containing the document data
|
15
39
|
* @param options - Conversion options
|
@@ -57,9 +81,19 @@ export async function convert(input, options = {}) {
|
|
57
81
|
throw new InvalidFileError('Input must be a file path (string) or Buffer');
|
58
82
|
}
|
59
83
|
// Detect file type
|
60
|
-
|
84
|
+
let detectedType = await fileType.fromBuffer(buffer);
|
85
|
+
// Enhanced HWP/HWPX detection if file-type module fails
|
61
86
|
if (!detectedType) {
|
62
|
-
|
87
|
+
const hwpFormat = detectHwpFormat(buffer);
|
88
|
+
if (hwpFormat === 'hwp') {
|
89
|
+
detectedType = { mime: 'application/x-hwp', ext: 'hwp' };
|
90
|
+
}
|
91
|
+
else if (hwpFormat === 'hwpx') {
|
92
|
+
detectedType = { mime: 'application/x-hwpx', ext: 'hwpx' };
|
93
|
+
}
|
94
|
+
else {
|
95
|
+
throw new UnsupportedFormatError('unknown');
|
96
|
+
}
|
63
97
|
}
|
64
98
|
// Validate supported format
|
65
99
|
const supportedMimeTypes = Object.values(SUPPORTED_MIME_TYPES);
|
@@ -105,9 +139,7 @@ export async function convert(input, options = {}) {
|
|
105
139
|
const result = await parsePptx(buffer, imageExtractor, chartExtractor, {
|
106
140
|
preserveLayout,
|
107
141
|
extractImages,
|
108
|
-
extractCharts
|
109
|
-
outputDir: outputDir || imageDir, // Use outputDir if specified, fallback to imageDir
|
110
|
-
useSlideScreenshots: true // Enable slide screenshots by default
|
142
|
+
extractCharts
|
111
143
|
});
|
112
144
|
markdown = result.markdown;
|
113
145
|
images = result.images || [];
|
@@ -116,6 +148,20 @@ export async function convert(input, options = {}) {
|
|
116
148
|
additionalMetadata = result.metadata || {};
|
117
149
|
break;
|
118
150
|
}
|
151
|
+
case SUPPORTED_MIME_TYPES.HWP:
|
152
|
+
case SUPPORTED_MIME_TYPES.HWPX: {
|
153
|
+
const result = await parseHwp(buffer, imageExtractor, chartExtractor, {
|
154
|
+
preserveLayout,
|
155
|
+
extractImages,
|
156
|
+
extractCharts
|
157
|
+
});
|
158
|
+
markdown = result.markdown;
|
159
|
+
images = result.images || [];
|
160
|
+
charts = result.charts || [];
|
161
|
+
pageCount = 1; // Single document
|
162
|
+
additionalMetadata = result.metadata || {};
|
163
|
+
break;
|
164
|
+
}
|
119
165
|
default: {
|
120
166
|
// This should never happen due to earlier validation, but TypeScript requires it
|
121
167
|
const exhaustiveCheck = detectedType.mime;
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
2
|
+
import type { ImageExtractor } from '../utils/image-extractor.js';
|
3
|
+
import type { ChartExtractor } from '../utils/chart-extractor.js';
|
4
|
+
import type { ImageData, ChartData } from '../types/interfaces.js';
|
5
|
+
export interface HwpParseOptions {
|
6
|
+
readonly preserveLayout?: boolean;
|
7
|
+
readonly extractImages?: boolean;
|
8
|
+
readonly extractCharts?: boolean;
|
9
|
+
}
|
10
|
+
export interface HwpParseResult {
|
11
|
+
readonly markdown: string;
|
12
|
+
readonly images: readonly ImageData[];
|
13
|
+
readonly charts: readonly ChartData[];
|
14
|
+
readonly metadata: Record<string, unknown>;
|
15
|
+
}
|
16
|
+
/**
|
17
|
+
* Parse HWP or HWPX buffer and convert to markdown
|
18
|
+
*/
|
19
|
+
export declare function parseHwp(buffer: Buffer, imageExtractor: ImageExtractor, chartExtractor: ChartExtractor, options?: HwpParseOptions): Promise<HwpParseResult>;
|
20
|
+
//# sourceMappingURL=hwp-parser.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"hwp-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/hwp-parser.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACV,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAID;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAgBzB"}
|
@@ -0,0 +1,474 @@
|
|
1
|
+
import JSZip from 'jszip';
|
2
|
+
import { XMLParser } from 'fast-xml-parser';
|
3
|
+
import { JSDOM } from 'jsdom';
|
4
|
+
import path from 'node:path';
|
5
|
+
import { Buffer } from 'node:buffer';
|
6
|
+
import { ParseError } from '../types/errors.js';
|
7
|
+
/**
|
8
|
+
* Parse HWP or HWPX buffer and convert to markdown
|
9
|
+
*/
|
10
|
+
export async function parseHwp(buffer, imageExtractor, chartExtractor, options = {}) {
|
11
|
+
try {
|
12
|
+
const format = detectHwpFormat(buffer);
|
13
|
+
switch (format) {
|
14
|
+
case 'hwp':
|
15
|
+
return await parseHwpBinary(buffer, imageExtractor, chartExtractor, options);
|
16
|
+
case 'hwpx':
|
17
|
+
return await parseHwpxXml(buffer, imageExtractor, chartExtractor, options);
|
18
|
+
default:
|
19
|
+
throw new ParseError('HWP', 'Unsupported HWP format variant');
|
20
|
+
}
|
21
|
+
}
|
22
|
+
catch (error) {
|
23
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
24
|
+
throw new ParseError('HWP', message, error);
|
25
|
+
}
|
26
|
+
}
|
27
|
+
/**
|
28
|
+
* Detect HWP format based on file signature
|
29
|
+
*/
|
30
|
+
function detectHwpFormat(buffer) {
|
31
|
+
if (buffer.length < 4) {
|
32
|
+
return 'unknown';
|
33
|
+
}
|
34
|
+
// Check for CFB/OLE2 signature (HWP binary format)
|
35
|
+
if (buffer.length >= 8) {
|
36
|
+
const cfbSignature = buffer.subarray(0, 8);
|
37
|
+
const expectedCfb = Buffer.from([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1]);
|
38
|
+
if (cfbSignature.equals(expectedCfb)) {
|
39
|
+
return 'hwp';
|
40
|
+
}
|
41
|
+
}
|
42
|
+
// Check for ZIP signature (HWPX format)
|
43
|
+
const zipSignature = buffer.subarray(0, 4);
|
44
|
+
const expectedZip = Buffer.from([0x50, 0x4B, 0x03, 0x04]);
|
45
|
+
if (zipSignature.equals(expectedZip)) {
|
46
|
+
return 'hwpx';
|
47
|
+
}
|
48
|
+
return 'unknown';
|
49
|
+
}
|
50
|
+
/**
|
51
|
+
* Parse HWP binary format using hwp.js
|
52
|
+
*/
|
53
|
+
async function parseHwpBinary(buffer, imageExtractor, chartExtractor, options) {
|
54
|
+
try {
|
55
|
+
// Dynamic import of hwp.js to handle potential loading issues
|
56
|
+
const { Viewer } = await import('hwp.js');
|
57
|
+
// Convert Buffer to Uint8Array for hwp.js
|
58
|
+
const uint8Array = new Uint8Array(buffer);
|
59
|
+
// Create a virtual DOM environment for hwp.js
|
60
|
+
const dom = new JSDOM('<!DOCTYPE html><html><body><div id="hwp-container"></div></body></html>');
|
61
|
+
const originalDocument = global.document;
|
62
|
+
const originalWindow = global.window;
|
63
|
+
// Set global DOM objects for hwp.js
|
64
|
+
global.document = dom.window.document;
|
65
|
+
global.window = dom.window;
|
66
|
+
try {
|
67
|
+
const container = global.document.getElementById('hwp-container');
|
68
|
+
if (!container) {
|
69
|
+
throw new Error('Failed to create container element');
|
70
|
+
}
|
71
|
+
// Initialize hwp.js viewer
|
72
|
+
const viewer = new Viewer(container, uint8Array);
|
73
|
+
// Wait for viewer to process the document
|
74
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
75
|
+
// Extract text content from the rendered DOM
|
76
|
+
const textContent = extractTextFromViewer(container);
|
77
|
+
// Parse images if requested
|
78
|
+
const images = options.extractImages !== false ?
|
79
|
+
await extractHwpImages(container, imageExtractor) : [];
|
80
|
+
// Convert to markdown
|
81
|
+
const markdown = convertHwpContentToMarkdown(textContent);
|
82
|
+
return {
|
83
|
+
markdown,
|
84
|
+
images,
|
85
|
+
charts: [], // hwp.js doesn't directly expose chart data
|
86
|
+
metadata: {
|
87
|
+
format: 'hwp',
|
88
|
+
parser: 'hwp.js',
|
89
|
+
totalParagraphs: textContent.length
|
90
|
+
}
|
91
|
+
};
|
92
|
+
}
|
93
|
+
finally {
|
94
|
+
// Restore global objects
|
95
|
+
global.document = originalDocument;
|
96
|
+
global.window = originalWindow;
|
97
|
+
}
|
98
|
+
}
|
99
|
+
catch (error) {
|
100
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
101
|
+
throw new ParseError('HWP', `Failed to parse HWP file with hwp.js: ${message}`, error);
|
102
|
+
}
|
103
|
+
}
|
104
|
+
/**
|
105
|
+
* Parse HWPX XML format using JSZip and fast-xml-parser
|
106
|
+
*/
|
107
|
+
async function parseHwpxXml(buffer, imageExtractor, chartExtractor, options) {
|
108
|
+
try {
|
109
|
+
const zip = await JSZip.loadAsync(buffer);
|
110
|
+
// Find main content files in HWPX (OWPML format)
|
111
|
+
const contentFiles = [
|
112
|
+
'Contents/content.xml',
|
113
|
+
'content.xml',
|
114
|
+
'Contents/document.xml',
|
115
|
+
'document.xml',
|
116
|
+
'Contents/body.xml',
|
117
|
+
'body.xml'
|
118
|
+
];
|
119
|
+
let contentFile = null;
|
120
|
+
let contentFileName = '';
|
121
|
+
for (const fileName of contentFiles) {
|
122
|
+
contentFile = zip.file(fileName);
|
123
|
+
if (contentFile) {
|
124
|
+
contentFileName = fileName;
|
125
|
+
break;
|
126
|
+
}
|
127
|
+
}
|
128
|
+
if (!contentFile) {
|
129
|
+
throw new ParseError('HWPX', 'No content XML file found in HWPX archive');
|
130
|
+
}
|
131
|
+
// Parse XML with fast-xml-parser
|
132
|
+
const xmlContent = await contentFile.async('string');
|
133
|
+
const parser = new XMLParser({
|
134
|
+
ignoreAttributes: false,
|
135
|
+
attributeNamePrefix: '@_',
|
136
|
+
textNodeName: '#text',
|
137
|
+
parseAttributeValue: true,
|
138
|
+
trimValues: true
|
139
|
+
});
|
140
|
+
const parsedXml = parser.parse(xmlContent);
|
141
|
+
console.log(`Parsed HWPX XML from ${contentFileName}`);
|
142
|
+
// Extract images from ZIP if requested
|
143
|
+
const images = options.extractImages !== false ?
|
144
|
+
await extractHwpxImages(zip, imageExtractor) : [];
|
145
|
+
// Convert OWPML structure to markdown
|
146
|
+
const markdown = convertOwpmlToMarkdown(parsedXml);
|
147
|
+
return {
|
148
|
+
markdown,
|
149
|
+
images,
|
150
|
+
charts: [], // Basic implementation, can be enhanced later
|
151
|
+
metadata: {
|
152
|
+
format: 'hwpx',
|
153
|
+
parser: 'jszip+fast-xml-parser',
|
154
|
+
contentFile: contentFileName,
|
155
|
+
zipEntries: Object.keys(zip.files).length
|
156
|
+
}
|
157
|
+
};
|
158
|
+
}
|
159
|
+
catch (error) {
|
160
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
161
|
+
throw new ParseError('HWPX', `Failed to parse HWPX file: ${message}`, error);
|
162
|
+
}
|
163
|
+
}
|
164
|
+
/**
|
165
|
+
* Extract text content from hwp.js rendered DOM
|
166
|
+
*/
|
167
|
+
function extractTextFromViewer(container) {
|
168
|
+
const paragraphs = [];
|
169
|
+
// Look for various text-containing elements
|
170
|
+
const textSelectors = [
|
171
|
+
'[data-text]',
|
172
|
+
'.hwp-text',
|
173
|
+
'p',
|
174
|
+
'div[style*="text"]',
|
175
|
+
'span'
|
176
|
+
];
|
177
|
+
for (const selector of textSelectors) {
|
178
|
+
try {
|
179
|
+
const elements = container.querySelectorAll(selector);
|
180
|
+
elements.forEach(element => {
|
181
|
+
const text = element.textContent?.trim();
|
182
|
+
if (text && text.length > 0 && !paragraphs.includes(text)) {
|
183
|
+
paragraphs.push(text);
|
184
|
+
}
|
185
|
+
});
|
186
|
+
if (paragraphs.length > 0)
|
187
|
+
break; // Use first successful selector
|
188
|
+
}
|
189
|
+
catch (error) {
|
190
|
+
continue; // Try next selector
|
191
|
+
}
|
192
|
+
}
|
193
|
+
// Fallback: get all text content
|
194
|
+
if (paragraphs.length === 0) {
|
195
|
+
const allText = container.textContent?.trim();
|
196
|
+
if (allText) {
|
197
|
+
// Split by common paragraph separators
|
198
|
+
const lines = allText.split(/\n\s*\n|\r\n\s*\r\n/);
|
199
|
+
paragraphs.push(...lines.filter(line => line.trim().length > 0));
|
200
|
+
}
|
201
|
+
}
|
202
|
+
return paragraphs;
|
203
|
+
}
|
204
|
+
/**
|
205
|
+
* Extract images from HWP binary format
|
206
|
+
*/
|
207
|
+
async function extractHwpImages(container, imageExtractor) {
|
208
|
+
const images = [];
|
209
|
+
try {
|
210
|
+
// Look for image elements in the rendered content
|
211
|
+
const imgElements = container.querySelectorAll('img, canvas, [style*="background-image"]');
|
212
|
+
imgElements.forEach((element, index) => {
|
213
|
+
const src = element.getAttribute('src');
|
214
|
+
if (src && src.startsWith('data:')) {
|
215
|
+
// Handle base64 embedded images
|
216
|
+
try {
|
217
|
+
const matches = src.match(/data:image\/([^;]+);base64,(.+)/);
|
218
|
+
if (matches) {
|
219
|
+
const format = matches[1];
|
220
|
+
const base64Data = matches[2];
|
221
|
+
const imageBuffer = Buffer.from(base64Data, 'base64');
|
222
|
+
const filename = `hwp-image-${index + 1}.${format}`;
|
223
|
+
const imagePath = path.join(imageExtractor.imageDirectory, filename);
|
224
|
+
// Note: This is a simplified approach
|
225
|
+
// In a real implementation, you'd save the buffer to disk
|
226
|
+
images.push({
|
227
|
+
originalPath: `hwp-embedded-${index + 1}`,
|
228
|
+
savedPath: imagePath,
|
229
|
+
format,
|
230
|
+
size: imageBuffer.length
|
231
|
+
});
|
232
|
+
}
|
233
|
+
}
|
234
|
+
catch (error) {
|
235
|
+
console.warn(`Failed to process embedded image ${index + 1}:`, error);
|
236
|
+
}
|
237
|
+
}
|
238
|
+
});
|
239
|
+
}
|
240
|
+
catch (error) {
|
241
|
+
console.warn('Failed to extract images from HWP:', error);
|
242
|
+
}
|
243
|
+
return images;
|
244
|
+
}
|
245
|
+
/**
|
246
|
+
* Extract images from HWPX ZIP archive
|
247
|
+
*/
|
248
|
+
async function extractHwpxImages(zip, imageExtractor) {
|
249
|
+
const images = [];
|
250
|
+
try {
|
251
|
+
// Look for image files in the ZIP archive
|
252
|
+
const imageExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.tiff'];
|
253
|
+
for (const [fileName, file] of Object.entries(zip.files)) {
|
254
|
+
if (!file.dir && imageExtensions.some(ext => fileName.toLowerCase().endsWith(ext))) {
|
255
|
+
try {
|
256
|
+
const imageBuffer = await file.async('nodebuffer');
|
257
|
+
const extension = path.extname(fileName).slice(1).toLowerCase();
|
258
|
+
const baseName = path.basename(fileName, path.extname(fileName));
|
259
|
+
const savedFileName = `${baseName}.${extension}`;
|
260
|
+
const savedPath = path.join(imageExtractor.imageDirectory, savedFileName);
|
261
|
+
// Save image using imageExtractor
|
262
|
+
await imageExtractor.saveImage(imageBuffer, fileName);
|
263
|
+
images.push({
|
264
|
+
originalPath: fileName,
|
265
|
+
savedPath,
|
266
|
+
format: extension,
|
267
|
+
size: imageBuffer.length
|
268
|
+
});
|
269
|
+
}
|
270
|
+
catch (error) {
|
271
|
+
console.warn(`Failed to extract image ${fileName}:`, error);
|
272
|
+
}
|
273
|
+
}
|
274
|
+
}
|
275
|
+
}
|
276
|
+
catch (error) {
|
277
|
+
console.warn('Failed to extract images from HWPX:', error);
|
278
|
+
}
|
279
|
+
return images;
|
280
|
+
}
|
281
|
+
/**
|
282
|
+
* Convert HWP text content to markdown
|
283
|
+
*/
|
284
|
+
function convertHwpContentToMarkdown(textContent) {
|
285
|
+
if (textContent.length === 0) {
|
286
|
+
return '*No content found*';
|
287
|
+
}
|
288
|
+
let markdown = '';
|
289
|
+
textContent.forEach((paragraph, index) => {
|
290
|
+
if (paragraph.trim().length === 0)
|
291
|
+
return;
|
292
|
+
// Simple heuristics for formatting
|
293
|
+
if (paragraph.length < 50 && index === 0) {
|
294
|
+
// Likely a title
|
295
|
+
markdown += `# ${paragraph}\n\n`;
|
296
|
+
}
|
297
|
+
else if (paragraph.match(/^[0-9]+\./)) {
|
298
|
+
// Numbered list item
|
299
|
+
markdown += `${paragraph}\n`;
|
300
|
+
}
|
301
|
+
else if (paragraph.match(/^[-•]/)) {
|
302
|
+
// Bullet list item
|
303
|
+
markdown += `${paragraph}\n`;
|
304
|
+
}
|
305
|
+
else {
|
306
|
+
// Regular paragraph
|
307
|
+
markdown += `${paragraph}\n\n`;
|
308
|
+
}
|
309
|
+
});
|
310
|
+
return markdown.trim();
|
311
|
+
}
|
312
|
+
/**
|
313
|
+
* Convert OWPML structure to markdown
|
314
|
+
*/
|
315
|
+
function convertOwpmlToMarkdown(owpmlData) {
|
316
|
+
let markdown = '';
|
317
|
+
try {
|
318
|
+
// Navigate OWPML structure (HWPX uses OWPML - Office Word Processor Markup Language)
|
319
|
+
const root = owpmlData.OWPML || owpmlData.owpml || owpmlData;
|
320
|
+
if (root.body || root.Body) {
|
321
|
+
const body = root.body || root.Body;
|
322
|
+
markdown = processOwpmlBody(body);
|
323
|
+
}
|
324
|
+
else if (root.BODY) {
|
325
|
+
const body = root.BODY;
|
326
|
+
markdown = processOwpmlBody(body);
|
327
|
+
}
|
328
|
+
else {
|
329
|
+
// Try to extract any text content from the parsed XML
|
330
|
+
markdown = extractTextFromObject(root);
|
331
|
+
}
|
332
|
+
if (!markdown.trim()) {
|
333
|
+
markdown = '*No readable content found in HWPX file*';
|
334
|
+
}
|
335
|
+
}
|
336
|
+
catch (error) {
|
337
|
+
console.warn('Error processing OWPML structure:', error);
|
338
|
+
markdown = '*Error processing HWPX content*';
|
339
|
+
}
|
340
|
+
return markdown;
|
341
|
+
}
|
342
|
+
/**
|
343
|
+
* Process OWPML body content
|
344
|
+
*/
|
345
|
+
function processOwpmlBody(body) {
|
346
|
+
let result = '';
|
347
|
+
try {
|
348
|
+
// Process sections
|
349
|
+
if (body.section || body.Section || body.SECTION) {
|
350
|
+
const sections = body.section || body.Section || body.SECTION;
|
351
|
+
const sectionArray = Array.isArray(sections) ? sections : [sections];
|
352
|
+
sectionArray.forEach((section) => {
|
353
|
+
result += processOwpmlSection(section);
|
354
|
+
});
|
355
|
+
}
|
356
|
+
// Process paragraphs directly in body
|
357
|
+
if (body.p || body.P || body.PARA) {
|
358
|
+
const paragraphs = body.p || body.P || body.PARA;
|
359
|
+
const paraArray = Array.isArray(paragraphs) ? paragraphs : [paragraphs];
|
360
|
+
paraArray.forEach((para) => {
|
361
|
+
result += processOwpmlParagraph(para);
|
362
|
+
});
|
363
|
+
}
|
364
|
+
// Fallback: extract any text
|
365
|
+
if (!result.trim()) {
|
366
|
+
result = extractTextFromObject(body);
|
367
|
+
}
|
368
|
+
}
|
369
|
+
catch (error) {
|
370
|
+
console.warn('Error processing OWPML body:', error);
|
371
|
+
}
|
372
|
+
return result;
|
373
|
+
}
|
374
|
+
/**
|
375
|
+
* Process OWPML section
|
376
|
+
*/
|
377
|
+
function processOwpmlSection(section) {
|
378
|
+
let result = '';
|
379
|
+
try {
|
380
|
+
if (section.p || section.P || section.PARA) {
|
381
|
+
const paragraphs = section.p || section.P || section.PARA;
|
382
|
+
const paraArray = Array.isArray(paragraphs) ? paragraphs : [paragraphs];
|
383
|
+
paraArray.forEach((para) => {
|
384
|
+
result += processOwpmlParagraph(para);
|
385
|
+
});
|
386
|
+
}
|
387
|
+
else {
|
388
|
+
result = extractTextFromObject(section);
|
389
|
+
}
|
390
|
+
}
|
391
|
+
catch (error) {
|
392
|
+
console.warn('Error processing OWPML section:', error);
|
393
|
+
}
|
394
|
+
return result;
|
395
|
+
}
|
396
|
+
/**
|
397
|
+
* Process OWPML paragraph
|
398
|
+
*/
|
399
|
+
function processOwpmlParagraph(para) {
|
400
|
+
let result = '';
|
401
|
+
try {
|
402
|
+
// Handle text content
|
403
|
+
if (para['#text']) {
|
404
|
+
result = para['#text'].toString().trim() + '\n\n';
|
405
|
+
}
|
406
|
+
// Handle runs/text runs
|
407
|
+
if (para.run || para.RUN || para.r || para.R) {
|
408
|
+
const runs = para.run || para.RUN || para.r || para.R;
|
409
|
+
const runArray = Array.isArray(runs) ? runs : [runs];
|
410
|
+
let paraText = '';
|
411
|
+
runArray.forEach((run) => {
|
412
|
+
if (run['#text']) {
|
413
|
+
paraText += run['#text'].toString();
|
414
|
+
}
|
415
|
+
else if (run.t || run.T) {
|
416
|
+
const textElements = run.t || run.T;
|
417
|
+
const textArray = Array.isArray(textElements) ? textElements : [textElements];
|
418
|
+
textArray.forEach((textEl) => {
|
419
|
+
if (textEl['#text']) {
|
420
|
+
paraText += textEl['#text'].toString();
|
421
|
+
}
|
422
|
+
else if (typeof textEl === 'string') {
|
423
|
+
paraText += textEl;
|
424
|
+
}
|
425
|
+
});
|
426
|
+
}
|
427
|
+
});
|
428
|
+
if (paraText.trim()) {
|
429
|
+
result = paraText.trim() + '\n\n';
|
430
|
+
}
|
431
|
+
}
|
432
|
+
// Fallback: extract any text from the paragraph
|
433
|
+
if (!result.trim()) {
|
434
|
+
result = extractTextFromObject(para);
|
435
|
+
if (result.trim()) {
|
436
|
+
result += '\n\n';
|
437
|
+
}
|
438
|
+
}
|
439
|
+
}
|
440
|
+
catch (error) {
|
441
|
+
console.warn('Error processing OWPML paragraph:', error);
|
442
|
+
}
|
443
|
+
return result;
|
444
|
+
}
|
445
|
+
/**
|
446
|
+
* Extract text from any object recursively
|
447
|
+
*/
|
448
|
+
function extractTextFromObject(obj) {
|
449
|
+
if (typeof obj === 'string') {
|
450
|
+
return obj;
|
451
|
+
}
|
452
|
+
if (typeof obj === 'number') {
|
453
|
+
return obj.toString();
|
454
|
+
}
|
455
|
+
if (Array.isArray(obj)) {
|
456
|
+
return obj.map(item => extractTextFromObject(item)).join(' ');
|
457
|
+
}
|
458
|
+
if (typeof obj === 'object' && obj !== null) {
|
459
|
+
let text = '';
|
460
|
+
// Look for common text properties first
|
461
|
+
if (obj['#text']) {
|
462
|
+
text += obj['#text'].toString() + ' ';
|
463
|
+
}
|
464
|
+
// Recursively extract text from all properties
|
465
|
+
for (const [key, value] of Object.entries(obj)) {
|
466
|
+
if (key !== '#text' && key !== '@_') { // Skip attributes
|
467
|
+
text += extractTextFromObject(value) + ' ';
|
468
|
+
}
|
469
|
+
}
|
470
|
+
return text.trim();
|
471
|
+
}
|
472
|
+
return '';
|
473
|
+
}
|
474
|
+
//# sourceMappingURL=hwp-parser.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"hwp-parser.js","sourceRoot":"","sources":["../../src/parsers/hwp-parser.ts"],"names":[],"mappings":"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"}
|