@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,780 @@
1
+ import { escapeText } from "fwtoolkit";
2
+ import { BIBLIOGRAPHY_HEADERS } from "../../schema/i18n.js";
3
+ import { textContent } from "../tools/doc_content.js";
4
+ import { xmlDOM } from "../tools/xml.js";
5
+ export class DOCXExporterRender {
6
+ xml;
7
+ filePath; // "word/document.xml" or "word/document2.xml" in some cases
8
+ ctXML;
9
+ text;
10
+ constructor(xml) {
11
+ this.xml = xml;
12
+ this.filePath = false; // "word/document.xml" or "word/document2.xml" in some cases
13
+ this.ctXML = false;
14
+ this.text = false;
15
+ }
16
+ init() {
17
+ return this.xml
18
+ .getXml("[Content_Types].xml")
19
+ .then(ctXML => {
20
+ this.ctXML = ctXML;
21
+ const documentOverride = this.ctXML.query("Override", {
22
+ ContentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"
23
+ });
24
+ this.filePath = String(documentOverride.getAttribute("PartName")).slice(1);
25
+ return this.xml.getXml(this.filePath);
26
+ })
27
+ .then(xml => {
28
+ this.text = xml;
29
+ // Ensure we support the three latest docx feature sets:
30
+ // wp14 (drawing 2010), w14 (word 2010), w15 (word 2012)
31
+ const documentEl = this.text.query("w:document");
32
+ if (!documentEl.getAttribute("xmlns:wp14")) {
33
+ documentEl.setAttribute("xmlns:wp14", "http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing");
34
+ }
35
+ if (!documentEl.getAttribute("xmlns:w14")) {
36
+ documentEl.setAttribute("xmlns:w14", "http://schemas.microsoft.com/office/word/2010/wordml");
37
+ }
38
+ if (!documentEl.getAttribute("xmlns:w15")) {
39
+ documentEl.setAttribute("xmlns:w15", "http://schemas.microsoft.com/office/word/2012/wordml");
40
+ }
41
+ const ignorable = [
42
+ ...new Set(["w14", "wp14", "w15"].concat(String(documentEl.getAttribute("mc:Ignorable") || "")
43
+ .split(" ")
44
+ .filter(item => item.length)))
45
+ ];
46
+ documentEl.setAttribute("mc:Ignorable", ignorable.join(" "));
47
+ return Promise.resolve();
48
+ });
49
+ }
50
+ parseStructuredTags(block, tag) {
51
+ let blockText = block.textContent;
52
+ const tagName = tag.title;
53
+ // Check for BEGIN...END loops (with optional limit)
54
+ const beginStartRegex = new RegExp(`\\{BEGIN_${tagName}(?::limit=(\\d+))?\\}`);
55
+ const beginStartMatch = blockText.match(beginStartRegex);
56
+ if (beginStartMatch &&
57
+ tag.content &&
58
+ Array.isArray(tag.content) &&
59
+ tag.content.length > 0) {
60
+ const limit = beginStartMatch[1]
61
+ ? parseInt(beginStartMatch[1])
62
+ : null;
63
+ const beginStart = beginStartMatch.index;
64
+ const beginEnd = beginStart + beginStartMatch[0].length;
65
+ // Find matching {END_tag}
66
+ const endTag = `{END_${tagName}}`;
67
+ const endPos = blockText.indexOf(endTag, beginEnd);
68
+ if (endPos === -1) {
69
+ console.warn(`Missing ${endTag} for ${tagName}`);
70
+ return;
71
+ }
72
+ const templateXml = blockText.slice(beginEnd, endPos);
73
+ const replacementXml = this.processLoop(templateXml, tag.content, tagName, limit);
74
+ const beforeText = blockText.slice(0, beginStart);
75
+ const afterText = blockText.slice(endPos + endTag.length);
76
+ const fullReplacement = beforeText + replacementXml + afterText;
77
+ block.innerXML = fullReplacement;
78
+ return;
79
+ }
80
+ // Check for IF...ELIF...ELSE...ENDIF conditionals
81
+ blockText = this.processConditionals(blockText, {
82
+ tagName,
83
+ count: tag.content ? tag.content.length : 0,
84
+ content: tag.content || []
85
+ });
86
+ if (blockText !== block.textContent) {
87
+ block.innerXML = blockText;
88
+ }
89
+ }
90
+ processLoop(templateXml, items, tagName, limit = null) {
91
+ const effectiveItems = limit !== null ? items.slice(0, limit) : items;
92
+ const results = [];
93
+ effectiveItems.forEach((item, index) => {
94
+ const loopCtx = {
95
+ count: items.length,
96
+ index: index,
97
+ first: index === 0,
98
+ last: index === effectiveItems.length - 1,
99
+ item: item,
100
+ content: [item],
101
+ odd: index % 2 === 1,
102
+ even: index % 2 === 0
103
+ };
104
+ let itemXml = templateXml;
105
+ // Replace field placeholders
106
+ if (typeof item === "string") {
107
+ itemXml = itemXml.replace(/%tag/g, escapeText(item));
108
+ }
109
+ else {
110
+ itemXml = itemXml
111
+ .replace(/\{?%firstname\}?/g, escapeText(item.firstname || ""))
112
+ .replace(/\{?%lastname\}?/g, escapeText(item.lastname || ""))
113
+ .replace(/\{?%institution\}?/g, escapeText(item.institution || ""))
114
+ .replace(/\{?%email\}?/g, escapeText(item.email || ""))
115
+ .replace(/\{?%id_type\}?/g, escapeText(item.id_type || ""))
116
+ .replace(/\{?%id_value\}?/g, escapeText(item.id_value || ""));
117
+ }
118
+ // Handle conditionals inside the loop
119
+ itemXml = this.processConditionals(itemXml, { tagName, ...loopCtx });
120
+ // Handle special delimiters for DOCX
121
+ itemXml = itemXml.replace(/\\n/g, "<w:br/>");
122
+ itemXml = itemXml.replace(/\\p/g, "</w:p><w:p>");
123
+ results.push(itemXml);
124
+ });
125
+ return results.join("");
126
+ }
127
+ processConditionals(text, ctx) {
128
+ let result = text;
129
+ let changed = true;
130
+ while (changed) {
131
+ changed = false;
132
+ const ifStart = result.indexOf("{IF(");
133
+ if (ifStart === -1) {
134
+ break;
135
+ }
136
+ let depth = 1;
137
+ let pos = ifStart + 4; // skip {IF(
138
+ // Find the closing ) of the IF expression
139
+ while (pos < result.length && result[pos] !== ")") {
140
+ pos++;
141
+ }
142
+ if (pos >= result.length) {
143
+ break;
144
+ }
145
+ pos++; // skip )
146
+ // Now scan for matching {ENDIF}
147
+ while (pos < result.length && depth > 0) {
148
+ if (result.substr(pos, 4) === "{IF(") {
149
+ depth++;
150
+ pos += 4;
151
+ }
152
+ else if (result.substr(pos, 7) === "{ENDIF}") {
153
+ depth--;
154
+ if (depth > 0) {
155
+ pos += 7;
156
+ }
157
+ }
158
+ else {
159
+ pos++;
160
+ }
161
+ }
162
+ if (depth === 0) {
163
+ const exprEnd = result.indexOf(")", ifStart + 4);
164
+ const ifExpr = result.slice(ifStart + 4, exprEnd);
165
+ // Skip the closing } of {IF(...)} if present
166
+ let innerStart = exprEnd + 1;
167
+ if (result[innerStart] === "}") {
168
+ innerStart++;
169
+ }
170
+ const innerContent = result.slice(innerStart, pos);
171
+ const conditions = [];
172
+ conditions.push({ expr: ifExpr, content: "" });
173
+ const remaining = innerContent;
174
+ let lastIndex = 0;
175
+ const elifRegex = /\{ELIF\(([^)]+)\)\}/g;
176
+ let elifMatch;
177
+ while ((elifMatch = elifRegex.exec(remaining)) !== null) {
178
+ conditions[conditions.length - 1].content = remaining.slice(lastIndex, elifMatch.index);
179
+ conditions.push({ expr: elifMatch[1], content: "" });
180
+ lastIndex = elifMatch.index + elifMatch[0].length;
181
+ }
182
+ const elseMatch = remaining.slice(lastIndex).match(/\{ELSE\}/);
183
+ if (elseMatch) {
184
+ conditions[conditions.length - 1].content = remaining.slice(lastIndex, lastIndex + elseMatch.index);
185
+ conditions.push({
186
+ expr: null,
187
+ content: remaining.slice(lastIndex + elseMatch.index + elseMatch[0].length)
188
+ });
189
+ }
190
+ else {
191
+ conditions[conditions.length - 1].content =
192
+ remaining.slice(lastIndex);
193
+ }
194
+ let replacement = "";
195
+ for (const cond of conditions) {
196
+ if (cond.expr === null ||
197
+ this.evaluateExpression(cond.expr, ctx)) {
198
+ replacement = cond.content;
199
+ break;
200
+ }
201
+ }
202
+ result =
203
+ result.slice(0, ifStart) +
204
+ replacement +
205
+ result.slice(pos + 7);
206
+ changed = true;
207
+ }
208
+ }
209
+ return result;
210
+ }
211
+ evaluateExpression(expr, ctx) {
212
+ try {
213
+ // Allow explicit tag name references (e.g., authors.count -> ctx.count)
214
+ if (ctx.tagName) {
215
+ const safeTagName = ctx.tagName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
216
+ expr = expr.replace(new RegExp(`\\b${safeTagName}\\b`, "g"), "ctx");
217
+ }
218
+ // Replace ctx.property accesses with literal values
219
+ const evalExpr = expr.replace(/ctx\.(\w+)(?:\.(\w+))?(?:\[(\d+)\])?/g, (_match, p1, p2, p3) => {
220
+ let val = ctx[p1];
221
+ if (p2 !== undefined && val !== undefined) {
222
+ val = val[p2];
223
+ }
224
+ if (p3 !== undefined && val !== undefined) {
225
+ val = val[parseInt(p3)];
226
+ }
227
+ return JSON.stringify(val);
228
+ });
229
+ // Remove string literals before character check
230
+ const safeExpr = evalExpr.replace(/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/g, '""');
231
+ // Check for unknown identifiers
232
+ const bareIdRegex = /\b[a-zA-Z_]\w*\b/g;
233
+ const allowed = ["true", "false", "null", "undefined"];
234
+ let m;
235
+ while ((m = bareIdRegex.exec(safeExpr)) !== null) {
236
+ if (!allowed.includes(m[0])) {
237
+ console.warn("Unknown identifier in expression:", m[0], "expression:", expr);
238
+ return false;
239
+ }
240
+ }
241
+ // Check for unsafe characters
242
+ if (/[^ \t\n\r0-9a-zA-Z_\.\+\-*\/%==<>!&|()\[\]]/.test(safeExpr)) {
243
+ console.warn("Unsafe characters in expression:", expr);
244
+ return false;
245
+ }
246
+ return new Function(`return (${evalExpr})`)();
247
+ }
248
+ catch (e) {
249
+ console.warn("Error evaluating expression:", expr, e);
250
+ return false;
251
+ }
252
+ }
253
+ processMultiBlockStructuredTags(blocks, tags) {
254
+ const tagMap = {};
255
+ tags.forEach(tag => {
256
+ if (tag.title) {
257
+ tagMap[tag.title] = tag;
258
+ }
259
+ });
260
+ // Process from end to start to avoid index shifting issues
261
+ for (let i = blocks.length - 1; i >= 0; i--) {
262
+ const block = blocks[i];
263
+ const text = block.textContent;
264
+ // Check for multi-block BEGIN...END loops
265
+ for (const tag of tags) {
266
+ if (!tag.title || !tag.content || !Array.isArray(tag.content)) {
267
+ continue;
268
+ }
269
+ const tagName = tag.title;
270
+ const beginRegex = new RegExp(`\\{BEGIN_${tagName}(?::limit=(\\d+))?\\}`);
271
+ const beginMatch = text.match(beginRegex);
272
+ if (!beginMatch) {
273
+ continue;
274
+ }
275
+ // Find matching END in a later block
276
+ let endIndex = -1;
277
+ for (let j = i + 1; j < blocks.length; j++) {
278
+ if (blocks[j].textContent.includes(`{END_${tagName}}`)) {
279
+ endIndex = j;
280
+ break;
281
+ }
282
+ }
283
+ if (endIndex === -1 || endIndex === i) {
284
+ continue;
285
+ }
286
+ // Found multi-block loop - process it
287
+ const limit = beginMatch[1] ? parseInt(beginMatch[1]) : null;
288
+ this._replaceMultiBlockLoop(blocks, i, endIndex, tag, limit);
289
+ // Adjust i since blocks array was modified
290
+ i = Math.min(i, blocks.length - 1);
291
+ break; // Only process one loop per block per iteration
292
+ }
293
+ }
294
+ // Process multi-block conditionals from end to start
295
+ for (let i = blocks.length - 1; i >= 0; i--) {
296
+ const block = blocks[i];
297
+ const text = block.textContent;
298
+ const ifMatch = text.match(/\{IF\(([^)]+)\)\}/);
299
+ if (!ifMatch) {
300
+ continue;
301
+ }
302
+ // Find matching ENDIF in a later block
303
+ let endIndex = -1;
304
+ for (let j = i + 1; j < blocks.length; j++) {
305
+ if (/\{ENDIF\}/.test(blocks[j].textContent)) {
306
+ endIndex = j;
307
+ break;
308
+ }
309
+ }
310
+ if (endIndex === -1 || endIndex === i) {
311
+ continue;
312
+ }
313
+ this._replaceMultiBlockConditional(blocks, i, endIndex, ifMatch[1], tagMap);
314
+ i = Math.min(i, blocks.length - 1);
315
+ }
316
+ }
317
+ _replaceMultiBlockLoop(blocks, beginIndex, endIndex, tag, limit) {
318
+ const tagName = tag.title;
319
+ const beginBlock = blocks[beginIndex];
320
+ // Concatenate all blocks from begin to end
321
+ let combinedXml = "";
322
+ for (let i = beginIndex; i <= endIndex; i++) {
323
+ combinedXml += blocks[i].toString();
324
+ }
325
+ // Find the BEGIN and END tags in the combined XML
326
+ const beginRegex = new RegExp(`\\{BEGIN_${tagName}(?::limit=\\d+)?\\}`);
327
+ const beginMatch = combinedXml.match(beginRegex);
328
+ const endTag = `{END_${tagName}}`;
329
+ const endPos = combinedXml.indexOf(endTag);
330
+ if (!beginMatch || endPos === -1) {
331
+ return;
332
+ }
333
+ const beforeXml = combinedXml.slice(0, beginMatch.index);
334
+ const templateXml = combinedXml.slice(beginMatch.index + beginMatch[0].length, endPos);
335
+ const afterXml = combinedXml.slice(endPos + endTag.length);
336
+ // Decode &gt; so expressions like >= work in nested conditionals
337
+ const decodedTemplateXml = templateXml.replace(/&gt;/g, ">");
338
+ const replacementXml = this.processLoop(decodedTemplateXml, tag.content, tagName, limit);
339
+ const fullReplacement = beforeXml + replacementXml + afterXml;
340
+ // Parse replacement
341
+ const parent = beginBlock.parentElement;
342
+ const dom = xmlDOM(`<root>${fullReplacement}</root>`);
343
+ const root = dom.query("root");
344
+ const newBlocks = root.children.filter(child => child.tagName === "w:p" ||
345
+ child.tagName === "w:sectPr");
346
+ // Insert new blocks before begin block
347
+ for (let i = newBlocks.length - 1; i >= 0; i--) {
348
+ parent.insertBefore(newBlocks[i], beginBlock);
349
+ }
350
+ // Remove old blocks
351
+ for (let i = endIndex; i >= beginIndex; i--) {
352
+ parent.removeChild(blocks[i]);
353
+ }
354
+ // Update blocks array
355
+ blocks.splice(beginIndex, endIndex - beginIndex + 1, ...newBlocks);
356
+ }
357
+ _replaceMultiBlockConditional(blocks, ifIndex, endIndex, expr, tagMap) {
358
+ const ifBlock = blocks[ifIndex];
359
+ // Concatenate all blocks from if to endif
360
+ let combinedXml = "";
361
+ for (let i = ifIndex; i <= endIndex; i++) {
362
+ combinedXml += blocks[i].toString();
363
+ }
364
+ // Determine which tag the expression references
365
+ let ctx = { count: 0, content: [] };
366
+ for (const tagName in tagMap) {
367
+ const safeTagName = tagName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
368
+ if (new RegExp(`\\b${safeTagName}\\b`).test(expr)) {
369
+ const tag = tagMap[tagName];
370
+ ctx = {
371
+ tagName: tag.title,
372
+ count: tag.content ? tag.content.length : 0,
373
+ content: tag.content || []
374
+ };
375
+ break;
376
+ }
377
+ }
378
+ // Decode &gt; so expressions like >= work in conditionals
379
+ const decodedXml = combinedXml.replace(/&gt;/g, ">");
380
+ // Process conditionals on the combined XML
381
+ const processedXml = this.processConditionals(decodedXml, ctx);
382
+ if (processedXml === combinedXml) {
383
+ return;
384
+ }
385
+ // Parse and replace
386
+ const parent = ifBlock.parentElement;
387
+ const dom = xmlDOM(`<root>${processedXml}</root>`);
388
+ const root = dom.query("root");
389
+ const newBlocks = root.children.filter(child => child.tagName === "w:p" ||
390
+ child.tagName === "w:sectPr");
391
+ for (let i = newBlocks.length - 1; i >= 0; i--) {
392
+ parent.insertBefore(newBlocks[i], ifBlock);
393
+ }
394
+ for (let i = endIndex; i >= ifIndex; i--) {
395
+ parent.removeChild(blocks[i]);
396
+ }
397
+ blocks.splice(ifIndex, endIndex - ifIndex + 1, ...newBlocks);
398
+ }
399
+ // Define the tags that are to be looked for in the document
400
+ getTagData(docContent, pmBib, settings) {
401
+ const tags = docContent.content.map((node) => {
402
+ const tag = {};
403
+ switch (node.type) {
404
+ case "title":
405
+ tag.title = "title";
406
+ tag.content = textContent(node);
407
+ break;
408
+ case "heading_part":
409
+ tag.title = node.attrs.id;
410
+ tag.content = textContent(node);
411
+ break;
412
+ case "table_part":
413
+ case "richtext_part":
414
+ tag.title = `@${node.attrs.id}`;
415
+ tag.content = node.content;
416
+ break;
417
+ case "contributors_part":
418
+ tag.title = node.attrs.id;
419
+ // Return array of structured objects for format with delimiter support
420
+ tag.content = node.content
421
+ ? node.content.map((node) => {
422
+ const c = node.attrs;
423
+ return {
424
+ firstname: c.firstname || "",
425
+ lastname: c.lastname || "",
426
+ institution: c.institution || "",
427
+ email: c.email || "",
428
+ id_type: c.id_type || "",
429
+ id_value: c.id_value || ""
430
+ };
431
+ })
432
+ : [];
433
+ break;
434
+ case "tags_part":
435
+ tag.title = node.attrs.id;
436
+ // Return array of tag strings for format with delimiter support
437
+ tag.content = node.content
438
+ ? node.content.map((node) => node.attrs.tag)
439
+ : [];
440
+ break;
441
+ }
442
+ return tag;
443
+ });
444
+ let bibliographyContent;
445
+ if (pmBib && pmBib.content && pmBib.content.length > 0) {
446
+ // Add bibliography heading and mark first/last items
447
+ const firstPmBib = pmBib.content[0];
448
+ const lastPmBib = pmBib.content[pmBib.content.length - 1];
449
+ firstPmBib.attrs = firstPmBib.attrs || {};
450
+ firstPmBib.attrs.first = true;
451
+ lastPmBib.attrs = lastPmBib.attrs || {};
452
+ lastPmBib.attrs.last = true;
453
+ const lang = settings.language;
454
+ const bibliographyHeader = settings.bibliography_header?.[lang] ||
455
+ BIBLIOGRAPHY_HEADERS[lang];
456
+ bibliographyContent = [
457
+ {
458
+ type: "bibliography_heading",
459
+ content: [{ type: "text", text: bibliographyHeader }]
460
+ },
461
+ pmBib
462
+ ];
463
+ }
464
+ else {
465
+ // No bibliography content, add a placeholder paragraph
466
+ bibliographyContent = [
467
+ { type: "paragraph", content: [{ type: "text", text: " " }] }
468
+ ];
469
+ }
470
+ // Add bibliography content
471
+ tags.push({
472
+ title: "@bibliography", // The '@' triggers handling as block
473
+ content: bibliographyContent
474
+ });
475
+ tags.push({
476
+ title: "@copyright", // The '@' triggers handling as block
477
+ content: settings.copyright && settings.copyright.holder
478
+ ? [
479
+ {
480
+ type: "paragraph",
481
+ content: [
482
+ {
483
+ type: "text",
484
+ text: `© ${settings.copyright.year ? settings.copyright.year : new Date().getFullYear()} ${settings.copyright.holder}`
485
+ }
486
+ ]
487
+ }
488
+ ]
489
+ : [
490
+ {
491
+ type: "paragraph",
492
+ content: [{ type: "text", text: " " }]
493
+ }
494
+ ]
495
+ });
496
+ tags.push({
497
+ title: "@licenses", // The '@' triggers handling as block
498
+ content: settings.copyright && settings.copyright.licenses.length
499
+ ? settings.copyright.licenses.map((license) => ({
500
+ type: "paragraph",
501
+ content: [
502
+ {
503
+ type: "text",
504
+ marks: [
505
+ {
506
+ type: "link",
507
+ attrs: {
508
+ href: license.url,
509
+ title: license.title
510
+ }
511
+ }
512
+ ],
513
+ text: license.title
514
+ },
515
+ {
516
+ type: "text",
517
+ text: license.start
518
+ ? ` (${license.start})`
519
+ : ""
520
+ }
521
+ ]
522
+ }))
523
+ : [
524
+ {
525
+ type: "paragraph",
526
+ content: [{ type: "text", text: " " }]
527
+ }
528
+ ]
529
+ });
530
+ return tags;
531
+ }
532
+ // go through document.xml looking for tags and replace them with the given
533
+ // replacements.
534
+ render(docContent, pmBib, settings, richtext, citations) {
535
+ const tags = this.getTagData(docContent, pmBib, settings);
536
+ // Including global page definition at end
537
+ const textEl = this.text;
538
+ const blocks = textEl.queryAll(["w:p", "w:sectPr"]);
539
+ // Process multi-block structured tags first (BEGIN...END across paragraphs)
540
+ this.processMultiBlockStructuredTags(blocks, tags);
541
+ const currentTags = [];
542
+ blocks.forEach(block => {
543
+ // Assuming there is nothing outside of <w:t>...</w:t>
544
+ const text = block.textContent;
545
+ tags.forEach(tag => {
546
+ const tagString = tag.title;
547
+ const hasInlineTag = text.includes(`{${tagString}}`) ||
548
+ text.includes(`{${tagString}:format=`);
549
+ const hasBeginTag = text.includes(`{BEGIN_${tagString}}`);
550
+ const hasIfTag = text.includes(`{IF(${tagString}.`) ||
551
+ text.includes(`{IF(ctx.`);
552
+ if (hasInlineTag || hasBeginTag || hasIfTag) {
553
+ currentTags.push(tag);
554
+ tag.block = block;
555
+ // We don't worry about the same tag appearing twice in the document,
556
+ // as that would make no sense.
557
+ }
558
+ });
559
+ // Parse structured tags (BEGIN...END and IF...ENDIF)
560
+ currentTags.forEach(tag => {
561
+ if (tag.block) {
562
+ this.parseStructuredTags(tag.block, tag);
563
+ }
564
+ });
565
+ const pageSize = block.query("w:pgSz");
566
+ const pageMargins = block.query("w:pgMar");
567
+ const cols = block.query("w:cols");
568
+ if (pageSize && pageMargins) {
569
+ // Not sure if these all need to come together
570
+ let width = Number.parseInt(String(pageSize.getAttribute("w:w"))) -
571
+ Number.parseInt(String(pageMargins.getAttribute("w:right"))) -
572
+ Number.parseInt(String(pageMargins.getAttribute("w:left")));
573
+ const height = Number.parseInt(String(pageSize.getAttribute("w:h"))) -
574
+ Number.parseInt(String(pageMargins.getAttribute("w:bottom"))) -
575
+ Number.parseInt(String(pageMargins.getAttribute("w:top"))) -
576
+ Number.parseInt(String(pageMargins.getAttribute("w:header"))) -
577
+ Number.parseInt(String(pageMargins.getAttribute("w:footer")));
578
+ const colCount = cols
579
+ ? Number.parseInt(String(cols.getAttribute("w:num")))
580
+ : 1;
581
+ if (cols && colCount > 1) {
582
+ const colSpace = Number.parseInt(String(cols.getAttribute("w:space")));
583
+ width = width - colSpace * (colCount - 1);
584
+ width = width / colCount;
585
+ }
586
+ while (currentTags.length) {
587
+ const tag = currentTags.pop();
588
+ tag.dimensions = {
589
+ width: width * 635, // convert to EMU
590
+ height: height * 635 // convert to EMU
591
+ };
592
+ }
593
+ }
594
+ });
595
+ tags.forEach((tag) => {
596
+ if (!tag.title) {
597
+ return;
598
+ }
599
+ else if (tag.title[0] === "@") {
600
+ this.blockRender(tag, citations, richtext);
601
+ }
602
+ else {
603
+ this.inlineRender(tag);
604
+ }
605
+ });
606
+ }
607
+ // Render Tags that only exchange inline content
608
+ inlineRender(tag) {
609
+ if (!tag.block) {
610
+ return;
611
+ }
612
+ const blockText = tag.block.textContent;
613
+ const tagString = `{${tag.title}}`;
614
+ if (!blockText.includes(`{${tag.title}`)) {
615
+ // No inline tag present - structured tags only
616
+ return;
617
+ }
618
+ // Check for format string with delimiter: {tag:format=%firstname|; }
619
+ const formatRegex = new RegExp(`\\{${tag.title}:format=([^|]+)\\|?([^}]*)?\\}`);
620
+ const formatMatch = blockText.match(formatRegex);
621
+ let fullText = "";
622
+ if (formatMatch && tag.content && Array.isArray(tag.content)) {
623
+ // Find format string and delimiter
624
+ const [, format, delimiter = "; "] = formatMatch;
625
+ // Process each item with the format string
626
+ const formattedItems = tag.content
627
+ .map((item) => {
628
+ if (typeof item === "string") {
629
+ // For tags (simple strings)
630
+ return format.replace(/%tag/g, item);
631
+ }
632
+ else {
633
+ // For contributors (objects)
634
+ return format
635
+ .replace(/%firstname/g, item.firstname || "")
636
+ .replace(/%lastname/g, item.lastname || "")
637
+ .replace(/%institution/g, item.institution || "")
638
+ .replace(/%email/g, item.email || "")
639
+ .replace(/%id_type/g, item.id_type || "")
640
+ .replace(/%id_value/g, item.id_value || "");
641
+ }
642
+ })
643
+ .filter((s) => s.trim() !== "");
644
+ // Handle special delimiters
645
+ let delimiterText = delimiter;
646
+ delimiterText = delimiterText.replace(/\\n/g, "\n");
647
+ delimiterText = delimiterText.replace(/\\p/g, "\n\n");
648
+ const replacement = formattedItems.join(delimiterText);
649
+ fullText = blockText.replace(formatRegex, replacement);
650
+ }
651
+ else {
652
+ // Fall back to simple string replacement (backward compatible)
653
+ let contentStr = tag.content || "";
654
+ if (Array.isArray(contentStr)) {
655
+ if (contentStr.length === 0) {
656
+ contentStr = "";
657
+ }
658
+ else if (typeof contentStr[0] === "string") {
659
+ contentStr = contentStr.join(", ");
660
+ }
661
+ else {
662
+ // Contributors - backward compatible formatting
663
+ contentStr = contentStr
664
+ .map((item) => {
665
+ const nameParts = [];
666
+ let affiliation = false;
667
+ if (item.firstname) {
668
+ nameParts.push(item.firstname);
669
+ }
670
+ if (item.lastname) {
671
+ nameParts.push(item.lastname);
672
+ }
673
+ if (item.institution) {
674
+ if (nameParts.length) {
675
+ affiliation = item.institution;
676
+ }
677
+ else {
678
+ nameParts.push(item.institution);
679
+ }
680
+ }
681
+ const parts = [nameParts.join(" ")];
682
+ if (affiliation) {
683
+ parts.push(affiliation);
684
+ }
685
+ if (item.email) {
686
+ parts.push(item.email);
687
+ }
688
+ if (item.id_type && item.id_value) {
689
+ parts.push(`${item.id_type}: ${item.id_value}`);
690
+ }
691
+ return parts.join(", ");
692
+ })
693
+ .join("; ");
694
+ }
695
+ }
696
+ const texts = blockText.split(tagString);
697
+ fullText = texts[0] + contentStr + texts[1];
698
+ }
699
+ // Apply the replacement
700
+ const rs = tag.block.queryAll("w:r").reverse();
701
+ let lastR;
702
+ // Remove all <w:r> with text in them (<w:t>).
703
+ // Exclude <w:r> used for other things, like page breaks.
704
+ rs.forEach((r) => {
705
+ if (r.query("w:t")) {
706
+ if (lastR) {
707
+ r.parentElement.removeChild(r);
708
+ }
709
+ else {
710
+ lastR = r;
711
+ }
712
+ }
713
+ });
714
+ if (!lastR) {
715
+ // This should not be possible. Error.
716
+ return;
717
+ }
718
+ if (fullText.length) {
719
+ if (fullText.includes("\n")) {
720
+ // Split on newlines and create <w:t> elements separated by <w:br/>
721
+ const parts = fullText.split("\n").map(part => escapeText(part));
722
+ lastR.innerXML = parts
723
+ .map((part, index) => {
724
+ const br = index > 0 ? "<w:br/>" : "";
725
+ return `${br}<w:t xml:space="preserve">${part}</w:t>`;
726
+ })
727
+ .join("");
728
+ }
729
+ else {
730
+ let textAttr = "";
731
+ if (fullText[0] === " " ||
732
+ fullText[fullText.length - 1] === " ") {
733
+ textAttr += 'xml:space="preserve"';
734
+ }
735
+ lastR.innerXML = `<w:t ${textAttr}>${escapeText(fullText)}</w:t>`;
736
+ }
737
+ }
738
+ else {
739
+ lastR.parentElement.removeChild(lastR);
740
+ }
741
+ }
742
+ // Render tags that exchange paragraphs
743
+ blockRender(tag, citations, richtext) {
744
+ if (!tag.block) {
745
+ return;
746
+ }
747
+ const pStyle = tag.block.query("w:pStyle");
748
+ const options = {
749
+ dimensions: tag.dimensions,
750
+ citationType: citations.citFm.citationType,
751
+ section: pStyle ? pStyle.getAttribute("w:val") : "Normal",
752
+ tag: tag.title.slice(1)
753
+ };
754
+ const outXML = tag.content
755
+ ? tag.content
756
+ .map((content, i) => richtext.run(content, options, tag.content[i + 1]))
757
+ .join("")
758
+ : "";
759
+ if (!outXML.length) {
760
+ // If there is no content, we need to put in a space to prevent the
761
+ // tag from being removed.
762
+ tag.block.innerXML =
763
+ '<w:r><w:t xml:space="preserve"> </w:t></w:r>';
764
+ return;
765
+ }
766
+ const parentElement = tag.block.parentElement;
767
+ const dom = xmlDOM(outXML);
768
+ const domPars = dom.node["#document"]?.slice() || [dom];
769
+ domPars.forEach(node => parentElement.insertBefore(node, tag.block));
770
+ // sectPr contains information about columns, etc. We need to move this
771
+ // to the last paragraph we will be adding.
772
+ const sectPr = tag.block.query("w:sectPr");
773
+ if (sectPr) {
774
+ const pPr = tag.block.previousSibling.query("w:pPr");
775
+ pPr.appendChild(sectPr);
776
+ }
777
+ parentElement.removeChild(tag.block);
778
+ }
779
+ }
780
+ //# sourceMappingURL=render.js.map