jats-convert 1.0.13 → 1.0.14

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 (37) hide show
  1. package/README.md +5 -5
  2. package/dist/index.d.ts +7 -9
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +109 -79
  5. package/dist/myst/abbreviations.d.ts +11 -0
  6. package/dist/myst/abbreviations.d.ts.map +1 -0
  7. package/dist/myst/abbreviations.js +80 -0
  8. package/dist/myst/inlineCitations.d.ts.map +1 -1
  9. package/dist/myst/inlineCitations.js +40 -0
  10. package/dist/transforms/abbreviations.d.ts +5 -0
  11. package/dist/transforms/abbreviations.d.ts.map +1 -1
  12. package/dist/transforms/abbreviations.js +38 -0
  13. package/dist/transforms/footnotes.d.ts +9 -5
  14. package/dist/transforms/footnotes.d.ts.map +1 -1
  15. package/dist/transforms/footnotes.js +21 -14
  16. package/dist/transforms/index.d.ts +4 -5
  17. package/dist/transforms/index.d.ts.map +1 -1
  18. package/dist/transforms/index.js +9 -10
  19. package/dist/transforms/parts.d.ts +6 -0
  20. package/dist/transforms/parts.d.ts.map +1 -0
  21. package/dist/transforms/parts.js +18 -0
  22. package/dist/transforms/references.d.ts +11 -2
  23. package/dist/transforms/references.d.ts.map +1 -1
  24. package/dist/transforms/references.js +8 -10
  25. package/dist/transforms/sections.d.ts.map +1 -1
  26. package/dist/transforms/sections.js +13 -2
  27. package/dist/transforms/supplementary.d.ts +2 -2
  28. package/dist/transforms/supplementary.d.ts.map +1 -1
  29. package/dist/transforms/supplementary.js +7 -9
  30. package/dist/types.d.ts +4 -10
  31. package/dist/types.d.ts.map +1 -1
  32. package/dist/version.d.ts +1 -1
  33. package/dist/version.js +1 -1
  34. package/package.json +8 -8
  35. package/dist/transforms/citations.d.ts +0 -8
  36. package/dist/transforms/citations.d.ts.map +0 -1
  37. package/dist/transforms/citations.js +0 -11
package/README.md CHANGED
@@ -1,18 +1,18 @@
1
1
  # jats-convert
2
2
 
