udf-cli 0.3.0 → 0.4.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 (54) hide show
  1. package/README.md +130 -7
  2. package/dist/bin/udf-cli.d.ts +0 -1
  3. package/dist/bin/udf-cli.js +1 -121
  4. package/dist/chunk-6564CQ7U.js +1 -0
  5. package/dist/module-resolve-XD725NCC.js +1 -0
  6. package/dist/pin-prompt-FSXBDU36.js +1 -0
  7. package/dist/sign-BNEXYCMC.js +1 -0
  8. package/dist/src/index.d.ts +117 -6
  9. package/dist/src/index.js +1 -6
  10. package/package.json +19 -3
  11. package/dist/bin/udf-cli.js.map +0 -1
  12. package/dist/src/converters/html-to-udf.d.ts +0 -1
  13. package/dist/src/converters/html-to-udf.js +0 -7
  14. package/dist/src/converters/html-to-udf.js.map +0 -1
  15. package/dist/src/converters/markdown-to-udf.d.ts +0 -1
  16. package/dist/src/converters/markdown-to-udf.js +0 -7
  17. package/dist/src/converters/markdown-to-udf.js.map +0 -1
  18. package/dist/src/converters/udf-to-html.d.ts +0 -1
  19. package/dist/src/converters/udf-to-html.js +0 -7
  20. package/dist/src/converters/udf-to-html.js.map +0 -1
  21. package/dist/src/converters/udf-to-markdown.d.ts +0 -1
  22. package/dist/src/converters/udf-to-markdown.js +0 -7
  23. package/dist/src/converters/udf-to-markdown.js.map +0 -1
  24. package/dist/src/html/markdown-parser.d.ts +0 -2
  25. package/dist/src/html/markdown-parser.js +0 -172
  26. package/dist/src/html/markdown-parser.js.map +0 -1
  27. package/dist/src/html/markdown-serializer.d.ts +0 -2
  28. package/dist/src/html/markdown-serializer.js +0 -156
  29. package/dist/src/html/markdown-serializer.js.map +0 -1
  30. package/dist/src/html/parser.d.ts +0 -2
  31. package/dist/src/html/parser.js +0 -576
  32. package/dist/src/html/parser.js.map +0 -1
  33. package/dist/src/html/serializer.d.ts +0 -6
  34. package/dist/src/html/serializer.js +0 -285
  35. package/dist/src/html/serializer.js.map +0 -1
  36. package/dist/src/index.js.map +0 -1
  37. package/dist/src/model/document.d.ts +0 -107
  38. package/dist/src/model/document.js +0 -88
  39. package/dist/src/model/document.js.map +0 -1
  40. package/dist/src/udf/cdata-builder.d.ts +0 -14
  41. package/dist/src/udf/cdata-builder.js +0 -71
  42. package/dist/src/udf/cdata-builder.js.map +0 -1
  43. package/dist/src/udf/parser.d.ts +0 -2
  44. package/dist/src/udf/parser.js +0 -325
  45. package/dist/src/udf/parser.js.map +0 -1
  46. package/dist/src/udf/serializer.d.ts +0 -5
  47. package/dist/src/udf/serializer.js +0 -267
  48. package/dist/src/udf/serializer.js.map +0 -1
  49. package/dist/src/utils/color.d.ts +0 -9
  50. package/dist/src/utils/color.js +0 -87
  51. package/dist/src/utils/color.js.map +0 -1
  52. package/dist/src/utils/style.d.ts +0 -23
  53. package/dist/src/utils/style.js +0 -80
  54. package/dist/src/utils/style.js.map +0 -1
