@manuscripts/transform 2.1.2-LEAN-3092-0 → 2.1.3

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 (54) hide show
  1. package/dist/cjs/index.js +1 -0
  2. package/dist/cjs/jats/importer/jats-body-dom-parser.js +72 -27
  3. package/dist/cjs/jats/importer/jats-front-parser.js +5 -0
  4. package/dist/cjs/jats/importer/jats-parser-utils.js +0 -6
  5. package/dist/cjs/jats/importer/parse-jats-article.js +2 -1
  6. package/dist/cjs/jats/jats-exporter.js +45 -37
  7. package/dist/cjs/mathjax/index.js +41 -0
  8. package/dist/cjs/mathjax/mathjax-packages.js +20 -0
  9. package/dist/cjs/mathjax/mathml-to-svg.js +70 -0
  10. package/dist/cjs/mathjax/tex-to-mathml.js +49 -0
  11. package/dist/cjs/mathjax/tex-to-svg.js +59 -0
  12. package/dist/cjs/schema/index.js +1 -0
  13. package/dist/cjs/schema/nodes/equation.js +14 -12
  14. package/dist/cjs/schema/nodes/equation_element.js +5 -4
  15. package/dist/cjs/schema/nodes/inline_equation.js +15 -13
  16. package/dist/cjs/transformer/builders.js +8 -1
  17. package/dist/cjs/transformer/decode.js +7 -4
  18. package/dist/cjs/transformer/encode.js +25 -5
  19. package/dist/cjs/transformer/node-types.js +1 -0
  20. package/dist/cjs/transformer/object-types.js +1 -0
  21. package/dist/es/index.js +1 -0
  22. package/dist/es/jats/importer/jats-body-dom-parser.js +73 -28
  23. package/dist/es/jats/importer/jats-front-parser.js +5 -0
  24. package/dist/es/jats/importer/jats-parser-utils.js +0 -6
  25. package/dist/es/jats/importer/parse-jats-article.js +2 -1
  26. package/dist/es/jats/jats-exporter.js +45 -37
  27. package/dist/es/mathjax/index.js +12 -0
  28. package/dist/es/mathjax/mathjax-packages.js +17 -0
  29. package/dist/es/mathjax/mathml-to-svg.js +66 -0
  30. package/dist/es/mathjax/tex-to-mathml.js +45 -0
  31. package/dist/es/mathjax/tex-to-svg.js +55 -0
  32. package/dist/es/schema/index.js +1 -0
  33. package/dist/es/schema/nodes/equation.js +14 -12
  34. package/dist/es/schema/nodes/equation_element.js +5 -4
  35. package/dist/es/schema/nodes/inline_equation.js +15 -13
  36. package/dist/es/transformer/builders.js +6 -0
  37. package/dist/es/transformer/decode.js +7 -4
  38. package/dist/es/transformer/encode.js +25 -5
  39. package/dist/es/transformer/node-types.js +1 -0
  40. package/dist/es/transformer/object-types.js +1 -0
  41. package/dist/types/index.d.ts +1 -0
  42. package/dist/types/jats/importer/jats-front-parser.d.ts +1 -0
  43. package/dist/types/jats/jats-exporter.d.ts +0 -1
  44. package/dist/types/mathjax/index.d.ts +3 -0
  45. package/dist/types/mathjax/mathjax-packages.d.ts +16 -0
  46. package/dist/types/mathjax/mathml-to-svg.d.ts +17 -0
  47. package/dist/types/mathjax/tex-to-mathml.d.ts +17 -0
  48. package/dist/types/mathjax/tex-to-svg.d.ts +17 -0
  49. package/dist/types/schema/index.d.ts +1 -0
  50. package/dist/types/schema/nodes/equation.d.ts +4 -3
  51. package/dist/types/schema/nodes/equation_element.d.ts +2 -1
  52. package/dist/types/schema/nodes/inline_equation.d.ts +3 -4
  53. package/dist/types/transformer/builders.d.ts +2 -1
  54. package/package.json +4 -3
