udf-cli 0.1.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.
Files changed (50) hide show
  1. package/README.md +308 -0
  2. package/dist/bin/udf-cli.d.ts +2 -0
  3. package/dist/bin/udf-cli.js +122 -0
  4. package/dist/bin/udf-cli.js.map +1 -0
  5. package/dist/src/converters/html-to-udf.d.ts +1 -0
  6. package/dist/src/converters/html-to-udf.js +7 -0
  7. package/dist/src/converters/html-to-udf.js.map +1 -0
  8. package/dist/src/converters/markdown-to-udf.d.ts +1 -0
  9. package/dist/src/converters/markdown-to-udf.js +7 -0
  10. package/dist/src/converters/markdown-to-udf.js.map +1 -0
  11. package/dist/src/converters/udf-to-html.d.ts +1 -0
  12. package/dist/src/converters/udf-to-html.js +7 -0
  13. package/dist/src/converters/udf-to-html.js.map +1 -0
  14. package/dist/src/converters/udf-to-markdown.d.ts +1 -0
  15. package/dist/src/converters/udf-to-markdown.js +7 -0
  16. package/dist/src/converters/udf-to-markdown.js.map +1 -0
  17. package/dist/src/html/markdown-parser.d.ts +2 -0
  18. package/dist/src/html/markdown-parser.js +172 -0
  19. package/dist/src/html/markdown-parser.js.map +1 -0
  20. package/dist/src/html/markdown-serializer.d.ts +2 -0
  21. package/dist/src/html/markdown-serializer.js +146 -0
  22. package/dist/src/html/markdown-serializer.js.map +1 -0
  23. package/dist/src/html/parser.d.ts +2 -0
  24. package/dist/src/html/parser.js +517 -0
  25. package/dist/src/html/parser.js.map +1 -0
  26. package/dist/src/html/serializer.d.ts +6 -0
  27. package/dist/src/html/serializer.js +259 -0
  28. package/dist/src/html/serializer.js.map +1 -0
  29. package/dist/src/index.d.ts +6 -0
  30. package/dist/src/index.js +6 -0
  31. package/dist/src/index.js.map +1 -0
  32. package/dist/src/model/document.d.ts +99 -0
  33. package/dist/src/model/document.js +88 -0
  34. package/dist/src/model/document.js.map +1 -0
  35. package/dist/src/udf/cdata-builder.d.ts +14 -0
  36. package/dist/src/udf/cdata-builder.js +59 -0
  37. package/dist/src/udf/cdata-builder.js.map +1 -0
  38. package/dist/src/udf/parser.d.ts +2 -0
  39. package/dist/src/udf/parser.js +293 -0
  40. package/dist/src/udf/parser.js.map +1 -0
  41. package/dist/src/udf/serializer.d.ts +5 -0
  42. package/dist/src/udf/serializer.js +228 -0
  43. package/dist/src/udf/serializer.js.map +1 -0
  44. package/dist/src/utils/color.d.ts +9 -0
  45. package/dist/src/utils/color.js +87 -0
  46. package/dist/src/utils/color.js.map +1 -0
  47. package/dist/src/utils/style.d.ts +18 -0
  48. package/dist/src/utils/style.js +55 -0
  49. package/dist/src/utils/style.js.map +1 -0
  50. package/package.json +47 -0
