@fiduswriter/document 0.1.0-alpha.3 → 0.1.0-alpha.5

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 (582) hide show
  1. package/README.md +22 -1
  2. package/dist/bibliography/common.d.ts +10 -0
  3. package/dist/bibliography/common.d.ts.map +1 -0
  4. package/dist/bibliography/common.js +86 -0
  5. package/dist/bibliography/common.js.map +1 -0
  6. package/dist/bibliography/csl_bib.d.ts +3 -0
  7. package/dist/bibliography/csl_bib.d.ts.map +1 -0
  8. package/dist/bibliography/csl_bib.js +131 -0
  9. package/dist/bibliography/csl_bib.js.map +1 -0
  10. package/dist/citations/citeproc_sys.d.ts +12 -0
  11. package/dist/citations/citeproc_sys.d.ts.map +1 -0
  12. package/dist/citations/citeproc_sys.js +48 -0
  13. package/dist/citations/citeproc_sys.js.map +1 -0
  14. package/dist/citations/format.d.ts +40 -0
  15. package/dist/citations/format.d.ts.map +1 -0
  16. package/dist/citations/format.js +186 -0
  17. package/dist/citations/format.js.map +1 -0
  18. package/dist/editor/e2ee/encryptor.d.ts +123 -0
  19. package/dist/editor/e2ee/encryptor.d.ts.map +1 -0
  20. package/dist/editor/e2ee/encryptor.js +201 -0
  21. package/dist/editor/e2ee/encryptor.js.map +1 -0
  22. package/dist/exporter/docx/citations.d.ts +31 -0
  23. package/dist/exporter/docx/citations.d.ts.map +1 -0
  24. package/dist/exporter/docx/citations.js +171 -0
  25. package/dist/exporter/docx/citations.js.map +1 -0
  26. package/dist/exporter/docx/comments.d.ts +22 -0
  27. package/dist/exporter/docx/comments.d.ts.map +1 -0
  28. package/dist/exporter/docx/comments.js +170 -0
  29. package/dist/exporter/docx/comments.js.map +1 -0
  30. package/dist/exporter/docx/footnotes.d.ts +47 -0
  31. package/dist/exporter/docx/footnotes.d.ts.map +1 -0
  32. package/dist/exporter/docx/footnotes.js +216 -0
  33. package/dist/exporter/docx/footnotes.js.map +1 -0
  34. package/dist/exporter/docx/images.d.ts +25 -0
  35. package/dist/exporter/docx/images.d.ts.map +1 -0
  36. package/dist/exporter/docx/images.js +101 -0
  37. package/dist/exporter/docx/images.js.map +1 -0
  38. package/dist/exporter/docx/index.d.ts +16 -0
  39. package/dist/exporter/docx/index.d.ts.map +1 -0
  40. package/dist/exporter/docx/index.js +115 -0
  41. package/dist/exporter/docx/index.js.map +1 -0
  42. package/dist/exporter/docx/lists.d.ts +38 -0
  43. package/dist/exporter/docx/lists.d.ts.map +1 -0
  44. package/dist/exporter/docx/lists.js +276 -0
  45. package/dist/exporter/docx/lists.js.map +1 -0
  46. package/dist/exporter/docx/math.d.ts +13 -0
  47. package/dist/exporter/docx/math.d.ts.map +1 -0
  48. package/dist/exporter/docx/math.js +59 -0
  49. package/dist/exporter/docx/math.js.map +1 -0
  50. package/dist/exporter/docx/metadata.d.ts +17 -0
  51. package/dist/exporter/docx/metadata.d.ts.map +1 -0
  52. package/dist/exporter/docx/metadata.js +272 -0
  53. package/dist/exporter/docx/metadata.js.map +1 -0
  54. package/dist/exporter/docx/rels.d.ts +27 -0
  55. package/dist/exporter/docx/rels.d.ts.map +1 -0
  56. package/dist/exporter/docx/rels.js +183 -0
  57. package/dist/exporter/docx/rels.js.map +1 -0
  58. package/dist/exporter/docx/render.d.ts +22 -0
  59. package/dist/exporter/docx/render.d.ts.map +1 -0
  60. package/dist/exporter/docx/render.js +780 -0
  61. package/dist/exporter/docx/render.js.map +1 -0
  62. package/dist/exporter/docx/richtext.d.ts +25 -0
  63. package/dist/exporter/docx/richtext.d.ts.map +1 -0
  64. package/dist/exporter/docx/richtext.js +1070 -0
  65. package/dist/exporter/docx/richtext.js.map +1 -0
  66. package/dist/exporter/docx/tables.d.ts +16 -0
  67. package/dist/exporter/docx/tables.d.ts.map +1 -0
  68. package/dist/exporter/docx/tables.js +115 -0
  69. package/dist/exporter/docx/tables.js.map +1 -0
  70. package/dist/exporter/docx/tools.d.ts +4 -0
  71. package/dist/exporter/docx/tools.d.ts.map +1 -0
  72. package/dist/exporter/docx/tools.js +48 -0
  73. package/dist/exporter/docx/tools.js.map +1 -0
  74. package/dist/exporter/epub/index.d.ts +19 -0
  75. package/dist/exporter/epub/index.d.ts.map +1 -0
  76. package/dist/exporter/epub/index.js +109 -0
  77. package/dist/exporter/epub/index.js.map +1 -0
  78. package/dist/exporter/epub/templates.d.ts +63 -0
  79. package/dist/exporter/epub/templates.d.ts.map +1 -0
  80. package/dist/exporter/epub/templates.js +95 -0
  81. package/dist/exporter/epub/templates.js.map +1 -0
  82. package/dist/exporter/epub/tools.d.ts +13 -0
  83. package/dist/exporter/epub/tools.d.ts.map +1 -0
  84. package/{src → dist}/exporter/epub/tools.js +32 -46
  85. package/dist/exporter/epub/tools.js.map +1 -0
  86. package/dist/exporter/html/citations.d.ts +29 -0
  87. package/dist/exporter/html/citations.d.ts.map +1 -0
  88. package/dist/exporter/html/citations.js +110 -0
  89. package/dist/exporter/html/citations.js.map +1 -0
  90. package/dist/exporter/html/convert.d.ts +50 -0
  91. package/dist/exporter/html/convert.d.ts.map +1 -0
  92. package/dist/exporter/html/convert.js +750 -0
  93. package/dist/exporter/html/convert.js.map +1 -0
  94. package/dist/exporter/html/index.d.ts +64 -0
  95. package/dist/exporter/html/index.d.ts.map +1 -0
  96. package/dist/exporter/html/index.js +154 -0
  97. package/dist/exporter/html/index.js.map +1 -0
  98. package/dist/exporter/html/templates.d.ts +24 -0
  99. package/dist/exporter/html/templates.d.ts.map +1 -0
  100. package/dist/exporter/html/templates.js +21 -0
  101. package/dist/exporter/html/templates.js.map +1 -0
  102. package/dist/exporter/html/tools.d.ts +2 -0
  103. package/dist/exporter/html/tools.d.ts.map +1 -0
  104. package/dist/exporter/html/tools.js +49 -0
  105. package/dist/exporter/html/tools.js.map +1 -0
  106. package/dist/exporter/jats/bibliography.d.ts +3 -0
  107. package/dist/exporter/jats/bibliography.d.ts.map +1 -0
  108. package/dist/exporter/jats/bibliography.js +158 -0
  109. package/dist/exporter/jats/bibliography.js.map +1 -0
  110. package/dist/exporter/jats/citations.d.ts +16 -0
  111. package/dist/exporter/jats/citations.d.ts.map +1 -0
  112. package/dist/exporter/jats/citations.js +105 -0
  113. package/dist/exporter/jats/citations.js.map +1 -0
  114. package/dist/exporter/jats/convert.d.ts +41 -0
  115. package/dist/exporter/jats/convert.d.ts.map +1 -0
  116. package/dist/exporter/jats/convert.js +816 -0
  117. package/dist/exporter/jats/convert.js.map +1 -0
  118. package/dist/exporter/jats/index.d.ts +25 -0
  119. package/dist/exporter/jats/index.d.ts.map +1 -0
  120. package/dist/exporter/jats/index.js +82 -0
  121. package/dist/exporter/jats/index.js.map +1 -0
  122. package/dist/exporter/jats/templates.d.ts +18 -0
  123. package/dist/exporter/jats/templates.d.ts.map +1 -0
  124. package/dist/exporter/jats/templates.js +25 -0
  125. package/dist/exporter/jats/templates.js.map +1 -0
  126. package/dist/exporter/jats/text.d.ts +4 -0
  127. package/dist/exporter/jats/text.d.ts.map +1 -0
  128. package/dist/exporter/jats/text.js +72 -0
  129. package/dist/exporter/jats/text.js.map +1 -0
  130. package/dist/exporter/latex/convert.d.ts +24 -0
  131. package/dist/exporter/latex/convert.d.ts.map +1 -0
  132. package/dist/exporter/latex/convert.js +881 -0
  133. package/dist/exporter/latex/convert.js.map +1 -0
  134. package/dist/exporter/latex/escape_latex.d.ts +2 -0
  135. package/dist/exporter/latex/escape_latex.d.ts.map +1 -0
  136. package/dist/exporter/latex/escape_latex.js +20 -0
  137. package/dist/exporter/latex/escape_latex.js.map +1 -0
  138. package/dist/exporter/latex/index.d.ts +24 -0
  139. package/dist/exporter/latex/index.d.ts.map +1 -0
  140. package/dist/exporter/latex/index.js +67 -0
  141. package/dist/exporter/latex/index.js.map +1 -0
  142. package/dist/exporter/latex/readme.d.ts +2 -0
  143. package/dist/exporter/latex/readme.d.ts.map +1 -0
  144. package/dist/exporter/latex/readme.js +23 -0
  145. package/dist/exporter/latex/readme.js.map +1 -0
  146. package/dist/exporter/native/copy.d.ts +30 -0
  147. package/dist/exporter/native/copy.d.ts.map +1 -0
  148. package/dist/exporter/native/copy.js +151 -0
  149. package/dist/exporter/native/copy.js.map +1 -0
  150. package/dist/exporter/native/file.d.ts +12 -0
  151. package/dist/exporter/native/file.d.ts.map +1 -0
  152. package/dist/exporter/native/file.js +38 -0
  153. package/dist/exporter/native/file.js.map +1 -0
  154. package/dist/exporter/native/index.d.ts +5 -0
  155. package/dist/exporter/native/index.d.ts.map +1 -0
  156. package/dist/exporter/native/index.js +5 -0
  157. package/dist/exporter/native/index.js.map +1 -0
  158. package/dist/exporter/native/revision.d.ts +18 -0
  159. package/dist/exporter/native/revision.d.ts.map +1 -0
  160. package/dist/exporter/native/revision.js +39 -0
  161. package/dist/exporter/native/revision.js.map +1 -0
  162. package/dist/exporter/native/shrink.d.ts +36 -0
  163. package/dist/exporter/native/shrink.d.ts.map +1 -0
  164. package/dist/exporter/native/shrink.js +124 -0
  165. package/dist/exporter/native/shrink.js.map +1 -0
  166. package/dist/exporter/native/zip.d.ts +25 -0
  167. package/dist/exporter/native/zip.d.ts.map +1 -0
  168. package/dist/exporter/native/zip.js +56 -0
  169. package/dist/exporter/native/zip.js.map +1 -0
  170. package/dist/exporter/odt/citations.d.ts +21 -0
  171. package/dist/exporter/odt/citations.d.ts.map +1 -0
  172. package/dist/exporter/odt/citations.js +104 -0
  173. package/dist/exporter/odt/citations.js.map +1 -0
  174. package/dist/exporter/odt/footnotes.d.ts +31 -0
  175. package/dist/exporter/odt/footnotes.d.ts.map +1 -0
  176. package/dist/exporter/odt/footnotes.js +129 -0
  177. package/dist/exporter/odt/footnotes.js.map +1 -0
  178. package/dist/exporter/odt/images.d.ts +25 -0
  179. package/dist/exporter/odt/images.d.ts.map +1 -0
  180. package/dist/exporter/odt/images.js +106 -0
  181. package/dist/exporter/odt/images.js.map +1 -0
  182. package/dist/exporter/odt/index.d.ts +17 -0
  183. package/dist/exporter/odt/index.d.ts.map +1 -0
  184. package/dist/exporter/odt/index.js +108 -0
  185. package/dist/exporter/odt/index.js.map +1 -0
  186. package/dist/exporter/odt/math.d.ts +15 -0
  187. package/dist/exporter/odt/math.d.ts.map +1 -0
  188. package/dist/exporter/odt/math.js +71 -0
  189. package/dist/exporter/odt/math.js.map +1 -0
  190. package/dist/exporter/odt/metadata.d.ts +18 -0
  191. package/dist/exporter/odt/metadata.d.ts.map +1 -0
  192. package/dist/exporter/odt/metadata.js +224 -0
  193. package/dist/exporter/odt/metadata.js.map +1 -0
  194. package/dist/exporter/odt/render.d.ts +26 -0
  195. package/dist/exporter/odt/render.d.ts.map +1 -0
  196. package/dist/exporter/odt/render.js +651 -0
  197. package/dist/exporter/odt/render.js.map +1 -0
  198. package/dist/exporter/odt/richtext.d.ts +22 -0
  199. package/dist/exporter/odt/richtext.d.ts.map +1 -0
  200. package/dist/exporter/odt/richtext.js +743 -0
  201. package/dist/exporter/odt/richtext.js.map +1 -0
  202. package/dist/exporter/odt/styles.d.ts +41 -0
  203. package/dist/exporter/odt/styles.d.ts.map +1 -0
  204. package/dist/exporter/odt/styles.js +370 -0
  205. package/dist/exporter/odt/styles.js.map +1 -0
  206. package/dist/exporter/odt/track.d.ts +18 -0
  207. package/dist/exporter/odt/track.d.ts.map +1 -0
  208. package/dist/exporter/odt/track.js +66 -0
  209. package/dist/exporter/odt/track.js.map +1 -0
  210. package/dist/exporter/pandoc/citations.d.ts +23 -0
  211. package/dist/exporter/pandoc/citations.d.ts.map +1 -0
  212. package/dist/exporter/pandoc/citations.js +99 -0
  213. package/dist/exporter/pandoc/citations.js.map +1 -0
  214. package/dist/exporter/pandoc/convert.d.ts +19 -0
  215. package/dist/exporter/pandoc/convert.d.ts.map +1 -0
  216. package/dist/exporter/pandoc/convert.js +886 -0
  217. package/dist/exporter/pandoc/convert.js.map +1 -0
  218. package/dist/exporter/pandoc/index.d.ts +25 -0
  219. package/dist/exporter/pandoc/index.d.ts.map +1 -0
  220. package/dist/exporter/pandoc/index.js +79 -0
  221. package/dist/exporter/pandoc/index.js.map +1 -0
  222. package/dist/exporter/pandoc/readme.d.ts +2 -0
  223. package/dist/exporter/pandoc/readme.d.ts.map +1 -0
  224. package/dist/exporter/pandoc/readme.js +8 -0
  225. package/dist/exporter/pandoc/readme.js.map +1 -0
  226. package/dist/exporter/pandoc/tools.d.ts +22 -0
  227. package/dist/exporter/pandoc/tools.d.ts.map +1 -0
  228. package/dist/exporter/pandoc/tools.js +52 -0
  229. package/dist/exporter/pandoc/tools.js.map +1 -0
  230. package/dist/exporter/print/index.d.ts +20 -0
  231. package/dist/exporter/print/index.d.ts.map +1 -0
  232. package/dist/exporter/print/index.js +142 -0
  233. package/dist/exporter/print/index.js.map +1 -0
  234. package/dist/exporter/tools/doc_content.d.ts +6 -0
  235. package/dist/exporter/tools/doc_content.d.ts.map +1 -0
  236. package/dist/exporter/tools/doc_content.js +130 -0
  237. package/dist/exporter/tools/doc_content.js.map +1 -0
  238. package/dist/exporter/tools/file.d.ts +2 -0
  239. package/dist/exporter/tools/file.d.ts.map +1 -0
  240. package/dist/exporter/tools/file.js +10 -0
  241. package/dist/exporter/tools/file.js.map +1 -0
  242. package/dist/exporter/tools/json.d.ts +7 -0
  243. package/dist/exporter/tools/json.d.ts.map +1 -0
  244. package/dist/exporter/tools/json.js +82 -0
  245. package/dist/exporter/tools/json.js.map +1 -0
  246. package/dist/exporter/tools/svg.d.ts +8 -0
  247. package/dist/exporter/tools/svg.d.ts.map +1 -0
  248. package/dist/exporter/tools/svg.js +26 -0
  249. package/dist/exporter/tools/svg.js.map +1 -0
  250. package/dist/exporter/tools/xml.d.ts +42 -0
  251. package/dist/exporter/tools/xml.d.ts.map +1 -0
  252. package/dist/exporter/tools/xml.js +467 -0
  253. package/dist/exporter/tools/xml.js.map +1 -0
  254. package/dist/exporter/tools/xml_zip.d.ts +21 -0
  255. package/dist/exporter/tools/xml_zip.d.ts.map +1 -0
  256. package/dist/exporter/tools/xml_zip.js +92 -0
  257. package/dist/exporter/tools/xml_zip.js.map +1 -0
  258. package/dist/exporter/tools/zip.d.ts +35 -0
  259. package/dist/exporter/tools/zip.d.ts.map +1 -0
  260. package/dist/exporter/tools/zip.js +78 -0
  261. package/dist/exporter/tools/zip.js.map +1 -0
  262. package/dist/exporter/tools/zotero_csl.d.ts +23 -0
  263. package/dist/exporter/tools/zotero_csl.d.ts.map +1 -0
  264. package/dist/exporter/tools/zotero_csl.js +78 -0
  265. package/dist/exporter/tools/zotero_csl.js.map +1 -0
  266. package/dist/importer/citations.d.ts +28 -0
  267. package/dist/importer/citations.d.ts.map +1 -0
  268. package/dist/importer/citations.js +68 -0
  269. package/dist/importer/citations.js.map +1 -0
  270. package/dist/importer/docx/citations.d.ts +43 -0
  271. package/dist/importer/docx/citations.d.ts.map +1 -0
  272. package/dist/importer/docx/citations.js +81 -0
  273. package/dist/importer/docx/citations.js.map +1 -0
  274. package/dist/importer/docx/convert.d.ts +150 -0
  275. package/dist/importer/docx/convert.d.ts.map +1 -0
  276. package/dist/importer/docx/convert.js +1243 -0
  277. package/dist/importer/docx/convert.js.map +1 -0
  278. package/dist/importer/docx/helpers.d.ts +2 -0
  279. package/dist/importer/docx/helpers.d.ts.map +1 -0
  280. package/dist/importer/docx/helpers.js +10 -0
  281. package/dist/importer/docx/helpers.js.map +1 -0
  282. package/dist/importer/docx/index.d.ts +27 -0
  283. package/dist/importer/docx/index.d.ts.map +1 -0
  284. package/dist/importer/docx/index.js +77 -0
  285. package/dist/importer/docx/index.js.map +1 -0
  286. package/dist/importer/docx/omml2mathml.d.ts +6 -0
  287. package/dist/importer/docx/omml2mathml.d.ts.map +1 -0
  288. package/dist/importer/docx/omml2mathml.js +1146 -0
  289. package/dist/importer/docx/omml2mathml.js.map +1 -0
  290. package/dist/importer/docx/parse.d.ts +96 -0
  291. package/dist/importer/docx/parse.d.ts.map +1 -0
  292. package/dist/importer/docx/parse.js +681 -0
  293. package/dist/importer/docx/parse.js.map +1 -0
  294. package/dist/importer/native/extract_template.d.ts +6 -0
  295. package/dist/importer/native/extract_template.d.ts.map +1 -0
  296. package/dist/importer/native/extract_template.js +80 -0
  297. package/dist/importer/native/extract_template.js.map +1 -0
  298. package/dist/importer/native/file.d.ts +37 -0
  299. package/dist/importer/native/file.d.ts.map +1 -0
  300. package/dist/importer/native/file.js +162 -0
  301. package/dist/importer/native/file.js.map +1 -0
  302. package/dist/importer/native/get_images.d.ts +21 -0
  303. package/dist/importer/native/get_images.d.ts.map +1 -0
  304. package/dist/importer/native/get_images.js +58 -0
  305. package/dist/importer/native/get_images.js.map +1 -0
  306. package/dist/importer/native/importer.d.ts +41 -0
  307. package/dist/importer/native/importer.d.ts.map +1 -0
  308. package/dist/importer/native/importer.js +170 -0
  309. package/dist/importer/native/importer.js.map +1 -0
  310. package/dist/importer/native/index.d.ts +7 -0
  311. package/dist/importer/native/index.d.ts.map +1 -0
  312. package/dist/importer/native/index.js +7 -0
  313. package/dist/importer/native/index.js.map +1 -0
  314. package/dist/importer/native/update.d.ts +7 -0
  315. package/dist/importer/native/update.d.ts.map +1 -0
  316. package/dist/importer/native/update.js +27 -0
  317. package/dist/importer/native/update.js.map +1 -0
  318. package/dist/importer/native/update_template.d.ts +12 -0
  319. package/dist/importer/native/update_template.d.ts.map +1 -0
  320. package/dist/importer/native/update_template.js +19 -0
  321. package/dist/importer/native/update_template.js.map +1 -0
  322. package/dist/importer/odt/citations.d.ts +27 -0
  323. package/dist/importer/odt/citations.d.ts.map +1 -0
  324. package/dist/importer/odt/citations.js +57 -0
  325. package/dist/importer/odt/citations.js.map +1 -0
  326. package/dist/importer/odt/convert.d.ts +146 -0
  327. package/dist/importer/odt/convert.d.ts.map +1 -0
  328. package/dist/importer/odt/convert.js +1530 -0
  329. package/dist/importer/odt/convert.js.map +1 -0
  330. package/dist/importer/odt/index.d.ts +30 -0
  331. package/dist/importer/odt/index.d.ts.map +1 -0
  332. package/dist/importer/odt/index.js +124 -0
  333. package/dist/importer/odt/index.js.map +1 -0
  334. package/dist/importer/pandoc/convert.d.ts +32 -0
  335. package/dist/importer/pandoc/convert.d.ts.map +1 -0
  336. package/dist/importer/pandoc/convert.js +790 -0
  337. package/dist/importer/pandoc/convert.js.map +1 -0
  338. package/dist/importer/pandoc/helpers.d.ts +5 -0
  339. package/dist/importer/pandoc/helpers.d.ts.map +1 -0
  340. package/dist/importer/pandoc/helpers.js +73 -0
  341. package/dist/importer/pandoc/helpers.js.map +1 -0
  342. package/dist/importer/pandoc/index.d.ts +31 -0
  343. package/dist/importer/pandoc/index.d.ts.map +1 -0
  344. package/dist/importer/pandoc/index.js +114 -0
  345. package/dist/importer/pandoc/index.js.map +1 -0
  346. package/dist/importer/registry.d.ts +21 -0
  347. package/dist/importer/registry.d.ts.map +1 -0
  348. package/dist/importer/registry.js +41 -0
  349. package/dist/importer/registry.js.map +1 -0
  350. package/dist/importer/zip_analyzer.d.ts +31 -0
  351. package/dist/importer/zip_analyzer.d.ts.map +1 -0
  352. package/dist/importer/zip_analyzer.js +89 -0
  353. package/dist/importer/zip_analyzer.js.map +1 -0
  354. package/dist/index.d.ts +2 -0
  355. package/dist/index.d.ts.map +1 -0
  356. package/dist/index.js +2 -0
  357. package/dist/index.js.map +1 -0
  358. package/dist/mathlive/opf_includes.d.ts +2 -0
  359. package/dist/mathlive/opf_includes.d.ts.map +1 -0
  360. package/dist/mathlive/opf_includes.js +25 -0
  361. package/dist/mathlive/opf_includes.js.map +1 -0
  362. package/dist/schema/common/annotate.d.ts +47 -0
  363. package/dist/schema/common/annotate.d.ts.map +1 -0
  364. package/dist/schema/common/annotate.js +75 -0
  365. package/dist/schema/common/annotate.js.map +1 -0
  366. package/dist/schema/common/base.d.ts +91 -0
  367. package/dist/schema/common/base.d.ts.map +1 -0
  368. package/dist/schema/common/base.js +109 -0
  369. package/dist/schema/common/base.js.map +1 -0
  370. package/dist/schema/common/citation.d.ts +30 -0
  371. package/dist/schema/common/citation.d.ts.map +1 -0
  372. package/dist/schema/common/citation.js +61 -0
  373. package/dist/schema/common/citation.js.map +1 -0
  374. package/dist/schema/common/equation.d.ts +17 -0
  375. package/dist/schema/common/equation.d.ts.map +1 -0
  376. package/dist/schema/common/equation.js +32 -0
  377. package/dist/schema/common/equation.js.map +1 -0
  378. package/dist/schema/common/figure.d.ts +87 -0
  379. package/dist/schema/common/figure.d.ts.map +1 -0
  380. package/dist/schema/common/figure.js +178 -0
  381. package/dist/schema/common/figure.js.map +1 -0
  382. package/dist/schema/common/heading.d.ts +9 -0
  383. package/dist/schema/common/heading.d.ts.map +1 -0
  384. package/dist/schema/common/heading.js +41 -0
  385. package/dist/schema/common/heading.js.map +1 -0
  386. package/dist/schema/common/index.d.ts +11 -0
  387. package/dist/schema/common/index.d.ts.map +1 -0
  388. package/dist/schema/common/index.js +11 -0
  389. package/dist/schema/common/index.js.map +1 -0
  390. package/dist/schema/common/list.d.ts +63 -0
  391. package/dist/schema/common/list.d.ts.map +1 -0
  392. package/dist/schema/common/list.js +92 -0
  393. package/dist/schema/common/list.js.map +1 -0
  394. package/dist/schema/common/reference.d.ts +70 -0
  395. package/dist/schema/common/reference.d.ts.map +1 -0
  396. package/dist/schema/common/reference.js +97 -0
  397. package/dist/schema/common/reference.js.map +1 -0
  398. package/dist/schema/common/table.d.ts +76 -0
  399. package/dist/schema/common/table.d.ts.map +1 -0
  400. package/dist/schema/common/table.js +86 -0
  401. package/dist/schema/common/table.js.map +1 -0
  402. package/dist/schema/common/track.d.ts +117 -0
  403. package/dist/schema/common/track.d.ts.map +1 -0
  404. package/{src → dist}/schema/common/track.js +44 -49
  405. package/dist/schema/common/track.js.map +1 -0
  406. package/dist/schema/const.d.ts +3 -0
  407. package/dist/schema/const.d.ts.map +1 -0
  408. package/{src → dist}/schema/const.js +3 -3
  409. package/dist/schema/const.js.map +1 -0
  410. package/dist/schema/convert.d.ts +3 -0
  411. package/dist/schema/convert.d.ts.map +1 -0
  412. package/dist/schema/convert.js +1215 -0
  413. package/dist/schema/convert.js.map +1 -0
  414. package/dist/schema/document/content.d.ts +110 -0
  415. package/dist/schema/document/content.d.ts.map +1 -0
  416. package/dist/schema/document/content.js +177 -0
  417. package/dist/schema/document/content.js.map +1 -0
  418. package/dist/schema/document/index.d.ts +795 -0
  419. package/dist/schema/document/index.d.ts.map +1 -0
  420. package/dist/schema/document/index.js +68 -0
  421. package/dist/schema/document/index.js.map +1 -0
  422. package/dist/schema/document/structure.d.ts +164 -0
  423. package/dist/schema/document/structure.d.ts.map +1 -0
  424. package/dist/schema/document/structure.js +445 -0
  425. package/dist/schema/document/structure.js.map +1 -0
  426. package/dist/schema/export.d.ts +7 -0
  427. package/dist/schema/export.d.ts.map +1 -0
  428. package/dist/schema/export.js +17 -0
  429. package/dist/schema/export.js.map +1 -0
  430. package/dist/schema/footnotes.d.ts +454 -0
  431. package/dist/schema/footnotes.d.ts.map +1 -0
  432. package/dist/schema/footnotes.js +90 -0
  433. package/dist/schema/footnotes.js.map +1 -0
  434. package/dist/schema/footnotes_convert.d.ts +5 -0
  435. package/dist/schema/footnotes_convert.d.ts.map +1 -0
  436. package/dist/schema/footnotes_convert.js +30 -0
  437. package/dist/schema/footnotes_convert.js.map +1 -0
  438. package/dist/schema/i18n.d.ts +55 -0
  439. package/dist/schema/i18n.d.ts.map +1 -0
  440. package/{src → dist}/schema/i18n.js +14 -23
  441. package/dist/schema/i18n.js.map +1 -0
  442. package/dist/schema/index.d.ts +6 -0
  443. package/dist/schema/index.d.ts.map +1 -0
  444. package/dist/schema/index.js +6 -0
  445. package/dist/schema/index.js.map +1 -0
  446. package/dist/schema/mini_json.d.ts +4 -0
  447. package/dist/schema/mini_json.d.ts.map +1 -0
  448. package/{src → dist}/schema/mini_json.js +19 -28
  449. package/dist/schema/mini_json.js.map +1 -0
  450. package/dist/schema/text.d.ts +3 -0
  451. package/dist/schema/text.d.ts.map +1 -0
  452. package/dist/schema/text.js +23 -0
  453. package/dist/schema/text.js.map +1 -0
  454. package/dist/types.d.ts +281 -0
  455. package/dist/types.d.ts.map +1 -0
  456. package/dist/types.js +9 -0
  457. package/dist/types.js.map +1 -0
  458. package/package.json +51 -16
  459. package/scripts/export-schema.js +1 -1
  460. package/src/bibliography/{common.js → common.ts} +15 -12
  461. package/src/bibliography/{csl_bib.js → csl_bib.ts} +16 -15
  462. package/src/citations/{citeproc_sys.js → citeproc_sys.ts} +26 -6
  463. package/src/citations/{format.js → format.ts} +80 -24
  464. package/src/editor/e2ee/{encryptor.js → encryptor.ts} +76 -44
  465. package/src/exporter/docx/{citations.js → citations.ts} +51 -23
  466. package/src/exporter/docx/{comments.js → comments.ts} +69 -26
  467. package/src/exporter/docx/{footnotes.js → footnotes.ts} +81 -42
  468. package/src/exporter/docx/images.ts +128 -0
  469. package/src/exporter/docx/{index.js → index.ts} +48 -25
  470. package/src/exporter/docx/{lists.js → lists.ts} +89 -46
  471. package/src/exporter/docx/{math.js → math.ts} +29 -9
  472. package/src/exporter/docx/{metadata.js → metadata.ts} +78 -42
  473. package/src/exporter/docx/{rels.js → rels.ts} +71 -50
  474. package/src/exporter/docx/{render.js → render.ts} +124 -87
  475. package/src/exporter/docx/{richtext.js → richtext.ts} +107 -84
  476. package/src/exporter/docx/{tables.js → tables.ts} +33 -23
  477. package/src/exporter/docx/{tools.js → tools.ts} +4 -3
  478. package/src/exporter/epub/{index.js → index.ts} +44 -15
  479. package/src/exporter/epub/{templates.js → templates.ts} +71 -7
  480. package/src/exporter/epub/tools.ts +102 -0
  481. package/src/exporter/html/{citations.js → citations.ts} +79 -31
  482. package/src/exporter/html/{convert.js → convert.ts} +118 -71
  483. package/src/exporter/html/{index.js → index.ts} +63 -29
  484. package/src/exporter/html/{templates.js → templates.ts} +22 -2
  485. package/src/exporter/html/{tools.js → tools.ts} +9 -6
  486. package/src/exporter/jats/bibliography.ts +199 -0
  487. package/src/exporter/jats/{citations.js → citations.ts} +56 -20
  488. package/src/exporter/jats/{convert.js → convert.ts} +72 -53
  489. package/src/exporter/jats/index.ts +132 -0
  490. package/src/exporter/jats/{templates.js → templates.ts} +19 -3
  491. package/src/exporter/jats/{text.js → text.ts} +8 -6
  492. package/src/exporter/latex/{convert.js → convert.ts} +160 -125
  493. package/src/exporter/latex/{escape_latex.js → escape_latex.ts} +1 -1
  494. package/src/exporter/latex/{index.js → index.ts} +27 -12
  495. package/src/exporter/latex/{readme.js → readme.ts} +2 -2
  496. package/src/exporter/native/copy.ts +231 -0
  497. package/src/exporter/native/file.ts +65 -0
  498. package/src/exporter/native/index.ts +4 -0
  499. package/src/exporter/native/revision.ts +76 -0
  500. package/src/exporter/native/{shrink.js → shrink.ts} +64 -29
  501. package/src/exporter/native/zip.ts +85 -0
  502. package/src/exporter/odt/{citations.js → citations.ts} +35 -15
  503. package/src/exporter/odt/{footnotes.js → footnotes.ts} +53 -30
  504. package/src/exporter/odt/images.ts +135 -0
  505. package/src/exporter/odt/{index.js → index.ts} +49 -27
  506. package/src/exporter/odt/{math.js → math.ts} +38 -9
  507. package/src/exporter/odt/{metadata.js → metadata.ts} +54 -29
  508. package/src/exporter/odt/{render.js → render.ts} +89 -60
  509. package/src/exporter/odt/{richtext.js → richtext.ts} +102 -72
  510. package/src/exporter/odt/{styles.js → styles.ts} +98 -66
  511. package/src/exporter/odt/{track.js → track.ts} +22 -6
  512. package/src/exporter/pandoc/{citations.js → citations.ts} +31 -15
  513. package/src/exporter/pandoc/{convert.js → convert.ts} +98 -79
  514. package/src/exporter/pandoc/{index.js → index.ts} +36 -13
  515. package/src/exporter/pandoc/{readme.js → readme.ts} +0 -1
  516. package/src/exporter/pandoc/{tools.js → tools.ts} +28 -5
  517. package/src/exporter/print/{index.js → index.ts} +38 -19
  518. package/src/exporter/tools/{doc_content.js → doc_content.ts} +34 -24
  519. package/src/exporter/tools/{file.js → file.ts} +1 -1
  520. package/src/exporter/tools/{json.js → json.ts} +30 -19
  521. package/src/exporter/tools/{svg.js → svg.ts} +9 -3
  522. package/src/exporter/tools/{xml.js → xml.ts} +187 -138
  523. package/src/exporter/tools/{xml_zip.js → xml_zip.ts} +19 -11
  524. package/src/exporter/tools/{zip.js → zip.ts} +35 -11
  525. package/src/exporter/tools/{zotero_csl.js → zotero_csl.ts} +35 -18
  526. package/src/global.d.ts +13 -0
  527. package/src/importer/citations.ts +116 -0
  528. package/src/importer/docx/{citations.js → citations.ts} +22 -37
  529. package/src/importer/docx/{convert.js → convert.ts} +176 -141
  530. package/src/importer/docx/{helpers.js → helpers.ts} +1 -1
  531. package/src/importer/docx/index.ts +124 -0
  532. package/src/importer/docx/{omml2mathml.js → omml2mathml.ts} +154 -176
  533. package/src/importer/docx/{parse.js → parse.ts} +103 -81
  534. package/src/importer/native/extract_template.ts +83 -0
  535. package/src/importer/native/file.ts +282 -0
  536. package/src/importer/native/get_images.ts +82 -0
  537. package/src/importer/native/importer.ts +244 -0
  538. package/src/importer/native/index.ts +6 -0
  539. package/src/importer/native/{update.js → update.ts} +13 -5
  540. package/src/importer/native/update_template.ts +32 -0
  541. package/src/importer/odt/{citations.js → citations.ts} +17 -29
  542. package/src/importer/odt/{convert.js → convert.ts} +261 -237
  543. package/src/importer/odt/index.ts +202 -0
  544. package/src/importer/pandoc/{convert.js → convert.ts} +116 -94
  545. package/src/importer/pandoc/{helpers.js → helpers.ts} +24 -12
  546. package/src/importer/pandoc/index.ts +171 -0
  547. package/src/importer/registry.ts +69 -0
  548. package/src/importer/{zip_analyzer.js → zip_analyzer.ts} +44 -18
  549. package/src/mathlive/{opf_includes.js → opf_includes.ts} +1 -1
  550. package/src/modules.d.ts +40 -0
  551. package/src/schema/common/{annotate.js → annotate.ts} +10 -8
  552. package/src/schema/common/{base.js → base.ts} +12 -10
  553. package/src/schema/common/{citation.js → citation.ts} +17 -8
  554. package/src/schema/common/{equation.js → equation.ts} +6 -4
  555. package/src/schema/common/{figure.js → figure.ts} +43 -23
  556. package/src/schema/common/{heading.js → heading.ts} +7 -5
  557. package/src/schema/common/{list.js → list.ts} +15 -13
  558. package/src/schema/common/{reference.js → reference.ts} +14 -12
  559. package/src/schema/common/{table.js → table.ts} +16 -14
  560. package/src/schema/common/track.ts +201 -0
  561. package/src/schema/const.ts +58 -0
  562. package/src/schema/{convert.js → convert.ts} +6 -2
  563. package/src/schema/document/{content.js → content.ts} +22 -20
  564. package/src/schema/document/{structure.js → structure.ts} +15 -9
  565. package/src/schema/{export.js → export.ts} +4 -2
  566. package/src/schema/{footnotes.js → footnotes.ts} +11 -8
  567. package/src/schema/{footnotes_convert.js → footnotes_convert.ts} +11 -8
  568. package/src/schema/i18n.ts +601 -0
  569. package/src/schema/mini_json.ts +60 -0
  570. package/src/schema/{text.js → text.ts} +6 -2
  571. package/src/types.ts +314 -0
  572. package/jest.config.js +0 -24
  573. package/src/exporter/docx/images.js +0 -101
  574. package/src/exporter/jats/bibliography.js +0 -183
  575. package/src/exporter/jats/index.js +0 -92
  576. package/src/exporter/odt/images.js +0 -115
  577. package/src/importer/citations.js +0 -129
  578. package/src/importer/native/get_images.js +0 -76
  579. /package/src/{index.js → index.ts} +0 -0
  580. /package/src/schema/common/{index.js → index.ts} +0 -0
  581. /package/src/schema/document/{index.js → index.ts} +0 -0
  582. /package/src/schema/{index.js → index.ts} +0 -0