package/dist/cjs/index.js CHANGED
@@ -18,6 +18,7 @@ exports.isSectionLabelNode = void 0;
18
18
  __exportStar(require("./lib/section-group-type"), exports);
19
19
  __exportStar(require("./lib/table-cell-styles"), exports);
20
20
  __exportStar(require("./lib/utils"), exports);
21
+ __exportStar(require("./mathjax"), exports);
21
22
  __exportStar(require("./schema"), exports);
22
23
  __exportStar(require("./transformer"), exports);
23
24
  __exportStar(require("./jats"), exports);
@@ -21,6 +21,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
21
21
  exports.jatsBodyDOMParser = void 0;
22
22
  const mime_1 = __importDefault(require("mime"));
23
23
  const prosemirror_model_1 = require("prosemirror-model");
24
+ const mathml_to_svg_1 = require("../../mathjax/mathml-to-svg");
25
+ const tex_to_svg_1 = require("../../mathjax/tex-to-svg");
24
26
  const schema_1 = require("../../schema");
25
27
  const transformer_1 = require("../../transformer");
26
28
  const XLINK_NAMESPACE = 'http://www.w3.org/1999/xlink';
@@ -37,28 +39,6 @@ const chooseContentType = (graphicNode) => {
37
39
  }
38
40
  }
39
41
  };
