remark-docx 0.3.27 → 0.3.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/lib/chunk-CMqjfN_6.cjs +1 -0
  2. package/lib/index.cjs +2 -600
  3. package/lib/index.cjs.map +1 -1
  4. package/lib/index.d.ts +3 -3
  5. package/lib/index.js +468 -596
  6. package/lib/index.js.map +1 -1
  7. package/lib/mdast-util-to-docx.d.ts +2 -2
  8. package/lib/plugin.d.ts +3 -3
  9. package/lib/plugins/html/index.cjs +2 -28
  10. package/lib/plugins/html/index.cjs.map +1 -1
  11. package/lib/plugins/html/index.d.ts +1 -1
  12. package/lib/plugins/html/index.js +10 -25
  13. package/lib/plugins/html/index.js.map +1 -1
  14. package/lib/plugins/image/index.cjs +2 -129
  15. package/lib/plugins/image/index.cjs.map +1 -1
  16. package/lib/plugins/image/index.d.ts +1 -1
  17. package/lib/plugins/image/index.js +87 -124
  18. package/lib/plugins/image/index.js.map +1 -1
  19. package/lib/plugins/latex/index.cjs +2 -123
  20. package/lib/plugins/latex/index.cjs.map +1 -1
  21. package/lib/plugins/latex/index.d.ts +1 -7
  22. package/lib/plugins/latex/index.js +73 -119
  23. package/lib/plugins/latex/index.js.map +1 -1
  24. package/lib/plugins/mermaid/index.cjs +2 -77
  25. package/lib/plugins/mermaid/index.cjs.map +1 -1
  26. package/lib/plugins/mermaid/index.d.ts +1 -1
  27. package/lib/plugins/mermaid/index.js +46 -73
  28. package/lib/plugins/mermaid/index.js.map +1 -1
  29. package/lib/plugins/shiki/index.cjs +2 -113
  30. package/lib/plugins/shiki/index.cjs.map +1 -1
  31. package/lib/plugins/shiki/index.d.ts +2 -2
  32. package/lib/plugins/shiki/index.js +60 -109
  33. package/lib/plugins/shiki/index.js.map +1 -1
  34. package/lib/types.d.ts +3 -3
  35. package/lib/utils-BBifD5si.js +16 -0
  36. package/lib/utils-BBifD5si.js.map +1 -0
  37. package/lib/utils-D_YAYv4R.cjs +2 -0
  38. package/lib/utils-D_YAYv4R.cjs.map +1 -0
  39. package/package.json +6 -7
  40. package/lib/utils-BVB8aSvE.js +0 -25
  41. package/lib/utils-BVB8aSvE.js.map +0 -1
  42. package/lib/utils-KFMY7wxz.js +0 -22
  43. package/lib/utils-KFMY7wxz.js.map +0 -1