@@ -0,0 +1,1070 @@
1
+ import { escapeText } from "fwtoolkit";
2
+ import { getCat } from "../../schema/i18n.js";
3
+ import { xmlDOM } from "../tools/xml.js";
4
+ import { createZoteroCitation } from "../tools/zotero_csl.js";
5
+ import { translateBlockType } from "./tools.js";
6
+ const TEXT_BLOCK_TYPES = [
7
+ "heading1",
8
+ "heading2",
9
+ "heading3",
10
+ "heading4",
11
+ "heading5",
12
+ "heading6",
13
+ "paragraph",
14
+ "code_block"
15
+ ];
16
+ const INLINE_TYPES = [
17
+ "citation",
18
+ "cross_reference",
19
+ "cslbib",
20
+ "cslblock",
21
+ "cslindent",
22
+ "cslinline",
23
+ "cslleftmargin",
24
+ "cslrightinline",
25
+ "equation",
26
+ "footnote",
27
+ "hard_break",
28
+ "image",
29
+ "text"
30
+ ];
31
+ /**
32
+ * Create Zotero citation field instruction for DOCX.
33
+ * @param references - Array of {id, prefix?, locator?} from citation node
34
+ * @param bibDB - Bibliography database
35
+ * @param formattedCitation - Pre-formatted citation text from citeproc
36
+ * @param citationId - Optional citation ID (generated if not provided)
37
+ * @returns Field instruction text
38
+ */
39
+ function createZoteroCitationField(references, bibDB, formattedCitation, citationId = null) {
40
+ const zoteroCitation = createZoteroCitation(references, bibDB, formattedCitation, citationId);
41
+ if (!zoteroCitation) {
42
+ return null;
43
+ }
44
+ const jsonStr = JSON.stringify(zoteroCitation);
45
+ return ` ADDIN ZOTERO_ITEM CSL_CITATION${jsonStr} `;
46
+ }
47
+ export class DOCXExporterRichtext {
48
+ doc;
49
+ settings;
50
+ lists;
51
+ footnotes;
52
+ math;
53
+ tables;
54
+ rels;
55
+ citations;
56
+ images;
57
+ comments;
58
+ commentRangeCounter;
59
+ changeCounter;
60
+ fnCounter; // footnotes 0 and 1 are occupied by separators by default.
61
+ bookmarkCounter;
62
+ categoryCounter; // counters for each type of figure (figure/table/photo)
63
+ fncategoryCounter;
64
+ docPrCount;
65
+ citationCounter; // Track which citation we're processing
66
+ constructor(doc, settings, lists, footnotes, math, tables, rels, citations, images) {
67
+ this.doc = doc;
68
+ this.settings = settings;
69
+ this.lists = lists;
70
+ this.footnotes = footnotes;
71
+ this.math = math;
72
+ this.tables = tables;
73
+ this.rels = rels;
74
+ this.citations = citations;
75
+ this.images = images;
76
+ this.comments = {};
77
+ this.commentRangeCounter = -1;
78
+ this.changeCounter = 0;
79
+ this.fnCounter = 1; // footnotes 0 and 1 are occupied by separators by default.
80
+ this.bookmarkCounter = -1;
81
+ this.categoryCounter = {}; // counters for each type of figure (figure/table/photo)
82
+ this.fncategoryCounter = {};
83
+ this.docPrCount = -1;
84
+ this.citationCounter = 0; // Track which citation we're processing
85
+ }
86
+ run(node, options = {}, nextNode = null) {
87
+ options.comments = this.findComments(node); // Data related to comments. We need to mark the first and last occurence of comment
88
+ return this.transformRichtext(node, options, nextNode);
89
+ }
90
+ findComments(node, comments = {}) {
91
+ if (node.marks) {
92
+ node.marks
93
+ .filter((mark) => mark.type === "comment")
94
+ .forEach((comment) => {
95
+ if (!this.doc.comments[comment.attrs.id]) {
96
+ return;
97
+ }
98
+ if (!comments[comment.attrs.id]) {
99
+ comments[comment.attrs.id] = {
100
+ start: node,
101
+ end: node,
102
+ content: this.doc.comments[comment.attrs.id]
103
+ };
104
+ }
105
+ else {
106
+ comments[comment.attrs.id]["end"] = node;
107
+ }
108
+ });
109
+ }
110
+ if (node.content) {
111
+ for (let i = 0; i < node.content.length; i++) {
112
+ this.findComments(node.content[i], comments);
113
+ }
114
+ }
115
+ return comments;
116
+ }
117
+ transformRichtext(node, options = {}, nextNode = null) {
118
+ let start = "", content = "", end = "";
119
+ if (node.marks && options.comments) {
120
+ // Footnotes don't allow comments in DOCX
121
+ node.marks
122
+ .filter((mark) => mark.type === "comment")
123
+ .forEach((comment) => {
124
+ const commentData = options.comments[comment.attrs.id];
125
+ if (!commentData) {
126
+ return;
127
+ }
128
+ if (commentData.start === node) {
129
+ let commentId = this.comments[comment.attrs.id];
130
+ start += `<w:commentRangeStart w:id="${commentId}"/>`;
131
+ commentData.content.answers?.forEach((_answer) => (start += `<w:commentRangeStart w:id="${++commentId}"/>`));
132
+ }
133
+ if (commentData.end === node) {
134
+ let commentId = this.comments[comment.attrs.id];
135
+ end =
136
+ `<w:commentRangeEnd w:id="${commentId}"/><w:r><w:commentReference w:id="${commentId}"/></w:r>${(commentData.content.answers || [])
137
+ .map((_answer) => `<w:commentRangeEnd w:id="${++commentId}"/><w:r><w:commentReference w:id="${commentId}"/></w:r>`)
138
+ .join("")}` + end;
139
+ }
140
+ });
141
+ }
142
+ const inlineType = INLINE_TYPES.includes(node.type);
143
+ let inlineDelete, nextBlockDelete, nextBlockInsert, blockChange, blockDelete, blockInsert;
144
+ if (inlineType) {
145
+ const inlineInsert = inlineType &&
146
+ (node.marks?.find((mark) => mark.type === "insertion" &&
147
+ mark.attrs.approved === false)?.attrs ||
148
+ options.blockInsert);
149
+ inlineDelete =
150
+ inlineType &&
151
+ (node.marks?.find((mark) => mark.type === "deletion")
152
+ ?.attrs ||
153
+ options.blockDelete);
154
+ if (inlineInsert &&
155
+ inlineDelete &&
156
+ inlineInsert.username === inlineDelete.username) {
157
+ // In DOCX, the same user cannot both have a pending insertion and deletion of the same inline content. We remove it.
158
+ return "";
159
+ }
160
+ else {
161
+ if (inlineInsert) {
162
+ start += `<w:ins w:id="${++this.changeCounter}" w:author="${escapeText(inlineInsert.username)}" w:date="${new Date(inlineInsert.date * 60000).toISOString().split(".")[0]}Z">`;
163
+ end = "</w:ins>" + end;
164
+ }
165
+ if (inlineDelete) {
166
+ start += `<w:del w:id="${++this.changeCounter}" w:author="${escapeText(inlineDelete.username)}" w:date="${new Date(inlineDelete.date * 60000).toISOString().split(".")[0]}Z">`;
167
+ end = "</w:del>" + end;
168
+ }
169
+ }
170
+ }
171
+ else if (TEXT_BLOCK_TYPES.includes(node.type)) {
172
+ blockChange = node.attrs?.track?.find((mark) => mark.type === "block_change");
173
+ if (nextNode && TEXT_BLOCK_TYPES.includes(nextNode.type)) {
174
+ nextBlockDelete = nextNode.attrs?.track?.find((mark) => mark.type === "deletion");
175
+ nextBlockInsert = nextNode.attrs?.track?.find((mark) => mark.type === "insertion");
176
+ }
177
+ }
178
+ else {
179
+ blockDelete = node.attrs?.track?.find((mark) => mark.type === "deletion");
180
+ if (blockDelete) {
181
+ options = Object.assign({}, options);
182
+ options.blockDelete = blockDelete;
183
+ }
184
+ blockInsert = node.attrs?.track?.find((mark) => mark.type === "insertion");
185
+ if (blockInsert) {
186
+ options = Object.assign({}, options);
187
+ options.blockInsert = blockInsert;
188
+ }
189
+ }
190
+ switch (node.type) {
191
+ case "doc":
192
+ // We handle the contents directly
193
+ break;
194
+ case "paragraph":
195
+ if (!options.section) {
196
+ options.section = "Normal";
197
+ }
198
+ // This should really be something like
199
+ // '<w:p w:rsidR="A437D321" w:rsidRDefault="2B935ADC">'
200
+ // See: https://blogs.msdn.microsoft.com/brian_jones/2006/12/11/whats-up-with-all-those-rsids/
201
+ // But tests with Word 2016/LibreOffice seem to indicate that it
202
+ // doesn't care if the attributes are missing.
203
+ // We may need to add them later, if it turns out this is a problem
204
+ // for other versions of Word. In that case we should also add
205
+ // it to settings.xml as described in above link.
206
+ if (options.section === "Normal" &&
207
+ !options.list_type &&
208
+ !node.content?.length) {
209
+ start += "<w:p/>";
210
+ }
211
+ else {
212
+ start += `
213
+ <w:p${options.paragraphId ? ` w14:paraId="${options.paragraphId}"` : ""}>
214
+ <w:pPr><w:pStyle w:val="${options.section}"/>`;
215
+ if (options.list_type) {
216
+ start += `<w:numPr><w:ilvl w:val="${options.list_depth}"/>`;
217
+ start += `<w:numId w:val="${options.list_type}"/></w:numPr>`;
218
+ }
219
+ else {
220
+ start += `
221
+ <w:rPr>
222
+ ${nextBlockInsert
223
+ ? `<w:ins w:id="${++this.changeCounter}" w:author="${escapeText(nextBlockInsert.username)}" w:date="${new Date(nextBlockInsert.date * 60000).toISOString().split(".")[0]}Z"/>`
224
+ : ""}
225
+ ${nextBlockDelete
226
+ ? `<w:del w:id="${++this.changeCounter}" w:author="${escapeText(nextBlockDelete.username)}" w:date="${new Date(nextBlockDelete.date * 60000).toISOString().split(".")[0]}Z"/>`
227
+ : ""}
228
+ </w:rPr>`;
229
+ }
230
+ if (blockChange) {
231
+ start += `
232
+ <w:pPrChange w:id="${++this.changeCounter}" w:author="${escapeText(blockChange.username)}" w:date="${new Date(blockChange.date * 60000).toISOString().split(".")[0]}Z">
233
+ <w:pPr>
234
+ <w:pStyle w:val="${translateBlockType(blockChange.before.type)}"/>
235
+ </w:pPr>
236
+ </w:pPrChange>`;
237
+ }
238
+ start += "</w:pPr>";
239
+ end = "</w:p>" + end;
240
+ if (!node.content?.length) {
241
+ start += "<w:r><w:rPr></w:rPr></w:r>";
242
+ }
243
+ }
244
+ if (options.commentReference) {
245
+ end =
246
+ '<w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:annotationRef/></w:r>' +
247
+ end;
248
+ options = Object.assign({}, options);
249
+ options.commentReference = false;
250
+ }
251
+ break;
252
+ case "bibliography_heading":
253
+ start += `
254
+ <w:p>
255
+ <w:pPr>
256
+ <w:pStyle w:val="BibliographyHeading"/>
257
+ <w:rPr></w:rPr>
258
+ </w:pPr>`;
259
+ end = "</w:p>" + end;
260
+ break;
261
+ case "heading1":
262
+ case "heading2":
263
+ case "heading3":
264
+ case "heading4":
265
+ case "heading5":
266
+ case "heading6":
267
+ start += `
268
+ <w:p>
269
+ <w:pPr>
270
+ <w:pStyle w:val="${translateBlockType(node.type)}"/>
271
+ <w:rPr>
272
+ ${nextBlockInsert
273
+ ? `<w:ins w:id="${++this.changeCounter}" w:author="${escapeText(nextBlockInsert.username)}" w:date="${new Date(nextBlockInsert.date * 60000).toISOString().split(".")[0]}Z"/>`
274
+ : ""}
275
+ ${nextBlockDelete
276
+ ? `<w:del w:id="${++this.changeCounter}" w:author="${escapeText(nextBlockDelete.username)}" w:date="${new Date(nextBlockDelete.date * 60000).toISOString().split(".")[0]}Z"/>`
277
+ : ""}
278
+ </w:rPr>
279
+ ${blockChange
280
+ ? blockChange.before.type === "paragraph"
281
+ ? `<w:pPrChange w:id="${++this.changeCounter}" w:author="${escapeText(blockChange.username)}" w:date="${new Date(blockChange.date * 60000).toISOString().split(".")[0]}Z"/>`
282
+ : `<w:pPrChange w:id="${++this.changeCounter}" w:author="${escapeText(blockChange.username)}" w:date="${new Date(blockChange.date * 60000).toISOString().split(".")[0]}Z">
283
+ <w:pPr>
284
+ <w:pStyle w:val="${translateBlockType(blockChange.before.type)}"/>
285
+ </w:pPr>
286
+ </w:pPrChange>`
287
+ : ""}
288
+ </w:pPr>
289
+ <w:bookmarkStart w:name="${node.attrs.id}" w:id="${++this.bookmarkCounter}"/>
290
+ <w:bookmarkEnd w:id="${this.bookmarkCounter}"/>`;
291
+ end = "</w:p>" + end;
292
+ break;
293
+ case "blockquote":
294
+ // This is imperfect, but Word doesn't seem to provide section/quotation nesting
295
+ // Also, track information on wrapping into blockquote is not exported.
296
+ options = Object.assign({}, options);
297
+ options.section = "Quote";
298
+ break;
299
+ case "code_block": {
300
+ // Handle code blocks with category support
301
+ const category = node.attrs.category;
302
+ let categoryLabel = "";
303
+ if (category && node.attrs.id) {
304
+ const categoryCounter = options.inFootnote
305
+ ? this.fncategoryCounter
306
+ : this.categoryCounter;
307
+ if (!categoryCounter[category]) {
308
+ categoryCounter[category] = 1;
309
+ }
310
+ const catCount = categoryCounter[category]++;
311
+ const categoryLabelText = getCat(category, this.settings.language);
312
+ const title = node.attrs.title
313
+ ? `: ${escapeText(node.attrs.title)}`
314
+ : "";
315
+ // Create category label paragraph with SEQ field for numbering
316
+ categoryLabel = `
317
+ <w:p>
318
+ <w:pPr><w:pStyle w:val="Caption"/></w:pPr>
319
+ <w:bookmarkStart w:name="${node.attrs.id}" w:id="${++this.bookmarkCounter}"/>
320
+ <w:r>
321
+ <w:t xml:space="preserve">${categoryLabelText} </w:t>
322
+ </w:r>
323
+ <w:fldSimple w:instr=" SEQ ${category} \\* ARABIC ">
324
+ <w:r>
325
+ <w:t>${catCount}${options.inFootnote ? "A" : ""}</w:t>
326
+ </w:r>
327
+ </w:fldSimple>
328
+ <w:r>
329
+ <w:t xml:space="preserve">${title}</w:t>
330
+ </w:r>
331
+ <w:bookmarkEnd w:id="${this.bookmarkCounter}"/>
332
+ </w:p>`;
333
+ }
334
+ if (!node.content?.length) {
335
+ start += categoryLabel + "<w:p/>";
336
+ }
337
+ else {
338
+ options = Object.assign({}, options);
339
+ options.section = "Code";
340
+ start +=
341
+ categoryLabel +
342
+ `
343
+ <w:p${options.paragraphId ? ` w14:paraId="${options.paragraphId}"` : ""}>
344
+ <w:pPr><w:pStyle w:val="${options.section}"/>`;
345
+ if (options.list_type) {
346
+ start += `<w:numPr><w:ilvl w:val="${options.list_depth}"/>`;
347
+ start += `<w:numId w:val="${options.list_type}"/></w:numPr>`;
348
+ }
349
+ else {
350
+ start += `
351
+ <w:rPr>
352
+ ${nextBlockInsert
353
+ ? `<w:ins w:id="${++this.changeCounter}" w:author="${escapeText(nextBlockInsert.username)}" w:date="${new Date(nextBlockInsert.date * 60000).toISOString().split(".")[0]}Z"/>`
354
+ : ""}
355
+ ${nextBlockDelete
356
+ ? `<w:del w:id="${++this.changeCounter}" w:author="${escapeText(nextBlockDelete.username)}" w:date="${new Date(nextBlockDelete.date * 60000).toISOString().split(".")[0]}Z"/>`
357
+ : ""}
358
+ </w:rPr>`;
359
+ }
360
+ if (blockChange) {
361
+ start += `
362
+ <w:pPrChange w:id="${++this.changeCounter}" w:author="${escapeText(blockChange.username)}" w:date="${new Date(blockChange.date * 60000).toISOString().split(".")[0]}Z">
363
+ <w:pPr>
364
+ <w:pStyle w:val="${translateBlockType(blockChange.before.type)}"/>
365
+ </w:pPr>
366
+ </w:pPrChange>`;
367
+ }
368
+ start += "</w:pPr>";
369
+ end = "</w:p>" + end;
370
+ if (!node.content?.length) {
371
+ start += "<w:r><w:rPr></w:rPr></w:r>";
372
+ }
373
+ }
374
+ if (options.commentReference) {
375
+ end =
376
+ '<w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:annotationRef/></w:r>' +
377
+ end;
378
+ options.commentReference = false;
379
+ }
380
+ break;
381
+ }
382
+ case "ordered_list": {
383
+ options = Object.assign({}, options);
384
+ options.section = "ListParagraph";
385
+ if (options.list_depth === undefined) {
386
+ options.list_depth = 0;
387
+ }
388
+ else {
389
+ options.list_depth += 1;
390
+ }
391
+ options.list_type = this.lists.getNumberedType();
392
+ break;
393
+ }
394
+ case "bullet_list":
395
+ options = Object.assign({}, options);
396
+ options.section = "ListParagraph";
397
+ options.list_type = this.lists.getBulletType();
398
+ if (options.list_depth === undefined) {
399
+ options.list_depth = 0;
400
+ }
401
+ else {
402
+ options.list_depth += 1;
403
+ }
404
+ break;
405
+ case "list_item":
406
+ // Word seems to lack complex nesting options. The styling is applied
407
+ // to child paragraphs. This will deliver correct results in most
408
+ // cases.
409
+ break;
410
+ case "footnotecontainer":
411
+ options = Object.assign({}, options);
412
+ options.section = "Footnote";
413
+ options.inFootnote = true;
414
+ start += `<w:footnote w:id="${++this.fnCounter}">`;
415
+ end = "</w:footnote>" + end;
416
+ options.footnoteRefMissing = true;
417
+ break;
418
+ case "footnote":
419
+ content += `
420
+ <w:r>
421
+ <w:rPr>
422
+ <w:rStyle w:val="FootnoteAnchor"/>
423
+ </w:rPr>
424
+ <w:footnoteReference w:id="${++this.fnCounter}"/>
425
+ </w:r>`;
426
+ break;
427
+ case "text": {
428
+ let hyperlink, anchor, em, strong, underline, smallcaps, sup, sub, code, formatChange;
429
+ // Check for hyperlink, anchor, bold/strong and italic/em
430
+ if (node.marks) {
431
+ hyperlink = node.marks.find((mark) => mark.type === "link");
432
+ anchor = node.marks.find((mark) => mark.type === "anchor");
433
+ em = node.marks.find((mark) => mark.type === "em");
434
+ strong = node.marks.find((mark) => mark.type === "strong");
435
+ underline = node.marks.find((mark) => mark.type === "underline");
436
+ smallcaps = node.marks.find((mark) => mark.type === "smallcaps");
437
+ sup = node.marks.find((mark) => mark.type === "sup");
438
+ sub = node.marks.find((mark) => mark.type === "sub");
439
+ code = node.marks.find((mark) => mark.type === "code");
440
+ formatChange = node.marks.find((mark) => mark.type === "format_change");
441
+ }
442
+ if (anchor) {
443
+ start += `<w:bookmarkStart w:name="${anchor.attrs.id}" w:id="${++this.bookmarkCounter}"/><w:bookmarkEnd w:id="${this.bookmarkCounter}"/>`;
444
+ end =
445
+ `<w:bookmarkStart w:name="${anchor.attrs.id}" w:id="${++this.bookmarkCounter}"/><w:bookmarkEnd w:id="${this.bookmarkCounter}"/>` +
446
+ end;
447
+ }
448
+ if (hyperlink) {
449
+ const href = hyperlink.attrs.href;
450
+ if (href[0] === "#") {
451
+ // Internal link
452
+ start += `<w:hyperlink w:anchor="${href.slice(1)}">`;
453
+ }
454
+ else {
455
+ // External link
456
+ const refId = this.rels.addLinkRel(href);
457
+ start += `<w:hyperlink r:id="rId${refId}">`;
458
+ }
459
+ start += "<w:r>";
460
+ end = "</w:r></w:hyperlink>" + end;
461
+ }
462
+ else {
463
+ start += "<w:r>";
464
+ end = "</w:r>" + end;
465
+ }
466
+ start += "<w:rPr>";
467
+ if (hyperlink ||
468
+ em ||
469
+ strong ||
470
+ underline ||
471
+ smallcaps ||
472
+ sup ||
473
+ sub ||
474
+ code) {
475
+ if (hyperlink) {
476
+ this.rels.addLinkStyle();
477
+ start += `<w:rStyle w:val="${this.rels.hyperLinkStyle}"/>`;
478
+ }
479
+ if (em) {
480
+ start += "<w:i/><w:iCs/>";
481
+ }
482
+ if (strong) {
483
+ start += "<w:b/><w:bCs/>";
484
+ }
485
+ if (underline) {
486
+ start += '<w:u w:val="single"/>';
487
+ }
488
+ if (smallcaps) {
489
+ start += "<w:smallCaps/>";
490
+ }
491
+ if (sup) {
492
+ start += '<w:vertAlign w:val="superscript"/>';
493
+ }
494
+ else if (sub) {
495
+ start += '<w:vertAlign w:val="subscript"/>';
496
+ }
497
+ if (code) {
498
+ start +=
499
+ '<w:rFonts w:ascii="Courier New" w:hAnsi="Courier New"/>';
500
+ }
501
+ }
502
+ if (formatChange) {
503
+ const beforeStyle = formatChange.attrs.before;
504
+ start += `<w:rPrChange w:id="${++this.changeCounter}" w:author="${escapeText(formatChange.attrs.username)}" w:date="${new Date(formatChange.attrs.date * 60000).toISOString().split(".")[0]}Z"><w:rPr>`;
505
+ if (beforeStyle.includes("em")) {
506
+ start += "<w:i/><w:iCs/>";
507
+ }
508
+ if (beforeStyle.includes("strong")) {
509
+ start += "<w:b/><w:bCs/>";
510
+ }
511
+ if (beforeStyle.includes("underline")) {
512
+ start += '<w:u w:val="single"/>';
513
+ }
514
+ start += "</w:rPr></w:rPrChange>";
515
+ }
516
+ start += "</w:rPr>";
517
+ if (options.footnoteRefMissing) {
518
+ start += "<w:footnoteRef /><w:tab />";
519
+ options.footnoteRefMissing = false;
520
+ }
521
+ let textAttr = "";
522
+ if (node.text[0] === " " ||
523
+ node.text[node.text.length - 1] === " ") {
524
+ textAttr += ' xml:space="preserve"';
525
+ }
526
+ if (inlineDelete) {
527
+ start += `<w:delText${textAttr}>`;
528
+ end = "</w:delText>" + end;
529
+ }
530
+ else {
531
+ start += `<w:t${textAttr}>`;
532
+ end = "</w:t>" + end;
533
+ }
534
+ content += escapeText(node.text);
535
+ break;
536
+ }
537
+ case "cross_reference": {
538
+ const title = node.attrs.title;
539
+ const id = node.attrs.id;
540
+ let marks = node.marks.slice();
541
+ if (title && id) {
542
+ const hyperlink = {
543
+ type: "link",
544
+ attrs: { href: `#${id}`, title }
545
+ };
546
+ marks = marks.filter((mark) => mark.type !== "link");
547
+ marks.push(hyperlink);
548
+ }
549
+ content += this.transformRichtext({
550
+ type: "text",
551
+ text: title || "MISSING TARGET",
552
+ marks
553
+ }, options, nextNode);
554
+ break;
555
+ }
556
+ case "citation": {
557
+ // We take the first citation from the stack and remove it.
558
+ const cit = this.citations.pmCits.shift();
559
+ // Get citation info and formatted text for Zotero export
560
+ const citInfo = this.citations.citInfos[this.citationCounter];
561
+ const formattedText = this.citations.citationTexts[this.citationCounter];
562
+ this.citationCounter++;
563
+ // Create Zotero citation data on-the-fly
564
+ const fieldInstruction = citInfo && formattedText
565
+ ? createZoteroCitationField(citInfo.references, this.citations.bibDB, formattedText)
566
+ : null;
567
+ if (options.citationType === "note" && !options.inFootnote) {
568
+ // If the citations are in notes (footnotes), we need to
569
+ // put the content of this citation in a footnote.
570
+ // We then add the footnote to the footnote file and
571
+ // adjust the ids of all subsequent footnotes to be one higher
572
+ // than what they were until now.
573
+ content += `
574
+ <w:r>
575
+ <w:rPr>
576
+ <w:rStyle w:val="FootnoteAnchor"/>
577
+ </w:rPr>
578
+ <w:footnoteReference w:id="${this.fnCounter}"/>
579
+ </w:r>`;
580
+ // Create footnote with Zotero field if available
581
+ let fnXML;
582
+ if (fieldInstruction && formattedText) {
583
+ fnXML = `<w:footnote w:id="${this.fnCounter}">
584
+ <w:p>
585
+ <w:r>
586
+ <w:fldChar w:fldCharType="begin"/>
587
+ </w:r>
588
+ <w:r>
589
+ <w:instrText xml:space="preserve">${fieldInstruction}</w:instrText>
590
+ </w:r>
591
+ <w:r>
592
+ <w:fldChar w:fldCharType="separate"/>
593
+ </w:r>
594
+ <w:r>
595
+ <w:t>${formattedText}</w:t>
596
+ </w:r>
597
+ <w:r>
598
+ <w:fldChar w:fldCharType="end"/>
599
+ </w:r>
600
+ </w:p>
601
+ </w:footnote>`;
602
+ }
603
+ else {
604
+ const fnContents = this.transformRichtext(cit, {
605
+ footnoteRefMissing: true,
606
+ section: "Footnote"
607
+ });
608
+ fnXML = `<w:footnote w:id="${this.fnCounter}">${fnContents}</w:footnote>`;
609
+ }
610
+ const xml = this.footnotes.xml;
611
+ const lastId = this.fnCounter - 1;
612
+ const footnotes = xml.queryAll("w:footnote");
613
+ footnotes.forEach((footnote) => {
614
+ const id = Number.parseInt(String(footnote.getAttribute("w:id")));
615
+ if (id >= this.fnCounter) {
616
+ footnote.setAttribute("w:id", id + 1);
617
+ }
618
+ if (id === lastId) {
619
+ footnote.parentElement.insertBefore(xmlDOM(fnXML), footnote.nextSibling);
620
+ }
621
+ });
622
+ this.fnCounter++;
623
+ }
624
+ else {
625
+ // In-text citation - create Zotero field if available
626
+ if (fieldInstruction && formattedText) {
627
+ content += `
628
+ <w:r>
629
+ <w:fldChar w:fldCharType="begin"/>
630
+ </w:r>
631
+ <w:r>
632
+ <w:instrText xml:space="preserve">${fieldInstruction}</w:instrText>
633
+ </w:r>
634
+ <w:r>
635
+ <w:fldChar w:fldCharType="separate"/>
636
+ </w:r>
637
+ <w:r>
638
+ <w:t>${formattedText}</w:t>
639
+ </w:r>
640
+ <w:r>
641
+ <w:fldChar w:fldCharType="end"/>
642
+ </w:r>`;
643
+ }
644
+ else {
645
+ // Fallback to formatted text only
646
+ for (let i = 0; i < cit.content.length; i++) {
647
+ content += this.transformRichtext(cit.content[i], options, cit.content[i + 1]);
648
+ }
649
+ }
650
+ }
651
+ break;
652
+ }
653
+ case "figure": {
654
+ const category = node.attrs.category;
655
+ let caption = node.attrs.caption
656
+ ? node.content.find((node) => node.type === "figure_caption")
657
+ ?.content || []
658
+ : [];
659
+ let catCountXML = "";
660
+ if (category !== "none") {
661
+ const categoryCounter = options.inFootnote
662
+ ? this.fncategoryCounter
663
+ : this.categoryCounter;
664
+ if (!categoryCounter[category]) {
665
+ categoryCounter[category] = 1;
666
+ }
667
+ catCountXML = `<w:r>
668
+ <w:t xml:space="preserve">${getCat(category, this.settings.language)} </w:t>
669
+ </w:r>
670
+ <w:r>
671
+ <w:rPr></w:rPr>
672
+ <w:fldChar w:fldCharType="begin"></w:fldChar>
673
+ </w:r>
674
+ <w:r>
675
+ <w:rPr></w:rPr>
676
+ <w:instrText> SEQ ${category} \\* ARABIC </w:instrText>
677
+ </w:r>
678
+ <w:r>
679
+ <w:rPr></w:rPr>
680
+ <w:fldChar w:fldCharType="separate" />
681
+ </w:r>
682
+ <w:r>
683
+ <w:rPr></w:rPr>
684
+ <w:t>${categoryCounter[category]++}${options.inFootnote ? "A" : ""}</w:t>
685
+ </w:r>
686
+ <w:r>
687
+ <w:rPr></w:rPr>
688
+ <w:fldChar w:fldCharType="end" />
689
+ </w:r>`;
690
+ if (caption.length) {
691
+ caption = [{ type: "text", text: ": " }].concat(caption);
692
+ }
693
+ }
694
+ let cx, cy;
695
+ const image = node.content.find((node) => node.type === "image")?.attrs
696
+ .image || false;
697
+ if (image !== false) {
698
+ const imageEntry = this.images.images[image];
699
+ cx = imageEntry.width * 9525; // width in EMU
700
+ cy = imageEntry.height * 9525; // height in EMU
701
+ const imgTitle = imageEntry.title;
702
+ // Shrink image if too large for paper.
703
+ if (options.dimensions) {
704
+ let width = options.dimensions.width;
705
+ if (options.tableSideMargins) {
706
+ width = width - options.tableSideMargins;
707
+ }
708
+ width =
709
+ (width * Number.parseInt(node.attrs.width)) / 100;
710
+ if (cx > width) {
711
+ const rel = cy / cx;
712
+ cx = width;
713
+ cy = cx * rel;
714
+ }
715
+ if (cy > options.dimensions.height) {
716
+ const rel = cx / cy;
717
+ cy = options.dimensions.height;
718
+ cx = cy * rel;
719
+ }
720
+ }
721
+ cy = Math.round(cy);
722
+ cx = Math.round(cx);
723
+ const rId = imageEntry.id;
724
+ content += `<w:r>
725
+ <w:rPr></w:rPr>
726
+ <w:drawing>
727
+ <wp:inline distT="0" distB="0" distL="0" distR="0">
728
+ <wp:extent cx="${cx}" cy="${cy}"/>
729
+ <wp:docPr id="${++this.docPrCount}" name="Picture${this.docPrCount}" descr=""/>
730
+ <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
731
+ <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
732
+ <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
733
+ <pic:nvPicPr>
734
+ <pic:cNvPr id="0" name="${imgTitle}" descr=""/>
735
+ <pic:cNvPicPr>
736
+ <a:picLocks noChangeAspect="1" noChangeArrowheads="1"/>
737
+ </pic:cNvPicPr>
738
+ </pic:nvPicPr>
739
+ <pic:blipFill>
740
+ <a:blip r:embed="rId${rId}"/>
741
+ <a:stretch>
742
+ <a:fillRect/>
743
+ </a:stretch>
744
+ </pic:blipFill>
745
+ <pic:spPr bwMode="auto">
746
+ <a:xfrm>
747
+ <a:off x="0" y="0"/>
748
+ <a:ext cx="${cx}" cy="${cy}"/>
749
+ </a:xfrm>
750
+ <a:prstGeom prst="rect">
751
+ <a:avLst/>
752
+ </a:prstGeom>
753
+ <a:noFill/>
754
+ <a:ln w="9525">
755
+ <a:noFill/>
756
+ <a:miter lim="800000"/>
757
+ <a:headEnd/>
758
+ <a:tailEnd/>
759
+ </a:ln>
760
+ </pic:spPr>
761
+ </pic:pic>
762
+ </a:graphicData>
763
+ </a:graphic>
764
+ </wp:inline>
765
+ </w:drawing>
766
+ </w:r>`;
767
+ }
768
+ else {
769
+ cx = 9525 * 100; // We pick a random size of 100x100. We hope this will fit the formula
770
+ cy = 9525 * 100;
771
+ const latex = node.content.find((node) => node.type === "figure_equation")?.attrs.equation || "";
772
+ content += this.math.getOmml(latex);
773
+ }
774
+ const captionSpace = !!(catCountXML.length || caption.length);
775
+ if (node.attrs.aligned === "center") {
776
+ start += `
777
+ <w:p>
778
+ <w:pPr>
779
+ <w:jc w:val="center"/>
780
+ </w:pPr>`;
781
+ content =
782
+ `<w:bookmarkStart w:name="${node.attrs.id}" w:id="${++this.bookmarkCounter}"/><w:bookmarkEnd w:id="${this.bookmarkCounter}"/>` +
783
+ content;
784
+ end =
785
+ `
786
+ </w:p>
787
+ ${captionSpace
788
+ ? `<w:p>
789
+ <w:pPr><w:pStyle w:val="Caption"/><w:rPr></w:rPr></w:pPr>
790
+ ${catCountXML}
791
+ ${caption.map((node, i) => this.transformRichtext(node, options, caption[i + 1])).join("")}
792
+ </w:p>`
793
+ : ""}` + end;
794
+ }
795
+ else {
796
+ start += `
797
+ <w:p>
798
+ <w:pPr>
799
+ <w:jc w:val="center"/>
800
+ </w:pPr>
801
+ <w:r>
802
+ <w:rPr></w:rPr>
803
+ <w:drawing>
804
+ <wp:anchor behindDoc="0" distT="95250" distB="95250" distL="95250" distR="95250" simplePos="0" locked="0" layoutInCell="1" allowOverlap="0" relativeHeight="2">
805
+ <wp:simplePos x="0" y="0" />
806
+ <wp:positionH relativeFrom="column">
807
+ <wp:align>${node.attrs.aligned}</wp:align>
808
+ </wp:positionH>
809
+ <wp:positionV relativeFrom="paragraph">
810
+ <wp:posOffset>0</wp:posOffset>
811
+ </wp:positionV>
812
+ <wp:extent cx="${cx}" cy="${captionSpace ? cy + 350520 : cy}" />
813
+ <wp:effectExtent l="0" t="0" r="0" b="0" />
814
+ <wp:wrapSquare wrapText="largest" />
815
+ <wp:docPr id="${++this.docPrCount}" name="Frame${this.docPrCount}" />
816
+ <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
817
+ <a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
818
+ <wps:wsp>
819
+ <wps:cNvSpPr txBox="1" />
820
+ <wps:spPr>
821
+ <a:xfrm>
822
+ <a:off x="0" y="0" />
823
+ <a:ext cx="${cx}" cy="${captionSpace ? cy + 350520 : cy}" />
824
+ </a:xfrm>
825
+ <a:prstGeom prst="rect" />
826
+ </wps:spPr>
827
+ <wps:txbx>
828
+ <w:txbxContent>
829
+ <w:p>
830
+ <w:pPr>
831
+ <w:pStyle w:val="Caption" />
832
+ <w:spacing w:before="20" w:after="220" />
833
+ <w:rPr></w:rPr>
834
+ </w:pPr>`;
835
+ content =
836
+ `<w:bookmarkStart w:name="${node.attrs.id}" w:id="${++this.bookmarkCounter}"/><w:bookmarkEnd w:id="${this.bookmarkCounter}"/>` +
837
+ content;
838
+ end =
839
+ `
840
+ ${catCountXML}
841
+ ${caption.map((node, i) => this.transformRichtext(node, options, caption[i + 1])).join("")}
842
+ </w:p>
843
+ </w:txbxContent>
844
+ </wps:txbx>
845
+ <wps:bodyPr anchor="t" lIns="0" tIns="0" rIns="0" bIns="0">
846
+ <a:noAutofit />
847
+ </wps:bodyPr>
848
+ </wps:wsp>
849
+ </a:graphicData>
850
+ </a:graphic>
851
+ <wp14:sizeRelH relativeFrom="margin">
852
+ <wp14:pctWidth>${node.attrs.width}000</wp14:pctWidth>
853
+ </wp14:sizeRelH>
854
+ </wp:anchor>
855
+ </w:drawing>
856
+ </w:r>
857
+ </w:p>` + end;
858
+ }
859
+ if (blockInsert) {
860
+ start += `<w:ins w:id="${++this.changeCounter}" w:author="${escapeText(blockInsert.username)}" w:date="${new Date(blockInsert.date * 60000).toISOString().split(".")[0]}Z">`;
861
+ end = "</w:ins>" + end;
862
+ }
863
+ if (blockDelete) {
864
+ start += `<w:del w:id="${++this.changeCounter}" w:author="${escapeText(blockDelete.username)}" w:date="${new Date(blockDelete.date * 60000).toISOString().split(".")[0]}Z">`;
865
+ end = "</w:del>" + end;
866
+ }
867
+ break;
868
+ }
869
+ case "figure_caption":
870
+ // We are already dealing with this in the figure. Prevent content from being added a second time.
871
+ return "";
872
+ case "figure_equation":
873
+ // We are already dealing with this in the figure.
874
+ break;
875
+ case "image":
876
+ // We are already dealing with this in the figure.
877
+ break;
878
+ case "table": {
879
+ const category = node.attrs.category;
880
+ let caption = node.attrs.caption
881
+ ? node.content[0].content || []
882
+ : [];
883
+ let catCountXML = "";
884
+ if (category !== "none") {
885
+ const categoryCounter = options.inFootnote
886
+ ? this.fncategoryCounter
887
+ : this.categoryCounter;
888
+ if (!categoryCounter[category]) {
889
+ categoryCounter[category] = 1;
890
+ }
891
+ catCountXML = `<w:r>
892
+ <w:t xml:space="preserve">${getCat(category, this.settings.language)} </w:t>
893
+ </w:r>
894
+ <w:r>
895
+ <w:rPr></w:rPr>
896
+ <w:fldChar w:fldCharType="begin"></w:fldChar>
897
+ </w:r>
898
+ <w:r>
899
+ <w:rPr></w:rPr>
900
+ <w:instrText> SEQ ${category} \\* ARABIC </w:instrText>
901
+ </w:r>
902
+ <w:r>
903
+ <w:rPr></w:rPr>
904
+ <w:fldChar w:fldCharType="separate" />
905
+ </w:r>
906
+ <w:r>
907
+ <w:rPr></w:rPr>
908
+ <w:t>${categoryCounter[category]++}${options.inFootnote ? "A" : ""}</w:t>
909
+ </w:r>
910
+ <w:r>
911
+ <w:rPr></w:rPr>
912
+ <w:fldChar w:fldCharType="end" />
913
+ </w:r>`;
914
+ if (caption.length) {
915
+ caption = [{ type: "text", text: ": " }].concat(caption);
916
+ }
917
+ }
918
+ const captionSpace = !!(catCountXML.length || caption.length);
919
+ if (captionSpace) {
920
+ start += `
921
+ <w:p>
922
+ <w:pPr>
923
+ <w:pStyle w:val="Caption"/>
924
+ <w:keepNext/>
925
+ </w:pPr>
926
+ <w:bookmarkStart w:name="${node.attrs.id}" w:id="${++this.bookmarkCounter}"/>
927
+ <w:bookmarkEnd w:id="${this.bookmarkCounter}"/>
928
+ ${catCountXML}
929
+ ${caption.map((node, i) => this.transformRichtext(node, options, caption[i + 1])).join("")}
930
+ </w:p>`;
931
+ }
932
+ this.tables.addTableGridStyle();
933
+ start += `
934
+ <w:tbl>
935
+ <w:tblPr>
936
+ <w:tblStyle w:val="${this.tables.tableGridStyle}" />
937
+ ${node.attrs.width === "100"
938
+ ? '<w:tblW w:w="0" w:type="auto" />'
939
+ : `<w:tblW w:w="${50 * Number.parseInt(node.attrs.width)}" w:type="pct" />
940
+ <w:jc w:val="${node.attrs.aligned}" />`}
941
+ <w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1" />
942
+ </w:tblPr>
943
+ <w:tblGrid>`;
944
+ const columns = node.content[1].content[0].content.length;
945
+ let cellWidth = 63500; // standard width
946
+ options = Object.assign({}, options);
947
+ if (options.dimensions?.width) {
948
+ cellWidth =
949
+ Math.floor(options.dimensions.width / columns) -
950
+ 2540; // subtracting for border width
951
+ }
952
+ else if (!options.dimensions) {
953
+ options.dimensions = {};
954
+ }
955
+ options.section = "Normal";
956
+ options.list_type = null;
957
+ options.dimensions = Object.assign({}, options.dimensions);
958
+ options.dimensions.width = cellWidth;
959
+ options.tableSideMargins = this.tables.getSideMargins();
960
+ for (let i = 0; i < columns; i++) {
961
+ start += `<w:gridCol w:w="${Number.parseInt(String(cellWidth / 635))}" />`;
962
+ }
963
+ start += "</w:tblGrid>";
964
+ end = "</w:tbl>" + end;
965
+ break;
966
+ }
967
+ case "table_body":
968
+ // Pass through to table.
969
+ break;
970
+ case "table_caption":
971
+ // We already deal with this in 'table'.
972
+ return "";
973
+ case "table_row":
974
+ start += "<w:tr>";
975
+ end = "</w:tr>" + end;
976
+ break;
977
+ case "table_cell":
978
+ case "table_header":
979
+ start += `
980
+ <w:tc>
981
+ <w:tcPr>
982
+ ${node.attrs.rowspan && node.attrs.colspan
983
+ ? `<w:tcW w:w="${Number.parseInt(String((options.dimensions?.width || 0) / 635))}" w:type="dxa" />`
984
+ : '<w:tcW w:w="0" w:type="auto" />'}
985
+ ${node.attrs.rowspan
986
+ ? node.attrs.rowspan > 1
987
+ ? '<w:vMerge w:val="restart" />'
988
+ : ""
989
+ : "<w:vMerge/>"}
990
+ ${node.attrs.colspan
991
+ ? node.attrs.colspan > 1
992
+ ? '<w:hMerge w:val="restart" />'
993
+ : ""
994
+ : "<w:hMerge/>"}
995
+ </w:tcPr>
996
+ ${node.content ? "" : "<w:p/>"}`;
997
+ end = "</w:tc>" + end;
998
+ break;
999
+ case "equation": {
1000
+ const latex = node.attrs.equation;
1001
+ content += this.math.getOmml(latex);
1002
+ break;
1003
+ }
1004
+ case "hard_break":
1005
+ content += "<w:r><w:br/></w:r>";
1006
+ break;
1007
+ // CSL bib entries
1008
+ case "cslbib":
1009
+ options = Object.assign({}, options);
1010
+ options.section = "Bibliography";
1011
+ break;
1012
+ case "cslblock":
1013
+ end = "<w:r><w:br/></w:r>" + end;
1014
+ break;
1015
+ case "cslleftmargin":
1016
+ end = "<w:r><w:tab/></w:r>" + end;
1017
+ break;
1018
+ case "cslindent":
1019
+ start += "<w:r><w:tab/></w:r>";
1020
+ end = "<w:r><w:br/></w:r>" + end;
1021
+ break;
1022
+ case "cslentry":
1023
+ start += `
1024
+ <w:p>
1025
+ <w:pPr>
1026
+ <w:pStyle w:val="${options.section}"/>
1027
+ <w:rPr></w:rPr>
1028
+ </w:pPr>`;
1029
+ // Note - beginning is in same par as first item, whereas end is in its own par
1030
+ if (node.attrs?.first) {
1031
+ start += `<w:r>
1032
+ <w:fldChar w:fldCharType="begin"/>
1033
+ </w:r>
1034
+ <w:r>
1035
+ <w:instrText xml:space="preserve"> ADDIN ZOTERO_BIBL CSL_BIBLIOGRAPHY </w:instrText>
1036
+ </w:r>
1037
+ <w:r>
1038
+ <w:fldChar w:fldCharType="separate"/>
1039
+ </w:r>`;
1040
+ }
1041
+ end = "</w:p>" + end;
1042
+ if (node.attrs?.last) {
1043
+ end =
1044
+ end +
1045
+ `<w:p>
1046
+ <w:pPr>
1047
+ <w:rPr/>
1048
+ </w:pPr>
1049
+ <w:r>
1050
+ <w:fldChar w:fldCharType="end"/>
1051
+ </w:r>
1052
+ </w:p>`;
1053
+ }
1054
+ break;
1055
+ case "cslinline":
1056
+ case "cslrightinline":
1057
+ break;
1058
+ default:
1059
+ console.warn("Unknown node type:", node.type, node);
1060
+ break;
1061
+ }
1062
+ if (node.content) {
1063
+ for (let i = 0; i < node.content.length; i++) {
1064
+ content += this.transformRichtext(node.content[i], options, node.content[i + 1]);
1065
+ }
1066
+ }
1067
+ return start + content + end;
1068
+ }
1069
+ }
1070
+ //# sourceMappingURL=richtext.js.map