40
- const getEquationContent = (p) => {
41
- var _a;
42
- const element = p;
43
- const id = element.getAttribute('id');
44
- const container = (_a = element.querySelector('alternatives')) !== null && _a !== void 0 ? _a : element;
45
- let contents = '';
46
- let format = '';
47
- for (const child of container.childNodes) {
48
- const nodeName = child.nodeName.replace(/^[a-z]:/, '');
49
- switch (nodeName) {
50
- case 'tex-math':
51
- contents = child.innerHTML;
52
- format = 'tex';
53
- break;
54
- case 'mml:math':
55
- contents = child.outerHTML;
56
- format = 'mathml';
57
- break;
58
- }
59
- }
60
- return { id, format, contents };
61
- };
62
42
  const marks = [
63
43
  {
64
44
  tag: 'bold',
@@ -167,26 +147,91 @@ const nodes = [
167
147
  tag: 'inline-formula',
168
148
  node: 'inline_equation',
169
149
  getAttrs: (node) => {
150
+ var _a, _b, _c, _d, _e;
170
151
  const element = node;
171
- return getEquationContent(element);
152
+ const attrs = {
153
+ id: element.getAttribute('id'),
154
+ MathMLRepresentation: '',
155
+ SVGRepresentation: '',
156
+ TeXRepresentation: '',
157
+ };
158
+ const container = (_a = element.querySelector('alternatives')) !== null && _a !== void 0 ? _a : element;
159
+ for (const child of container.childNodes) {
160
+ const nodeName = child.nodeName.replace(/^[a-z]:/, '');
161
+ switch (nodeName) {
162
+ case 'tex-math':
163
+ attrs.TeXRepresentation = (_c = (_b = child.textContent) === null || _b === void 0 ? void 0 : _b.trim()) !== null && _c !== void 0 ? _c : '';
164
+ if (attrs.TeXRepresentation) {
165
+ attrs.SVGRepresentation =
166
+ (_d = (0, tex_to_svg_1.convertTeXToSVG)(attrs.TeXRepresentation, true)) !== null && _d !== void 0 ? _d : '';
167
+ }
168
+ break;
169
+ case 'mml:math':
170
+ ;
171
+ child.removeAttribute('id');
172
+ attrs.MathMLRepresentation = transformer_1.xmlSerializer.serializeToString(child);
173
+ if (attrs.MathMLRepresentation) {
174
+ attrs.SVGRepresentation =
175
+ (_e = (0, mathml_to_svg_1.convertMathMLToSVG)(attrs.MathMLRepresentation, true)) !== null && _e !== void 0 ? _e : '';
176
+ }
177
+ break;
178
+ }
179
+ }
180
+ return attrs;
172
181
  },
173
182
  },
174
183
  {
175
184
  tag: 'disp-formula',
176
185
  node: 'equation_element',
177
186
  getAttrs: (node) => {
178
- var _a, _b;
179
187
  const element = node;
188
+ const caption = element.querySelector('figcaption');
180
189
  return {
181
190
  id: element.getAttribute('id'),
182
- label: (_b = (_a = element.querySelector('label')) === null || _a === void 0 ? void 0 : _a.textContent) !== null && _b !== void 0 ? _b : '',
191
+ suppressCaption: !caption,
183
192
  };
184
193
  },
185
194
  getContent: (node, schema) => {
195
+ var _a, _b, _c, _d, _e;
186
196
  const element = node;
187
- const attrs = getEquationContent(element);
197
+ const attrs = {
198
+ MathMLStringRepresentation: '',
199
+ SVGStringRepresentation: '',
200
+ TeXRepresentation: '',
201
+ };
202
+ const container = (_a = element.querySelector('alternatives')) !== null && _a !== void 0 ? _a : element;
203
+ for (const child of container.childNodes) {
204
+ const nodeName = child.nodeName.replace(/^[a-z]:/, '');
205
+ switch (nodeName) {
206
+ case 'tex-math':
207
+ attrs.TeXRepresentation = (_c = (_b = child.textContent) === null || _b === void 0 ? void 0 : _b.trim()) !== null && _c !== void 0 ? _c : '';
208
+ if (attrs.TeXRepresentation) {
209
+ attrs.SVGStringRepresentation =
210
+ (_d = (0, tex_to_svg_1.convertTeXToSVG)(attrs.TeXRepresentation, true)) !== null && _d !== void 0 ? _d : '';
211
+ }
212
+ break;
213
+ case 'mml:math':
214
+ ;
215
+ child.removeAttribute('id');
216
+ attrs.MathMLStringRepresentation =
217
+ transformer_1.xmlSerializer.serializeToString(child);
218
+ if (attrs.MathMLStringRepresentation) {
219
+ attrs.SVGStringRepresentation =
220
+ (_e = (0, mathml_to_svg_1.convertMathMLToSVG)(attrs.MathMLStringRepresentation, true)) !== null && _e !== void 0 ? _e : '';
221
+ }
222
+ break;
223
+ }
224
+ }
225
+ const caption = element.querySelector('figcaption');
226
+ const figcaption = schema.nodes.figcaption.create();
188
227
  return prosemirror_model_1.Fragment.from([
189
- schema.nodes.equation.createChecked(Object.assign({}, attrs)),
228
+ schema.nodes.equation.createChecked(attrs),
229
+ caption
230
+ ?
231
+ exports.jatsBodyDOMParser.parse(caption, {
232
+ topNode: figcaption,
233
+ })
234
+ : figcaption,
190
235
  ]);
191
236
  },
192
237
  },
@@ -45,6 +45,11 @@ exports.jatsFrontParser = {
45
45
  }
46
46
  return titles;
47
47
  },
48
+ parseDOI(front) {
49
+ var _a;
50
+ const doi = front === null || front === void 0 ? void 0 : front.querySelector('article-meta > article-id[pub-id-type="doi"]');
51
+ return (_a = doi === null || doi === void 0 ? void 0 : doi.textContent) !== null && _a !== void 0 ? _a : undefined;
52
+ },
48
53
  parseCounts(counts) {
49
54
  var _a, _b, _c, _d, _e;
50
55
  if (counts) {
@@ -16,8 +16,6 @@
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.htmlFromJatsNode = exports.updateDocumentIDs = void 0;
19
- const uuid_1 = require("uuid");
20
- const schema_1 = require("../../schema");
21
19
  const transformer_1 = require("../../transformer");
22
20
  const updateDocumentIDs = (node, replacements) => {
23
21
  const warnings = [];
@@ -32,10 +30,6 @@ function recurseDoc(node, fn) {
32
30
  node.descendants((n) => fn(n));
33
31
  }
34
32
  const updateNodeID = (node, replacements, warnings) => {
35
- if (node.type === schema_1.schema.nodes.inline_equation) {
36
- node.attrs = Object.assign(Object.assign({}, node.attrs), { id: `InlineMathFragment:${(0, uuid_1.v4)()}` });
37
- return;
38
- }
39
33
  if (!('id' in node.attrs)) {
40
34
  return;
41
35
  }
@@ -31,6 +31,7 @@ const parseJATSFront = (doc, front) => {
31
31
  const createElement = createElementFn(doc);
32
32
  const journal = jats_front_parser_1.jatsFrontParser.parseJournal(front.querySelector('journal-meta'));
33
33
  const titles = jats_front_parser_1.jatsFrontParser.parseTitles(front.querySelector('article-meta > title-group'), createElement);
34
+ const DOI = jats_front_parser_1.jatsFrontParser.parseDOI(front);
34
35
  const { affiliations, affiliationIDs } = jats_front_parser_1.jatsFrontParser.parseAffiliations([
35
36
  ...front.querySelectorAll('article-meta > contrib-group > aff'),
36
37
  ]);
@@ -45,7 +46,7 @@ const parseJATSFront = (doc, front) => {
45
46
  ], affiliationIDs, footnoteIDs, correspondingIDs);
46
47
  const history = jats_front_parser_1.jatsFrontParser.parseDates(front.querySelector('article-meta > history'));
47
48
  const counts = jats_front_parser_1.jatsFrontParser.parseCounts(front.querySelector('article-meta counts'));
48
- const manuscript = Object.assign(Object.assign(Object.assign({}, (0, builders_1.buildManuscript)()), counts), history);
49
+ const manuscript = Object.assign(Object.assign(Object.assign(Object.assign({}, (0, builders_1.buildManuscript)()), counts), history), { DOI });
49
50
  return generateIDs([
50
51
  manuscript,
51
52
  titles,
@@ -95,7 +95,7 @@ const createDefaultIdGenerator = () => {
95
95
  const counter = (0, exports.createCounter)();
96
96
  return async (element) => {
97
97
  const value = String(counter.increment(element.nodeName));
98
- return `${element.localName}-${value}`;
98
+ return `${element.nodeName}-${value}`;
99
99
  };
100
100
  };
101
101
  const chooseRefType = (objectType) => {
@@ -164,7 +164,6 @@ class JATSExporter {
164
164
  };
165
165
  this.nodeFromJATS = (JATSFragment) => {
166
166
  JATSFragment = JATSFragment.trim();
167
- JATSFragment = JATSFragment.replace(' ', ' ');
168
167
  if (!JATSFragment.length) {
169
168
  return null;
170
169
  }
@@ -249,7 +248,7 @@ class JATSExporter {
249
248
  }
250
249
  };
251
250
  this.buildFront = (doi, id, links) => {
252
- var _a, _b, _c, _d;
251
+ var _a, _b, _c, _d, _e;
253
252
  const manuscript = (0, project_bundle_1.findManuscript)(this.modelMap);
254
253
  const titles = (0, project_bundle_1.findTitles)(this.modelMap);
255
254
  const front = this.document.createElement('front');
@@ -312,10 +311,10 @@ class JATSExporter {
312
311
  articleID.textContent = id;
313
312
  articleMeta.appendChild(articleID);
314
313
  }
315
- if (doi) {
314
+ if (doi || manuscript.DOI) {
316
315
  const articleID = this.document.createElement('article-id');
317
316
  articleID.setAttribute('pub-id-type', 'doi');
318
- articleID.textContent = doi;
317
+ articleID.textContent = (_a = manuscript.DOI) !== null && _a !== void 0 ? _a : doi;
319
318
  articleMeta.appendChild(articleID);
320
319
  }
321
320
  const titleGroup = this.document.createElement('title-group');
@@ -350,14 +349,14 @@ class JATSExporter {
350
349
  for (const supplement of supplements) {
351
350
  const supplementaryMaterial = this.document.createElement('supplementary-material');
352
351
  supplementaryMaterial.setAttribute('id', normalizeID(supplement._id));
353
- supplementaryMaterial.setAttributeNS(XLINK_NAMESPACE, 'href', (_a = supplement.href) !== null && _a !== void 0 ? _a : '');
354
- const mimeType = (_b = supplement.MIME) === null || _b === void 0 ? void 0 : _b.split('/')[0];
355
- const mimeSubType = (_c = supplement.MIME) === null || _c === void 0 ? void 0 : _c.split('/')[1];
352
+ supplementaryMaterial.setAttributeNS(XLINK_NAMESPACE, 'href', (_b = supplement.href) !== null && _b !== void 0 ? _b : '');
353
+ const mimeType = (_c = supplement.MIME) === null || _c === void 0 ? void 0 : _c.split('/')[0];
354
+ const mimeSubType = (_d = supplement.MIME) === null || _d === void 0 ? void 0 : _d.split('/')[1];
356
355
  supplementaryMaterial.setAttribute('mimetype', mimeType !== null && mimeType !== void 0 ? mimeType : '');
357
356
  supplementaryMaterial.setAttribute('mime-subtype', mimeSubType !== null && mimeSubType !== void 0 ? mimeSubType : '');
358
357
  const caption = this.document.createElement('caption');
359
358
  const title = this.document.createElement('title');
360
- title.textContent = (_d = supplement.title) !== null && _d !== void 0 ? _d : '';
359
+ title.textContent = (_e = supplement.title) !== null && _e !== void 0 ? _e : '';
361
360
  caption.append(title);
362
361
  supplementaryMaterial.append(caption);
363
362
  articleMeta.append(supplementaryMaterial);
@@ -687,20 +686,22 @@ class JATSExporter {
687
686
  },
688
687
  doc: () => '',
689
688
  equation: (node) => {
690
- return this.createEquation(node);
691
- },
692
- inline_equation: (node) => {
693
- const eqElement = this.document.createElement('inline-formula');
694
- const equation = this.createEquation(node, true);
695
- eqElement.append(equation);
696
- return eqElement;
697
- },
698
- equation_element: (node) => {
699
- const eqElement = this.document.createElement('disp-formula');
700
- eqElement.setAttribute('id', normalizeID(node.attrs.id));
701
- processChildNodes(eqElement, node, schema_1.schema.nodes.equation);
702
- return eqElement;
689
+ const formula = this.document.createElement('disp-formula');
690
+ formula.setAttribute('id', normalizeID(node.attrs.id));
691
+ if (node.attrs.TeXRepresentation) {
692
+ const math = this.document.createElement('tex-math');
693
+ math.textContent = node.attrs.TeXRepresentation;
694
+ formula.appendChild(math);
695
+ }
696
+ else if (node.attrs.MathMLStringRepresentation) {
697
+ const math = this.nodeFromJATS(node.attrs.MathMLStringRepresentation);
698
+ if (math) {
699
+ formula.appendChild(math);
700
+ }
701
+ }
702
+ return formula;
703
703
  },
704
+ equation_element: (node) => createFigureElement(node, 'fig', node.type.schema.nodes.equation, 'equation'),
704
705
  figcaption: (node) => {
705
706
  if (!node.textContent) {
706
707
  return '';
@@ -750,6 +751,28 @@ class JATSExporter {
750
751
  },
751
752
  hard_break: () => '',
752
753
  highlight_marker: () => '',
754
+ inline_equation: (node) => {
755
+ const formula = this.document.createElement('inline-formula');
756
+ formula.setAttribute('id', normalizeID(node.attrs.id));
757
+ if (node.attrs.TeXRepresentation) {
758
+ const math = this.document.createElement('tex-math');
759
+ math.textContent = node.attrs.TeXRepresentation;
760
+ formula.appendChild(math);
761
+ }
762
+ else if (node.attrs.MathMLRepresentation) {
763
+ const math = this.nodeFromJATS(node.attrs.MathMLRepresentation);
764
+ if (math) {
765
+ formula.appendChild(math);
766
+ }
767
+ }
768
+ else if (node.attrs.SVGRepresentation) {
769
+ const math = this.nodeFromJATS(node.attrs.SVGRepresentation);
770
+ if (math) {
771
+ formula.appendChild(math);
772
+ }
773
+ }
774
+ return formula;
775
+ },
753
776
  inline_footnote: (node) => {
754
777
  const xref = this.document.createElement('xref');
755
778
  xref.setAttribute('ref-type', 'fn');
@@ -1566,21 +1589,6 @@ class JATSExporter {
1566
1589
  this.citationTexts.set(id, output);
1567
1590
  });
1568
1591
  }
1569
- createEquation(node, isInline = false) {
1570
- if (node.attrs.format === 'tex') {
1571
- const texMath = this.document.createElement('tex-math');
1572
- texMath.innerHTML = node.attrs.contents;
1573
- return texMath;
1574
- }
1575
- else {
1576
- const math = this.nodeFromJATS(node.attrs.contents);
1577
- const mathml = math;
1578
- if (!isInline) {
1579
- mathml.setAttribute('id', normalizeID(node.attrs.id));
1580
- }
1581
- return mathml;
1582
- }
1583
- }
1584
1592
  buildKeywords(articleMeta) {
1585
1593
  const keywords = [...this.modelMap.values()].filter((model) => model.objectType === json_schema_1.ObjectTypes.Keyword);
1586
1594
  const keywordGroups = new Map();
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.convertTeXToSVG = exports.convertTeXToMathML = exports.convertMathMLToSVG = void 0;
27
+ const convertMathMLToSVG = async (mathml, display) => {
28
+ const { convertMathMLToSVG } = await Promise.resolve().then(() => __importStar(require('./mathml-to-svg')));
29
+ return convertMathMLToSVG(mathml, display);
30
+ };
31
+ exports.convertMathMLToSVG = convertMathMLToSVG;
32
+ const convertTeXToMathML = async (tex, display) => {
33
+ const { convertTeXToMathML } = await Promise.resolve().then(() => __importStar(require('./tex-to-mathml')));
34
+ return convertTeXToMathML(tex, display);
35
+ };
36
+ exports.convertTeXToMathML = convertTeXToMathML;
37
+ const convertTeXToSVG = async (tex, display) => {
38
+ const { convertTeXToSVG } = await Promise.resolve().then(() => __importStar(require('./tex-to-svg')));
39
+ return convertTeXToSVG(tex, display);
40
+ };
41
+ exports.convertTeXToSVG = convertTeXToSVG;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /*!
3
+ * © 2019 Atypon Systems LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.packages = void 0;
19
+ const AllPackages_1 = require("mathjax-full/js/input/tex/AllPackages");
20
+ exports.packages = AllPackages_1.AllPackages.filter((name) => name !== 'html' && name !== 'bussproofs');
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /*!
3
+ * © 2019 Atypon Systems LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.convertMathMLToSVG = void 0;
19
+ require("mathjax-full/js/util/entities/all");
20
+ const HTMLAdaptor_1 = require("mathjax-full/js/adaptors/HTMLAdaptor");
21
+ const MmlFactory_1 = require("mathjax-full/js/core/MmlTree/MmlFactory");
22
+ const HTMLDocument_1 = require("mathjax-full/js/handlers/html/HTMLDocument");
23
+ const mathml_1 = require("mathjax-full/js/input/mathml");
24
+ const svg_1 = require("mathjax-full/js/output/svg");
25
+ const transformer_1 = require("../transformer");
26
+ class ManuscriptsMmlFactory extends MmlFactory_1.MmlFactory {
27
+ constructor() {
28
+ super();
29
+ this.nodeMap.set('image', this.nodeMap.get('none'));
30
+ }
31
+ create(kind, properties = {}, children = []) {
32
+ if (kind === 'image') {
33
+ return this.node['none'](properties, children);
34
+ }
35
+ return this.node[kind](properties, children);
36
+ }
37
+ }
38
+ class ManuscriptsHTMLAdaptor extends HTMLAdaptor_1.HTMLAdaptor {
39
+ setAttribute(node, name, value, ns) {
40
+ if (name !== 'xmlns') {
41
+ ns ? node.setAttributeNS(ns, name, value) : node.setAttribute(name, value);
42
+ }
43
+ }
44
+ }
45
+ const InputJax = new mathml_1.MathML();
46
+ const OutputJax = new svg_1.SVG({
47
+ fontCache: 'none',
48
+ });
49
+ const adaptor = new ManuscriptsHTMLAdaptor(window);
50
+ const doc = new HTMLDocument_1.HTMLDocument(document, adaptor, {
51
+ InputJax,
52
+ OutputJax,
53
+ MmlFactory: new ManuscriptsMmlFactory(),
54
+ });
55
+ doc.addStyleSheet();
56
+ const convertMathMLToSVG = (mathml, display) => {
57
+ const item = doc.convert(mathml, {
58
+ display,
59
+ em: 16,
60
+ ex: 8,
61
+ containerWidth: 1000000,
62
+ lineWidth: 1000000,
63
+ scale: 1,
64
+ });
65
+ if (!item || !item.firstChild) {
66
+ return null;
67
+ }
68
+ return transformer_1.xmlSerializer.serializeToString(item.firstChild);
69
+ };
70
+ exports.convertMathMLToSVG = convertMathMLToSVG;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ /*!
3
+ * © 2019 Atypon Systems LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.convertTeXToMathML = void 0;
19
+ require("mathjax-full/js/util/entities/all");
20
+ const HTMLAdaptor_1 = require("mathjax-full/js/adaptors/HTMLAdaptor");
21
+ const MathItem_js_1 = require("mathjax-full/js/core/MathItem.js");
22
+ const SerializedMmlVisitor_1 = require("mathjax-full/js/core/MmlTree/SerializedMmlVisitor");
23
+ const HTMLDocument_1 = require("mathjax-full/js/handlers/html/HTMLDocument");
24
+ const tex_1 = require("mathjax-full/js/input/tex");
25
+ const mathjax_packages_1 = require("./mathjax-packages");
26
+ const InputJax = new tex_1.TeX({
27
+ packages: mathjax_packages_1.packages,
28
+ });
29
+ const adaptor = new HTMLAdaptor_1.HTMLAdaptor(window);
30
+ const doc = new HTMLDocument_1.HTMLDocument(document, adaptor, {
31
+ InputJax,
32
+ });
33
+ const visitor = new SerializedMmlVisitor_1.SerializedMmlVisitor();
34
+ const convertTeXToMathML = (tex, display) => {
35
+ const item = doc.convert(tex, {
36
+ display,
37
+ em: 16,
38
+ ex: 8,
39
+ containerWidth: 1000000,
40
+ lineWidth: 1000000,
41
+ scale: 1,
42
+ end: MathItem_js_1.STATE.CONVERT,
43
+ });
44
+ if (!item) {
45
+ return null;
46
+ }
47
+ return visitor.visitTree(item);
48
+ };
49
+ exports.convertTeXToMathML = convertTeXToMathML;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ /*!
3
+ * © 2019 Atypon Systems LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.convertTeXToSVG = void 0;
19
+ require("mathjax-full/js/util/entities/all");
20
+ const HTMLAdaptor_1 = require("mathjax-full/js/adaptors/HTMLAdaptor");
21
+ const HTMLDocument_1 = require("mathjax-full/js/handlers/html/HTMLDocument");
22
+ const tex_1 = require("mathjax-full/js/input/tex");
23
+ const svg_1 = require("mathjax-full/js/output/svg");
24
+ const transformer_1 = require("../transformer");
25
+ const mathjax_packages_1 = require("./mathjax-packages");
26
+ class ManuscriptsHTMLAdaptor extends HTMLAdaptor_1.HTMLAdaptor {
27
+ setAttribute(node, name, value, ns) {
28
+ if (name !== 'xmlns') {
29
+ ns ? node.setAttributeNS(ns, name, value) : node.setAttribute(name, value);
30
+ }
31
+ }
32
+ }
33
+ const InputJax = new tex_1.TeX({
34
+ packages: mathjax_packages_1.packages,
35
+ });
36
+ const OutputJax = new svg_1.SVG({
37
+ fontCache: 'none',
38
+ });
39
+ const adaptor = new ManuscriptsHTMLAdaptor(window);
40
+ const doc = new HTMLDocument_1.HTMLDocument(document, adaptor, {
41
+ InputJax,
42
+ OutputJax,
43
+ });
44
+ doc.addStyleSheet();
45
+ const convertTeXToSVG = (tex, display) => {
46
+ const item = doc.convert(tex, {
47
+ display,
48
+ em: 16,
49
+ ex: 8,
50
+ containerWidth: 1000000,
51
+ lineWidth: 1000000,
52
+ scale: 1,
53
+ });
54
+ if (!item || !item.firstChild) {
55
+ return null;
56
+ }
57
+ return transformer_1.xmlSerializer.serializeToString(item.firstChild);
58
+ };
59
+ exports.convertTeXToSVG = convertTeXToSVG;
@@ -117,6 +117,7 @@ __exportStar(require("./nodes/footnotes_section"), exports);
117
117
  __exportStar(require("./nodes/graphical_abstract_section"), exports);
118
118
  __exportStar(require("./nodes/hard_break"), exports);
119
119
  __exportStar(require("./nodes/highlight_marker"), exports);
120
+ __exportStar(require("./nodes/inline_equation"), exports);
120
121
  __exportStar(require("./nodes/inline_footnote"), exports);
121
122
  __exportStar(require("./nodes/keyword"), exports);
122
123
  __exportStar(require("./nodes/keywords_element"), exports);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*!
3
- * © 2023 Atypon Systems LLC
3
+ * © 2019 Atypon Systems LLC
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
6
6
  * you may not use this file except in compliance with the License.
@@ -20,8 +20,9 @@ const json_schema_1 = require("@manuscripts/json-schema");
20
20
  exports.equation = {
21
21
  attrs: {
22
22
  id: { default: '' },
23
- contents: { default: '' },
24
- format: { default: '' },
23
+ MathMLStringRepresentation: { default: '' },
24
+ SVGStringRepresentation: { default: '' },
25
+ TeXRepresentation: { default: '' },
25
26
  dataTracked: { default: null },
26
27
  },
27
28
  group: 'block',
@@ -29,25 +30,26 @@ exports.equation = {
29
30
  {
30
31
  tag: `div.${json_schema_1.ObjectTypes.Equation}`,
31
32
  getAttrs: (p) => {
32
- const htmlEl = p;
33
+ const dom = p;
33
34
  return {
34
- id: htmlEl.getAttribute('id'),
35
- format: htmlEl.getAttribute('data-equation-format'),
36
- contents: htmlEl.innerHTML,
35
+ id: dom.getAttribute('id'),
36
+ MathMLStringRepresentation: dom.getAttribute('data-mathml-string-representation'),
37
+ SVGStringRepresentation: dom.innerHTML,
38
+ TeXRepresentation: dom.getAttribute('data-tex-representation'),
37
39
  };
38
40
  },
39
41
  },
40
42
  ],
41
43
  toDOM: (node) => {
42
44
  const equationNode = node;
43
- const { id, contents, format } = equationNode.attrs;
44
45
  const dom = document.createElement('div');
46
+ dom.setAttribute('id', equationNode.attrs.id);
45
47
  dom.classList.add(json_schema_1.ObjectTypes.Equation);
46
- dom.setAttribute('id', id);
47
- if (format) {
48
- dom.setAttribute('data-equation-format', format);
48
+ if (equationNode.attrs.MathMLStringRepresentation) {
49
+ dom.setAttribute('data-mathml-string-representation', equationNode.attrs.MathMLStringRepresentation);
49
50
  }
50
- dom.innerHTML = contents;
51
+ dom.setAttribute('data-tex-representation', equationNode.attrs.TeXRepresentation);
52
+ dom.innerHTML = equationNode.attrs.SVGStringRepresentation;
51
53
  return dom;
52
54
  },
53
55
  };