@@ -1,121 +1,75 @@
1
- import { Paragraph, XmlComponent, XmlAttributeComponent } from 'docx';
2
- import { mml2omml } from 'mathml2omml';
3
- import { XMLParser } from 'fast-xml-parser';
4
- import { mathjax } from '@mathjax/src/js/mathjax.js';
5
- import { TeX } from '@mathjax/src/js/input/tex.js';
6
- import { SerializedMmlVisitor } from '@mathjax/src/js/core/MmlTree/SerializedMmlVisitor.js';
7
- import { STATE } from '@mathjax/src/js/core/MathItem.js';
8
- import { liteAdaptor } from '@mathjax/src/js/adaptors/liteAdaptor.js';
9
- import { RegisterHTMLHandler } from '@mathjax/src/js/handlers/html.js';
10
- import { Loader } from '@mathjax/src/js/components/loader.js';
11
- import '@mathjax/src/components/js/input/tex/extensions/noerrors/noerrors.js';
12
- import '@mathjax/src/components/js/input/tex/extensions/ams/ams.js';
13
- import '@mathjax/src/components/js/input/tex/extensions/boldsymbol/boldsymbol.js';
14
- import '@mathjax/src/components/js/input/tex/extensions/newcommand/newcommand.js';
15
- import '@mathjax/src/components/js/input/tex/extensions/textmacros/textmacros.js';
16
- import '@mathjax/src/components/js/input/tex/extensions/unicode/unicode.js';
17
-
18
- // https://devblogs.microsoft.com/math-in-office/officemath/
19
- class MathAttributeComponent extends XmlAttributeComponent {
20
- }
21
- class MathXmlComponent extends XmlComponent {
22
- constructor(rootKey, children, attrs) {
23
- super(rootKey);
24
- if (attrs) {
25
- const mathAttrs = {};
26
- for (const [k, v] of Object.entries(attrs)) {
27
- if (k.startsWith("m:")) {
28
- mathAttrs[k] = v;
29
- }
30
- }
31
- this.root.push(new MathAttributeComponent(mathAttrs));
32
- }
33
- if (children.length) {
34
- this.root.push(...children);
35
- }
36
- }
37
- }
38
- const isXmlText = (o) => "#text" in o;
39
- const buildElement = (o) => {
40
- const attrs = o[":@"];
41
- let tagName = "";
42
- let children;
43
- for (const k of Object.keys(o)) {
44
- if (k !== ":@") {
45
- tagName = k;
46
- children = o[k];
47
- break;
48
- }
49
- }
50
- if (tagName.startsWith("m:")) {
51
- const mathChildren = [];
52
- for (const n of children !== null && children !== void 0 ? children : []) {
53
- if (isXmlText(n)) {
54
- const text = n["#text"];
55
- mathChildren.push(String(text));
56
- }
57
- else {
58
- const c = buildElement(n);
59
- if (c) {
60
- mathChildren.push(c);
61
- }
62
- }
63
- }
64
- return new MathXmlComponent(tagName, mathChildren, attrs);
65
- }
66
- return null;
67
- };
68
- /**
69
- * A plugin to render LaTeX inside "math" and "inlineMath" nodes
70
- */
71
- const latexPlugin = () => {
72
- // https://github.com/mathjax/MathJax-demos-node/blob/master/mjs/mixed/tex2mml
73
- // https://github.com/mathjax/MathJax-src/blob/master/components/mjs/input/tex/tex.js
74
- // https://github.com/mathjax/MathJax-src/blob/master/ts/components/startup.ts#L490
75
- // https://github.com/mathjax/MathJax-src/blob/master/testsuite/src/setupTex.ts#L162
76
- RegisterHTMLHandler(liteAdaptor());
77
- const load = [
78
- "[tex]/noerrors",
79
- "[tex]/ams",
80
- "[tex]/newcommand",
81
- "[tex]/boldsymbol",
82
- "[tex]/textmacros",
83
- "[tex]/unicode",
84
- ];
85
- const packages = ["base"].concat(load.map((name) => name.slice(6)));
86
- Loader.preLoaded(...load);
87
- const tex = new TeX({ packages });
88
- const doc = mathjax.document("", { InputJax: tex });
89
- const visitor = new SerializedMmlVisitor();
90
- const parser = new XMLParser({
91
- ignoreAttributes: false,
92
- preserveOrder: true,
93
- attributeNamePrefix: "",
94
- });
95
- const parseLatex = (value) => {
96
- const node = doc.convert(value, { end: STATE["CONVERT"] });
97
- const mathml = visitor.visitTree(node);
98
- const omml = mml2omml(mathml);
99
- const obj = parser.parse(omml);
100
- return buildElement(obj[0]);
101
- };
102
- return async () => {
103
- return {
104
- math: ({ value }) => {
105
- const math = parseLatex(value);
106
- if (!math) {
107
- return null;
108
- }
109
- return new Paragraph({
110
- children: [math],
111
- });
112
- },
113
- inlineMath: ({ value }) => {
114
- return parseLatex(value);
115
- },
116
- };
117
- };
1
+ import { Paragraph as e, XmlAttributeComponent as t, XmlComponent as n } from "docx";
2
+ import { mml2omml as r } from "mathml2omml";
3
+ import { XMLParser as i } from "fast-xml-parser";
4
+ import { mathjax as a } from "@mathjax/src/js/mathjax.js";
5
+ import { TeX as o } from "@mathjax/src/js/input/tex.js";
6
+ import { SerializedMmlVisitor as s } from "@mathjax/src/js/core/MmlTree/SerializedMmlVisitor.js";
7
+ import { STATE as c } from "@mathjax/src/js/core/MathItem.js";
8
+ import { liteAdaptor as l } from "@mathjax/src/js/adaptors/liteAdaptor.js";
9
+ import { RegisterHTMLHandler as u } from "@mathjax/src/js/handlers/html.js";
10
+ import { Loader as d } from "@mathjax/src/js/components/loader.js";
11
+ import "@mathjax/src/components/js/input/tex/extensions/noerrors/noerrors.js";
12
+ import "@mathjax/src/components/js/input/tex/extensions/ams/ams.js";
13
+ import "@mathjax/src/components/js/input/tex/extensions/boldsymbol/boldsymbol.js";
14
+ import "@mathjax/src/components/js/input/tex/extensions/newcommand/newcommand.js";
15
+ import "@mathjax/src/components/js/input/tex/extensions/textmacros/textmacros.js";
16
+ import "@mathjax/src/components/js/input/tex/extensions/unicode/unicode.js";
17
+ //#region src/plugins/latex/index.ts
18
+ var f = class extends t {}, p = class extends n {
19
+ constructor(e, t, n) {
20
+ if (super(e), n) {
21
+ let e = {};
22
+ for (let [t, r] of Object.entries(n)) t.startsWith("m:") && (e[t] = r);
23
+ this.root.push(new f(e));
24
+ }
25
+ t.length && this.root.push(...t);
26
+ }
27
+ }, m = (e) => "#text" in e, h = (e) => {
28
+ let t = e[":@"], n = "", r;
29
+ for (let t of Object.keys(e)) if (t !== ":@") {
30
+ n = t, r = e[t];
31
+ break;
32
+ }
33
+ if (n.startsWith("m:")) {
34
+ let e = [];
35
+ for (let t of r ?? []) if (m(t)) {
36
+ let n = t["#text"];
37
+ e.push(String(n));
38
+ } else {
39
+ let n = h(t);
40
+ n && e.push(n);
41
+ }
42
+ return new p(n, e, t);
43
+ }
44
+ return null;
45
+ }, g = () => {
46
+ u(l());
47
+ let t = [
48
+ "[tex]/noerrors",
49
+ "[tex]/ams",
50
+ "[tex]/newcommand",
51
+ "[tex]/boldsymbol",
52
+ "[tex]/textmacros",
53
+ "[tex]/unicode"
54
+ ], n = ["base"].concat(t.map((e) => e.slice(6)));
55
+ d.preLoaded(...t);
56
+ let f = new o({ packages: n }), p = a.document("", { InputJax: f }), m = new s(), g = new i({
57
+ ignoreAttributes: !1,
58
+ preserveOrder: !0,
59
+ attributeNamePrefix: ""
60
+ }), _ = (e) => {
61
+ let t = p.convert(e, { end: c.CONVERT }), n = r(m.visitTree(t));
62
+ return h(g.parse(n)[0]);
63
+ };
64
+ return async () => ({
65
+ math: ({ value: t }) => {
66
+ let n = _(t);
67
+ return n ? new e({ children: [n] }) : null;
68
+ },
69
+ inlineMath: ({ value: e }) => _(e)
70
+ });
118
71
  };
72
+ //#endregion
73
+ export { g as latexPlugin };
119
74
 
120
- export { latexPlugin };
121
- //# sourceMappingURL=index.js.map
75
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/plugins/latex/index.ts"],"sourcesContent":["import type { RemarkDocxPlugin } from \"../../types\";\nimport { Paragraph, XmlAttributeComponent, XmlComponent } from \"docx\";\nimport { mml2omml } from \"mathml2omml\";\nimport { XMLParser } from \"fast-xml-parser\";\nimport { mathjax } from \"@mathjax/src/js/mathjax.js\";\nimport { TeX } from \"@mathjax/src/js/input/tex.js\";\nimport { SerializedMmlVisitor } from \"@mathjax/src/js/core/MmlTree/SerializedMmlVisitor.js\";\nimport { STATE } from \"@mathjax/src/js/core/MathItem.js\";\nimport { liteAdaptor } from \"@mathjax/src/js/adaptors/liteAdaptor.js\";\nimport { RegisterHTMLHandler } from \"@mathjax/src/js/handlers/html.js\";\n// import { source } from \"@mathjax/src/components/js/source.js\";\nimport { Loader } from \"@mathjax/src/js/components/loader.js\";\nimport \"@mathjax/src/components/js/input/tex/extensions/noerrors/noerrors.js\";\nimport \"@mathjax/src/components/js/input/tex/extensions/ams/ams.js\";\nimport \"@mathjax/src/components/js/input/tex/extensions/boldsymbol/boldsymbol.js\";\nimport \"@mathjax/src/components/js/input/tex/extensions/newcommand/newcommand.js\";\nimport \"@mathjax/src/components/js/input/tex/extensions/textmacros/textmacros.js\";\nimport \"@mathjax/src/components/js/input/tex/extensions/unicode/unicode.js\";\n\n// https://devblogs.microsoft.com/math-in-office/officemath/\n\nclass MathAttributeComponent extends XmlAttributeComponent<\n Record<string, any>\n> {}\n\nclass MathXmlComponent extends XmlComponent {\n constructor(\n rootKey: string,\n children: (MathXmlComponent | string)[],\n attrs?: Record<string, any>,\n ) {\n super(rootKey);\n if (attrs) {\n const mathAttrs: Record<string, any> = {};\n for (const [k, v] of Object.entries(attrs)) {\n if (k.startsWith(\"m:\")) {\n mathAttrs[k] = v;\n }\n }\n this.root.push(new MathAttributeComponent(mathAttrs));\n }\n if (children.length) {\n this.root.push(...children);\n }\n }\n}\n\ninterface XmlText {\n \"#text\": string | number | boolean;\n}\ninterface XmlAttr {\n [key: string]: string | number | boolean;\n}\ninterface XmlElement {\n [key: string]: typeof key extends \":@\" ? XmlAttr : XmlNode[];\n}\ntype XmlNode = XmlElement | XmlText;\n\nconst isXmlText = (o: XmlNode): o is XmlText => \"#text\" in o;\n\nconst buildElement = (o: XmlElement): XmlComponent | null => {\n const attrs = o[\":@\"];\n let tagName = \"\";\n let children: XmlNode[] | undefined;\n for (const k of Object.keys(o)) {\n if (k !== \":@\") {\n tagName = k;\n children = o[k];\n break;\n }\n }\n\n if (tagName.startsWith(\"m:\")) {\n const mathChildren: (MathXmlComponent | string)[] = [];\n for (const n of children ?? []) {\n if (isXmlText(n)) {\n const text = n[\"#text\"];\n mathChildren.push(String(text));\n } else {\n const c = buildElement(n);\n if (c) {\n mathChildren.push(c);\n }\n }\n }\n return new MathXmlComponent(tagName, mathChildren, attrs);\n }\n\n return null;\n};\n\n/**\n * A plugin to render LaTeX inside \"math\" and \"inlineMath\" nodes\n */\nexport const latexPlugin = (): RemarkDocxPlugin => {\n // https://github.com/mathjax/MathJax-demos-node/blob/master/mjs/mixed/tex2mml\n // https://github.com/mathjax/MathJax-src/blob/master/components/mjs/input/tex/tex.js\n // https://github.com/mathjax/MathJax-src/blob/master/ts/components/startup.ts#L490\n // https://github.com/mathjax/MathJax-src/blob/master/testsuite/src/setupTex.ts#L162\n RegisterHTMLHandler(liteAdaptor() as any);\n\n const load = [\n \"[tex]/noerrors\",\n \"[tex]/ams\",\n \"[tex]/newcommand\",\n \"[tex]/boldsymbol\",\n \"[tex]/textmacros\",\n \"[tex]/unicode\",\n ];\n const packages = [\"base\"].concat(load.map((name) => name.slice(6)));\n Loader.preLoaded(...load);\n\n const tex = new TeX({ packages });\n const doc = mathjax.document(\"\", { InputJax: tex });\n const visitor = new SerializedMmlVisitor();\n\n const parser = new XMLParser({\n ignoreAttributes: false,\n preserveOrder: true,\n attributeNamePrefix: \"\",\n });\n\n const parseLatex = (value: string): XmlComponent | null => {\n const node = doc.convert(value, { end: STATE[\"CONVERT\"] });\n const mathml = visitor.visitTree(node);\n const omml = mml2omml(mathml);\n const obj = parser.parse(omml);\n return buildElement(obj[0]);\n };\n\n return async () => {\n return {\n math: ({ value }) => {\n const math = parseLatex(value);\n if (!math) {\n return null;\n }\n return new Paragraph({\n children: [math],\n });\n },\n inlineMath: ({ value }) => {\n return parseLatex(value);\n },\n };\n };\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAmBA;AAEA,MAAM,sBAAuB,SAAQ,qBAEpC,CAAA;AAAG;AAEJ,MAAM,gBAAiB,SAAQ,YAAY,CAAA;AACzC,IAAA,WAAA,CACE,OAAe,EACf,QAAuC,EACvC,KAA2B,EAAA;QAE3B,KAAK,CAAC,OAAO,CAAC;QACd,IAAI,KAAK,EAAE;YACT,MAAM,SAAS,GAAwB,EAAE;AACzC,YAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACtB,oBAAA,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;gBAClB;YACF;YACA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACvD;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;QAC7B;IACF;AACD;AAaD,MAAM,SAAS,GAAG,CAAC,CAAU,KAAmB,OAAO,IAAI,CAAC;AAE5D,MAAM,YAAY,GAAG,CAAC,CAAa,KAAyB;AAC1D,IAAA,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;IACrB,IAAI,OAAO,GAAG,EAAE;AAChB,IAAA,IAAI,QAA+B;IACnC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAC9B,QAAA,IAAI,CAAC,KAAK,IAAI,EAAE;YACd,OAAO,GAAG,CAAC;AACX,YAAA,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;YACf;QACF;IACF;AAEA,IAAA,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QAC5B,MAAM,YAAY,GAAkC,EAAE;QACtD,KAAK,MAAM,CAAC,IAAI,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAR,QAAQ,GAAI,EAAE,EAAE;AAC9B,YAAA,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;AAChB,gBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;gBACvB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC;iBAAO;AACL,gBAAA,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,EAAE;AACL,oBAAA,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtB;YACF;QACF;QACA,OAAO,IAAI,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC;IAC3D;AAEA,IAAA,OAAO,IAAI;AACb,CAAC;AAED;;AAEG;AACI,MAAM,WAAW,GAAG,MAAuB;;;;;AAKhD,IAAA,mBAAmB,CAAC,WAAW,EAAS,CAAC;AAEzC,IAAA,MAAM,IAAI,GAAG;QACX,gBAAgB;QAChB,WAAW;QACX,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,eAAe;KAChB;IACD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,IAAA,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAEzB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;AACjC,IAAA,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AACnD,IAAA,MAAM,OAAO,GAAG,IAAI,oBAAoB,EAAE;AAE1C,IAAA,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;AAC3B,QAAA,gBAAgB,EAAE,KAAK;AACvB,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,mBAAmB,EAAE,EAAE;AACxB,KAAA,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG,CAAC,KAAa,KAAyB;AACxD,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;AACtC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9B,QAAA,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7B,IAAA,CAAC;IAED,OAAO,YAAW;QAChB,OAAO;AACL,YAAA,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAI;AAClB,gBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;gBAC9B,IAAI,CAAC,IAAI,EAAE;AACT,oBAAA,OAAO,IAAI;gBACb;gBACA,OAAO,IAAI,SAAS,CAAC;oBACnB,QAAQ,EAAE,CAAC,IAAI,CAAC;AACjB,iBAAA,CAAC;YACJ,CAAC;AACD,YAAA,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,KAAI;AACxB,gBAAA,OAAO,UAAU,CAAC,KAAK,CAAC;YAC1B,CAAC;SACF;AACH,IAAA,CAAC;AACH;;;;"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/plugins/latex/index.ts"],"sourcesContent":["import type { RemarkDocxPlugin } from \"../../types\";\nimport { Paragraph, XmlAttributeComponent, XmlComponent } from \"docx\";\nimport { mml2omml } from \"mathml2omml\";\nimport { XMLParser } from \"fast-xml-parser\";\nimport { mathjax } from \"@mathjax/src/js/mathjax.js\";\nimport { TeX } from \"@mathjax/src/js/input/tex.js\";\nimport { SerializedMmlVisitor } from \"@mathjax/src/js/core/MmlTree/SerializedMmlVisitor.js\";\nimport { STATE } from \"@mathjax/src/js/core/MathItem.js\";\nimport { liteAdaptor } from \"@mathjax/src/js/adaptors/liteAdaptor.js\";\nimport { RegisterHTMLHandler } from \"@mathjax/src/js/handlers/html.js\";\n// import { source } from \"@mathjax/src/components/js/source.js\";\nimport { Loader } from \"@mathjax/src/js/components/loader.js\";\nimport \"@mathjax/src/components/js/input/tex/extensions/noerrors/noerrors.js\";\nimport \"@mathjax/src/components/js/input/tex/extensions/ams/ams.js\";\nimport \"@mathjax/src/components/js/input/tex/extensions/boldsymbol/boldsymbol.js\";\nimport \"@mathjax/src/components/js/input/tex/extensions/newcommand/newcommand.js\";\nimport \"@mathjax/src/components/js/input/tex/extensions/textmacros/textmacros.js\";\nimport \"@mathjax/src/components/js/input/tex/extensions/unicode/unicode.js\";\n\n// https://devblogs.microsoft.com/math-in-office/officemath/\n\nclass MathAttributeComponent extends XmlAttributeComponent<\n Record<string, any>\n> {}\n\nclass MathXmlComponent extends XmlComponent {\n constructor(\n rootKey: string,\n children: (MathXmlComponent | string)[],\n attrs?: Record<string, any>,\n ) {\n super(rootKey);\n if (attrs) {\n const mathAttrs: Record<string, any> = {};\n for (const [k, v] of Object.entries(attrs)) {\n if (k.startsWith(\"m:\")) {\n mathAttrs[k] = v;\n }\n }\n this.root.push(new MathAttributeComponent(mathAttrs));\n }\n if (children.length) {\n this.root.push(...children);\n }\n }\n}\n\ninterface XmlText {\n \"#text\": string | number | boolean;\n}\ninterface XmlAttr {\n [key: string]: string | number | boolean;\n}\ninterface XmlElement {\n [key: string]: typeof key extends \":@\" ? XmlAttr : XmlNode[];\n}\ntype XmlNode = XmlElement | XmlText;\n\nconst isXmlText = (o: XmlNode): o is XmlText => \"#text\" in o;\n\nconst buildElement = (o: XmlElement): XmlComponent | null => {\n const attrs = o[\":@\"];\n let tagName = \"\";\n let children: XmlNode[] | undefined;\n for (const k of Object.keys(o)) {\n if (k !== \":@\") {\n tagName = k;\n children = o[k];\n break;\n }\n }\n\n if (tagName.startsWith(\"m:\")) {\n const mathChildren: (MathXmlComponent | string)[] = [];\n for (const n of children ?? []) {\n if (isXmlText(n)) {\n const text = n[\"#text\"];\n mathChildren.push(String(text));\n } else {\n const c = buildElement(n);\n if (c) {\n mathChildren.push(c);\n }\n }\n }\n return new MathXmlComponent(tagName, mathChildren, attrs);\n }\n\n return null;\n};\n\n/**\n * A plugin to render LaTeX inside \"math\" and \"inlineMath\" nodes\n */\nexport const latexPlugin = (): RemarkDocxPlugin => {\n // https://github.com/mathjax/MathJax-demos-node/blob/master/mjs/mixed/tex2mml\n // https://github.com/mathjax/MathJax-src/blob/master/components/mjs/input/tex/tex.js\n // https://github.com/mathjax/MathJax-src/blob/master/ts/components/startup.ts#L490\n // https://github.com/mathjax/MathJax-src/blob/master/testsuite/src/setupTex.ts#L162\n RegisterHTMLHandler(liteAdaptor() as any);\n\n const load = [\n \"[tex]/noerrors\",\n \"[tex]/ams\",\n \"[tex]/newcommand\",\n \"[tex]/boldsymbol\",\n \"[tex]/textmacros\",\n \"[tex]/unicode\",\n ];\n const packages = [\"base\"].concat(load.map((name) => name.slice(6)));\n Loader.preLoaded(...load);\n\n const tex = new TeX({ packages });\n const doc = mathjax.document(\"\", { InputJax: tex });\n const visitor = new SerializedMmlVisitor();\n\n const parser = new XMLParser({\n ignoreAttributes: false,\n preserveOrder: true,\n attributeNamePrefix: \"\",\n });\n\n const parseLatex = (value: string): XmlComponent | null => {\n const node = doc.convert(value, { end: STATE[\"CONVERT\"] });\n const mathml = visitor.visitTree(node);\n const omml = mml2omml(mathml);\n const obj = parser.parse(omml);\n return buildElement(obj[0]);\n };\n\n return async () => {\n return {\n math: ({ value }) => {\n const math = parseLatex(value);\n if (!math) {\n return null;\n }\n return new Paragraph({\n children: [math],\n });\n },\n inlineMath: ({ value }) => {\n return parseLatex(value);\n },\n };\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAqBA,IAAM,IAAN,cAAqC,EAEnC,CAAC,GAEG,IAAN,cAA+B,EAAa;CAC1C,YACE,GACA,GACA,GACA;EAEA,IADA,MAAM,CAAO,GACT,GAAO;GACT,IAAM,IAAiC,CAAC;GACxC,KAAK,IAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,CAAK,GACvC,AAAI,EAAE,WAAW,IAAI,MACnB,EAAU,KAAK;GAGnB,KAAK,KAAK,KAAK,IAAI,EAAuB,CAAS,CAAC;EACtD;EACA,AAAI,EAAS,UACX,KAAK,KAAK,KAAK,GAAG,CAAQ;CAE9B;AACF,GAaM,KAAa,MAA6B,WAAW,GAErD,KAAgB,MAAuC;CAC3D,IAAM,IAAQ,EAAE,OACZ,IAAU,IACV;CACJ,KAAK,IAAM,KAAK,OAAO,KAAK,CAAC,GAC3B,IAAI,MAAM,MAAM;EAEd,AADA,IAAU,GACV,IAAW,EAAE;EACb;CACF;CAGF,IAAI,EAAQ,WAAW,IAAI,GAAG;EAC5B,IAAM,IAA8C,CAAC;EACrD,KAAK,IAAM,KAAK,KAAY,CAAC,GAC3B,IAAI,EAAU,CAAC,GAAG;GAChB,IAAM,IAAO,EAAE;GACf,EAAa,KAAK,OAAO,CAAI,CAAC;EAChC,OAAO;GACL,IAAM,IAAI,EAAa,CAAC;GACxB,AAAI,KACF,EAAa,KAAK,CAAC;EAEvB;EAEF,OAAO,IAAI,EAAiB,GAAS,GAAc,CAAK;CAC1D;CAEA,OAAO;AACT,GAKa,UAAsC;CAKjD,EAAoB,EAAY,CAAQ;CAExC,IAAM,IAAO;EACX;EACA;EACA;EACA;EACA;EACA;CACF,GACM,IAAW,CAAC,MAAM,EAAE,OAAO,EAAK,KAAK,MAAS,EAAK,MAAM,CAAC,CAAC,CAAC;CAClE,EAAO,UAAU,GAAG,CAAI;CAExB,IAAM,IAAM,IAAI,EAAI,EAAE,YAAS,CAAC,GAC1B,IAAM,EAAQ,SAAS,IAAI,EAAE,UAAU,EAAI,CAAC,GAC5C,IAAU,IAAI,EAAqB,GAEnC,IAAS,IAAI,EAAU;EAC3B,kBAAkB;EAClB,eAAe;EACf,qBAAqB;CACvB,CAAC,GAEK,KAAc,MAAuC;EACzD,IAAM,IAAO,EAAI,QAAQ,GAAO,EAAE,KAAK,EAAM,QAAW,CAAC,GAEnD,IAAO,EADE,EAAQ,UAAU,CACX,CAAM;EAE5B,OAAO,EADK,EAAO,MAAM,CACL,EAAI,EAAE;CAC5B;CAEA,OAAO,aACE;EACL,OAAO,EAAE,eAAY;GACnB,IAAM,IAAO,EAAW,CAAK;GAI7B,OAHK,IAGE,IAAI,EAAU,EACnB,UAAU,CAAC,CAAI,EACjB,CAAC,IAJQ;EAKX;EACA,aAAa,EAAE,eACN,EAAW,CAAK;CAE3B;AAEJ"}
@@ -1,77 +1,2 @@
1
- 'use strict';
2
-
3
- var utils = require('../../utils-BVB8aSvE.js');
4
- var mermaid = require('mermaid');
5
- var unistUtilVisit = require('unist-util-visit');
6
- var imageSize = require('image-size');
7
- var plugins_image_index = require('../image/index.cjs');
8
- var docx = require('docx');
9
-
10
- const browserRender = async (value) => {
11
- const element = document.createElement("div");
12
- element.style.visibility = "hidden";
13
- document.body.appendChild(element);
14
- try {
15
- const result = await mermaid.render("mermaid", value, element);
16
- return result.svg;
17
- }
18
- finally {
19
- document.body.removeChild(element);
20
- }
21
- };
22
- /**
23
- * A plugin to render Mermaid inside "code" nodes with "mermaid" language.
24
- */
25
- const mermaidPlugin = () => {
26
- const renderSvg = browserRender;
27
- return async ({ root, images }) => {
28
- const promises = [];
29
- unistUtilVisit.visit(root, "code", ({ lang, value }) => {
30
- if (lang === "mermaid") {
31
- if (!images.has(value)) {
32
- images.set(value, null);
33
- promises.push((async () => {
34
- try {
35
- const svg = await renderSvg(value);
36
- const data = new TextEncoder().encode(svg);
37
- const { width, height } = imageSize.imageSize(data);
38
- const pngBuffer = await plugins_image_index.browserSvgToPng({
39
- buffer: data.buffer,
40
- width,
41
- height,
42
- });
43
- images.set(value, {
44
- type: "svg",
45
- width,
46
- height,
47
- data: data.buffer,
48
- fallback: pngBuffer,
49
- });
50
- }
51
- catch (e) {
52
- utils.warnOnce(String(e));
53
- }
54
- })());
55
- }
56
- }
57
- });
58
- await Promise.all(promises);
59
- return {
60
- code: ({ lang, value }, ctx) => {
61
- if (lang !== "mermaid") {
62
- return null;
63
- }
64
- const image = ctx.images.get(value);
65
- if (image == null) {
66
- return null;
67
- }
68
- return new docx.Paragraph({
69
- children: ctx.render([{ type: "image", url: value }]),
70
- });
71
- },
72
- };
73
- };
74
- };
75
-
76
- exports.mermaidPlugin = mermaidPlugin;
77
- //# sourceMappingURL=index.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../chunk-CMqjfN_6.cjs"),t=require("../../utils-D_YAYv4R.cjs"),n=require("../image/index.cjs");let r=require("docx"),i=require("unist-util-visit"),a=require("mermaid");a=e.t(a,1);let o=require("image-size");var s=async e=>{let t=document.createElement(`div`);t.style.visibility=`hidden`,document.body.appendChild(t);try{return(await a.default.render(`mermaid`,e,t)).svg}finally{document.body.removeChild(t)}},c=()=>{let e=s;return async({root:a,images:s})=>{let c=[];return(0,i.visit)(a,`code`,({lang:r,value:i})=>{r===`mermaid`&&(s.has(i)||(s.set(i,null),c.push((async()=>{try{let t=await e(i),r=new TextEncoder().encode(t),{width:a,height:c}=(0,o.imageSize)(r),l=await n.browserSvgToPng({buffer:r.buffer,width:a,height:c});s.set(i,{type:`svg`,width:a,height:c,data:r.buffer,fallback:l})}catch(e){t.n(String(e))}})())))}),await Promise.all(c),{code:({lang:e,value:t},n)=>e!==`mermaid`||n.images.get(t)==null?null:new r.Paragraph({children:n.render([{type:`image`,url:t}])})}}};exports.mermaidPlugin=c;
2
+ //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/plugins/mermaid/index.ts"],"sourcesContent":["import type { RemarkDocxPlugin } from \"../../types\";\nimport { warnOnce } from \"../../utils\";\nimport mermaid from \"mermaid\";\nimport { visit } from \"unist-util-visit\";\nimport { imageSize } from \"image-size\";\nimport { browserSvgToPng } from \"../image\";\nimport { Paragraph } from \"docx\";\n\nconst browserRender = async (value: string): Promise<string> => {\n const element = document.createElement(\"div\");\n element.style.visibility = \"hidden\";\n document.body.appendChild(element);\n try {\n const result = await mermaid.render(\"mermaid\", value, element);\n return result.svg;\n } finally {\n document.body.removeChild(element);\n }\n};\n\n/**\n * A plugin to render Mermaid inside \"code\" nodes with \"mermaid\" language.\n */\nexport const mermaidPlugin = (): RemarkDocxPlugin => {\n const renderSvg = browserRender;\n\n return async ({ root, images }) => {\n const promises: Promise<void>[] = [];\n visit(root, \"code\", ({ lang, value }) => {\n if (lang === \"mermaid\") {\n if (!images.has(value)) {\n images.set(value, null);\n\n promises.push(\n (async () => {\n try {\n const svg = await renderSvg(value);\n const data = new TextEncoder().encode(svg);\n const { width, height } = imageSize(data);\n const pngBuffer = await browserSvgToPng({\n buffer: data.buffer,\n width,\n height,\n });\n\n images.set(value, {\n type: \"svg\",\n width,\n height,\n data: data.buffer,\n fallback: pngBuffer,\n });\n } catch (e) {\n warnOnce(String(e));\n }\n })(),\n );\n }\n }\n });\n\n await Promise.all(promises);\n\n return {\n code: ({ lang, value }, ctx) => {\n if (lang !== \"mermaid\") {\n return null;\n }\n const image = ctx.images.get(value);\n if (image == null) {\n return null;\n }\n\n return new Paragraph({\n children: ctx.render([{ type: \"image\", url: value }]),\n });\n },\n };\n };\n};\n"],"names":["visit","imageSize","browserSvgToPng","warnOnce","Paragraph"],"mappings":";;;;;;;;;AAQA,MAAM,aAAa,GAAG,OAAO,KAAa,KAAqB;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,IAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;AACnC,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAClC,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC;QAC9D,OAAO,MAAM,CAAC,GAAG;IACnB;YAAU;AACR,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IACpC;AACF,CAAC;AAED;;AAEG;AACI,MAAM,aAAa,GAAG,MAAuB;IAClD,MAAM,SAAS,GAAG,aAAa;IAE/B,OAAO,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAI;QAChC,MAAM,QAAQ,GAAoB,EAAE;AACpC,QAAAA,oBAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAI;AACtC,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACtB,oBAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;AAEvB,oBAAA,QAAQ,CAAC,IAAI,CACX,CAAC,YAAW;AACV,wBAAA,IAAI;AACF,4BAAA,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC;4BAClC,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;4BAC1C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAGC,mBAAS,CAAC,IAAI,CAAC;AACzC,4BAAA,MAAM,SAAS,GAAG,MAAMC,mCAAe,CAAC;gCACtC,MAAM,EAAE,IAAI,CAAC,MAAM;gCACnB,KAAK;gCACL,MAAM;AACP,6BAAA,CAAC;AAEF,4BAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;AAChB,gCAAA,IAAI,EAAE,KAAK;gCACX,KAAK;gCACL,MAAM;gCACN,IAAI,EAAE,IAAI,CAAC,MAAM;AACjB,gCAAA,QAAQ,EAAE,SAAS;AACpB,6BAAA,CAAC;wBACJ;wBAAE,OAAO,CAAC,EAAE;AACV,4BAAAC,cAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBACrB;oBACF,CAAC,GAAG,CACL;gBACH;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAE3B,OAAO;YACL,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,KAAI;AAC7B,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,oBAAA,OAAO,IAAI;gBACb;gBACA,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC,gBAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,oBAAA,OAAO,IAAI;gBACb;gBAEA,OAAO,IAAIC,cAAS,CAAC;AACnB,oBAAA,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,iBAAA,CAAC;YACJ,CAAC;SACF;AACH,IAAA,CAAC;AACH;;;;"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/plugins/mermaid/index.ts"],"sourcesContent":["import type { RemarkDocxPlugin } from \"../../types\";\nimport { warnOnce } from \"../../utils\";\nimport mermaid from \"mermaid\";\nimport { visit } from \"unist-util-visit\";\nimport { imageSize } from \"image-size\";\nimport { browserSvgToPng } from \"../image\";\nimport { Paragraph } from \"docx\";\n\nconst browserRender = async (value: string): Promise<string> => {\n const element = document.createElement(\"div\");\n element.style.visibility = \"hidden\";\n document.body.appendChild(element);\n try {\n const result = await mermaid.render(\"mermaid\", value, element);\n return result.svg;\n } finally {\n document.body.removeChild(element);\n }\n};\n\n/**\n * A plugin to render Mermaid inside \"code\" nodes with \"mermaid\" language.\n */\nexport const mermaidPlugin = (): RemarkDocxPlugin => {\n const renderSvg = browserRender;\n\n return async ({ root, images }) => {\n const promises: Promise<void>[] = [];\n visit(root, \"code\", ({ lang, value }) => {\n if (lang === \"mermaid\") {\n if (!images.has(value)) {\n images.set(value, null);\n\n promises.push(\n (async () => {\n try {\n const svg = await renderSvg(value);\n const data = new TextEncoder().encode(svg);\n const { width, height } = imageSize(data);\n const pngBuffer = await browserSvgToPng({\n buffer: data.buffer,\n width,\n height,\n });\n\n images.set(value, {\n type: \"svg\",\n width,\n height,\n data: data.buffer,\n fallback: pngBuffer,\n });\n } catch (e) {\n warnOnce(String(e));\n }\n })(),\n );\n }\n }\n });\n\n await Promise.all(promises);\n\n return {\n code: ({ lang, value }, ctx) => {\n if (lang !== \"mermaid\") {\n return null;\n }\n const image = ctx.images.get(value);\n if (image == null) {\n return null;\n }\n\n return new Paragraph({\n children: ctx.render([{ type: \"image\", url: value }]),\n });\n },\n };\n };\n};\n"],"mappings":"qSAQA,IAAM,EAAgB,KAAO,IAAmC,CAC9D,IAAM,EAAU,SAAS,cAAc,KAAK,EAC5C,EAAQ,MAAM,WAAa,SAC3B,SAAS,KAAK,YAAY,CAAO,EACjC,GAAI,CAEF,OAAO,MADc,EAAA,QAAQ,OAAO,UAAW,EAAO,CAAO,GAC/C,GAChB,QAAU,CACR,SAAS,KAAK,YAAY,CAAO,CACnC,CACF,EAKa,MAAwC,CACnD,IAAM,EAAY,EAElB,OAAO,MAAO,CAAE,OAAM,YAAa,CACjC,IAAM,EAA4B,CAAC,EAoCnC,OAnCA,EAAA,EAAA,OAAM,EAAM,QAAS,CAAE,OAAM,WAAY,CACnC,IAAS,YACN,EAAO,IAAI,CAAK,IACnB,EAAO,IAAI,EAAO,IAAI,EAEtB,EAAS,MACN,SAAY,CACX,GAAI,CACF,IAAM,EAAM,MAAM,EAAU,CAAK,EAC3B,EAAO,IAAI,YAAY,EAAE,OAAO,CAAG,EACnC,CAAE,QAAO,WAAA,EAAA,EAAA,WAAqB,CAAI,EAClC,EAAY,MAAM,EAAA,gBAAgB,CACtC,OAAQ,EAAK,OACb,QACA,QACF,CAAC,EAED,EAAO,IAAI,EAAO,CAChB,KAAM,MACN,QACA,SACA,KAAM,EAAK,OACX,SAAU,CACZ,CAAC,CACH,OAAS,EAAG,CACV,EAAA,EAAS,OAAO,CAAC,CAAC,CACpB,CACF,GAAG,CACL,GAGN,CAAC,EAED,MAAM,QAAQ,IAAI,CAAQ,EAEnB,CACL,MAAO,CAAE,OAAM,SAAS,IAClB,IAAS,WAGC,EAAI,OAAO,IAAI,CACzB,GAAS,KACJ,KAGF,IAAI,EAAA,UAAU,CACnB,SAAU,EAAI,OAAO,CAAC,CAAE,KAAM,QAAS,IAAK,CAAM,CAAC,CAAC,CACtD,CAAC,CAEL,CACF,CACF"}
@@ -1,4 +1,4 @@
1
- import type { RemarkDocxPlugin } from "../../types";
1
+ import { RemarkDocxPlugin } from '../../types';
2
2
  /**
3
3
  * A plugin to render Mermaid inside "code" nodes with "mermaid" language.
4
4
  */
