remark-docx 0.0.7 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -3
- package/lib/index.js +443 -190
- package/lib/index.js.map +1 -0
- package/lib/index.mjs +443 -190
- package/lib/index.mjs.map +1 -0
- package/lib/latex.d.ts +2 -0
- package/lib/transformer.d.ts +2 -2
- package/lib/utils.d.ts +2 -0
- package/package.json +29 -24
package/lib/index.mjs
CHANGED
|
@@ -1,74 +1,361 @@
|
|
|
1
|
+
import { __awaiter } from 'tslib';
|
|
1
2
|
import { visit } from 'unist-util-visit';
|
|
2
3
|
import * as docx from 'docx';
|
|
3
4
|
import { convertInchesToTwip, Packer } from 'docx';
|
|
5
|
+
import { parseMath } from '@unified-latex/unified-latex-util-parse';
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
12
|
-
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
13
|
-
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
14
|
-
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
15
|
-
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
16
|
-
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
17
|
-
PERFORMANCE OF THIS SOFTWARE.
|
|
18
|
-
***************************************************************************** */
|
|
19
|
-
|
|
20
|
-
var __assign = function() {
|
|
21
|
-
__assign = Object.assign || function __assign(t) {
|
|
22
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
23
|
-
s = arguments[i];
|
|
24
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
25
|
-
}
|
|
26
|
-
return t;
|
|
27
|
-
};
|
|
28
|
-
return __assign.apply(this, arguments);
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
function __awaiter(thisArg, _arguments, P, generator) {
|
|
32
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
33
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
34
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
35
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
36
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
37
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function __generator(thisArg, body) {
|
|
42
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
43
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
44
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
45
|
-
function step(op) {
|
|
46
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
47
|
-
while (_) try {
|
|
48
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
49
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
50
|
-
switch (op[0]) {
|
|
51
|
-
case 0: case 1: t = op; break;
|
|
52
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
53
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
54
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
55
|
-
default:
|
|
56
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
57
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
58
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
59
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
60
|
-
if (t[2]) _.ops.pop();
|
|
61
|
-
_.trys.pop(); continue;
|
|
62
|
-
}
|
|
63
|
-
op = body.call(thisArg, _);
|
|
64
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
65
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
66
|
-
}
|
|
7
|
+
const unreachable = (_) => {
|
|
8
|
+
throw new Error("unreachable");
|
|
9
|
+
};
|
|
10
|
+
function invariant(cond, message) {
|
|
11
|
+
if (!cond)
|
|
12
|
+
throw new Error(message);
|
|
67
13
|
}
|
|
68
14
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
15
|
+
const hasSquareBracket = (arg) => {
|
|
16
|
+
return !!arg && arg.openMark === "[" && arg.closeMark === "]";
|
|
17
|
+
};
|
|
18
|
+
const hasCurlyBracket = (arg) => {
|
|
19
|
+
return !!arg && arg.openMark === "{" && arg.closeMark === "}";
|
|
20
|
+
};
|
|
21
|
+
const mapString = (s) => new docx.MathRun(s);
|
|
22
|
+
const mapMacro = (n, runs) => {
|
|
23
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
24
|
+
switch (n.content) {
|
|
25
|
+
case "#":
|
|
26
|
+
return mapString("#");
|
|
27
|
+
case "$":
|
|
28
|
+
return mapString("$");
|
|
29
|
+
case "%":
|
|
30
|
+
return mapString("%");
|
|
31
|
+
case "&":
|
|
32
|
+
return mapString("&");
|
|
33
|
+
case "textasciitilde":
|
|
34
|
+
return mapString("~");
|
|
35
|
+
case "textasciicircum":
|
|
36
|
+
return mapString("^");
|
|
37
|
+
case "textbackslash":
|
|
38
|
+
return mapString("∖");
|
|
39
|
+
case "{":
|
|
40
|
+
return mapString("{");
|
|
41
|
+
case "}":
|
|
42
|
+
return mapString("}");
|
|
43
|
+
case "textbar":
|
|
44
|
+
return mapString("|");
|
|
45
|
+
case "textless":
|
|
46
|
+
return mapString("<");
|
|
47
|
+
case "textgreater":
|
|
48
|
+
return mapString(">");
|
|
49
|
+
case "neq":
|
|
50
|
+
return mapString("≠");
|
|
51
|
+
case "sim":
|
|
52
|
+
return mapString("∼");
|
|
53
|
+
case "simeq":
|
|
54
|
+
return mapString("≃");
|
|
55
|
+
case "approx":
|
|
56
|
+
return mapString("≈");
|
|
57
|
+
case "fallingdotseq":
|
|
58
|
+
return mapString("≒");
|
|
59
|
+
case "risingdotseq":
|
|
60
|
+
return mapString("≓");
|
|
61
|
+
case "equiv":
|
|
62
|
+
return mapString("≡");
|
|
63
|
+
case "geq":
|
|
64
|
+
return mapString("≥");
|
|
65
|
+
case "geqq":
|
|
66
|
+
return mapString("≧");
|
|
67
|
+
case "leq":
|
|
68
|
+
return mapString("≤");
|
|
69
|
+
case "leqq":
|
|
70
|
+
return mapString("≦");
|
|
71
|
+
case "gg":
|
|
72
|
+
return mapString("≫");
|
|
73
|
+
case "ll":
|
|
74
|
+
return mapString("≪");
|
|
75
|
+
case "times":
|
|
76
|
+
return mapString("×");
|
|
77
|
+
case "div":
|
|
78
|
+
return mapString("÷");
|
|
79
|
+
case "pm":
|
|
80
|
+
return mapString("±");
|
|
81
|
+
case "mp":
|
|
82
|
+
return mapString("∓");
|
|
83
|
+
case "oplus":
|
|
84
|
+
return mapString("⊕");
|
|
85
|
+
case "ominus":
|
|
86
|
+
return mapString("⊖");
|
|
87
|
+
case "otimes":
|
|
88
|
+
return mapString("⊗");
|
|
89
|
+
case "oslash":
|
|
90
|
+
return mapString("⊘");
|
|
91
|
+
case "circ":
|
|
92
|
+
return mapString("∘");
|
|
93
|
+
case "cdot":
|
|
94
|
+
return mapString("⋅");
|
|
95
|
+
case "bullet":
|
|
96
|
+
return mapString("∙");
|
|
97
|
+
case "ltimes":
|
|
98
|
+
return mapString("⋉");
|
|
99
|
+
case "rtimes":
|
|
100
|
+
return mapString("⋊");
|
|
101
|
+
case "in":
|
|
102
|
+
return mapString("∈");
|
|
103
|
+
case "ni":
|
|
104
|
+
return mapString("∋");
|
|
105
|
+
case "notin":
|
|
106
|
+
return mapString("∉");
|
|
107
|
+
case "subset":
|
|
108
|
+
return mapString("⊂");
|
|
109
|
+
case "supset":
|
|
110
|
+
return mapString("⊃");
|
|
111
|
+
case "subseteq":
|
|
112
|
+
return mapString("⊆");
|
|
113
|
+
case "supseteq":
|
|
114
|
+
return mapString("⊇");
|
|
115
|
+
case "nsubseteq":
|
|
116
|
+
return mapString("⊈");
|
|
117
|
+
case "nsupseteq":
|
|
118
|
+
return mapString("⊉");
|
|
119
|
+
case "subsetneq":
|
|
120
|
+
return mapString("⊊");
|
|
121
|
+
case "supsetneq":
|
|
122
|
+
return mapString("⊋");
|
|
123
|
+
case "cap":
|
|
124
|
+
return mapString("∩");
|
|
125
|
+
case "cup":
|
|
126
|
+
return mapString("∪");
|
|
127
|
+
case "emptyset":
|
|
128
|
+
return mapString("∅");
|
|
129
|
+
case "infty":
|
|
130
|
+
return mapString("∞");
|
|
131
|
+
case "partial":
|
|
132
|
+
return mapString("∂");
|
|
133
|
+
case "aleph":
|
|
134
|
+
return mapString("ℵ");
|
|
135
|
+
case "hbar":
|
|
136
|
+
return mapString("ℏ");
|
|
137
|
+
case "wp":
|
|
138
|
+
return mapString("℘");
|
|
139
|
+
case "Re":
|
|
140
|
+
return mapString("ℜ");
|
|
141
|
+
case "Im":
|
|
142
|
+
return mapString("ℑ");
|
|
143
|
+
case "alpha":
|
|
144
|
+
return mapString("α");
|
|
145
|
+
case "beta":
|
|
146
|
+
return mapString("β");
|
|
147
|
+
case "gamma":
|
|
148
|
+
return mapString("γ");
|
|
149
|
+
case "delta":
|
|
150
|
+
return mapString("δ");
|
|
151
|
+
case "epsilon":
|
|
152
|
+
return mapString("ϵ");
|
|
153
|
+
case "zeta":
|
|
154
|
+
return mapString("ζ");
|
|
155
|
+
case "eta":
|
|
156
|
+
return mapString("η");
|
|
157
|
+
case "theta":
|
|
158
|
+
return mapString("θ");
|
|
159
|
+
case "iota":
|
|
160
|
+
return mapString("ι");
|
|
161
|
+
case "kappa":
|
|
162
|
+
return mapString("κ");
|
|
163
|
+
case "lambda":
|
|
164
|
+
return mapString("λ");
|
|
165
|
+
case "eta":
|
|
166
|
+
return mapString("η");
|
|
167
|
+
case "mu":
|
|
168
|
+
return mapString("μ");
|
|
169
|
+
case "nu":
|
|
170
|
+
return mapString("ν");
|
|
171
|
+
case "xi":
|
|
172
|
+
return mapString("ξ");
|
|
173
|
+
case "pi":
|
|
174
|
+
return mapString("π");
|
|
175
|
+
case "rho":
|
|
176
|
+
return mapString("ρ");
|
|
177
|
+
case "sigma":
|
|
178
|
+
return mapString("σ");
|
|
179
|
+
case "tau":
|
|
180
|
+
return mapString("τ");
|
|
181
|
+
case "upsilon":
|
|
182
|
+
return mapString("υ");
|
|
183
|
+
case "phi":
|
|
184
|
+
return mapString("ϕ");
|
|
185
|
+
case "chi":
|
|
186
|
+
return mapString("χ");
|
|
187
|
+
case "psi":
|
|
188
|
+
return mapString("ψ");
|
|
189
|
+
case "omega":
|
|
190
|
+
return mapString("ω");
|
|
191
|
+
case "varepsilon":
|
|
192
|
+
return mapString("ε");
|
|
193
|
+
case "vartheta":
|
|
194
|
+
return mapString("ϑ");
|
|
195
|
+
case "varrho":
|
|
196
|
+
return mapString("ϱ");
|
|
197
|
+
case "varsigma":
|
|
198
|
+
return mapString("ς");
|
|
199
|
+
case "varphi":
|
|
200
|
+
return mapString("φ");
|
|
201
|
+
case "Gamma":
|
|
202
|
+
return mapString("Γ");
|
|
203
|
+
case "Delta":
|
|
204
|
+
return mapString("Δ");
|
|
205
|
+
case "Theta":
|
|
206
|
+
return mapString("Θ");
|
|
207
|
+
case "Lambda":
|
|
208
|
+
return mapString("Λ");
|
|
209
|
+
case "Xi":
|
|
210
|
+
return mapString("Ξ");
|
|
211
|
+
case "Pi":
|
|
212
|
+
return mapString("Π");
|
|
213
|
+
case "Sigma":
|
|
214
|
+
return mapString("Σ");
|
|
215
|
+
case "Upsilon":
|
|
216
|
+
return mapString("Υ");
|
|
217
|
+
case "Phi":
|
|
218
|
+
return mapString("Φ");
|
|
219
|
+
case "Psi":
|
|
220
|
+
return mapString("Ψ");
|
|
221
|
+
case "Omega":
|
|
222
|
+
return mapString("Ω");
|
|
223
|
+
case "newline":
|
|
224
|
+
case "\\":
|
|
225
|
+
// line break
|
|
226
|
+
return false;
|
|
227
|
+
case "^": {
|
|
228
|
+
const prev = runs.pop();
|
|
229
|
+
if (!prev)
|
|
230
|
+
break;
|
|
231
|
+
return new docx.MathSuperScript({
|
|
232
|
+
children: [prev],
|
|
233
|
+
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 : []),
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
case "_": {
|
|
237
|
+
const prev = runs.pop();
|
|
238
|
+
if (!prev)
|
|
239
|
+
break;
|
|
240
|
+
return new docx.MathSubScript({
|
|
241
|
+
children: [prev],
|
|
242
|
+
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 : []),
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
case "hat":
|
|
246
|
+
// TODO: implement
|
|
247
|
+
break;
|
|
248
|
+
case "widehat":
|
|
249
|
+
// TODO: implement
|
|
250
|
+
break;
|
|
251
|
+
case "sum": {
|
|
252
|
+
// TODO: support superscript and subscript
|
|
253
|
+
return new docx.MathSum({
|
|
254
|
+
children: [],
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
case "int":
|
|
258
|
+
return mapString("∫");
|
|
259
|
+
case "frac":
|
|
260
|
+
case "tfrac":
|
|
261
|
+
case "dfrac": {
|
|
262
|
+
const args = (_g = n.args) !== null && _g !== void 0 ? _g : [];
|
|
263
|
+
if (args.length === 2 &&
|
|
264
|
+
hasCurlyBracket(args[0]) &&
|
|
265
|
+
hasCurlyBracket(args[1])) {
|
|
266
|
+
return new docx.MathFraction({
|
|
267
|
+
numerator: mapGroup(args[0].content),
|
|
268
|
+
denominator: mapGroup(args[1].content),
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
case "sqrt": {
|
|
274
|
+
const args = (_h = n.args) !== null && _h !== void 0 ? _h : [];
|
|
275
|
+
if (args.length === 1 && hasCurlyBracket(args[0])) {
|
|
276
|
+
return new docx.MathRadical({
|
|
277
|
+
children: mapGroup(args[0].content),
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
if (args.length === 2 &&
|
|
281
|
+
hasSquareBracket(args[0]) &&
|
|
282
|
+
hasCurlyBracket(args[1])) {
|
|
283
|
+
return new docx.MathRadical({
|
|
284
|
+
children: mapGroup(args[1].content),
|
|
285
|
+
degree: mapGroup(args[0].content),
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return mapString(n.content);
|
|
292
|
+
};
|
|
293
|
+
const mapGroup = (nodes) => {
|
|
294
|
+
const group = [];
|
|
295
|
+
for (const c of nodes) {
|
|
296
|
+
group.push(...(mapNode(c, group) || []));
|
|
297
|
+
}
|
|
298
|
+
return group;
|
|
299
|
+
};
|
|
300
|
+
const mapNode = (n, runs) => {
|
|
301
|
+
switch (n.type) {
|
|
302
|
+
case "root":
|
|
303
|
+
break;
|
|
304
|
+
case "string":
|
|
305
|
+
return [mapString(n.content)];
|
|
306
|
+
case "whitespace":
|
|
307
|
+
break;
|
|
308
|
+
case "parbreak":
|
|
309
|
+
break;
|
|
310
|
+
case "comment":
|
|
311
|
+
break;
|
|
312
|
+
case "macro":
|
|
313
|
+
const run = mapMacro(n, runs);
|
|
314
|
+
if (!run) {
|
|
315
|
+
// line break
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
return [run];
|
|
320
|
+
}
|
|
321
|
+
case "environment":
|
|
322
|
+
case "mathenv":
|
|
323
|
+
break;
|
|
324
|
+
case "verbatim":
|
|
325
|
+
break;
|
|
326
|
+
case "inlinemath":
|
|
327
|
+
break;
|
|
328
|
+
case "displaymath":
|
|
329
|
+
break;
|
|
330
|
+
case "group":
|
|
331
|
+
return mapGroup(n.content);
|
|
332
|
+
case "verb":
|
|
333
|
+
break;
|
|
334
|
+
default:
|
|
335
|
+
unreachable();
|
|
336
|
+
}
|
|
337
|
+
return [];
|
|
338
|
+
};
|
|
339
|
+
const parseLatex = (value) => {
|
|
340
|
+
const parsed = parseMath(value);
|
|
341
|
+
const paragraphs = [[]];
|
|
342
|
+
let runs = paragraphs[0];
|
|
343
|
+
for (const n of parsed) {
|
|
344
|
+
const res = mapNode(n, runs);
|
|
345
|
+
if (!res) {
|
|
346
|
+
// line break
|
|
347
|
+
paragraphs.push((runs = []));
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
runs.push(...res);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return paragraphs;
|
|
354
|
+
};
|
|
355
|
+
|
|
356
|
+
const ORDERED_LIST_REF = "ordered";
|
|
357
|
+
const INDENT = 0.5;
|
|
358
|
+
const DEFAULT_NUMBERINGS = [
|
|
72
359
|
{
|
|
73
360
|
level: 0,
|
|
74
361
|
format: docx.LevelFormat.DECIMAL,
|
|
@@ -131,25 +418,21 @@ var DEFAULT_NUMBERINGS = [
|
|
|
131
418
|
},
|
|
132
419
|
},
|
|
133
420
|
];
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
};
|
|
137
|
-
function mdastToDocx(node, _a, images) {
|
|
138
|
-
var output = _a.output, title = _a.title, subject = _a.subject, creator = _a.creator, keywords = _a.keywords, description = _a.description, lastModifiedBy = _a.lastModifiedBy, revision = _a.revision, styles = _a.styles, background = _a.background;
|
|
139
|
-
var nodes = convertNodes(node.children, {
|
|
421
|
+
function mdastToDocx(node, { output, title, subject, creator, keywords, description, lastModifiedBy, revision, styles, background, }, images) {
|
|
422
|
+
const nodes = convertNodes(node.children, {
|
|
140
423
|
deco: {},
|
|
141
|
-
images
|
|
424
|
+
images,
|
|
142
425
|
});
|
|
143
|
-
|
|
144
|
-
title
|
|
145
|
-
subject
|
|
146
|
-
creator
|
|
147
|
-
keywords
|
|
148
|
-
description
|
|
149
|
-
lastModifiedBy
|
|
150
|
-
revision
|
|
151
|
-
styles
|
|
152
|
-
background
|
|
426
|
+
const doc = new docx.Document({
|
|
427
|
+
title,
|
|
428
|
+
subject,
|
|
429
|
+
creator,
|
|
430
|
+
keywords,
|
|
431
|
+
description,
|
|
432
|
+
lastModifiedBy,
|
|
433
|
+
revision,
|
|
434
|
+
styles,
|
|
435
|
+
background,
|
|
153
436
|
sections: [{ children: nodes }],
|
|
154
437
|
numbering: {
|
|
155
438
|
config: [
|
|
@@ -168,10 +451,8 @@ function mdastToDocx(node, _a, images) {
|
|
|
168
451
|
}
|
|
169
452
|
}
|
|
170
453
|
function convertNodes(nodes, ctx) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
|
|
174
|
-
var node = nodes_1[_i];
|
|
454
|
+
const results = [];
|
|
455
|
+
for (const node of nodes) {
|
|
175
456
|
switch (node.type) {
|
|
176
457
|
case "paragraph":
|
|
177
458
|
results.push(buildParagraph(node, ctx));
|
|
@@ -180,26 +461,23 @@ function convertNodes(nodes, ctx) {
|
|
|
180
461
|
results.push(buildHeading(node, ctx));
|
|
181
462
|
break;
|
|
182
463
|
case "thematicBreak":
|
|
183
|
-
results.push(buildThematicBreak(
|
|
464
|
+
results.push(buildThematicBreak());
|
|
184
465
|
break;
|
|
185
466
|
case "blockquote":
|
|
186
|
-
results.push
|
|
467
|
+
results.push(...buildBlockquote(node, ctx));
|
|
187
468
|
break;
|
|
188
469
|
case "list":
|
|
189
|
-
results.push
|
|
470
|
+
results.push(...buildList(node, ctx));
|
|
190
471
|
break;
|
|
191
472
|
case "listItem":
|
|
192
|
-
|
|
193
|
-
break;
|
|
473
|
+
invariant(false, "unreachable");
|
|
194
474
|
case "table":
|
|
195
475
|
results.push(buildTable(node, ctx));
|
|
196
476
|
break;
|
|
197
477
|
case "tableRow":
|
|
198
|
-
|
|
199
|
-
break;
|
|
478
|
+
invariant(false, "unreachable");
|
|
200
479
|
case "tableCell":
|
|
201
|
-
|
|
202
|
-
break;
|
|
480
|
+
invariant(false, "unreachable");
|
|
203
481
|
case "html":
|
|
204
482
|
results.push(buildHtml(node));
|
|
205
483
|
break;
|
|
@@ -224,8 +502,8 @@ function convertNodes(nodes, ctx) {
|
|
|
224
502
|
case "emphasis":
|
|
225
503
|
case "strong":
|
|
226
504
|
case "delete": {
|
|
227
|
-
|
|
228
|
-
results.push
|
|
505
|
+
const { type, children } = node;
|
|
506
|
+
results.push(...convertNodes(children, Object.assign(Object.assign({}, ctx), { deco: Object.assign(Object.assign({}, ctx.deco), { [type]: true }) })));
|
|
229
507
|
break;
|
|
230
508
|
}
|
|
231
509
|
case "inlineCode":
|
|
@@ -233,7 +511,7 @@ function convertNodes(nodes, ctx) {
|
|
|
233
511
|
results.push(buildText(node.value, ctx.deco));
|
|
234
512
|
break;
|
|
235
513
|
case "break":
|
|
236
|
-
results.push(buildBreak(
|
|
514
|
+
results.push(buildBreak());
|
|
237
515
|
break;
|
|
238
516
|
case "link":
|
|
239
517
|
results.push(buildLink(node, ctx));
|
|
@@ -254,19 +532,21 @@ function convertNodes(nodes, ctx) {
|
|
|
254
532
|
// FIXME: unimplemented
|
|
255
533
|
break;
|
|
256
534
|
case "math":
|
|
257
|
-
results.push(buildMath(node));
|
|
535
|
+
results.push(...buildMath(node));
|
|
258
536
|
break;
|
|
259
537
|
case "inlineMath":
|
|
260
538
|
results.push(buildInlineMath(node));
|
|
261
539
|
break;
|
|
540
|
+
default:
|
|
541
|
+
unreachable();
|
|
542
|
+
break;
|
|
262
543
|
}
|
|
263
544
|
}
|
|
264
545
|
return results;
|
|
265
546
|
}
|
|
266
|
-
function buildParagraph(
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
return new docx.Paragraph(__assign({ children: convertNodes(children, ctx) }, (list &&
|
|
547
|
+
function buildParagraph({ children }, ctx) {
|
|
548
|
+
const list = ctx.list;
|
|
549
|
+
return new docx.Paragraph(Object.assign({ children: convertNodes(children, ctx) }, (list &&
|
|
270
550
|
(list.ordered
|
|
271
551
|
? {
|
|
272
552
|
numbering: {
|
|
@@ -280,9 +560,8 @@ function buildParagraph(_a, ctx) {
|
|
|
280
560
|
},
|
|
281
561
|
}))));
|
|
282
562
|
}
|
|
283
|
-
function buildHeading(
|
|
284
|
-
|
|
285
|
-
var heading;
|
|
563
|
+
function buildHeading({ children, depth }, ctx) {
|
|
564
|
+
let heading;
|
|
286
565
|
switch (depth) {
|
|
287
566
|
case 1:
|
|
288
567
|
heading = docx.HeadingLevel.TITLE;
|
|
@@ -304,39 +583,34 @@ function buildHeading(_a, ctx) {
|
|
|
304
583
|
break;
|
|
305
584
|
}
|
|
306
585
|
return new docx.Paragraph({
|
|
307
|
-
heading
|
|
586
|
+
heading,
|
|
308
587
|
children: convertNodes(children, ctx),
|
|
309
588
|
});
|
|
310
589
|
}
|
|
311
|
-
function buildThematicBreak(
|
|
312
|
-
_a.type;
|
|
590
|
+
function buildThematicBreak(_) {
|
|
313
591
|
return new docx.Paragraph({
|
|
314
592
|
thematicBreak: true,
|
|
315
593
|
});
|
|
316
594
|
}
|
|
317
|
-
function buildBlockquote(
|
|
318
|
-
_a.type; var children = _a.children;
|
|
595
|
+
function buildBlockquote({ children }, ctx) {
|
|
319
596
|
// FIXME: do nothing for now
|
|
320
597
|
return convertNodes(children, ctx);
|
|
321
598
|
}
|
|
322
|
-
function buildList(
|
|
323
|
-
|
|
324
|
-
var list = {
|
|
599
|
+
function buildList({ children, ordered, start: _start, spread: _spread }, ctx) {
|
|
600
|
+
const list = {
|
|
325
601
|
level: ctx.list ? ctx.list.level + 1 : 0,
|
|
326
602
|
ordered: !!ordered,
|
|
327
603
|
};
|
|
328
|
-
return children.reduce(
|
|
329
|
-
acc.push
|
|
604
|
+
return children.reduce((acc, item) => {
|
|
605
|
+
acc.push(...buildListItem(item, Object.assign(Object.assign({}, ctx), { list })));
|
|
330
606
|
return acc;
|
|
331
607
|
}, []);
|
|
332
608
|
}
|
|
333
|
-
function buildListItem(
|
|
334
|
-
_a.type; var children = _a.children; _a.checked; _a.spread;
|
|
609
|
+
function buildListItem({ children, checked: _checked, spread: _spread }, ctx) {
|
|
335
610
|
return convertNodes(children, ctx);
|
|
336
611
|
}
|
|
337
|
-
function buildTable(
|
|
338
|
-
|
|
339
|
-
var cellAligns = align === null || align === void 0 ? void 0 : align.map(function (a) {
|
|
612
|
+
function buildTable({ children, align }, ctx) {
|
|
613
|
+
const cellAligns = align === null || align === void 0 ? void 0 : align.map((a) => {
|
|
340
614
|
switch (a) {
|
|
341
615
|
case "left":
|
|
342
616
|
return docx.AlignmentType.LEFT;
|
|
@@ -349,21 +623,19 @@ function buildTable(_a, ctx) {
|
|
|
349
623
|
}
|
|
350
624
|
});
|
|
351
625
|
return new docx.Table({
|
|
352
|
-
rows: children.map(
|
|
626
|
+
rows: children.map((r) => {
|
|
353
627
|
return buildTableRow(r, ctx, cellAligns);
|
|
354
628
|
}),
|
|
355
629
|
});
|
|
356
630
|
}
|
|
357
|
-
function buildTableRow(
|
|
358
|
-
_a.type; var children = _a.children;
|
|
631
|
+
function buildTableRow({ children }, ctx, cellAligns) {
|
|
359
632
|
return new docx.TableRow({
|
|
360
|
-
children: children.map(
|
|
633
|
+
children: children.map((c, i) => {
|
|
361
634
|
return buildTableCell(c, ctx, cellAligns === null || cellAligns === void 0 ? void 0 : cellAligns[i]);
|
|
362
635
|
}),
|
|
363
636
|
});
|
|
364
637
|
}
|
|
365
|
-
function buildTableCell(
|
|
366
|
-
_a.type; var children = _a.children;
|
|
638
|
+
function buildTableCell({ children }, ctx, align) {
|
|
367
639
|
return new docx.TableCell({
|
|
368
640
|
children: [
|
|
369
641
|
new docx.Paragraph({
|
|
@@ -373,110 +645,91 @@ function buildTableCell(_a, ctx, align) {
|
|
|
373
645
|
],
|
|
374
646
|
});
|
|
375
647
|
}
|
|
376
|
-
function buildHtml(
|
|
377
|
-
_a.type; var value = _a.value;
|
|
648
|
+
function buildHtml({ value }) {
|
|
378
649
|
// FIXME: transform to text for now
|
|
379
650
|
return new docx.Paragraph({
|
|
380
651
|
children: [buildText(value, {})],
|
|
381
652
|
});
|
|
382
653
|
}
|
|
383
|
-
function buildCode(
|
|
384
|
-
_a.type; var value = _a.value; _a.lang; _a.meta;
|
|
654
|
+
function buildCode({ value, lang: _lang, meta: _meta }) {
|
|
385
655
|
// FIXME: transform to text for now
|
|
386
656
|
return new docx.Paragraph({
|
|
387
657
|
children: [buildText(value, {})],
|
|
388
658
|
});
|
|
389
659
|
}
|
|
390
|
-
function buildMath(
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
660
|
+
function buildMath({ value }) {
|
|
661
|
+
return parseLatex(value).map((runs) => new docx.Paragraph({
|
|
662
|
+
children: [
|
|
663
|
+
new docx.Math({
|
|
664
|
+
children: runs,
|
|
665
|
+
}),
|
|
666
|
+
],
|
|
667
|
+
}));
|
|
396
668
|
}
|
|
397
|
-
function buildInlineMath(
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
669
|
+
function buildInlineMath({ value }) {
|
|
670
|
+
return new docx.Math({
|
|
671
|
+
children: parseLatex(value).flatMap((runs) => runs),
|
|
672
|
+
});
|
|
401
673
|
}
|
|
402
674
|
function buildText(text, deco) {
|
|
403
675
|
return new docx.TextRun({
|
|
404
|
-
text
|
|
676
|
+
text,
|
|
405
677
|
bold: deco.strong,
|
|
406
678
|
italics: deco.emphasis,
|
|
407
679
|
strike: deco.delete,
|
|
408
680
|
});
|
|
409
681
|
}
|
|
410
|
-
function buildBreak(
|
|
411
|
-
_a.type;
|
|
682
|
+
function buildBreak(_) {
|
|
412
683
|
return new docx.TextRun({ text: "", break: 1 });
|
|
413
684
|
}
|
|
414
|
-
function buildLink(
|
|
415
|
-
_a.type; var children = _a.children, url = _a.url; _a.title;
|
|
685
|
+
function buildLink({ children, url, title: _title }, ctx) {
|
|
416
686
|
return new docx.ExternalHyperlink({
|
|
417
687
|
link: url,
|
|
418
688
|
children: convertNodes(children, ctx),
|
|
419
689
|
});
|
|
420
690
|
}
|
|
421
|
-
function buildImage(
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
}
|
|
426
|
-
var _b = images[url], image = _b.image, width = _b.width, height = _b.height;
|
|
691
|
+
function buildImage({ url, title: _title, alt: _alt }, images) {
|
|
692
|
+
const img = images[url];
|
|
693
|
+
invariant(img, `Fetch image was failed: ${url}`);
|
|
694
|
+
const { image, width, height } = img;
|
|
427
695
|
return new docx.ImageRun({
|
|
428
696
|
data: image,
|
|
429
697
|
transformation: {
|
|
430
|
-
width
|
|
431
|
-
height
|
|
698
|
+
width,
|
|
699
|
+
height,
|
|
432
700
|
},
|
|
433
701
|
});
|
|
434
702
|
}
|
|
435
|
-
function buildFootnote(
|
|
436
|
-
_a.type; var children = _a.children;
|
|
703
|
+
function buildFootnote({ children }, ctx) {
|
|
437
704
|
// FIXME: transform to paragraph for now
|
|
438
705
|
return new docx.Paragraph({
|
|
439
706
|
children: convertNodes(children, ctx),
|
|
440
707
|
});
|
|
441
708
|
}
|
|
442
709
|
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
var images = {};
|
|
447
|
-
this.Compiler = function (node) {
|
|
710
|
+
const plugin = function (opts = {}) {
|
|
711
|
+
let images = {};
|
|
712
|
+
this.Compiler = (node) => {
|
|
448
713
|
return mdastToDocx(node, opts, images);
|
|
449
714
|
};
|
|
450
|
-
return
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
case 0:
|
|
455
|
-
imageList = [];
|
|
456
|
-
visit(node, "image", function (node) {
|
|
457
|
-
imageList.push(node);
|
|
458
|
-
});
|
|
459
|
-
if (imageList.length === 0) {
|
|
460
|
-
return [2 /*return*/, node];
|
|
461
|
-
}
|
|
462
|
-
imageResolver = opts.imageResolver;
|
|
463
|
-
if (!imageResolver) {
|
|
464
|
-
throw new Error("options.imageResolver is not defined.");
|
|
465
|
-
}
|
|
466
|
-
return [4 /*yield*/, Promise.all(imageList.map(function (_a) {
|
|
467
|
-
var url = _a.url;
|
|
468
|
-
return imageResolver(url);
|
|
469
|
-
}))];
|
|
470
|
-
case 1:
|
|
471
|
-
imageDatas = _a.sent();
|
|
472
|
-
images = imageList.reduce(function (acc, img, i) {
|
|
473
|
-
acc[img.url] = imageDatas[i];
|
|
474
|
-
return acc;
|
|
475
|
-
}, {});
|
|
476
|
-
return [2 /*return*/, node];
|
|
477
|
-
}
|
|
715
|
+
return (node) => __awaiter(this, void 0, void 0, function* () {
|
|
716
|
+
const imageList = [];
|
|
717
|
+
visit(node, "image", (node) => {
|
|
718
|
+
imageList.push(node);
|
|
478
719
|
});
|
|
479
|
-
|
|
720
|
+
if (imageList.length === 0) {
|
|
721
|
+
return node;
|
|
722
|
+
}
|
|
723
|
+
const imageResolver = opts.imageResolver;
|
|
724
|
+
invariant(imageResolver, "options.imageResolver is not defined.");
|
|
725
|
+
const imageDatas = yield Promise.all(imageList.map(({ url }) => imageResolver(url)));
|
|
726
|
+
images = imageList.reduce((acc, img, i) => {
|
|
727
|
+
acc[img.url] = imageDatas[i];
|
|
728
|
+
return acc;
|
|
729
|
+
}, {});
|
|
730
|
+
return node;
|
|
731
|
+
});
|
|
480
732
|
};
|
|
481
733
|
|
|
482
734
|
export { plugin as default };
|
|
735
|
+
//# sourceMappingURL=index.mjs.map
|