3
3
  [![jats-convert on npm](https://img.shields.io/npm/v/jats-convert.svg)](https://www.npmjs.com/package/jats-convert)
4
- [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/curvenote/jats/blob/main/LICENSE)
5
- [![CI](https://github.com/curvenote/jats/workflows/CI/badge.svg)](https://github.com/curvenote/jats-cli/actions)
4
+ [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/continuous-foundation/jats/blob/main/LICENSE)
5
+ [![CI](https://github.com/continuous-foundation/jats/workflows/CI/badge.svg)](https://github.com/continuous-foundation/jats-cli/actions)
6
6
 
7
7
  Convert a JATS XML document to a MyST AST.
8
8
 
9
- Portions of this package were created for `jats-to-myst` and [committed](https://github.com/jupyter-book/mystmd/commits/mystmd%401.3.12/packages/jats-to-myst/src) to project Jupyter's `mystmd` project by Curvenote team members. The work is licensed MIT in both places, `jats-convert` has additional functionality and nuance depending on the publisher.
9
+ Portions of this package were created for `jats-to-myst` and [committed](https://github.com/jupyter-book/mystmd/commits/mystmd%401.3.12/packages/jats-to-myst/src) to project Jupyter's `mystmd` project. The work is licensed MIT in both places, `jats-convert` has additional functionality and nuance depending on the publisher.
10
10
 
11
11
  ---
12
12
 
13
13
  <p style="text-align: center; color: #aaa; padding-top: 50px">
14
14
  Made with love by
15
- <a href="https://curvenote.com" target="_blank" style="color: #aaa">
16
- <img src="https://cdn.curvenote.com/brand/logo-blue-icon.png" style="height: 1em" /> Curvenote
15
+ <a href="https://continuous.foundation" target="_blank" style="color: #aaa">
16
+ Continuous Science Foundation <img src="https://continuous.foundation/images/logo-small.svg" style="height: 1em" />
17
17
  </a>
18
18
  </p>
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import type { Root } from 'myst-spec';
2
1
  import type { Plugin } from 'unified';
3
2
  import { VFile } from 'vfile';
4
- import type { MessageInfo, GenericNode } from 'myst-common';
3
+ import type { MessageInfo, GenericNode, GenericParent } from 'myst-common';
4
+ import type { Body } from 'jats-tags';
5
5
  import type { ISession } from 'jats-xml';
6
6
  import { Jats } from 'jats-xml';
7
7
  import type { Handler, IJatsParser, Options, StateData } from './types.js';
@@ -30,14 +30,12 @@ export declare class JatsParser implements IJatsParser {
30
30
  openNode(name: string, attributes?: Attributes, isLeaf?: boolean): void;
31
31
  closeNode(): GenericNode | undefined;
32
32
  }
33
- export declare const jatsConvertPlugin: Plugin<[Jats, Options?], Root, Root>;
34
- export declare function jatsConvertTransform(data: string | Jats, opts?: Options): Promise<{
35
- tree: Root;
36
- jats: Jats;
37
- references: any;
33
+ export declare const jatsConvertPlugin: Plugin<[Jats, Options?], Body, Body>;
34
+ export declare function jatsConvertTransform(jats: Jats, opts?: Options): {
35
+ tree: GenericParent;
38
36
  frontmatter: ProjectFrontmatter;
39
- }>;
40
- export declare function jatsConvert(session: ISession, input: string, opts?: {
37
+ };
38
+ export declare function jatsConvert(session: ISession, input?: string, opts?: {
41
39
  frontmatter?: 'page' | 'project';
42
40
  dois?: boolean;
43
41
  bibtex?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AAM3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAc,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAMvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAyD3D,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AA8UtC,qBAAa,UAAW,YAAW,WAAW;IAC5C,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,EAAE,WAAW,EAAE,CAAM;IAC1B,IAAI,EAAE,IAAI,CAAC;IAEX,SAAS,EAAE,MAAM,EAAE,CAAM;gBAEb,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO;IASnD,GAAG;IAIH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW;IAQzD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW;IAQ1D,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW;IAMzB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM;;;;IAelB,cAAc,CAAC,IAAI,EAAE,WAAW;IAYhC,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU;IAUrE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU;IAK7C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,UAAQ;IAM9D,SAAS;CAIV;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CA0ElE,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC;IACT,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,GAAG,CAAC;IAChB,WAAW,EAAE,kBAAkB,CAAC;CACjC,CAAC,CAsED;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,iBAkD9E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI3E,OAAO,KAAK,EAAE,IAAI,EAAsB,MAAM,WAAW,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAc,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAkE3D,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAmXtC,qBAAa,UAAW,YAAW,WAAW;IAC5C,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,EAAE,WAAW,EAAE,CAAM;IAC1B,IAAI,EAAE,IAAI,CAAC;IAEX,SAAS,EAAE,MAAM,EAAE,CAAM;gBAEb,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO;IASnD,GAAG;IAIH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW;IAQzD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW;IAQ1D,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW;IAMzB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM;;;;IAelB,cAAc,CAAC,IAAI,EAAE,WAAW;IAYhC,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU;IAUrE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU;IAK7C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,UAAQ;IAM9D,SAAS;CAIV;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CA+DlE,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,IAAI,CAAC,EAAE,OAAO,GACb;IACD,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,kBAAkB,CAAC;CACjC,CAuDA;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,QAAQ,EACjB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,iBA+D9E"}
package/dist/index.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { unified } from 'unified';
4
- import { doi } from 'doi-utils';
5
4
  import { VFile } from 'vfile';
6
5
  import yaml from 'js-yaml';
7
6
  import { copyNode, fileError, RuleId, normalizeLabel } from 'myst-common';
@@ -11,15 +10,17 @@ import { RefType } from 'jats-tags';
11
10
  import { Jats } from 'jats-xml';
12
11
  import { MathMLToLaTeX } from 'mathml-to-latex';
13
12
  import { js2xml } from 'xml-js';
14
- import { basicTransformations, citationToMixedCitation, journalTransforms, } from './transforms/index.js';
13
+ import { basicTransformations, journalTransforms } from './transforms/index.js';
15
14
  import { abstractTransform, descriptionFromAbstract } from './transforms/abstract.js';
16
- import { processJatsReferences, resolveJatsCitations } from './transforms/references.js';
17
- import { backToBodyTransform } from './transforms/footnotes.js';
15
+ import { getPMIDLookup, processJatsReferences, resolveJatsCitations, } from './transforms/references.js';
16
+ import { backToBodyTransform, tableFootnotesToLegend } from './transforms/footnotes.js';
18
17
  import version from './version.js';
19
18
  import { logMessagesFromVFile, toText } from './utils.js';
20
19
  import { inlineCitationsTransform } from './myst/inlineCitations.js';
21
- import { abbreviationSectionTransform } from './transforms/abbreviations.js';
20
+ import { abbreviationFootnoteTransform, abbreviationSectionTransform, } from './transforms/abbreviations.js';
22
21
  import { floatToEndTransform } from './transforms/supplementary.js';
22
+ import { dataAvailabilityTransform } from './transforms/parts.js';
23
+ import { abbreviationsFromTree } from './myst/abbreviations.js';
23
24
  function refTypeToReferenceKind(kind) {
24
25
  switch (kind) {
25
26
  case RefType.sec:
@@ -79,10 +80,12 @@ const handlers = {
79
80
  state.renderInline(node, 'paragraph');
80
81
  },
81
82
  heading(node, state) {
83
+ var _a;
84
+ const { label, identifier } = (_a = normalizeLabel(node.id)) !== null && _a !== void 0 ? _a : {};
82
85
  state.renderInline(node, 'heading', {
83
86
  enumerated: true,
84
- label: node.id,
85
- identifier: node.id,
87
+ label,
88
+ identifier,
86
89
  depth: node.depth,
87
90
  });
88
91
  },
@@ -119,12 +122,14 @@ const handlers = {
119
122
  state.renderInline(node, 'listItem');
120
123
  },
121
124
  ['inline-formula'](node, state) {
125
+ var _a;
122
126
  const texMath = texMathFromNode(node);
123
127
  if (texMath) {
128
+ const { label, identifier } = (_a = normalizeLabel(node.id)) !== null && _a !== void 0 ? _a : {};
124
129
  state.addLeaf('inlineMath', {
125
130
  value: texMath,
126
- label: node.id,
127
- identifier: node.id,
131
+ label,
132
+ identifier,
128
133
  });
129
134
  }
130
135
  else {
@@ -132,16 +137,26 @@ const handlers = {
132
137
  }
133
138
  },
134
139
  ['disp-formula'](node, state) {
140
+ var _a;
135
141
  const texMath = texMathFromNode(node);
142
+ const { label, identifier } = (_a = normalizeLabel(node.id)) !== null && _a !== void 0 ? _a : {};
136
143
  if (texMath) {
137
144
  state.addLeaf('math', {
138
145
  value: texMath,
139
- label: node.id,
140
- identifier: node.id,
146
+ label,
147
+ identifier,
141
148
  });
142
149
  }
143
150
  else {
151
+ if (node.id) {
152
+ state.openNode('div', { label, identifier });
153
+ }
154
+ state.openNode('paragraph');
144
155
  state.renderChildren(node);
156
+ state.closeNode();
157
+ if (node.id) {
158
+ state.closeNode();
159
+ }
145
160
  }
146
161
  },
147
162
  bold(node, state) {
@@ -184,7 +199,15 @@ const handlers = {
184
199
  state.renderInline(node, 'link', { url: node['xlink:href'] });
185
200
  },
186
201
  ['boxed-text'](node, state) {
202
+ var _a;
203
+ if (node.id) {
204
+ const { label, identifier } = (_a = normalizeLabel(node.id)) !== null && _a !== void 0 ? _a : {};
205
+ state.openNode('div', { label, identifier });
206
+ }
187
207
  state.renderInline(node, 'admonition', { kind: 'info' });
208
+ if (node.id) {
209
+ state.closeNode();
210
+ }
188
211
  },
189
212
  admonitionTitle(node, state) {
190
213
  // This is created in a transform!
@@ -359,6 +382,9 @@ const handlers = {
359
382
  kind: 'narrative',
360
383
  });
361
384
  return;
385
+ case RefType.app:
386
+ case RefType.boxedText:
387
+ case RefType.media:
362
388
  case RefType.supplementaryMaterial:
363
389
  case RefType.sec:
364
390
  case RefType.fig:
@@ -391,6 +417,20 @@ const handlers = {
391
417
  state.closeNode();
392
418
  }
393
419
  },
420
+ ['app-group'](node, state) {
421
+ state.renderChildren(node);
422
+ },
423
+ app(node, state) {
424
+ var _a;
425
+ if (node.id) {
426
+ const { label, identifier } = (_a = normalizeLabel(node.id)) !== null && _a !== void 0 ? _a : {};
427
+ state.openNode('div', { label, identifier });
428
+ }
429
+ state.renderChildren(node);
430
+ if (node.id) {
431
+ state.closeNode();
432
+ }
433
+ },
394
434
  media(node, state) {
395
435
  state.renderInline(node, 'link', { url: node['xlink:href'] });
396
436
  },
@@ -400,6 +440,9 @@ const handlers = {
400
440
  caption(node, state) {
401
441
  state.renderChildren(node);
402
442
  },
443
+ email(node, state) {
444
+ state.renderInline(node, 'link', { url: `mailto:${toText(node)}` });
445
+ },
403
446
  // These nodes can be safely ignored
404
447
  label() { },
405
448
  comment() { },
@@ -503,68 +546,57 @@ export class JatsParser {
503
546
  }
504
547
  }
505
548
  export const jatsConvertPlugin = function (jats, opts) {
506
- this.Compiler = (node, file) => {
507
- if (jats.abstract)
549
+ this.Compiler = (body, file) => {
550
+ if (jats.abstract) {
508
551
  abstractTransform(jats.abstract);
509
- const tree = jats.abstract
510
- ? {
511
- type: 'root',
512
- children: [
513
- u('block', { part: 'abstract' }, copyNode(jats.abstract).children),
514
- ...copyNode(node).children,
515
- ],
516
- }
517
- : copyNode(node);
552
+ body.children = [
553
+ u('block', { part: 'abstract' }, copyNode(jats.abstract).children),
554
+ ...body.children,
555
+ ];
556
+ }
518
557
  // Can do better than this in the future, but for now, just put them at the end!
519
558
  const floatsGroup = selectAll('floats-group', jats.tree);
520
559
  if (floatsGroup.length > 0) {
521
560
  floatsGroup.forEach((g) => {
522
- tree.children.push(...g.children);
561
+ body.children.push(...g.children);
523
562
  });
524
563
  }
525
- basicTransformations(tree, file);
526
- citationToMixedCitation(tree);
527
- journalTransforms(tree);
528
- const state = new JatsParser(file, jats, opts !== null && opts !== void 0 ? opts : { handlers });
529
- state.renderChildren(tree);
564
+ floatToEndTransform(body);
565
+ backToBodyTransform(body, jats.back);
566
+ dataAvailabilityTransform(body);
567
+ const refLookup = processJatsReferences(body, jats.references, opts);
568
+ basicTransformations(body, file);
569
+ journalTransforms(body);
570
+ const state = new JatsParser(file, jats, opts);
571
+ state.renderChildren(body);
530
572
  while (state.stack.length > 1)
531
573
  state.closeNode();
574
+ const tree = state.stack[0];
532
575
  if (state.unhandled.length && (opts === null || opts === void 0 ? void 0 : opts.logInfo)) {
533
576
  opts.logInfo.unhandled = [...new Set(state.unhandled)];
534
577
  }
535
- const referenceData = Object.fromEntries(jats.references.map((bibr) => {
536
- const id = bibr.id;
537
- const names = selectAll('name,string-name', bibr)
538
- .map((n) => `${toText(select('surname', n))}, ${toText(select('given-names', n))}`)
539
- .join(', ');
540
- const year = toText(select('year', bibr));
541
- const title = toText(select('article-title', bibr));
542
- const source = toText(select('source', bibr));
543
- const volume = toText(select('volume', bibr));
544
- const fpage = toText(select('fpage', bibr));
545
- const lpage = toText(select('lpage', bibr));
546
- const doiElement = selectAll('ext-link,[pub-id-type=doi]', bibr).find((e) => doi.validate(toText(e)));
547
- const doiString = doiElement ? toText(doiElement) : undefined;
548
- const doiLink = doiString ? ` <a href=${doi.buildUrl(doiString)}>${doiString}</a>` : '';
549
- return [
550
- id,
551
- {
552
- html: `${names}. (${year}). ${title}. <i>${source}</i>, <i>${volume}</i>, ${fpage}-${lpage}.${doiLink}`,
553
- doi: doiString,
554
- },
555
- ];
556
- }));
557
- const referenceOrder = [];
558
- const xrefs = selectAll('xref[ref-type=bibr]', jats.body);
559
- xrefs.forEach((xref) => {
560
- const rid = xref.rid;
561
- if (!referenceOrder.includes(rid)) {
562
- referenceOrder.push(rid);
563
- }
578
+ resolveJatsCitations(tree, refLookup);
579
+ inlineCitationsTransform(tree, jats.references
580
+ .map(({ id }) => {
581
+ var _a;
582
+ const { identifier } = (_a = normalizeLabel(id)) !== null && _a !== void 0 ? _a : {};
583
+ return identifier;
584
+ })
585
+ .filter((id) => !!id));
586
+ const { frontmatter } = jats;
587
+ abbreviationSectionTransform(tree, frontmatter);
588
+ abbreviationFootnoteTransform(tree, frontmatter);
589
+ abbreviationsFromTree(tree, frontmatter);
590
+ tableFootnotesToLegend(tree);
591
+ const abstract = selectAll('block', tree).find((block) => {
592
+ return block.data && block.data.part === 'abstract';
564
593
  });
594
+ if (abstract) {
595
+ frontmatter.description = descriptionFromAbstract(toText(abstract));
596
+ }
565
597
  const result = {
566
- references: { order: referenceOrder, data: referenceData },
567
- tree: state.stack[0],
598
+ tree,
599
+ frontmatter,
568
600
  };
569
601
  file.result = result;
570
602
  return file;
@@ -573,9 +605,8 @@ export const jatsConvertPlugin = function (jats, opts) {
573
605
  return node;
574
606
  };
575
607
  };
576
- export async function jatsConvertTransform(data, opts) {
608
+ export function jatsConvertTransform(jats, opts) {
577
609
  var _a, _b, _c;
578
- const jats = typeof data === 'string' ? new Jats(data) : data;
579
610
  if (opts === null || opts === void 0 ? void 0 : opts.logInfo) {
580
611
  opts.logInfo.publisher = toText(select('publisher-name', jats.tree)) || null;
581
612
  opts.logInfo.journal = toText(select('journal-title', jats.tree)) || null;
@@ -599,24 +630,10 @@ export async function jatsConvertTransform(data, opts) {
599
630
  }
600
631
  opts.logInfo.license = licenseString;
601
632
  }
602
- const { frontmatter } = jats;
603
633
  const file = (_b = opts === null || opts === void 0 ? void 0 : opts.vfile) !== null && _b !== void 0 ? _b : new VFile();
604
- const refLookup = await processJatsReferences(jats, opts);
605
- floatToEndTransform(jats);
606
- backToBodyTransform(jats);
607
634
  const pipe = unified().use(jatsConvertPlugin, jats, opts);
608
- pipe.stringify(((_c = jats.body) !== null && _c !== void 0 ? _c : { type: 'body', children: [] }), file);
609
- const references = file.result.references;
610
- const tree = file.result.tree;
611
- resolveJatsCitations(tree, refLookup);
612
- inlineCitationsTransform(tree, [...Object.keys(references.data)]);
613
- abbreviationSectionTransform(tree, frontmatter);
614
- const abstract = selectAll('block', tree).find((node) => {
615
- return node.data && node.data.part === 'abstract';
616
- });
617
- if (abstract) {
618
- frontmatter.description = descriptionFromAbstract(toText(abstract));
619
- }
635
+ pipe.stringify(copyNode((_c = jats.body) !== null && _c !== void 0 ? _c : { type: 'body', children: [] }), file);
636
+ const { tree, frontmatter } = file.result;
620
637
  if (opts === null || opts === void 0 ? void 0 : opts.logInfo) {
621
638
  opts.logInfo.figures = {
622
639
  body: selectAll('fig', jats.body).length,
@@ -646,17 +663,30 @@ export async function jatsConvertTransform(data, opts) {
646
663
  myst: selectAll('footnoteDefinition', tree).length,
647
664
  };
648
665
  }
649
- return { tree, jats, references, frontmatter }; //, kind };
666
+ return { tree, frontmatter };
650
667
  }
651
668
  export async function jatsConvert(session, input, opts) {
652
669
  const logInfo = { jatsVersion: version };
670
+ if (!input) {
671
+ const xmls = fs.readdirSync('.').filter((file) => path.extname(file) === '.xml');
672
+ if (xmls.length === 0) {
673
+ throw new Error('No JATS xml file found in current directory; please specify input');
674
+ }
675
+ if (xmls.length > 1) {
676
+ throw new Error('Multiple XML files found in current directory; please specify input');
677
+ }
678
+ input = xmls[0];
679
+ }
653
680
  const dir = path.dirname(input);
654
681
  const vfile = new VFile();
655
682
  vfile.path = input;
656
- const { tree, frontmatter } = await jatsConvertTransform(fs.readFileSync(input).toString(), {
683
+ const jats = new Jats(fs.readFileSync(input).toString());
684
+ const pmidCache = await getPMIDLookup(jats.references, dir);
685
+ const { tree, frontmatter } = jatsConvertTransform(jats, {
657
686
  vfile,
658
687
  dir,
659
688
  logInfo,
689
+ pmidCache,
660
690
  dois: opts === null || opts === void 0 ? void 0 : opts.dois,
661
691
  bibtex: opts === null || opts === void 0 ? void 0 : opts.bibtex,
662
692
  });
@@ -0,0 +1,11 @@
1
+ import type { GenericParent } from 'myst-common';
2
+ import type { ProjectFrontmatter } from 'myst-frontmatter';
3
+ /**
4
+ * Attempt to pull abbreviations out of tree
5
+ *
6
+ * This looks for parenthesized letters and tries to match them to the
7
+ * previous words.
8
+ */
9
+ export declare function abbreviationsFromTree(tree: GenericParent, frontmatter: Pick<ProjectFrontmatter, 'abbreviations'>): void;
10
+ export declare function abbreviationsFromText(text: string): Record<string, string>;
11
+ //# sourceMappingURL=abbreviations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abbreviations.d.ts","sourceRoot":"","sources":["../../src/myst/abbreviations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,IAAI,CAAC,kBAAkB,EAAE,eAAe,CAAC,QAYvD;AAgCD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA+B1E"}
@@ -0,0 +1,80 @@
1
+ import { selectAll } from 'unist-util-select';
2
+ import { toText } from '../utils.js';
3
+ /**
4
+ * Attempt to pull abbreviations out of tree
5
+ *
6
+ * This looks for parenthesized letters and tries to match them to the
7
+ * previous words.
8
+ */
9
+ export function abbreviationsFromTree(tree, frontmatter) {
10
+ let abbreviations = {};
11
+ const paragraphs = selectAll('paragraph', tree);
12
+ paragraphs.forEach((paragraph) => {
13
+ const text = toText(paragraph);
14
+ abbreviations = {
15
+ ...abbreviations,
16
+ ...abbreviationsFromText(text),
17
+ };
18
+ });
19
+ frontmatter.abbreviations = { ...frontmatter.abbreviations, ...abbreviations };
20
+ }
21
+ function maybeStopWord(word) {
22
+ return word.length < 5;
23
+ }
24
+ function exploreAbbrPossibilities(letter, possibilities) {
25
+ const newPossibilities = [];
26
+ possibilities.forEach(({ prev, next }) => {
27
+ if (prev === null || prev === void 0 ? void 0 : prev.includes(letter)) {
28
+ newPossibilities.push({
29
+ prev: prev.slice(prev.indexOf(letter) + 1),
30
+ next,
31
+ });
32
+ }
33
+ for (const [i, n] of next.entries()) {
34
+ if (n.startsWith(letter)) {
35
+ newPossibilities.push({
36
+ prev: next[i].slice(1),
37
+ next: next.slice(i + 1),
38
+ });
39
+ }
40
+ if (!prev || !maybeStopWord(n)) {
41
+ break;
42
+ }
43
+ }
44
+ });
45
+ return newPossibilities;
46
+ }
47
+ export function abbreviationsFromText(text) {
48
+ const abbreviations = {};
49
+ const textList = text.split(' ');
50
+ textList.forEach((word, index) => {
51
+ var _a;
52
+ const abbr = (_a = word.match(/^\(([^\s]{2,})\).{0,1}/)) === null || _a === void 0 ? void 0 : _a[1];
53
+ if (!abbr)
54
+ return;
55
+ const possibleWords = [];
56
+ let wordIndex = index - 1;
57
+ while (textList[wordIndex] && possibleWords.filter((w) => w.length > 4).length < abbr.length) {
58
+ possibleWords.unshift(textList[wordIndex]);
59
+ wordIndex--;
60
+ }
61
+ for (const i of Array(possibleWords.length).keys()) {
62
+ let possibilities = [
63
+ {
64
+ next: possibleWords.slice(i).map((w) => w.toLowerCase()),
65
+ },
66
+ ];
67
+ abbr
68
+ .split('')
69
+ .filter((letter) => letter.match(/^[a-zA-Z]$/))
70
+ .forEach((letter) => {
71
+ possibilities = exploreAbbrPossibilities(letter.toLowerCase(), possibilities);
72
+ });
73
+ if (possibilities.filter(({ next }) => next.length === 0).length) {
74
+ abbreviations[abbr] = possibleWords.slice(i).join(' ');
75
+ break;
76
+ }
77
+ }
78
+ });
79
+ return abbreviations;
80
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"inlineCitations.d.ts","sourceRoot":"","sources":["../../src/myst/inlineCitations.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAuKzF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,QAenF"}
1
+ {"version":3,"file":"inlineCitations.d.ts","sourceRoot":"","sources":["../../src/myst/inlineCitations.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAwMzF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,QAiBnF"}
@@ -174,6 +174,44 @@ function expandHyphenatedCites(tree, referenceList) {
174
174
  });
175
175
  remove(tree, '__delete__');
176
176
  }
177
+ /**
178
+ * Remove superscript around citations
179
+ */
180
+ function removeCiteSuperscript(tree) {
181
+ const citeGroupParents = selectAll(':has(> citeGroup)', tree);
182
+ citeGroupParents.forEach((parent) => {
183
+ if (parent.type !== 'superscript')
184
+ return;
185
+ if (parent.children.length !== 1)
186
+ return;
187
+ parent.type = '__lift__';
188
+ });
189
+ liftChildren(tree, '__lift__');
190
+ }
191
+ /**
192
+ * Ensure there are spaces before citations
193
+ *
194
+ * This is a problem, for example, when citations are removed from superscript and there
195
+ * was no space before the citation.
196
+ */
197
+ function ensureSpaceBeforeCite(tree) {
198
+ const citeGroupParents = selectAll(':has(> text + citeGroup)', tree);
199
+ citeGroupParents.forEach((parent) => {
200
+ parent.children.forEach((child, index) => {
201
+ var _a, _b;
202
+ if (child.type !== 'text')
203
+ return;
204
+ const citeChild = parent.children[index + 1];
205
+ if ((citeChild === null || citeChild === void 0 ? void 0 : citeChild.type) !== 'citeGroup')
206
+ return;
207
+ if ((_a = child.value) === null || _a === void 0 ? void 0 : _a.match(/\s+$/))
208
+ return;
209
+ if ((_b = child.value) === null || _b === void 0 ? void 0 : _b.match(/[[(]$/))
210
+ return;
211
+ child.value = `${child.value} `;
212
+ });
213
+ });
214
+ }
177
215
  export function inlineCitationsTransform(tree, referenceIds) {
178
216
  let before = '';
179
217
  let current = JSON.stringify(tree);
@@ -187,6 +225,8 @@ export function inlineCitationsTransform(tree, referenceIds) {
187
225
  removeCiteSeparators(tree);
188
226
  expandHyphenatedCites(tree, referenceIds);
189
227
  removeCiteParentheses(tree);
228
+ removeCiteSuperscript(tree);
229
+ ensureSpaceBeforeCite(tree);
190
230
  current = JSON.stringify(tree);
191
231
  }
192
232
  }
@@ -14,4 +14,9 @@ import type { ProjectFrontmatter } from 'myst-frontmatter';
14
14
  * CER, ceramides; FASN, fatty acid synthase; FDR, false discovery rate.
15
15
  */
16
16
  export declare function abbreviationSectionTransform(tree: GenericParent, frontmatter: Pick<ProjectFrontmatter, 'abbreviations'>): void;
17
+ /**
18
+ * If there is a footnote that starts with "abbreviations:" try to move abbreviatons to frontmatter
19
+ *
20
+ */
21
+ export declare function abbreviationFootnoteTransform(tree: GenericParent, frontmatter: Pick<ProjectFrontmatter, 'abbreviations'>): void;
17
22
  //# sourceMappingURL=abbreviations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"abbreviations.d.ts","sourceRoot":"","sources":["../../src/transforms/abbreviations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAK3D;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,IAAI,CAAC,kBAAkB,EAAE,eAAe,CAAC,QAuBvD"}
1
+ {"version":3,"file":"abbreviations.d.ts","sourceRoot":"","sources":["../../src/transforms/abbreviations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAK3D;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,IAAI,CAAC,kBAAkB,EAAE,eAAe,CAAC,QAuBvD;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,IAAI,CAAC,kBAAkB,EAAE,eAAe,CAAC,QA4BvD"}
@@ -45,3 +45,41 @@ export function abbreviationSectionTransform(tree, frontmatter) {
45
45
  });
46
46
  remove(tree, '__delete__');
47
47
  }
48
+ /**
49
+ * If there is a footnote that starts with "abbreviations:" try to move abbreviatons to frontmatter
50
+ *
51
+ */
52
+ export function abbreviationFootnoteTransform(tree, frontmatter) {
53
+ const fnDefs = selectAll('footnoteDefinition', tree);
54
+ const fnRefs = selectAll('footnoteReference', tree).map(({ identifier }) => identifier);
55
+ fnDefs.forEach((fnDef) => {
56
+ var _a;
57
+ if (fnDef.identifier && fnRefs.includes(fnDef.identifier))
58
+ return;
59
+ if (((_a = fnDef.children) === null || _a === void 0 ? void 0 : _a.length) !== 1)
60
+ return;
61
+ if (fnDef.children[0].type !== 'paragraph')
62
+ return;
63
+ const fnText = toText(fnDef.children[0]);
64
+ const abbrPrefix = 'abbreviations: ';
65
+ if (!fnText.toLowerCase().startsWith(abbrPrefix))
66
+ return;
67
+ const abbreviations = fnText.slice(abbrPrefix.length).replace(/\.$/, '').split(/;\s*/g);
68
+ const entries = abbreviations.map((abbr) => {
69
+ const parts = abbr.split(/[,:]\s*/g);
70
+ if (parts.length !== 2)
71
+ return undefined;
72
+ // Spaces in abbreviation value are not allowed
73
+ if (parts[0].match(/\s/))
74
+ return undefined;
75
+ return [parts[0], parts[1]];
76
+ });
77
+ // There cannot be a single invalid abbreviation
78
+ if (entries.findIndex((entry) => !entry) !== -1)
79
+ return;
80
+ const newAbbreviations = Object.fromEntries(entries);
81
+ frontmatter.abbreviations = { ...frontmatter.abbreviations, ...newAbbreviations };
82
+ fnDef.type = '__delete__';
83
+ });
84
+ remove(tree, '__delete__');
85
+ }
@@ -1,9 +1,13 @@
1
- import type { Jats } from 'jats-xml';
1
+ import type { GenericParent } from 'myst-common';
2
+ import type { Back, Body } from 'jats-tags';
2
3
  /**
3
- * Move footnotes and sections from back to body
4
+ * Copy footnotes and sections from back into body tree
4
5
  *
5
- * Currently we only pass body to JATS convert plugin, so we move parts of
6
- * the backmatter that need parsing to body.
6
+ * Back is not modified.
7
7
  */
8
- export declare function backToBodyTransform(jats: Jats): void;
8
+ export declare function backToBodyTransform(body: Body, back?: Back): void;
9
+ /**
10
+ * Leave table footnotes in legend if they are not referenced anywhere
11
+ */
12
+ export declare function tableFootnotesToLegend(tree: GenericParent): void;
9
13
  //# sourceMappingURL=footnotes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"footnotes.d.ts","sourceRoot":"","sources":["../../src/transforms/footnotes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAErC;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,QAW7C"}
1
+ {"version":3,"file":"footnotes.d.ts","sourceRoot":"","sources":["../../src/transforms/footnotes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG5C;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,QAO1D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,QASzD"}
@@ -1,23 +1,30 @@
1
1
  import { copyNode } from 'myst-common';
2
- import { remove } from 'unist-util-remove';
2
+ import { selectAll } from 'unist-util-select';
3
3
  /**
4
- * Move footnotes and sections from back to body
4
+ * Copy footnotes and sections from back into body tree
5
5
  *
6
- * Currently we only pass body to JATS convert plugin, so we move parts of
7
- * the backmatter that need parsing to body.
6
+ * Back is not modified.
8
7
  */
9
- export function backToBodyTransform(jats) {
10
- var _a, _b;
11
- if (!jats.back)
8
+ export function backToBodyTransform(body, back) {
9
+ var _a;
10
+ if (!back)
12
11
  return;
13
- const backNodes = (_a = jats.back.children) === null || _a === void 0 ? void 0 : _a.filter((node) => {
14
- return ['fn-group', 'sec', 'ack'].includes(node.type);
12
+ const backNodes = (_a = back.children) === null || _a === void 0 ? void 0 : _a.filter((node) => {
13
+ return ['fn-group', 'sec', 'ack', 'app-group'].includes(node.type);
15
14
  });
16
- if (!((_b = jats.body) === null || _b === void 0 ? void 0 : _b.children) || backNodes.length === 0)
15
+ if (!(body === null || body === void 0 ? void 0 : body.children) || backNodes.length === 0)
17
16
  return;
18
- jats.body.children.push({ type: 'hr' }, ...copyNode(backNodes));
19
- backNodes.forEach((node) => {
20
- node.type = '__delete__';
17
+ body.children.push({ type: 'hr' }, ...copyNode(backNodes));
18
+ }
19
+ /**
20
+ * Leave table footnotes in legend if they are not referenced anywhere
21
+ */
22
+ export function tableFootnotesToLegend(tree) {
23
+ const tableFns = selectAll('legend > footnoteDefinition', tree);
24
+ const fnRefs = selectAll('footnoteReference', tree).map(({ identifier }) => identifier);
25
+ tableFns.forEach((tableFn) => {
26
+ if (tableFn.identifier && fnRefs.includes(tableFn.identifier))
27
+ return;
28
+ tableFn.type = 'paragraph';
21
29
  });
22
- remove(jats.back, '__delete__');
23
30
  }
@@ -1,17 +1,16 @@
1
- import type { GenericParent, GenericNode } from 'myst-common';
2
1
  import type { Plugin } from 'unified';
3
2
  import type { VFile } from 'vfile';
3
+ import type { Body } from 'jats-tags';
4
4
  export * from './abbreviations.js';
5
5
  export * from './abstract.js';
6
6
  export * from './admonitions.js';
7
7
  export * from './biorxiv.js';
8
- export * from './citations.js';
9
8
  export * from './figureCaptions.js';
10
9
  export * from './footnotes.js';
11
10
  export * from './references.js';
12
11
  export * from './sections.js';
13
12
  export * from './typography.js';
14
- export declare function basicTransformations(tree: GenericParent, file: VFile): void;
15
- export declare const basicTransformationsPlugin: Plugin<[], GenericParent, GenericParent>;
16
- export declare function journalTransforms(tree?: GenericNode): void;
13
+ export declare function basicTransformations(body: Body, file: VFile): void;
14
+ export declare const basicTransformationsPlugin: Plugin<[], Body, Body>;
15
+ export declare function journalTransforms(body: Body): void;
17
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAQnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAEhC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,QAKpE;AAED,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,aAAa,CAG7E,CAAC;AAEJ,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,QAEnD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAEhC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,QAK3D;AAED,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAE7D,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,QAE3C"}
@@ -7,21 +7,20 @@ export * from './abbreviations.js';
7
7
  export * from './abstract.js';
8
8
  export * from './admonitions.js';
9
9
  export * from './biorxiv.js';
10
- export * from './citations.js';
11
10
  export * from './figureCaptions.js';
12
11
  export * from './footnotes.js';
13
12
  export * from './references.js';
14
13
  export * from './sections.js';
15
14
  export * from './typography.js';
16
- export function basicTransformations(tree, file) {
17
- sectionTransform(tree);
18
- typographyTransform(tree);
19
- admonitionTransform(tree, file);
20
- figCaptionTitleTransform(tree);
15
+ export function basicTransformations(body, file) {
16
+ sectionTransform(body);
17
+ typographyTransform(body);
18
+ admonitionTransform(body, file);
19
+ figCaptionTitleTransform(body);
21
20
  }
22
- export const basicTransformationsPlugin = () => (tree, file) => {
23
- basicTransformations(tree, file);
21
+ export const basicTransformationsPlugin = () => (body, file) => {
22
+ basicTransformations(body, file);
24
23
  };
25
- export function journalTransforms(tree) {
26
- graphicToBioRxivUrl(tree);
24
+ export function journalTransforms(body) {
25
+ graphicToBioRxivUrl(body);
27
26
  }
@@ -0,0 +1,6 @@
1
+ import type { GenericParent } from 'myst-common';
2
+ /**
3
+ * Remove duplicate Data Availability title from data-availability part
4
+ */
5
+ export declare function dataAvailabilityTransform(tree: GenericParent): void;
6
+ //# sourceMappingURL=parts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/transforms/parts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,aAAa,CAAC;AAK9D;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,QAW5D"}
@@ -0,0 +1,18 @@
1
+ import { toText } from 'myst-common';
2
+ import { remove } from 'unist-util-remove';
3
+ import { selectAll } from 'unist-util-select';
4
+ /**
5
+ * Remove duplicate Data Availability title from data-availability part
6
+ */
7
+ export function dataAvailabilityTransform(tree) {
8
+ const dataAvailability = selectAll('sec[sec-type=data-availability]', tree);
9
+ dataAvailability.forEach((node) => {
10
+ const titles = selectAll('title', node);
11
+ titles.forEach((title) => {
12
+ if (toText(title).toLowerCase() === 'data availability') {
13
+ title.type = '__delete__';
14
+ }
15
+ });
16
+ });
17
+ remove(tree, '__delete__');
18
+ }
@@ -1,6 +1,6 @@
1
1
  import 'dotenv/config.js';
2
+ import type { Body, Reference } from 'jats-tags';
2
3
  import type { GenericParent } from 'myst-common';
3
- import type { Jats } from 'jats-xml';
4
4
  import type { Options } from '../types.js';
5
5
  type ProcessedReference = {
6
6
  cite?: string;
@@ -18,7 +18,16 @@ type ProcessedReference = {
18
18
  * This function also writes a bibtex file if necessary and appends footnotes
19
19
  * to the jats tree.
20
20
  */
21
- export declare function processJatsReferences(jats: Jats, opts?: Options): Promise<Record<string, ProcessedReference[]>>;
21
+ export declare function processJatsReferences(body: Body, references: Reference[], opts?: Options): Record<string, ProcessedReference[]>;
22
+ /**
23
+ * Generate a DOI lookup dictionary for a list of References with PubMed IDs
24
+ *
25
+ * This will load lookup dictionary cached on path, if available,
26
+ * then query (and cache) NIH APIs for other PMIDs
27
+ *
28
+ * Returns PMID -> DOI lookup dictionary
29
+ */
30
+ export declare function getPMIDLookup(refs: Reference[], dir: string): Promise<Record<string, string | null>>;
22
31
  /**
23
32
  * Resolve cite nodes using reference lookup
24
33
  *
@@ -1 +1 @@
1
- {"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../../src/transforms/references.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAM1B,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,aAAa,CAAC;AAI9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAW3C,KAAK,kBAAkB,GAAG;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AA6RF;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,iDA2DrE;AAsCD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,iBAqChD"}
1
+ {"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../../src/transforms/references.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAI1B,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,aAAa,CAAC;AAI9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAW3C,KAAK,kBAAkB,GAAG;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AA6RF;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,EAAE,OAAO,wCA0DxF;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,MAAM,0CAejE;AAaD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,iBAqChD"}
@@ -1,7 +1,6 @@
1
1
  import 'dotenv/config.js';
2
2
  import fs from 'node:fs';
3
3
  import path from 'node:path';
4
- // import OpenAI from 'openai';
5
4
  import { convertPMIDs2DOIs, normalizePMID } from 'jats-fetch';
6
5
  import { copyNode, liftChildren, normalizeLabel } from 'myst-common';
7
6
  import { select, selectAll } from 'unist-util-select';
@@ -183,7 +182,7 @@ function bibtexFromCite(key, cite, counts, doi) {
183
182
  }
184
183
  if (bibtexLines.length === 1) {
185
184
  counts.unprocessed += 1;
186
- // console.log(`This needs addressing: ${key}`);
185
+ bibtexLines.push(` note = {${toText(cite)}}`);
187
186
  }
188
187
  else {
189
188
  counts.bibtex += 1;
@@ -266,7 +265,7 @@ function processRef(ref, pmidCache, fnCount, counts, dois) {
266
265
  const footnotes = [];
267
266
  const bibtexEntries = [];
268
267
  (_b = ref.children) === null || _b === void 0 ? void 0 : _b.forEach((child) => {
269
- if (['element-citation', 'mixed-citation'].includes(child.type)) {
268
+ if (['element-citation', 'mixed-citation', 'citation'].includes(child.type)) {
270
269
  if (!toText(child))
271
270
  return;
272
271
  const cite = processRefCite(child, identifier, pmidCache, counts, dois);
@@ -307,15 +306,14 @@ function processRef(ref, pmidCache, fnCount, counts, dois) {
307
306
  * This function also writes a bibtex file if necessary and appends footnotes
308
307
  * to the jats tree.
309
308
  */
310
- export async function processJatsReferences(jats, opts) {
309
+ export function processJatsReferences(body, references, opts) {
311
310
  var _a, _b;
312
311
  const dir = (_a = opts === null || opts === void 0 ? void 0 : opts.dir) !== null && _a !== void 0 ? _a : '.';
313
312
  const bibfile = path.join(dir, 'main.bib');
314
- const refs = jats.references;
313
+ const pmidCache = (_b = opts === null || opts === void 0 ? void 0 : opts.pmidCache) !== null && _b !== void 0 ? _b : {};
315
314
  let refLookup = {};
316
315
  const footnotes = [];
317
316
  const bibtexEntries = [];
318
- const pmidCache = await getPMIDLookup(refs, dir);
319
317
  const counts = {
320
318
  dois: 0,
321
319
  bibtex: 0,
@@ -323,7 +321,7 @@ export async function processJatsReferences(jats, opts) {
323
321
  lostRefs: [],
324
322
  lostRefItems: [],
325
323
  };
326
- refs.forEach((ref) => {
324
+ references.forEach((ref) => {
327
325
  const { refLookup: newRefLookup, footnotes: newFootnotes, bibtexEntries: newBibtexEntries, } = processRef(ref, pmidCache, footnotes.length + 1, counts, opts === null || opts === void 0 ? void 0 : opts.dois);
328
326
  refLookup = { ...refLookup, ...newRefLookup };
329
327
  bibtexEntries.push(...newBibtexEntries);
@@ -331,7 +329,7 @@ export async function processJatsReferences(jats, opts) {
331
329
  });
332
330
  if (opts === null || opts === void 0 ? void 0 : opts.logInfo) {
333
331
  opts.logInfo.references = {
334
- total: refs.length,
332
+ total: references.length,
335
333
  dois: counts.dois,
336
334
  bibtex: counts.bibtex,
337
335
  footnotes: footnotes.length,
@@ -362,7 +360,7 @@ export async function processJatsReferences(jats, opts) {
362
360
  fs.writeFileSync(bibfile, bibtexEntries.join('\n\n'));
363
361
  }
364
362
  if (footnotes.length) {
365
- (_b = jats.body) === null || _b === void 0 ? void 0 : _b.children.push({ type: 'fn-group', children: footnotes });
363
+ body.children.push({ type: 'fn-group', children: footnotes });
366
364
  }
367
365
  return refLookup;
368
366
  }
@@ -374,7 +372,7 @@ export async function processJatsReferences(jats, opts) {
374
372
  *
375
373
  * Returns PMID -> DOI lookup dictionary
376
374
  */
377
- async function getPMIDLookup(refs, dir) {
375
+ export async function getPMIDLookup(refs, dir) {
378
376
  const pmids = refs
379
377
  .map((ref) => {
380
378
  const pmidElement = select('ext-link,[pub-id-type=pmid]', ref);
@@ -1 +1 @@
1
- {"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../src/transforms/sections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,aAAa,CAAC;AAqC9D;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,QASrF;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,aAAa,CAElE,CAAC"}
1
+ {"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../src/transforms/sections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,aAAa,CAAC;AAgD9D;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,QAUrF;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,aAAa,CAElE,CAAC"}
@@ -1,9 +1,16 @@
1
1
  import { liftChildren, toText } from 'myst-common';
2
2
  import { blockNestingTransform } from 'myst-transforms';
3
- import { select } from 'unist-util-select';
3
+ import { select, selectAll } from 'unist-util-select';
4
4
  import { remove } from 'unist-util-remove';
5
+ const SECTION_TYPES = ['sec', 'ack', 'app'];
5
6
  function isSection(node) {
6
- return node.type === 'sec' || node.type === 'ack';
7
+ return SECTION_TYPES.includes(node.type);
8
+ }
9
+ function liftApps(tree) {
10
+ selectAll('app-group', tree).forEach((group) => {
11
+ group.type = '__lift__';
12
+ });
13
+ liftChildren(tree, '__lift__');
7
14
  }
8
15
  function recurseSections(tree, depth = 1, titleType) {
9
16
  var _a;
@@ -34,6 +41,9 @@ function recurseSections(tree, depth = 1, titleType) {
34
41
  }
35
42
  if (sec.type === 'ack')
36
43
  sec.part = 'acknowledgments';
44
+ if (sec.type === 'app')
45
+ sec.part = 'appendix';
46
+ sec.type = 'sec';
37
47
  recurseSections(sec, depth + 1, titleType);
38
48
  });
39
49
  }
@@ -47,6 +57,7 @@ function recurseSections(tree, depth = 1, titleType) {
47
57
  */
48
58
  export function sectionTransform(tree, titleType) {
49
59
  var _a;
60
+ liftApps(tree);
50
61
  recurseSections(tree, 1, titleType);
51
62
  remove(tree, '__delete__');
52
63
  const topSections = (_a = tree.children) === null || _a === void 0 ? void 0 : _a.filter((n) => isSection(n));
@@ -1,6 +1,6 @@
1
- import type { Jats } from 'jats-xml';
1
+ import type { Body } from 'jats-tags';
2
2
  /**
3
3
  * Move any supplementary-material marked as position=float to end of document
4
4
  */
5
- export declare function floatToEndTransform(jats: Jats): void;
5
+ export declare function floatToEndTransform(body: Body): void;
6
6
  //# sourceMappingURL=supplementary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"supplementary.d.ts","sourceRoot":"","sources":["../../src/transforms/supplementary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAKrC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,QAY7C"}
1
+ {"version":3,"file":"supplementary.d.ts","sourceRoot":"","sources":["../../src/transforms/supplementary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKtC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,QAW7C"}
@@ -1,23 +1,21 @@
1
1
  import { selectAll } from 'unist-util-select';
2
- import { copyNode } from '../utils.js';
3
2
  import { remove } from 'unist-util-remove';
3
+ import { copyNode } from '../utils.js';
4
4
  /**
5
5
  * Move any supplementary-material marked as position=float to end of document
6
6
  */
7
- export function floatToEndTransform(jats) {
7
+ export function floatToEndTransform(body) {
8
8
  var _a;
9
- if (!jats.body)
10
- return;
11
- const floatSupplementaryMaterial = selectAll('supplementary-material[position=float]', jats.body);
9
+ const floatSupplementaryMaterial = selectAll('supplementary-material[position=float]', body);
12
10
  if (floatSupplementaryMaterial.length === 0)
13
11
  return;
14
- (_a = jats.body.children) === null || _a === void 0 ? void 0 : _a.push({ type: 'hr' });
12
+ (_a = body.children) === null || _a === void 0 ? void 0 : _a.push({ type: 'hr' });
15
13
  floatSupplementaryMaterial.forEach((node) => {
16
- var _a, _b;
14
+ var _a;
17
15
  const copy = copyNode(node);
18
16
  delete copy.position;
19
- (_b = (_a = jats.body) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.push(copy);
17
+ (_a = body === null || body === void 0 ? void 0 : body.children) === null || _a === void 0 ? void 0 : _a.push(copy);
20
18
  node.type = '__delete__';
21
19
  });
22
- remove(jats.body, '__delete__');
20
+ remove(body, '__delete__');
23
21
  }
package/dist/types.d.ts CHANGED
@@ -1,18 +1,11 @@
1
1
  import type { PageFrontmatter } from 'myst-frontmatter';
2
- import type { GenericNode, MessageInfo } from 'myst-common';
2
+ import type { GenericNode, GenericParent, MessageInfo } from 'myst-common';
3
3
  import type { Jats } from 'jats-xml';
4
- import type { Root } from 'myst-spec';
5
4
  import type { VFile } from 'vfile';
6
5
  export type Handler = (node: GenericNode, state: IJatsParser, parent: any) => void;
7
6
  export type JatsResult = {
8
- references: {
9
- order: string[];
10
- data: Record<string, {
11
- html: string;
12
- doi: string;
13
- }>;
14
- };
15
- tree: Root;
7
+ tree: GenericParent;
8
+ frontmatter: PageFrontmatter;
16
9
  };
17
10
  export type MathPlugins = Required<PageFrontmatter>['math'];
18
11
  export type Options = {
@@ -20,6 +13,7 @@ export type Options = {
20
13
  handlers?: Record<string, Handler>;
21
14
  dir?: string;
22
15
  logInfo?: Record<string, any>;
16
+ pmidCache?: Record<string, string | null>;
23
17
  dois?: boolean;
24
18
  bibtex?: boolean;
25
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,MAAM,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;AAEnF,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IACrF,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE9B,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;IACpE,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC;IACR,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,GAAG,EAAE,MAAM,WAAW,CAAC;IACvB,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,cAAc,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IACpC,YAAY,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAC1F,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAClE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IACnE,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IACrE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;CACvE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,MAAM,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;AAEnF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,eAAe,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAE1C,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;IACpE,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC;IACR,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,GAAG,EAAE,MAAM,WAAW,CAAC;IACvB,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,cAAc,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IACpC,YAAY,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAC1F,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAClE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IACnE,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IACrE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;CACvE"}
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- declare const version = "1.0.13";
1
+ declare const version = "1.0.14";
2
2
  export default version;
3
3
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- const version = '1.0.13';
1
+ const version = '1.0.14';
2
2
  export default version;
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "jats-convert",
3
- "version": "1.0.13",
3
+ "version": "1.0.14",
4
4
  "description": "Read JATS and convert to MyST-spec frontmatter and AST",
5
- "author": "Rowan Cockett <rowan@curvenote.com>",
6
- "homepage": "https://github.com/curvenote/jats/tree/main/packages/jats-convert",
5
+ "author": "Rowan Cockett <rowan@continuous.foundation>",
6
+ "homepage": "https://github.com/continuous-foundation/jats/tree/main/packages/jats-convert",
7
7
  "license": "MIT",
8
8
  "type": "module",
9
9
  "exports": "./dist/index.js",
@@ -20,7 +20,7 @@
20
20
  },
21
21
  "repository": {
22
22
  "type": "git",
23
- "url": "git+https://github.com/curvenote/jats.git"
23
+ "url": "git+https://github.com/continuous-foundation/jats.git"
24
24
  },
25
25
  "scripts": {
26
26
  "copy:version": "echo \"const version = '\"$npm_package_version\"';\nexport default version;\" > src/version.ts",
@@ -33,14 +33,14 @@
33
33
  "build": "npm-run-all -l clean copy:version -p build:esm"
34
34
  },
35
35
  "bugs": {
36
- "url": "https://github.com/curvenote/jats/issues"
36
+ "url": "https://github.com/continuous-foundation/jats/issues"
37
37
  },
38
38
  "dependencies": {
39
39
  "doi-utils": "^2.0.3",
40
40
  "dotenv": "^16.4.5",
41
- "jats-fetch": "^1.0.13",
42
- "jats-tags": "^1.0.13",
43
- "jats-xml": "^1.0.13",
41
+ "jats-fetch": "^1.0.14",
42
+ "jats-tags": "^1.0.14",
43
+ "jats-xml": "^1.0.14",
44
44
  "js-yaml": "^4.1.0",
45
45
  "mathml-to-latex": "^1.3.0",
46
46
  "myst-cli-utils": "^2.0.11",
@@ -1,8 +0,0 @@
1
- import type { GenericNode } from 'myst-common';
2
- /**
3
- * Replace invalid 'citation' element with 'mixed-citation'
4
- *
5
- * This occurs in JATS from multiple publishers
6
- */
7
- export declare function citationToMixedCitation(tree?: GenericNode): void;
8
- //# sourceMappingURL=citations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"citations.d.ts","sourceRoot":"","sources":["../../src/transforms/citations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,CAAC,EAAE,WAAW,QAIzD"}
@@ -1,11 +0,0 @@
1
- import { selectAll } from 'unist-util-select';
2
- /**
3
- * Replace invalid 'citation' element with 'mixed-citation'
4
- *
5
- * This occurs in JATS from multiple publishers
6
- */
7
- export function citationToMixedCitation(tree) {
8
- selectAll('citation', tree).forEach((node) => {
9
- node.type = 'mixed-citation';
10
- });
11
- }