file2md 1.1.9 → 1.1.10

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.
@@ -0,0 +1,648 @@
1
+ import JSZip from 'jszip';
2
+ import { parseStringPromise } from 'xml2js';
3
+ import { ParseError } from '../types/errors.js';
4
+ export class PptxVisualParser {
5
+ zip = null;
6
+ slideCount = 0;
7
+ relationships = new Map();
8
+ themes = new Map();
9
+ /**
10
+ * Parse PPTX buffer to extract comprehensive visual information
11
+ */
12
+ async parseVisualElements(pptxBuffer) {
13
+ try {
14
+ // Load PPTX as ZIP
15
+ this.zip = await JSZip.loadAsync(pptxBuffer);
16
+ // Parse presentation structure
17
+ const presentationXml = await this.getXmlContent('ppt/presentation.xml');
18
+ const presentation = await parseStringPromise(presentationXml);
19
+ // Extract slide references
20
+ const slideIds = this.extractSlideReferences(presentation);
21
+ this.slideCount = slideIds.length;
22
+ console.log(`Found ${this.slideCount} slides to parse`);
23
+ // Load relationships and themes
24
+ await this.loadRelationships();
25
+ await this.loadThemes();
26
+ // Parse each slide
27
+ const slides = [];
28
+ for (let i = 0; i < slideIds.length; i++) {
29
+ const slideId = slideIds[i];
30
+ try {
31
+ const slide = await this.parseSlide(slideId.id, slideId.rId, i + 1);
32
+ slides.push(slide);
33
+ console.log(`Parsed slide ${i + 1}: ${slide.elements.length} elements`);
34
+ }
35
+ catch (slideError) {
36
+ console.warn(`Failed to parse slide ${i + 1}:`, slideError);
37
+ // Create a placeholder slide
38
+ slides.push(this.createPlaceholderSlide(slideId.id, i + 1));
39
+ }
40
+ }
41
+ return slides;
42
+ }
43
+ catch (error) {
44
+ const message = error instanceof Error ? error.message : 'Unknown error';
45
+ throw new ParseError('PptxVisualParser', `Visual parsing failed: ${message}`, error);
46
+ }
47
+ }
48
+ /**
49
+ * Extract slide references from presentation.xml
50
+ */
51
+ extractSlideReferences(presentation) {
52
+ const slideIds = [];
53
+ try {
54
+ const slideIdList = presentation?.['p:presentation']?.['p:sldIdLst']?.[0]?.['p:sldId'];
55
+ if (slideIdList && Array.isArray(slideIdList)) {
56
+ for (const slide of slideIdList) {
57
+ const id = slide.$?.id;
58
+ const rId = slide.$?.['r:id'];
59
+ if (id && rId) {
60
+ slideIds.push({ id, rId });
61
+ }
62
+ }
63
+ }
64
+ }
65
+ catch (error) {
66
+ console.warn('Error extracting slide references:', error);
67
+ }
68
+ return slideIds;
69
+ }
70
+ /**
71
+ * Load relationships from _rels files
72
+ */
73
+ async loadRelationships() {
74
+ try {
75
+ // Load presentation relationships
76
+ const presRels = await this.getXmlContent('ppt/_rels/presentation.xml.rels');
77
+ if (presRels) {
78
+ const relsDoc = await parseStringPromise(presRels);
79
+ this.relationships.set('presentation', relsDoc);
80
+ }
81
+ // Load slide relationships
82
+ this.zip?.forEach((relativePath, file) => {
83
+ if (relativePath.includes('ppt/slides/_rels/') && relativePath.endsWith('.rels')) {
84
+ // Load slide-specific relationships
85
+ file.async('string').then(async (content) => {
86
+ try {
87
+ const relsDoc = await parseStringPromise(content);
88
+ const slideId = relativePath.match(/slide(\d+)\.xml\.rels/)?.[1];
89
+ if (slideId) {
90
+ this.relationships.set(`slide${slideId}`, relsDoc);
91
+ }
92
+ }
93
+ catch (error) {
94
+ console.warn(`Failed to parse relationships for ${relativePath}:`, error);
95
+ }
96
+ });
97
+ }
98
+ });
99
+ }
100
+ catch (error) {
101
+ console.warn('Error loading relationships:', error);
102
+ }
103
+ }
104
+ /**
105
+ * Load theme information
106
+ */
107
+ async loadThemes() {
108
+ try {
109
+ this.zip?.forEach((relativePath, file) => {
110
+ if (relativePath.includes('ppt/theme/') && relativePath.endsWith('.xml')) {
111
+ file.async('string').then(async (content) => {
112
+ try {
113
+ const themeDoc = await parseStringPromise(content);
114
+ const themeId = relativePath.match(/theme(\d+)\.xml/)?.[1] || '1';
115
+ this.themes.set(themeId, themeDoc);
116
+ }
117
+ catch (error) {
118
+ console.warn(`Failed to parse theme ${relativePath}:`, error);
119
+ }
120
+ });
121
+ }
122
+ });
123
+ }
124
+ catch (error) {
125
+ console.warn('Error loading themes:', error);
126
+ }
127
+ }
128
+ /**
129
+ * Parse individual slide
130
+ */
131
+ async parseSlide(slideId, rId, slideNumber) {
132
+ // Get slide path from relationships
133
+ const slideRel = this.findRelationshipTarget('presentation', rId);
134
+ const slidePath = slideRel ? `ppt/${slideRel.target}` : `ppt/slides/slide${slideNumber}.xml`;
135
+ // Load slide XML
136
+ const slideXml = await this.getXmlContent(slidePath);
137
+ const slideDoc = await parseStringPromise(slideXml);
138
+ // Extract slide dimensions
139
+ const dimensions = this.extractSlideDimensions(slideDoc);
140
+ // Extract background
141
+ const background = this.extractSlideBackground(slideDoc);
142
+ // Extract title
143
+ const title = this.extractSlideTitle(slideDoc);
144
+ // Parse visual elements
145
+ const elements = await this.parseSlideElements(slideDoc, slideNumber);
146
+ return {
147
+ slideId,
148
+ slideNumber,
149
+ title,
150
+ background,
151
+ elements,
152
+ dimensions
153
+ };
154
+ }
155
+ /**
156
+ * Extract slide dimensions
157
+ */
158
+ extractSlideDimensions(slideDoc) {
159
+ try {
160
+ // Default PowerPoint slide dimensions in EMUs (English Metric Units)
161
+ // Standard 16:9 slide: 12192000 x 6858000 EMUs
162
+ const defaultWidth = 12192000;
163
+ const defaultHeight = 6858000;
164
+ // Try to extract actual dimensions from slide master or layout
165
+ // This is a simplified implementation
166
+ return {
167
+ width: defaultWidth,
168
+ height: defaultHeight,
169
+ units: 'EMU'
170
+ };
171
+ }
172
+ catch {
173
+ // Fallback to standard dimensions
174
+ return {
175
+ width: 12192000,
176
+ height: 6858000,
177
+ units: 'EMU'
178
+ };
179
+ }
180
+ }
181
+ /**
182
+ * Extract slide background information
183
+ */
184
+ extractSlideBackground(slideDoc) {
185
+ try {
186
+ const bg = slideDoc?.['p:sld']?.['p:cSld']?.[0]?.['p:bg'];
187
+ if (bg) {
188
+ // This is a simplified implementation
189
+ // Real implementation would parse various background types
190
+ return {
191
+ type: 'solid',
192
+ color: '#FFFFFF'
193
+ };
194
+ }
195
+ }
196
+ catch {
197
+ // No background or parsing failed
198
+ }
199
+ return undefined;
200
+ }
201
+ /**
202
+ * Extract slide title
203
+ */
204
+ extractSlideTitle(slideDoc) {
205
+ try {
206
+ const shapes = slideDoc?.['p:sld']?.['p:cSld']?.[0]?.['p:spTree']?.[0]?.['p:sp'];
207
+ if (shapes && Array.isArray(shapes)) {
208
+ for (const shape of shapes) {
209
+ const nvSpPr = shape?.['p:nvSpPr']?.[0];
210
+ const ph = nvSpPr?.['p:nvPr']?.[0]?.['p:ph']?.[0];
211
+ if (ph?.$ && ph.$.type === 'title') {
212
+ // Extract text from title shape
213
+ const textBody = shape?.['p:txBody']?.[0];
214
+ if (textBody) {
215
+ const text = this.extractTextFromBody(textBody);
216
+ return text;
217
+ }
218
+ }
219
+ }
220
+ }
221
+ }
222
+ catch {
223
+ // Title extraction failed
224
+ }
225
+ return undefined;
226
+ }
227
+ /**
228
+ * Parse all visual elements in a slide
229
+ */
230
+ async parseSlideElements(slideDoc, slideNumber) {
231
+ const elements = [];
232
+ try {
233
+ const spTree = slideDoc?.['p:sld']?.['p:cSld']?.[0]?.['p:spTree']?.[0];
234
+ if (!spTree) {
235
+ return elements;
236
+ }
237
+ // Parse shapes
238
+ const shapes = spTree['p:sp'];
239
+ if (shapes && Array.isArray(shapes)) {
240
+ for (const shape of shapes) {
241
+ const element = await this.parseShape(shape, slideNumber);
242
+ if (element) {
243
+ elements.push(element);
244
+ }
245
+ }
246
+ }
247
+ // Parse groups
248
+ const groups = spTree['p:grpSp'];
249
+ if (groups && Array.isArray(groups)) {
250
+ for (const group of groups) {
251
+ const element = await this.parseGroup(group, slideNumber);
252
+ if (element) {
253
+ elements.push(element);
254
+ }
255
+ }
256
+ }
257
+ // Parse pictures
258
+ const pics = spTree['p:pic'];
259
+ if (pics && Array.isArray(pics)) {
260
+ for (const pic of pics) {
261
+ const element = await this.parsePicture(pic, slideNumber);
262
+ if (element) {
263
+ elements.push(element);
264
+ }
265
+ }
266
+ }
267
+ // Parse charts
268
+ const charts = spTree['p:graphicFrame'];
269
+ if (charts && Array.isArray(charts)) {
270
+ for (const chart of charts) {
271
+ const element = await this.parseChart(chart, slideNumber);
272
+ if (element) {
273
+ elements.push(element);
274
+ }
275
+ }
276
+ }
277
+ }
278
+ catch (error) {
279
+ console.warn(`Error parsing slide ${slideNumber} elements:`, error);
280
+ }
281
+ return elements;
282
+ }
283
+ /**
284
+ * Parse a shape element
285
+ */
286
+ async parseShape(shape, slideNumber) {
287
+ try {
288
+ const id = shape?.['p:nvSpPr']?.[0]?.['p:cNvPr']?.[0]?.$.id || 'unknown';
289
+ const name = shape?.['p:nvSpPr']?.[0]?.['p:cNvPr']?.[0]?.$.name || 'shape';
290
+ // Extract position and size
291
+ const spPr = shape?.['p:spPr']?.[0];
292
+ const xfrm = spPr?.['a:xfrm']?.[0];
293
+ const position = this.extractPosition(xfrm);
294
+ const size = this.extractSize(xfrm);
295
+ // Check if it has text content
296
+ const textBody = shape?.['p:txBody']?.[0];
297
+ if (textBody) {
298
+ // Text element
299
+ const text = this.extractTextFromBody(textBody);
300
+ const paragraphs = this.extractParagraphsFromBody(textBody);
301
+ return {
302
+ id: `${id}_${name}`,
303
+ type: 'text',
304
+ position,
305
+ size,
306
+ content: {
307
+ text,
308
+ paragraphs
309
+ },
310
+ style: this.extractElementStyle(spPr, textBody)
311
+ };
312
+ }
313
+ else {
314
+ // Shape element
315
+ return {
316
+ id: `${id}_${name}`,
317
+ type: 'shape',
318
+ position,
319
+ size,
320
+ content: {
321
+ shapeType: this.extractShapeType(spPr),
322
+ geometry: this.extractShapeGeometry(spPr)
323
+ },
324
+ style: this.extractElementStyle(spPr)
325
+ };
326
+ }
327
+ }
328
+ catch (error) {
329
+ console.warn('Error parsing shape:', error);
330
+ return null;
331
+ }
332
+ }
333
+ /**
334
+ * Parse a group element
335
+ */
336
+ async parseGroup(group, slideNumber) {
337
+ try {
338
+ const id = group?.['p:nvGrpSpPr']?.[0]?.['p:cNvPr']?.[0]?.$.id || 'unknown';
339
+ const name = group?.['p:nvGrpSpPr']?.[0]?.['p:cNvPr']?.[0]?.$.name || 'group';
340
+ // Extract position and size
341
+ const grpSpPr = group?.['p:grpSpPr']?.[0];
342
+ const xfrm = grpSpPr?.['a:xfrm']?.[0];
343
+ const position = this.extractPosition(xfrm);
344
+ const size = this.extractSize(xfrm);
345
+ // Parse child elements
346
+ const children = [];
347
+ // Child shapes
348
+ const shapes = group['p:sp'];
349
+ if (shapes && Array.isArray(shapes)) {
350
+ for (const shape of shapes) {
351
+ const child = await this.parseShape(shape, slideNumber);
352
+ if (child)
353
+ children.push(child);
354
+ }
355
+ }
356
+ return {
357
+ id: `${id}_${name}`,
358
+ type: 'group',
359
+ position,
360
+ size,
361
+ content: {},
362
+ children
363
+ };
364
+ }
365
+ catch (error) {
366
+ console.warn('Error parsing group:', error);
367
+ return null;
368
+ }
369
+ }
370
+ /**
371
+ * Parse a picture element
372
+ */
373
+ async parsePicture(pic, slideNumber) {
374
+ try {
375
+ const id = pic?.['p:nvPicPr']?.[0]?.['p:cNvPr']?.[0]?.$.id || 'unknown';
376
+ const name = pic?.['p:nvPicPr']?.[0]?.['p:cNvPr']?.[0]?.$.name || 'image';
377
+ // Extract position and size
378
+ const spPr = pic?.['p:spPr']?.[0];
379
+ const xfrm = spPr?.['a:xfrm']?.[0];
380
+ const position = this.extractPosition(xfrm);
381
+ const size = this.extractSize(xfrm);
382
+ // Extract image reference
383
+ const blip = pic?.['p:blipFill']?.[0]?.['a:blip']?.[0];
384
+ const rEmbed = blip?.$?.['r:embed'];
385
+ let imagePath = '';
386
+ if (rEmbed) {
387
+ const rel = this.findRelationshipTarget(`slide${slideNumber}`, rEmbed);
388
+ if (rel) {
389
+ imagePath = rel.target;
390
+ }
391
+ }
392
+ return {
393
+ id: `${id}_${name}`,
394
+ type: 'image',
395
+ position,
396
+ size,
397
+ content: {
398
+ imagePath,
399
+ originalSize: size,
400
+ aspectRatio: size.width / size.height
401
+ },
402
+ style: this.extractElementStyle(spPr)
403
+ };
404
+ }
405
+ catch (error) {
406
+ console.warn('Error parsing picture:', error);
407
+ return null;
408
+ }
409
+ }
410
+ /**
411
+ * Parse a chart element
412
+ */
413
+ async parseChart(chart, slideNumber) {
414
+ try {
415
+ const id = chart?.['p:nvGraphicFramePr']?.[0]?.['p:cNvPr']?.[0]?.$.id || 'unknown';
416
+ const name = chart?.['p:nvGraphicFramePr']?.[0]?.['p:cNvPr']?.[0]?.$.name || 'chart';
417
+ // Extract position and size
418
+ const xfrm = chart?.['p:xfrm']?.[0];
419
+ const position = this.extractPosition(xfrm);
420
+ const size = this.extractSize(xfrm);
421
+ return {
422
+ id: `${id}_${name}`,
423
+ type: 'chart',
424
+ position,
425
+ size,
426
+ content: {
427
+ chartType: 'unknown', // Would need deeper parsing
428
+ data: null,
429
+ series: []
430
+ }
431
+ };
432
+ }
433
+ catch (error) {
434
+ console.warn('Error parsing chart:', error);
435
+ return null;
436
+ }
437
+ }
438
+ // Helper methods
439
+ extractPosition(xfrm) {
440
+ try {
441
+ const off = xfrm?.['a:off']?.[0];
442
+ return {
443
+ x: parseInt(off?.$.x || '0'),
444
+ y: parseInt(off?.$.y || '0'),
445
+ z: 0
446
+ };
447
+ }
448
+ catch {
449
+ return { x: 0, y: 0, z: 0 };
450
+ }
451
+ }
452
+ extractSize(xfrm) {
453
+ try {
454
+ const ext = xfrm?.['a:ext']?.[0];
455
+ return {
456
+ width: parseInt(ext?.$.cx || '0'),
457
+ height: parseInt(ext?.$.cy || '0')
458
+ };
459
+ }
460
+ catch {
461
+ return { width: 0, height: 0 };
462
+ }
463
+ }
464
+ extractElementStyle(spPr, textBody) {
465
+ const style = {};
466
+ try {
467
+ // Extract fill color
468
+ const solidFill = spPr?.['a:solidFill']?.[0];
469
+ if (solidFill) {
470
+ // This is simplified - real implementation would handle various color formats
471
+ style.fill = '#000000';
472
+ }
473
+ // Extract font information from text body
474
+ if (textBody) {
475
+ const defRPr = textBody?.['a:lstStyle']?.[0]?.['a:lvl1pPr']?.[0]?.['a:defRPr']?.[0];
476
+ if (defRPr) {
477
+ style.font = this.extractFontInfo(defRPr);
478
+ }
479
+ }
480
+ }
481
+ catch {
482
+ // Style extraction failed
483
+ }
484
+ return style;
485
+ }
486
+ extractFontInfo(rPr) {
487
+ return {
488
+ family: rPr?.['a:latin']?.[0]?.$.typeface || 'Arial',
489
+ size: parseInt(rPr?.$.sz || '1800') / 100, // Convert from hundredths of points
490
+ color: '#000000', // Simplified
491
+ bold: rPr?.$.b === '1',
492
+ italic: rPr?.$.i === '1',
493
+ underline: rPr?.$.u !== undefined
494
+ };
495
+ }
496
+ extractTextFromBody(textBody) {
497
+ try {
498
+ const paragraphs = textBody?.['a:p'];
499
+ if (paragraphs && Array.isArray(paragraphs)) {
500
+ return paragraphs
501
+ .map((p) => this.extractTextFromParagraph(p))
502
+ .filter(text => text.length > 0)
503
+ .join('\n');
504
+ }
505
+ }
506
+ catch {
507
+ // Text extraction failed
508
+ }
509
+ return '';
510
+ }
511
+ extractParagraphsFromBody(textBody) {
512
+ const paragraphs = [];
513
+ try {
514
+ const pArray = textBody?.['a:p'];
515
+ if (pArray && Array.isArray(pArray)) {
516
+ for (const p of pArray) {
517
+ const text = this.extractTextFromParagraph(p);
518
+ if (text) {
519
+ paragraphs.push({
520
+ text,
521
+ runs: this.extractTextRuns(p),
522
+ alignment: this.extractAlignment(p),
523
+ level: parseInt(p?.['a:pPr']?.[0]?.$.lvl || '0')
524
+ });
525
+ }
526
+ }
527
+ }
528
+ }
529
+ catch {
530
+ // Paragraph extraction failed
531
+ }
532
+ return paragraphs;
533
+ }
534
+ extractTextFromParagraph(p) {
535
+ try {
536
+ const runs = p?.['a:r'] || [];
537
+ return runs
538
+ .map((run) => run?.['a:t']?.[0] || '')
539
+ .join('');
540
+ }
541
+ catch {
542
+ return '';
543
+ }
544
+ }
545
+ extractTextRuns(p) {
546
+ const runs = [];
547
+ try {
548
+ const runArray = p?.['a:r'];
549
+ if (runArray && Array.isArray(runArray)) {
550
+ for (const run of runArray) {
551
+ const text = run?.['a:t']?.[0] || '';
552
+ if (text) {
553
+ runs.push({
554
+ text,
555
+ font: this.extractFontInfo(run?.['a:rPr']?.[0])
556
+ });
557
+ }
558
+ }
559
+ }
560
+ }
561
+ catch {
562
+ // Run extraction failed
563
+ }
564
+ return runs;
565
+ }
566
+ extractAlignment(p) {
567
+ try {
568
+ const algn = p?.['a:pPr']?.[0]?.$.algn;
569
+ switch (algn) {
570
+ case 'ctr': return 'center';
571
+ case 'r': return 'right';
572
+ case 'just': return 'justify';
573
+ default: return 'left';
574
+ }
575
+ }
576
+ catch {
577
+ return 'left';
578
+ }
579
+ }
580
+ extractShapeType(spPr) {
581
+ try {
582
+ const prstGeom = spPr?.['a:prstGeom']?.[0];
583
+ return prstGeom?.$.prst || 'unknown';
584
+ }
585
+ catch {
586
+ return 'unknown';
587
+ }
588
+ }
589
+ extractShapeGeometry(spPr) {
590
+ try {
591
+ const custGeom = spPr?.['a:custGeom']?.[0];
592
+ if (custGeom) {
593
+ return custGeom;
594
+ }
595
+ const prstGeom = spPr?.['a:prstGeom']?.[0];
596
+ if (prstGeom) {
597
+ return { preset: prstGeom.$.prst };
598
+ }
599
+ }
600
+ catch {
601
+ // Geometry extraction failed
602
+ }
603
+ return null;
604
+ }
605
+ findRelationshipTarget(sourceId, relationshipId) {
606
+ try {
607
+ const rels = this.relationships.get(sourceId);
608
+ if (rels?.Relationships?.Relationship) {
609
+ const relationships = Array.isArray(rels.Relationships.Relationship)
610
+ ? rels.Relationships.Relationship
611
+ : [rels.Relationships.Relationship];
612
+ for (const rel of relationships) {
613
+ if (rel.$.Id === relationshipId) {
614
+ return {
615
+ target: rel.$.Target,
616
+ type: rel.$.Type
617
+ };
618
+ }
619
+ }
620
+ }
621
+ }
622
+ catch {
623
+ // Relationship lookup failed
624
+ }
625
+ return null;
626
+ }
627
+ createPlaceholderSlide(slideId, slideNumber) {
628
+ return {
629
+ slideId,
630
+ slideNumber,
631
+ title: `Slide ${slideNumber}`,
632
+ elements: [],
633
+ dimensions: {
634
+ width: 12192000,
635
+ height: 6858000,
636
+ units: 'EMU'
637
+ }
638
+ };
639
+ }
640
+ async getXmlContent(path) {
641
+ const file = this.zip?.file(path);
642
+ if (!file) {
643
+ throw new Error(`File not found: ${path}`);
644
+ }
645
+ return await file.async('string');
646
+ }
647
+ }
648
+ //# sourceMappingURL=pptx-visual-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pptx-visual-parser.js","sourceRoot":"","sources":["../../src/utils/pptx-visual-parser.ts"],"names":[],"mappings":"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"}