@@ -1,325 +0,0 @@
1
- import JSZip from 'jszip';
2
- import { parseDocument } from 'htmlparser2';
3
- import { Element, Text, CDATA } from 'domhandler';
4
- import { Alignment, DEFAULT_TEXT_STYLE, DEFAULT_PAGE_FORMAT, DEFAULT_BORDER, } from '../model/document.js';
5
- // ---------------------------------------------------------------------------
6
- // DOM helpers
7
- // ---------------------------------------------------------------------------
8
- function childElements(el) {
9
- return el.children.filter((c) => c instanceof Element);
10
- }
11
- function findElement(parent, tagName) {
12
- return childElements(parent).find((c) => c.name === tagName);
13
- }
14
- function findAllElements(parent, tagName) {
15
- return childElements(parent).filter((c) => c.name === tagName);
16
- }
17
- /** Extract text/CDATA content from all child text nodes of an element. */
18
- function textContent(el) {
19
- const parts = [];
20
- for (const child of el.children) {
21
- if (child instanceof Text) {
22
- parts.push(child.data);
23
- }
24
- else if (child instanceof CDATA) {
25
- // CDATA node wraps child Text nodes
26
- for (const inner of child.children) {
27
- if (inner instanceof Text) {
28
- parts.push(inner.data);
29
- }
30
- }
31
- }
32
- }
33
- return parts.join('');
34
- }
35
- // ---------------------------------------------------------------------------
36
- // Attribute readers
37
- // ---------------------------------------------------------------------------
38
- function attrFloat(el, name, fallback = 0) {
39
- const v = el.attribs[name];
40
- if (v === undefined || v === '')
41
- return fallback;
42
- const n = parseFloat(v);
43
- return isNaN(n) ? fallback : n;
44
- }
45
- function attrInt(el, name, fallback = 0) {
46
- const v = el.attribs[name];
47
- if (v === undefined || v === '')
48
- return fallback;
49
- const n = parseInt(v, 10);
50
- return isNaN(n) ? fallback : n;
51
- }
52
- function attrStr(el, name, fallback = '') {
53
- return el.attribs[name] ?? fallback;
54
- }
55
- function attrBool(el, name) {
56
- const v = el.attribs[name];
57
- return v === 'true';
58
- }
59
- function parseAlignment(value) {
60
- switch (value) {
61
- case '1':
62
- return Alignment.Center;
63
- case '2':
64
- return Alignment.Right;
65
- case '3':
66
- return Alignment.Justify;
67
- default:
68
- return Alignment.Left;
69
- }
70
- }
71
- function parseVerticalAlign(value) {
72
- switch (value) {
73
- case 'vcenter':
74
- return 'middle';
75
- case 'bottom':
76
- return 'bottom';
77
- default:
78
- return 'top';
79
- }
80
- }
81
- function parseBorderStyle(el) {
82
- const name = attrStr(el, 'border', DEFAULT_BORDER.name);
83
- const style = attrStr(el, 'borderStyle', DEFAULT_BORDER.style);
84
- return { name, style };
85
- }
86
- // ---------------------------------------------------------------------------
87
- // Page format
88
- // ---------------------------------------------------------------------------
89
- function parsePageFormat(propertiesEl) {
90
- const pageFormatEl = findElement(propertiesEl, 'pageFormat');
91
- if (!pageFormatEl)
92
- return { ...DEFAULT_PAGE_FORMAT };
93
- return {
94
- mediaSizeName: attrInt(pageFormatEl, 'mediaSizeName', DEFAULT_PAGE_FORMAT.mediaSizeName),
95
- leftMargin: attrFloat(pageFormatEl, 'leftMargin', DEFAULT_PAGE_FORMAT.leftMargin),
96
- rightMargin: attrFloat(pageFormatEl, 'rightMargin', DEFAULT_PAGE_FORMAT.rightMargin),
97
- topMargin: attrFloat(pageFormatEl, 'topMargin', DEFAULT_PAGE_FORMAT.topMargin),
98
- bottomMargin: attrFloat(pageFormatEl, 'bottomMargin', DEFAULT_PAGE_FORMAT.bottomMargin),
99
- paperOrientation: attrInt(pageFormatEl, 'paperOrientation', DEFAULT_PAGE_FORMAT.paperOrientation),
100
- headerFOffset: attrFloat(pageFormatEl, 'headerFOffset', DEFAULT_PAGE_FORMAT.headerFOffset),
101
- footerFOffset: attrFloat(pageFormatEl, 'footerFOffset', DEFAULT_PAGE_FORMAT.footerFOffset),
102
- };
103
- }
104
- // ---------------------------------------------------------------------------
105
- // Inline elements
106
- // ---------------------------------------------------------------------------
107
- function parseTextRun(el, runes) {
108
- const startOffset = attrInt(el, 'startOffset');
109
- const length = attrInt(el, 'length');
110
- let text = runes.slice(startOffset, startOffset + length).join('');
111
- // Filter out zero-width space placeholder used for empty paragraphs
112
- text = text.replace(/\u200B/g, '');
113
- // Strip trailing paragraph-separator \n. Real UDFs (and our serializer) include the
114
- // trailing newline inside the last content's length so the editor cursor is gap-free.
115
- text = text.replace(/\n$/, '');
116
- const style = {
117
- fontFamily: attrStr(el, 'family', DEFAULT_TEXT_STYLE.fontFamily),
118
- fontSize: attrFloat(el, 'size', DEFAULT_TEXT_STYLE.fontSize),
119
- bold: attrBool(el, 'bold'),
120
- italic: attrBool(el, 'italic'),
121
- underline: attrBool(el, 'underline'),
122
- color: attrInt(el, 'foreground', DEFAULT_TEXT_STYLE.color),
123
- backgroundColor: attrInt(el, 'background', DEFAULT_TEXT_STYLE.backgroundColor),
124
- };
125
- return { type: 'text', text, style };
126
- }
127
- function parseImageRun(el) {
128
- return {
129
- type: 'image',
130
- data: attrStr(el, 'imageData'),
131
- width: attrFloat(el, 'width'),
132
- height: attrFloat(el, 'height'),
133
- };
134
- }
135
- // ---------------------------------------------------------------------------
136
- // Paragraph
137
- // ---------------------------------------------------------------------------
138
- function parseParagraph(el, runes) {
139
- const runs = [];
140
- for (const child of childElements(el)) {
141
- switch (child.name) {
142
- case 'content':
143
- case 'field':
144
- // <field> is a UYAP template placeholder run. The slot text already lives
145
- // in CDATA at startOffset+length, so for read-only purposes we treat it as
146
- // a regular text run (fieldName/fieldType/isList metadata is dropped).
147
- runs.push(parseTextRun(child, runes));
148
- break;
149
- case 'image':
150
- runs.push(parseImageRun(child));
151
- break;
152
- case 'tab': {
153
- const style = {
154
- fontFamily: attrStr(child, 'family', DEFAULT_TEXT_STYLE.fontFamily),
155
- fontSize: attrFloat(child, 'size', DEFAULT_TEXT_STYLE.fontSize),
156
- bold: attrBool(child, 'bold'),
157
- italic: attrBool(child, 'italic'),
158
- underline: attrBool(child, 'underline'),
159
- color: attrInt(child, 'foreground', DEFAULT_TEXT_STYLE.color),
160
- backgroundColor: attrInt(child, 'background', DEFAULT_TEXT_STYLE.backgroundColor),
161
- };
162
- runs.push({ type: 'tab', style });
163
- break;
164
- }
165
- }
166
- }
167
- // Filter out text runs that are empty after removing zero-width spaces
168
- const filteredRuns = runs.filter((r) => {
169
- if (r.type === 'text' && r.text === '')
170
- return false;
171
- return true;
172
- });
173
- const paragraph = {
174
- type: 'paragraph',
175
- alignment: parseAlignment(el.attribs['Alignment']),
176
- leftIndent: attrFloat(el, 'LeftIndent'),
177
- rightIndent: attrFloat(el, 'RightIndent'),
178
- firstLineIndent: attrFloat(el, 'FirstLineIndent'),
179
- lineSpacing: attrFloat(el, 'LineSpacing'),
180
- spaceBefore: attrFloat(el, 'SpaceAbove'),
181
- spaceAfter: attrFloat(el, 'SpaceBelow'),
182
- runs: filteredRuns,
183
- };
184
- // List properties
185
- const isNumbered = attrBool(el, 'Numbered');
186
- const isBulleted = attrBool(el, 'Bulleted');
187
- if (isNumbered || isBulleted) {
188
- const list = {
189
- type: isNumbered ? 'numbered' : 'bulleted',
190
- level: attrInt(el, 'ListLevel'),
191
- };
192
- const numberType = el.attribs['NumberType'];
193
- if (numberType)
194
- list.numberType = numberType;
195
- const bulletType = el.attribs['BulletType'];
196
- if (bulletType)
197
- list.bulletType = bulletType;
198
- const listId = el.attribs['ListId'];
199
- if (listId !== undefined && listId !== '') {
200
- list.listId = parseInt(listId, 10);
201
- }
202
- paragraph.list = list;
203
- }
204
- // TabSet properties — UYAP format uses comma separator. Accept ; for backward compat.
205
- const tabSetStr = el.attribs['TabSet'];
206
- if (tabSetStr) {
207
- const stops = tabSetStr
208
- .split(/[,;]/)
209
- .map((s) => parseFloat(s.split(':')[0]))
210
- .filter((n) => !isNaN(n));
211
- if (stops.length > 0)
212
- paragraph.tabStops = stops;
213
- }
214
- return paragraph;
215
- }
216
- // ---------------------------------------------------------------------------
217
- // Table
218
- // ---------------------------------------------------------------------------
219
- function parseTableCell(el, runes) {
220
- const content = [];
221
- for (const child of childElements(el)) {
222
- if (child.name === 'paragraph') {
223
- content.push(parseParagraph(child, runes));
224
- }
225
- else if (child.name === 'table') {
226
- content.push(parseTable(child, runes));
227
- }
228
- }
229
- return {
230
- colspan: attrInt(el, 'colspan', 1),
231
- rowspan: attrInt(el, 'rowspan', 1),
232
- verticalAlign: parseVerticalAlign(el.attribs['align']),
233
- fillColor: attrInt(el, 'fillColor', 16777215),
234
- border: parseBorderStyle(el),
235
- borderWidth: attrFloat(el, 'borderWidth', 0.5),
236
- borderColor: attrInt(el, 'borderColor', 0),
237
- borderSpec: attrInt(el, 'borderSpec', 15),
238
- content,
239
- };
240
- }
241
- function parseTableRow(el, runes) {
242
- const cells = [];
243
- for (const child of findAllElements(el, 'cell')) {
244
- cells.push(parseTableCell(child, runes));
245
- }
246
- return {
247
- name: attrStr(el, 'rowName', 'row1'),
248
- rowType: attrStr(el, 'rowType', 'dataRow'),
249
- height: attrFloat(el, 'height'),
250
- border: parseBorderStyle(el),
251
- cells,
252
- };
253
- }
254
- function parseTable(el, runes) {
255
- const rows = [];
256
- for (const child of findAllElements(el, 'row')) {
257
- rows.push(parseTableRow(child, runes));
258
- }
259
- const columnSpansStr = attrStr(el, 'columnSpans');
260
- const columnWidths = columnSpansStr
261
- ? columnSpansStr.split(',').map((s) => parseFloat(s.trim()))
262
- : [];
263
- return {
264
- type: 'table',
265
- name: attrStr(el, 'tableName', 'Sabit'),
266
- columns: attrInt(el, 'columnCount', columnWidths.length),
267
- columnWidths,
268
- border: parseBorderStyle(el),
269
- rows,
270
- };
271
- }
272
- // ---------------------------------------------------------------------------
273
- // Top-level elements parsing
274
- // ---------------------------------------------------------------------------
275
- function parseElements(elementsEl, runes) {
276
- const body = [];
277
- for (const child of childElements(elementsEl)) {
278
- if (child.name === 'paragraph') {
279
- body.push(parseParagraph(child, runes));
280
- }
281
- else if (child.name === 'table') {
282
- body.push(parseTable(child, runes));
283
- }
284
- else if (child.name === 'page-break') {
285
- body.push({ type: 'pageBreak' });
286
- // Inner paragraph is intentionally discarded; offset accounting
287
- // already accounted for it via the CDATA's ​ + \n.
288
- }
289
- }
290
- return body;
291
- }
292
- // ---------------------------------------------------------------------------
293
- // Main entry point
294
- // ---------------------------------------------------------------------------
295
- export async function parseUdf(buffer) {
296
- const zip = await JSZip.loadAsync(buffer);
297
- const contentXml = zip.file('content.xml');
298
- if (!contentXml) {
299
- throw new Error('UDF file does not contain content.xml');
300
- }
301
- const xmlContent = await contentXml.async('string');
302
- const dom = parseDocument(xmlContent, { xmlMode: true });
303
- // Find <template> root element
304
- const templateEl = dom.children.find((c) => c instanceof Element && c.name === 'template');
305
- if (!templateEl) {
306
- throw new Error('Missing <template> root element');
307
- }
308
- // Extract CDATA text from <content> element (child of <template>)
309
- const contentEl = findElement(templateEl, 'content');
310
- if (!contentEl) {
311
- throw new Error('Missing <content> element');
312
- }
313
- const cdataText = textContent(contentEl);
314
- const runes = Array.from(cdataText);
315
- // Parse page format from <properties>
316
- const propertiesEl = findElement(templateEl, 'properties');
317
- const pages = propertiesEl
318
- ? parsePageFormat(propertiesEl)
319
- : { ...DEFAULT_PAGE_FORMAT };
320
- // Parse block elements from <elements>
321
- const elementsEl = findElement(templateEl, 'elements');
322
- const body = elementsEl ? parseElements(elementsEl, runes) : [];
323
- return { pages, body };
324
- }
325
- //# sourceMappingURL=parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/udf/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAkB,MAAM,YAAY,CAAC;AAiBlE,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,SAAS,aAAa,CAAC,EAAW;IAChC,OAAO,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAgB,EAAE,CAAC,CAAC,YAAY,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,WAAW,CAAC,MAAe,EAAE,OAAe;IACnD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,eAAe,CAAC,MAAe,EAAE,OAAe;IACvD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;AACjE,CAAC;AAED,0EAA0E;AAC1E,SAAS,WAAW,CAAC,EAAW;IAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAClC,oCAAoC;YACpC,KAAK,MAAM,KAAK,IAAK,KAAe,CAAC,QAAQ,EAAE,CAAC;gBAC9C,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;oBAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,SAAS,SAAS,CAAC,EAAW,EAAE,IAAY,EAAE,WAAmB,CAAC;IAChE,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACjD,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,OAAO,CAAC,EAAW,EAAE,IAAY,EAAE,WAAmB,CAAC;IAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACjD,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,OAAO,CAAC,EAAW,EAAE,IAAY,EAAE,WAAmB,EAAE;IAC/D,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;AACtC,CAAC;AAED,SAAS,QAAQ,CAAC,EAAW,EAAE,IAAY;IACzC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,KAAK,MAAM,CAAC;AACtB,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAC/C,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,GAAG;YACN,OAAO,SAAS,CAAC,MAAM,CAAC;QAC1B,KAAK,GAAG;YACN,OAAO,SAAS,CAAC,KAAK,CAAC;QACzB,KAAK,GAAG;YACN,OAAO,SAAS,CAAC,OAAO,CAAC;QAC3B;YACE,OAAO,SAAS,CAAC,IAAI,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAyB;IACnD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAW;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,SAAS,eAAe,CAAC,YAAqB;IAC5C,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC7D,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAErD,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,YAAY,EAAE,eAAe,EAAE,mBAAmB,CAAC,aAAa,CAAC;QACxF,UAAU,EAAE,SAAS,CAAC,YAAY,EAAE,YAAY,EAAE,mBAAmB,CAAC,UAAU,CAAC;QACjF,WAAW,EAAE,SAAS,CAAC,YAAY,EAAE,aAAa,EAAE,mBAAmB,CAAC,WAAW,CAAC;QACpF,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,WAAW,EAAE,mBAAmB,CAAC,SAAS,CAAC;QAC9E,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,cAAc,EAAE,mBAAmB,CAAC,YAAY,CAAC;QACvF,gBAAgB,EAAE,OAAO,CAAC,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,gBAAgB,CAAC;QACjG,aAAa,EAAE,SAAS,CAAC,YAAY,EAAE,eAAe,EAAE,mBAAmB,CAAC,aAAa,CAAC;QAC1F,aAAa,EAAE,SAAS,CAAC,YAAY,EAAE,eAAe,EAAE,mBAAmB,CAAC,aAAa,CAAC;KAC3F,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,YAAY,CAAC,EAAW,EAAE,KAAe;IAChD,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACrC,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEnE,oEAAoE;IACpE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAEnC,oFAAoF;IACpF,sFAAsF;IACtF,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAE/B,MAAM,KAAK,GAAc;QACvB,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC;QAChE,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC;QAC5D,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;QAC9B,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;QACpC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,kBAAkB,CAAC,KAAK,CAAC;QAC1D,eAAe,EAAE,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,kBAAkB,CAAC,eAAe,CAAC;KAC/E,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,aAAa,CAAC,EAAW;IAChC,OAAO;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC;QAC9B,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC;QAC7B,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,SAAS,cAAc,CAAC,EAAW,EAAE,KAAe;IAClD,MAAM,IAAI,GAAoB,EAAE,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;QACtC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS,CAAC;YACf,KAAK,OAAO;gBACV,0EAA0E;gBAC1E,2EAA2E;gBAC3E,uEAAuE;gBACvE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,KAAK,GAAc;oBACvB,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC;oBACnE,QAAQ,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC;oBAC/D,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;oBAC7B,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;oBACjC,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;oBACvC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,kBAAkB,CAAC,KAAK,CAAC;oBAC7D,eAAe,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,kBAAkB,CAAC,eAAe,CAAC;iBAClF,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClC,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACrC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE;YAAE,OAAO,KAAK,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAc;QAC3B,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAClD,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,YAAY,CAAC;QACvC,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;QACzC,eAAe,EAAE,SAAS,CAAC,EAAE,EAAE,iBAAiB,CAAC;QACjD,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC;QACzC,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,YAAY,CAAC;QACxC,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,YAAY,CAAC;QACvC,IAAI,EAAE,YAAY;KACnB,CAAC;IAEF,kBAAkB;IAClB,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAC5C,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAmB;YAC3B,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;YAC1C,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC;SAChC,CAAC;QACF,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7C,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,sFAAsF;IACtF,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,SAAS;aACpB,KAAK,CAAC,MAAM,CAAC;aACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;IACnD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,SAAS,cAAc,CAAC,EAAW,EAAE,KAAe;IAClD,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAClC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAClC,aAAa,EAAE,kBAAkB,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC;QAC7C,MAAM,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC5B,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,aAAa,EAAE,GAAG,CAAC;QAC9C,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QAC1C,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC;QACzC,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,EAAW,EAAE,KAAe;IACjD,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC;QACpC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC;QAC1C,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC;QAC/B,MAAM,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC5B,KAAK;KACN,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAAW,EAAE,KAAe;IAC9C,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,cAAc;QACjC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC;QACvC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,YAAY,CAAC,MAAM,CAAC;QACxD,YAAY;QACZ,MAAM,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC5B,IAAI;KACL,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E,SAAS,aAAa,CAAC,UAAmB,EAAE,KAAe;IACzD,MAAM,IAAI,GAAmB,EAAE,CAAC;IAEhC,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;YACjC,gEAAgE;YAChE,mDAAmD;QACrD,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAc;IAC3C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzD,+BAA+B;IAC/B,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAClC,CAAC,CAAC,EAAgB,EAAE,CAAC,CAAC,YAAY,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CACnE,CAAC;IACF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,kEAAkE;IAClE,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACrD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEpC,sCAAsC;IACtC,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAe,YAAY;QACpC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC;QAC/B,CAAC,CAAC,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAE/B,uCAAuC;IACvC,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,IAAI,GAAmB,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEhF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { Document } from '../model/document.js';
2
- /**
3
- * Serialize a Document to a UDF file (ZIP buffer containing content.xml).
4
- */
5
- export declare function serializeUdf(doc: Document): Promise<Buffer>;
@@ -1,267 +0,0 @@
1
- import JSZip from 'jszip';
2
- import { buildCdata } from './cdata-builder.js';
3
- import { createParagraph } from '../model/document.js';
4
- /**
5
- * Escape a string for use inside XML attribute values.
6
- * CDATA sections do not need escaping.
7
- */
8
- function escapeAttr(value) {
9
- return value
10
- .replace(/&/g, '&amp;')
11
- .replace(/</g, '&lt;')
12
- .replace(/>/g, '&gt;')
13
- .replace(/"/g, '&quot;');
14
- }
15
- /**
16
- * Map vertical alignment values from the model to UDF attribute values.
17
- */
18
- function cellAlignAttr(align) {
19
- if (align === 'middle')
20
- return 'vcenter';
21
- return align;
22
- }
23
- // ---------------------------------------------------------------------------
24
- // XML generation helpers
25
- // ---------------------------------------------------------------------------
26
- function serializePageFormat(pf) {
27
- return (`<properties>` +
28
- `<pageFormat` +
29
- ` mediaSizeName="${pf.mediaSizeName}"` +
30
- ` leftMargin="${pf.leftMargin.toFixed(2)}"` +
31
- ` rightMargin="${pf.rightMargin.toFixed(2)}"` +
32
- ` topMargin="${pf.topMargin.toFixed(2)}"` +
33
- ` bottomMargin="${pf.bottomMargin.toFixed(2)}"` +
34
- ` paperOrientation="${pf.paperOrientation}"` +
35
- ` headerFOffset="${pf.headerFOffset.toFixed(1)}"` +
36
- ` footerFOffset="${pf.footerFOffset.toFixed(1)}"` +
37
- ` />` +
38
- `</properties>`);
39
- }
40
- function fontAttributes(style) {
41
- let s = ` family="${escapeAttr(style.fontFamily)}"`;
42
- s += ` size="${style.fontSize}"`;
43
- if (style.bold)
44
- s += ` bold="true"`;
45
- if (style.italic)
46
- s += ` italic="true"`;
47
- if (style.underline)
48
- s += ` underline="true"`;
49
- // Only emit foreground/background when non-default (matches Go behavior)
50
- if (style.color !== -16777216) {
51
- s += ` foreground="${style.color}"`;
52
- }
53
- if (style.backgroundColor !== -1) {
54
- s += ` background="${style.backgroundColor}"`;
55
- }
56
- return s;
57
- }
58
- /**
59
- * Collect OffsetEntry items that belong to a specific blockId.
60
- */
61
- function entriesForBlock(entries, blockId) {
62
- return entries.filter((e) => e.blockId === blockId);
63
- }
64
- // ---------------------------------------------------------------------------
65
- // Element serialisation
66
- // ---------------------------------------------------------------------------
67
- function serializeParagraph(para, blockEntries, emptyOffset = 0) {
68
- let xml = `<paragraph`;
69
- xml += ` Alignment="${para.alignment}"`;
70
- xml += ` LeftIndent="${para.leftIndent.toFixed(1)}"`;
71
- xml += ` RightIndent="${para.rightIndent.toFixed(1)}"`;
72
- if (para.firstLineIndent !== 0) {
73
- xml += ` FirstLineIndent="${para.firstLineIndent.toFixed(2)}"`;
74
- }
75
- if (para.lineSpacing !== 0) {
76
- xml += ` LineSpacing="${para.lineSpacing.toFixed(2)}"`;
77
- }
78
- if (para.spaceBefore !== 0) {
79
- xml += ` SpaceAbove="${para.spaceBefore.toFixed(2)}"`;
80
- }
81
- if (para.spaceAfter !== 0) {
82
- xml += ` SpaceBelow="${para.spaceAfter.toFixed(2)}"`;
83
- }
84
- if (para.tabStops && para.tabStops.length > 0) {
85
- // UDF TabSet format: "position:alignment:leader" joined by COMMAS (matches Go converter / UYAP parser).
86
- const tabSet = para.tabStops
87
- .map((p) => `${p.toFixed(2)}:0:0`)
88
- .join(',');
89
- xml += ` TabSet="${tabSet}"`;
90
- }
91
- // List attributes
92
- if (para.list) {
93
- if (para.list.type === 'numbered') {
94
- xml += ` Numbered="true"`;
95
- if (para.list.numberType) {
96
- xml += ` NumberType="${escapeAttr(para.list.numberType)}"`;
97
- }
98
- if (para.list.listId !== undefined) {
99
- xml += ` ListId="${para.list.listId}"`;
100
- }
101
- xml += ` ListLevel="${para.list.level}"`;
102
- }
103
- else if (para.list.type === 'bulleted') {
104
- xml += ` Bulleted="true"`;
105
- if (para.list.bulletType) {
106
- xml += ` BulletType="${escapeAttr(para.list.bulletType)}"`;
107
- }
108
- xml += ` ListLevel="${para.list.level}"`;
109
- }
110
- }
111
- xml += `>`;
112
- // Content / image elements driven by offset entries
113
- if (blockEntries.length === 0) {
114
- // Empty paragraph placeholder. length=2 covers ZWS + paragraph-separator \n, so editor
115
- // cursor positions are continuous (no gap before the next paragraph starts).
116
- xml += `<content startOffset="${emptyOffset}" length="2" family="Times New Roman" size="10" />`;
117
- }
118
- else {
119
- const lastIdx = blockEntries.length - 1;
120
- for (let i = 0; i < blockEntries.length; i++) {
121
- const entry = blockEntries[i];
122
- // The last text run of a paragraph extends its length by 1 to cover the trailing \n,
123
- // matching real UDFs (Go/Word output) — keeps editor cursor gap-free at end-of-paragraph.
124
- // image/tab keep length=1 (matches Go convention; gap in those rare cases is tolerated).
125
- const extendsNewline = i === lastIdx && entry.element.type === 'text';
126
- if (entry.element.type === 'text') {
127
- const run = entry.element;
128
- const len = entry.length + (extendsNewline ? 1 : 0);
129
- xml += `<content`;
130
- xml += ` startOffset="${entry.startOffset}"`;
131
- xml += ` length="${len}"`;
132
- xml += fontAttributes(run.style);
133
- xml += ` />`;
134
- }
135
- else if (entry.element.type === 'image') {
136
- const img = entry.element;
137
- xml += `<image`;
138
- xml += ` imageData="${img.data}"`;
139
- xml += ` startOffset="${entry.startOffset}"`;
140
- xml += ` length="1"`;
141
- xml += ` width="${img.width.toFixed(1)}"`;
142
- xml += ` height="${img.height.toFixed(1)}"`;
143
- xml += ` />`;
144
- }
145
- else if (entry.element.type === 'tab') {
146
- const tab = entry.element;
147
- xml += `<tab`;
148
- xml += ` startOffset="${entry.startOffset}"`;
149
- xml += ` length="1"`;
150
- xml += fontAttributes(tab.style);
151
- xml += ` />`;
152
- }
153
- }
154
- }
155
- xml += `</paragraph>\n`;
156
- return xml;
157
- }
158
- function serializeTable(table, entries, blockIdCounter, offsetCursor) {
159
- let xml = `<table`;
160
- xml += ` tableName="${escapeAttr(table.name)}"`;
161
- xml += ` columnCount="${table.columns}"`;
162
- const spans = table.columnWidths.map((w) => Math.round(w).toString());
163
- xml += ` columnSpans="${spans.join(',')}"`;
164
- xml += ` border="${escapeAttr(table.border.name)}"`;
165
- xml += `>`;
166
- for (const row of table.rows) {
167
- xml += serializeRow(row, entries, blockIdCounter, offsetCursor);
168
- }
169
- xml += `</table>\n`;
170
- return xml;
171
- }
172
- function serializeRow(row, entries, blockIdCounter, offsetCursor) {
173
- let xml = `<row`;
174
- xml += ` rowName="${escapeAttr(row.name)}"`;
175
- xml += ` rowType="${escapeAttr(row.rowType)}"`;
176
- xml += `>`;
177
- for (const cell of row.cells) {
178
- xml += serializeCell(cell, entries, blockIdCounter, offsetCursor);
179
- }
180
- xml += `</row>`;
181
- return xml;
182
- }
183
- function serializeCell(cell, entries, blockIdCounter, offsetCursor) {
184
- let xml = `<cell`;
185
- // Only emit non-default cell attributes (matches Go behavior - minimal cell output)
186
- if (cell.colspan > 1)
187
- xml += ` colspan="${cell.colspan}"`;
188
- if (cell.verticalAlign !== 'top')
189
- xml += ` align="${cellAlignAttr(cell.verticalAlign)}"`;
190
- if (cell.fillColor !== 16777215 && cell.fillColor !== -1)
191
- xml += ` fillColor="${cell.fillColor}"`;
192
- if (cell.borderSpec !== 0) {
193
- xml += ` border="${escapeAttr(cell.border.name)}"`;
194
- xml += ` borderWidth="${cell.borderWidth.toFixed(1)}"`;
195
- xml += ` borderSpec="${cell.borderSpec}"`;
196
- xml += ` borderColor="${cell.borderColor}"`;
197
- xml += ` borderStyle="${escapeAttr(cell.border.style)}"`;
198
- }
199
- xml += `>`;
200
- xml += serializeBlocks(cell.content, entries, blockIdCounter, offsetCursor);
201
- xml += `</cell>`;
202
- return xml;
203
- }
204
- /**
205
- * Serialize a list of block elements (paragraphs, tables, and page breaks).
206
- * The blockIdCounter tracks which block id to assign (must match
207
- * the order produced by buildCdata).
208
- * The offsetCursor tracks the running CDATA codepoint position.
209
- */
210
- function serializeBlocks(blocks, entries, blockIdCounter, offsetCursor) {
211
- let xml = '';
212
- for (const block of blocks) {
213
- if (block.type === 'paragraph') {
214
- const id = blockIdCounter.value++;
215
- const blockEntries = entriesForBlock(entries, id);
216
- xml += serializeParagraph(block, blockEntries, offsetCursor.value);
217
- if (blockEntries.length === 0) {
218
- offsetCursor.value += 2; // ​ + \n
219
- }
220
- else {
221
- const last = blockEntries[blockEntries.length - 1];
222
- offsetCursor.value = last.startOffset + last.length + 1; // +1 for paragraph separator \n
223
- }
224
- }
225
- else if (block.type === 'table') {
226
- xml += serializeTable(block, entries, blockIdCounter, offsetCursor);
227
- }
228
- else if (block.type === 'pageBreak') {
229
- blockIdCounter.value++;
230
- const inner = serializeParagraph(createParagraph(), [], offsetCursor.value);
231
- xml += `<page-break>${inner.replace(/\n$/, '')}</page-break>\n`;
232
- offsetCursor.value += 2;
233
- }
234
- }
235
- return xml;
236
- }
237
- // ---------------------------------------------------------------------------
238
- // Public API
239
- // ---------------------------------------------------------------------------
240
- /**
241
- * Serialize a Document to a UDF file (ZIP buffer containing content.xml).
242
- */
243
- export async function serializeUdf(doc) {
244
- const { cdata, entries } = buildCdata(doc.body);
245
- // Build XML
246
- let xml = `<?xml version="1.0" encoding="UTF-8" ?>\n`;
247
- xml += `<template format_id="1.8">\n`;
248
- xml += `<content><![CDATA[${cdata}]]></content>`;
249
- xml += serializePageFormat(doc.pages);
250
- xml += `\n`;
251
- xml += `<elements resolver="hvl-default">\n`;
252
- const blockIdCounter = { value: 0 };
253
- const offsetCursor = { value: 0 };
254
- xml += serializeBlocks(doc.body, entries, blockIdCounter, offsetCursor);
255
- xml += `</elements>\n`;
256
- xml += `<styles>`;
257
- xml += `<style name="default" description="Geçerli" family="Dialog" size="12" bold="false" italic="false" foreground="-13421773" FONT_ATTRIBUTE_KEY="javax.swing.plaf.FontUIResource[family=Dialog,name=Dialog,style=plain,size=12]" />`;
258
- xml += `<style name="hvl-default" family="Times New Roman" size="12" description="Gövde" />`;
259
- xml += `</styles>\n`;
260
- xml += `</template>`;
261
- // Create ZIP
262
- const zip = new JSZip();
263
- zip.file('content.xml', xml, { compression: 'DEFLATE' });
264
- const buf = await zip.generateAsync({ type: 'nodebuffer' });
265
- return buf;
266
- }
267
- //# sourceMappingURL=serializer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../../src/udf/serializer.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Convert a CSS color string to a signed ARGB int32 value.
3
- * Supports: hex (#RGB, #RRGGBB), rgb(r,g,b), named colors.
4
- */
5
- export declare function cssToArgb(color: string): number;
6
- /**
7
- * Convert a signed ARGB int32 value to a CSS hex color string.
8
- */
9
- export declare function argbToCss(argb: number): string;