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.
- package/README.md +5 -5
- package/dist/index.d.ts +7 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +109 -79
- package/dist/myst/abbreviations.d.ts +11 -0
- package/dist/myst/abbreviations.d.ts.map +1 -0
- package/dist/myst/abbreviations.js +80 -0
- package/dist/myst/inlineCitations.d.ts.map +1 -1
- package/dist/myst/inlineCitations.js +40 -0
- package/dist/transforms/abbreviations.d.ts +5 -0
- package/dist/transforms/abbreviations.d.ts.map +1 -1
- package/dist/transforms/abbreviations.js +38 -0
- package/dist/transforms/footnotes.d.ts +9 -5
- package/dist/transforms/footnotes.d.ts.map +1 -1
- package/dist/transforms/footnotes.js +21 -14
- package/dist/transforms/index.d.ts +4 -5
- package/dist/transforms/index.d.ts.map +1 -1
- package/dist/transforms/index.js +9 -10
- package/dist/transforms/parts.d.ts +6 -0
- package/dist/transforms/parts.d.ts.map +1 -0
- package/dist/transforms/parts.js +18 -0
- package/dist/transforms/references.d.ts +11 -2
- package/dist/transforms/references.d.ts.map +1 -1
- package/dist/transforms/references.js +8 -10
- package/dist/transforms/sections.d.ts.map +1 -1
- package/dist/transforms/sections.js +13 -2
- package/dist/transforms/supplementary.d.ts +2 -2
- package/dist/transforms/supplementary.d.ts.map +1 -1
- package/dist/transforms/supplementary.js +7 -9
- package/dist/types.d.ts +4 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +8 -8
- package/dist/transforms/citations.d.ts +0 -8
- package/dist/transforms/citations.d.ts.map +0 -1
- package/dist/transforms/citations.js +0 -11
package/README.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
# jats-convert
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/jats-convert)
|
|
4
|
-
[](https://github.com/
|
|
5
|
-
[](https://github.com/continuous-foundation/jats/blob/main/LICENSE)
|
|
5
|
+
[](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
|
|
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://
|
|
16
|
-
<img src="https://
|
|
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?],
|
|
34
|
-
export declare function jatsConvertTransform(
|
|
35
|
-
tree:
|
|
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
|
|
37
|
+
};
|
|
38
|
+
export declare function jatsConvert(session: ISession, input?: string, opts?: {
|
|
41
39
|
frontmatter?: 'page' | 'project';
|
|
42
40
|
dois?: boolean;
|
|
43
41
|
bibtex?: boolean;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
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,
|
|
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
|
|
85
|
-
identifier
|
|
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
|
|
127
|
-
identifier
|
|
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
|
|
140
|
-
identifier
|
|
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 = (
|
|
507
|
-
if (jats.abstract)
|
|
549
|
+
this.Compiler = (body, file) => {
|
|
550
|
+
if (jats.abstract) {
|
|
508
551
|
abstractTransform(jats.abstract);
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
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
|
-
|
|
561
|
+
body.children.push(...g.children);
|
|
523
562
|
});
|
|
524
563
|
}
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
const
|
|
529
|
-
|
|
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
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
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
|
-
|
|
567
|
-
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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;
|
|
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,
|
|
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 {
|
|
1
|
+
import type { GenericParent } from 'myst-common';
|
|
2
|
+
import type { Back, Body } from 'jats-tags';
|
|
2
3
|
/**
|
|
3
|
-
*
|
|
4
|
+
* Copy footnotes and sections from back into body tree
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
-
* the backmatter that need parsing to body.
|
|
6
|
+
* Back is not modified.
|
|
7
7
|
*/
|
|
8
|
-
export declare function backToBodyTransform(
|
|
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":"
|
|
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 {
|
|
2
|
+
import { selectAll } from 'unist-util-select';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Copy footnotes and sections from back into body tree
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* the backmatter that need parsing to body.
|
|
6
|
+
* Back is not modified.
|
|
8
7
|
*/
|
|
9
|
-
export function backToBodyTransform(
|
|
10
|
-
var _a
|
|
11
|
-
if (!
|
|
8
|
+
export function backToBodyTransform(body, back) {
|
|
9
|
+
var _a;
|
|
10
|
+
if (!back)
|
|
12
11
|
return;
|
|
13
|
-
const backNodes = (_a =
|
|
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 (!(
|
|
15
|
+
if (!(body === null || body === void 0 ? void 0 : body.children) || backNodes.length === 0)
|
|
17
16
|
return;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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(
|
|
15
|
-
export declare const basicTransformationsPlugin: Plugin<[],
|
|
16
|
-
export declare function journalTransforms(
|
|
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,
|
|
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"}
|
package/dist/transforms/index.js
CHANGED
|
@@ -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(
|
|
17
|
-
sectionTransform(
|
|
18
|
-
typographyTransform(
|
|
19
|
-
admonitionTransform(
|
|
20
|
-
figCaptionTitleTransform(
|
|
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 = () => (
|
|
23
|
-
basicTransformations(
|
|
21
|
+
export const basicTransformationsPlugin = () => (body, file) => {
|
|
22
|
+
basicTransformations(body, file);
|
|
24
23
|
};
|
|
25
|
-
export function journalTransforms(
|
|
26
|
-
graphicToBioRxivUrl(
|
|
24
|
+
export function journalTransforms(body) {
|
|
25
|
+
graphicToBioRxivUrl(body);
|
|
27
26
|
}
|
|
@@ -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(
|
|
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;
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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;
|
|
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
|
|
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 {
|
|
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(
|
|
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,
|
|
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(
|
|
7
|
+
export function floatToEndTransform(body) {
|
|
8
8
|
var _a;
|
|
9
|
-
|
|
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 =
|
|
12
|
+
(_a = body.children) === null || _a === void 0 ? void 0 : _a.push({ type: 'hr' });
|
|
15
13
|
floatSupplementaryMaterial.forEach((node) => {
|
|
16
|
-
var _a
|
|
14
|
+
var _a;
|
|
17
15
|
const copy = copyNode(node);
|
|
18
16
|
delete copy.position;
|
|
19
|
-
(
|
|
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(
|
|
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
|
-
|
|
9
|
-
|
|
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
|
};
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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;
|
|
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
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const version = '1.0.
|
|
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.
|
|
3
|
+
"version": "1.0.14",
|
|
4
4
|
"description": "Read JATS and convert to MyST-spec frontmatter and AST",
|
|
5
|
-
"author": "Rowan Cockett <rowan@
|
|
6
|
-
"homepage": "https://github.com/
|
|
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/
|
|
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/
|
|
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.
|
|
42
|
-
"jats-tags": "^1.0.
|
|
43
|
-
"jats-xml": "^1.0.
|
|
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
|
-
}
|