@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.
Files changed (315) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +193 -0
  3. package/dist/cjs/errors.js +17 -0
  4. package/dist/cjs/index.js +27 -0
  5. package/dist/cjs/jats/importer/index.js +24 -0
  6. package/dist/cjs/jats/importer/jats-body-dom-parser.js +650 -0
  7. package/dist/cjs/jats/importer/jats-body-transformations.js +269 -0
  8. package/dist/cjs/jats/importer/jats-comments.js +131 -0
  9. package/dist/cjs/jats/importer/jats-front-parser.js +341 -0
  10. package/dist/cjs/jats/importer/jats-journal-meta-parser.js +77 -0
  11. package/dist/cjs/jats/importer/jats-parser-utils.js +145 -0
  12. package/dist/cjs/jats/importer/jats-reference-parser.js +180 -0
  13. package/dist/cjs/jats/importer/parse-jats-article.js +237 -0
  14. package/dist/cjs/jats/index.js +40 -0
  15. package/dist/cjs/jats/jats-exporter.js +1569 -0
  16. package/dist/cjs/jats/jats-versions.js +41 -0
  17. package/dist/cjs/lib/attributes.js +26 -0
  18. package/dist/cjs/lib/html.js +48 -0
  19. package/dist/cjs/lib/styled-content.js +28 -0
  20. package/dist/cjs/lib/table-cell-styles.js +52 -0
  21. package/dist/cjs/lib/utils.js +66 -0
  22. package/dist/cjs/mathjax/index.js +41 -0
  23. package/dist/cjs/mathjax/mathjax-packages.js +20 -0
  24. package/dist/cjs/mathjax/mathml-to-svg.js +56 -0
  25. package/dist/cjs/mathjax/tex-to-mathml.js +49 -0
  26. package/dist/cjs/mathjax/tex-to-svg.js +59 -0
  27. package/dist/cjs/schema/groups.js +31 -0
  28. package/dist/cjs/schema/index.js +195 -0
  29. package/dist/cjs/schema/marks.js +159 -0
  30. package/dist/cjs/schema/nodes/attribution.js +32 -0
  31. package/dist/cjs/schema/nodes/bibliography_element.js +44 -0
  32. package/dist/cjs/schema/nodes/bibliography_item.js +101 -0
  33. package/dist/cjs/schema/nodes/bibliography_section.js +46 -0
  34. package/dist/cjs/schema/nodes/blockquote_element.js +62 -0
  35. package/dist/cjs/schema/nodes/caption.js +52 -0
  36. package/dist/cjs/schema/nodes/caption_title.js +51 -0
  37. package/dist/cjs/schema/nodes/citation.js +52 -0
  38. package/dist/cjs/schema/nodes/comment.js +26 -0
  39. package/dist/cjs/schema/nodes/cross_reference.js +58 -0
  40. package/dist/cjs/schema/nodes/doc.js +21 -0
  41. package/dist/cjs/schema/nodes/equation.js +55 -0
  42. package/dist/cjs/schema/nodes/equation_element.js +52 -0
  43. package/dist/cjs/schema/nodes/figcaption.js +31 -0
  44. package/dist/cjs/schema/nodes/figure.js +52 -0
  45. package/dist/cjs/schema/nodes/figure_element.js +78 -0
  46. package/dist/cjs/schema/nodes/footnote.js +67 -0
  47. package/dist/cjs/schema/nodes/footnotes_element.js +54 -0
  48. package/dist/cjs/schema/nodes/footnotes_section.js +45 -0
  49. package/dist/cjs/schema/nodes/graphical_abstract_section.js +46 -0
  50. package/dist/cjs/schema/nodes/hard_break.js +30 -0
  51. package/dist/cjs/schema/nodes/highlight_marker.js +53 -0
  52. package/dist/cjs/schema/nodes/inline_equation.js +58 -0
  53. package/dist/cjs/schema/nodes/inline_footnote.js +51 -0
  54. package/dist/cjs/schema/nodes/keywords_element.js +52 -0
  55. package/dist/cjs/schema/nodes/keywords_section.js +46 -0
  56. package/dist/cjs/schema/nodes/link.js +61 -0
  57. package/dist/cjs/schema/nodes/list.js +121 -0
  58. package/dist/cjs/schema/nodes/listing.js +73 -0
  59. package/dist/cjs/schema/nodes/listing_element.js +52 -0
  60. package/dist/cjs/schema/nodes/manuscript.js +46 -0
  61. package/dist/cjs/schema/nodes/missing_figure.js +50 -0
  62. package/dist/cjs/schema/nodes/paragraph.js +63 -0
  63. package/dist/cjs/schema/nodes/placeholder.js +49 -0
  64. package/dist/cjs/schema/nodes/placeholder_element.js +48 -0
  65. package/dist/cjs/schema/nodes/pullquote_element.js +65 -0
  66. package/dist/cjs/schema/nodes/section.js +94 -0
  67. package/dist/cjs/schema/nodes/section_label.js +30 -0
  68. package/dist/cjs/schema/nodes/section_title.js +48 -0
  69. package/dist/cjs/schema/nodes/table.js +70 -0
  70. package/dist/cjs/schema/nodes/table_col.js +57 -0
  71. package/dist/cjs/schema/nodes/table_element.js +62 -0
  72. package/dist/cjs/schema/nodes/table_row.js +123 -0
  73. package/dist/cjs/schema/nodes/text.js +21 -0
  74. package/dist/cjs/schema/nodes/toc_element.js +52 -0
  75. package/dist/cjs/schema/nodes/toc_section.js +46 -0
  76. package/dist/cjs/schema/types.js +17 -0
  77. package/dist/cjs/tests.js +30 -0
  78. package/dist/cjs/transformer/builders.js +305 -0
  79. package/dist/cjs/transformer/bundles-data.js +36 -0
  80. package/dist/cjs/transformer/bundles.js +32 -0
  81. package/dist/cjs/transformer/decode.js +619 -0
  82. package/dist/cjs/transformer/document-object-types.js +31 -0
  83. package/dist/cjs/transformer/encode.js +545 -0
  84. package/dist/cjs/transformer/filename.js +27 -0
  85. package/dist/cjs/transformer/footnote-category.js +20 -0
  86. package/dist/cjs/transformer/footnotes-order.js +59 -0
  87. package/dist/cjs/transformer/highlight-markers.js +126 -0
  88. package/dist/cjs/transformer/html.js +414 -0
  89. package/dist/cjs/transformer/id.js +28 -0
  90. package/dist/cjs/transformer/index.js +54 -0
  91. package/dist/cjs/transformer/labels.js +85 -0
  92. package/dist/cjs/transformer/manuscript-dependencies.js +74 -0
  93. package/dist/cjs/transformer/model-map.js +26 -0
  94. package/dist/cjs/transformer/models.js +17 -0
  95. package/dist/cjs/transformer/node-names.js +42 -0
  96. package/dist/cjs/transformer/node-title.js +87 -0
  97. package/dist/cjs/transformer/node-types.js +62 -0
  98. package/dist/cjs/transformer/object-types.js +57 -0
  99. package/dist/cjs/transformer/project-bundle.js +86 -0
  100. package/dist/cjs/transformer/section-category.js +222 -0
  101. package/dist/cjs/transformer/serializer.js +23 -0
  102. package/dist/cjs/transformer/shared-data.js +31 -0
  103. package/dist/cjs/transformer/tei-grobid-importer.js +121 -0
  104. package/dist/cjs/transformer/timestamp.js +20 -0
  105. package/dist/cjs/transformer/update-identifiers.js +93 -0
  106. package/dist/cjs/types.js +2 -0
  107. package/dist/es/errors.js +12 -0
  108. package/dist/es/index.js +9 -0
  109. package/dist/es/jats/importer/index.js +16 -0
  110. package/dist/es/jats/importer/jats-body-dom-parser.js +644 -0
  111. package/dist/es/jats/importer/jats-body-transformations.js +266 -0
  112. package/dist/es/jats/importer/jats-comments.js +124 -0
  113. package/dist/es/jats/importer/jats-front-parser.js +335 -0
  114. package/dist/es/jats/importer/jats-journal-meta-parser.js +70 -0
  115. package/dist/es/jats/importer/jats-parser-utils.js +139 -0
  116. package/dist/es/jats/importer/jats-reference-parser.js +177 -0
  117. package/dist/es/jats/importer/parse-jats-article.js +229 -0
  118. package/dist/es/jats/index.js +18 -0
  119. package/dist/es/jats/jats-exporter.js +1561 -0
  120. package/dist/es/jats/jats-versions.js +36 -0
  121. package/dist/es/lib/attributes.js +22 -0
  122. package/dist/es/lib/html.js +43 -0
  123. package/dist/es/lib/styled-content.js +23 -0
  124. package/dist/es/lib/table-cell-styles.js +47 -0
  125. package/dist/es/lib/utils.js +59 -0
  126. package/dist/es/mathjax/index.js +12 -0
  127. package/dist/es/mathjax/mathjax-packages.js +17 -0
  128. package/dist/es/mathjax/mathml-to-svg.js +52 -0
  129. package/dist/es/mathjax/tex-to-mathml.js +45 -0
  130. package/dist/es/mathjax/tex-to-svg.js +55 -0
  131. package/dist/es/schema/groups.js +27 -0
  132. package/dist/es/schema/index.js +178 -0
  133. package/dist/es/schema/marks.js +156 -0
  134. package/dist/es/schema/nodes/attribution.js +29 -0
  135. package/dist/es/schema/nodes/bibliography_element.js +41 -0
  136. package/dist/es/schema/nodes/bibliography_item.js +98 -0
  137. package/dist/es/schema/nodes/bibliography_section.js +42 -0
  138. package/dist/es/schema/nodes/blockquote_element.js +58 -0
  139. package/dist/es/schema/nodes/caption.js +49 -0
  140. package/dist/es/schema/nodes/caption_title.js +48 -0
  141. package/dist/es/schema/nodes/citation.js +48 -0
  142. package/dist/es/schema/nodes/comment.js +23 -0
  143. package/dist/es/schema/nodes/cross_reference.js +55 -0
  144. package/dist/es/schema/nodes/doc.js +18 -0
  145. package/dist/es/schema/nodes/equation.js +52 -0
  146. package/dist/es/schema/nodes/equation_element.js +49 -0
  147. package/dist/es/schema/nodes/figcaption.js +28 -0
  148. package/dist/es/schema/nodes/figure.js +49 -0
  149. package/dist/es/schema/nodes/figure_element.js +74 -0
  150. package/dist/es/schema/nodes/footnote.js +63 -0
  151. package/dist/es/schema/nodes/footnotes_element.js +50 -0
  152. package/dist/es/schema/nodes/footnotes_section.js +41 -0
  153. package/dist/es/schema/nodes/graphical_abstract_section.js +42 -0
  154. package/dist/es/schema/nodes/hard_break.js +27 -0
  155. package/dist/es/schema/nodes/highlight_marker.js +49 -0
  156. package/dist/es/schema/nodes/inline_equation.js +55 -0
  157. package/dist/es/schema/nodes/inline_footnote.js +47 -0
  158. package/dist/es/schema/nodes/keywords_element.js +49 -0
  159. package/dist/es/schema/nodes/keywords_section.js +42 -0
  160. package/dist/es/schema/nodes/link.js +58 -0
  161. package/dist/es/schema/nodes/list.js +117 -0
  162. package/dist/es/schema/nodes/listing.js +69 -0
  163. package/dist/es/schema/nodes/listing_element.js +49 -0
  164. package/dist/es/schema/nodes/manuscript.js +43 -0
  165. package/dist/es/schema/nodes/missing_figure.js +47 -0
  166. package/dist/es/schema/nodes/paragraph.js +59 -0
  167. package/dist/es/schema/nodes/placeholder.js +46 -0
  168. package/dist/es/schema/nodes/placeholder_element.js +45 -0
  169. package/dist/es/schema/nodes/pullquote_element.js +61 -0
  170. package/dist/es/schema/nodes/section.js +90 -0
  171. package/dist/es/schema/nodes/section_label.js +26 -0
  172. package/dist/es/schema/nodes/section_title.js +44 -0
  173. package/dist/es/schema/nodes/table.js +67 -0
  174. package/dist/es/schema/nodes/table_col.js +54 -0
  175. package/dist/es/schema/nodes/table_element.js +59 -0
  176. package/dist/es/schema/nodes/table_row.js +120 -0
  177. package/dist/es/schema/nodes/text.js +18 -0
  178. package/dist/es/schema/nodes/toc_element.js +49 -0
  179. package/dist/es/schema/nodes/toc_section.js +42 -0
  180. package/dist/es/schema/types.js +16 -0
  181. package/dist/es/tests.js +28 -0
  182. package/dist/es/transformer/builders.js +261 -0
  183. package/dist/es/transformer/bundles-data.js +8 -0
  184. package/dist/es/transformer/bundles.js +27 -0
  185. package/dist/es/transformer/decode.js +608 -0
  186. package/dist/es/transformer/document-object-types.js +28 -0
  187. package/dist/es/transformer/encode.js +535 -0
  188. package/dist/es/transformer/filename.js +23 -0
  189. package/dist/es/transformer/footnote-category.js +16 -0
  190. package/dist/es/transformer/footnotes-order.js +53 -0
  191. package/dist/es/transformer/highlight-markers.js +120 -0
  192. package/dist/es/transformer/html.js +407 -0
  193. package/dist/es/transformer/id.js +23 -0
  194. package/dist/es/transformer/index.js +38 -0
  195. package/dist/es/transformer/labels.js +81 -0
  196. package/dist/es/transformer/manuscript-dependencies.js +64 -0
  197. package/dist/es/transformer/model-map.js +22 -0
  198. package/dist/es/transformer/models.js +16 -0
  199. package/dist/es/transformer/node-names.js +39 -0
  200. package/dist/es/transformer/node-title.js +82 -0
  201. package/dist/es/transformer/node-types.js +55 -0
  202. package/dist/es/transformer/object-types.js +52 -0
  203. package/dist/es/transformer/project-bundle.js +77 -0
  204. package/dist/es/transformer/section-category.js +210 -0
  205. package/dist/es/transformer/serializer.js +17 -0
  206. package/dist/es/transformer/shared-data.js +1 -0
  207. package/dist/es/transformer/tei-grobid-importer.js +115 -0
  208. package/dist/es/transformer/timestamp.js +16 -0
  209. package/dist/es/transformer/update-identifiers.js +87 -0
  210. package/dist/es/types.js +1 -0
  211. package/dist/types/errors.d.ts +6 -0
  212. package/dist/types/index.d.ts +9 -0
  213. package/dist/types/jats/importer/index.d.ts +16 -0
  214. package/dist/types/jats/importer/jats-body-dom-parser.d.ts +24 -0
  215. package/dist/types/jats/importer/jats-body-transformations.d.ts +31 -0
  216. package/dist/types/jats/importer/jats-comments.d.ts +26 -0
  217. package/dist/types/jats/importer/jats-front-parser.d.ts +62 -0
  218. package/dist/types/jats/importer/jats-journal-meta-parser.d.ts +37 -0
  219. package/dist/types/jats/importer/jats-parser-utils.d.ts +23 -0
  220. package/dist/types/jats/importer/jats-reference-parser.d.ts +23 -0
  221. package/dist/types/jats/importer/parse-jats-article.d.ts +30 -0
  222. package/dist/types/jats/index.d.ts +18 -0
  223. package/dist/types/jats/jats-exporter.d.ts +72 -0
  224. package/dist/types/jats/jats-versions.d.ts +23 -0
  225. package/dist/types/lib/attributes.d.ts +20 -0
  226. package/dist/types/lib/html.d.ts +17 -0
  227. package/dist/types/lib/styled-content.d.ts +22 -0
  228. package/dist/types/lib/table-cell-styles.d.ts +27 -0
  229. package/dist/types/lib/utils.d.ts +26 -0
  230. package/dist/types/mathjax/index.d.ts +3 -0
  231. package/dist/types/mathjax/mathjax-packages.d.ts +16 -0
  232. package/dist/types/mathjax/mathml-to-svg.d.ts +17 -0
  233. package/dist/types/mathjax/tex-to-mathml.d.ts +17 -0
  234. package/dist/types/mathjax/tex-to-svg.d.ts +17 -0
  235. package/dist/types/schema/groups.d.ts +22 -0
  236. package/dist/types/schema/index.d.ts +65 -0
  237. package/dist/types/schema/marks.d.ts +27 -0
  238. package/dist/types/schema/nodes/attribution.d.ts +21 -0
  239. package/dist/types/schema/nodes/bibliography_element.d.ts +26 -0
  240. package/dist/types/schema/nodes/bibliography_item.d.ts +36 -0
  241. package/dist/types/schema/nodes/bibliography_section.d.ts +26 -0
  242. package/dist/types/schema/nodes/blockquote_element.d.ts +28 -0
  243. package/dist/types/schema/nodes/caption.d.ts +25 -0
  244. package/dist/types/schema/nodes/caption_title.d.ts +25 -0
  245. package/dist/types/schema/nodes/citation.d.ts +27 -0
  246. package/dist/types/schema/nodes/comment.d.ts +31 -0
  247. package/dist/types/schema/nodes/cross_reference.d.ts +26 -0
  248. package/dist/types/schema/nodes/doc.d.ts +17 -0
  249. package/dist/types/schema/nodes/equation.d.ts +28 -0
  250. package/dist/types/schema/nodes/equation_element.d.ts +29 -0
  251. package/dist/types/schema/nodes/figcaption.d.ts +21 -0
  252. package/dist/types/schema/nodes/figure.d.ts +25 -0
  253. package/dist/types/schema/nodes/figure_element.d.ts +44 -0
  254. package/dist/types/schema/nodes/footnote.d.ts +32 -0
  255. package/dist/types/schema/nodes/footnotes_element.d.ts +28 -0
  256. package/dist/types/schema/nodes/footnotes_section.d.ts +26 -0
  257. package/dist/types/schema/nodes/graphical_abstract_section.d.ts +26 -0
  258. package/dist/types/schema/nodes/hard_break.d.ts +21 -0
  259. package/dist/types/schema/nodes/highlight_marker.d.ts +29 -0
  260. package/dist/types/schema/nodes/inline_equation.d.ts +28 -0
  261. package/dist/types/schema/nodes/inline_footnote.d.ts +27 -0
  262. package/dist/types/schema/nodes/keywords_element.d.ts +27 -0
  263. package/dist/types/schema/nodes/keywords_section.d.ts +26 -0
  264. package/dist/types/schema/nodes/link.d.ts +26 -0
  265. package/dist/types/schema/nodes/list.d.ts +39 -0
  266. package/dist/types/schema/nodes/listing.d.ts +33 -0
  267. package/dist/types/schema/nodes/listing_element.d.ts +29 -0
  268. package/dist/types/schema/nodes/manuscript.d.ts +23 -0
  269. package/dist/types/schema/nodes/missing_figure.d.ts +23 -0
  270. package/dist/types/schema/nodes/paragraph.d.ts +30 -0
  271. package/dist/types/schema/nodes/placeholder.d.ts +26 -0
  272. package/dist/types/schema/nodes/placeholder_element.d.ts +25 -0
  273. package/dist/types/schema/nodes/pullquote_element.d.ts +28 -0
  274. package/dist/types/schema/nodes/section.d.ts +36 -0
  275. package/dist/types/schema/nodes/section_label.d.ts +22 -0
  276. package/dist/types/schema/nodes/section_title.d.ts +22 -0
  277. package/dist/types/schema/nodes/table.d.ts +27 -0
  278. package/dist/types/schema/nodes/table_col.d.ts +24 -0
  279. package/dist/types/schema/nodes/table_element.d.ts +35 -0
  280. package/dist/types/schema/nodes/table_row.d.ts +41 -0
  281. package/dist/types/schema/nodes/text.d.ts +17 -0
  282. package/dist/types/schema/nodes/toc_element.d.ts +27 -0
  283. package/dist/types/schema/nodes/toc_section.d.ts +26 -0
  284. package/dist/types/schema/types.d.ts +45 -0
  285. package/dist/types/tests.d.ts +16 -0
  286. package/dist/types/transformer/builders.d.ts +74 -0
  287. package/dist/types/transformer/bundles-data.d.ts +3 -0
  288. package/dist/types/transformer/bundles.d.ts +3 -0
  289. package/dist/types/transformer/decode.d.ts +38 -0
  290. package/dist/types/transformer/document-object-types.d.ts +17 -0
  291. package/dist/types/transformer/encode.d.ts +29 -0
  292. package/dist/types/transformer/filename.d.ts +16 -0
  293. package/dist/types/transformer/footnote-category.d.ts +17 -0
  294. package/dist/types/transformer/footnotes-order.d.ts +23 -0
  295. package/dist/types/transformer/highlight-markers.d.ts +26 -0
  296. package/dist/types/transformer/html.d.ts +36 -0
  297. package/dist/types/transformer/id.d.ts +20 -0
  298. package/dist/types/transformer/index.d.ts +38 -0
  299. package/dist/types/transformer/labels.d.ts +24 -0
  300. package/dist/types/transformer/manuscript-dependencies.d.ts +12 -0
  301. package/dist/types/transformer/model-map.d.ts +19 -0
  302. package/dist/types/transformer/models.d.ts +48 -0
  303. package/dist/types/transformer/node-names.d.ts +17 -0
  304. package/dist/types/transformer/node-title.d.ts +19 -0
  305. package/dist/types/transformer/node-types.d.ts +22 -0
  306. package/dist/types/transformer/object-types.d.ts +29 -0
  307. package/dist/types/transformer/project-bundle.d.ts +30 -0
  308. package/dist/types/transformer/section-category.d.ts +28 -0
  309. package/dist/types/transformer/serializer.d.ts +19 -0
  310. package/dist/types/transformer/shared-data.d.ts +2 -0
  311. package/dist/types/transformer/tei-grobid-importer.d.ts +20 -0
  312. package/dist/types/transformer/timestamp.d.ts +16 -0
  313. package/dist/types/transformer/update-identifiers.d.ts +23 -0
  314. package/dist/types/types.d.ts +2 -0
  315. 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';