@manuscripts/transform 1.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/LICENSE +201 -0
- package/README.md +193 -0
- package/dist/cjs/errors.js +17 -0
- package/dist/cjs/index.js +27 -0
- package/dist/cjs/jats/importer/index.js +24 -0
- package/dist/cjs/jats/importer/jats-body-dom-parser.js +650 -0
- package/dist/cjs/jats/importer/jats-body-transformations.js +269 -0
- package/dist/cjs/jats/importer/jats-comments.js +131 -0
- package/dist/cjs/jats/importer/jats-front-parser.js +341 -0
- package/dist/cjs/jats/importer/jats-journal-meta-parser.js +77 -0
- package/dist/cjs/jats/importer/jats-parser-utils.js +145 -0
- package/dist/cjs/jats/importer/jats-reference-parser.js +180 -0
- package/dist/cjs/jats/importer/parse-jats-article.js +237 -0
- package/dist/cjs/jats/index.js +40 -0
- package/dist/cjs/jats/jats-exporter.js +1569 -0
- package/dist/cjs/jats/jats-versions.js +41 -0
- package/dist/cjs/lib/attributes.js +26 -0
- package/dist/cjs/lib/html.js +48 -0
- package/dist/cjs/lib/styled-content.js +28 -0
- package/dist/cjs/lib/table-cell-styles.js +52 -0
- package/dist/cjs/lib/utils.js +66 -0
- package/dist/cjs/mathjax/index.js +41 -0
- package/dist/cjs/mathjax/mathjax-packages.js +20 -0
- package/dist/cjs/mathjax/mathml-to-svg.js +56 -0
- package/dist/cjs/mathjax/tex-to-mathml.js +49 -0
- package/dist/cjs/mathjax/tex-to-svg.js +59 -0
- package/dist/cjs/schema/groups.js +31 -0
- package/dist/cjs/schema/index.js +195 -0
- package/dist/cjs/schema/marks.js +159 -0
- package/dist/cjs/schema/nodes/attribution.js +32 -0
- package/dist/cjs/schema/nodes/bibliography_element.js +44 -0
- package/dist/cjs/schema/nodes/bibliography_item.js +101 -0
- package/dist/cjs/schema/nodes/bibliography_section.js +46 -0
- package/dist/cjs/schema/nodes/blockquote_element.js +62 -0
- package/dist/cjs/schema/nodes/caption.js +52 -0
- package/dist/cjs/schema/nodes/caption_title.js +51 -0
- package/dist/cjs/schema/nodes/citation.js +52 -0
- package/dist/cjs/schema/nodes/comment.js +26 -0
- package/dist/cjs/schema/nodes/cross_reference.js +58 -0
- package/dist/cjs/schema/nodes/doc.js +21 -0
- package/dist/cjs/schema/nodes/equation.js +55 -0
- package/dist/cjs/schema/nodes/equation_element.js +52 -0
- package/dist/cjs/schema/nodes/figcaption.js +31 -0
- package/dist/cjs/schema/nodes/figure.js +52 -0
- package/dist/cjs/schema/nodes/figure_element.js +78 -0
- package/dist/cjs/schema/nodes/footnote.js +67 -0
- package/dist/cjs/schema/nodes/footnotes_element.js +54 -0
- package/dist/cjs/schema/nodes/footnotes_section.js +45 -0
- package/dist/cjs/schema/nodes/graphical_abstract_section.js +46 -0
- package/dist/cjs/schema/nodes/hard_break.js +30 -0
- package/dist/cjs/schema/nodes/highlight_marker.js +53 -0
- package/dist/cjs/schema/nodes/inline_equation.js +58 -0
- package/dist/cjs/schema/nodes/inline_footnote.js +51 -0
- package/dist/cjs/schema/nodes/keywords_element.js +52 -0
- package/dist/cjs/schema/nodes/keywords_section.js +46 -0
- package/dist/cjs/schema/nodes/link.js +61 -0
- package/dist/cjs/schema/nodes/list.js +121 -0
- package/dist/cjs/schema/nodes/listing.js +73 -0
- package/dist/cjs/schema/nodes/listing_element.js +52 -0
- package/dist/cjs/schema/nodes/manuscript.js +46 -0
- package/dist/cjs/schema/nodes/missing_figure.js +50 -0
- package/dist/cjs/schema/nodes/paragraph.js +63 -0
- package/dist/cjs/schema/nodes/placeholder.js +49 -0
- package/dist/cjs/schema/nodes/placeholder_element.js +48 -0
- package/dist/cjs/schema/nodes/pullquote_element.js +65 -0
- package/dist/cjs/schema/nodes/section.js +94 -0
- package/dist/cjs/schema/nodes/section_label.js +30 -0
- package/dist/cjs/schema/nodes/section_title.js +48 -0
- package/dist/cjs/schema/nodes/table.js +70 -0
- package/dist/cjs/schema/nodes/table_col.js +57 -0
- package/dist/cjs/schema/nodes/table_element.js +62 -0
- package/dist/cjs/schema/nodes/table_row.js +123 -0
- package/dist/cjs/schema/nodes/text.js +21 -0
- package/dist/cjs/schema/nodes/toc_element.js +52 -0
- package/dist/cjs/schema/nodes/toc_section.js +46 -0
- package/dist/cjs/schema/types.js +17 -0
- package/dist/cjs/tests.js +30 -0
- package/dist/cjs/transformer/builders.js +305 -0
- package/dist/cjs/transformer/bundles-data.js +36 -0
- package/dist/cjs/transformer/bundles.js +32 -0
- package/dist/cjs/transformer/decode.js +619 -0
- package/dist/cjs/transformer/document-object-types.js +31 -0
- package/dist/cjs/transformer/encode.js +545 -0
- package/dist/cjs/transformer/filename.js +27 -0
- package/dist/cjs/transformer/footnote-category.js +20 -0
- package/dist/cjs/transformer/footnotes-order.js +59 -0
- package/dist/cjs/transformer/highlight-markers.js +126 -0
- package/dist/cjs/transformer/html.js +414 -0
- package/dist/cjs/transformer/id.js +28 -0
- package/dist/cjs/transformer/index.js +54 -0
- package/dist/cjs/transformer/labels.js +85 -0
- package/dist/cjs/transformer/manuscript-dependencies.js +74 -0
- package/dist/cjs/transformer/model-map.js +26 -0
- package/dist/cjs/transformer/models.js +17 -0
- package/dist/cjs/transformer/node-names.js +42 -0
- package/dist/cjs/transformer/node-title.js +87 -0
- package/dist/cjs/transformer/node-types.js +62 -0
- package/dist/cjs/transformer/object-types.js +57 -0
- package/dist/cjs/transformer/project-bundle.js +86 -0
- package/dist/cjs/transformer/section-category.js +222 -0
- package/dist/cjs/transformer/serializer.js +23 -0
- package/dist/cjs/transformer/shared-data.js +31 -0
- package/dist/cjs/transformer/tei-grobid-importer.js +121 -0
- package/dist/cjs/transformer/timestamp.js +20 -0
- package/dist/cjs/transformer/update-identifiers.js +93 -0
- package/dist/cjs/types.js +2 -0
- package/dist/es/errors.js +12 -0
- package/dist/es/index.js +9 -0
- package/dist/es/jats/importer/index.js +16 -0
- package/dist/es/jats/importer/jats-body-dom-parser.js +644 -0
- package/dist/es/jats/importer/jats-body-transformations.js +266 -0
- package/dist/es/jats/importer/jats-comments.js +124 -0
- package/dist/es/jats/importer/jats-front-parser.js +335 -0
- package/dist/es/jats/importer/jats-journal-meta-parser.js +70 -0
- package/dist/es/jats/importer/jats-parser-utils.js +139 -0
- package/dist/es/jats/importer/jats-reference-parser.js +177 -0
- package/dist/es/jats/importer/parse-jats-article.js +229 -0
- package/dist/es/jats/index.js +18 -0
- package/dist/es/jats/jats-exporter.js +1561 -0
- package/dist/es/jats/jats-versions.js +36 -0
- package/dist/es/lib/attributes.js +22 -0
- package/dist/es/lib/html.js +43 -0
- package/dist/es/lib/styled-content.js +23 -0
- package/dist/es/lib/table-cell-styles.js +47 -0
- package/dist/es/lib/utils.js +59 -0
- package/dist/es/mathjax/index.js +12 -0
- package/dist/es/mathjax/mathjax-packages.js +17 -0
- package/dist/es/mathjax/mathml-to-svg.js +52 -0
- package/dist/es/mathjax/tex-to-mathml.js +45 -0
- package/dist/es/mathjax/tex-to-svg.js +55 -0
- package/dist/es/schema/groups.js +27 -0
- package/dist/es/schema/index.js +178 -0
- package/dist/es/schema/marks.js +156 -0
- package/dist/es/schema/nodes/attribution.js +29 -0
- package/dist/es/schema/nodes/bibliography_element.js +41 -0
- package/dist/es/schema/nodes/bibliography_item.js +98 -0
- package/dist/es/schema/nodes/bibliography_section.js +42 -0
- package/dist/es/schema/nodes/blockquote_element.js +58 -0
- package/dist/es/schema/nodes/caption.js +49 -0
- package/dist/es/schema/nodes/caption_title.js +48 -0
- package/dist/es/schema/nodes/citation.js +48 -0
- package/dist/es/schema/nodes/comment.js +23 -0
- package/dist/es/schema/nodes/cross_reference.js +55 -0
- package/dist/es/schema/nodes/doc.js +18 -0
- package/dist/es/schema/nodes/equation.js +52 -0
- package/dist/es/schema/nodes/equation_element.js +49 -0
- package/dist/es/schema/nodes/figcaption.js +28 -0
- package/dist/es/schema/nodes/figure.js +49 -0
- package/dist/es/schema/nodes/figure_element.js +74 -0
- package/dist/es/schema/nodes/footnote.js +63 -0
- package/dist/es/schema/nodes/footnotes_element.js +50 -0
- package/dist/es/schema/nodes/footnotes_section.js +41 -0
- package/dist/es/schema/nodes/graphical_abstract_section.js +42 -0
- package/dist/es/schema/nodes/hard_break.js +27 -0
- package/dist/es/schema/nodes/highlight_marker.js +49 -0
- package/dist/es/schema/nodes/inline_equation.js +55 -0
- package/dist/es/schema/nodes/inline_footnote.js +47 -0
- package/dist/es/schema/nodes/keywords_element.js +49 -0
- package/dist/es/schema/nodes/keywords_section.js +42 -0
- package/dist/es/schema/nodes/link.js +58 -0
- package/dist/es/schema/nodes/list.js +117 -0
- package/dist/es/schema/nodes/listing.js +69 -0
- package/dist/es/schema/nodes/listing_element.js +49 -0
- package/dist/es/schema/nodes/manuscript.js +43 -0
- package/dist/es/schema/nodes/missing_figure.js +47 -0
- package/dist/es/schema/nodes/paragraph.js +59 -0
- package/dist/es/schema/nodes/placeholder.js +46 -0
- package/dist/es/schema/nodes/placeholder_element.js +45 -0
- package/dist/es/schema/nodes/pullquote_element.js +61 -0
- package/dist/es/schema/nodes/section.js +90 -0
- package/dist/es/schema/nodes/section_label.js +26 -0
- package/dist/es/schema/nodes/section_title.js +44 -0
- package/dist/es/schema/nodes/table.js +67 -0
- package/dist/es/schema/nodes/table_col.js +54 -0
- package/dist/es/schema/nodes/table_element.js +59 -0
- package/dist/es/schema/nodes/table_row.js +120 -0
- package/dist/es/schema/nodes/text.js +18 -0
- package/dist/es/schema/nodes/toc_element.js +49 -0
- package/dist/es/schema/nodes/toc_section.js +42 -0
- package/dist/es/schema/types.js +16 -0
- package/dist/es/tests.js +28 -0
- package/dist/es/transformer/builders.js +261 -0
- package/dist/es/transformer/bundles-data.js +8 -0
- package/dist/es/transformer/bundles.js +27 -0
- package/dist/es/transformer/decode.js +608 -0
- package/dist/es/transformer/document-object-types.js +28 -0
- package/dist/es/transformer/encode.js +535 -0
- package/dist/es/transformer/filename.js +23 -0
- package/dist/es/transformer/footnote-category.js +16 -0
- package/dist/es/transformer/footnotes-order.js +53 -0
- package/dist/es/transformer/highlight-markers.js +120 -0
- package/dist/es/transformer/html.js +407 -0
- package/dist/es/transformer/id.js +23 -0
- package/dist/es/transformer/index.js +38 -0
- package/dist/es/transformer/labels.js +81 -0
- package/dist/es/transformer/manuscript-dependencies.js +64 -0
- package/dist/es/transformer/model-map.js +22 -0
- package/dist/es/transformer/models.js +16 -0
- package/dist/es/transformer/node-names.js +39 -0
- package/dist/es/transformer/node-title.js +82 -0
- package/dist/es/transformer/node-types.js +55 -0
- package/dist/es/transformer/object-types.js +52 -0
- package/dist/es/transformer/project-bundle.js +77 -0
- package/dist/es/transformer/section-category.js +210 -0
- package/dist/es/transformer/serializer.js +17 -0
- package/dist/es/transformer/shared-data.js +1 -0
- package/dist/es/transformer/tei-grobid-importer.js +115 -0
- package/dist/es/transformer/timestamp.js +16 -0
- package/dist/es/transformer/update-identifiers.js +87 -0
- package/dist/es/types.js +1 -0
- package/dist/types/errors.d.ts +6 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/jats/importer/index.d.ts +16 -0
- package/dist/types/jats/importer/jats-body-dom-parser.d.ts +24 -0
- package/dist/types/jats/importer/jats-body-transformations.d.ts +31 -0
- package/dist/types/jats/importer/jats-comments.d.ts +26 -0
- package/dist/types/jats/importer/jats-front-parser.d.ts +62 -0
- package/dist/types/jats/importer/jats-journal-meta-parser.d.ts +37 -0
- package/dist/types/jats/importer/jats-parser-utils.d.ts +23 -0
- package/dist/types/jats/importer/jats-reference-parser.d.ts +23 -0
- package/dist/types/jats/importer/parse-jats-article.d.ts +30 -0
- package/dist/types/jats/index.d.ts +18 -0
- package/dist/types/jats/jats-exporter.d.ts +72 -0
- package/dist/types/jats/jats-versions.d.ts +23 -0
- package/dist/types/lib/attributes.d.ts +20 -0
- package/dist/types/lib/html.d.ts +17 -0
- package/dist/types/lib/styled-content.d.ts +22 -0
- package/dist/types/lib/table-cell-styles.d.ts +27 -0
- package/dist/types/lib/utils.d.ts +26 -0
- package/dist/types/mathjax/index.d.ts +3 -0
- package/dist/types/mathjax/mathjax-packages.d.ts +16 -0
- package/dist/types/mathjax/mathml-to-svg.d.ts +17 -0
- package/dist/types/mathjax/tex-to-mathml.d.ts +17 -0
- package/dist/types/mathjax/tex-to-svg.d.ts +17 -0
- package/dist/types/schema/groups.d.ts +22 -0
- package/dist/types/schema/index.d.ts +65 -0
- package/dist/types/schema/marks.d.ts +27 -0
- package/dist/types/schema/nodes/attribution.d.ts +21 -0
- package/dist/types/schema/nodes/bibliography_element.d.ts +26 -0
- package/dist/types/schema/nodes/bibliography_item.d.ts +36 -0
- package/dist/types/schema/nodes/bibliography_section.d.ts +26 -0
- package/dist/types/schema/nodes/blockquote_element.d.ts +28 -0
- package/dist/types/schema/nodes/caption.d.ts +25 -0
- package/dist/types/schema/nodes/caption_title.d.ts +25 -0
- package/dist/types/schema/nodes/citation.d.ts +27 -0
- package/dist/types/schema/nodes/comment.d.ts +31 -0
- package/dist/types/schema/nodes/cross_reference.d.ts +26 -0
- package/dist/types/schema/nodes/doc.d.ts +17 -0
- package/dist/types/schema/nodes/equation.d.ts +28 -0
- package/dist/types/schema/nodes/equation_element.d.ts +29 -0
- package/dist/types/schema/nodes/figcaption.d.ts +21 -0
- package/dist/types/schema/nodes/figure.d.ts +25 -0
- package/dist/types/schema/nodes/figure_element.d.ts +44 -0
- package/dist/types/schema/nodes/footnote.d.ts +32 -0
- package/dist/types/schema/nodes/footnotes_element.d.ts +28 -0
- package/dist/types/schema/nodes/footnotes_section.d.ts +26 -0
- package/dist/types/schema/nodes/graphical_abstract_section.d.ts +26 -0
- package/dist/types/schema/nodes/hard_break.d.ts +21 -0
- package/dist/types/schema/nodes/highlight_marker.d.ts +29 -0
- package/dist/types/schema/nodes/inline_equation.d.ts +28 -0
- package/dist/types/schema/nodes/inline_footnote.d.ts +27 -0
- package/dist/types/schema/nodes/keywords_element.d.ts +27 -0
- package/dist/types/schema/nodes/keywords_section.d.ts +26 -0
- package/dist/types/schema/nodes/link.d.ts +26 -0
- package/dist/types/schema/nodes/list.d.ts +39 -0
- package/dist/types/schema/nodes/listing.d.ts +33 -0
- package/dist/types/schema/nodes/listing_element.d.ts +29 -0
- package/dist/types/schema/nodes/manuscript.d.ts +23 -0
- package/dist/types/schema/nodes/missing_figure.d.ts +23 -0
- package/dist/types/schema/nodes/paragraph.d.ts +30 -0
- package/dist/types/schema/nodes/placeholder.d.ts +26 -0
- package/dist/types/schema/nodes/placeholder_element.d.ts +25 -0
- package/dist/types/schema/nodes/pullquote_element.d.ts +28 -0
- package/dist/types/schema/nodes/section.d.ts +36 -0
- package/dist/types/schema/nodes/section_label.d.ts +22 -0
- package/dist/types/schema/nodes/section_title.d.ts +22 -0
- package/dist/types/schema/nodes/table.d.ts +27 -0
- package/dist/types/schema/nodes/table_col.d.ts +24 -0
- package/dist/types/schema/nodes/table_element.d.ts +35 -0
- package/dist/types/schema/nodes/table_row.d.ts +41 -0
- package/dist/types/schema/nodes/text.d.ts +17 -0
- package/dist/types/schema/nodes/toc_element.d.ts +27 -0
- package/dist/types/schema/nodes/toc_section.d.ts +26 -0
- package/dist/types/schema/types.d.ts +45 -0
- package/dist/types/tests.d.ts +16 -0
- package/dist/types/transformer/builders.d.ts +74 -0
- package/dist/types/transformer/bundles-data.d.ts +3 -0
- package/dist/types/transformer/bundles.d.ts +3 -0
- package/dist/types/transformer/decode.d.ts +38 -0
- package/dist/types/transformer/document-object-types.d.ts +17 -0
- package/dist/types/transformer/encode.d.ts +29 -0
- package/dist/types/transformer/filename.d.ts +16 -0
- package/dist/types/transformer/footnote-category.d.ts +17 -0
- package/dist/types/transformer/footnotes-order.d.ts +23 -0
- package/dist/types/transformer/highlight-markers.d.ts +26 -0
- package/dist/types/transformer/html.d.ts +36 -0
- package/dist/types/transformer/id.d.ts +20 -0
- package/dist/types/transformer/index.d.ts +38 -0
- package/dist/types/transformer/labels.d.ts +24 -0
- package/dist/types/transformer/manuscript-dependencies.d.ts +12 -0
- package/dist/types/transformer/model-map.d.ts +19 -0
- package/dist/types/transformer/models.d.ts +48 -0
- package/dist/types/transformer/node-names.d.ts +17 -0
- package/dist/types/transformer/node-title.d.ts +19 -0
- package/dist/types/transformer/node-types.d.ts +22 -0
- package/dist/types/transformer/object-types.d.ts +29 -0
- package/dist/types/transformer/project-bundle.d.ts +30 -0
- package/dist/types/transformer/section-category.d.ts +28 -0
- package/dist/types/transformer/serializer.d.ts +19 -0
- package/dist/types/transformer/shared-data.d.ts +2 -0
- package/dist/types/transformer/tei-grobid-importer.d.ts +20 -0
- package/dist/types/transformer/timestamp.d.ts +16 -0
- package/dist/types/transformer/update-identifiers.d.ts +23 -0
- package/dist/types/types.d.ts +2 -0
- package/package.json +89 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2020 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { buildAuxiliaryObjectReference, buildBibliographicDate, buildBibliographicName, buildBibliographyItem, buildCitation, } from '../../transformer/builders';
|
|
17
|
+
import { parseProcessingInstruction } from './jats-comments';
|
|
18
|
+
import { flatten, htmlFromJatsNode } from './jats-parser-utils';
|
|
19
|
+
const chooseBibliographyItemType = (publicationType) => {
|
|
20
|
+
switch (publicationType) {
|
|
21
|
+
case 'book':
|
|
22
|
+
case 'thesis':
|
|
23
|
+
return publicationType;
|
|
24
|
+
case 'journal':
|
|
25
|
+
default:
|
|
26
|
+
return 'article-journal';
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
export const jatsReferenceParser = {
|
|
30
|
+
parseReferences(referenceNodes, createElement) {
|
|
31
|
+
const referenceIDs = new Map();
|
|
32
|
+
const referenceQueries = new Map();
|
|
33
|
+
const references = referenceNodes.map((referenceNode) => {
|
|
34
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
35
|
+
const publicationType = referenceNode.getAttribute('publication-type');
|
|
36
|
+
const authorNodes = [
|
|
37
|
+
...referenceNode.querySelectorAll('person-group[person-group-type="author"] > *'),
|
|
38
|
+
];
|
|
39
|
+
const bibliographyItem = buildBibliographyItem({
|
|
40
|
+
type: chooseBibliographyItemType(publicationType),
|
|
41
|
+
});
|
|
42
|
+
const titleNode = referenceNode.querySelector('article-title');
|
|
43
|
+
if (titleNode) {
|
|
44
|
+
bibliographyItem.title = htmlFromJatsNode(titleNode, createElement);
|
|
45
|
+
}
|
|
46
|
+
const queriesText = [];
|
|
47
|
+
const mixedCitation = referenceNode.querySelector('mixed-citation');
|
|
48
|
+
mixedCitation === null || mixedCitation === void 0 ? void 0 : mixedCitation.childNodes.forEach((item) => {
|
|
49
|
+
if (item.nodeType === item.PROCESSING_INSTRUCTION_NODE &&
|
|
50
|
+
item.nodeName === 'AuthorQuery') {
|
|
51
|
+
const instruction = parseProcessingInstruction(item);
|
|
52
|
+
if (instruction) {
|
|
53
|
+
const { queryText } = instruction;
|
|
54
|
+
queriesText.push(queryText);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
if (queriesText.length) {
|
|
59
|
+
referenceQueries.set(bibliographyItem._id, queriesText);
|
|
60
|
+
}
|
|
61
|
+
if (authorNodes.length <= 0) {
|
|
62
|
+
mixedCitation === null || mixedCitation === void 0 ? void 0 : mixedCitation.childNodes.forEach((item) => {
|
|
63
|
+
var _a, _b;
|
|
64
|
+
if (item.nodeType === Node.TEXT_NODE &&
|
|
65
|
+
((_a = item.textContent) === null || _a === void 0 ? void 0 : _a.match(/[A-Za-z]+/g))) {
|
|
66
|
+
bibliographyItem.literal = (_b = mixedCitation.textContent) !== null && _b !== void 0 ? _b : '';
|
|
67
|
+
return bibliographyItem;
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
const source = (_a = referenceNode.querySelector('source')) === null || _a === void 0 ? void 0 : _a.textContent;
|
|
72
|
+
if (source) {
|
|
73
|
+
bibliographyItem['container-title'] = source;
|
|
74
|
+
}
|
|
75
|
+
const volume = (_b = referenceNode.querySelector('volume')) === null || _b === void 0 ? void 0 : _b.textContent;
|
|
76
|
+
if (volume) {
|
|
77
|
+
bibliographyItem.volume = volume;
|
|
78
|
+
}
|
|
79
|
+
const issue = (_c = referenceNode.querySelector('issue')) === null || _c === void 0 ? void 0 : _c.textContent;
|
|
80
|
+
if (issue) {
|
|
81
|
+
bibliographyItem.issue = issue;
|
|
82
|
+
}
|
|
83
|
+
const supplement = (_d = referenceNode.querySelector('supplement')) === null || _d === void 0 ? void 0 : _d.textContent;
|
|
84
|
+
if (supplement) {
|
|
85
|
+
bibliographyItem.supplement = supplement;
|
|
86
|
+
}
|
|
87
|
+
const fpage = (_e = referenceNode.querySelector('fpage')) === null || _e === void 0 ? void 0 : _e.textContent;
|
|
88
|
+
const lpage = (_f = referenceNode.querySelector('lpage')) === null || _f === void 0 ? void 0 : _f.textContent;
|
|
89
|
+
if (fpage) {
|
|
90
|
+
bibliographyItem.page = lpage ? `${fpage}-${lpage}` : fpage;
|
|
91
|
+
}
|
|
92
|
+
const year = (_g = referenceNode.querySelector('year')) === null || _g === void 0 ? void 0 : _g.textContent;
|
|
93
|
+
if (year) {
|
|
94
|
+
bibliographyItem.issued = buildBibliographicDate({
|
|
95
|
+
'date-parts': [[year]],
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
const doi = (_h = referenceNode.querySelector('pub-id[pub-id-type="doi"]')) === null || _h === void 0 ? void 0 : _h.textContent;
|
|
99
|
+
if (doi) {
|
|
100
|
+
bibliographyItem.DOI = doi;
|
|
101
|
+
}
|
|
102
|
+
const authors = [];
|
|
103
|
+
authorNodes.forEach((authorNode) => {
|
|
104
|
+
var _a, _b, _c;
|
|
105
|
+
const name = buildBibliographicName({});
|
|
106
|
+
const given = (_a = authorNode.querySelector('given-names')) === null || _a === void 0 ? void 0 : _a.textContent;
|
|
107
|
+
if (given) {
|
|
108
|
+
name.given = given;
|
|
109
|
+
}
|
|
110
|
+
const family = (_b = authorNode.querySelector('surname')) === null || _b === void 0 ? void 0 : _b.textContent;
|
|
111
|
+
if (family) {
|
|
112
|
+
name.family = family;
|
|
113
|
+
}
|
|
114
|
+
const suffix = (_c = authorNode.querySelector('suffix')) === null || _c === void 0 ? void 0 : _c.textContent;
|
|
115
|
+
if (suffix) {
|
|
116
|
+
name.suffix = suffix;
|
|
117
|
+
}
|
|
118
|
+
if (authorNode.nodeName === 'collab') {
|
|
119
|
+
name.literal = authorNode.textContent;
|
|
120
|
+
}
|
|
121
|
+
authors.push(name);
|
|
122
|
+
});
|
|
123
|
+
if (authors.length) {
|
|
124
|
+
bibliographyItem.author = authors;
|
|
125
|
+
}
|
|
126
|
+
const id = referenceNode.getAttribute('id');
|
|
127
|
+
if (id) {
|
|
128
|
+
referenceIDs.set(id, bibliographyItem._id);
|
|
129
|
+
}
|
|
130
|
+
return bibliographyItem;
|
|
131
|
+
});
|
|
132
|
+
return {
|
|
133
|
+
references,
|
|
134
|
+
referenceIDs,
|
|
135
|
+
referenceQueries,
|
|
136
|
+
};
|
|
137
|
+
},
|
|
138
|
+
parseCrossReferences(crossReferenceNodes, referenceIDs) {
|
|
139
|
+
return flatten(crossReferenceNodes.map((crossReferenceNode) => {
|
|
140
|
+
const rid = crossReferenceNode.getAttribute('rid');
|
|
141
|
+
if (!rid) {
|
|
142
|
+
return [];
|
|
143
|
+
}
|
|
144
|
+
const modelNodes = [];
|
|
145
|
+
const refType = crossReferenceNode.getAttribute('ref-type');
|
|
146
|
+
switch (refType) {
|
|
147
|
+
case 'bibr':
|
|
148
|
+
{
|
|
149
|
+
const rids = rid
|
|
150
|
+
.split(/\s+/)
|
|
151
|
+
.filter((id) => referenceIDs.has(id))
|
|
152
|
+
.map((id) => referenceIDs.get(id));
|
|
153
|
+
if (rids.length) {
|
|
154
|
+
const citation = buildCitation('', rids);
|
|
155
|
+
modelNodes.push(citation);
|
|
156
|
+
crossReferenceNode.setAttribute('rid', citation._id);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
crossReferenceNode.removeAttribute('rid');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
break;
|
|
163
|
+
case 'fn':
|
|
164
|
+
break;
|
|
165
|
+
default:
|
|
166
|
+
{
|
|
167
|
+
const rids = rid.trim().split(/\s+/);
|
|
168
|
+
const auxiliaryObjectReference = buildAuxiliaryObjectReference('', rids);
|
|
169
|
+
modelNodes.push(auxiliaryObjectReference);
|
|
170
|
+
crossReferenceNode.setAttribute('rid', auxiliaryObjectReference._id);
|
|
171
|
+
}
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
return modelNodes;
|
|
175
|
+
}));
|
|
176
|
+
},
|
|
177
|
+
};
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2020 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { DOMParser } from 'prosemirror-model';
|
|
17
|
+
import { InvalidInput } from '../../errors';
|
|
18
|
+
import { nodeFromHTML } from '../../lib/html';
|
|
19
|
+
import { schema } from '../../schema';
|
|
20
|
+
import { auxiliaryObjectTypes, nodeTypesMap } from '../../transformer';
|
|
21
|
+
import { buildElementsOrder, buildJournal, buildManuscript, } from '../../transformer/builders';
|
|
22
|
+
import { encode, inlineContents } from '../../transformer/encode';
|
|
23
|
+
import { createEmptyFootnotesOrder, createOrderedFootnotesIDs, handleFootnotesOrder, } from '../../transformer/footnotes-order';
|
|
24
|
+
import { generateID } from '../../transformer/id';
|
|
25
|
+
import { findManuscript } from '../../transformer/project-bundle';
|
|
26
|
+
import { jatsBodyDOMParser } from './jats-body-dom-parser';
|
|
27
|
+
import { jatsBodyTransformations } from './jats-body-transformations';
|
|
28
|
+
import { createComments, createReferenceComments, markProcessingInstructions, } from './jats-comments';
|
|
29
|
+
import { jatsFrontParser } from './jats-front-parser';
|
|
30
|
+
import { fixBodyPMNode } from './jats-parser-utils';
|
|
31
|
+
import { jatsReferenceParser } from './jats-reference-parser';
|
|
32
|
+
const parser = DOMParser.fromSchema(schema);
|
|
33
|
+
const inlineContentsFromJATSTitle = (htmlTitle) => {
|
|
34
|
+
const node = nodeFromHTML(`<h1>${htmlTitle}</h1>`);
|
|
35
|
+
if (node) {
|
|
36
|
+
const titleNode = parser.parse(node, {
|
|
37
|
+
topNode: schema.nodes.section_title.create(),
|
|
38
|
+
});
|
|
39
|
+
return inlineContents(titleNode);
|
|
40
|
+
}
|
|
41
|
+
throw new InvalidInput('Invalid title content for: ' + htmlTitle);
|
|
42
|
+
};
|
|
43
|
+
export const parseJATSFront = async (front) => {
|
|
44
|
+
var _a, _b, _c;
|
|
45
|
+
const journalMeta = jatsFrontParser.parseJournal(front.querySelector('journal-meta'));
|
|
46
|
+
const journal = Object.assign(Object.assign({}, buildJournal()), journalMeta);
|
|
47
|
+
const { manuscript_bundle, bundleNodes } = await jatsFrontParser.loadJournalBundles(journal.ISSNs);
|
|
48
|
+
const articleMeta = front.querySelector('article-meta');
|
|
49
|
+
const title = (_a = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('title-group > article-title')) === null || _a === void 0 ? void 0 : _a.innerHTML;
|
|
50
|
+
const subtitle = (_b = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('title-group > subtitle')) === null || _b === void 0 ? void 0 : _b.innerHTML;
|
|
51
|
+
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;
|
|
52
|
+
const manuscriptMeta = Object.assign({ title: title ? inlineContentsFromJATSTitle(title) : undefined, subtitle: subtitle ? inlineContentsFromJATSTitle(subtitle) : undefined, runningTitle: runningTitle
|
|
53
|
+
? inlineContentsFromJATSTitle(runningTitle)
|
|
54
|
+
: undefined }, jatsFrontParser.parseCounts(articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('counts')));
|
|
55
|
+
const keywordGroupNodes = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelectorAll('kwd-group');
|
|
56
|
+
const { keywords, groups: keywordGroups } = jatsFrontParser.parseKeywords(keywordGroupNodes);
|
|
57
|
+
const manuscript_keywordIDs = keywords.length > 0 ? keywords.map((k) => k._id) : undefined;
|
|
58
|
+
const { affiliations, affiliationIDs } = jatsFrontParser.parseAffiliationNodes([
|
|
59
|
+
...front.querySelectorAll('article-meta > contrib-group > aff'),
|
|
60
|
+
]);
|
|
61
|
+
const { footnotes, footnoteIDs } = jatsFrontParser.parseFootnoteNodes([
|
|
62
|
+
...front.querySelectorAll('article-meta > author-notes > fn:not([fn-type])'),
|
|
63
|
+
]);
|
|
64
|
+
const { correspondingList, correspondingIDs } = jatsFrontParser.parseCorrespNodes([
|
|
65
|
+
...front.querySelectorAll('article-meta > author-notes > corresp'),
|
|
66
|
+
]);
|
|
67
|
+
const authors = jatsFrontParser.parseAuthorNodes([
|
|
68
|
+
...front.querySelectorAll('article-meta > contrib-group > contrib[contrib-type="author"]'),
|
|
69
|
+
], affiliationIDs, footnoteIDs, correspondingIDs);
|
|
70
|
+
const history = jatsFrontParser.parseDates(front.querySelector('article-meta > history'));
|
|
71
|
+
const supplements = jatsFrontParser.parseSupplements([
|
|
72
|
+
...front.querySelectorAll('article-meta > supplementary-material'),
|
|
73
|
+
]);
|
|
74
|
+
const manuscript = Object.assign(Object.assign(Object.assign(Object.assign({}, buildManuscript()), manuscriptMeta), { bundle: manuscript_bundle, keywordIDs: manuscript_keywordIDs }), history);
|
|
75
|
+
return {
|
|
76
|
+
models: generateModelIDs([
|
|
77
|
+
manuscript,
|
|
78
|
+
...bundleNodes,
|
|
79
|
+
...keywords,
|
|
80
|
+
...affiliations,
|
|
81
|
+
...authors,
|
|
82
|
+
...keywordGroups,
|
|
83
|
+
...footnotes,
|
|
84
|
+
...correspondingList,
|
|
85
|
+
journal,
|
|
86
|
+
...supplements,
|
|
87
|
+
]),
|
|
88
|
+
bundles: bundleNodes,
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
export const parseJATSReferences = (back, body, createElement) => {
|
|
92
|
+
const bibliographyItems = [];
|
|
93
|
+
const crossReferences = [];
|
|
94
|
+
let referenceQueriesMap;
|
|
95
|
+
let referenceIdsMap;
|
|
96
|
+
if (back) {
|
|
97
|
+
const { references, referenceIDs, referenceQueries } = jatsReferenceParser.parseReferences([...back.querySelectorAll('ref-list > ref')], createElement);
|
|
98
|
+
bibliographyItems.push(...references);
|
|
99
|
+
referenceQueriesMap = new Map([...referenceQueries]);
|
|
100
|
+
referenceIdsMap = new Map([...referenceIDs]);
|
|
101
|
+
if (body) {
|
|
102
|
+
crossReferences.push(...jatsReferenceParser.parseCrossReferences([...body.querySelectorAll('xref')], referenceIDs));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
references: generateModelIDs(bibliographyItems),
|
|
107
|
+
crossReferences: generateModelIDs(crossReferences),
|
|
108
|
+
referenceQueriesMap,
|
|
109
|
+
referenceIdsMap,
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
export const parseJATSBody = (document, body, bibliographyItems, refModels, referenceIdsMap, footnotesOrder) => {
|
|
113
|
+
const createElement = createElementFn(document);
|
|
114
|
+
const orderedFootnotesIDs = createOrderedFootnotesIDs(document);
|
|
115
|
+
jatsBodyTransformations.moveFloatsGroupToBody(document, body, createElement);
|
|
116
|
+
jatsBodyTransformations.ensureSection(body, createElement);
|
|
117
|
+
jatsBodyTransformations.mapFootnotesToSections(document, body, createElement);
|
|
118
|
+
jatsBodyTransformations.moveSectionsToBody(document, body, bibliographyItems, createElement);
|
|
119
|
+
jatsBodyTransformations.moveCaptionsToEnd(body);
|
|
120
|
+
jatsBodyTransformations.moveTableFooterToEnd(body);
|
|
121
|
+
jatsBodyTransformations.moveBlockNodesFromParagraph(document, body, createElement);
|
|
122
|
+
const node = jatsBodyDOMParser.parse(body);
|
|
123
|
+
if (!node.firstChild) {
|
|
124
|
+
throw new Error('No content was parsed from the JATS article body');
|
|
125
|
+
}
|
|
126
|
+
const { replacements } = fixBodyPMNode(node.firstChild, refModels, referenceIdsMap);
|
|
127
|
+
if (footnotesOrder) {
|
|
128
|
+
handleFootnotesOrder(orderedFootnotesIDs, replacements, footnotesOrder);
|
|
129
|
+
}
|
|
130
|
+
return node.firstChild;
|
|
131
|
+
};
|
|
132
|
+
const transformTables = (tables, createElement) => {
|
|
133
|
+
tables.forEach((table) => {
|
|
134
|
+
const colgroup = table.querySelector('colgroup');
|
|
135
|
+
const cols = table.querySelectorAll('col');
|
|
136
|
+
if (!colgroup && table.firstChild && cols.length > 0) {
|
|
137
|
+
const colgroup = createElement('colgroup');
|
|
138
|
+
for (const col of cols) {
|
|
139
|
+
colgroup.appendChild(col);
|
|
140
|
+
}
|
|
141
|
+
table.insertBefore(colgroup, table.firstChild);
|
|
142
|
+
}
|
|
143
|
+
const tbody = table.querySelector('tbody');
|
|
144
|
+
if (tbody) {
|
|
145
|
+
const headerRow = table.querySelector('thead > tr');
|
|
146
|
+
if (!headerRow) {
|
|
147
|
+
const tr = createElement('tr');
|
|
148
|
+
tbody.insertBefore(tr, tbody.firstElementChild);
|
|
149
|
+
}
|
|
150
|
+
const footerRow = table.querySelector('tfoot > tr');
|
|
151
|
+
if (!footerRow) {
|
|
152
|
+
const tr = createElement('tr');
|
|
153
|
+
tbody.appendChild(tr);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
};
|
|
158
|
+
const createElementFn = (doc) => (tagName) => doc.createElement(tagName);
|
|
159
|
+
const generateModelIDs = (models) => models.map((m) => m._id ? m : Object.assign(Object.assign({}, m), { _id: generateID(m.objectType) }));
|
|
160
|
+
export const parseJATSArticle = async (doc) => {
|
|
161
|
+
const articleElement = doc.querySelector('article');
|
|
162
|
+
const front = doc.querySelector('front');
|
|
163
|
+
const body = doc.querySelector('body');
|
|
164
|
+
const back = doc.querySelector('back');
|
|
165
|
+
if (!front) {
|
|
166
|
+
throw new InvalidInput('Invalid JATS format! Missing front element');
|
|
167
|
+
}
|
|
168
|
+
if (!articleElement) {
|
|
169
|
+
throw new InvalidInput('Invalid JATS format! Missing article element');
|
|
170
|
+
}
|
|
171
|
+
const authorQueriesMap = markProcessingInstructions(doc);
|
|
172
|
+
const createElement = createElementFn(document);
|
|
173
|
+
const { models: frontModels } = await parseJATSFront(front);
|
|
174
|
+
const { references, crossReferences, referenceQueriesMap, referenceIdsMap } = parseJATSReferences(back, body, createElement);
|
|
175
|
+
transformTables(doc.querySelectorAll('table-wrap > table'), createElement);
|
|
176
|
+
const footnotesOrder = createEmptyFootnotesOrder();
|
|
177
|
+
let elementsOrder = [];
|
|
178
|
+
const bodyModels = [];
|
|
179
|
+
if (body) {
|
|
180
|
+
const bodyDoc = parseJATSBody(doc, body, references, crossReferences, referenceIdsMap, footnotesOrder);
|
|
181
|
+
bodyModels.push(...encode(bodyDoc).values());
|
|
182
|
+
elementsOrder = getElementsOrder(bodyDoc);
|
|
183
|
+
}
|
|
184
|
+
const frontModelsMap = new Map(frontModels.map((model) => [model._id, model]));
|
|
185
|
+
const manuscript = findManuscript(frontModelsMap);
|
|
186
|
+
if (manuscript) {
|
|
187
|
+
const articleType = articleElement.getAttribute('article-type');
|
|
188
|
+
manuscript.articleType = articleType || 'other';
|
|
189
|
+
}
|
|
190
|
+
const models = [
|
|
191
|
+
...frontModels,
|
|
192
|
+
...bodyModels,
|
|
193
|
+
...crossReferences,
|
|
194
|
+
...elementsOrder,
|
|
195
|
+
];
|
|
196
|
+
if (footnotesOrder.footnotesList.length > 0) {
|
|
197
|
+
models.push(footnotesOrder);
|
|
198
|
+
}
|
|
199
|
+
if (authorQueriesMap.size) {
|
|
200
|
+
const commentAnnotations = createComments(authorQueriesMap, models);
|
|
201
|
+
models.push(...commentAnnotations);
|
|
202
|
+
}
|
|
203
|
+
if (referenceQueriesMap && referenceQueriesMap.size) {
|
|
204
|
+
const commentAnnotations = createReferenceComments(referenceQueriesMap, references);
|
|
205
|
+
models.push(...commentAnnotations);
|
|
206
|
+
}
|
|
207
|
+
return models;
|
|
208
|
+
};
|
|
209
|
+
export const getElementsOrder = (node) => {
|
|
210
|
+
const elementsOrderIndex = new Map();
|
|
211
|
+
const models = [];
|
|
212
|
+
node.descendants((child) => {
|
|
213
|
+
const type = child.type;
|
|
214
|
+
if (auxiliaryObjectTypes.has(type)) {
|
|
215
|
+
const index = elementsOrderIndex.get(type);
|
|
216
|
+
if (index !== undefined) {
|
|
217
|
+
const elementsOrder = models[index];
|
|
218
|
+
elementsOrder.elements.push(child.attrs['id']);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
const elementsOrder = buildElementsOrder(nodeTypesMap.get(type));
|
|
222
|
+
elementsOrder.elements.push(child.attrs['id']);
|
|
223
|
+
models.push(elementsOrder);
|
|
224
|
+
elementsOrderIndex.set(type, elementsOrderIndex.size);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
return models;
|
|
229
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2020 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
export { parseJATSFront, parseJATSReferences, parseJATSBody, parseJATSArticle, getElementsOrder, } from './importer';
|
|
17
|
+
export * from './jats-exporter';
|
|
18
|
+
export * from './jats-versions';
|