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.
- package/README.md +308 -0
- package/dist/bin/udf-cli.d.ts +2 -0
- package/dist/bin/udf-cli.js +122 -0
- package/dist/bin/udf-cli.js.map +1 -0
- package/dist/src/converters/html-to-udf.d.ts +1 -0
- package/dist/src/converters/html-to-udf.js +7 -0
- package/dist/src/converters/html-to-udf.js.map +1 -0
- package/dist/src/converters/markdown-to-udf.d.ts +1 -0
- package/dist/src/converters/markdown-to-udf.js +7 -0
- package/dist/src/converters/markdown-to-udf.js.map +1 -0
- package/dist/src/converters/udf-to-html.d.ts +1 -0
- package/dist/src/converters/udf-to-html.js +7 -0
- package/dist/src/converters/udf-to-html.js.map +1 -0
- package/dist/src/converters/udf-to-markdown.d.ts +1 -0
- package/dist/src/converters/udf-to-markdown.js +7 -0
- package/dist/src/converters/udf-to-markdown.js.map +1 -0
- package/dist/src/html/markdown-parser.d.ts +2 -0
- package/dist/src/html/markdown-parser.js +172 -0
- package/dist/src/html/markdown-parser.js.map +1 -0
- package/dist/src/html/markdown-serializer.d.ts +2 -0
- package/dist/src/html/markdown-serializer.js +146 -0
- package/dist/src/html/markdown-serializer.js.map +1 -0
- package/dist/src/html/parser.d.ts +2 -0
- package/dist/src/html/parser.js +517 -0
- package/dist/src/html/parser.js.map +1 -0
- package/dist/src/html/serializer.d.ts +6 -0
- package/dist/src/html/serializer.js +259 -0
- package/dist/src/html/serializer.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/model/document.d.ts +99 -0
- package/dist/src/model/document.js +88 -0
- package/dist/src/model/document.js.map +1 -0
- package/dist/src/udf/cdata-builder.d.ts +14 -0
- package/dist/src/udf/cdata-builder.js +59 -0
- package/dist/src/udf/cdata-builder.js.map +1 -0
- package/dist/src/udf/parser.d.ts +2 -0
- package/dist/src/udf/parser.js +293 -0
- package/dist/src/udf/parser.js.map +1 -0
- package/dist/src/udf/serializer.d.ts +5 -0
- package/dist/src/udf/serializer.js +228 -0
- package/dist/src/udf/serializer.js.map +1 -0
- package/dist/src/utils/color.d.ts +9 -0
- package/dist/src/utils/color.js +87 -0
- package/dist/src/utils/color.js.map +1 -0
- package/dist/src/utils/style.d.ts +18 -0
- package/dist/src/utils/style.js +55 -0
- package/dist/src/utils/style.js.map +1 -0
- 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, '<')
|
|
11
|
+
.replace(/>/g, '>');
|
|
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"}
|