remark-docx 0.2.0 → 0.3.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 +63 -20
- package/lib/index.cjs +45 -465
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +46 -466
- package/lib/index.js.map +1 -1
- package/lib/mdast-to-docx.d.ts +6 -19
- package/lib/mdast.d.ts +2 -0
- package/lib/plugin.d.ts +8 -2
- package/lib/plugins/image/index.cjs +119 -0
- package/lib/plugins/image/index.cjs.map +1 -0
- package/lib/plugins/image/index.d.ts +17 -0
- package/lib/plugins/image/index.js +116 -0
- package/lib/plugins/image/index.js.map +1 -0
- package/lib/plugins/math/index.cjs +376 -0
- package/lib/plugins/math/index.cjs.map +1 -0
- package/lib/plugins/math/index.d.ts +5 -0
- package/lib/plugins/math/index.js +374 -0
- package/lib/plugins/math/index.js.map +1 -0
- package/lib/plugins/types.d.ts +15 -0
- package/lib/types.d.ts +3 -0
- package/lib/utils-40yKzkXT.js +19 -0
- package/lib/utils-40yKzkXT.js.map +1 -0
- package/lib/utils-EYEfXxbh.js +22 -0
- package/lib/utils-EYEfXxbh.js.map +1 -0
- package/package.json +30 -22
- package/lib/models/mdast.d.ts +0 -21
- /package/lib/{latex.d.ts → plugins/math/parser.d.ts} +0 -0
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import { MathRun, MathRadical, MathFraction, MathSum, MathSubScript, MathSuperScript, Math, Paragraph } from 'docx';
|
|
2
|
+
import { parseMath } from '@unified-latex/unified-latex-util-parse';
|
|
3
|
+
import { i as invariant } from '../../utils-40yKzkXT.js';
|
|
4
|
+
|
|
5
|
+
const hasSquareBrackets = (arg) => {
|
|
6
|
+
return !!arg && arg.openMark === "[" && arg.closeMark === "]";
|
|
7
|
+
};
|
|
8
|
+
const hasCurlyBrackets = (arg) => {
|
|
9
|
+
return !!arg && arg.openMark === "{" && arg.closeMark === "}";
|
|
10
|
+
};
|
|
11
|
+
const mapString = (s) => new MathRun(s);
|
|
12
|
+
const mapMacro = (n, runs) => {
|
|
13
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
14
|
+
switch (n.content) {
|
|
15
|
+
case "#":
|
|
16
|
+
return mapString("#");
|
|
17
|
+
case "$":
|
|
18
|
+
return mapString("$");
|
|
19
|
+
case "%":
|
|
20
|
+
return mapString("%");
|
|
21
|
+
case "&":
|
|
22
|
+
return mapString("&");
|
|
23
|
+
case "textasciitilde":
|
|
24
|
+
return mapString("~");
|
|
25
|
+
case "textasciicircum":
|
|
26
|
+
return mapString("^");
|
|
27
|
+
case "textbackslash":
|
|
28
|
+
return mapString("∖");
|
|
29
|
+
case "{":
|
|
30
|
+
return mapString("{");
|
|
31
|
+
case "}":
|
|
32
|
+
return mapString("}");
|
|
33
|
+
case "textbar":
|
|
34
|
+
return mapString("|");
|
|
35
|
+
case "textless":
|
|
36
|
+
return mapString("<");
|
|
37
|
+
case "textgreater":
|
|
38
|
+
return mapString(">");
|
|
39
|
+
case "neq":
|
|
40
|
+
return mapString("≠");
|
|
41
|
+
case "sim":
|
|
42
|
+
return mapString("∼");
|
|
43
|
+
case "simeq":
|
|
44
|
+
return mapString("≃");
|
|
45
|
+
case "approx":
|
|
46
|
+
return mapString("≈");
|
|
47
|
+
case "fallingdotseq":
|
|
48
|
+
return mapString("≒");
|
|
49
|
+
case "risingdotseq":
|
|
50
|
+
return mapString("≓");
|
|
51
|
+
case "equiv":
|
|
52
|
+
return mapString("≡");
|
|
53
|
+
case "geq":
|
|
54
|
+
return mapString("≥");
|
|
55
|
+
case "geqq":
|
|
56
|
+
return mapString("≧");
|
|
57
|
+
case "leq":
|
|
58
|
+
return mapString("≤");
|
|
59
|
+
case "leqq":
|
|
60
|
+
return mapString("≦");
|
|
61
|
+
case "gg":
|
|
62
|
+
return mapString("≫");
|
|
63
|
+
case "ll":
|
|
64
|
+
return mapString("≪");
|
|
65
|
+
case "times":
|
|
66
|
+
return mapString("×");
|
|
67
|
+
case "div":
|
|
68
|
+
return mapString("÷");
|
|
69
|
+
case "pm":
|
|
70
|
+
return mapString("±");
|
|
71
|
+
case "mp":
|
|
72
|
+
return mapString("∓");
|
|
73
|
+
case "oplus":
|
|
74
|
+
return mapString("⊕");
|
|
75
|
+
case "ominus":
|
|
76
|
+
return mapString("⊖");
|
|
77
|
+
case "otimes":
|
|
78
|
+
return mapString("⊗");
|
|
79
|
+
case "oslash":
|
|
80
|
+
return mapString("⊘");
|
|
81
|
+
case "circ":
|
|
82
|
+
return mapString("∘");
|
|
83
|
+
case "cdot":
|
|
84
|
+
return mapString("⋅");
|
|
85
|
+
case "bullet":
|
|
86
|
+
return mapString("∙");
|
|
87
|
+
case "ltimes":
|
|
88
|
+
return mapString("⋉");
|
|
89
|
+
case "rtimes":
|
|
90
|
+
return mapString("⋊");
|
|
91
|
+
case "in":
|
|
92
|
+
return mapString("∈");
|
|
93
|
+
case "ni":
|
|
94
|
+
return mapString("∋");
|
|
95
|
+
case "notin":
|
|
96
|
+
return mapString("∉");
|
|
97
|
+
case "subset":
|
|
98
|
+
return mapString("⊂");
|
|
99
|
+
case "supset":
|
|
100
|
+
return mapString("⊃");
|
|
101
|
+
case "subseteq":
|
|
102
|
+
return mapString("⊆");
|
|
103
|
+
case "supseteq":
|
|
104
|
+
return mapString("⊇");
|
|
105
|
+
case "nsubseteq":
|
|
106
|
+
return mapString("⊈");
|
|
107
|
+
case "nsupseteq":
|
|
108
|
+
return mapString("⊉");
|
|
109
|
+
case "subsetneq":
|
|
110
|
+
return mapString("⊊");
|
|
111
|
+
case "supsetneq":
|
|
112
|
+
return mapString("⊋");
|
|
113
|
+
case "cap":
|
|
114
|
+
return mapString("∩");
|
|
115
|
+
case "cup":
|
|
116
|
+
return mapString("∪");
|
|
117
|
+
case "emptyset":
|
|
118
|
+
return mapString("∅");
|
|
119
|
+
case "infty":
|
|
120
|
+
return mapString("∞");
|
|
121
|
+
case "partial":
|
|
122
|
+
return mapString("∂");
|
|
123
|
+
case "aleph":
|
|
124
|
+
return mapString("ℵ");
|
|
125
|
+
case "hbar":
|
|
126
|
+
return mapString("ℏ");
|
|
127
|
+
case "wp":
|
|
128
|
+
return mapString("℘");
|
|
129
|
+
case "Re":
|
|
130
|
+
return mapString("ℜ");
|
|
131
|
+
case "Im":
|
|
132
|
+
return mapString("ℑ");
|
|
133
|
+
case "alpha":
|
|
134
|
+
return mapString("α");
|
|
135
|
+
case "beta":
|
|
136
|
+
return mapString("β");
|
|
137
|
+
case "gamma":
|
|
138
|
+
return mapString("γ");
|
|
139
|
+
case "delta":
|
|
140
|
+
return mapString("δ");
|
|
141
|
+
case "epsilon":
|
|
142
|
+
return mapString("ϵ");
|
|
143
|
+
case "zeta":
|
|
144
|
+
return mapString("ζ");
|
|
145
|
+
case "eta":
|
|
146
|
+
return mapString("η");
|
|
147
|
+
case "theta":
|
|
148
|
+
return mapString("θ");
|
|
149
|
+
case "iota":
|
|
150
|
+
return mapString("ι");
|
|
151
|
+
case "kappa":
|
|
152
|
+
return mapString("κ");
|
|
153
|
+
case "lambda":
|
|
154
|
+
return mapString("λ");
|
|
155
|
+
case "eta":
|
|
156
|
+
return mapString("η");
|
|
157
|
+
case "mu":
|
|
158
|
+
return mapString("μ");
|
|
159
|
+
case "nu":
|
|
160
|
+
return mapString("ν");
|
|
161
|
+
case "xi":
|
|
162
|
+
return mapString("ξ");
|
|
163
|
+
case "pi":
|
|
164
|
+
return mapString("π");
|
|
165
|
+
case "rho":
|
|
166
|
+
return mapString("ρ");
|
|
167
|
+
case "sigma":
|
|
168
|
+
return mapString("σ");
|
|
169
|
+
case "tau":
|
|
170
|
+
return mapString("τ");
|
|
171
|
+
case "upsilon":
|
|
172
|
+
return mapString("υ");
|
|
173
|
+
case "phi":
|
|
174
|
+
return mapString("ϕ");
|
|
175
|
+
case "chi":
|
|
176
|
+
return mapString("χ");
|
|
177
|
+
case "psi":
|
|
178
|
+
return mapString("ψ");
|
|
179
|
+
case "omega":
|
|
180
|
+
return mapString("ω");
|
|
181
|
+
case "varepsilon":
|
|
182
|
+
return mapString("ε");
|
|
183
|
+
case "vartheta":
|
|
184
|
+
return mapString("ϑ");
|
|
185
|
+
case "varrho":
|
|
186
|
+
return mapString("ϱ");
|
|
187
|
+
case "varsigma":
|
|
188
|
+
return mapString("ς");
|
|
189
|
+
case "varphi":
|
|
190
|
+
return mapString("φ");
|
|
191
|
+
case "Gamma":
|
|
192
|
+
return mapString("Γ");
|
|
193
|
+
case "Delta":
|
|
194
|
+
return mapString("Δ");
|
|
195
|
+
case "Theta":
|
|
196
|
+
return mapString("Θ");
|
|
197
|
+
case "Lambda":
|
|
198
|
+
return mapString("Λ");
|
|
199
|
+
case "Xi":
|
|
200
|
+
return mapString("Ξ");
|
|
201
|
+
case "Pi":
|
|
202
|
+
return mapString("Π");
|
|
203
|
+
case "Sigma":
|
|
204
|
+
return mapString("Σ");
|
|
205
|
+
case "Upsilon":
|
|
206
|
+
return mapString("Υ");
|
|
207
|
+
case "Phi":
|
|
208
|
+
return mapString("Φ");
|
|
209
|
+
case "Psi":
|
|
210
|
+
return mapString("Ψ");
|
|
211
|
+
case "Omega":
|
|
212
|
+
return mapString("Ω");
|
|
213
|
+
case "newline":
|
|
214
|
+
case "\\":
|
|
215
|
+
// line break
|
|
216
|
+
return false;
|
|
217
|
+
case "^": {
|
|
218
|
+
const prev = runs.pop();
|
|
219
|
+
if (!prev)
|
|
220
|
+
break;
|
|
221
|
+
return new MathSuperScript({
|
|
222
|
+
children: [prev],
|
|
223
|
+
superScript: mapGroup((_c = (_b = (_a = n.args) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.content) !== null && _c !== void 0 ? _c : []),
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
case "_": {
|
|
227
|
+
const prev = runs.pop();
|
|
228
|
+
if (!prev)
|
|
229
|
+
break;
|
|
230
|
+
return new MathSubScript({
|
|
231
|
+
children: [prev],
|
|
232
|
+
subScript: mapGroup((_f = (_e = (_d = n.args) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.content) !== null && _f !== void 0 ? _f : []),
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
case "hat":
|
|
236
|
+
// TODO: implement
|
|
237
|
+
break;
|
|
238
|
+
case "widehat":
|
|
239
|
+
// TODO: implement
|
|
240
|
+
break;
|
|
241
|
+
case "sum": {
|
|
242
|
+
// TODO: support superscript and subscript
|
|
243
|
+
return new MathSum({
|
|
244
|
+
children: [],
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
case "int":
|
|
248
|
+
return mapString("∫");
|
|
249
|
+
case "frac":
|
|
250
|
+
case "tfrac":
|
|
251
|
+
case "dfrac": {
|
|
252
|
+
const args = (_g = n.args) !== null && _g !== void 0 ? _g : [];
|
|
253
|
+
if (args.length === 2 &&
|
|
254
|
+
hasCurlyBrackets(args[0]) &&
|
|
255
|
+
hasCurlyBrackets(args[1])) {
|
|
256
|
+
return new MathFraction({
|
|
257
|
+
numerator: mapGroup(args[0].content),
|
|
258
|
+
denominator: mapGroup(args[1].content),
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
case "sqrt": {
|
|
264
|
+
const args = (_h = n.args) !== null && _h !== void 0 ? _h : [];
|
|
265
|
+
if (args.length === 1 && hasCurlyBrackets(args[0])) {
|
|
266
|
+
return new MathRadical({
|
|
267
|
+
children: mapGroup(args[0].content),
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
if (args.length === 2 &&
|
|
271
|
+
hasSquareBrackets(args[0]) &&
|
|
272
|
+
hasCurlyBrackets(args[1])) {
|
|
273
|
+
return new MathRadical({
|
|
274
|
+
children: mapGroup(args[1].content),
|
|
275
|
+
degree: mapGroup(args[0].content),
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return mapString(n.content);
|
|
282
|
+
};
|
|
283
|
+
const mapGroup = (nodes) => {
|
|
284
|
+
const group = [];
|
|
285
|
+
for (const c of nodes) {
|
|
286
|
+
group.push(...(mapNode(c, group) || []));
|
|
287
|
+
}
|
|
288
|
+
return group;
|
|
289
|
+
};
|
|
290
|
+
const mapNode = (n, runs) => {
|
|
291
|
+
switch (n.type) {
|
|
292
|
+
case "root":
|
|
293
|
+
break;
|
|
294
|
+
case "string":
|
|
295
|
+
return [mapString(n.content)];
|
|
296
|
+
case "whitespace":
|
|
297
|
+
break;
|
|
298
|
+
case "parbreak":
|
|
299
|
+
break;
|
|
300
|
+
case "comment":
|
|
301
|
+
break;
|
|
302
|
+
case "macro":
|
|
303
|
+
const run = mapMacro(n, runs);
|
|
304
|
+
if (!run) {
|
|
305
|
+
// line break
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
return [run];
|
|
310
|
+
}
|
|
311
|
+
case "environment":
|
|
312
|
+
case "mathenv":
|
|
313
|
+
break;
|
|
314
|
+
case "verbatim":
|
|
315
|
+
break;
|
|
316
|
+
case "inlinemath":
|
|
317
|
+
break;
|
|
318
|
+
case "displaymath":
|
|
319
|
+
break;
|
|
320
|
+
case "group":
|
|
321
|
+
return mapGroup(n.content);
|
|
322
|
+
case "verb":
|
|
323
|
+
break;
|
|
324
|
+
default:
|
|
325
|
+
invariant(false, "unreachable");
|
|
326
|
+
}
|
|
327
|
+
return [];
|
|
328
|
+
};
|
|
329
|
+
/**
|
|
330
|
+
* @internal
|
|
331
|
+
*/
|
|
332
|
+
const parseLatex = (value) => {
|
|
333
|
+
const parsed = parseMath(value);
|
|
334
|
+
const paragraphs = [[]];
|
|
335
|
+
let runs = paragraphs[0];
|
|
336
|
+
for (const n of parsed) {
|
|
337
|
+
const res = mapNode(n, runs);
|
|
338
|
+
if (!res) {
|
|
339
|
+
// line break
|
|
340
|
+
paragraphs.push((runs = []));
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
runs.push(...res);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return paragraphs;
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* A plugin to render latex inside "math" and "inlineMath" nodes
|
|
351
|
+
*/
|
|
352
|
+
const latexPlugin = () => {
|
|
353
|
+
return async () => {
|
|
354
|
+
return {
|
|
355
|
+
math: ({ value }) => {
|
|
356
|
+
return parseLatex(value).map((runs) => new Paragraph({
|
|
357
|
+
children: [
|
|
358
|
+
new Math({
|
|
359
|
+
children: runs,
|
|
360
|
+
}),
|
|
361
|
+
],
|
|
362
|
+
}));
|
|
363
|
+
},
|
|
364
|
+
inlineMath: ({ value }) => {
|
|
365
|
+
return new Math({
|
|
366
|
+
children: parseLatex(value).flatMap((runs) => runs),
|
|
367
|
+
});
|
|
368
|
+
},
|
|
369
|
+
};
|
|
370
|
+
};
|
|
371
|
+
};
|
|
372
|
+
|
|
373
|
+
export { latexPlugin };
|
|
374
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/plugins/math/parser.ts","../../../src/plugins/math/index.ts"],"sourcesContent":["import {\n MathRun,\n MathSuperScript,\n MathSubScript,\n MathRadical,\n MathFraction,\n MathSum,\n} from \"docx\";\nimport { parseMath } from \"@unified-latex/unified-latex-util-parse\";\nimport type * as latex from \"@unified-latex/unified-latex-types\";\nimport { invariant } from \"../../utils\";\n\nconst hasSquareBrackets = (\n arg: latex.Argument | undefined,\n): arg is latex.Argument => {\n return !!arg && arg.openMark === \"[\" && arg.closeMark === \"]\";\n};\nconst hasCurlyBrackets = (\n arg: latex.Argument | undefined,\n): arg is latex.Argument => {\n return !!arg && arg.openMark === \"{\" && arg.closeMark === \"}\";\n};\n\nconst mapString = (s: string): MathRun => new MathRun(s);\n\nconst mapMacro = (n: latex.Macro, runs: MathRun[]): MathRun | false => {\n switch (n.content) {\n case \"#\":\n return mapString(\"#\");\n case \"$\":\n return mapString(\"$\");\n case \"%\":\n return mapString(\"%\");\n case \"&\":\n return mapString(\"&\");\n case \"textasciitilde\":\n return mapString(\"~\");\n case \"textasciicircum\":\n return mapString(\"^\");\n case \"textbackslash\":\n return mapString(\"∖\");\n case \"{\":\n return mapString(\"{\");\n case \"}\":\n return mapString(\"}\");\n case \"textbar\":\n return mapString(\"|\");\n case \"textless\":\n return mapString(\"<\");\n case \"textgreater\":\n return mapString(\">\");\n case \"neq\":\n return mapString(\"≠\");\n case \"sim\":\n return mapString(\"∼\");\n case \"simeq\":\n return mapString(\"≃\");\n case \"approx\":\n return mapString(\"≈\");\n case \"fallingdotseq\":\n return mapString(\"≒\");\n case \"risingdotseq\":\n return mapString(\"≓\");\n case \"equiv\":\n return mapString(\"≡\");\n case \"geq\":\n return mapString(\"≥\");\n case \"geqq\":\n return mapString(\"≧\");\n case \"leq\":\n return mapString(\"≤\");\n case \"leqq\":\n return mapString(\"≦\");\n case \"gg\":\n return mapString(\"≫\");\n case \"ll\":\n return mapString(\"≪\");\n case \"times\":\n return mapString(\"×\");\n case \"div\":\n return mapString(\"÷\");\n case \"pm\":\n return mapString(\"±\");\n case \"mp\":\n return mapString(\"∓\");\n case \"oplus\":\n return mapString(\"⊕\");\n case \"ominus\":\n return mapString(\"⊖\");\n case \"otimes\":\n return mapString(\"⊗\");\n case \"oslash\":\n return mapString(\"⊘\");\n case \"circ\":\n return mapString(\"∘\");\n case \"cdot\":\n return mapString(\"⋅\");\n case \"bullet\":\n return mapString(\"∙\");\n case \"ltimes\":\n return mapString(\"⋉\");\n case \"rtimes\":\n return mapString(\"⋊\");\n case \"in\":\n return mapString(\"∈\");\n case \"ni\":\n return mapString(\"∋\");\n case \"notin\":\n return mapString(\"∉\");\n case \"subset\":\n return mapString(\"⊂\");\n case \"supset\":\n return mapString(\"⊃\");\n case \"subseteq\":\n return mapString(\"⊆\");\n case \"supseteq\":\n return mapString(\"⊇\");\n case \"nsubseteq\":\n return mapString(\"⊈\");\n case \"nsupseteq\":\n return mapString(\"⊉\");\n case \"subsetneq\":\n return mapString(\"⊊\");\n case \"supsetneq\":\n return mapString(\"⊋\");\n case \"cap\":\n return mapString(\"∩\");\n case \"cup\":\n return mapString(\"∪\");\n case \"emptyset\":\n return mapString(\"∅\");\n case \"infty\":\n return mapString(\"∞\");\n case \"partial\":\n return mapString(\"∂\");\n case \"aleph\":\n return mapString(\"ℵ\");\n case \"hbar\":\n return mapString(\"ℏ\");\n case \"wp\":\n return mapString(\"℘\");\n case \"Re\":\n return mapString(\"ℜ\");\n case \"Im\":\n return mapString(\"ℑ\");\n case \"alpha\":\n return mapString(\"α\");\n case \"beta\":\n return mapString(\"β\");\n case \"gamma\":\n return mapString(\"γ\");\n case \"delta\":\n return mapString(\"δ\");\n case \"epsilon\":\n return mapString(\"ϵ\");\n case \"zeta\":\n return mapString(\"ζ\");\n case \"eta\":\n return mapString(\"η\");\n case \"theta\":\n return mapString(\"θ\");\n case \"iota\":\n return mapString(\"ι\");\n case \"kappa\":\n return mapString(\"κ\");\n case \"lambda\":\n return mapString(\"λ\");\n case \"eta\":\n return mapString(\"η\");\n case \"mu\":\n return mapString(\"μ\");\n case \"nu\":\n return mapString(\"ν\");\n case \"xi\":\n return mapString(\"ξ\");\n case \"pi\":\n return mapString(\"π\");\n case \"rho\":\n return mapString(\"ρ\");\n case \"sigma\":\n return mapString(\"σ\");\n case \"tau\":\n return mapString(\"τ\");\n case \"upsilon\":\n return mapString(\"υ\");\n case \"phi\":\n return mapString(\"ϕ\");\n case \"chi\":\n return mapString(\"χ\");\n case \"psi\":\n return mapString(\"ψ\");\n case \"omega\":\n return mapString(\"ω\");\n case \"varepsilon\":\n return mapString(\"ε\");\n case \"vartheta\":\n return mapString(\"ϑ\");\n case \"varrho\":\n return mapString(\"ϱ\");\n case \"varsigma\":\n return mapString(\"ς\");\n case \"varphi\":\n return mapString(\"φ\");\n case \"Gamma\":\n return mapString(\"Γ\");\n case \"Delta\":\n return mapString(\"Δ\");\n case \"Theta\":\n return mapString(\"Θ\");\n case \"Lambda\":\n return mapString(\"Λ\");\n case \"Xi\":\n return mapString(\"Ξ\");\n case \"Pi\":\n return mapString(\"Π\");\n case \"Sigma\":\n return mapString(\"Σ\");\n case \"Upsilon\":\n return mapString(\"Υ\");\n case \"Phi\":\n return mapString(\"Φ\");\n case \"Psi\":\n return mapString(\"Ψ\");\n case \"Omega\":\n return mapString(\"Ω\");\n case \"newline\":\n case \"\\\\\":\n // line break\n return false;\n case \"^\": {\n const prev = runs.pop();\n if (!prev) break;\n return new MathSuperScript({\n children: [prev],\n superScript: mapGroup(n.args?.[0]?.content ?? []),\n });\n }\n case \"_\": {\n const prev = runs.pop();\n if (!prev) break;\n return new MathSubScript({\n children: [prev],\n subScript: mapGroup(n.args?.[0]?.content ?? []),\n });\n }\n case \"hat\":\n // TODO: implement\n break;\n case \"widehat\":\n // TODO: implement\n break;\n case \"sum\": {\n // TODO: support superscript and subscript\n return new MathSum({\n children: [],\n });\n }\n case \"int\":\n return mapString(\"∫\");\n case \"frac\":\n case \"tfrac\":\n case \"dfrac\": {\n const args = n.args ?? [];\n if (\n args.length === 2 &&\n hasCurlyBrackets(args[0]) &&\n hasCurlyBrackets(args[1])\n ) {\n return new MathFraction({\n numerator: mapGroup(args[0].content),\n denominator: mapGroup(args[1].content),\n });\n }\n break;\n }\n case \"sqrt\": {\n const args = n.args ?? [];\n if (args.length === 1 && hasCurlyBrackets(args[0])) {\n return new MathRadical({\n children: mapGroup(args[0].content),\n });\n }\n if (\n args.length === 2 &&\n hasSquareBrackets(args[0]) &&\n hasCurlyBrackets(args[1])\n ) {\n return new MathRadical({\n children: mapGroup(args[1].content),\n degree: mapGroup(args[0].content),\n });\n }\n break;\n }\n default:\n break;\n }\n return mapString(n.content);\n};\n\nconst mapGroup = (nodes: latex.Node[]): MathRun[] => {\n const group: MathRun[] = [];\n for (const c of nodes) {\n group.push(...(mapNode(c, group) || []));\n }\n return group;\n};\n\nconst mapNode = (n: latex.Node, runs: MathRun[]): MathRun[] | false => {\n switch (n.type) {\n case \"root\":\n break;\n case \"string\":\n return [mapString(n.content)];\n case \"whitespace\":\n break;\n case \"parbreak\":\n break;\n case \"comment\":\n break;\n case \"macro\":\n const run = mapMacro(n, runs);\n if (!run) {\n // line break\n return false;\n } else {\n return [run];\n }\n case \"environment\":\n case \"mathenv\":\n break;\n case \"verbatim\":\n break;\n case \"inlinemath\":\n break;\n case \"displaymath\":\n break;\n case \"group\":\n return mapGroup(n.content);\n case \"verb\":\n break;\n default:\n invariant(false, \"unreachable\");\n }\n\n return [];\n};\n\n/**\n * @internal\n */\nexport const parseLatex = (value: string): MathRun[][] => {\n const parsed = parseMath(value);\n const paragraphs: MathRun[][] = [[]];\n let runs: MathRun[] = paragraphs[0]!;\n for (const n of parsed) {\n const res = mapNode(n, runs);\n if (!res) {\n // line break\n paragraphs.push((runs = []));\n } else {\n runs.push(...res);\n }\n }\n return paragraphs;\n};\n","import type { RemarkDocxPlugin } from \"../types\";\nimport { Math, Paragraph } from \"docx\";\nimport { parseLatex } from \"./parser\";\n\n/**\n * A plugin to render latex inside \"math\" and \"inlineMath\" nodes\n */\nexport const latexPlugin = (): RemarkDocxPlugin => {\n return async () => {\n return {\n math: ({ value }) => {\n return parseLatex(value).map(\n (runs) =>\n new Paragraph({\n children: [\n new Math({\n children: runs,\n }),\n ],\n }),\n );\n },\n inlineMath: ({ value }) => {\n return new Math({\n children: parseLatex(value).flatMap((runs) => runs),\n });\n },\n };\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DocxContent } from "../types";
|
|
2
|
+
import type * as mdast from "../mdast";
|
|
3
|
+
import type { GetDefinition } from "mdast-util-definitions";
|
|
4
|
+
type KnownNodeType = mdast.RootContent["type"];
|
|
5
|
+
type MdastNode<T extends string> = T extends KnownNodeType ? Extract<mdast.RootContent, {
|
|
6
|
+
type: T;
|
|
7
|
+
}> : unknown;
|
|
8
|
+
export type NodeOverrides = {
|
|
9
|
+
[K in KnownNodeType]?: (node: MdastNode<K>, next: (node: any) => DocxContent[]) => DocxContent | DocxContent[] | null;
|
|
10
|
+
};
|
|
11
|
+
export type RemarkDocxPlugin = (ctx: Readonly<{
|
|
12
|
+
root: mdast.Root;
|
|
13
|
+
definition: GetDefinition;
|
|
14
|
+
}>) => Promise<NodeOverrides>;
|
|
15
|
+
export {};
|
package/lib/types.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal
|
|
3
|
+
*/
|
|
4
|
+
function invariant(cond, message) {
|
|
5
|
+
throw new Error(message);
|
|
6
|
+
}
|
|
7
|
+
const alreadyWarned = {};
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
function warnOnce(message, cond = false) {
|
|
12
|
+
if (!cond && !alreadyWarned[message]) {
|
|
13
|
+
alreadyWarned[message] = true;
|
|
14
|
+
console.warn(message);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { invariant as i, warnOnce as w };
|
|
19
|
+
//# sourceMappingURL=utils-40yKzkXT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-40yKzkXT.js","sources":["../src/utils.ts"],"sourcesContent":["/**\n * @internal\n */\nexport function invariant(cond: any, message: string): asserts cond {\n if (!cond) throw new Error(message);\n}\n\nconst alreadyWarned: { [message: string]: boolean } = {};\n\n/**\n * @internal\n */\nexport function warnOnce(message: string, cond: boolean = false): void {\n if (!cond && !alreadyWarned[message]) {\n alreadyWarned[message] = true;\n console.warn(message);\n }\n}\n"],"names":[],"mappings":"AAAA;;AAEG;AACG,SAAU,SAAS,CAAC,IAAS,EAAE,OAAe,EAAA;AAClD,IAAW,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;AACrC;AAEA,MAAM,aAAa,GAAmC,EAAE;AAExD;;AAEG;SACa,QAAQ,CAAC,OAAe,EAAE,OAAgB,KAAK,EAAA;IAC7D,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;AACpC,QAAA,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI;AAC7B,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;IACvB;AACF;;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
function invariant(cond, message) {
|
|
7
|
+
throw new Error(message);
|
|
8
|
+
}
|
|
9
|
+
const alreadyWarned = {};
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
function warnOnce(message, cond = false) {
|
|
14
|
+
if (!cond && !alreadyWarned[message]) {
|
|
15
|
+
alreadyWarned[message] = true;
|
|
16
|
+
console.warn(message);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
exports.invariant = invariant;
|
|
21
|
+
exports.warnOnce = warnOnce;
|
|
22
|
+
//# sourceMappingURL=utils-EYEfXxbh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-EYEfXxbh.js","sources":["../src/utils.ts"],"sourcesContent":["/**\n * @internal\n */\nexport function invariant(cond: any, message: string): asserts cond {\n if (!cond) throw new Error(message);\n}\n\nconst alreadyWarned: { [message: string]: boolean } = {};\n\n/**\n * @internal\n */\nexport function warnOnce(message: string, cond: boolean = false): void {\n if (!cond && !alreadyWarned[message]) {\n alreadyWarned[message] = true;\n console.warn(message);\n }\n}\n"],"names":[],"mappings":";;AAAA;;AAEG;AACG,SAAU,SAAS,CAAC,IAAS,EAAE,OAAe,EAAA;AAClD,IAAW,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;AACrC;AAEA,MAAM,aAAa,GAAmC,EAAE;AAExD;;AAEG;SACa,QAAQ,CAAC,OAAe,EAAE,OAAgB,KAAK,EAAA;IAC7D,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;AACpC,QAAA,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI;AAC7B,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;IACvB;AACF;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "remark-docx",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "remark plugin to compile markdown to docx (Microsoft Word, Office Open XML).",
|
|
5
5
|
"main": "lib/index.cjs",
|
|
6
6
|
"module": "lib/index.js",
|
|
@@ -12,6 +12,11 @@
|
|
|
12
12
|
"types": "./lib/index.d.ts",
|
|
13
13
|
"require": "./lib/index.cjs",
|
|
14
14
|
"default": "./lib/index.js"
|
|
15
|
+
},
|
|
16
|
+
"./plugins/*": {
|
|
17
|
+
"types": "./lib/plugins/*/index.d.ts",
|
|
18
|
+
"require": "./lib/plugins/*/index.cjs",
|
|
19
|
+
"default": "./lib/plugins/*/index.js"
|
|
15
20
|
}
|
|
16
21
|
},
|
|
17
22
|
"files": [
|
|
@@ -29,38 +34,41 @@
|
|
|
29
34
|
},
|
|
30
35
|
"dependencies": {
|
|
31
36
|
"@unified-latex/unified-latex-util-parse": "1.8.3",
|
|
32
|
-
"docx": "
|
|
37
|
+
"docx": "9.5.1",
|
|
38
|
+
"image-size": "^2.0.2",
|
|
39
|
+
"mdast-util-definitions": "^6.0.0",
|
|
33
40
|
"unist-util-visit": "^5.0.0"
|
|
34
41
|
},
|
|
35
42
|
"devDependencies": {
|
|
36
|
-
"@
|
|
37
|
-
"@
|
|
38
|
-
"@
|
|
43
|
+
"@napi-rs/canvas": "^0.1.84",
|
|
44
|
+
"@prettier/plugin-xml": "^3.4.2",
|
|
45
|
+
"@rollup/plugin-typescript": "^12.0.0",
|
|
46
|
+
"@storybook/react-vite": "^10.1.4",
|
|
39
47
|
"@types/adm-zip": "^0.5.0",
|
|
40
|
-
"@types/mdast": "^
|
|
48
|
+
"@types/mdast": "^4.0.3",
|
|
41
49
|
"@types/node": "^24.0.10",
|
|
42
|
-
"@types/unist": "^
|
|
50
|
+
"@types/unist": "^3.0.0",
|
|
43
51
|
"adm-zip": "^0.5.9",
|
|
44
52
|
"file-saver": "^2.0.5",
|
|
45
|
-
"prettier": "^3.
|
|
46
|
-
"react": "^
|
|
47
|
-
"react-dom": "^
|
|
48
|
-
"react-is": "^
|
|
49
|
-
"remark-
|
|
50
|
-
"remark-
|
|
51
|
-
"remark-
|
|
52
|
-
"remark-
|
|
53
|
-
"remark-
|
|
54
|
-
"rimraf": "^6.
|
|
55
|
-
"rollup": "^4.
|
|
56
|
-
"storybook": "^
|
|
53
|
+
"prettier": "^3.7.4",
|
|
54
|
+
"react": "^19.2.1",
|
|
55
|
+
"react-dom": "^19.2.1",
|
|
56
|
+
"react-is": "^19.2.1",
|
|
57
|
+
"remark-frontmatter": "^5.0.0",
|
|
58
|
+
"remark-gfm": "^4.0.0",
|
|
59
|
+
"remark-math": "^6.0.0",
|
|
60
|
+
"remark-parse": "^11.0.0",
|
|
61
|
+
"remark-stringify": "^11.0.0",
|
|
62
|
+
"rimraf": "^6.1.2",
|
|
63
|
+
"rollup": "^4.53.3",
|
|
64
|
+
"storybook": "^10.1.4",
|
|
57
65
|
"tslib": "^2.8.1",
|
|
58
66
|
"typedoc": "^0.28.14",
|
|
59
67
|
"typedoc-plugin-markdown": "^4.9.0",
|
|
60
68
|
"typescript": "^5.9.3",
|
|
61
|
-
"unified": "^
|
|
62
|
-
"vite": "^7.
|
|
63
|
-
"vitest": "^4.0.
|
|
69
|
+
"unified": "^11.0.4",
|
|
70
|
+
"vite": "^7.2.6",
|
|
71
|
+
"vitest": "^4.0.15"
|
|
64
72
|
},
|
|
65
73
|
"repository": {
|
|
66
74
|
"type": "git",
|
package/lib/models/mdast.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { Parent, Literal, Root, Paragraph, Heading, ThematicBreak, Blockquote, List, ListItem, Table, TableRow, TableCell, HTML, Code, YAML, Definition, FootnoteDefinition, Text, Emphasis, Strong, Delete, InlineCode, Break, Link, Image, LinkReference, ImageReference, Footnote, FootnoteReference, Resource, Association, Reference, Alternative } from "mdast";
|
|
2
|
-
export type { Parent, Literal, Root, Paragraph, Heading, ThematicBreak, Blockquote, List, ListItem, Table, TableRow, TableCell, HTML, Code, YAML, Definition, FootnoteDefinition, Text, Emphasis, Strong, Delete, InlineCode, Break, Link, Image, LinkReference, ImageReference, Footnote, FootnoteReference, Resource, Association, Reference, Alternative, };
|
|
3
|
-
export interface TOML extends Literal {
|
|
4
|
-
type: "toml";
|
|
5
|
-
}
|
|
6
|
-
export interface Math extends Literal {
|
|
7
|
-
type: "math";
|
|
8
|
-
}
|
|
9
|
-
export interface InlineMath extends Literal {
|
|
10
|
-
type: "inlineMath";
|
|
11
|
-
}
|
|
12
|
-
export type Content = TopLevelContent | ListContent | TableContent | RowContent | PhrasingContent;
|
|
13
|
-
export type TopLevelContent = BlockContent | FrontmatterContent | DefinitionContent;
|
|
14
|
-
export type BlockContent = Paragraph | Heading | ThematicBreak | Blockquote | List | Table | HTML | Code | Math;
|
|
15
|
-
export type FrontmatterContent = YAML | TOML;
|
|
16
|
-
export type DefinitionContent = Definition | FootnoteDefinition;
|
|
17
|
-
export type ListContent = ListItem;
|
|
18
|
-
export type TableContent = TableRow;
|
|
19
|
-
export type RowContent = TableCell;
|
|
20
|
-
export type PhrasingContent = StaticPhrasingContent | Link | LinkReference;
|
|
21
|
-
export type StaticPhrasingContent = Text | Emphasis | Strong | Delete | HTML | InlineCode | Break | Image | ImageReference | Footnote | FootnoteReference | InlineMath;
|
|
File without changes
|