@@ -1,75 +1,48 @@
1
- import { w as warnOnce } from '../../utils-KFMY7wxz.js';
2
- import mermaid from 'mermaid';
3
- import { visit } from 'unist-util-visit';
4
- import { imageSize } from 'image-size';
5
- import { browserSvgToPng } from '../image/index.js';
6
- import { Paragraph } from 'docx';
7
-
8
- const browserRender = async (value) => {
9
- const element = document.createElement("div");
10
- element.style.visibility = "hidden";
11
- document.body.appendChild(element);
12
- try {
13
- const result = await mermaid.render("mermaid", value, element);
14
- return result.svg;
15
- }
16
- finally {
17
- document.body.removeChild(element);
18
- }
19
- };
20
- /**
21
- * A plugin to render Mermaid inside "code" nodes with "mermaid" language.
22
- */
23
- const mermaidPlugin = () => {
24
- const renderSvg = browserRender;
25
- return async ({ root, images }) => {
26
- const promises = [];
27
- visit(root, "code", ({ lang, value }) => {
28
- if (lang === "mermaid") {
29
- if (!images.has(value)) {
30
- images.set(value, null);
31
- promises.push((async () => {
32
- try {
33
- const svg = await renderSvg(value);
34
- const data = new TextEncoder().encode(svg);
35
- const { width, height } = imageSize(data);
36
- const pngBuffer = await browserSvgToPng({
37
- buffer: data.buffer,
38
- width,
39
- height,
40
- });
41
- images.set(value, {
42
- type: "svg",
43
- width,
44
- height,
45
- data: data.buffer,
46
- fallback: pngBuffer,
47
- });
48
- }
49
- catch (e) {
50
- warnOnce(String(e));
51
- }
52
- })());
53
- }
54
- }
55
- });
56
- await Promise.all(promises);
57
- return {
58
- code: ({ lang, value }, ctx) => {
59
- if (lang !== "mermaid") {
60
- return null;
61
- }
62
- const image = ctx.images.get(value);
63
- if (image == null) {
64
- return null;
65
- }
66
- return new Paragraph({
67
- children: ctx.render([{ type: "image", url: value }]),
68
- });
69
- },
70
- };
71
- };
1
+ import { n as e } from "../../utils-BBifD5si.js";
2
+ import { browserSvgToPng as t } from "../image/index.js";
3
+ import { Paragraph as n } from "docx";
4
+ import { visit as r } from "unist-util-visit";
5
+ import i from "mermaid";
6
+ import { imageSize as a } from "image-size";
7
+ //#region src/plugins/mermaid/index.ts
8
+ var o = async (e) => {
9
+ let t = document.createElement("div");
10
+ t.style.visibility = "hidden", document.body.appendChild(t);
11
+ try {
12
+ return (await i.render("mermaid", e, t)).svg;
13
+ } finally {
14
+ document.body.removeChild(t);
15
+ }
16
+ }, s = () => {
17
+ let i = o;
18
+ return async ({ root: o, images: s }) => {
19
+ let c = [];
20
+ return r(o, "code", ({ lang: n, value: r }) => {
21
+ n === "mermaid" && (s.has(r) || (s.set(r, null), c.push((async () => {
22
+ try {
23
+ let e = await i(r), n = new TextEncoder().encode(e), { width: o, height: c } = a(n), l = await t({
24
+ buffer: n.buffer,
25
+ width: o,
26
+ height: c
27
+ });
28
+ s.set(r, {
29
+ type: "svg",
30
+ width: o,
31
+ height: c,
32
+ data: n.buffer,
33
+ fallback: l
34
+ });
35
+ } catch (t) {
36
+ e(String(t));
37
+ }
38
+ })())));
39
+ }), await Promise.all(c), { code: ({ lang: e, value: t }, r) => e !== "mermaid" || r.images.get(t) == null ? null : new n({ children: r.render([{
40
+ type: "image",
41
+ url: t
42
+ }]) }) };
43
+ };
72
44
  };
45
+ //#endregion
46
+ export { s as mermaidPlugin };
73
47
 
74
- export { mermaidPlugin };
75
- //# sourceMappingURL=index.js.map
48
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/plugins/mermaid/index.ts"],"sourcesContent":["import type { RemarkDocxPlugin } from \"../../types\";\nimport { warnOnce } from \"../../utils\";\nimport mermaid from \"mermaid\";\nimport { visit } from \"unist-util-visit\";\nimport { imageSize } from \"image-size\";\nimport { browserSvgToPng } from \"../image\";\nimport { Paragraph } from \"docx\";\n\nconst browserRender = async (value: string): Promise<string> => {\n const element = document.createElement(\"div\");\n element.style.visibility = \"hidden\";\n document.body.appendChild(element);\n try {\n const result = await mermaid.render(\"mermaid\", value, element);\n return result.svg;\n } finally {\n document.body.removeChild(element);\n }\n};\n\n/**\n * A plugin to render Mermaid inside \"code\" nodes with \"mermaid\" language.\n */\nexport const mermaidPlugin = (): RemarkDocxPlugin => {\n const renderSvg = browserRender;\n\n return async ({ root, images }) => {\n const promises: Promise<void>[] = [];\n visit(root, \"code\", ({ lang, value }) => {\n if (lang === \"mermaid\") {\n if (!images.has(value)) {\n images.set(value, null);\n\n promises.push(\n (async () => {\n try {\n const svg = await renderSvg(value);\n const data = new TextEncoder().encode(svg);\n const { width, height } = imageSize(data);\n const pngBuffer = await browserSvgToPng({\n buffer: data.buffer,\n width,\n height,\n });\n\n images.set(value, {\n type: \"svg\",\n width,\n height,\n data: data.buffer,\n fallback: pngBuffer,\n });\n } catch (e) {\n warnOnce(String(e));\n }\n })(),\n );\n }\n }\n });\n\n await Promise.all(promises);\n\n return {\n code: ({ lang, value }, ctx) => {\n if (lang !== \"mermaid\") {\n return null;\n }\n const image = ctx.images.get(value);\n if (image == null) {\n return null;\n }\n\n return new Paragraph({\n children: ctx.render([{ type: \"image\", url: value }]),\n });\n },\n };\n };\n};\n"],"names":[],"mappings":";;;;;;;AAQA,MAAM,aAAa,GAAG,OAAO,KAAa,KAAqB;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,IAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;AACnC,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAClC,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC;QAC9D,OAAO,MAAM,CAAC,GAAG;IACnB;YAAU;AACR,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IACpC;AACF,CAAC;AAED;;AAEG;AACI,MAAM,aAAa,GAAG,MAAuB;IAClD,MAAM,SAAS,GAAG,aAAa;IAE/B,OAAO,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAI;QAChC,MAAM,QAAQ,GAAoB,EAAE;AACpC,QAAA,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAI;AACtC,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACtB,oBAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;AAEvB,oBAAA,QAAQ,CAAC,IAAI,CACX,CAAC,YAAW;AACV,wBAAA,IAAI;AACF,4BAAA,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC;4BAClC,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;4BAC1C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC;AACzC,4BAAA,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC;gCACtC,MAAM,EAAE,IAAI,CAAC,MAAM;gCACnB,KAAK;gCACL,MAAM;AACP,6BAAA,CAAC;AAEF,4BAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;AAChB,gCAAA,IAAI,EAAE,KAAK;gCACX,KAAK;gCACL,MAAM;gCACN,IAAI,EAAE,IAAI,CAAC,MAAM;AACjB,gCAAA,QAAQ,EAAE,SAAS;AACpB,6BAAA,CAAC;wBACJ;wBAAE,OAAO,CAAC,EAAE;AACV,4BAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBACrB;oBACF,CAAC,GAAG,CACL;gBACH;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAE3B,OAAO;YACL,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,KAAI;AAC7B,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,oBAAA,OAAO,IAAI;gBACb;gBACA,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC,gBAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,oBAAA,OAAO,IAAI;gBACb;gBAEA,OAAO,IAAI,SAAS,CAAC;AACnB,oBAAA,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,iBAAA,CAAC;YACJ,CAAC;SACF;AACH,IAAA,CAAC;AACH;;;;"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/plugins/mermaid/index.ts"],"sourcesContent":["import type { RemarkDocxPlugin } from \"../../types\";\nimport { warnOnce } from \"../../utils\";\nimport mermaid from \"mermaid\";\nimport { visit } from \"unist-util-visit\";\nimport { imageSize } from \"image-size\";\nimport { browserSvgToPng } from \"../image\";\nimport { Paragraph } from \"docx\";\n\nconst browserRender = async (value: string): Promise<string> => {\n const element = document.createElement(\"div\");\n element.style.visibility = \"hidden\";\n document.body.appendChild(element);\n try {\n const result = await mermaid.render(\"mermaid\", value, element);\n return result.svg;\n } finally {\n document.body.removeChild(element);\n }\n};\n\n/**\n * A plugin to render Mermaid inside \"code\" nodes with \"mermaid\" language.\n */\nexport const mermaidPlugin = (): RemarkDocxPlugin => {\n const renderSvg = browserRender;\n\n return async ({ root, images }) => {\n const promises: Promise<void>[] = [];\n visit(root, \"code\", ({ lang, value }) => {\n if (lang === \"mermaid\") {\n if (!images.has(value)) {\n images.set(value, null);\n\n promises.push(\n (async () => {\n try {\n const svg = await renderSvg(value);\n const data = new TextEncoder().encode(svg);\n const { width, height } = imageSize(data);\n const pngBuffer = await browserSvgToPng({\n buffer: data.buffer,\n width,\n height,\n });\n\n images.set(value, {\n type: \"svg\",\n width,\n height,\n data: data.buffer,\n fallback: pngBuffer,\n });\n } catch (e) {\n warnOnce(String(e));\n }\n })(),\n );\n }\n }\n });\n\n await Promise.all(promises);\n\n return {\n code: ({ lang, value }, ctx) => {\n if (lang !== \"mermaid\") {\n return null;\n }\n const image = ctx.images.get(value);\n if (image == null) {\n return null;\n }\n\n return new Paragraph({\n children: ctx.render([{ type: \"image\", url: value }]),\n });\n },\n };\n };\n};\n"],"mappings":";;;;;;;AAQA,IAAM,IAAgB,OAAO,MAAmC;CAC9D,IAAM,IAAU,SAAS,cAAc,KAAK;CAE5C,AADA,EAAQ,MAAM,aAAa,UAC3B,SAAS,KAAK,YAAY,CAAO;CACjC,IAAI;EAEF,QAAO,MADc,EAAQ,OAAO,WAAW,GAAO,CAAO,GAC/C;CAChB,UAAU;EACR,SAAS,KAAK,YAAY,CAAO;CACnC;AACF,GAKa,UAAwC;CACnD,IAAM,IAAY;CAElB,OAAO,OAAO,EAAE,SAAM,gBAAa;EACjC,IAAM,IAA4B,CAAC;EAoCnC,OAnCA,EAAM,GAAM,SAAS,EAAE,SAAM,eAAY;GACvC,AAAI,MAAS,cACN,EAAO,IAAI,CAAK,MACnB,EAAO,IAAI,GAAO,IAAI,GAEtB,EAAS,MACN,YAAY;IACX,IAAI;KACF,IAAM,IAAM,MAAM,EAAU,CAAK,GAC3B,IAAO,IAAI,YAAY,EAAE,OAAO,CAAG,GACnC,EAAE,UAAO,cAAW,EAAU,CAAI,GAClC,IAAY,MAAM,EAAgB;MACtC,QAAQ,EAAK;MACb;MACA;KACF,CAAC;KAED,EAAO,IAAI,GAAO;MAChB,MAAM;MACN;MACA;MACA,MAAM,EAAK;MACX,UAAU;KACZ,CAAC;IACH,SAAS,GAAG;KACV,EAAS,OAAO,CAAC,CAAC;IACpB;GACF,GAAG,CACL;EAGN,CAAC,GAED,MAAM,QAAQ,IAAI,CAAQ,GAEnB,EACL,OAAO,EAAE,SAAM,YAAS,MAClB,MAAS,aAGC,EAAI,OAAO,IAAI,CACzB,KAAS,OACJ,OAGF,IAAI,EAAU,EACnB,UAAU,EAAI,OAAO,CAAC;GAAE,MAAM;GAAS,KAAK;EAAM,CAAC,CAAC,EACtD,CAAC,EAEL;CACF;AACF"}
@@ -1,113 +1,2 @@
1
- 'use strict';
2
-
3
- var docx = require('docx');
4
- var shiki = require('shiki');
5
- var unistUtilVisit = require('unist-util-visit');
6
- var utils = require('../../utils-BVB8aSvE.js');
7
-
8
- /**
9
- * Format to 6 disit hex
10
- */
11
- const formatHex = (str) => {
12
- // #RGB
13
- if (str.length === 4) {
14
- const r = str[1];
15
- const g = str[2];
16
- const b = str[3];
17
- return str[0] + r + r + g + g + b + b;
18
- }
19
- // #RRGGBBAA
20
- if (str.length === 9) {
21
- return str.slice(0, 7);
22
- }
23
- return str;
24
- };
25
- /**
26
- * A plugin to render "code" nodes, with syntax highlighting powered by shiki.
27
- */
28
- const shikiPlugin = ({ theme, }) => {
29
- let highlighter;
30
- const langs = new Set();
31
- const failedLangs = new Set();
32
- return async ({ root }) => {
33
- const newLangs = [];
34
- unistUtilVisit.visit(root, "code", ({ lang }) => {
35
- if (lang) {
36
- if (!langs.has(lang)) {
37
- langs.add(lang);
38
- newLangs.push(lang);
39
- }
40
- }
41
- });
42
- if (!highlighter) {
43
- highlighter = await shiki.createHighlighter({
44
- themes: [theme],
45
- langs: [],
46
- });
47
- }
48
- await Promise.all(newLangs.map(async (l) => {
49
- try {
50
- await highlighter.loadLanguage(l);
51
- }
52
- catch (e) {
53
- failedLangs.add(l);
54
- utils.warnOnce(String(e));
55
- }
56
- }));
57
- return {
58
- code: ({ value, lang }) => {
59
- if (!lang || failedLangs.has(lang)) {
60
- return null;
61
- }
62
- const res = highlighter.codeToTokens(value, {
63
- lang: lang,
64
- theme,
65
- });
66
- let { bg, fg } = res;
67
- if (fg) {
68
- fg = formatHex(fg);
69
- }
70
- if (bg) {
71
- bg = formatHex(bg);
72
- }
73
- return res.tokens.map((r) => {
74
- return new docx.Paragraph({
75
- shading: {
76
- type: "clear",
77
- color: "auto",
78
- fill: bg,
79
- },
80
- children: r.map(({ content, bgColor, color, fontStyle }) => {
81
- if (color) {
82
- color = formatHex(color);
83
- }
84
- if (bgColor) {
85
- bgColor = formatHex(bgColor);
86
- }
87
- return new docx.TextRun({
88
- text: content,
89
- color: color !== null && color !== void 0 ? color : fg,
90
- shading: bgColor
91
- ? {
92
- type: "clear",
93
- color: "auto",
94
- fill: bgColor,
95
- }
96
- : undefined,
97
- bold: fontStyle === 2,
98
- italics: fontStyle === 1,
99
- underline: fontStyle === 4
100
- ? { type: "single", color: fg }
101
- : undefined,
102
- strike: fontStyle === 8,
103
- });
104
- }),
105
- });
106
- });
107
- },
108
- };
109
- };
110
- };
111
-
112
- exports.shikiPlugin = shikiPlugin;
113
- //# sourceMappingURL=index.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../utils-D_YAYv4R.cjs");let t=require("docx"),n=require("shiki"),r=require("unist-util-visit");var i=e=>{if(e.length===4){let t=e[1],n=e[2],r=e[3];return e[0]+t+t+n+n+r+r}return e.length===9?e.slice(0,7):e},a=({theme:a})=>{let o,s=new Set,c=new Set;return async({root:l})=>{let u=[];return(0,r.visit)(l,`code`,({lang:e})=>{e&&(s.has(e)||(s.add(e),u.push(e)))}),o||=await(0,n.createHighlighter)({themes:[a],langs:[]}),await Promise.all(u.map(async t=>{try{await o.loadLanguage(t)}catch(n){c.add(t),e.n(String(n))}})),{code:({value:e,lang:n})=>{if(!n||c.has(n))return null;let r=o.codeToTokens(e,{lang:n,theme:a}),{bg:s,fg:l}=r;return l&&=i(l),s&&=i(s),r.tokens.map(e=>new t.Paragraph({shading:{type:`clear`,color:`auto`,fill:s},children:e.map(({content:e,bgColor:n,color:r,fontStyle:a})=>(r&&=i(r),n&&=i(n),new t.TextRun({text:e,color:r??l,shading:n?{type:`clear`,color:`auto`,fill:n}:void 0,bold:a===2,italics:a===1,underline:a===4?{type:`single`,color:l}:void 0,strike:a===8})))}))}}}};exports.shikiPlugin=a;
2
+ //# sourceMappingURL=index.cjs.map