@@ -0,0 +1,259 @@
1
+ import { Alignment, DEFAULT_TEXT_STYLE } from '../model/document.js';
2
+ import { argbToCss } from '../utils/color.js';
3
+ import { buildInlineStyle } from '../utils/style.js';
4
+ // ---------------------------------------------------------------------------
5
+ // HTML escaping
6
+ // ---------------------------------------------------------------------------
7
+ function escapeHtml(text) {
8
+ return text
9
+ .replace(/&/g, '&')
10
+ .replace(/</g, '&lt;')
11
+ .replace(/>/g, '&gt;');
12
+ }
13
+ // ---------------------------------------------------------------------------
14
+ // Image format detection
15
+ // ---------------------------------------------------------------------------
16
+ function detectImageFormat(base64Data) {
17
+ if (base64Data.startsWith('/9j/'))
18
+ return 'jpeg';
19
+ if (base64Data.startsWith('iVBOR'))
20
+ return 'png';
21
+ if (base64Data.startsWith('R0lGOD'))
22
+ return 'gif';
23
+ if (base64Data.startsWith('UklGR'))
24
+ return 'webp';
25
+ return 'png';
26
+ }
27
+ // ---------------------------------------------------------------------------
28
+ // Alignment to CSS
29
+ // ---------------------------------------------------------------------------
30
+ function alignmentToCss(alignment) {
31
+ switch (alignment) {
32
+ case Alignment.Center:
33
+ return 'center';
34
+ case Alignment.Right:
35
+ return 'right';
36
+ case Alignment.Justify:
37
+ return 'justify';
38
+ default:
39
+ return undefined;
40
+ }
41
+ }
42
+ // ---------------------------------------------------------------------------
43
+ // Inline element serialization
44
+ // ---------------------------------------------------------------------------
45
+ function serializeTextRun(run) {
46
+ const text = escapeHtml(run.text);
47
+ if (!text && !run.style.bold && !run.style.italic && !run.style.underline) {
48
+ return '';
49
+ }
50
+ // Determine if we need a <span> for non-default font styling
51
+ const styleProps = {};
52
+ const s = run.style;
53
+ if (s.fontFamily !== DEFAULT_TEXT_STYLE.fontFamily) {
54
+ styleProps.fontFamily = s.fontFamily;
55
+ }
56
+ if (s.fontSize !== DEFAULT_TEXT_STYLE.fontSize) {
57
+ styleProps.fontSize = `${s.fontSize}pt`;
58
+ }
59
+ if (s.color !== DEFAULT_TEXT_STYLE.color) {
60
+ styleProps.color = argbToCss(s.color);
61
+ }
62
+ if (s.backgroundColor !== DEFAULT_TEXT_STYLE.backgroundColor) {
63
+ styleProps.backgroundColor = argbToCss(s.backgroundColor);
64
+ }
65
+ const needsSpan = Object.keys(styleProps).length > 0;
66
+ const inlineStyle = needsSpan ? buildInlineStyle(styleProps) : '';
67
+ // Build from inside out: text -> u -> em -> strong -> span
68
+ let result = text;
69
+ if (s.underline) {
70
+ result = `<u>${result}</u>`;
71
+ }
72
+ if (s.italic) {
73
+ result = `<em>${result}</em>`;
74
+ }
75
+ if (s.bold) {
76
+ result = `<strong>${result}</strong>`;
77
+ }
78
+ if (needsSpan) {
79
+ result = `<span style="${inlineStyle}">${result}</span>`;
80
+ }
81
+ return result;
82
+ }
83
+ function serializeImageRun(run) {
84
+ const format = detectImageFormat(run.data);
85
+ return `<img src="data:image/${format};base64,${run.data}" width="${run.width}" height="${run.height}" />`;
86
+ }
87
+ function serializeInline(run) {
88
+ if (run.type === 'text')
89
+ return serializeTextRun(run);
90
+ if (run.type === 'image')
91
+ return serializeImageRun(run);
92
+ return '';
93
+ }
94
+ // ---------------------------------------------------------------------------
95
+ // Paragraph style
96
+ // ---------------------------------------------------------------------------
97
+ function buildParagraphStyle(para) {
98
+ const props = {};
99
+ const align = alignmentToCss(para.alignment);
100
+ if (align)
101
+ props.textAlign = align;
102
+ if (para.lineSpacing !== 0) {
103
+ props.lineHeight = String(1.0 + para.lineSpacing);
104
+ }
105
+ if (para.spaceBefore !== 0) {
106
+ props.marginTop = `${para.spaceBefore}pt`;
107
+ }
108
+ if (para.spaceAfter !== 0) {
109
+ props.marginBottom = `${para.spaceAfter}pt`;
110
+ }
111
+ if (para.leftIndent !== 0) {
112
+ props.marginLeft = `${para.leftIndent}pt`;
113
+ }
114
+ if (para.rightIndent !== 0) {
115
+ props.marginRight = `${para.rightIndent}pt`;
116
+ }
117
+ if (para.firstLineIndent !== 0) {
118
+ props.textIndent = `${para.firstLineIndent}pt`;
119
+ }
120
+ return buildInlineStyle(props);
121
+ }
122
+ // ---------------------------------------------------------------------------
123
+ // Table serialization
124
+ // ---------------------------------------------------------------------------
125
+ function serializeTableCell(cell) {
126
+ const attrs = [];
127
+ if (cell.colspan > 1) {
128
+ attrs.push(`colspan="${cell.colspan}"`);
129
+ }
130
+ if (cell.rowspan > 1) {
131
+ attrs.push(`rowspan="${cell.rowspan}"`);
132
+ }
133
+ // Build cell style
134
+ const styleProps = {};
135
+ // Border
136
+ if (cell.border.style !== 'borderStyle-none') {
137
+ const borderColor = argbToCss(cell.borderColor);
138
+ const borderWidth = cell.borderWidth || 0.5;
139
+ if (cell.borderSpec === 15) {
140
+ // All sides
141
+ styleProps.border = `${borderWidth}px solid ${borderColor}`;
142
+ }
143
+ else {
144
+ if (cell.borderSpec & 1)
145
+ styleProps.borderTop = `${borderWidth}px solid ${borderColor}`;
146
+ if (cell.borderSpec & 2)
147
+ styleProps.borderRight = `${borderWidth}px solid ${borderColor}`;
148
+ if (cell.borderSpec & 4)
149
+ styleProps.borderBottom = `${borderWidth}px solid ${borderColor}`;
150
+ if (cell.borderSpec & 8)
151
+ styleProps.borderLeft = `${borderWidth}px solid ${borderColor}`;
152
+ }
153
+ }
154
+ styleProps.padding = '4px';
155
+ // Background color (skip white/default)
156
+ const fillCss = argbToCss(cell.fillColor);
157
+ if (fillCss !== '#ffffff' && fillCss !== '#000000') {
158
+ styleProps.backgroundColor = fillCss;
159
+ }
160
+ // Also check for non-default unsigned white (16777215 -> #ffffff)
161
+ if (cell.fillColor !== 16777215 && cell.fillColor !== -1) {
162
+ styleProps.backgroundColor = fillCss;
163
+ }
164
+ if (cell.verticalAlign !== 'top') {
165
+ styleProps.verticalAlign = cell.verticalAlign;
166
+ }
167
+ const style = buildInlineStyle(styleProps);
168
+ if (style)
169
+ attrs.push(`style="${style}"`);
170
+ const attrStr = attrs.length > 0 ? ' ' + attrs.join(' ') : '';
171
+ const content = cell.content.map(serializeBlock).join('');
172
+ return `<td${attrStr}>${content}</td>`;
173
+ }
174
+ function serializeTable(table) {
175
+ const rows = table.rows.map((row) => {
176
+ const cells = row.cells.map(serializeTableCell).join('');
177
+ return `<tr>${cells}</tr>`;
178
+ }).join('');
179
+ return `<table style="border-collapse:collapse">${rows}</table>`;
180
+ }
181
+ /**
182
+ * Serialize a group of consecutive list paragraphs into <ol>/<ul>.
183
+ */
184
+ function serializeListGroup(group) {
185
+ const tag = group.type === 'numbered' ? 'ol' : 'ul';
186
+ const items = group.paragraphs.map((para) => {
187
+ const content = para.runs.map(serializeInline).join('');
188
+ return `<li>${content}</li>`;
189
+ }).join('');
190
+ return `<${tag}>${items}</${tag}>`;
191
+ }
192
+ // ---------------------------------------------------------------------------
193
+ // Block serialization
194
+ // ---------------------------------------------------------------------------
195
+ function serializeParagraph(para) {
196
+ const content = para.runs.map(serializeInline).join('');
197
+ const style = buildParagraphStyle(para);
198
+ const styleAttr = style ? ` style="${style}"` : '';
199
+ const body = content || '<br />';
200
+ return `<p${styleAttr}>${body}</p>`;
201
+ }
202
+ function serializeBlock(block) {
203
+ if (block.type === 'paragraph') {
204
+ // List paragraphs are handled by the grouping logic in serializeBlocks
205
+ // If we reach here directly (e.g., inside a table cell), serialize as standalone
206
+ if (block.list) {
207
+ const tag = block.list.type === 'numbered' ? 'ol' : 'ul';
208
+ const content = block.runs.map(serializeInline).join('');
209
+ return `<${tag}><li>${content}</li></${tag}>`;
210
+ }
211
+ return serializeParagraph(block);
212
+ }
213
+ if (block.type === 'table') {
214
+ return serializeTable(block);
215
+ }
216
+ return '';
217
+ }
218
+ // ---------------------------------------------------------------------------
219
+ // Top-level block grouping (handles consecutive list items)
220
+ // ---------------------------------------------------------------------------
221
+ function serializeBlocks(blocks) {
222
+ const parts = [];
223
+ let i = 0;
224
+ while (i < blocks.length) {
225
+ const block = blocks[i];
226
+ if (block.type === 'paragraph' && block.list) {
227
+ // Start a list group: collect consecutive paragraphs with same list type
228
+ const listType = block.list.type;
229
+ const group = {
230
+ type: listType,
231
+ level: block.list.level,
232
+ paragraphs: [],
233
+ };
234
+ while (i < blocks.length &&
235
+ blocks[i].type === 'paragraph' &&
236
+ blocks[i].list?.type === listType) {
237
+ group.paragraphs.push(blocks[i]);
238
+ i++;
239
+ }
240
+ parts.push(serializeListGroup(group));
241
+ }
242
+ else {
243
+ parts.push(serializeBlock(block));
244
+ i++;
245
+ }
246
+ }
247
+ return parts.join('');
248
+ }
249
+ // ---------------------------------------------------------------------------
250
+ // Public API
251
+ // ---------------------------------------------------------------------------
252
+ /**
253
+ * Serialize a Document model to an HTML string.
254
+ * Produces body content only (no <html>, <head>, <body> wrapper).
255
+ */
256
+ export function serializeHtml(doc) {
257
+ return serializeBlocks(doc.body);
258
+ }
259
+ //# sourceMappingURL=serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../../src/html/serializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { htmlToUdf } from './converters/html-to-udf.js';
2
+ export { udfToHtml } from './converters/udf-to-html.js';
3
+ export { udfToMarkdown } from './converters/udf-to-markdown.js';
4
+ export { markdownToUdf } from './converters/markdown-to-udf.js';
5
+ export type { Document, PageFormat, Paragraph, Table, TableRow, TableCell, TextRun, ImageRun, TextStyle, InlineElement, BlockElement, ListProperties, BorderStyle, } from './model/document.js';
6
+ export { Alignment, DEFAULT_TEXT_STYLE, DEFAULT_PAGE_FORMAT, DEFAULT_BORDER, createParagraph, createTextRun, createTable, createTableRow, createTableCell, } from './model/document.js';
@@ -0,0 +1,6 @@
1
+ export { htmlToUdf } from './converters/html-to-udf.js';
2
+ export { udfToHtml } from './converters/udf-to-html.js';
3
+ export { udfToMarkdown } from './converters/udf-to-markdown.js';
4
+ export { markdownToUdf } from './converters/markdown-to-udf.js';
5
+ export { Alignment, DEFAULT_TEXT_STYLE, DEFAULT_PAGE_FORMAT, DEFAULT_BORDER, createParagraph, createTextRun, createTable, createTableRow, createTableCell, } from './model/document.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAgBhE,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAc,EACd,eAAe,GAChB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,99 @@
1
+ export declare enum Alignment {
2
+ Left = 0,
3
+ Center = 1,
4
+ Right = 2,
5
+ Justify = 3
6
+ }
7
+ export interface TextStyle {
8
+ fontFamily: string;
9
+ fontSize: number;
10
+ bold: boolean;
11
+ italic: boolean;
12
+ underline: boolean;
13
+ color: number;
14
+ backgroundColor: number;
15
+ }
16
+ export interface TextRun {
17
+ type: 'text';
18
+ text: string;
19
+ style: TextStyle;
20
+ }
21
+ export interface ImageRun {
22
+ type: 'image';
23
+ data: string;
24
+ width: number;
25
+ height: number;
26
+ }
27
+ export type InlineElement = TextRun | ImageRun;
28
+ export interface ListProperties {
29
+ type: 'numbered' | 'bulleted';
30
+ numberType?: string;
31
+ bulletType?: string;
32
+ level: number;
33
+ listId?: number;
34
+ }
35
+ export interface Paragraph {
36
+ type: 'paragraph';
37
+ alignment: Alignment;
38
+ leftIndent: number;
39
+ rightIndent: number;
40
+ firstLineIndent: number;
41
+ lineSpacing: number;
42
+ spaceBefore: number;
43
+ spaceAfter: number;
44
+ runs: InlineElement[];
45
+ list?: ListProperties;
46
+ }
47
+ export interface BorderStyle {
48
+ name: string;
49
+ style: string;
50
+ }
51
+ export interface TableCell {
52
+ colspan: number;
53
+ rowspan: number;
54
+ verticalAlign: 'top' | 'middle' | 'bottom';
55
+ fillColor: number;
56
+ border: BorderStyle;
57
+ borderWidth: number;
58
+ borderColor: number;
59
+ borderSpec: number;
60
+ content: BlockElement[];
61
+ }
62
+ export interface TableRow {
63
+ name: string;
64
+ rowType: string;
65
+ height: number;
66
+ border: BorderStyle;
67
+ cells: TableCell[];
68
+ }
69
+ export interface Table {
70
+ type: 'table';
71
+ name: string;
72
+ columns: number;
73
+ columnWidths: number[];
74
+ border: BorderStyle;
75
+ rows: TableRow[];
76
+ }
77
+ export type BlockElement = Paragraph | Table;
78
+ export interface PageFormat {
79
+ mediaSizeName: number;
80
+ leftMargin: number;
81
+ rightMargin: number;
82
+ topMargin: number;
83
+ bottomMargin: number;
84
+ paperOrientation: number;
85
+ headerFOffset: number;
86
+ footerFOffset: number;
87
+ }
88
+ export interface Document {
89
+ pages: PageFormat;
90
+ body: BlockElement[];
91
+ }
92
+ export declare const DEFAULT_TEXT_STYLE: TextStyle;
93
+ export declare const DEFAULT_PAGE_FORMAT: PageFormat;
94
+ export declare const DEFAULT_BORDER: BorderStyle;
95
+ export declare function createParagraph(overrides?: Partial<Omit<Paragraph, 'type'>>): Paragraph;
96
+ export declare function createTextRun(text: string, style?: Partial<TextStyle>): TextRun;
97
+ export declare function createTable(rows: TableRow[], columnWidths: number[], overrides?: Partial<Omit<Table, 'type' | 'rows'>>): Table;
98
+ export declare function createTableCell(content: BlockElement[], overrides?: Partial<TableCell>): TableCell;
99
+ export declare function createTableRow(cells: TableCell[], overrides?: Partial<TableRow>): TableRow;
@@ -0,0 +1,88 @@
1
+ export var Alignment;
2
+ (function (Alignment) {
3
+ Alignment[Alignment["Left"] = 0] = "Left";
4
+ Alignment[Alignment["Center"] = 1] = "Center";
5
+ Alignment[Alignment["Right"] = 2] = "Right";
6
+ Alignment[Alignment["Justify"] = 3] = "Justify";
7
+ })(Alignment || (Alignment = {}));
8
+ // Defaults
9
+ export const DEFAULT_TEXT_STYLE = {
10
+ fontFamily: 'Times New Roman',
11
+ fontSize: 12,
12
+ bold: false,
13
+ italic: false,
14
+ underline: false,
15
+ color: -16777216, // black (0xFF000000)
16
+ backgroundColor: -1, // white (0xFFFFFFFF)
17
+ };
18
+ export const DEFAULT_PAGE_FORMAT = {
19
+ mediaSizeName: 1,
20
+ leftMargin: 42.52,
21
+ rightMargin: 28.35,
22
+ topMargin: 14.17,
23
+ bottomMargin: 14.17,
24
+ paperOrientation: 1,
25
+ headerFOffset: 20.0,
26
+ footerFOffset: 20.0,
27
+ };
28
+ export const DEFAULT_BORDER = {
29
+ name: 'borderCell',
30
+ style: 'borderStyle-solid',
31
+ };
32
+ export function createParagraph(overrides) {
33
+ return {
34
+ type: 'paragraph',
35
+ alignment: Alignment.Left,
36
+ leftIndent: 0,
37
+ rightIndent: 0,
38
+ firstLineIndent: 0,
39
+ lineSpacing: 0,
40
+ spaceBefore: 0,
41
+ spaceAfter: 0,
42
+ runs: [],
43
+ ...overrides,
44
+ };
45
+ }
46
+ export function createTextRun(text, style) {
47
+ return {
48
+ type: 'text',
49
+ text,
50
+ style: { ...DEFAULT_TEXT_STYLE, ...style },
51
+ };
52
+ }
53
+ export function createTable(rows, columnWidths, overrides) {
54
+ return {
55
+ type: 'table',
56
+ name: 'Sabit',
57
+ columns: columnWidths.length,
58
+ columnWidths,
59
+ border: { ...DEFAULT_BORDER },
60
+ rows,
61
+ ...overrides,
62
+ };
63
+ }
64
+ export function createTableCell(content, overrides) {
65
+ return {
66
+ colspan: 1,
67
+ rowspan: 1,
68
+ verticalAlign: 'top',
69
+ fillColor: 16777215, // white (unsigned)
70
+ border: { ...DEFAULT_BORDER },
71
+ borderWidth: 0.5,
72
+ borderColor: 0,
73
+ borderSpec: 15, // all sides
74
+ content,
75
+ ...overrides,
76
+ };
77
+ }
78
+ export function createTableRow(cells, overrides) {
79
+ return {
80
+ name: 'row1',
81
+ rowType: 'dataRow',
82
+ height: 0,
83
+ border: { ...DEFAULT_BORDER },
84
+ cells,
85
+ ...overrides,
86
+ };
87
+ }
88
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../../src/model/document.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,yCAAQ,CAAA;IACR,6CAAU,CAAA;IACV,2CAAS,CAAA;IACT,+CAAW,CAAA;AACb,CAAC,EALW,SAAS,KAAT,SAAS,QAKpB;AAoGD,WAAW;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAc;IAC3C,UAAU,EAAE,iBAAiB;IAC7B,QAAQ,EAAE,EAAE;IACZ,IAAI,EAAE,KAAK;IACX,MAAM,EAAE,KAAK;IACb,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,CAAC,QAAQ,EAAG,qBAAqB;IACxC,eAAe,EAAE,CAAC,CAAC,EAAE,qBAAqB;CAC3C,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,aAAa,EAAE,CAAC;IAChB,UAAU,EAAE,KAAK;IACjB,WAAW,EAAE,KAAK;IAClB,SAAS,EAAE,KAAK;IAChB,YAAY,EAAE,KAAK;IACnB,gBAAgB,EAAE,CAAC;IACnB,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,IAAI;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAgB;IACzC,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,mBAAmB;CAC3B,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,SAA4C;IAC1E,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,SAAS,CAAC,IAAI;QACzB,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,CAAC;QACd,eAAe,EAAE,CAAC;QAClB,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,CAAC;QACb,IAAI,EAAE,EAAE;QACR,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAA0B;IACpE,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,IAAI;QACJ,KAAK,EAAE,EAAE,GAAG,kBAAkB,EAAE,GAAG,KAAK,EAAE;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAgB,EAAE,YAAsB,EAAE,SAAiD;IACrH,OAAO;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,YAAY,CAAC,MAAM;QAC5B,YAAY;QACZ,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE;QAC7B,IAAI;QACJ,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAuB,EAAE,SAA8B;IACrF,OAAO;QACL,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,QAAQ,EAAE,mBAAmB;QACxC,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE;QAC7B,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,EAAE,EAAE,YAAY;QAC5B,OAAO;QACP,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAkB,EAAE,SAA6B;IAC9E,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE;QAC7B,KAAK;QACL,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { BlockElement, InlineElement } from '../model/document.js';
2
+ export interface OffsetEntry {
3
+ element: InlineElement;
4
+ startOffset: number;
5
+ length: number;
6
+ blockId: number;
7
+ }
8
+ export interface CdataResult {
9
+ cdata: string;
10
+ entries: OffsetEntry[];
11
+ }
12
+ /** Count Unicode codepoints (runes), not UTF-16 code units. */
13
+ export declare function runeCount(s: string): number;
14
+ export declare function buildCdata(body: BlockElement[]): CdataResult;
@@ -0,0 +1,59 @@
1
+ /** Count Unicode codepoints (runes), not UTF-16 code units. */
2
+ export function runeCount(s) {
3
+ return Array.from(s).length;
4
+ }
5
+ export function buildCdata(body) {
6
+ const textParts = [];
7
+ const entries = [];
8
+ let offset = 0;
9
+ let blockId = 0;
10
+ function processParagraph(para) {
11
+ const currentBlockId = blockId++;
12
+ if (para.runs.length === 0) {
13
+ // Empty paragraph: insert zero-width space
14
+ textParts.push('\u200B');
15
+ offset += 1;
16
+ }
17
+ else {
18
+ for (const run of para.runs) {
19
+ if (run.type === 'text') {
20
+ const len = runeCount(run.text);
21
+ entries.push({ element: run, startOffset: offset, length: len, blockId: currentBlockId });
22
+ textParts.push(run.text);
23
+ offset += len;
24
+ }
25
+ else if (run.type === 'image') {
26
+ entries.push({ element: run, startOffset: offset, length: 1, blockId: currentBlockId });
27
+ textParts.push('\uFFFC');
28
+ offset += 1;
29
+ }
30
+ }
31
+ }
32
+ // Paragraph separator
33
+ textParts.push('\n');
34
+ offset += 1;
35
+ }
36
+ function processTable(table) {
37
+ for (const row of table.rows) {
38
+ for (const cell of row.cells) {
39
+ processBlocks(cell.content);
40
+ }
41
+ }
42
+ }
43
+ function processBlocks(blocks) {
44
+ for (const block of blocks) {
45
+ if (block.type === 'paragraph') {
46
+ processParagraph(block);
47
+ }
48
+ else if (block.type === 'table') {
49
+ processTable(block);
50
+ }
51
+ }
52
+ }
53
+ processBlocks(body);
54
+ return {
55
+ cdata: textParts.join(''),
56
+ entries,
57
+ };
58
+ }
59
+ //# sourceMappingURL=cdata-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdata-builder.js","sourceRoot":"","sources":["../../../src/udf/cdata-builder.ts"],"names":[],"mappings":"AAcA,+DAA+D;AAC/D,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAoB;IAC7C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,SAAS,gBAAgB,CAAC,IAAe;QACvC,MAAM,cAAc,GAAG,OAAO,EAAE,CAAC;QAEjC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,2CAA2C;YAC3C,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACxB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAChC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;oBAC1F,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACzB,MAAM,IAAI,GAAG,CAAC;gBAChB,CAAC;qBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAChC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;oBACxF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACzB,MAAM,IAAI,CAAC,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;IAED,SAAS,YAAY,CAAC,KAAY;QAChC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBAC7B,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,aAAa,CAAC,MAAsB;QAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAClC,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,aAAa,CAAC,IAAI,CAAC,CAAC;IAEpB,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Document } from '../model/document.js';
2
+ export declare function parseUdf(buffer: Buffer): Promise<Document>;