remark-docx 0.0.7 → 0.1.2

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/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
- Copyright (c) Microsoft Corporation.
7
-
8
- Permission to use, copy, modify, and/or distribute this software for any
9
- purpose with or without fee is hereby granted.
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
- var ORDERED_LIST_REF = "ordered";
70
- var INDENT = 0.5;
71
- var DEFAULT_NUMBERINGS = [
15
+ const hasSquareBrackets = (arg) => {
16
+ return !!arg && arg.openMark === "[" && arg.closeMark === "]";
17
+ };
18
+ const hasCurlyBrackets = (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
+ hasCurlyBrackets(args[0]) &&
265
+ hasCurlyBrackets(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 && hasCurlyBrackets(args[0])) {
276
+ return new docx.MathRadical({
277
+ children: mapGroup(args[0].content),
278
+ });
279
+ }
280
+ if (args.length === 2 &&
281
+ hasSquareBrackets(args[0]) &&
282
+ hasCurlyBrackets(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,22 @@ var DEFAULT_NUMBERINGS = [
131
418
  },
132
419
  },
133
420
  ];
134
- var error = function (message) {
135
- throw new Error(message);
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
+ const mdastToDocx = (node, { output = "buffer", title, subject, creator, keywords, description, lastModifiedBy, revision, styles, background, }, images) => {
422
+ const nodes = convertNodes(node.children, {
140
423
  deco: {},
141
- images: images,
424
+ images,
425
+ indent: 0,
142
426
  });
143
- var doc = new docx.Document({
144
- title: title,
145
- subject: subject,
146
- creator: creator,
147
- keywords: keywords,
148
- description: description,
149
- lastModifiedBy: lastModifiedBy,
150
- revision: revision,
151
- styles: styles,
152
- background: background,
427
+ const doc = new docx.Document({
428
+ title,
429
+ subject,
430
+ creator,
431
+ keywords,
432
+ description,
433
+ lastModifiedBy,
434
+ revision,
435
+ styles,
436
+ background,
153
437
  sections: [{ children: nodes }],
154
438
  numbering: {
155
439
  config: [
@@ -160,18 +444,16 @@ function mdastToDocx(node, _a, images) {
160
444
  ],
161
445
  },
162
446
  });
163
- switch (output !== null && output !== void 0 ? output : "buffer") {
447
+ switch (output) {
164
448
  case "buffer":
165
449
  return Packer.toBuffer(doc);
166
450
  case "blob":
167
451
  return Packer.toBlob(doc);
168
452
  }
169
- }
170
- function convertNodes(nodes, ctx) {
171
- var _a;
172
- var results = [];
173
- for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
174
- var node = nodes_1[_i];
453
+ };
454
+ const convertNodes = (nodes, ctx) => {
455
+ const results = [];
456
+ for (const node of nodes) {
175
457
  switch (node.type) {
176
458
  case "paragraph":
177
459
  results.push(buildParagraph(node, ctx));
@@ -180,26 +462,23 @@ function convertNodes(nodes, ctx) {
180
462
  results.push(buildHeading(node, ctx));
181
463
  break;
182
464
  case "thematicBreak":
183
- results.push(buildThematicBreak(node));
465
+ results.push(buildThematicBreak());
184
466
  break;
185
467
  case "blockquote":
186
- results.push.apply(results, buildBlockquote(node, ctx));
468
+ results.push(...buildBlockquote(node, ctx));
187
469
  break;
188
470
  case "list":
189
- results.push.apply(results, buildList(node, ctx));
471
+ results.push(...buildList(node, ctx));
190
472
  break;
191
473
  case "listItem":
192
- error("unreachable");
193
- break;
474
+ invariant(false, "unreachable");
194
475
  case "table":
195
476
  results.push(buildTable(node, ctx));
196
477
  break;
197
478
  case "tableRow":
198
- error("unreachable");
199
- break;
479
+ invariant(false, "unreachable");
200
480
  case "tableCell":
201
- error("unreachable");
202
- break;
481
+ invariant(false, "unreachable");
203
482
  case "html":
204
483
  results.push(buildHtml(node));
205
484
  break;
@@ -224,8 +503,8 @@ function convertNodes(nodes, ctx) {
224
503
  case "emphasis":
225
504
  case "strong":
226
505
  case "delete": {
227
- var type = node.type, children = node.children;
228
- results.push.apply(results, convertNodes(children, __assign(__assign({}, ctx), { deco: __assign(__assign({}, ctx.deco), (_a = {}, _a[type] = true, _a)) })));
506
+ const { type, children } = node;
507
+ results.push(...convertNodes(children, Object.assign(Object.assign({}, ctx), { deco: Object.assign(Object.assign({}, ctx.deco), { [type]: true }) })));
229
508
  break;
230
509
  }
231
510
  case "inlineCode":
@@ -233,7 +512,7 @@ function convertNodes(nodes, ctx) {
233
512
  results.push(buildText(node.value, ctx.deco));
234
513
  break;
235
514
  case "break":
236
- results.push(buildBreak(node));
515
+ results.push(buildBreak());
237
516
  break;
238
517
  case "link":
239
518
  results.push(buildLink(node, ctx));
@@ -254,19 +533,25 @@ function convertNodes(nodes, ctx) {
254
533
  // FIXME: unimplemented
255
534
  break;
256
535
  case "math":
257
- results.push(buildMath(node));
536
+ results.push(...buildMath(node));
258
537
  break;
259
538
  case "inlineMath":
260
539
  results.push(buildInlineMath(node));
261
540
  break;
541
+ default:
542
+ unreachable();
543
+ break;
262
544
  }
263
545
  }
264
546
  return results;
265
- }
266
- function buildParagraph(_a, ctx) {
267
- _a.type; var children = _a.children;
268
- var list = ctx.list;
269
- return new docx.Paragraph(__assign({ children: convertNodes(children, ctx) }, (list &&
547
+ };
548
+ const buildParagraph = ({ children }, ctx) => {
549
+ const list = ctx.list;
550
+ return new docx.Paragraph(Object.assign({ children: convertNodes(children, ctx), indent: ctx.indent > 0
551
+ ? {
552
+ start: convertInchesToTwip(INDENT * ctx.indent),
553
+ }
554
+ : undefined }, (list &&
270
555
  (list.ordered
271
556
  ? {
272
557
  numbering: {
@@ -279,10 +564,9 @@ function buildParagraph(_a, ctx) {
279
564
  level: list.level,
280
565
  },
281
566
  }))));
282
- }
283
- function buildHeading(_a, ctx) {
284
- _a.type; var children = _a.children, depth = _a.depth;
285
- var heading;
567
+ };
568
+ const buildHeading = ({ children, depth }, ctx) => {
569
+ let heading;
286
570
  switch (depth) {
287
571
  case 1:
288
572
  heading = docx.HeadingLevel.TITLE;
@@ -304,39 +588,33 @@ function buildHeading(_a, ctx) {
304
588
  break;
305
589
  }
306
590
  return new docx.Paragraph({
307
- heading: heading,
591
+ heading,
308
592
  children: convertNodes(children, ctx),
309
593
  });
310
- }
311
- function buildThematicBreak(_a) {
312
- _a.type;
594
+ };
595
+ const buildThematicBreak = (_) => {
313
596
  return new docx.Paragraph({
314
597
  thematicBreak: true,
315
598
  });
316
- }
317
- function buildBlockquote(_a, ctx) {
318
- _a.type; var children = _a.children;
319
- // FIXME: do nothing for now
320
- return convertNodes(children, ctx);
321
- }
322
- function buildList(_a, ctx) {
323
- _a.type; var children = _a.children, ordered = _a.ordered; _a.start; _a.spread;
324
- var list = {
599
+ };
600
+ const buildBlockquote = ({ children }, ctx) => {
601
+ return convertNodes(children, Object.assign(Object.assign({}, ctx), { indent: ctx.indent + 1 }));
602
+ };
603
+ const buildList = ({ children, ordered, start: _start, spread: _spread }, ctx) => {
604
+ const list = {
325
605
  level: ctx.list ? ctx.list.level + 1 : 0,
326
606
  ordered: !!ordered,
327
607
  };
328
- return children.reduce(function (acc, item) {
329
- acc.push.apply(acc, buildListItem(item, __assign(__assign({}, ctx), { list: list })));
608
+ return children.reduce((acc, item) => {
609
+ acc.push(...buildListItem(item, Object.assign(Object.assign({}, ctx), { list })));
330
610
  return acc;
331
611
  }, []);
332
- }
333
- function buildListItem(_a, ctx) {
334
- _a.type; var children = _a.children; _a.checked; _a.spread;
612
+ };
613
+ const buildListItem = ({ children, checked: _checked, spread: _spread }, ctx) => {
335
614
  return convertNodes(children, ctx);
336
- }
337
- function buildTable(_a, ctx) {
338
- _a.type; var children = _a.children, align = _a.align;
339
- var cellAligns = align === null || align === void 0 ? void 0 : align.map(function (a) {
615
+ };
616
+ const buildTable = ({ children, align }, ctx) => {
617
+ const cellAligns = align === null || align === void 0 ? void 0 : align.map((a) => {
340
618
  switch (a) {
341
619
  case "left":
342
620
  return docx.AlignmentType.LEFT;
@@ -349,21 +627,19 @@ function buildTable(_a, ctx) {
349
627
  }
350
628
  });
351
629
  return new docx.Table({
352
- rows: children.map(function (r) {
630
+ rows: children.map((r) => {
353
631
  return buildTableRow(r, ctx, cellAligns);
354
632
  }),
355
633
  });
356
- }
357
- function buildTableRow(_a, ctx, cellAligns) {
358
- _a.type; var children = _a.children;
634
+ };
635
+ const buildTableRow = ({ children }, ctx, cellAligns) => {
359
636
  return new docx.TableRow({
360
- children: children.map(function (c, i) {
637
+ children: children.map((c, i) => {
361
638
  return buildTableCell(c, ctx, cellAligns === null || cellAligns === void 0 ? void 0 : cellAligns[i]);
362
639
  }),
363
640
  });
364
- }
365
- function buildTableCell(_a, ctx, align) {
366
- _a.type; var children = _a.children;
641
+ };
642
+ const buildTableCell = ({ children }, ctx, align) => {
367
643
  return new docx.TableCell({
368
644
  children: [
369
645
  new docx.Paragraph({
@@ -372,111 +648,92 @@ function buildTableCell(_a, ctx, align) {
372
648
  }),
373
649
  ],
374
650
  });
375
- }
376
- function buildHtml(_a) {
377
- _a.type; var value = _a.value;
651
+ };
652
+ const buildHtml = ({ value }) => {
378
653
  // FIXME: transform to text for now
379
654
  return new docx.Paragraph({
380
655
  children: [buildText(value, {})],
381
656
  });
382
- }
383
- function buildCode(_a) {
384
- _a.type; var value = _a.value; _a.lang; _a.meta;
657
+ };
658
+ const buildCode = ({ value, lang: _lang, meta: _meta }) => {
385
659
  // FIXME: transform to text for now
386
660
  return new docx.Paragraph({
387
661
  children: [buildText(value, {})],
388
662
  });
389
- }
390
- function buildMath(_a) {
391
- _a.type; var value = _a.value;
392
- // FIXME: transform to text for now
393
- return new docx.Paragraph({
394
- children: [new docx.TextRun(value)],
663
+ };
664
+ const buildMath = ({ value }) => {
665
+ return parseLatex(value).map((runs) => new docx.Paragraph({
666
+ children: [
667
+ new docx.Math({
668
+ children: runs,
669
+ }),
670
+ ],
671
+ }));
672
+ };
673
+ const buildInlineMath = ({ value }) => {
674
+ return new docx.Math({
675
+ children: parseLatex(value).flatMap((runs) => runs),
395
676
  });
396
- }
397
- function buildInlineMath(_a) {
398
- _a.type; var value = _a.value;
399
- // FIXME: transform to text for now
400
- return new docx.TextRun(value);
401
- }
402
- function buildText(text, deco) {
677
+ };
678
+ const buildText = (text, deco) => {
403
679
  return new docx.TextRun({
404
- text: text,
680
+ text,
405
681
  bold: deco.strong,
406
682
  italics: deco.emphasis,
407
683
  strike: deco.delete,
408
684
  });
409
- }
410
- function buildBreak(_a) {
411
- _a.type;
685
+ };
686
+ const buildBreak = (_) => {
412
687
  return new docx.TextRun({ text: "", break: 1 });
413
- }
414
- function buildLink(_a, ctx) {
415
- _a.type; var children = _a.children, url = _a.url; _a.title;
688
+ };
689
+ const buildLink = ({ children, url, title: _title }, ctx) => {
416
690
  return new docx.ExternalHyperlink({
417
691
  link: url,
418
692
  children: convertNodes(children, ctx),
419
693
  });
420
- }
421
- function buildImage(_a, images) {
422
- _a.type; var url = _a.url; _a.title; _a.alt;
423
- if (!images[url]) {
424
- return error("Fetch image was failed: ".concat(url));
425
- }
426
- var _b = images[url], image = _b.image, width = _b.width, height = _b.height;
694
+ };
695
+ const buildImage = ({ url, title: _title, alt: _alt }, images) => {
696
+ const img = images[url];
697
+ invariant(img, `Fetch image was failed: ${url}`);
698
+ const { image, width, height } = img;
427
699
  return new docx.ImageRun({
428
700
  data: image,
429
701
  transformation: {
430
- width: width,
431
- height: height,
702
+ width,
703
+ height,
432
704
  },
433
705
  });
434
- }
435
- function buildFootnote(_a, ctx) {
436
- _a.type; var children = _a.children;
706
+ };
707
+ const buildFootnote = ({ children }, ctx) => {
437
708
  // FIXME: transform to paragraph for now
438
709
  return new docx.Paragraph({
439
710
  children: convertNodes(children, ctx),
440
711
  });
441
- }
712
+ };
442
713
 
443
- var plugin = function (opts) {
444
- var _this = this;
445
- if (opts === void 0) { opts = {}; }
446
- var images = {};
447
- this.Compiler = function (node) {
714
+ const plugin = function (opts = {}) {
715
+ let images = {};
716
+ this.Compiler = (node) => {
448
717
  return mdastToDocx(node, opts, images);
449
718
  };
450
- return function (node) { return __awaiter(_this, void 0, void 0, function () {
451
- var imageList, imageResolver, imageDatas;
452
- return __generator(this, function (_a) {
453
- switch (_a.label) {
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
- }
719
+ return (node) => __awaiter(this, void 0, void 0, function* () {
720
+ const imageList = [];
721
+ visit(node, "image", (node) => {
722
+ imageList.push(node);
478
723
  });
479
- }); };
724
+ if (imageList.length === 0) {
725
+ return node;
726
+ }
727
+ const imageResolver = opts.imageResolver;
728
+ invariant(imageResolver, "options.imageResolver is not defined.");
729
+ const imageDatas = yield Promise.all(imageList.map(({ url }) => imageResolver(url)));
730
+ images = imageList.reduce((acc, img, i) => {
731
+ acc[img.url] = imageDatas[i];
732
+ return acc;
733
+ }, {});
734
+ return node;
735
+ });
480
736
  };
481
737
 
482
738
  export { plugin as default };
739
+ //# sourceMappingURL=index.mjs.map