@manuscripts/transform 1.5.8 → 2.0.0
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/dist/cjs/index.js +1 -1
- package/dist/cjs/jats/importer/index.js +1 -3
- package/dist/cjs/jats/importer/jats-body-dom-parser.js +23 -227
- package/dist/cjs/jats/importer/jats-body-transformations.js +110 -201
- package/dist/cjs/jats/importer/jats-comments.js +100 -98
- package/dist/cjs/jats/importer/jats-front-parser.js +87 -81
- package/dist/cjs/jats/importer/jats-journal-meta-parser.js +51 -39
- package/dist/cjs/jats/importer/jats-parser-utils.js +17 -56
- package/dist/cjs/jats/importer/jats-reference-parser.js +24 -79
- package/dist/cjs/jats/importer/jats-references.js +34 -0
- package/dist/cjs/jats/importer/parse-jats-article.js +67 -173
- package/dist/cjs/jats/index.js +1 -3
- package/dist/cjs/jats/jats-exporter.js +34 -55
- package/dist/cjs/lib/section-group-type.js +30 -0
- package/dist/cjs/lib/utils.js +1 -25
- package/dist/cjs/schema/index.js +20 -17
- package/dist/cjs/schema/nodes/abstracts.js +27 -0
- package/dist/cjs/schema/nodes/affiliations.js +27 -0
- package/dist/cjs/schema/nodes/backmatter.js +27 -0
- package/dist/cjs/schema/nodes/body.js +27 -0
- package/dist/cjs/schema/nodes/citation.js +10 -15
- package/dist/cjs/schema/nodes/{comment_list.js → comments.js} +4 -4
- package/dist/cjs/schema/nodes/contributors.js +27 -0
- package/dist/cjs/schema/nodes/{meta_section.js → core_section.js} +6 -5
- package/dist/cjs/schema/nodes/cross_reference.js +4 -3
- package/dist/cjs/schema/nodes/inline_footnote.js +6 -5
- package/dist/cjs/schema/nodes/keyword.js +0 -1
- package/dist/cjs/schema/nodes/{keywords_group.js → keyword_group.js} +6 -6
- package/dist/cjs/schema/nodes/{keywords_section.js → keywords.js} +7 -7
- package/dist/cjs/schema/nodes/keywords_element.js +1 -1
- package/dist/cjs/schema/nodes/manuscript.js +5 -2
- package/dist/cjs/transformer/builders.js +9 -86
- package/dist/cjs/transformer/decode.js +147 -176
- package/dist/cjs/transformer/encode.js +66 -67
- package/dist/cjs/transformer/highlight-markers.js +48 -36
- package/dist/cjs/transformer/html.js +7 -23
- package/dist/cjs/transformer/labels.js +3 -17
- package/dist/cjs/transformer/node-names.js +1 -1
- package/dist/cjs/transformer/node-title.js +1 -1
- package/dist/cjs/transformer/node-types.js +7 -6
- package/dist/cjs/transformer/object-types.js +1 -2
- package/dist/cjs/transformer/section-category.js +31 -31
- package/dist/es/index.js +1 -1
- package/dist/es/jats/importer/index.js +1 -1
- package/dist/es/jats/importer/jats-body-dom-parser.js +23 -227
- package/dist/es/jats/importer/jats-body-transformations.js +111 -202
- package/dist/es/jats/importer/jats-comments.js +97 -96
- package/dist/es/jats/importer/jats-front-parser.js +88 -82
- package/dist/es/jats/importer/jats-journal-meta-parser.js +51 -39
- package/dist/es/jats/importer/jats-parser-utils.js +16 -54
- package/dist/es/jats/importer/jats-reference-parser.js +27 -82
- package/dist/es/jats/importer/jats-references.js +30 -0
- package/dist/es/jats/importer/parse-jats-article.js +70 -174
- package/dist/es/jats/index.js +1 -1
- package/dist/es/jats/jats-exporter.js +34 -55
- package/dist/es/lib/section-group-type.js +27 -0
- package/dist/es/lib/utils.js +0 -22
- package/dist/es/schema/index.js +21 -18
- package/dist/es/schema/nodes/abstracts.js +24 -0
- package/dist/es/schema/nodes/affiliations.js +24 -0
- package/dist/es/schema/nodes/backmatter.js +24 -0
- package/dist/es/schema/nodes/body.js +24 -0
- package/dist/es/schema/nodes/citation.js +10 -15
- package/dist/es/schema/nodes/{comment_list.js → comments.js} +3 -3
- package/dist/es/schema/nodes/contributors.js +24 -0
- package/dist/es/schema/nodes/{meta_section.js → core_section.js} +5 -4
- package/dist/es/schema/nodes/cross_reference.js +4 -3
- package/dist/es/schema/nodes/inline_footnote.js +6 -5
- package/dist/es/schema/nodes/keyword.js +0 -1
- package/dist/es/schema/nodes/{keywords_group.js → keyword_group.js} +4 -4
- package/dist/es/schema/nodes/{keywords_section.js → keywords.js} +5 -5
- package/dist/es/schema/nodes/keywords_element.js +1 -1
- package/dist/es/schema/nodes/manuscript.js +3 -1
- package/dist/es/transformer/builders.js +6 -73
- package/dist/es/transformer/decode.js +147 -175
- package/dist/es/transformer/encode.js +70 -71
- package/dist/es/transformer/highlight-markers.js +44 -32
- package/dist/es/transformer/html.js +7 -23
- package/dist/es/transformer/labels.js +3 -17
- package/dist/es/transformer/node-names.js +1 -1
- package/dist/es/transformer/node-title.js +1 -1
- package/dist/es/transformer/node-types.js +7 -6
- package/dist/es/transformer/object-types.js +0 -1
- package/dist/es/transformer/section-category.js +29 -29
- package/dist/types/index.d.ts +1 -1
- package/dist/types/jats/importer/index.d.ts +1 -1
- package/dist/types/jats/importer/jats-body-transformations.d.ts +16 -19
- package/dist/types/jats/importer/jats-comments.d.ts +13 -9
- package/dist/types/jats/importer/jats-front-parser.d.ts +35 -12
- package/dist/types/jats/importer/jats-journal-meta-parser.d.ts +4 -4
- package/dist/types/jats/importer/jats-parser-utils.d.ts +1 -6
- package/dist/types/jats/importer/jats-reference-parser.d.ts +2 -6
- package/dist/types/jats/importer/jats-references.d.ts +12 -0
- package/dist/types/jats/importer/parse-jats-article.d.ts +5 -17
- package/dist/types/jats/index.d.ts +1 -1
- package/dist/types/lib/section-group-type.d.ts +23 -0
- package/dist/types/lib/utils.d.ts +1 -4
- package/dist/types/schema/index.d.ts +4 -5
- package/dist/types/schema/nodes/{meta_section.d.ts → abstracts.d.ts} +1 -9
- package/dist/types/schema/nodes/affiliations.d.ts +17 -0
- package/dist/types/schema/nodes/backmatter.d.ts +17 -0
- package/dist/types/schema/nodes/body.d.ts +17 -0
- package/dist/types/schema/nodes/citation.d.ts +3 -5
- package/dist/types/schema/nodes/comments.d.ts +17 -0
- package/dist/types/schema/nodes/contributors.d.ts +17 -0
- package/dist/types/schema/nodes/core_section.d.ts +17 -0
- package/dist/types/schema/nodes/cross_reference.d.ts +1 -1
- package/dist/types/schema/nodes/inline_footnote.d.ts +1 -1
- package/dist/types/schema/nodes/keyword.d.ts +0 -1
- package/dist/types/schema/nodes/{contributors_element.d.ts → keyword_group.d.ts} +3 -4
- package/dist/types/schema/nodes/{comment_list.d.ts → keywords.d.ts} +3 -2
- package/dist/types/schema/nodes/manuscript.d.ts +1 -0
- package/dist/types/schema/types.d.ts +1 -1
- package/dist/types/transformer/builders.d.ts +2 -14
- package/dist/types/transformer/decode.d.ts +5 -9
- package/dist/types/transformer/encode.d.ts +4 -4
- package/dist/types/transformer/highlight-markers.d.ts +7 -2
- package/dist/types/transformer/object-types.d.ts +1 -2
- package/dist/types/transformer/section-category.d.ts +4 -3
- package/package.json +1 -6
- package/dist/cjs/lib/core-section-categories.js +0 -29
- package/dist/cjs/schema/nodes/affiliations_section.js +0 -36
- package/dist/cjs/schema/nodes/contributors_element.js +0 -49
- package/dist/cjs/schema/nodes/contributors_section.js +0 -36
- package/dist/es/lib/core-section-categories.js +0 -26
- package/dist/es/schema/nodes/affiliations_section.js +0 -32
- package/dist/es/schema/nodes/contributors_element.js +0 -46
- package/dist/es/schema/nodes/contributors_section.js +0 -32
- package/dist/types/lib/core-section-categories.d.ts +0 -8
- package/dist/types/schema/nodes/affiliations_section.d.ts +0 -11
- package/dist/types/schema/nodes/contributors_section.d.ts +0 -12
- package/dist/types/schema/nodes/keywords_group.d.ts +0 -26
- package/dist/types/schema/nodes/keywords_section.d.ts +0 -26
|
@@ -15,33 +15,21 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.htmlFromJatsNode = exports.
|
|
19
|
-
const json_schema_1 = require("@manuscripts/json-schema");
|
|
18
|
+
exports.htmlFromJatsNode = exports.updateDocumentIDs = void 0;
|
|
20
19
|
const transformer_1 = require("../../transformer");
|
|
21
|
-
const
|
|
22
|
-
const excludedObjectTypes = [json_schema_1.ObjectTypes.Contributor, json_schema_1.ObjectTypes.Affiliation];
|
|
23
|
-
function flatten(arrays) {
|
|
24
|
-
return [].concat(...arrays);
|
|
25
|
-
}
|
|
26
|
-
exports.flatten = flatten;
|
|
27
|
-
const fixBodyPMNode = (output, models, referenceIdsMap = new Map()) => {
|
|
28
|
-
const replacements = referenceIdsMap;
|
|
20
|
+
const updateDocumentIDs = (node, replacements) => {
|
|
29
21
|
const warnings = [];
|
|
30
|
-
recurseDoc(
|
|
31
|
-
recurseDoc(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
replacements,
|
|
35
|
-
};
|
|
22
|
+
recurseDoc(node, (n) => updateNodeID(n, replacements, warnings));
|
|
23
|
+
recurseDoc(node, (n) => updateNodeRID(n, replacements, warnings));
|
|
24
|
+
recurseDoc(node, (n) => updateNodeRIDS(n, replacements, warnings));
|
|
25
|
+
return warnings;
|
|
36
26
|
};
|
|
37
|
-
exports.
|
|
27
|
+
exports.updateDocumentIDs = updateDocumentIDs;
|
|
38
28
|
function recurseDoc(node, fn) {
|
|
39
29
|
fn(node);
|
|
40
|
-
|
|
41
|
-
node.content.forEach((n) => recurseDoc(n, fn));
|
|
42
|
-
}
|
|
30
|
+
node.descendants((n) => fn(n));
|
|
43
31
|
}
|
|
44
|
-
const
|
|
32
|
+
const updateNodeID = (node, replacements, warnings) => {
|
|
45
33
|
if (!('id' in node.attrs)) {
|
|
46
34
|
return;
|
|
47
35
|
}
|
|
@@ -50,9 +38,6 @@ const addMissingID = (node, replacements, warnings) => {
|
|
|
50
38
|
warnings.push(`Unknown object type for node type ${node.type.name}`);
|
|
51
39
|
return;
|
|
52
40
|
}
|
|
53
|
-
if (excludedObjectTypes.includes(objectType)) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
41
|
const previousID = node.attrs.id;
|
|
57
42
|
const nextID = (0, transformer_1.generateID)(objectType);
|
|
58
43
|
if (previousID) {
|
|
@@ -65,7 +50,7 @@ const addMissingID = (node, replacements, warnings) => {
|
|
|
65
50
|
}
|
|
66
51
|
node.attrs = Object.assign(Object.assign({}, node.attrs), { id: nextID });
|
|
67
52
|
};
|
|
68
|
-
const
|
|
53
|
+
const updateNodeRID = (node, replacements, warnings) => {
|
|
69
54
|
const previousRID = node.attrs.rid;
|
|
70
55
|
if (!('rid' in node.attrs) || !previousRID) {
|
|
71
56
|
return;
|
|
@@ -76,36 +61,12 @@ const addMissingRID = (node, replacements, warnings) => {
|
|
|
76
61
|
node.attrs = Object.assign(Object.assign({}, node.attrs), { rid: replacements.get(previousRID) });
|
|
77
62
|
}
|
|
78
63
|
};
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
warnings.push(`Missing replacement for model.referencedObject ${referencedObject}`);
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
models.forEach((model) => {
|
|
91
|
-
var _a;
|
|
92
|
-
if (isAuxiliaryObjectReference(model)) {
|
|
93
|
-
if (model.referencedObject) {
|
|
94
|
-
model.referencedObject = getReferenceId(model.referencedObject);
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
const referencedObjects = [];
|
|
98
|
-
(_a = model.referencedObjects) === null || _a === void 0 ? void 0 : _a.map((reference) => {
|
|
99
|
-
const referenceId = getReferenceId(reference);
|
|
100
|
-
if (referenceId) {
|
|
101
|
-
referencedObjects.push(referenceId);
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
model.referencedObjects = referencedObjects;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
return warnings;
|
|
64
|
+
const updateNodeRIDS = (node, replacements, warnings) => {
|
|
65
|
+
const previousRIDs = node.attrs.rids;
|
|
66
|
+
if (!('rids' in node.attrs) || !previousRIDs.length) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
node.attrs = Object.assign(Object.assign({}, node.attrs), { rids: previousRIDs.map((r) => replacements.get(r) || r) });
|
|
109
70
|
};
|
|
110
71
|
const JATS_TO_HTML_MAPPING = new Map([
|
|
111
72
|
['bold', 'b'],
|
|
@@ -143,7 +104,7 @@ const htmlFromJatsNode = (element, createElement) => {
|
|
|
143
104
|
return undefined;
|
|
144
105
|
}
|
|
145
106
|
const temp = createElement('template');
|
|
146
|
-
renameJatsNodesToHTML(element, temp
|
|
107
|
+
renameJatsNodesToHTML(element, temp, createElement);
|
|
147
108
|
return temp.innerHTML;
|
|
148
109
|
};
|
|
149
110
|
exports.htmlFromJatsNode = htmlFromJatsNode;
|
|
@@ -20,6 +20,7 @@ const utils_1 = require("../../lib/utils");
|
|
|
20
20
|
const builders_1 = require("../../transformer/builders");
|
|
21
21
|
const jats_comments_1 = require("./jats-comments");
|
|
22
22
|
const jats_parser_utils_1 = require("./jats-parser-utils");
|
|
23
|
+
const jats_references_1 = require("./jats-references");
|
|
23
24
|
const chooseBibliographyItemType = (publicationType) => {
|
|
24
25
|
switch (publicationType) {
|
|
25
26
|
case 'book':
|
|
@@ -31,37 +32,31 @@ const chooseBibliographyItemType = (publicationType) => {
|
|
|
31
32
|
}
|
|
32
33
|
};
|
|
33
34
|
exports.jatsReferenceParser = {
|
|
34
|
-
parseReferences(
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
const references = referenceNodes.map((referenceNode) => {
|
|
35
|
+
parseReferences(elements, createElement) {
|
|
36
|
+
const references = new jats_references_1.References();
|
|
37
|
+
elements.forEach((element) => {
|
|
38
38
|
var _a;
|
|
39
|
-
const publicationType =
|
|
39
|
+
const publicationType = element.getAttribute('publication-type');
|
|
40
40
|
const authorNodes = [
|
|
41
|
-
...
|
|
41
|
+
...element.querySelectorAll('person-group[person-group-type="author"] > *'),
|
|
42
42
|
];
|
|
43
43
|
const bibliographyItem = (0, builders_1.buildBibliographyItem)({
|
|
44
44
|
type: chooseBibliographyItemType(publicationType),
|
|
45
45
|
});
|
|
46
|
-
const titleNode =
|
|
46
|
+
const titleNode = element.querySelector('article-title');
|
|
47
47
|
if (titleNode) {
|
|
48
48
|
bibliographyItem.title = (_a = (0, jats_parser_utils_1.htmlFromJatsNode)(titleNode, createElement)) === null || _a === void 0 ? void 0 : _a.trim();
|
|
49
49
|
}
|
|
50
|
-
const
|
|
51
|
-
const mixedCitation =
|
|
50
|
+
const comments = [];
|
|
51
|
+
const mixedCitation = element.querySelector('mixed-citation');
|
|
52
52
|
mixedCitation === null || mixedCitation === void 0 ? void 0 : mixedCitation.childNodes.forEach((item) => {
|
|
53
|
-
if (
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const { queryText } = instruction;
|
|
58
|
-
queriesText.push(queryText);
|
|
53
|
+
if ((0, jats_comments_1.isJATSComment)(item)) {
|
|
54
|
+
const comment = (0, jats_comments_1.parseJATSComment)(item);
|
|
55
|
+
if (comment) {
|
|
56
|
+
comments.push(comment);
|
|
59
57
|
}
|
|
60
58
|
}
|
|
61
59
|
});
|
|
62
|
-
if (queriesText.length) {
|
|
63
|
-
referenceQueries.set(bibliographyItem._id, queriesText);
|
|
64
|
-
}
|
|
65
60
|
if (authorNodes.length <= 0) {
|
|
66
61
|
mixedCitation === null || mixedCitation === void 0 ? void 0 : mixedCitation.childNodes.forEach((item) => {
|
|
67
62
|
var _a, _b, _c;
|
|
@@ -72,34 +67,34 @@ exports.jatsReferenceParser = {
|
|
|
72
67
|
}
|
|
73
68
|
});
|
|
74
69
|
}
|
|
75
|
-
const source = (0, utils_1.getTrimmedTextContent)(
|
|
70
|
+
const source = (0, utils_1.getTrimmedTextContent)(element, 'source');
|
|
76
71
|
if (source) {
|
|
77
72
|
bibliographyItem['container-title'] = source;
|
|
78
73
|
}
|
|
79
|
-
const volume = (0, utils_1.getTrimmedTextContent)(
|
|
74
|
+
const volume = (0, utils_1.getTrimmedTextContent)(element, 'volume');
|
|
80
75
|
if (volume) {
|
|
81
76
|
bibliographyItem.volume = volume;
|
|
82
77
|
}
|
|
83
|
-
const issue = (0, utils_1.getTrimmedTextContent)(
|
|
78
|
+
const issue = (0, utils_1.getTrimmedTextContent)(element, 'issue');
|
|
84
79
|
if (issue) {
|
|
85
80
|
bibliographyItem.issue = issue;
|
|
86
81
|
}
|
|
87
|
-
const supplement = (0, utils_1.getTrimmedTextContent)(
|
|
82
|
+
const supplement = (0, utils_1.getTrimmedTextContent)(element, 'supplement');
|
|
88
83
|
if (supplement) {
|
|
89
84
|
bibliographyItem.supplement = supplement;
|
|
90
85
|
}
|
|
91
|
-
const fpage = (0, utils_1.getTrimmedTextContent)(
|
|
92
|
-
const lpage = (0, utils_1.getTrimmedTextContent)(
|
|
86
|
+
const fpage = (0, utils_1.getTrimmedTextContent)(element, 'fpage');
|
|
87
|
+
const lpage = (0, utils_1.getTrimmedTextContent)(element, 'lpage');
|
|
93
88
|
if (fpage) {
|
|
94
89
|
bibliographyItem.page = lpage ? `${fpage}-${lpage}` : fpage;
|
|
95
90
|
}
|
|
96
|
-
const year = (0, utils_1.getTrimmedTextContent)(
|
|
91
|
+
const year = (0, utils_1.getTrimmedTextContent)(element, 'year');
|
|
97
92
|
if (year) {
|
|
98
93
|
bibliographyItem.issued = (0, builders_1.buildBibliographicDate)({
|
|
99
94
|
'date-parts': [[year]],
|
|
100
95
|
});
|
|
101
96
|
}
|
|
102
|
-
const doi = (0, utils_1.getTrimmedTextContent)(
|
|
97
|
+
const doi = (0, utils_1.getTrimmedTextContent)(element, 'pub-id[pub-id-type="doi"]');
|
|
103
98
|
if (doi) {
|
|
104
99
|
bibliographyItem.DOI = doi;
|
|
105
100
|
}
|
|
@@ -127,59 +122,9 @@ exports.jatsReferenceParser = {
|
|
|
127
122
|
if (authors.length) {
|
|
128
123
|
bibliographyItem.author = authors;
|
|
129
124
|
}
|
|
130
|
-
const id =
|
|
131
|
-
|
|
132
|
-
referenceIDs.set(id, bibliographyItem._id);
|
|
133
|
-
}
|
|
134
|
-
return bibliographyItem;
|
|
125
|
+
const id = element.getAttribute('id');
|
|
126
|
+
references.add(bibliographyItem, id, comments);
|
|
135
127
|
});
|
|
136
|
-
return
|
|
137
|
-
references,
|
|
138
|
-
referenceIDs,
|
|
139
|
-
referenceQueries,
|
|
140
|
-
};
|
|
141
|
-
},
|
|
142
|
-
parseCrossReferences(crossReferenceNodes, referenceIDs) {
|
|
143
|
-
return (0, jats_parser_utils_1.flatten)(crossReferenceNodes.map((crossReferenceNode) => {
|
|
144
|
-
const rid = crossReferenceNode.getAttribute('rid');
|
|
145
|
-
if (!rid) {
|
|
146
|
-
return [];
|
|
147
|
-
}
|
|
148
|
-
const modelNodes = [];
|
|
149
|
-
const refType = crossReferenceNode.getAttribute('ref-type');
|
|
150
|
-
switch (refType) {
|
|
151
|
-
case 'bibr':
|
|
152
|
-
{
|
|
153
|
-
const rids = rid
|
|
154
|
-
.split(/\s+/)
|
|
155
|
-
.filter((id) => referenceIDs.has(id))
|
|
156
|
-
.map((id) => referenceIDs.get(id));
|
|
157
|
-
if (rids.length) {
|
|
158
|
-
const citation = (0, builders_1.buildCitation)('', rids);
|
|
159
|
-
modelNodes.push(citation);
|
|
160
|
-
crossReferenceNode.setAttribute('rid', citation._id);
|
|
161
|
-
crossReferenceNode.setAttribute('data-reference-embedded-citation', JSON.stringify(citation.embeddedCitationItems.map(({ _id: id, bibliographyItem }) => ({
|
|
162
|
-
id,
|
|
163
|
-
bibliographyItem,
|
|
164
|
-
}))));
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
crossReferenceNode.removeAttribute('rid');
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
break;
|
|
171
|
-
case 'fn':
|
|
172
|
-
break;
|
|
173
|
-
default:
|
|
174
|
-
{
|
|
175
|
-
const rids = rid.trim().split(/\s+/);
|
|
176
|
-
const auxiliaryObjectReference = (0, builders_1.buildAuxiliaryObjectReference)('', rids);
|
|
177
|
-
modelNodes.push(auxiliaryObjectReference);
|
|
178
|
-
crossReferenceNode.setAttribute('rid', auxiliaryObjectReference._id);
|
|
179
|
-
}
|
|
180
|
-
break;
|
|
181
|
-
}
|
|
182
|
-
return modelNodes;
|
|
183
|
-
}));
|
|
128
|
+
return references;
|
|
184
129
|
},
|
|
185
130
|
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.References = void 0;
|
|
4
|
+
class References {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.items = new Map();
|
|
7
|
+
this.IDs = new Map();
|
|
8
|
+
this.comments = new Map();
|
|
9
|
+
}
|
|
10
|
+
add(item, id, comments) {
|
|
11
|
+
this.items.set(item._id, item);
|
|
12
|
+
this.comments.set(item._id, comments);
|
|
13
|
+
if (id) {
|
|
14
|
+
this.IDs.set(id, item._id);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
getBibliographyItems() {
|
|
18
|
+
return [...this.items.values()];
|
|
19
|
+
}
|
|
20
|
+
getComments(id) {
|
|
21
|
+
return this.getValue(id, this.comments) || [];
|
|
22
|
+
}
|
|
23
|
+
getValue(id, map) {
|
|
24
|
+
const value = map.get(id);
|
|
25
|
+
if (value) {
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
const id2 = this.IDs.get(id);
|
|
29
|
+
if (id2) {
|
|
30
|
+
return map.get(id2);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.References = References;
|
|
@@ -15,16 +15,10 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.
|
|
19
|
-
const json_schema_1 = require("@manuscripts/json-schema");
|
|
20
|
-
const prosemirror_model_1 = require("prosemirror-model");
|
|
18
|
+
exports.parseJATSArticle = exports.parseJATSBody = exports.parseJATSFront = void 0;
|
|
21
19
|
const errors_1 = require("../../errors");
|
|
22
|
-
const html_1 = require("../../lib/html");
|
|
23
|
-
const schema_1 = require("../../schema");
|
|
24
20
|
const transformer_1 = require("../../transformer");
|
|
25
21
|
const builders_1 = require("../../transformer/builders");
|
|
26
|
-
const encode_1 = require("../../transformer/encode");
|
|
27
|
-
const footnotes_order_1 = require("../../transformer/footnotes-order");
|
|
28
22
|
const id_1 = require("../../transformer/id");
|
|
29
23
|
const project_bundle_1 = require("../../transformer/project-bundle");
|
|
30
24
|
const jats_body_dom_parser_1 = require("./jats-body-dom-parser");
|
|
@@ -33,208 +27,108 @@ const jats_comments_1 = require("./jats-comments");
|
|
|
33
27
|
const jats_front_parser_1 = require("./jats-front-parser");
|
|
34
28
|
const jats_parser_utils_1 = require("./jats-parser-utils");
|
|
35
29
|
const jats_reference_parser_1 = require("./jats-reference-parser");
|
|
36
|
-
const
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
topNode: schema_1.schema.nodes.section_title.create(),
|
|
42
|
-
});
|
|
43
|
-
return (0, encode_1.inlineContents)(titleNode);
|
|
44
|
-
}
|
|
45
|
-
throw new errors_1.InvalidInput('Invalid title content for: ' + htmlTitle);
|
|
46
|
-
};
|
|
47
|
-
const parseJATSFront = async (front) => {
|
|
48
|
-
var _a, _b, _c;
|
|
49
|
-
const journalMeta = jats_front_parser_1.jatsFrontParser.parseJournal(front.querySelector('journal-meta'));
|
|
50
|
-
const journal = Object.assign(Object.assign({}, (0, builders_1.buildJournal)()), journalMeta);
|
|
51
|
-
const articleMeta = front.querySelector('article-meta');
|
|
52
|
-
const title = (_a = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('title-group > article-title')) === null || _a === void 0 ? void 0 : _a.innerHTML;
|
|
53
|
-
const subtitle = (_b = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('title-group > subtitle')) === null || _b === void 0 ? void 0 : _b.innerHTML;
|
|
54
|
-
const runningTitle = (_c = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('title-group > alt-title[alt-title-type="right-running"]')) === null || _c === void 0 ? void 0 : _c.innerHTML;
|
|
55
|
-
const manuscriptMeta = Object.assign({}, jats_front_parser_1.jatsFrontParser.parseCounts(articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('counts')));
|
|
56
|
-
const titles = {
|
|
57
|
-
objectType: json_schema_1.ObjectTypes.Titles,
|
|
58
|
-
_id: (0, id_1.generateID)(json_schema_1.ObjectTypes.Titles),
|
|
59
|
-
title: title ? inlineContentsFromJATSTitle(title) : undefined,
|
|
60
|
-
subtitle: subtitle ? inlineContentsFromJATSTitle(subtitle) : undefined,
|
|
61
|
-
runningTitle: runningTitle
|
|
62
|
-
? inlineContentsFromJATSTitle(runningTitle)
|
|
63
|
-
: undefined,
|
|
64
|
-
};
|
|
65
|
-
const { affiliations, affiliationIDs } = jats_front_parser_1.jatsFrontParser.parseAffiliationNodes([
|
|
30
|
+
const parseJATSFront = (doc, front) => {
|
|
31
|
+
const createElement = createElementFn(doc);
|
|
32
|
+
const journal = jats_front_parser_1.jatsFrontParser.parseJournal(front.querySelector('journal-meta'));
|
|
33
|
+
const titles = jats_front_parser_1.jatsFrontParser.parseTitles(front.querySelector('article-meta > title-group'), createElement);
|
|
34
|
+
const { affiliations, affiliationIDs } = jats_front_parser_1.jatsFrontParser.parseAffiliations([
|
|
66
35
|
...front.querySelectorAll('article-meta > contrib-group > aff'),
|
|
67
36
|
]);
|
|
68
|
-
const { footnotes, footnoteIDs } = jats_front_parser_1.jatsFrontParser.
|
|
37
|
+
const { footnotes, footnoteIDs } = jats_front_parser_1.jatsFrontParser.parseAuthorNotes([
|
|
69
38
|
...front.querySelectorAll('article-meta > author-notes > fn:not([fn-type])'),
|
|
70
39
|
]);
|
|
71
|
-
const { correspondingList, correspondingIDs } = jats_front_parser_1.jatsFrontParser.
|
|
40
|
+
const { correspondingList, correspondingIDs } = jats_front_parser_1.jatsFrontParser.parseCorresp([
|
|
72
41
|
...front.querySelectorAll('article-meta > author-notes > corresp'),
|
|
73
42
|
]);
|
|
74
|
-
const authors = jats_front_parser_1.jatsFrontParser.
|
|
43
|
+
const authors = jats_front_parser_1.jatsFrontParser.parseContributors([
|
|
75
44
|
...front.querySelectorAll('article-meta > contrib-group > contrib[contrib-type="author"]'),
|
|
76
45
|
], affiliationIDs, footnoteIDs, correspondingIDs);
|
|
77
|
-
const history = jats_front_parser_1.jatsFrontParser.parseDates(front.querySelector('article-meta > history'));
|
|
78
46
|
const supplements = jats_front_parser_1.jatsFrontParser.parseSupplements([
|
|
79
47
|
...front.querySelectorAll('article-meta > supplementary-material'),
|
|
80
48
|
]);
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
49
|
+
const history = jats_front_parser_1.jatsFrontParser.parseDates(front.querySelector('article-meta > history'));
|
|
50
|
+
const counts = jats_front_parser_1.jatsFrontParser.parseCounts(front.querySelector('article-meta counts'));
|
|
51
|
+
const manuscript = Object.assign(Object.assign(Object.assign({}, (0, builders_1.buildManuscript)()), counts), history);
|
|
52
|
+
return generateIDs([
|
|
53
|
+
manuscript,
|
|
54
|
+
titles,
|
|
55
|
+
journal,
|
|
56
|
+
...footnotes,
|
|
57
|
+
...authors,
|
|
58
|
+
...affiliations,
|
|
59
|
+
...correspondingList,
|
|
60
|
+
...supplements,
|
|
61
|
+
]);
|
|
94
62
|
};
|
|
95
63
|
exports.parseJATSFront = parseJATSFront;
|
|
96
|
-
const
|
|
97
|
-
const
|
|
98
|
-
const crossReferences = [];
|
|
99
|
-
let referenceQueriesMap;
|
|
100
|
-
let referenceIdsMap;
|
|
101
|
-
if (back) {
|
|
102
|
-
const { references, referenceIDs, referenceQueries } = jats_reference_parser_1.jatsReferenceParser.parseReferences([...back.querySelectorAll('ref-list > ref')], createElement);
|
|
103
|
-
bibliographyItems.push(...references);
|
|
104
|
-
referenceQueriesMap = new Map([...referenceQueries]);
|
|
105
|
-
referenceIdsMap = new Map([...referenceIDs]);
|
|
106
|
-
if (body) {
|
|
107
|
-
crossReferences.push(...jats_reference_parser_1.jatsReferenceParser.parseCrossReferences([...body.querySelectorAll('xref'), ...back.querySelectorAll('xref')], referenceIDs));
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return {
|
|
111
|
-
references: generateModelIDs(bibliographyItems),
|
|
112
|
-
crossReferences: generateModelIDs(crossReferences),
|
|
113
|
-
referenceQueriesMap,
|
|
114
|
-
referenceIdsMap,
|
|
115
|
-
};
|
|
116
|
-
};
|
|
117
|
-
exports.parseJATSReferences = parseJATSReferences;
|
|
118
|
-
const parseJATSBody = (document, body, bibliographyItems, authors, affiliations, refModels, referenceIdsMap, footnotesOrder) => {
|
|
119
|
-
const createElement = createElementFn(document);
|
|
120
|
-
const orderedFootnotesIDs = (0, footnotes_order_1.createOrderedFootnotesIDs)(document);
|
|
121
|
-
jats_body_transformations_1.jatsBodyTransformations.moveFloatsGroupToBody(document, body, createElement);
|
|
64
|
+
const parseJATSBody = (doc, body, references) => {
|
|
65
|
+
const createElement = createElementFn(doc);
|
|
122
66
|
jats_body_transformations_1.jatsBodyTransformations.ensureSection(body, createElement);
|
|
123
|
-
jats_body_transformations_1.jatsBodyTransformations.moveSectionsToBody(document, body, bibliographyItems, createElement);
|
|
124
67
|
jats_body_transformations_1.jatsBodyTransformations.moveCaptionsToEnd(body);
|
|
68
|
+
jats_body_transformations_1.jatsBodyTransformations.fixTables(body, createElement);
|
|
125
69
|
jats_body_transformations_1.jatsBodyTransformations.moveTableFooterToEnd(body);
|
|
126
|
-
jats_body_transformations_1.jatsBodyTransformations.
|
|
127
|
-
jats_body_transformations_1.jatsBodyTransformations.
|
|
128
|
-
jats_body_transformations_1.jatsBodyTransformations.
|
|
129
|
-
jats_body_transformations_1.jatsBodyTransformations.
|
|
130
|
-
const node = jats_body_dom_parser_1.jatsBodyDOMParser.parse(body);
|
|
131
|
-
if (!node
|
|
70
|
+
jats_body_transformations_1.jatsBodyTransformations.createBody(doc, body, createElement);
|
|
71
|
+
jats_body_transformations_1.jatsBodyTransformations.createAbstracts(doc, body, createElement);
|
|
72
|
+
jats_body_transformations_1.jatsBodyTransformations.createBackmatter(doc, body, createElement);
|
|
73
|
+
jats_body_transformations_1.jatsBodyTransformations.createKeywords(doc, body, createElement);
|
|
74
|
+
const node = jats_body_dom_parser_1.jatsBodyDOMParser.parse(body).firstChild;
|
|
75
|
+
if (!node) {
|
|
132
76
|
throw new Error('No content was parsed from the JATS article body');
|
|
133
77
|
}
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
return node.firstChild;
|
|
78
|
+
const replacements = new Map(references === null || references === void 0 ? void 0 : references.IDs);
|
|
79
|
+
(0, jats_parser_utils_1.updateDocumentIDs)(node, replacements);
|
|
80
|
+
return (0, transformer_1.encode)(node).values();
|
|
139
81
|
};
|
|
140
82
|
exports.parseJATSBody = parseJATSBody;
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const tbody = table.querySelector('tbody');
|
|
153
|
-
if (tbody) {
|
|
154
|
-
const headerRow = table.querySelector('thead > tr');
|
|
155
|
-
if (!headerRow) {
|
|
156
|
-
const tr = createElement('tr');
|
|
157
|
-
tbody.insertBefore(tr, tbody.firstElementChild);
|
|
158
|
-
}
|
|
159
|
-
const footerRow = table.querySelector('tfoot > tr');
|
|
160
|
-
if (!footerRow) {
|
|
161
|
-
const tr = createElement('tr');
|
|
162
|
-
tbody.appendChild(tr);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
});
|
|
83
|
+
const createBibliographyModels = (references) => {
|
|
84
|
+
const models = [];
|
|
85
|
+
const bibliographyItems = references.getBibliographyItems();
|
|
86
|
+
const bibliographyElement = (0, transformer_1.buildBibliographyElement)(bibliographyItems);
|
|
87
|
+
const bibliographySection = Object.assign(Object.assign({}, (0, transformer_1.buildSection)(99)), { category: 'MPSectionCategory:bibliography', elementIDs: [bibliographyElement._id], title: 'References' });
|
|
88
|
+
const comments = (0, jats_comments_1.createReferenceComments)(references);
|
|
89
|
+
models.push(bibliographySection);
|
|
90
|
+
models.push(bibliographyElement);
|
|
91
|
+
models.push(...bibliographyItems);
|
|
92
|
+
models.push(...comments);
|
|
93
|
+
return models;
|
|
166
94
|
};
|
|
167
95
|
const createElementFn = (doc) => (tagName) => doc.createElement(tagName);
|
|
168
|
-
const
|
|
169
|
-
const parseJATSArticle =
|
|
170
|
-
const
|
|
96
|
+
const generateIDs = (models) => models.map((m) => m._id ? m : Object.assign(Object.assign({}, m), { _id: (0, id_1.generateID)(m.objectType) }));
|
|
97
|
+
const parseJATSArticle = (doc) => {
|
|
98
|
+
const article = doc.querySelector('article');
|
|
171
99
|
const front = doc.querySelector('front');
|
|
172
100
|
const body = doc.querySelector('body');
|
|
173
101
|
const back = doc.querySelector('back');
|
|
174
102
|
if (!front) {
|
|
175
103
|
throw new errors_1.InvalidInput('Invalid JATS format! Missing front element');
|
|
176
104
|
}
|
|
177
|
-
if (!
|
|
105
|
+
if (!article) {
|
|
178
106
|
throw new errors_1.InvalidInput('Invalid JATS format! Missing article element');
|
|
179
107
|
}
|
|
180
|
-
const
|
|
181
|
-
const createElement = createElementFn(
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
108
|
+
const marks = (0, jats_comments_1.markComments)(doc);
|
|
109
|
+
const createElement = createElementFn(doc);
|
|
110
|
+
const models = [];
|
|
111
|
+
let references;
|
|
112
|
+
if (back) {
|
|
113
|
+
references = jats_reference_parser_1.jatsReferenceParser.parseReferences([...back.querySelectorAll('ref-list > ref')], createElement);
|
|
114
|
+
}
|
|
115
|
+
models.push(...(0, exports.parseJATSFront)(doc, front));
|
|
188
116
|
if (body) {
|
|
189
|
-
|
|
190
|
-
bodyModels.push(...(0, encode_1.encode)(bodyDoc).values());
|
|
191
|
-
elementsOrder = (0, exports.getElementsOrder)(bodyDoc);
|
|
117
|
+
models.push(...(0, exports.parseJATSBody)(doc, body, references));
|
|
192
118
|
}
|
|
193
|
-
const
|
|
194
|
-
const manuscript = (0, project_bundle_1.findManuscript)(
|
|
119
|
+
const modelMap = new Map(models.map((model) => [model._id, model]));
|
|
120
|
+
const manuscript = (0, project_bundle_1.findManuscript)(modelMap);
|
|
195
121
|
if (manuscript) {
|
|
196
|
-
const
|
|
197
|
-
manuscript.articleType =
|
|
122
|
+
const type = article.getAttribute('article-type');
|
|
123
|
+
manuscript.articleType = type || 'other';
|
|
198
124
|
}
|
|
199
|
-
|
|
200
|
-
...
|
|
201
|
-
...bodyModels,
|
|
202
|
-
...crossReferences,
|
|
203
|
-
...elementsOrder,
|
|
204
|
-
];
|
|
205
|
-
if (footnotesOrder.footnotesList.length > 0) {
|
|
206
|
-
models.push(footnotesOrder);
|
|
125
|
+
if (references) {
|
|
126
|
+
models.push(...createBibliographyModels(references));
|
|
207
127
|
}
|
|
208
|
-
if (
|
|
209
|
-
const
|
|
210
|
-
models.push(...
|
|
211
|
-
}
|
|
212
|
-
if (referenceQueriesMap && referenceQueriesMap.size) {
|
|
213
|
-
const commentAnnotations = (0, jats_comments_1.createReferenceComments)(referenceQueriesMap, references);
|
|
214
|
-
models.push(...commentAnnotations);
|
|
128
|
+
if (marks.length) {
|
|
129
|
+
const comments = (0, jats_comments_1.createComments)(models, marks);
|
|
130
|
+
models.push(...comments);
|
|
215
131
|
}
|
|
216
132
|
return models;
|
|
217
133
|
};
|
|
218
134
|
exports.parseJATSArticle = parseJATSArticle;
|
|
219
|
-
const getElementsOrder = (node) => {
|
|
220
|
-
const elementsOrderIndex = new Map();
|
|
221
|
-
const models = [];
|
|
222
|
-
node.descendants((child) => {
|
|
223
|
-
const type = child.type;
|
|
224
|
-
if (transformer_1.auxiliaryObjectTypes.has(type)) {
|
|
225
|
-
const index = elementsOrderIndex.get(type);
|
|
226
|
-
if (index !== undefined) {
|
|
227
|
-
const elementsOrder = models[index];
|
|
228
|
-
elementsOrder.elements.push(child.attrs['id']);
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
const elementsOrder = (0, builders_1.buildElementsOrder)(transformer_1.nodeTypesMap.get(type));
|
|
232
|
-
elementsOrder.elements.push(child.attrs['id']);
|
|
233
|
-
models.push(elementsOrder);
|
|
234
|
-
elementsOrderIndex.set(type, elementsOrderIndex.size);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
return models;
|
|
239
|
-
};
|
|
240
|
-
exports.getElementsOrder = getElementsOrder;
|
package/dist/cjs/jats/index.js
CHANGED
|
@@ -29,12 +29,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
29
29
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
30
30
|
};
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.
|
|
32
|
+
exports.parseJATSArticle = exports.parseJATSBody = exports.parseJATSFront = void 0;
|
|
33
33
|
var importer_1 = require("./importer");
|
|
34
34
|
Object.defineProperty(exports, "parseJATSFront", { enumerable: true, get: function () { return importer_1.parseJATSFront; } });
|
|
35
|
-
Object.defineProperty(exports, "parseJATSReferences", { enumerable: true, get: function () { return importer_1.parseJATSReferences; } });
|
|
36
35
|
Object.defineProperty(exports, "parseJATSBody", { enumerable: true, get: function () { return importer_1.parseJATSBody; } });
|
|
37
36
|
Object.defineProperty(exports, "parseJATSArticle", { enumerable: true, get: function () { return importer_1.parseJATSArticle; } });
|
|
38
|
-
Object.defineProperty(exports, "getElementsOrder", { enumerable: true, get: function () { return importer_1.getElementsOrder; } });
|
|
39
37
|
__exportStar(require("./jats-exporter"), exports);
|
|
40
38
|
__exportStar(require("./jats-versions"), exports);
|