@otomate/docx 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/reader.d.ts +6 -0
- package/dist/reader.d.ts.map +1 -0
- package/dist/reader.js +410 -0
- package/dist/reader.js.map +1 -0
- package/dist/templates.d.ts +5 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +61 -0
- package/dist/templates.js.map +1 -0
- package/dist/writer.d.ts +8 -0
- package/dist/writer.d.ts.map +1 -0
- package/dist/writer.js +589 -0
- package/dist/writer.js.map +1 -0
- package/dist/xml.d.ts +5 -0
- package/dist/xml.d.ts.map +1 -0
- package/dist/xml.js +47 -0
- package/dist/xml.js.map +1 -0
- package/dist/zip.d.ts +14 -0
- package/dist/zip.d.ts.map +1 -0
- package/dist/zip.js +84 -0
- package/dist/zip.js.map +1 -0
- package/package.json +34 -0
package/dist/writer.js
ADDED
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// docx Writer — UDM tree → .docx buffer
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { isParent, isText } from "@otomate/core";
|
|
5
|
+
import { buildStyleElement, cssToRunProps, cssToParaProps, parseLengthTwips, parseColor } from "@otomate/css-docx";
|
|
6
|
+
import { packDocx } from "./zip.js";
|
|
7
|
+
import { RELS, DOC_RELS, DEFAULT_STYLES, DEFAULT_NUMBERING } from "./templates.js";
|
|
8
|
+
const W_NS = 'xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"';
|
|
9
|
+
const R_NS = 'xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"';
|
|
10
|
+
const WP_NS = 'xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"';
|
|
11
|
+
/** Serialize a UDM tree to a .docx buffer. */
|
|
12
|
+
export async function writeDocx(tree, options) {
|
|
13
|
+
// Merge CSS rules from tree.data.css (set by HTML reader) and explicit options
|
|
14
|
+
const cssData = tree.data?.css;
|
|
15
|
+
const mergedClassCss = { ...cssData?.classRules, ...options?.cssClasses };
|
|
16
|
+
const elementCss = cssData?.elementRules ?? {};
|
|
17
|
+
const ctx = {
|
|
18
|
+
cssClasses: mergedClassCss,
|
|
19
|
+
cssElements: elementCss,
|
|
20
|
+
customStyles: [],
|
|
21
|
+
generatedStyleIds: new Set(),
|
|
22
|
+
nextNumId: 3,
|
|
23
|
+
hyperlinks: new Map(),
|
|
24
|
+
nextRId: 100,
|
|
25
|
+
};
|
|
26
|
+
const bodyXml = tree.children.map(child => convertBlock(child, ctx, 0)).join("\n");
|
|
27
|
+
const docxData = tree.data?.docx;
|
|
28
|
+
// Build styles.xml with any generated custom styles
|
|
29
|
+
let stylesXml = docxData?.styles ?? DEFAULT_STYLES;
|
|
30
|
+
if (ctx.customStyles.length > 0) {
|
|
31
|
+
// Inject custom styles before closing </w:styles>
|
|
32
|
+
const injection = ctx.customStyles.join("\n");
|
|
33
|
+
stylesXml = stylesXml.replace("</w:styles>", `${injection}\n</w:styles>`);
|
|
34
|
+
}
|
|
35
|
+
const docXml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
36
|
+
<w:document ${W_NS} ${R_NS} ${WP_NS}>
|
|
37
|
+
<w:body>
|
|
38
|
+
${bodyXml}
|
|
39
|
+
<w:sectPr><w:pgSz w:w="12240" w:h="15840"/><w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440"/></w:sectPr>
|
|
40
|
+
</w:body>
|
|
41
|
+
</w:document>`;
|
|
42
|
+
// Build relationships XML with hyperlinks
|
|
43
|
+
let relsXml = docxData?.relationships ?? DOC_RELS;
|
|
44
|
+
if (ctx.hyperlinks.size > 0) {
|
|
45
|
+
const hlRels = [...ctx.hyperlinks].map(([rId, url]) => `<Relationship Id="${rId}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Target="${esc(url)}" TargetMode="External"/>`).join("\n ");
|
|
46
|
+
// Inject before closing </Relationships>
|
|
47
|
+
relsXml = relsXml.replace("</Relationships>", ` ${hlRels}\n</Relationships>`);
|
|
48
|
+
}
|
|
49
|
+
const parts = {
|
|
50
|
+
document: docXml,
|
|
51
|
+
styles: stylesXml,
|
|
52
|
+
numbering: docxData?.numbering ?? DEFAULT_NUMBERING,
|
|
53
|
+
relationships: relsXml,
|
|
54
|
+
contentTypes: docxData?.contentTypes ?? undefined,
|
|
55
|
+
media: new Map(),
|
|
56
|
+
rawParts: new Map(),
|
|
57
|
+
};
|
|
58
|
+
// Embed UDM tree as custom part for lossless round-trip with occam
|
|
59
|
+
const udmSnapshot = stripDataForSnapshot(tree);
|
|
60
|
+
parts.rawParts.set("word/occam-udm.json", JSON.stringify(udmSnapshot));
|
|
61
|
+
// Embed CSS rules if present
|
|
62
|
+
if (cssData && (Object.keys(cssData.classRules ?? {}).length > 0 || Object.keys(cssData.elementRules ?? {}).length > 0)) {
|
|
63
|
+
parts.rawParts.set("word/occam-css.json", JSON.stringify(cssData));
|
|
64
|
+
}
|
|
65
|
+
// Restore raw parts from round-trip
|
|
66
|
+
if (docxData?.rawParts) {
|
|
67
|
+
const raw = docxData.rawParts;
|
|
68
|
+
for (const [k, v] of Object.entries(raw)) {
|
|
69
|
+
if (!parts.rawParts.has(k))
|
|
70
|
+
parts.rawParts.set(k, v);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Ensure _rels/.rels exists
|
|
74
|
+
if (!parts.rawParts.has("_rels/.rels")) {
|
|
75
|
+
parts.rawParts.set("_rels/.rels", RELS);
|
|
76
|
+
}
|
|
77
|
+
return packDocx(parts);
|
|
78
|
+
}
|
|
79
|
+
function allocHyperlinkRId(ctx, url) {
|
|
80
|
+
// Reuse existing rId for same URL
|
|
81
|
+
for (const [rId, existingUrl] of ctx.hyperlinks) {
|
|
82
|
+
if (existingUrl === url)
|
|
83
|
+
return rId;
|
|
84
|
+
}
|
|
85
|
+
const rId = `rId${ctx.nextRId++}`;
|
|
86
|
+
ctx.hyperlinks.set(rId, url);
|
|
87
|
+
return rId;
|
|
88
|
+
}
|
|
89
|
+
function convertBlock(node, ctx, listIlvl) {
|
|
90
|
+
switch (node.type) {
|
|
91
|
+
case "paragraph": return convertParagraph(node, ctx);
|
|
92
|
+
case "heading": return convertHeading(node, ctx);
|
|
93
|
+
case "blockquote": return convertBlockquote(node, ctx);
|
|
94
|
+
case "list": return convertList(node, ctx, listIlvl);
|
|
95
|
+
case "listItem": return ""; // handled by convertList
|
|
96
|
+
case "codeBlock": return convertCodeBlock(node, ctx);
|
|
97
|
+
case "table": return convertTable(node, ctx);
|
|
98
|
+
case "thematicBreak": return `<w:p><w:pPr><w:pBdr><w:bottom w:val="single" w:sz="6" w:color="auto"/></w:pBdr></w:pPr></w:p>`;
|
|
99
|
+
case "div":
|
|
100
|
+
case "figure":
|
|
101
|
+
return convertDiv(node, ctx, listIlvl);
|
|
102
|
+
case "html": return `<w:p><w:r><w:t>${esc(node.value)}</w:t></w:r></w:p>`;
|
|
103
|
+
default: return "";
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** Convert a div/figure — propagates container CSS to child paragraphs */
|
|
107
|
+
function convertDiv(node, ctx, listIlvl) {
|
|
108
|
+
const classes = node.classes;
|
|
109
|
+
if (!classes || classes.length === 0) {
|
|
110
|
+
// No classes — just pass through
|
|
111
|
+
return node.children.map(c => convertBlock(c, ctx, listIlvl)).join("\n");
|
|
112
|
+
}
|
|
113
|
+
// Resolve CSS for this container's classes
|
|
114
|
+
let containerCss = {};
|
|
115
|
+
for (const cls of classes) {
|
|
116
|
+
if (ctx.cssClasses[cls])
|
|
117
|
+
containerCss = { ...containerCss, ...ctx.cssClasses[cls] };
|
|
118
|
+
}
|
|
119
|
+
if (Object.keys(containerCss).length === 0) {
|
|
120
|
+
return node.children.map(c => convertBlock(c, ctx, listIlvl)).join("\n");
|
|
121
|
+
}
|
|
122
|
+
// Build paragraph properties (background, alignment, margins) from container CSS
|
|
123
|
+
const paraProps = cssToParaProps(containerCss);
|
|
124
|
+
const runProps = cssToRunProps(containerCss);
|
|
125
|
+
const containerRPr = buildRunPropsXml(runProps);
|
|
126
|
+
const bg = containerCss["background-color"] ? parseColorSafe(containerCss["background-color"]) : undefined;
|
|
127
|
+
// Build extra pPr elements to inject into child paragraphs
|
|
128
|
+
let extraPPr = "";
|
|
129
|
+
if (bg && bg !== "auto")
|
|
130
|
+
extraPPr += `<w:shd w:val="clear" w:color="auto" w:fill="${bg}"/>`;
|
|
131
|
+
if (paraProps.jc)
|
|
132
|
+
extraPPr += `<w:jc w:val="${paraProps.jc}"/>`;
|
|
133
|
+
if (paraProps.ind) {
|
|
134
|
+
const attrs = [];
|
|
135
|
+
if (paraProps.ind.left)
|
|
136
|
+
attrs.push(`w:left="${paraProps.ind.left}"`);
|
|
137
|
+
if (paraProps.ind.right)
|
|
138
|
+
attrs.push(`w:right="${paraProps.ind.right}"`);
|
|
139
|
+
if (attrs.length)
|
|
140
|
+
extraPPr += `<w:ind ${attrs.join(" ")}/>`;
|
|
141
|
+
}
|
|
142
|
+
// Create a temporary modified context that includes the container's styles
|
|
143
|
+
// so child paragraphs inherit them
|
|
144
|
+
const childCtx = {
|
|
145
|
+
...ctx,
|
|
146
|
+
_containerRPr: containerRPr,
|
|
147
|
+
_containerPPr: extraPPr,
|
|
148
|
+
};
|
|
149
|
+
return node.children.map(c => convertBlockWithContainer(c, childCtx, listIlvl)).join("\n");
|
|
150
|
+
}
|
|
151
|
+
/** Convert a block node, injecting container-level CSS if present */
|
|
152
|
+
function convertBlockWithContainer(node, ctx, listIlvl) {
|
|
153
|
+
const containerCtx = ctx;
|
|
154
|
+
const extraRPr = containerCtx._containerRPr ?? "";
|
|
155
|
+
const extraPPr = containerCtx._containerPPr ?? "";
|
|
156
|
+
// Helper: resolve all CSS run props for this node (element + own classes)
|
|
157
|
+
const nodeRPr = resolveBlockCssRunProps(node, ctx);
|
|
158
|
+
const mergedRPr = extraRPr + nodeRPr;
|
|
159
|
+
// Helper: inject container pPr into a pPr string
|
|
160
|
+
function injectPPr(pPr) {
|
|
161
|
+
if (!extraPPr)
|
|
162
|
+
return pPr;
|
|
163
|
+
if (pPr)
|
|
164
|
+
return pPr.replace("</w:pPr>", `${extraPPr}</w:pPr>`);
|
|
165
|
+
return `<w:pPr>${extraPPr}</w:pPr>`;
|
|
166
|
+
}
|
|
167
|
+
if (node.type === "paragraph") {
|
|
168
|
+
const para = node;
|
|
169
|
+
const pPr = injectPPr(buildPPr(para, ctx));
|
|
170
|
+
const runs = para.children.map(c => convertInline(c, ctx, mergedRPr)).join("");
|
|
171
|
+
return `<w:p>${pPr}${runs}</w:p>`;
|
|
172
|
+
}
|
|
173
|
+
if (node.type === "heading") {
|
|
174
|
+
const h = node;
|
|
175
|
+
const tag = `h${h.depth}`;
|
|
176
|
+
const hRPr = mergedRPr;
|
|
177
|
+
const runs = h.children.map(c => convertInline(c, ctx, hRPr)).join("");
|
|
178
|
+
// Always use HeadingN as pStyle so docx reader recognizes it as heading on re-import
|
|
179
|
+
let pPrInner = "";
|
|
180
|
+
if (ctx.cssElements[tag]) {
|
|
181
|
+
ensureElementStyle(tag, ctx);
|
|
182
|
+
pPrInner = `<w:pStyle w:val="_el_${tag}"/>`;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
pPrInner = `<w:pStyle w:val="Heading${h.depth}"/>`;
|
|
186
|
+
}
|
|
187
|
+
// Generate class styles (for the style definitions) but don't override pStyle
|
|
188
|
+
const classes = h.classes;
|
|
189
|
+
if (classes?.length) {
|
|
190
|
+
for (const cls of classes) {
|
|
191
|
+
if (ctx.cssClasses[cls] && !ctx.generatedStyleIds.has(cls)) {
|
|
192
|
+
ctx.generatedStyleIds.add(cls);
|
|
193
|
+
const rp = cssToRunProps(ctx.cssClasses[cls]);
|
|
194
|
+
const pp = cssToParaProps(ctx.cssClasses[cls]);
|
|
195
|
+
ctx.customStyles.push(buildStyleElement(cls, cls, "paragraph", rp, pp));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
const pPr = injectPPr(`<w:pPr>${pPrInner}</w:pPr>`);
|
|
200
|
+
return `<w:p>${pPr}${runs}</w:p>`;
|
|
201
|
+
}
|
|
202
|
+
if (node.type === "list") {
|
|
203
|
+
// Pass container formatting down to list items
|
|
204
|
+
const list = node;
|
|
205
|
+
const numId = list.ordered ? "2" : "1";
|
|
206
|
+
const parts = [];
|
|
207
|
+
for (const item of list.children) {
|
|
208
|
+
if (item.type !== "listItem")
|
|
209
|
+
continue;
|
|
210
|
+
const li = item;
|
|
211
|
+
// Resolve list item class CSS
|
|
212
|
+
const liClasses = li.classes;
|
|
213
|
+
let liRPr = mergedRPr;
|
|
214
|
+
if (liClasses) {
|
|
215
|
+
for (const cls of liClasses) {
|
|
216
|
+
if (ctx.cssClasses[cls])
|
|
217
|
+
liRPr += buildRunPropsXml(cssToRunProps(ctx.cssClasses[cls]));
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Also apply li element CSS
|
|
221
|
+
if (ctx.cssElements["li"])
|
|
222
|
+
liRPr += buildRunPropsXml(cssToRunProps(ctx.cssElements["li"]));
|
|
223
|
+
for (const child of li.children) {
|
|
224
|
+
if (child.type === "paragraph") {
|
|
225
|
+
const runs = child.children.map(c => convertInline(c, ctx, liRPr)).join("");
|
|
226
|
+
let pPr = `<w:pPr><w:numPr><w:ilvl w:val="${listIlvl}"/><w:numId w:val="${numId}"/></w:numPr></w:pPr>`;
|
|
227
|
+
pPr = injectPPr(pPr);
|
|
228
|
+
parts.push(`<w:p>${pPr}${runs}</w:p>`);
|
|
229
|
+
}
|
|
230
|
+
else if (child.type === "list") {
|
|
231
|
+
parts.push(convertBlockWithContainer(child, ctx, listIlvl + 1));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return parts.join("\n");
|
|
236
|
+
}
|
|
237
|
+
// For other children, use normal conversion with container props cleared
|
|
238
|
+
const cleanCtx = { ...ctx };
|
|
239
|
+
delete cleanCtx._containerRPr;
|
|
240
|
+
delete cleanCtx._containerPPr;
|
|
241
|
+
return convertBlock(node, cleanCtx, listIlvl);
|
|
242
|
+
}
|
|
243
|
+
function convertParagraph(node, ctx) {
|
|
244
|
+
const pPr = buildPPr(node, ctx);
|
|
245
|
+
const cssRPr = resolveBlockCssRunProps(node, ctx);
|
|
246
|
+
const runs = node.children.map(c => convertInline(c, ctx, cssRPr)).join("");
|
|
247
|
+
return `<w:p>${pPr}${runs}</w:p>`;
|
|
248
|
+
}
|
|
249
|
+
function convertHeading(node, ctx) {
|
|
250
|
+
const tag = `h${node.depth}`;
|
|
251
|
+
const cssRPr = ctx.cssElements[tag] ? buildRunPropsXml(cssToRunProps(ctx.cssElements[tag])) : "";
|
|
252
|
+
const runs = node.children.map(c => convertInline(c, ctx, cssRPr)).join("");
|
|
253
|
+
if (ctx.cssElements[tag]) {
|
|
254
|
+
ensureElementStyle(tag, ctx);
|
|
255
|
+
return `<w:p><w:pPr><w:pStyle w:val="_el_${tag}"/></w:pPr>${runs}</w:p>`;
|
|
256
|
+
}
|
|
257
|
+
return `<w:p><w:pPr><w:pStyle w:val="Heading${node.depth}"/></w:pPr>${runs}</w:p>`;
|
|
258
|
+
}
|
|
259
|
+
/** Resolve CSS run properties for a block node (from element + class CSS) */
|
|
260
|
+
function resolveBlockCssRunProps(node, ctx) {
|
|
261
|
+
const tag = udmTypeToHtmlTag(node.type, node);
|
|
262
|
+
const classes = node.classes;
|
|
263
|
+
// Merge: element CSS first, then class CSS overrides
|
|
264
|
+
let merged = {};
|
|
265
|
+
if (tag && ctx.cssElements[tag])
|
|
266
|
+
merged = { ...merged, ...ctx.cssElements[tag] };
|
|
267
|
+
if (classes) {
|
|
268
|
+
for (const cls of classes) {
|
|
269
|
+
if (ctx.cssClasses[cls])
|
|
270
|
+
merged = { ...merged, ...ctx.cssClasses[cls] };
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (Object.keys(merged).length === 0)
|
|
274
|
+
return "";
|
|
275
|
+
return buildRunPropsXml(cssToRunProps(merged));
|
|
276
|
+
}
|
|
277
|
+
/** Build w:rPr XML string from OoxmlRunProps (without the <w:rPr> wrapper) */
|
|
278
|
+
function buildRunPropsXml(props) {
|
|
279
|
+
const parts = [];
|
|
280
|
+
if (props.rFonts) {
|
|
281
|
+
const attrs = [];
|
|
282
|
+
if (props.rFonts.ascii)
|
|
283
|
+
attrs.push(`w:ascii="${props.rFonts.ascii}"`);
|
|
284
|
+
if (props.rFonts.hAnsi)
|
|
285
|
+
attrs.push(`w:hAnsi="${props.rFonts.hAnsi}"`);
|
|
286
|
+
parts.push(`<w:rFonts ${attrs.join(" ")}/>`);
|
|
287
|
+
}
|
|
288
|
+
if (props.b)
|
|
289
|
+
parts.push("<w:b/>");
|
|
290
|
+
if (props.i)
|
|
291
|
+
parts.push("<w:i/>");
|
|
292
|
+
if (props.sz)
|
|
293
|
+
parts.push(`<w:sz w:val="${props.sz}"/>`);
|
|
294
|
+
if (props.color)
|
|
295
|
+
parts.push(`<w:color w:val="${props.color}"/>`);
|
|
296
|
+
if (props.u)
|
|
297
|
+
parts.push(`<w:u w:val="${props.u}"/>`);
|
|
298
|
+
if (props.strike)
|
|
299
|
+
parts.push("<w:strike/>");
|
|
300
|
+
if (props.shd)
|
|
301
|
+
parts.push(`<w:shd w:val="clear" w:color="auto" w:fill="${props.shd}"/>`);
|
|
302
|
+
return parts.join("");
|
|
303
|
+
}
|
|
304
|
+
function convertBlockquote(node, ctx) {
|
|
305
|
+
const bqCss = ctx.cssElements["blockquote"] ?? {};
|
|
306
|
+
const bqRPr = Object.keys(bqCss).length > 0 ? buildRunPropsXml(cssToRunProps(bqCss)) : "";
|
|
307
|
+
const bqPPr = buildBlockquotePPr(bqCss);
|
|
308
|
+
return node.children.map(child => {
|
|
309
|
+
if (child.type === "paragraph") {
|
|
310
|
+
const runs = child.children.map(c => convertInline(c, ctx, bqRPr)).join("");
|
|
311
|
+
return `<w:p>${bqPPr}${runs}</w:p>`;
|
|
312
|
+
}
|
|
313
|
+
return convertBlock(child, ctx, 0);
|
|
314
|
+
}).join("\n");
|
|
315
|
+
}
|
|
316
|
+
function buildBlockquotePPr(css) {
|
|
317
|
+
const parts = [];
|
|
318
|
+
// Left border (vertical line) — always add for blockquotes
|
|
319
|
+
parts.push(`<w:pBdr><w:left w:val="single" w:sz="18" w:space="4" w:color="${css["border-color"] ? parseColorSafe(css["border-color"]) : "AAAAAA"}"/></w:pBdr>`);
|
|
320
|
+
// Indentation from CSS margin-left, or default
|
|
321
|
+
const indent = css["margin-left"] ? parseLengthTwips(css["margin-left"]) : undefined;
|
|
322
|
+
parts.push(`<w:ind w:left="${indent ?? 720}"/>`);
|
|
323
|
+
// Background shading
|
|
324
|
+
if (css["background-color"]) {
|
|
325
|
+
const bg = parseColorSafe(css["background-color"]);
|
|
326
|
+
if (bg)
|
|
327
|
+
parts.push(`<w:shd w:val="clear" w:color="auto" w:fill="${bg}"/>`);
|
|
328
|
+
}
|
|
329
|
+
// Spacing
|
|
330
|
+
const paraProps = cssToParaProps(css);
|
|
331
|
+
if (paraProps.spacing) {
|
|
332
|
+
const attrs = [];
|
|
333
|
+
if (paraProps.spacing.before)
|
|
334
|
+
attrs.push(`w:before="${paraProps.spacing.before}"`);
|
|
335
|
+
if (paraProps.spacing.after)
|
|
336
|
+
attrs.push(`w:after="${paraProps.spacing.after}"`);
|
|
337
|
+
if (attrs.length)
|
|
338
|
+
parts.push(`<w:spacing ${attrs.join(" ")}/>`);
|
|
339
|
+
}
|
|
340
|
+
return `<w:pPr>${parts.join("")}</w:pPr>`;
|
|
341
|
+
}
|
|
342
|
+
function convertList(node, ctx, baseIlvl) {
|
|
343
|
+
const numId = node.ordered ? "2" : "1";
|
|
344
|
+
const liRPr = ctx.cssElements["li"] ? buildRunPropsXml(cssToRunProps(ctx.cssElements["li"])) : "";
|
|
345
|
+
const parts = [];
|
|
346
|
+
for (const item of node.children) {
|
|
347
|
+
if (item.type !== "listItem")
|
|
348
|
+
continue;
|
|
349
|
+
const li = item;
|
|
350
|
+
for (const child of li.children) {
|
|
351
|
+
if (child.type === "paragraph") {
|
|
352
|
+
const runs = child.children.map(c => convertInline(c, ctx, liRPr)).join("");
|
|
353
|
+
parts.push(`<w:p><w:pPr><w:numPr><w:ilvl w:val="${baseIlvl}"/><w:numId w:val="${numId}"/></w:numPr></w:pPr>${runs}</w:p>`);
|
|
354
|
+
}
|
|
355
|
+
else if (child.type === "list") {
|
|
356
|
+
parts.push(convertList(child, ctx, baseIlvl + 1));
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
parts.push(convertBlock(child, ctx, baseIlvl));
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return parts.join("\n");
|
|
364
|
+
}
|
|
365
|
+
function convertCodeBlock(node, ctx) {
|
|
366
|
+
const preCss = ctx?.cssElements["pre"] ?? {};
|
|
367
|
+
const bg = preCss["background-color"] ? parseColorSafe(preCss["background-color"]) : undefined;
|
|
368
|
+
const preRPr = Object.keys(preCss).length > 0 ? buildRunPropsXml(cssToRunProps(preCss)) : "";
|
|
369
|
+
// Build pPr with Code style + optional background shading
|
|
370
|
+
let pPr = `<w:pPr><w:pStyle w:val="Code"/>`;
|
|
371
|
+
if (bg)
|
|
372
|
+
pPr += `<w:shd w:val="clear" w:color="auto" w:fill="${bg}"/>`;
|
|
373
|
+
pPr += `</w:pPr>`;
|
|
374
|
+
const lines = node.value.split("\n");
|
|
375
|
+
return lines.map(line => `<w:p>${pPr}<w:r><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New"/>${preRPr}</w:rPr><w:t xml:space="preserve">${esc(line)}</w:t></w:r></w:p>`).join("\n");
|
|
376
|
+
}
|
|
377
|
+
function convertTable(node, ctx) {
|
|
378
|
+
const rows = node.children.map(row => {
|
|
379
|
+
if (row.type !== "tableRow")
|
|
380
|
+
return "";
|
|
381
|
+
const tr = row;
|
|
382
|
+
const trPr = tr.isHeader ? "<w:trPr><w:tblHeader/></w:trPr>" : "";
|
|
383
|
+
const cells = tr.children.map(cell => {
|
|
384
|
+
if (cell.type !== "tableCell")
|
|
385
|
+
return "";
|
|
386
|
+
const tc = cell;
|
|
387
|
+
let tcPr = "<w:tcPr>";
|
|
388
|
+
if (tc.colspan && tc.colspan > 1)
|
|
389
|
+
tcPr += `<w:gridSpan w:val="${tc.colspan}"/>`;
|
|
390
|
+
tcPr += "</w:tcPr>";
|
|
391
|
+
const content = tc.children.length > 0
|
|
392
|
+
? tc.children.map(c => convertBlock(c, ctx, 0)).join("")
|
|
393
|
+
: "<w:p/>";
|
|
394
|
+
return `<w:tc>${tcPr}${content}</w:tc>`;
|
|
395
|
+
}).join("");
|
|
396
|
+
return `<w:tr>${trPr}${cells}</w:tr>`;
|
|
397
|
+
}).join("\n");
|
|
398
|
+
return `<w:tbl><w:tblPr><w:tblW w:w="0" w:type="auto"/><w:tblBorders><w:top w:val="single" w:sz="4" w:color="auto"/><w:left w:val="single" w:sz="4" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:color="auto"/><w:right w:val="single" w:sz="4" w:color="auto"/><w:insideH w:val="single" w:sz="4" w:color="auto"/><w:insideV w:val="single" w:sz="4" w:color="auto"/></w:tblBorders></w:tblPr>${rows}</w:tbl>`;
|
|
399
|
+
}
|
|
400
|
+
// ---------------------------------------------------------------------------
|
|
401
|
+
// Inline conversion
|
|
402
|
+
// ---------------------------------------------------------------------------
|
|
403
|
+
function convertInline(node, ctx, inheritedRPr = "") {
|
|
404
|
+
if (node.type === "text")
|
|
405
|
+
return convertText(node, ctx, inheritedRPr);
|
|
406
|
+
if (node.type === "break")
|
|
407
|
+
return `<w:r><w:br/></w:r>`;
|
|
408
|
+
if (node.type === "inlineCode") {
|
|
409
|
+
return `<w:r><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New"/>${inheritedRPr}</w:rPr><w:t>${esc(node.value)}</w:t></w:r>`;
|
|
410
|
+
}
|
|
411
|
+
if (node.type === "image") {
|
|
412
|
+
const img = node;
|
|
413
|
+
return `<w:r><w:t>[image: ${esc(img.alt ?? img.url)}]</w:t></w:r>`;
|
|
414
|
+
}
|
|
415
|
+
return "";
|
|
416
|
+
}
|
|
417
|
+
function convertText(node, ctx, inheritedRPr = "") {
|
|
418
|
+
const linkMark = node.marks?.find(m => m.type === "link");
|
|
419
|
+
const otherMarks = node.marks?.filter(m => m.type !== "link") ?? [];
|
|
420
|
+
// Build rPr: inherited CSS props first, then mark-specific overrides
|
|
421
|
+
const parts = [];
|
|
422
|
+
// Split inherited XML into individual elements for dedup
|
|
423
|
+
if (inheritedRPr) {
|
|
424
|
+
const elems = inheritedRPr.match(/<w:[^/]*\/>/g) ?? [];
|
|
425
|
+
parts.push(...elems);
|
|
426
|
+
}
|
|
427
|
+
for (const mark of otherMarks) {
|
|
428
|
+
switch (mark.type) {
|
|
429
|
+
case "strong":
|
|
430
|
+
parts.push("<w:b/>");
|
|
431
|
+
break;
|
|
432
|
+
case "emphasis":
|
|
433
|
+
parts.push("<w:i/>");
|
|
434
|
+
break;
|
|
435
|
+
case "underline":
|
|
436
|
+
parts.push(`<w:u w:val="${mark.attrs?.style ?? "single"}"/>`);
|
|
437
|
+
break;
|
|
438
|
+
case "strikethrough":
|
|
439
|
+
parts.push(mark.attrs?.double ? "<w:dstrike/>" : "<w:strike/>");
|
|
440
|
+
break;
|
|
441
|
+
case "superscript":
|
|
442
|
+
parts.push('<w:vertAlign w:val="superscript"/>');
|
|
443
|
+
break;
|
|
444
|
+
case "subscript":
|
|
445
|
+
parts.push('<w:vertAlign w:val="subscript"/>');
|
|
446
|
+
break;
|
|
447
|
+
case "highlight":
|
|
448
|
+
parts.push(`<w:highlight w:val="${mark.attrs?.color ?? "yellow"}"/>`);
|
|
449
|
+
break;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
// Deduplicate rPr elements (e.g. multiple <w:b/> from container + class CSS)
|
|
453
|
+
const seen = new Set();
|
|
454
|
+
const dedupedParts = [];
|
|
455
|
+
for (const p of parts) {
|
|
456
|
+
if (!seen.has(p)) {
|
|
457
|
+
seen.add(p);
|
|
458
|
+
dedupedParts.push(p);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
const rPr = dedupedParts.length > 0 ? `<w:rPr>${dedupedParts.join("")}</w:rPr>` : "";
|
|
462
|
+
if (linkMark) {
|
|
463
|
+
const url = String(linkMark.attrs?.url ?? "");
|
|
464
|
+
const rId = allocHyperlinkRId(ctx, url);
|
|
465
|
+
return `<w:hyperlink r:id="${rId}"><w:r>${rPr}<w:t xml:space="preserve">${esc(node.value)}</w:t></w:r></w:hyperlink>`;
|
|
466
|
+
}
|
|
467
|
+
return `<w:r>${rPr}<w:t xml:space="preserve">${esc(node.value)}</w:t></w:r>`;
|
|
468
|
+
}
|
|
469
|
+
// ---------------------------------------------------------------------------
|
|
470
|
+
// Paragraph property builder
|
|
471
|
+
// ---------------------------------------------------------------------------
|
|
472
|
+
function buildPPr(node, ctx) {
|
|
473
|
+
const parts = [];
|
|
474
|
+
// Classes → pStyle + generate CSS-based Word styles
|
|
475
|
+
const classes = node.classes;
|
|
476
|
+
if (classes && classes.length > 0) {
|
|
477
|
+
const styleId = classes[0]; // Primary class becomes the paragraph style
|
|
478
|
+
parts.push(`<w:pStyle w:val="${esc(styleId)}"/>`);
|
|
479
|
+
// Generate custom style from CSS rules (once per styleId)
|
|
480
|
+
for (const cls of classes) {
|
|
481
|
+
if (ctx.cssClasses[cls] && !ctx.generatedStyleIds.has(cls)) {
|
|
482
|
+
ctx.generatedStyleIds.add(cls);
|
|
483
|
+
const cssDecls = ctx.cssClasses[cls];
|
|
484
|
+
const runProps = cssToRunProps(cssDecls);
|
|
485
|
+
const paraProps = cssToParaProps(cssDecls);
|
|
486
|
+
ctx.customStyles.push(buildStyleElement(cls, cls, "paragraph", runProps, paraProps));
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
// Restore data.docx paragraph properties
|
|
491
|
+
const docx = node.data?.docx;
|
|
492
|
+
if (docx) {
|
|
493
|
+
if (docx.align)
|
|
494
|
+
parts.push(`<w:jc w:val="${docx.align}"/>`);
|
|
495
|
+
if (docx.spacing) {
|
|
496
|
+
const s = docx.spacing;
|
|
497
|
+
const attrs = [];
|
|
498
|
+
if (s.before)
|
|
499
|
+
attrs.push(`w:before="${s.before}"`);
|
|
500
|
+
if (s.after)
|
|
501
|
+
attrs.push(`w:after="${s.after}"`);
|
|
502
|
+
if (s.line)
|
|
503
|
+
attrs.push(`w:line="${s.line}"`);
|
|
504
|
+
if (attrs.length)
|
|
505
|
+
parts.push(`<w:spacing ${attrs.join(" ")}/>`);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
// Element CSS: apply styles from tag-based selectors (p, blockquote, etc.)
|
|
509
|
+
const elTag = udmTypeToHtmlTag(node.type, node);
|
|
510
|
+
if (elTag) {
|
|
511
|
+
ensureElementStyle(elTag, ctx);
|
|
512
|
+
// If no class style was set, use the element style
|
|
513
|
+
if (!classes || classes.length === 0) {
|
|
514
|
+
parts.unshift(`<w:pStyle w:val="_el_${esc(elTag)}"/>`);
|
|
515
|
+
}
|
|
516
|
+
// If class style was set, element CSS is already baked into the base —
|
|
517
|
+
// we could chain basedOn, but for simplicity element styles are standalone
|
|
518
|
+
}
|
|
519
|
+
return parts.length > 0 ? `<w:pPr>${parts.join("")}</w:pPr>` : "";
|
|
520
|
+
}
|
|
521
|
+
/** Map UDM type to the HTML tag name for CSS element selector lookup */
|
|
522
|
+
function udmTypeToHtmlTag(type, node) {
|
|
523
|
+
switch (type) {
|
|
524
|
+
case "paragraph": return "p";
|
|
525
|
+
case "heading": return `h${node.depth}`;
|
|
526
|
+
case "blockquote": return "blockquote";
|
|
527
|
+
case "list": return node.ordered ? "ol" : "ul";
|
|
528
|
+
case "listItem": return "li";
|
|
529
|
+
case "table": return "table";
|
|
530
|
+
case "tableRow": return "tr";
|
|
531
|
+
case "tableCell": return "td";
|
|
532
|
+
case "codeBlock": return "pre";
|
|
533
|
+
default: return null;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
/** Generate a Word style from element CSS if not already generated */
|
|
537
|
+
function ensureElementStyle(tag, ctx) {
|
|
538
|
+
const styleId = `_el_${tag}`;
|
|
539
|
+
if (ctx.generatedStyleIds.has(styleId))
|
|
540
|
+
return;
|
|
541
|
+
const cssDecls = ctx.cssElements[tag];
|
|
542
|
+
if (!cssDecls)
|
|
543
|
+
return;
|
|
544
|
+
ctx.generatedStyleIds.add(styleId);
|
|
545
|
+
const runProps = cssToRunProps(cssDecls);
|
|
546
|
+
const paraProps = cssToParaProps(cssDecls);
|
|
547
|
+
// For headings, base on the heading style; otherwise base on Normal
|
|
548
|
+
const basedOn = tag.match(/^h[1-6]$/) ? `Heading${tag[1]}` : undefined;
|
|
549
|
+
let styleXml = buildStyleElement(styleId, tag, "paragraph", runProps, paraProps);
|
|
550
|
+
if (basedOn) {
|
|
551
|
+
styleXml = styleXml.replace('<w:basedOn w:val="Normal"/>', `<w:basedOn w:val="${basedOn}"/>`);
|
|
552
|
+
}
|
|
553
|
+
ctx.customStyles.push(styleXml);
|
|
554
|
+
}
|
|
555
|
+
// ---------------------------------------------------------------------------
|
|
556
|
+
/** Strip data.docx and position from tree for the embedded snapshot (keeps classes, marks, structure) */
|
|
557
|
+
function stripDataForSnapshot(node) {
|
|
558
|
+
const obj = {};
|
|
559
|
+
for (const [k, v] of Object.entries(node)) {
|
|
560
|
+
if (k === "position" || k === "id")
|
|
561
|
+
continue;
|
|
562
|
+
if (k === "data") {
|
|
563
|
+
// Keep css and html data, strip docx (it's regenerated)
|
|
564
|
+
const d = v;
|
|
565
|
+
const kept = {};
|
|
566
|
+
if (d.css)
|
|
567
|
+
kept.css = d.css;
|
|
568
|
+
if (d.html)
|
|
569
|
+
kept.html = d.html;
|
|
570
|
+
if (Object.keys(kept).length > 0)
|
|
571
|
+
obj.data = kept;
|
|
572
|
+
continue;
|
|
573
|
+
}
|
|
574
|
+
if (k === "children" && Array.isArray(v)) {
|
|
575
|
+
obj.children = v.map(stripDataForSnapshot);
|
|
576
|
+
}
|
|
577
|
+
else {
|
|
578
|
+
obj[k] = v;
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
return obj;
|
|
582
|
+
}
|
|
583
|
+
function parseColorSafe(val) {
|
|
584
|
+
return parseColor(val) ?? "auto";
|
|
585
|
+
}
|
|
586
|
+
function esc(s) {
|
|
587
|
+
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
588
|
+
}
|
|
589
|
+
//# sourceMappingURL=writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":"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"}
|
package/dist/xml.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function parseXml(xml: string): Record<string, unknown>;
|
|
2
|
+
/** Parse XML preserving element order. Returns an array of { tagName: children[], :@: attrs } */
|
|
3
|
+
export declare function parseXmlOrdered(xml: string): any[];
|
|
4
|
+
export declare function buildXml(obj: Record<string, unknown>): string;
|
|
5
|
+
//# sourceMappingURL=xml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../src/xml.ts"],"names":[],"mappings":"AA2CA,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE7D;AAED,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,CAElD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAE7D"}
|