@xopcai/xopc 0.0.23 → 0.0.25

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 (170) hide show
  1. package/dist/extensions/feishu/xopc.extension.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/agents-C_bPhtBs.js +216 -0
  4. package/dist/gateway/static/root/assets/agents-C_bPhtBs.js.map +1 -0
  5. package/dist/gateway/static/root/assets/apps-page-DbzO48lg.js +2 -0
  6. package/dist/gateway/static/root/assets/apps-page-DbzO48lg.js.map +1 -0
  7. package/dist/gateway/static/root/assets/{attachment-preview-renderer-CebH7fCz.js → attachment-preview-renderer-CxMJMbD2.js} +4 -4
  8. package/dist/gateway/static/root/assets/{attachment-preview-renderer-CebH7fCz.js.map → attachment-preview-renderer-CxMJMbD2.js.map} +1 -1
  9. package/dist/gateway/static/root/assets/{attachment-process-heavy-Dbf1--O6.js → attachment-process-heavy-EFXPGfWk.js} +6 -6
  10. package/dist/gateway/static/root/assets/{attachment-process-heavy-Dbf1--O6.js.map → attachment-process-heavy-EFXPGfWk.js.map} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-utils-core-Dt6UxMPV.js → attachment-utils-core-ECbeoa9H.js} +1 -1
  12. package/dist/gateway/static/root/assets/attachment-utils-core-ECbeoa9H.js.map +1 -0
  13. package/dist/gateway/static/root/assets/channels-settings-CeGoU9v8.js +9 -0
  14. package/dist/gateway/static/root/assets/{channels-settings-CGzrrBlT.js.map → channels-settings-CeGoU9v8.js.map} +1 -1
  15. package/dist/gateway/static/root/assets/cn-BMCV0OMB.js +2 -0
  16. package/dist/gateway/static/root/assets/cn-BMCV0OMB.js.map +1 -0
  17. package/dist/gateway/static/root/assets/cron-page-DpEYUvxB.js +2 -0
  18. package/dist/gateway/static/root/assets/{cron-page-BGCdDf2w.js.map → cron-page-DpEYUvxB.js.map} +1 -1
  19. package/dist/gateway/static/root/assets/cron-utils-Cvv0F3pa.js +3 -0
  20. package/dist/gateway/static/root/assets/{cron-utils-Dnks4wWv.js.map → cron-utils-Cvv0F3pa.js.map} +1 -1
  21. package/dist/gateway/static/root/assets/dist-C41N3YrO.js +2 -0
  22. package/dist/gateway/static/root/assets/{dist-BG1ChbY9.js.map → dist-C41N3YrO.js.map} +1 -1
  23. package/dist/gateway/static/root/assets/{docx-preview-DxcHM3sR.js → docx-preview-F-jKDMNv.js} +2 -2
  24. package/dist/gateway/static/root/assets/{docx-preview-DxcHM3sR.js.map → docx-preview-F-jKDMNv.js.map} +1 -1
  25. package/dist/gateway/static/root/assets/{excel-worksheet-utils-Dk66snKA.js → excel-worksheet-utils-DPfAinZn.js} +1 -1
  26. package/dist/gateway/static/root/assets/{excel-worksheet-utils-Dk66snKA.js.map → excel-worksheet-utils-DPfAinZn.js.map} +1 -1
  27. package/dist/gateway/static/root/assets/extension-debug-page-CkkYZjNP.js +2 -0
  28. package/dist/gateway/static/root/assets/{extension-debug-page-CRC16AbL.js.map → extension-debug-page-CkkYZjNP.js.map} +1 -1
  29. package/dist/gateway/static/root/assets/extension-page-BjUIPVNG.js +2 -0
  30. package/dist/gateway/static/root/assets/{extension-page-BagrJnbm.js.map → extension-page-BjUIPVNG.js.map} +1 -1
  31. package/dist/gateway/static/root/assets/extension-settings-page-CwuFDOdk.js +2 -0
  32. package/dist/gateway/static/root/assets/extension-settings-page-CwuFDOdk.js.map +1 -0
  33. package/dist/gateway/static/root/assets/index-DwzwDCjW.js +150 -0
  34. package/dist/gateway/static/root/assets/index-DwzwDCjW.js.map +1 -0
  35. package/dist/gateway/static/root/assets/index-dhtHG1nU.css +1 -0
  36. package/dist/gateway/static/root/assets/{jszip.min-DVUfmhpE.js → jszip.min-CL3dfyxs.js} +1 -1
  37. package/dist/gateway/static/root/assets/{jszip.min-DVUfmhpE.js.map → jszip.min-CL3dfyxs.js.map} +1 -1
  38. package/dist/gateway/static/root/assets/logs-page-BtwGPuw2.js +2 -0
  39. package/dist/gateway/static/root/assets/{logs-page-Bo9EsE_D.js.map → logs-page-BtwGPuw2.js.map} +1 -1
  40. package/dist/gateway/static/root/assets/{pdf--jE7rvON.js → pdf-CX6ji-QC.js} +1 -1
  41. package/dist/gateway/static/root/assets/{pdf--jE7rvON.js.map → pdf-CX6ji-QC.js.map} +1 -1
  42. package/dist/gateway/static/root/assets/sessions-page-4rKFDn2k.js +2 -0
  43. package/dist/gateway/static/root/assets/{sessions-page-CDgXq8qp.js.map → sessions-page-4rKFDn2k.js.map} +1 -1
  44. package/dist/gateway/static/root/assets/settings-page-iYLSxQYc.js +2 -0
  45. package/dist/gateway/static/root/assets/settings-page-iYLSxQYc.js.map +1 -0
  46. package/dist/gateway/static/root/assets/skills-page-_siDuHeF.js +3 -0
  47. package/dist/gateway/static/root/assets/{skills-page-BRS5qYTw.js.map → skills-page-_siDuHeF.js.map} +1 -1
  48. package/dist/gateway/static/root/assets/vendor-swr-B5fPo7KK.js +2 -0
  49. package/dist/gateway/static/root/assets/{vendor-swr-Dp4nzp5h.js.map → vendor-swr-B5fPo7KK.js.map} +1 -1
  50. package/dist/gateway/static/root/assets/{xlsx-DVk38js7.js → xlsx-CPtvfmVF.js} +1 -1
  51. package/dist/gateway/static/root/assets/{xlsx-DVk38js7.js.map → xlsx-CPtvfmVF.js.map} +1 -1
  52. package/dist/gateway/static/root/index.html +5 -4
  53. package/dist/package.js +1 -1
  54. package/dist/src/agent/image/tool-model-config.js +2 -2
  55. package/dist/src/agent/image/tool-model-config.js.map +1 -1
  56. package/dist/src/agent/memory/dreaming/config.d.ts +20 -0
  57. package/dist/src/agent/memory/dreaming/config.js +44 -0
  58. package/dist/src/agent/memory/dreaming/config.js.map +1 -0
  59. package/dist/src/agent/memory/dreaming/constants.d.ts +8 -0
  60. package/dist/src/agent/memory/dreaming/constants.js +14 -0
  61. package/dist/src/agent/memory/dreaming/constants.js.map +1 -0
  62. package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +22 -0
  63. package/dist/src/agent/memory/dreaming/deep-promotion.js +337 -0
  64. package/dist/src/agent/memory/dreaming/deep-promotion.js.map +1 -0
  65. package/dist/src/agent/memory/dreaming/preview.d.ts +26 -0
  66. package/dist/src/agent/memory/dreaming/preview.js +176 -0
  67. package/dist/src/agent/memory/dreaming/preview.js.map +1 -0
  68. package/dist/src/agent/memory/dreaming/short-term-store.d.ts +45 -0
  69. package/dist/src/agent/memory/dreaming/short-term-store.js +187 -0
  70. package/dist/src/agent/memory/dreaming/short-term-store.js.map +1 -0
  71. package/dist/src/agent/orchestration/agent-orchestrator.js +17 -0
  72. package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
  73. package/dist/src/agent/service.d.ts +6 -0
  74. package/dist/src/agent/service.js +52 -0
  75. package/dist/src/agent/service.js.map +1 -1
  76. package/dist/src/agent/tools/dreaming-tool.d.ts +7 -0
  77. package/dist/src/agent/tools/dreaming-tool.js +102 -0
  78. package/dist/src/agent/tools/dreaming-tool.js.map +1 -0
  79. package/dist/src/agent/tools/execute-code-tool.js +1 -1
  80. package/dist/src/agent/tools/execute-code-tool.js.map +1 -1
  81. package/dist/src/agent/tools/factory.js +5 -0
  82. package/dist/src/agent/tools/factory.js.map +1 -1
  83. package/dist/src/agent/tools/index.d.ts +1 -0
  84. package/dist/src/agent/tools/index.js +2 -1
  85. package/dist/src/agent/tools/memory-tool.js +9 -2
  86. package/dist/src/agent/tools/memory-tool.js.map +1 -1
  87. package/dist/src/cli/commands/extension-dev.d.ts +2 -0
  88. package/dist/src/cli/commands/extension-dev.js +196 -0
  89. package/dist/src/cli/commands/extension-dev.js.map +1 -0
  90. package/dist/src/cli/commands/extension-marketplace.d.ts +4 -0
  91. package/dist/src/cli/commands/extension-marketplace.js +145 -0
  92. package/dist/src/cli/commands/extension-marketplace.js.map +1 -0
  93. package/dist/src/cli/commands/extension-pack.d.ts +2 -0
  94. package/dist/src/cli/commands/extension-pack.js +242 -0
  95. package/dist/src/cli/commands/extension-pack.js.map +1 -0
  96. package/dist/src/cli/commands/extension.js +13 -0
  97. package/dist/src/cli/commands/extension.js.map +1 -1
  98. package/dist/src/cli/index.js +5 -1
  99. package/dist/src/cli/index.js.map +1 -1
  100. package/dist/src/config/schema.d.ts +39 -0
  101. package/dist/src/config/schema.js +17 -2
  102. package/dist/src/config/schema.js.map +1 -1
  103. package/dist/src/extensions/api.d.ts +6 -1
  104. package/dist/src/extensions/api.js +30 -0
  105. package/dist/src/extensions/api.js.map +1 -1
  106. package/dist/src/extensions/engine-check.d.ts +14 -0
  107. package/dist/src/extensions/engine-check.js +148 -0
  108. package/dist/src/extensions/engine-check.js.map +1 -0
  109. package/dist/src/extensions/loader.js +23 -0
  110. package/dist/src/extensions/loader.js.map +1 -1
  111. package/dist/src/extensions/marketplace.d.ts +24 -0
  112. package/dist/src/extensions/marketplace.js +98 -0
  113. package/dist/src/extensions/marketplace.js.map +1 -0
  114. package/dist/src/extensions/normalize-manifest.js +16 -4
  115. package/dist/src/extensions/normalize-manifest.js.map +1 -1
  116. package/dist/src/extensions/sdk/index.d.ts +2 -0
  117. package/dist/src/extensions/sdk/index.js +2 -1
  118. package/dist/src/extensions/sdk/index.js.map +1 -1
  119. package/dist/src/extensions/sdk/testing.d.ts +49 -3
  120. package/dist/src/extensions/sdk/testing.js +174 -5
  121. package/dist/src/extensions/sdk/testing.js.map +1 -1
  122. package/dist/src/extensions/types/core.d.ts +5 -0
  123. package/dist/src/extensions/types/manifest.d.ts +17 -0
  124. package/dist/src/extensions/when-context.d.ts +6 -0
  125. package/dist/src/extensions/when-context.js +28 -0
  126. package/dist/src/extensions/when-context.js.map +1 -0
  127. package/dist/src/extensions/when-expression.d.ts +11 -0
  128. package/dist/src/extensions/when-expression.js +215 -0
  129. package/dist/src/extensions/when-expression.js.map +1 -0
  130. package/dist/src/gateway/hono/app.js +1 -1
  131. package/dist/src/gateway/hono/app.js.map +1 -1
  132. package/dist/src/gateway/hono/lib/config-payload.d.ts +13 -0
  133. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +28 -0
  134. package/dist/src/gateway/hono/routes/auth-registry-extensions.js.map +1 -1
  135. package/dist/src/gateway/hono/routes/config.js +48 -0
  136. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  137. package/dist/src/gateway/hono/routes/dreaming.d.ts +3 -0
  138. package/dist/src/gateway/hono/routes/dreaming.js +198 -0
  139. package/dist/src/gateway/hono/routes/dreaming.js.map +1 -0
  140. package/dist/src/gateway/hono/routes/index.js +2 -0
  141. package/dist/src/gateway/hono/routes/index.js.map +1 -1
  142. package/dist/src/gateway/lock.js +1 -1
  143. package/dist/src/gateway/service.js +7 -0
  144. package/dist/src/gateway/service.js.map +1 -1
  145. package/dist/src/providers/index.d.ts +6 -3
  146. package/dist/src/providers/index.js +12 -23
  147. package/dist/src/providers/index.js.map +1 -1
  148. package/package.json +2 -1
  149. package/dist/gateway/static/root/assets/agents-BY_DaknM.js +0 -216
  150. package/dist/gateway/static/root/assets/agents-BY_DaknM.js.map +0 -1
  151. package/dist/gateway/static/root/assets/apps-page-BO3nQbJY.js +0 -2
  152. package/dist/gateway/static/root/assets/apps-page-BO3nQbJY.js.map +0 -1
  153. package/dist/gateway/static/root/assets/attachment-utils-core-Dt6UxMPV.js.map +0 -1
  154. package/dist/gateway/static/root/assets/channels-settings-CGzrrBlT.js +0 -9
  155. package/dist/gateway/static/root/assets/cron-page-BGCdDf2w.js +0 -2
  156. package/dist/gateway/static/root/assets/cron-utils-Dnks4wWv.js +0 -3
  157. package/dist/gateway/static/root/assets/dist-BG1ChbY9.js +0 -2
  158. package/dist/gateway/static/root/assets/extension-debug-page-CRC16AbL.js +0 -2
  159. package/dist/gateway/static/root/assets/extension-page-BagrJnbm.js +0 -2
  160. package/dist/gateway/static/root/assets/extension-settings-page-DEpxRKKK.js +0 -2
  161. package/dist/gateway/static/root/assets/extension-settings-page-DEpxRKKK.js.map +0 -1
  162. package/dist/gateway/static/root/assets/index-CYVs9x8D.css +0 -1
  163. package/dist/gateway/static/root/assets/index-KNzRh6gu.js +0 -150
  164. package/dist/gateway/static/root/assets/index-KNzRh6gu.js.map +0 -1
  165. package/dist/gateway/static/root/assets/logs-page-Bo9EsE_D.js +0 -2
  166. package/dist/gateway/static/root/assets/sessions-page-CDgXq8qp.js +0 -2
  167. package/dist/gateway/static/root/assets/settings-page-BWMTFST6.js +0 -2
  168. package/dist/gateway/static/root/assets/settings-page-BWMTFST6.js.map +0 -1
  169. package/dist/gateway/static/root/assets/skills-page-BRS5qYTw.js +0 -3
  170. package/dist/gateway/static/root/assets/vendor-swr-Dp4nzp5h.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"docx-preview-DxcHM3sR.js","names":["JSZip"],"sources":["../../../../../node_modules/.pnpm/docx-preview@0.3.7/node_modules/docx-preview/dist/docx-preview.mjs"],"sourcesContent":["/*\n * @license\n * docx-preview <https://github.com/VolodymyrBaydalka/docxjs>\n * Released under Apache License 2.0 <https://github.com/VolodymyrBaydalka/docxjs/blob/master/LICENSE>\n * Copyright Volodymyr Baydalka\n */\nimport JSZip from 'jszip';\n\nvar RelationshipTypes;\n(function (RelationshipTypes) {\n RelationshipTypes[\"OfficeDocument\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\";\n RelationshipTypes[\"FontTable\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable\";\n RelationshipTypes[\"Image\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\";\n RelationshipTypes[\"Numbering\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering\";\n RelationshipTypes[\"Styles\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\";\n RelationshipTypes[\"StylesWithEffects\"] = \"http://schemas.microsoft.com/office/2007/relationships/stylesWithEffects\";\n RelationshipTypes[\"Theme\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\";\n RelationshipTypes[\"Settings\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings\";\n RelationshipTypes[\"WebSettings\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings\";\n RelationshipTypes[\"Hyperlink\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\";\n RelationshipTypes[\"Footnotes\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes\";\n RelationshipTypes[\"Endnotes\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes\";\n RelationshipTypes[\"Footer\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer\";\n RelationshipTypes[\"Header\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/header\";\n RelationshipTypes[\"ExtendedProperties\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\";\n RelationshipTypes[\"CoreProperties\"] = \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\";\n RelationshipTypes[\"CustomProperties\"] = \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/custom-properties\";\n RelationshipTypes[\"Comments\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\";\n RelationshipTypes[\"CommentsExtended\"] = \"http://schemas.microsoft.com/office/2011/relationships/commentsExtended\";\n RelationshipTypes[\"AltChunk\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk\";\n})(RelationshipTypes || (RelationshipTypes = {}));\nfunction parseRelationships(root, xml) {\n return xml.elements(root).map(e => ({\n id: xml.attr(e, \"Id\"),\n type: xml.attr(e, \"Type\"),\n target: xml.attr(e, \"Target\"),\n targetMode: xml.attr(e, \"TargetMode\")\n }));\n}\n\nfunction escapeClassName(className) {\n return className?.replace(/[ .]+/g, '-').replace(/[&]+/g, 'and').toLowerCase();\n}\nfunction encloseFontFamily(fontFamily) {\n return /^[^\"'].*\\s.*[^\"']$/.test(fontFamily) ? `'${fontFamily}'` : fontFamily;\n}\nfunction splitPath(path) {\n let si = path.lastIndexOf('/') + 1;\n let folder = si == 0 ? \"\" : path.substring(0, si);\n let fileName = si == 0 ? path : path.substring(si);\n return [folder, fileName];\n}\nfunction resolvePath(path, base) {\n try {\n const prefix = \"http://docx/\";\n const url = new URL(path, prefix + base).toString();\n return url.substring(prefix.length);\n }\n catch {\n return `${base}${path}`;\n }\n}\nfunction keyBy(array, by) {\n return array.reduce((a, x) => {\n a[by(x)] = x;\n return a;\n }, {});\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result);\n reader.onerror = () => reject();\n reader.readAsDataURL(blob);\n });\n}\nfunction isObject(item) {\n return item && typeof item === 'object' && !Array.isArray(item);\n}\nfunction isString(item) {\n return typeof item === 'string' || item instanceof String;\n}\nfunction mergeDeep(target, ...sources) {\n if (!sources.length)\n return target;\n const source = sources.shift();\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n const val = target[key] ?? (target[key] = {});\n mergeDeep(val, source[key]);\n }\n else {\n target[key] = source[key];\n }\n }\n }\n return mergeDeep(target, ...sources);\n}\nfunction asArray(val) {\n return Array.isArray(val) ? val : [val];\n}\nfunction clamp(val, min, max) {\n return min > val ? min : (max < val ? max : val);\n}\n\nconst ns$1 = {\n wordml: \"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"};\nconst LengthUsage = {\n Dxa: { mul: 0.05, unit: \"pt\" },\n Emu: { mul: 1 / 12700, unit: \"pt\" },\n FontSize: { mul: 0.5, unit: \"pt\" },\n Border: { mul: 0.125, unit: \"pt\", min: 0.25, max: 12 },\n Point: { mul: 1, unit: \"pt\" },\n Percent: { mul: 0.02, unit: \"%\" }};\nfunction convertLength(val, usage = LengthUsage.Dxa) {\n if (val == null || /.+(p[xt]|[%])$/.test(val)) {\n return val;\n }\n var num = parseInt(val) * usage.mul;\n if (usage.min && usage.max)\n num = clamp(num, usage.min, usage.max);\n return `${num.toFixed(2)}${usage.unit}`;\n}\nfunction convertBoolean(v, defaultValue = false) {\n switch (v) {\n case \"1\": return true;\n case \"0\": return false;\n case \"on\": return true;\n case \"off\": return false;\n case \"true\": return true;\n case \"false\": return false;\n default: return defaultValue;\n }\n}\nfunction parseCommonProperty(elem, props, xml) {\n if (elem.namespaceURI != ns$1.wordml)\n return false;\n switch (elem.localName) {\n case \"color\":\n props.color = xml.attr(elem, \"val\");\n break;\n case \"sz\":\n props.fontSize = xml.lengthAttr(elem, \"val\", LengthUsage.FontSize);\n break;\n default:\n return false;\n }\n return true;\n}\n\nfunction parseXmlString(xmlString, trimXmlDeclaration = false) {\n if (trimXmlDeclaration)\n xmlString = xmlString.replace(/<[?].*[?]>/, \"\");\n xmlString = removeUTF8BOM(xmlString);\n const result = new DOMParser().parseFromString(xmlString, \"application/xml\");\n const errorText = hasXmlParserError(result);\n if (errorText)\n throw new Error(errorText);\n return result;\n}\nfunction hasXmlParserError(doc) {\n return doc.getElementsByTagName(\"parsererror\")[0]?.textContent;\n}\nfunction removeUTF8BOM(data) {\n return data.charCodeAt(0) === 0xFEFF ? data.substring(1) : data;\n}\nfunction serializeXmlString(elem) {\n return new XMLSerializer().serializeToString(elem);\n}\nclass XmlParser {\n elements(elem, localName = null) {\n const result = [];\n for (let i = 0, l = elem.childNodes.length; i < l; i++) {\n let c = elem.childNodes.item(i);\n if (c.nodeType == Node.ELEMENT_NODE && (localName == null || c.localName == localName))\n result.push(c);\n }\n return result;\n }\n element(elem, localName) {\n for (let i = 0, l = elem.childNodes.length; i < l; i++) {\n let c = elem.childNodes.item(i);\n if (c.nodeType == 1 && c.localName == localName)\n return c;\n }\n return null;\n }\n elementAttr(elem, localName, attrLocalName) {\n var el = this.element(elem, localName);\n return el ? this.attr(el, attrLocalName) : undefined;\n }\n attrs(elem) {\n return Array.from(elem.attributes);\n }\n attr(elem, localName) {\n for (let i = 0, l = elem.attributes.length; i < l; i++) {\n let a = elem.attributes.item(i);\n if (a.localName == localName)\n return a.value;\n }\n return null;\n }\n intAttr(node, attrName, defaultValue = null) {\n var val = this.attr(node, attrName);\n return val ? parseInt(val) : defaultValue;\n }\n hexAttr(node, attrName, defaultValue = null) {\n var val = this.attr(node, attrName);\n return val ? parseInt(val, 16) : defaultValue;\n }\n floatAttr(node, attrName, defaultValue = null) {\n var val = this.attr(node, attrName);\n return val ? parseFloat(val) : defaultValue;\n }\n boolAttr(node, attrName, defaultValue = null) {\n return convertBoolean(this.attr(node, attrName), defaultValue);\n }\n lengthAttr(node, attrName, usage = LengthUsage.Dxa) {\n return convertLength(this.attr(node, attrName), usage);\n }\n}\nconst globalXmlParser = new XmlParser();\n\nclass Part {\n constructor(_package, path) {\n this._package = _package;\n this.path = path;\n }\n async load() {\n this.rels = await this._package.loadRelationships(this.path);\n const xmlText = await this._package.load(this.path);\n const xmlDoc = this._package.parseXmlDocument(xmlText);\n if (this._package.options.keepOrigin) {\n this._xmlDocument = xmlDoc;\n }\n this.parseXml(xmlDoc.firstElementChild);\n }\n save() {\n this._package.update(this.path, serializeXmlString(this._xmlDocument));\n }\n parseXml(root) {\n }\n}\n\nconst embedFontTypeMap = {\n embedRegular: 'regular',\n embedBold: 'bold',\n embedItalic: 'italic',\n embedBoldItalic: 'boldItalic',\n};\nfunction parseFonts(root, xml) {\n return xml.elements(root).map(el => parseFont(el, xml));\n}\nfunction parseFont(elem, xml) {\n let result = {\n name: xml.attr(elem, \"name\"),\n embedFontRefs: []\n };\n for (let el of xml.elements(elem)) {\n switch (el.localName) {\n case \"family\":\n result.family = xml.attr(el, \"val\");\n break;\n case \"altName\":\n result.altName = xml.attr(el, \"val\");\n break;\n case \"embedRegular\":\n case \"embedBold\":\n case \"embedItalic\":\n case \"embedBoldItalic\":\n result.embedFontRefs.push(parseEmbedFontRef(el, xml));\n break;\n }\n }\n return result;\n}\nfunction parseEmbedFontRef(elem, xml) {\n return {\n id: xml.attr(elem, \"id\"),\n key: xml.attr(elem, \"fontKey\"),\n type: embedFontTypeMap[elem.localName]\n };\n}\n\nclass FontTablePart extends Part {\n parseXml(root) {\n this.fonts = parseFonts(root, this._package.xmlParser);\n }\n}\n\nclass OpenXmlPackage {\n constructor(_zip, options) {\n this._zip = _zip;\n this.options = options;\n this.xmlParser = new XmlParser();\n }\n get(path) {\n const p = normalizePath(path);\n return this._zip.files[p] ?? this._zip.files[p.replace(/\\//g, '\\\\')];\n }\n update(path, content) {\n this._zip.file(path, content);\n }\n static async load(input, options) {\n const zip = await JSZip.loadAsync(input);\n return new OpenXmlPackage(zip, options);\n }\n save(type = \"blob\") {\n return this._zip.generateAsync({ type });\n }\n load(path, type = \"string\") {\n return this.get(path)?.async(type) ?? Promise.resolve(null);\n }\n async loadRelationships(path = null) {\n let relsPath = `_rels/.rels`;\n if (path != null) {\n const [f, fn] = splitPath(path);\n relsPath = `${f}_rels/${fn}.rels`;\n }\n const txt = await this.load(relsPath);\n return txt ? parseRelationships(this.parseXmlDocument(txt).firstElementChild, this.xmlParser) : null;\n }\n parseXmlDocument(txt) {\n return parseXmlString(txt, this.options.trimXmlDeclaration);\n }\n}\nfunction normalizePath(path) {\n return path.startsWith('/') ? path.substr(1) : path;\n}\n\nclass DocumentPart extends Part {\n constructor(pkg, path, parser) {\n super(pkg, path);\n this._documentParser = parser;\n }\n parseXml(root) {\n this.body = this._documentParser.parseDocumentFile(root);\n }\n}\n\nfunction parseBorder(elem, xml) {\n return {\n type: xml.attr(elem, \"val\"),\n color: xml.attr(elem, \"color\"),\n size: xml.lengthAttr(elem, \"sz\", LengthUsage.Border),\n offset: xml.lengthAttr(elem, \"space\", LengthUsage.Point),\n frame: xml.boolAttr(elem, 'frame'),\n shadow: xml.boolAttr(elem, 'shadow')\n };\n}\nfunction parseBorders(elem, xml) {\n var result = {};\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"left\":\n result.left = parseBorder(e, xml);\n break;\n case \"top\":\n result.top = parseBorder(e, xml);\n break;\n case \"right\":\n result.right = parseBorder(e, xml);\n break;\n case \"bottom\":\n result.bottom = parseBorder(e, xml);\n break;\n }\n }\n return result;\n}\n\nvar SectionType;\n(function (SectionType) {\n SectionType[\"Continuous\"] = \"continuous\";\n SectionType[\"NextPage\"] = \"nextPage\";\n SectionType[\"NextColumn\"] = \"nextColumn\";\n SectionType[\"EvenPage\"] = \"evenPage\";\n SectionType[\"OddPage\"] = \"oddPage\";\n})(SectionType || (SectionType = {}));\nfunction parseSectionProperties(elem, xml = globalXmlParser) {\n var section = {};\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"pgSz\":\n section.pageSize = {\n width: xml.lengthAttr(e, \"w\"),\n height: xml.lengthAttr(e, \"h\"),\n orientation: xml.attr(e, \"orient\")\n };\n break;\n case \"type\":\n section.type = xml.attr(e, \"val\");\n break;\n case \"pgMar\":\n section.pageMargins = {\n left: xml.lengthAttr(e, \"left\"),\n right: xml.lengthAttr(e, \"right\"),\n top: xml.lengthAttr(e, \"top\"),\n bottom: xml.lengthAttr(e, \"bottom\"),\n header: xml.lengthAttr(e, \"header\"),\n footer: xml.lengthAttr(e, \"footer\"),\n gutter: xml.lengthAttr(e, \"gutter\"),\n };\n break;\n case \"cols\":\n section.columns = parseColumns(e, xml);\n break;\n case \"headerReference\":\n (section.headerRefs ?? (section.headerRefs = [])).push(parseFooterHeaderReference(e, xml));\n break;\n case \"footerReference\":\n (section.footerRefs ?? (section.footerRefs = [])).push(parseFooterHeaderReference(e, xml));\n break;\n case \"titlePg\":\n section.titlePage = xml.boolAttr(e, \"val\", true);\n break;\n case \"pgBorders\":\n section.pageBorders = parseBorders(e, xml);\n break;\n case \"pgNumType\":\n section.pageNumber = parsePageNumber(e, xml);\n break;\n }\n }\n return section;\n}\nfunction parseColumns(elem, xml) {\n return {\n numberOfColumns: xml.intAttr(elem, \"num\"),\n space: xml.lengthAttr(elem, \"space\"),\n separator: xml.boolAttr(elem, \"sep\"),\n equalWidth: xml.boolAttr(elem, \"equalWidth\", true),\n columns: xml.elements(elem, \"col\")\n .map(e => ({\n width: xml.lengthAttr(e, \"w\"),\n space: xml.lengthAttr(e, \"space\")\n }))\n };\n}\nfunction parsePageNumber(elem, xml) {\n return {\n chapSep: xml.attr(elem, \"chapSep\"),\n chapStyle: xml.attr(elem, \"chapStyle\"),\n format: xml.attr(elem, \"fmt\"),\n start: xml.intAttr(elem, \"start\")\n };\n}\nfunction parseFooterHeaderReference(elem, xml) {\n return {\n id: xml.attr(elem, \"id\"),\n type: xml.attr(elem, \"type\"),\n };\n}\n\nfunction parseLineSpacing(elem, xml) {\n return {\n before: xml.lengthAttr(elem, \"before\"),\n after: xml.lengthAttr(elem, \"after\"),\n line: xml.intAttr(elem, \"line\"),\n lineRule: xml.attr(elem, \"lineRule\")\n };\n}\n\nfunction parseRunProperties(elem, xml) {\n let result = {};\n for (let el of xml.elements(elem)) {\n parseRunProperty(el, result, xml);\n }\n return result;\n}\nfunction parseRunProperty(elem, props, xml) {\n if (parseCommonProperty(elem, props, xml))\n return true;\n return false;\n}\n\nfunction parseParagraphProperties(elem, xml) {\n let result = {};\n for (let el of xml.elements(elem)) {\n parseParagraphProperty(el, result, xml);\n }\n return result;\n}\nfunction parseParagraphProperty(elem, props, xml) {\n if (elem.namespaceURI != ns$1.wordml)\n return false;\n if (parseCommonProperty(elem, props, xml))\n return true;\n switch (elem.localName) {\n case \"tabs\":\n props.tabs = parseTabs(elem, xml);\n break;\n case \"sectPr\":\n props.sectionProps = parseSectionProperties(elem, xml);\n break;\n case \"numPr\":\n props.numbering = parseNumbering$1(elem, xml);\n break;\n case \"spacing\":\n props.lineSpacing = parseLineSpacing(elem, xml);\n return false;\n case \"textAlignment\":\n props.textAlignment = xml.attr(elem, \"val\");\n return false;\n case \"keepLines\":\n props.keepLines = xml.boolAttr(elem, \"val\", true);\n break;\n case \"keepNext\":\n props.keepNext = xml.boolAttr(elem, \"val\", true);\n break;\n case \"pageBreakBefore\":\n props.pageBreakBefore = xml.boolAttr(elem, \"val\", true);\n break;\n case \"outlineLvl\":\n props.outlineLevel = xml.intAttr(elem, \"val\");\n break;\n case \"pStyle\":\n props.styleName = xml.attr(elem, \"val\");\n break;\n case \"rPr\":\n props.runProps = parseRunProperties(elem, xml);\n break;\n default:\n return false;\n }\n return true;\n}\nfunction parseTabs(elem, xml) {\n return xml.elements(elem, \"tab\")\n .map(e => ({\n position: xml.lengthAttr(e, \"pos\"),\n leader: xml.attr(e, \"leader\"),\n style: xml.attr(e, \"val\")\n }));\n}\nfunction parseNumbering$1(elem, xml) {\n var result = {};\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"numId\":\n result.id = xml.attr(e, \"val\");\n break;\n case \"ilvl\":\n result.level = xml.intAttr(e, \"val\");\n break;\n }\n }\n return result;\n}\n\nfunction parseNumberingPart(elem, xml) {\n let result = {\n numberings: [],\n abstractNumberings: [],\n bulletPictures: []\n };\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"num\":\n result.numberings.push(parseNumbering(e, xml));\n break;\n case \"abstractNum\":\n result.abstractNumberings.push(parseAbstractNumbering(e, xml));\n break;\n case \"numPicBullet\":\n result.bulletPictures.push(parseNumberingBulletPicture(e, xml));\n break;\n }\n }\n return result;\n}\nfunction parseNumbering(elem, xml) {\n let result = {\n id: xml.attr(elem, 'numId'),\n overrides: []\n };\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"abstractNumId\":\n result.abstractId = xml.attr(e, \"val\");\n break;\n case \"lvlOverride\":\n result.overrides.push(parseNumberingLevelOverrride(e, xml));\n break;\n }\n }\n return result;\n}\nfunction parseAbstractNumbering(elem, xml) {\n let result = {\n id: xml.attr(elem, 'abstractNumId'),\n levels: []\n };\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"name\":\n result.name = xml.attr(e, \"val\");\n break;\n case \"multiLevelType\":\n result.multiLevelType = xml.attr(e, \"val\");\n break;\n case \"numStyleLink\":\n result.numberingStyleLink = xml.attr(e, \"val\");\n break;\n case \"styleLink\":\n result.styleLink = xml.attr(e, \"val\");\n break;\n case \"lvl\":\n result.levels.push(parseNumberingLevel(e, xml));\n break;\n }\n }\n return result;\n}\nfunction parseNumberingLevel(elem, xml) {\n let result = {\n level: xml.intAttr(elem, 'ilvl')\n };\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"start\":\n result.start = xml.attr(e, \"val\");\n break;\n case \"lvlRestart\":\n result.restart = xml.intAttr(e, \"val\");\n break;\n case \"numFmt\":\n result.format = xml.attr(e, \"val\");\n break;\n case \"lvlText\":\n result.text = xml.attr(e, \"val\");\n break;\n case \"lvlJc\":\n result.justification = xml.attr(e, \"val\");\n break;\n case \"lvlPicBulletId\":\n result.bulletPictureId = xml.attr(e, \"val\");\n break;\n case \"pStyle\":\n result.paragraphStyle = xml.attr(e, \"val\");\n break;\n case \"pPr\":\n result.paragraphProps = parseParagraphProperties(e, xml);\n break;\n case \"rPr\":\n result.runProps = parseRunProperties(e, xml);\n break;\n }\n }\n return result;\n}\nfunction parseNumberingLevelOverrride(elem, xml) {\n let result = {\n level: xml.intAttr(elem, 'ilvl')\n };\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"startOverride\":\n result.start = xml.intAttr(e, \"val\");\n break;\n case \"lvl\":\n result.numberingLevel = parseNumberingLevel(e, xml);\n break;\n }\n }\n return result;\n}\nfunction parseNumberingBulletPicture(elem, xml) {\n var pict = xml.element(elem, \"pict\");\n var shape = pict && xml.element(pict, \"shape\");\n var imagedata = shape && xml.element(shape, \"imagedata\");\n return imagedata ? {\n id: xml.attr(elem, \"numPicBulletId\"),\n referenceId: xml.attr(imagedata, \"id\"),\n style: xml.attr(shape, \"style\")\n } : null;\n}\n\nclass NumberingPart extends Part {\n constructor(pkg, path, parser) {\n super(pkg, path);\n this._documentParser = parser;\n }\n parseXml(root) {\n Object.assign(this, parseNumberingPart(root, this._package.xmlParser));\n this.domNumberings = this._documentParser.parseNumberingFile(root);\n }\n}\n\nclass StylesPart extends Part {\n constructor(pkg, path, parser) {\n super(pkg, path);\n this._documentParser = parser;\n }\n parseXml(root) {\n this.styles = this._documentParser.parseStylesFile(root);\n }\n}\n\nvar DomType;\n(function (DomType) {\n DomType[\"Document\"] = \"document\";\n DomType[\"Paragraph\"] = \"paragraph\";\n DomType[\"Run\"] = \"run\";\n DomType[\"Break\"] = \"break\";\n DomType[\"NoBreakHyphen\"] = \"noBreakHyphen\";\n DomType[\"Table\"] = \"table\";\n DomType[\"Row\"] = \"row\";\n DomType[\"Cell\"] = \"cell\";\n DomType[\"Hyperlink\"] = \"hyperlink\";\n DomType[\"SmartTag\"] = \"smartTag\";\n DomType[\"Drawing\"] = \"drawing\";\n DomType[\"Image\"] = \"image\";\n DomType[\"Text\"] = \"text\";\n DomType[\"Tab\"] = \"tab\";\n DomType[\"Symbol\"] = \"symbol\";\n DomType[\"BookmarkStart\"] = \"bookmarkStart\";\n DomType[\"BookmarkEnd\"] = \"bookmarkEnd\";\n DomType[\"Footer\"] = \"footer\";\n DomType[\"Header\"] = \"header\";\n DomType[\"FootnoteReference\"] = \"footnoteReference\";\n DomType[\"EndnoteReference\"] = \"endnoteReference\";\n DomType[\"Footnote\"] = \"footnote\";\n DomType[\"Endnote\"] = \"endnote\";\n DomType[\"SimpleField\"] = \"simpleField\";\n DomType[\"ComplexField\"] = \"complexField\";\n DomType[\"Instruction\"] = \"instruction\";\n DomType[\"VmlPicture\"] = \"vmlPicture\";\n DomType[\"MmlMath\"] = \"mmlMath\";\n DomType[\"MmlMathParagraph\"] = \"mmlMathParagraph\";\n DomType[\"MmlFraction\"] = \"mmlFraction\";\n DomType[\"MmlFunction\"] = \"mmlFunction\";\n DomType[\"MmlFunctionName\"] = \"mmlFunctionName\";\n DomType[\"MmlNumerator\"] = \"mmlNumerator\";\n DomType[\"MmlDenominator\"] = \"mmlDenominator\";\n DomType[\"MmlRadical\"] = \"mmlRadical\";\n DomType[\"MmlBase\"] = \"mmlBase\";\n DomType[\"MmlDegree\"] = \"mmlDegree\";\n DomType[\"MmlSuperscript\"] = \"mmlSuperscript\";\n DomType[\"MmlSubscript\"] = \"mmlSubscript\";\n DomType[\"MmlPreSubSuper\"] = \"mmlPreSubSuper\";\n DomType[\"MmlSubArgument\"] = \"mmlSubArgument\";\n DomType[\"MmlSuperArgument\"] = \"mmlSuperArgument\";\n DomType[\"MmlNary\"] = \"mmlNary\";\n DomType[\"MmlDelimiter\"] = \"mmlDelimiter\";\n DomType[\"MmlRun\"] = \"mmlRun\";\n DomType[\"MmlEquationArray\"] = \"mmlEquationArray\";\n DomType[\"MmlLimit\"] = \"mmlLimit\";\n DomType[\"MmlLimitLower\"] = \"mmlLimitLower\";\n DomType[\"MmlMatrix\"] = \"mmlMatrix\";\n DomType[\"MmlMatrixRow\"] = \"mmlMatrixRow\";\n DomType[\"MmlBox\"] = \"mmlBox\";\n DomType[\"MmlBar\"] = \"mmlBar\";\n DomType[\"MmlGroupChar\"] = \"mmlGroupChar\";\n DomType[\"VmlElement\"] = \"vmlElement\";\n DomType[\"Inserted\"] = \"inserted\";\n DomType[\"Deleted\"] = \"deleted\";\n DomType[\"DeletedText\"] = \"deletedText\";\n DomType[\"Comment\"] = \"comment\";\n DomType[\"CommentReference\"] = \"commentReference\";\n DomType[\"CommentRangeStart\"] = \"commentRangeStart\";\n DomType[\"CommentRangeEnd\"] = \"commentRangeEnd\";\n DomType[\"AltChunk\"] = \"altChunk\";\n})(DomType || (DomType = {}));\nclass OpenXmlElementBase {\n constructor() {\n this.children = [];\n this.cssStyle = {};\n }\n}\n\nclass WmlHeader extends OpenXmlElementBase {\n constructor() {\n super(...arguments);\n this.type = DomType.Header;\n }\n}\nclass WmlFooter extends OpenXmlElementBase {\n constructor() {\n super(...arguments);\n this.type = DomType.Footer;\n }\n}\n\nclass BaseHeaderFooterPart extends Part {\n constructor(pkg, path, parser) {\n super(pkg, path);\n this._documentParser = parser;\n }\n parseXml(root) {\n this.rootElement = this.createRootElement();\n this.rootElement.children = this._documentParser.parseBodyElements(root);\n }\n}\nclass HeaderPart extends BaseHeaderFooterPart {\n createRootElement() {\n return new WmlHeader();\n }\n}\nclass FooterPart extends BaseHeaderFooterPart {\n createRootElement() {\n return new WmlFooter();\n }\n}\n\nfunction parseExtendedProps(root, xmlParser) {\n const result = {};\n for (let el of xmlParser.elements(root)) {\n switch (el.localName) {\n case \"Template\":\n result.template = el.textContent;\n break;\n case \"Pages\":\n result.pages = safeParseToInt(el.textContent);\n break;\n case \"Words\":\n result.words = safeParseToInt(el.textContent);\n break;\n case \"Characters\":\n result.characters = safeParseToInt(el.textContent);\n break;\n case \"Application\":\n result.application = el.textContent;\n break;\n case \"Lines\":\n result.lines = safeParseToInt(el.textContent);\n break;\n case \"Paragraphs\":\n result.paragraphs = safeParseToInt(el.textContent);\n break;\n case \"Company\":\n result.company = el.textContent;\n break;\n case \"AppVersion\":\n result.appVersion = el.textContent;\n break;\n }\n }\n return result;\n}\nfunction safeParseToInt(value) {\n if (typeof value === 'undefined')\n return;\n return parseInt(value);\n}\n\nclass ExtendedPropsPart extends Part {\n parseXml(root) {\n this.props = parseExtendedProps(root, this._package.xmlParser);\n }\n}\n\nfunction parseCoreProps(root, xmlParser) {\n const result = {};\n for (let el of xmlParser.elements(root)) {\n switch (el.localName) {\n case \"title\":\n result.title = el.textContent;\n break;\n case \"description\":\n result.description = el.textContent;\n break;\n case \"subject\":\n result.subject = el.textContent;\n break;\n case \"creator\":\n result.creator = el.textContent;\n break;\n case \"keywords\":\n result.keywords = el.textContent;\n break;\n case \"language\":\n result.language = el.textContent;\n break;\n case \"lastModifiedBy\":\n result.lastModifiedBy = el.textContent;\n break;\n case \"revision\":\n el.textContent && (result.revision = parseInt(el.textContent));\n break;\n }\n }\n return result;\n}\n\nclass CorePropsPart extends Part {\n parseXml(root) {\n this.props = parseCoreProps(root, this._package.xmlParser);\n }\n}\n\nclass DmlTheme {\n}\nfunction parseTheme(elem, xml) {\n var result = new DmlTheme();\n var themeElements = xml.element(elem, \"themeElements\");\n for (let el of xml.elements(themeElements)) {\n switch (el.localName) {\n case \"clrScheme\":\n result.colorScheme = parseColorScheme(el, xml);\n break;\n case \"fontScheme\":\n result.fontScheme = parseFontScheme(el, xml);\n break;\n }\n }\n return result;\n}\nfunction parseColorScheme(elem, xml) {\n var result = {\n name: xml.attr(elem, \"name\"),\n colors: {}\n };\n for (let el of xml.elements(elem)) {\n var srgbClr = xml.element(el, \"srgbClr\");\n var sysClr = xml.element(el, \"sysClr\");\n if (srgbClr) {\n result.colors[el.localName] = xml.attr(srgbClr, \"val\");\n }\n else if (sysClr) {\n result.colors[el.localName] = xml.attr(sysClr, \"lastClr\");\n }\n }\n return result;\n}\nfunction parseFontScheme(elem, xml) {\n var result = {\n name: xml.attr(elem, \"name\"),\n };\n for (let el of xml.elements(elem)) {\n switch (el.localName) {\n case \"majorFont\":\n result.majorFont = parseFontInfo(el, xml);\n break;\n case \"minorFont\":\n result.minorFont = parseFontInfo(el, xml);\n break;\n }\n }\n return result;\n}\nfunction parseFontInfo(elem, xml) {\n return {\n latinTypeface: xml.elementAttr(elem, \"latin\", \"typeface\"),\n eaTypeface: xml.elementAttr(elem, \"ea\", \"typeface\"),\n csTypeface: xml.elementAttr(elem, \"cs\", \"typeface\"),\n };\n}\n\nclass ThemePart extends Part {\n constructor(pkg, path) {\n super(pkg, path);\n }\n parseXml(root) {\n this.theme = parseTheme(root, this._package.xmlParser);\n }\n}\n\nclass WmlBaseNote {\n}\nclass WmlFootnote extends WmlBaseNote {\n constructor() {\n super(...arguments);\n this.type = DomType.Footnote;\n }\n}\nclass WmlEndnote extends WmlBaseNote {\n constructor() {\n super(...arguments);\n this.type = DomType.Endnote;\n }\n}\n\nclass BaseNotePart extends Part {\n constructor(pkg, path, parser) {\n super(pkg, path);\n this._documentParser = parser;\n }\n}\nclass FootnotesPart extends BaseNotePart {\n constructor(pkg, path, parser) {\n super(pkg, path, parser);\n }\n parseXml(root) {\n this.notes = this._documentParser.parseNotes(root, \"footnote\", WmlFootnote);\n }\n}\nclass EndnotesPart extends BaseNotePart {\n constructor(pkg, path, parser) {\n super(pkg, path, parser);\n }\n parseXml(root) {\n this.notes = this._documentParser.parseNotes(root, \"endnote\", WmlEndnote);\n }\n}\n\nfunction parseSettings(elem, xml) {\n var result = {};\n for (let el of xml.elements(elem)) {\n switch (el.localName) {\n case \"defaultTabStop\":\n result.defaultTabStop = xml.lengthAttr(el, \"val\");\n break;\n case \"footnotePr\":\n result.footnoteProps = parseNoteProperties(el, xml);\n break;\n case \"endnotePr\":\n result.endnoteProps = parseNoteProperties(el, xml);\n break;\n case \"autoHyphenation\":\n result.autoHyphenation = xml.boolAttr(el, \"val\");\n break;\n }\n }\n return result;\n}\nfunction parseNoteProperties(elem, xml) {\n var result = {\n defaultNoteIds: []\n };\n for (let el of xml.elements(elem)) {\n switch (el.localName) {\n case \"numFmt\":\n result.nummeringFormat = xml.attr(el, \"val\");\n break;\n case \"footnote\":\n case \"endnote\":\n result.defaultNoteIds.push(xml.attr(el, \"id\"));\n break;\n }\n }\n return result;\n}\n\nclass SettingsPart extends Part {\n constructor(pkg, path) {\n super(pkg, path);\n }\n parseXml(root) {\n this.settings = parseSettings(root, this._package.xmlParser);\n }\n}\n\nfunction parseCustomProps(root, xml) {\n return xml.elements(root, \"property\").map(e => {\n const firstChild = e.firstChild;\n return {\n formatId: xml.attr(e, \"fmtid\"),\n name: xml.attr(e, \"name\"),\n type: firstChild.nodeName,\n value: firstChild.textContent\n };\n });\n}\n\nclass CustomPropsPart extends Part {\n parseXml(root) {\n this.props = parseCustomProps(root, this._package.xmlParser);\n }\n}\n\nclass CommentsPart extends Part {\n constructor(pkg, path, parser) {\n super(pkg, path);\n this._documentParser = parser;\n }\n parseXml(root) {\n this.comments = this._documentParser.parseComments(root);\n this.commentMap = keyBy(this.comments, x => x.id);\n }\n}\n\nclass CommentsExtendedPart extends Part {\n constructor(pkg, path) {\n super(pkg, path);\n this.comments = [];\n }\n parseXml(root) {\n const xml = this._package.xmlParser;\n for (let el of xml.elements(root, \"commentEx\")) {\n this.comments.push({\n paraId: xml.attr(el, 'paraId'),\n paraIdParent: xml.attr(el, 'paraIdParent'),\n done: xml.boolAttr(el, 'done')\n });\n }\n this.commentMap = keyBy(this.comments, x => x.paraId);\n }\n}\n\nconst topLevelRels = [\n { type: RelationshipTypes.OfficeDocument, target: \"word/document.xml\" },\n { type: RelationshipTypes.ExtendedProperties, target: \"docProps/app.xml\" },\n { type: RelationshipTypes.CoreProperties, target: \"docProps/core.xml\" },\n { type: RelationshipTypes.CustomProperties, target: \"docProps/custom.xml\" },\n];\nclass WordDocument {\n constructor() {\n this.parts = [];\n this.partsMap = {};\n }\n static async load(blob, parser, options) {\n var d = new WordDocument();\n d._options = options;\n d._parser = parser;\n d._package = await OpenXmlPackage.load(blob, options);\n d.rels = await d._package.loadRelationships();\n await Promise.all(topLevelRels.map(rel => {\n const r = d.rels.find(x => x.type === rel.type) ?? rel;\n return d.loadRelationshipPart(r.target, r.type);\n }));\n return d;\n }\n save(type = \"blob\") {\n return this._package.save(type);\n }\n async loadRelationshipPart(path, type) {\n if (this.partsMap[path])\n return this.partsMap[path];\n if (!this._package.get(path))\n return null;\n let part = null;\n switch (type) {\n case RelationshipTypes.OfficeDocument:\n this.documentPart = part = new DocumentPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.FontTable:\n this.fontTablePart = part = new FontTablePart(this._package, path);\n break;\n case RelationshipTypes.Numbering:\n this.numberingPart = part = new NumberingPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.Styles:\n this.stylesPart = part = new StylesPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.Theme:\n this.themePart = part = new ThemePart(this._package, path);\n break;\n case RelationshipTypes.Footnotes:\n this.footnotesPart = part = new FootnotesPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.Endnotes:\n this.endnotesPart = part = new EndnotesPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.Footer:\n part = new FooterPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.Header:\n part = new HeaderPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.CoreProperties:\n this.corePropsPart = part = new CorePropsPart(this._package, path);\n break;\n case RelationshipTypes.ExtendedProperties:\n this.extendedPropsPart = part = new ExtendedPropsPart(this._package, path);\n break;\n case RelationshipTypes.CustomProperties:\n part = new CustomPropsPart(this._package, path);\n break;\n case RelationshipTypes.Settings:\n this.settingsPart = part = new SettingsPart(this._package, path);\n break;\n case RelationshipTypes.Comments:\n this.commentsPart = part = new CommentsPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.CommentsExtended:\n this.commentsExtendedPart = part = new CommentsExtendedPart(this._package, path);\n break;\n }\n if (part == null)\n return Promise.resolve(null);\n this.partsMap[path] = part;\n this.parts.push(part);\n await part.load();\n if (part.rels?.length > 0) {\n const [folder] = splitPath(part.path);\n await Promise.all(part.rels.map(rel => this.loadRelationshipPart(resolvePath(rel.target, folder), rel.type)));\n }\n return part;\n }\n async loadDocumentImage(id, part) {\n const x = await this.loadResource(part ?? this.documentPart, id, \"blob\");\n return this.blobToURL(x);\n }\n async loadNumberingImage(id) {\n const x = await this.loadResource(this.numberingPart, id, \"blob\");\n return this.blobToURL(x);\n }\n async loadFont(id, key) {\n const x = await this.loadResource(this.fontTablePart, id, \"uint8array\");\n return x ? this.blobToURL(new Blob([deobfuscate(x, key)])) : x;\n }\n async loadAltChunk(id, part) {\n return await this.loadResource(part ?? this.documentPart, id, \"string\");\n }\n blobToURL(blob) {\n if (!blob)\n return null;\n if (this._options.useBase64URL) {\n return blobToBase64(blob);\n }\n return URL.createObjectURL(blob);\n }\n findPartByRelId(id, basePart = null) {\n var rel = (basePart.rels ?? this.rels).find(r => r.id == id);\n const folder = basePart ? splitPath(basePart.path)[0] : '';\n return rel ? this.partsMap[resolvePath(rel.target, folder)] : null;\n }\n getPathById(part, id) {\n const rel = part.rels.find(x => x.id == id);\n const [folder] = splitPath(part.path);\n return rel ? resolvePath(rel.target, folder) : null;\n }\n loadResource(part, id, outputType) {\n const path = this.getPathById(part, id);\n return path ? this._package.load(path, outputType) : Promise.resolve(null);\n }\n}\nfunction deobfuscate(data, guidKey) {\n const len = 16;\n const trimmed = guidKey.replace(/{|}|-/g, \"\");\n const numbers = new Array(len);\n for (let i = 0; i < len; i++)\n numbers[len - i - 1] = parseInt(trimmed.substring(i * 2, i * 2 + 2), 16);\n for (let i = 0; i < 32; i++)\n data[i] = data[i] ^ numbers[i % len];\n return data;\n}\n\nfunction parseBookmarkStart(elem, xml) {\n return {\n type: DomType.BookmarkStart,\n id: xml.attr(elem, \"id\"),\n name: xml.attr(elem, \"name\"),\n colFirst: xml.intAttr(elem, \"colFirst\"),\n colLast: xml.intAttr(elem, \"colLast\")\n };\n}\nfunction parseBookmarkEnd(elem, xml) {\n return {\n type: DomType.BookmarkEnd,\n id: xml.attr(elem, \"id\")\n };\n}\n\nclass VmlElement extends OpenXmlElementBase {\n constructor() {\n super(...arguments);\n this.type = DomType.VmlElement;\n this.attrs = {};\n }\n}\nfunction parseVmlElement(elem, parser) {\n var result = new VmlElement();\n switch (elem.localName) {\n case \"rect\":\n result.tagName = \"rect\";\n Object.assign(result.attrs, { width: '100%', height: '100%' });\n break;\n case \"oval\":\n result.tagName = \"ellipse\";\n Object.assign(result.attrs, { cx: \"50%\", cy: \"50%\", rx: \"50%\", ry: \"50%\" });\n break;\n case \"line\":\n result.tagName = \"line\";\n break;\n case \"shape\":\n result.tagName = \"g\";\n break;\n case \"textbox\":\n result.tagName = \"foreignObject\";\n Object.assign(result.attrs, { width: '100%', height: '100%' });\n break;\n default:\n return null;\n }\n for (const at of globalXmlParser.attrs(elem)) {\n switch (at.localName) {\n case \"style\":\n result.cssStyleText = at.value;\n break;\n case \"fillcolor\":\n result.attrs.fill = at.value;\n break;\n case \"from\":\n const [x1, y1] = parsePoint(at.value);\n Object.assign(result.attrs, { x1, y1 });\n break;\n case \"to\":\n const [x2, y2] = parsePoint(at.value);\n Object.assign(result.attrs, { x2, y2 });\n break;\n }\n }\n for (const el of globalXmlParser.elements(elem)) {\n switch (el.localName) {\n case \"stroke\":\n Object.assign(result.attrs, parseStroke(el));\n break;\n case \"fill\":\n Object.assign(result.attrs, parseFill());\n break;\n case \"imagedata\":\n result.tagName = \"image\";\n Object.assign(result.attrs, { width: '100%', height: '100%' });\n result.imageHref = {\n id: globalXmlParser.attr(el, \"id\"),\n title: globalXmlParser.attr(el, \"title\"),\n };\n break;\n case \"txbxContent\":\n result.children.push(...parser.parseBodyElements(el));\n break;\n default:\n const child = parseVmlElement(el, parser);\n child && result.children.push(child);\n break;\n }\n }\n return result;\n}\nfunction parseStroke(el) {\n return {\n 'stroke': globalXmlParser.attr(el, \"color\"),\n 'stroke-width': globalXmlParser.lengthAttr(el, \"weight\", LengthUsage.Emu) ?? '1px'\n };\n}\nfunction parseFill(el) {\n return {};\n}\nfunction parsePoint(val) {\n return val.split(\",\");\n}\n\nclass WmlComment extends OpenXmlElementBase {\n constructor() {\n super(...arguments);\n this.type = DomType.Comment;\n }\n}\nclass WmlCommentReference extends OpenXmlElementBase {\n constructor(id) {\n super();\n this.id = id;\n this.type = DomType.CommentReference;\n }\n}\nclass WmlCommentRangeStart extends OpenXmlElementBase {\n constructor(id) {\n super();\n this.id = id;\n this.type = DomType.CommentRangeStart;\n }\n}\nclass WmlCommentRangeEnd extends OpenXmlElementBase {\n constructor(id) {\n super();\n this.id = id;\n this.type = DomType.CommentRangeEnd;\n }\n}\n\nvar autos = {\n shd: \"inherit\",\n color: \"black\",\n borderColor: \"black\",\n highlight: \"transparent\"\n};\nconst supportedNamespaceURIs = [];\nconst mmlTagMap = {\n \"oMath\": DomType.MmlMath,\n \"oMathPara\": DomType.MmlMathParagraph,\n \"f\": DomType.MmlFraction,\n \"func\": DomType.MmlFunction,\n \"fName\": DomType.MmlFunctionName,\n \"num\": DomType.MmlNumerator,\n \"den\": DomType.MmlDenominator,\n \"rad\": DomType.MmlRadical,\n \"deg\": DomType.MmlDegree,\n \"e\": DomType.MmlBase,\n \"sSup\": DomType.MmlSuperscript,\n \"sSub\": DomType.MmlSubscript,\n \"sPre\": DomType.MmlPreSubSuper,\n \"sup\": DomType.MmlSuperArgument,\n \"sub\": DomType.MmlSubArgument,\n \"d\": DomType.MmlDelimiter,\n \"nary\": DomType.MmlNary,\n \"eqArr\": DomType.MmlEquationArray,\n \"lim\": DomType.MmlLimit,\n \"limLow\": DomType.MmlLimitLower,\n \"m\": DomType.MmlMatrix,\n \"mr\": DomType.MmlMatrixRow,\n \"box\": DomType.MmlBox,\n \"bar\": DomType.MmlBar,\n \"groupChr\": DomType.MmlGroupChar\n};\nclass DocumentParser {\n constructor(options) {\n this.options = {\n ignoreWidth: false,\n debug: false,\n ...options\n };\n }\n parseNotes(xmlDoc, elemName, elemClass) {\n var result = [];\n for (let el of globalXmlParser.elements(xmlDoc, elemName)) {\n const node = new elemClass();\n node.id = globalXmlParser.attr(el, \"id\");\n node.noteType = globalXmlParser.attr(el, \"type\");\n node.children = this.parseBodyElements(el);\n result.push(node);\n }\n return result;\n }\n parseComments(xmlDoc) {\n var result = [];\n for (let el of globalXmlParser.elements(xmlDoc, \"comment\")) {\n const item = new WmlComment();\n item.id = globalXmlParser.attr(el, \"id\");\n item.author = globalXmlParser.attr(el, \"author\");\n item.initials = globalXmlParser.attr(el, \"initials\");\n item.date = globalXmlParser.attr(el, \"date\");\n item.children = this.parseBodyElements(el);\n result.push(item);\n }\n return result;\n }\n parseDocumentFile(xmlDoc) {\n var xbody = globalXmlParser.element(xmlDoc, \"body\");\n var background = globalXmlParser.element(xmlDoc, \"background\");\n var sectPr = globalXmlParser.element(xbody, \"sectPr\");\n return {\n type: DomType.Document,\n children: this.parseBodyElements(xbody),\n props: sectPr ? parseSectionProperties(sectPr, globalXmlParser) : {},\n cssStyle: background ? this.parseBackground(background) : {},\n };\n }\n parseBackground(elem) {\n var result = {};\n var color = xmlUtil.colorAttr(elem, \"color\");\n if (color) {\n result[\"background-color\"] = color;\n }\n return result;\n }\n parseBodyElements(element) {\n var children = [];\n for (const elem of globalXmlParser.elements(element)) {\n switch (elem.localName) {\n case \"p\":\n children.push(this.parseParagraph(elem));\n break;\n case \"altChunk\":\n children.push(this.parseAltChunk(elem));\n break;\n case \"tbl\":\n children.push(this.parseTable(elem));\n break;\n case \"sdt\":\n children.push(...this.parseSdt(elem, e => this.parseBodyElements(e)));\n break;\n }\n }\n return children;\n }\n parseStylesFile(xstyles) {\n var result = [];\n for (const n of globalXmlParser.elements(xstyles)) {\n switch (n.localName) {\n case \"style\":\n result.push(this.parseStyle(n));\n break;\n case \"docDefaults\":\n result.push(this.parseDefaultStyles(n));\n break;\n }\n }\n return result;\n }\n parseDefaultStyles(node) {\n var result = {\n id: null,\n name: null,\n target: null,\n basedOn: null,\n styles: []\n };\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"rPrDefault\":\n var rPr = globalXmlParser.element(c, \"rPr\");\n if (rPr)\n result.styles.push({\n target: \"span\",\n values: this.parseDefaultProperties(rPr, {})\n });\n break;\n case \"pPrDefault\":\n var pPr = globalXmlParser.element(c, \"pPr\");\n if (pPr)\n result.styles.push({\n target: \"p\",\n values: this.parseDefaultProperties(pPr, {})\n });\n break;\n }\n }\n return result;\n }\n parseStyle(node) {\n var result = {\n id: globalXmlParser.attr(node, \"styleId\"),\n isDefault: globalXmlParser.boolAttr(node, \"default\"),\n name: null,\n target: null,\n basedOn: null,\n styles: [],\n linked: null\n };\n switch (globalXmlParser.attr(node, \"type\")) {\n case \"paragraph\":\n result.target = \"p\";\n break;\n case \"table\":\n result.target = \"table\";\n break;\n case \"character\":\n result.target = \"span\";\n break;\n }\n for (const n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"basedOn\":\n result.basedOn = globalXmlParser.attr(n, \"val\");\n break;\n case \"name\":\n result.name = globalXmlParser.attr(n, \"val\");\n break;\n case \"link\":\n result.linked = globalXmlParser.attr(n, \"val\");\n break;\n case \"next\":\n result.next = globalXmlParser.attr(n, \"val\");\n break;\n case \"aliases\":\n result.aliases = globalXmlParser.attr(n, \"val\").split(\",\");\n break;\n case \"pPr\":\n result.styles.push({\n target: \"p\",\n values: this.parseDefaultProperties(n, {})\n });\n result.paragraphProps = parseParagraphProperties(n, globalXmlParser);\n break;\n case \"rPr\":\n result.styles.push({\n target: \"span\",\n values: this.parseDefaultProperties(n, {})\n });\n result.runProps = parseRunProperties(n, globalXmlParser);\n break;\n case \"tblPr\":\n case \"tcPr\":\n result.styles.push({\n target: \"td\",\n values: this.parseDefaultProperties(n, {})\n });\n break;\n case \"tblStylePr\":\n for (let s of this.parseTableStyle(n))\n result.styles.push(s);\n break;\n case \"rsid\":\n case \"qFormat\":\n case \"hidden\":\n case \"semiHidden\":\n case \"unhideWhenUsed\":\n case \"autoRedefine\":\n case \"uiPriority\":\n break;\n default:\n this.options.debug && console.warn(`DOCX: Unknown style element: ${n.localName}`);\n }\n }\n return result;\n }\n parseTableStyle(node) {\n var result = [];\n var type = globalXmlParser.attr(node, \"type\");\n var selector = \"\";\n var modificator = \"\";\n switch (type) {\n case \"firstRow\":\n modificator = \".first-row\";\n selector = \"tr.first-row td\";\n break;\n case \"lastRow\":\n modificator = \".last-row\";\n selector = \"tr.last-row td\";\n break;\n case \"firstCol\":\n modificator = \".first-col\";\n selector = \"td.first-col\";\n break;\n case \"lastCol\":\n modificator = \".last-col\";\n selector = \"td.last-col\";\n break;\n case \"band1Vert\":\n modificator = \":not(.no-vband)\";\n selector = \"td.odd-col\";\n break;\n case \"band2Vert\":\n modificator = \":not(.no-vband)\";\n selector = \"td.even-col\";\n break;\n case \"band1Horz\":\n modificator = \":not(.no-hband)\";\n selector = \"tr.odd-row\";\n break;\n case \"band2Horz\":\n modificator = \":not(.no-hband)\";\n selector = \"tr.even-row\";\n break;\n default: return [];\n }\n for (const n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"pPr\":\n result.push({\n target: `${selector} p`,\n mod: modificator,\n values: this.parseDefaultProperties(n, {})\n });\n break;\n case \"rPr\":\n result.push({\n target: `${selector} span`,\n mod: modificator,\n values: this.parseDefaultProperties(n, {})\n });\n break;\n case \"tblPr\":\n case \"tcPr\":\n result.push({\n target: selector,\n mod: modificator,\n values: this.parseDefaultProperties(n, {})\n });\n break;\n }\n }\n return result;\n }\n parseNumberingFile(node) {\n var result = [];\n var mapping = {};\n var bullets = [];\n for (const n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"abstractNum\":\n this.parseAbstractNumbering(n, bullets)\n .forEach(x => result.push(x));\n break;\n case \"numPicBullet\":\n bullets.push(this.parseNumberingPicBullet(n));\n break;\n case \"num\":\n var numId = globalXmlParser.attr(n, \"numId\");\n var abstractNumId = globalXmlParser.elementAttr(n, \"abstractNumId\", \"val\");\n mapping[abstractNumId] = numId;\n break;\n }\n }\n result.forEach(x => x.id = mapping[x.id]);\n return result;\n }\n parseNumberingPicBullet(elem) {\n var pict = globalXmlParser.element(elem, \"pict\");\n var shape = pict && globalXmlParser.element(pict, \"shape\");\n var imagedata = shape && globalXmlParser.element(shape, \"imagedata\");\n return imagedata ? {\n id: globalXmlParser.intAttr(elem, \"numPicBulletId\"),\n src: globalXmlParser.attr(imagedata, \"id\"),\n style: globalXmlParser.attr(shape, \"style\")\n } : null;\n }\n parseAbstractNumbering(node, bullets) {\n var result = [];\n var id = globalXmlParser.attr(node, \"abstractNumId\");\n for (const n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"lvl\":\n result.push(this.parseNumberingLevel(id, n, bullets));\n break;\n }\n }\n return result;\n }\n parseNumberingLevel(id, node, bullets) {\n var result = {\n id: id,\n level: globalXmlParser.intAttr(node, \"ilvl\"),\n start: 1,\n pStyleName: undefined,\n pStyle: {},\n rStyle: {},\n suff: \"tab\"\n };\n for (const n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"start\":\n result.start = globalXmlParser.intAttr(n, \"val\");\n break;\n case \"pPr\":\n this.parseDefaultProperties(n, result.pStyle);\n break;\n case \"rPr\":\n this.parseDefaultProperties(n, result.rStyle);\n break;\n case \"lvlPicBulletId\":\n var bulletId = globalXmlParser.intAttr(n, \"val\");\n result.bullet = bullets.find(x => x?.id == bulletId);\n break;\n case \"lvlText\":\n result.levelText = globalXmlParser.attr(n, \"val\");\n break;\n case \"pStyle\":\n result.pStyleName = globalXmlParser.attr(n, \"val\");\n break;\n case \"numFmt\":\n result.format = globalXmlParser.attr(n, \"val\");\n break;\n case \"suff\":\n result.suff = globalXmlParser.attr(n, \"val\");\n break;\n }\n }\n return result;\n }\n parseSdt(node, parser) {\n const sdtContent = globalXmlParser.element(node, \"sdtContent\");\n return sdtContent ? parser(sdtContent) : [];\n }\n parseInserted(node, parentParser) {\n return {\n type: DomType.Inserted,\n children: parentParser(node)?.children ?? []\n };\n }\n parseDeleted(node, parentParser) {\n return {\n type: DomType.Deleted,\n children: parentParser(node)?.children ?? []\n };\n }\n parseAltChunk(node) {\n return { type: DomType.AltChunk, children: [], id: globalXmlParser.attr(node, \"id\") };\n }\n parseParagraph(node) {\n var result = { type: DomType.Paragraph, children: [] };\n for (let el of globalXmlParser.elements(node)) {\n switch (el.localName) {\n case \"pPr\":\n this.parseParagraphProperties(el, result);\n break;\n case \"r\":\n result.children.push(this.parseRun(el, result));\n break;\n case \"hyperlink\":\n result.children.push(this.parseHyperlink(el, result));\n break;\n case \"smartTag\":\n result.children.push(this.parseSmartTag(el, result));\n break;\n case \"bookmarkStart\":\n result.children.push(parseBookmarkStart(el, globalXmlParser));\n break;\n case \"bookmarkEnd\":\n result.children.push(parseBookmarkEnd(el, globalXmlParser));\n break;\n case \"commentRangeStart\":\n result.children.push(new WmlCommentRangeStart(globalXmlParser.attr(el, \"id\")));\n break;\n case \"commentRangeEnd\":\n result.children.push(new WmlCommentRangeEnd(globalXmlParser.attr(el, \"id\")));\n break;\n case \"oMath\":\n case \"oMathPara\":\n result.children.push(this.parseMathElement(el));\n break;\n case \"sdt\":\n result.children.push(...this.parseSdt(el, e => this.parseParagraph(e).children));\n break;\n case \"ins\":\n result.children.push(this.parseInserted(el, e => this.parseParagraph(e)));\n break;\n case \"del\":\n result.children.push(this.parseDeleted(el, e => this.parseParagraph(e)));\n break;\n }\n }\n return result;\n }\n parseParagraphProperties(elem, paragraph) {\n this.parseDefaultProperties(elem, paragraph.cssStyle = {}, null, c => {\n if (parseParagraphProperty(c, paragraph, globalXmlParser))\n return true;\n switch (c.localName) {\n case \"pStyle\":\n paragraph.styleName = globalXmlParser.attr(c, \"val\");\n break;\n case \"cnfStyle\":\n paragraph.className = values.classNameOfCnfStyle(c);\n break;\n case \"framePr\":\n this.parseFrame(c, paragraph);\n break;\n case \"rPr\":\n break;\n default:\n return false;\n }\n return true;\n });\n }\n parseFrame(node, paragraph) {\n var dropCap = globalXmlParser.attr(node, \"dropCap\");\n if (dropCap == \"drop\")\n paragraph.cssStyle[\"float\"] = \"left\";\n }\n parseHyperlink(node, parent) {\n var result = { type: DomType.Hyperlink, parent: parent, children: [] };\n result.anchor = globalXmlParser.attr(node, \"anchor\");\n result.id = globalXmlParser.attr(node, \"id\");\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"r\":\n result.children.push(this.parseRun(c, result));\n break;\n }\n }\n return result;\n }\n parseSmartTag(node, parent) {\n var result = { type: DomType.SmartTag, parent, children: [] };\n var uri = globalXmlParser.attr(node, \"uri\");\n var element = globalXmlParser.attr(node, \"element\");\n if (uri)\n result.uri = uri;\n if (element)\n result.element = element;\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"r\":\n result.children.push(this.parseRun(c, result));\n break;\n }\n }\n return result;\n }\n parseRun(node, parent) {\n var result = { type: DomType.Run, parent: parent, children: [] };\n for (let c of globalXmlParser.elements(node)) {\n c = this.checkAlternateContent(c);\n switch (c.localName) {\n case \"t\":\n result.children.push({\n type: DomType.Text,\n text: c.textContent\n });\n break;\n case \"delText\":\n result.children.push({\n type: DomType.DeletedText,\n text: c.textContent\n });\n break;\n case \"commentReference\":\n result.children.push(new WmlCommentReference(globalXmlParser.attr(c, \"id\")));\n break;\n case \"fldSimple\":\n result.children.push({\n type: DomType.SimpleField,\n instruction: globalXmlParser.attr(c, \"instr\"),\n lock: globalXmlParser.boolAttr(c, \"lock\", false),\n dirty: globalXmlParser.boolAttr(c, \"dirty\", false)\n });\n break;\n case \"instrText\":\n result.fieldRun = true;\n result.children.push({\n type: DomType.Instruction,\n text: c.textContent\n });\n break;\n case \"fldChar\":\n result.fieldRun = true;\n result.children.push({\n type: DomType.ComplexField,\n charType: globalXmlParser.attr(c, \"fldCharType\"),\n lock: globalXmlParser.boolAttr(c, \"lock\", false),\n dirty: globalXmlParser.boolAttr(c, \"dirty\", false)\n });\n break;\n case \"noBreakHyphen\":\n result.children.push({ type: DomType.NoBreakHyphen });\n break;\n case \"br\":\n result.children.push({\n type: DomType.Break,\n break: globalXmlParser.attr(c, \"type\") || \"textWrapping\"\n });\n break;\n case \"lastRenderedPageBreak\":\n result.children.push({\n type: DomType.Break,\n break: \"lastRenderedPageBreak\"\n });\n break;\n case \"sym\":\n result.children.push({\n type: DomType.Symbol,\n font: encloseFontFamily(globalXmlParser.attr(c, \"font\")),\n char: globalXmlParser.attr(c, \"char\")\n });\n break;\n case \"tab\":\n result.children.push({ type: DomType.Tab });\n break;\n case \"footnoteReference\":\n result.children.push({\n type: DomType.FootnoteReference,\n id: globalXmlParser.attr(c, \"id\")\n });\n break;\n case \"endnoteReference\":\n result.children.push({\n type: DomType.EndnoteReference,\n id: globalXmlParser.attr(c, \"id\")\n });\n break;\n case \"drawing\":\n let d = this.parseDrawing(c);\n if (d)\n result.children = [d];\n break;\n case \"pict\":\n result.children.push(this.parseVmlPicture(c));\n break;\n case \"rPr\":\n this.parseRunProperties(c, result);\n break;\n }\n }\n return result;\n }\n parseMathElement(elem) {\n const propsTag = `${elem.localName}Pr`;\n const result = { type: mmlTagMap[elem.localName], children: [] };\n for (const el of globalXmlParser.elements(elem)) {\n const childType = mmlTagMap[el.localName];\n if (childType) {\n result.children.push(this.parseMathElement(el));\n }\n else if (el.localName == \"r\") {\n var run = this.parseRun(el);\n run.type = DomType.MmlRun;\n result.children.push(run);\n }\n else if (el.localName == propsTag) {\n result.props = this.parseMathProperies(el);\n }\n }\n return result;\n }\n parseMathProperies(elem) {\n const result = {};\n for (const el of globalXmlParser.elements(elem)) {\n switch (el.localName) {\n case \"chr\":\n result.char = globalXmlParser.attr(el, \"val\");\n break;\n case \"vertJc\":\n result.verticalJustification = globalXmlParser.attr(el, \"val\");\n break;\n case \"pos\":\n result.position = globalXmlParser.attr(el, \"val\");\n break;\n case \"degHide\":\n result.hideDegree = globalXmlParser.boolAttr(el, \"val\");\n break;\n case \"begChr\":\n result.beginChar = globalXmlParser.attr(el, \"val\");\n break;\n case \"endChr\":\n result.endChar = globalXmlParser.attr(el, \"val\");\n break;\n }\n }\n return result;\n }\n parseRunProperties(elem, run) {\n this.parseDefaultProperties(elem, run.cssStyle = {}, null, c => {\n switch (c.localName) {\n case \"rStyle\":\n run.styleName = globalXmlParser.attr(c, \"val\");\n break;\n case \"vertAlign\":\n run.verticalAlign = values.valueOfVertAlign(c, true);\n break;\n default:\n return false;\n }\n return true;\n });\n }\n parseVmlPicture(elem) {\n const result = { type: DomType.VmlPicture, children: [] };\n for (const el of globalXmlParser.elements(elem)) {\n const child = parseVmlElement(el, this);\n child && result.children.push(child);\n }\n return result;\n }\n checkAlternateContent(elem) {\n if (elem.localName != 'AlternateContent')\n return elem;\n var choice = globalXmlParser.element(elem, \"Choice\");\n if (choice) {\n var requires = globalXmlParser.attr(choice, \"Requires\");\n var namespaceURI = elem.lookupNamespaceURI(requires);\n if (supportedNamespaceURIs.includes(namespaceURI))\n return choice.firstElementChild;\n }\n return globalXmlParser.element(elem, \"Fallback\")?.firstElementChild;\n }\n parseDrawing(node) {\n for (var n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"inline\":\n case \"anchor\":\n return this.parseDrawingWrapper(n);\n }\n }\n }\n parseDrawingWrapper(node) {\n var result = { type: DomType.Drawing, children: [], cssStyle: {} };\n var isAnchor = node.localName == \"anchor\";\n let wrapType = null;\n let simplePos = globalXmlParser.boolAttr(node, \"simplePos\");\n globalXmlParser.boolAttr(node, \"behindDoc\");\n let posX = { relative: \"page\", align: \"left\", offset: \"0\" };\n let posY = { relative: \"page\", align: \"top\", offset: \"0\" };\n for (var n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"simplePos\":\n if (simplePos) {\n posX.offset = globalXmlParser.lengthAttr(n, \"x\", LengthUsage.Emu);\n posY.offset = globalXmlParser.lengthAttr(n, \"y\", LengthUsage.Emu);\n }\n break;\n case \"extent\":\n result.cssStyle[\"width\"] = globalXmlParser.lengthAttr(n, \"cx\", LengthUsage.Emu);\n result.cssStyle[\"height\"] = globalXmlParser.lengthAttr(n, \"cy\", LengthUsage.Emu);\n break;\n case \"positionH\":\n case \"positionV\":\n if (!simplePos) {\n let pos = n.localName == \"positionH\" ? posX : posY;\n var alignNode = globalXmlParser.element(n, \"align\");\n var offsetNode = globalXmlParser.element(n, \"posOffset\");\n pos.relative = globalXmlParser.attr(n, \"relativeFrom\") ?? pos.relative;\n if (alignNode)\n pos.align = alignNode.textContent;\n if (offsetNode)\n pos.offset = convertLength(offsetNode.textContent, LengthUsage.Emu);\n }\n break;\n case \"wrapTopAndBottom\":\n wrapType = \"wrapTopAndBottom\";\n break;\n case \"wrapNone\":\n wrapType = \"wrapNone\";\n break;\n case \"graphic\":\n var g = this.parseGraphic(n);\n if (g)\n result.children.push(g);\n break;\n }\n }\n if (wrapType == \"wrapTopAndBottom\") {\n result.cssStyle['display'] = 'block';\n if (posX.align) {\n result.cssStyle['text-align'] = posX.align;\n result.cssStyle['width'] = \"100%\";\n }\n }\n else if (wrapType == \"wrapNone\") {\n result.cssStyle['display'] = 'block';\n result.cssStyle['position'] = 'relative';\n result.cssStyle[\"width\"] = \"0px\";\n result.cssStyle[\"height\"] = \"0px\";\n if (posX.offset)\n result.cssStyle[\"left\"] = posX.offset;\n if (posY.offset)\n result.cssStyle[\"top\"] = posY.offset;\n }\n else if (isAnchor && (posX.align == 'left' || posX.align == 'right')) {\n result.cssStyle[\"float\"] = posX.align;\n }\n return result;\n }\n parseGraphic(elem) {\n var graphicData = globalXmlParser.element(elem, \"graphicData\");\n for (let n of globalXmlParser.elements(graphicData)) {\n switch (n.localName) {\n case \"pic\":\n return this.parsePicture(n);\n }\n }\n return null;\n }\n parsePicture(elem) {\n var result = { type: DomType.Image, src: \"\", cssStyle: {} };\n var blipFill = globalXmlParser.element(elem, \"blipFill\");\n var blip = globalXmlParser.element(blipFill, \"blip\");\n var srcRect = globalXmlParser.element(blipFill, \"srcRect\");\n result.src = globalXmlParser.attr(blip, \"embed\");\n if (srcRect) {\n result.srcRect = [\n globalXmlParser.intAttr(srcRect, \"l\", 0) / 100000,\n globalXmlParser.intAttr(srcRect, \"t\", 0) / 100000,\n globalXmlParser.intAttr(srcRect, \"r\", 0) / 100000,\n globalXmlParser.intAttr(srcRect, \"b\", 0) / 100000,\n ];\n }\n var spPr = globalXmlParser.element(elem, \"spPr\");\n var xfrm = globalXmlParser.element(spPr, \"xfrm\");\n result.cssStyle[\"position\"] = \"relative\";\n if (xfrm) {\n result.rotation = globalXmlParser.intAttr(xfrm, \"rot\", 0) / 60000;\n for (var n of globalXmlParser.elements(xfrm)) {\n switch (n.localName) {\n case \"ext\":\n result.cssStyle[\"width\"] = globalXmlParser.lengthAttr(n, \"cx\", LengthUsage.Emu);\n result.cssStyle[\"height\"] = globalXmlParser.lengthAttr(n, \"cy\", LengthUsage.Emu);\n break;\n case \"off\":\n result.cssStyle[\"left\"] = globalXmlParser.lengthAttr(n, \"x\", LengthUsage.Emu);\n result.cssStyle[\"top\"] = globalXmlParser.lengthAttr(n, \"y\", LengthUsage.Emu);\n break;\n }\n }\n }\n return result;\n }\n parseTable(node) {\n var result = { type: DomType.Table, children: [] };\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"tr\":\n result.children.push(this.parseTableRow(c));\n break;\n case \"tblGrid\":\n result.columns = this.parseTableColumns(c);\n break;\n case \"tblPr\":\n this.parseTableProperties(c, result);\n break;\n }\n }\n return result;\n }\n parseTableColumns(node) {\n var result = [];\n for (const n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"gridCol\":\n result.push({ width: globalXmlParser.lengthAttr(n, \"w\") });\n break;\n }\n }\n return result;\n }\n parseTableProperties(elem, table) {\n table.cssStyle = {};\n table.cellStyle = {};\n this.parseDefaultProperties(elem, table.cssStyle, table.cellStyle, c => {\n switch (c.localName) {\n case \"tblStyle\":\n table.styleName = globalXmlParser.attr(c, \"val\");\n break;\n case \"tblLook\":\n table.className = values.classNameOftblLook(c);\n break;\n case \"tblpPr\":\n this.parseTablePosition(c, table);\n break;\n case \"tblStyleColBandSize\":\n table.colBandSize = globalXmlParser.intAttr(c, \"val\");\n break;\n case \"tblStyleRowBandSize\":\n table.rowBandSize = globalXmlParser.intAttr(c, \"val\");\n break;\n case \"hidden\":\n table.cssStyle[\"display\"] = \"none\";\n break;\n default:\n return false;\n }\n return true;\n });\n switch (table.cssStyle[\"text-align\"]) {\n case \"center\":\n delete table.cssStyle[\"text-align\"];\n table.cssStyle[\"margin-left\"] = \"auto\";\n table.cssStyle[\"margin-right\"] = \"auto\";\n break;\n case \"right\":\n delete table.cssStyle[\"text-align\"];\n table.cssStyle[\"margin-left\"] = \"auto\";\n break;\n }\n }\n parseTablePosition(node, table) {\n var topFromText = globalXmlParser.lengthAttr(node, \"topFromText\");\n var bottomFromText = globalXmlParser.lengthAttr(node, \"bottomFromText\");\n var rightFromText = globalXmlParser.lengthAttr(node, \"rightFromText\");\n var leftFromText = globalXmlParser.lengthAttr(node, \"leftFromText\");\n table.cssStyle[\"float\"] = 'left';\n table.cssStyle[\"margin-bottom\"] = values.addSize(table.cssStyle[\"margin-bottom\"], bottomFromText);\n table.cssStyle[\"margin-left\"] = values.addSize(table.cssStyle[\"margin-left\"], leftFromText);\n table.cssStyle[\"margin-right\"] = values.addSize(table.cssStyle[\"margin-right\"], rightFromText);\n table.cssStyle[\"margin-top\"] = values.addSize(table.cssStyle[\"margin-top\"], topFromText);\n }\n parseTableRow(node) {\n var result = { type: DomType.Row, children: [] };\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"tc\":\n result.children.push(this.parseTableCell(c));\n break;\n case \"trPr\":\n case \"tblPrEx\":\n this.parseTableRowProperties(c, result);\n break;\n }\n }\n return result;\n }\n parseTableRowProperties(elem, row) {\n row.cssStyle = this.parseDefaultProperties(elem, {}, null, c => {\n switch (c.localName) {\n case \"cnfStyle\":\n row.className = values.classNameOfCnfStyle(c);\n break;\n case \"tblHeader\":\n row.isHeader = globalXmlParser.boolAttr(c, \"val\");\n break;\n case \"gridBefore\":\n row.gridBefore = globalXmlParser.intAttr(c, \"val\");\n break;\n case \"gridAfter\":\n row.gridAfter = globalXmlParser.intAttr(c, \"val\");\n break;\n default:\n return false;\n }\n return true;\n });\n }\n parseTableCell(node) {\n var result = { type: DomType.Cell, children: [] };\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"tbl\":\n result.children.push(this.parseTable(c));\n break;\n case \"p\":\n result.children.push(this.parseParagraph(c));\n break;\n case \"tcPr\":\n this.parseTableCellProperties(c, result);\n break;\n }\n }\n return result;\n }\n parseTableCellProperties(elem, cell) {\n cell.cssStyle = this.parseDefaultProperties(elem, {}, null, c => {\n switch (c.localName) {\n case \"gridSpan\":\n cell.span = globalXmlParser.intAttr(c, \"val\", null);\n break;\n case \"vMerge\":\n cell.verticalMerge = globalXmlParser.attr(c, \"val\") ?? \"continue\";\n break;\n case \"cnfStyle\":\n cell.className = values.classNameOfCnfStyle(c);\n break;\n default:\n return false;\n }\n return true;\n });\n this.parseTableCellVerticalText(elem, cell);\n }\n parseTableCellVerticalText(elem, cell) {\n const directionMap = {\n \"btLr\": {\n writingMode: \"vertical-rl\",\n transform: \"rotate(180deg)\"\n },\n \"lrTb\": {\n writingMode: \"vertical-lr\",\n transform: \"none\"\n },\n \"tbRl\": {\n writingMode: \"vertical-rl\",\n transform: \"none\"\n }\n };\n for (const c of globalXmlParser.elements(elem)) {\n if (c.localName === \"textDirection\") {\n const direction = globalXmlParser.attr(c, \"val\");\n const style = directionMap[direction] || { writingMode: \"horizontal-tb\" };\n cell.cssStyle[\"writing-mode\"] = style.writingMode;\n cell.cssStyle[\"transform\"] = style.transform;\n }\n }\n }\n parseDefaultProperties(elem, style = null, childStyle = null, handler = null) {\n style = style || {};\n for (const c of globalXmlParser.elements(elem)) {\n if (handler?.(c))\n continue;\n switch (c.localName) {\n case \"jc\":\n style[\"text-align\"] = values.valueOfJc(c);\n break;\n case \"textAlignment\":\n style[\"vertical-align\"] = values.valueOfTextAlignment(c);\n break;\n case \"color\":\n style[\"color\"] = xmlUtil.colorAttr(c, \"val\", null, autos.color);\n break;\n case \"sz\":\n style[\"font-size\"] = style[\"min-height\"] = globalXmlParser.lengthAttr(c, \"val\", LengthUsage.FontSize);\n break;\n case \"shd\":\n style[\"background-color\"] = xmlUtil.colorAttr(c, \"fill\", null, autos.shd);\n break;\n case \"highlight\":\n style[\"background-color\"] = xmlUtil.colorAttr(c, \"val\", null, autos.highlight);\n break;\n case \"vertAlign\":\n break;\n case \"position\":\n style.verticalAlign = globalXmlParser.lengthAttr(c, \"val\", LengthUsage.FontSize);\n break;\n case \"tcW\":\n if (this.options.ignoreWidth)\n break;\n case \"tblW\":\n style[\"width\"] = values.valueOfSize(c, \"w\");\n break;\n case \"trHeight\":\n this.parseTrHeight(c, style);\n break;\n case \"strike\":\n style[\"text-decoration\"] = globalXmlParser.boolAttr(c, \"val\", true) ? \"line-through\" : \"none\";\n break;\n case \"b\":\n style[\"font-weight\"] = globalXmlParser.boolAttr(c, \"val\", true) ? \"bold\" : \"normal\";\n break;\n case \"i\":\n style[\"font-style\"] = globalXmlParser.boolAttr(c, \"val\", true) ? \"italic\" : \"normal\";\n break;\n case \"caps\":\n style[\"text-transform\"] = globalXmlParser.boolAttr(c, \"val\", true) ? \"uppercase\" : \"none\";\n break;\n case \"smallCaps\":\n style[\"font-variant\"] = globalXmlParser.boolAttr(c, \"val\", true) ? \"small-caps\" : \"none\";\n break;\n case \"u\":\n this.parseUnderline(c, style);\n break;\n case \"ind\":\n case \"tblInd\":\n this.parseIndentation(c, style);\n break;\n case \"rFonts\":\n this.parseFont(c, style);\n break;\n case \"tblBorders\":\n this.parseBorderProperties(c, childStyle || style);\n break;\n case \"tblCellSpacing\":\n style[\"border-spacing\"] = values.valueOfMargin(c);\n style[\"border-collapse\"] = \"separate\";\n break;\n case \"pBdr\":\n this.parseBorderProperties(c, style);\n break;\n case \"bdr\":\n style[\"border\"] = values.valueOfBorder(c);\n break;\n case \"tcBorders\":\n this.parseBorderProperties(c, style);\n break;\n case \"vanish\":\n if (globalXmlParser.boolAttr(c, \"val\", true))\n style[\"display\"] = \"none\";\n break;\n case \"kern\":\n break;\n case \"noWrap\":\n break;\n case \"tblCellMar\":\n case \"tcMar\":\n this.parseMarginProperties(c, childStyle || style);\n break;\n case \"tblLayout\":\n style[\"table-layout\"] = values.valueOfTblLayout(c);\n break;\n case \"vAlign\":\n style[\"vertical-align\"] = values.valueOfTextAlignment(c);\n break;\n case \"spacing\":\n if (elem.localName == \"pPr\")\n this.parseSpacing(c, style);\n break;\n case \"wordWrap\":\n if (globalXmlParser.boolAttr(c, \"val\"))\n style[\"overflow-wrap\"] = \"break-word\";\n break;\n case \"suppressAutoHyphens\":\n style[\"hyphens\"] = globalXmlParser.boolAttr(c, \"val\", true) ? \"none\" : \"auto\";\n break;\n case \"lang\":\n style[\"$lang\"] = globalXmlParser.attr(c, \"val\");\n break;\n case \"rtl\":\n case \"bidi\":\n if (globalXmlParser.boolAttr(c, \"val\", true))\n style[\"direction\"] = \"rtl\";\n break;\n case \"bCs\":\n case \"iCs\":\n case \"szCs\":\n case \"tabs\":\n case \"outlineLvl\":\n case \"contextualSpacing\":\n case \"tblStyleColBandSize\":\n case \"tblStyleRowBandSize\":\n case \"webHidden\":\n case \"pageBreakBefore\":\n case \"suppressLineNumbers\":\n case \"keepLines\":\n case \"keepNext\":\n case \"widowControl\":\n case \"bidi\":\n case \"rtl\":\n case \"noProof\":\n break;\n default:\n if (this.options.debug)\n console.warn(`DOCX: Unknown document element: ${elem.localName}.${c.localName}`);\n break;\n }\n }\n return style;\n }\n parseUnderline(node, style) {\n var val = globalXmlParser.attr(node, \"val\");\n if (val == null)\n return;\n switch (val) {\n case \"dash\":\n case \"dashDotDotHeavy\":\n case \"dashDotHeavy\":\n case \"dashedHeavy\":\n case \"dashLong\":\n case \"dashLongHeavy\":\n case \"dotDash\":\n case \"dotDotDash\":\n style[\"text-decoration\"] = \"underline dashed\";\n break;\n case \"dotted\":\n case \"dottedHeavy\":\n style[\"text-decoration\"] = \"underline dotted\";\n break;\n case \"double\":\n style[\"text-decoration\"] = \"underline double\";\n break;\n case \"single\":\n case \"thick\":\n style[\"text-decoration\"] = \"underline\";\n break;\n case \"wave\":\n case \"wavyDouble\":\n case \"wavyHeavy\":\n style[\"text-decoration\"] = \"underline wavy\";\n break;\n case \"words\":\n style[\"text-decoration\"] = \"underline\";\n break;\n case \"none\":\n style[\"text-decoration\"] = \"none\";\n break;\n }\n var col = xmlUtil.colorAttr(node, \"color\");\n if (col)\n style[\"text-decoration-color\"] = col;\n }\n parseFont(node, style) {\n var ascii = globalXmlParser.attr(node, \"ascii\");\n var asciiTheme = values.themeValue(node, \"asciiTheme\");\n var eastAsia = globalXmlParser.attr(node, \"eastAsia\");\n var fonts = [ascii, asciiTheme, eastAsia].filter(x => x).map(x => encloseFontFamily(x));\n if (fonts.length > 0)\n style[\"font-family\"] = [...new Set(fonts)].join(', ');\n }\n parseIndentation(node, style) {\n var firstLine = globalXmlParser.lengthAttr(node, \"firstLine\");\n var hanging = globalXmlParser.lengthAttr(node, \"hanging\");\n var left = globalXmlParser.lengthAttr(node, \"left\");\n var start = globalXmlParser.lengthAttr(node, \"start\");\n var right = globalXmlParser.lengthAttr(node, \"right\");\n var end = globalXmlParser.lengthAttr(node, \"end\");\n if (firstLine)\n style[\"text-indent\"] = firstLine;\n if (hanging)\n style[\"text-indent\"] = `-${hanging}`;\n if (left || start)\n style[\"margin-inline-start\"] = left || start;\n if (right || end)\n style[\"margin-inline-end\"] = right || end;\n }\n parseSpacing(node, style) {\n var before = globalXmlParser.lengthAttr(node, \"before\");\n var after = globalXmlParser.lengthAttr(node, \"after\");\n var line = globalXmlParser.intAttr(node, \"line\", null);\n var lineRule = globalXmlParser.attr(node, \"lineRule\");\n if (before)\n style[\"margin-top\"] = before;\n if (after)\n style[\"margin-bottom\"] = after;\n if (line !== null) {\n switch (lineRule) {\n case \"auto\":\n style[\"line-height\"] = `${(line / 240).toFixed(2)}`;\n break;\n case \"atLeast\":\n style[\"line-height\"] = `calc(100% + ${line / 20}pt)`;\n break;\n default:\n style[\"line-height\"] = style[\"min-height\"] = `${line / 20}pt`;\n break;\n }\n }\n }\n parseMarginProperties(node, output) {\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"left\":\n output[\"padding-left\"] = values.valueOfMargin(c);\n break;\n case \"right\":\n output[\"padding-right\"] = values.valueOfMargin(c);\n break;\n case \"top\":\n output[\"padding-top\"] = values.valueOfMargin(c);\n break;\n case \"bottom\":\n output[\"padding-bottom\"] = values.valueOfMargin(c);\n break;\n }\n }\n }\n parseTrHeight(node, output) {\n switch (globalXmlParser.attr(node, \"hRule\")) {\n case \"exact\":\n output[\"height\"] = globalXmlParser.lengthAttr(node, \"val\");\n break;\n case \"atLeast\":\n default:\n output[\"height\"] = globalXmlParser.lengthAttr(node, \"val\");\n break;\n }\n }\n parseBorderProperties(node, output) {\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"start\":\n case \"left\":\n output[\"border-left\"] = values.valueOfBorder(c);\n break;\n case \"end\":\n case \"right\":\n output[\"border-right\"] = values.valueOfBorder(c);\n break;\n case \"top\":\n output[\"border-top\"] = values.valueOfBorder(c);\n break;\n case \"bottom\":\n output[\"border-bottom\"] = values.valueOfBorder(c);\n break;\n }\n }\n }\n}\nconst knownColors = ['black', 'blue', 'cyan', 'darkBlue', 'darkCyan', 'darkGray', 'darkGreen', 'darkMagenta', 'darkRed', 'darkYellow', 'green', 'lightGray', 'magenta', 'none', 'red', 'white', 'yellow'];\nclass xmlUtil {\n static colorAttr(node, attrName, defValue = null, autoColor = 'black') {\n var v = globalXmlParser.attr(node, attrName);\n if (v) {\n if (v == \"auto\") {\n return autoColor;\n }\n else if (knownColors.includes(v)) {\n return v;\n }\n return `#${v}`;\n }\n var themeColor = globalXmlParser.attr(node, \"themeColor\");\n return themeColor ? `var(--docx-${themeColor}-color)` : defValue;\n }\n}\nclass values {\n static themeValue(c, attr) {\n var val = globalXmlParser.attr(c, attr);\n return val ? `var(--docx-${val}-font)` : null;\n }\n static valueOfSize(c, attr) {\n var type = LengthUsage.Dxa;\n switch (globalXmlParser.attr(c, \"type\")) {\n case \"dxa\": break;\n case \"pct\":\n type = LengthUsage.Percent;\n break;\n case \"auto\": return \"auto\";\n }\n return globalXmlParser.lengthAttr(c, attr, type);\n }\n static valueOfMargin(c) {\n return globalXmlParser.lengthAttr(c, \"w\");\n }\n static valueOfBorder(c) {\n var type = values.parseBorderType(globalXmlParser.attr(c, \"val\"));\n if (type == \"none\")\n return \"none\";\n var color = xmlUtil.colorAttr(c, \"color\");\n var size = globalXmlParser.lengthAttr(c, \"sz\", LengthUsage.Border);\n return `${size} ${type} ${color == \"auto\" ? autos.borderColor : color}`;\n }\n static parseBorderType(type) {\n switch (type) {\n case \"single\": return \"solid\";\n case \"dashDotStroked\": return \"solid\";\n case \"dashed\": return \"dashed\";\n case \"dashSmallGap\": return \"dashed\";\n case \"dotDash\": return \"dotted\";\n case \"dotDotDash\": return \"dotted\";\n case \"dotted\": return \"dotted\";\n case \"double\": return \"double\";\n case \"doubleWave\": return \"double\";\n case \"inset\": return \"inset\";\n case \"nil\": return \"none\";\n case \"none\": return \"none\";\n case \"outset\": return \"outset\";\n case \"thick\": return \"solid\";\n case \"thickThinLargeGap\": return \"solid\";\n case \"thickThinMediumGap\": return \"solid\";\n case \"thickThinSmallGap\": return \"solid\";\n case \"thinThickLargeGap\": return \"solid\";\n case \"thinThickMediumGap\": return \"solid\";\n case \"thinThickSmallGap\": return \"solid\";\n case \"thinThickThinLargeGap\": return \"solid\";\n case \"thinThickThinMediumGap\": return \"solid\";\n case \"thinThickThinSmallGap\": return \"solid\";\n case \"threeDEmboss\": return \"solid\";\n case \"threeDEngrave\": return \"solid\";\n case \"triple\": return \"double\";\n case \"wave\": return \"solid\";\n }\n return 'solid';\n }\n static valueOfTblLayout(c) {\n var type = globalXmlParser.attr(c, \"val\");\n return type == \"fixed\" ? \"fixed\" : \"auto\";\n }\n static classNameOfCnfStyle(c) {\n const val = globalXmlParser.attr(c, \"val\");\n const classes = [\n 'first-row', 'last-row', 'first-col', 'last-col',\n 'odd-col', 'even-col', 'odd-row', 'even-row',\n 'ne-cell', 'nw-cell', 'se-cell', 'sw-cell'\n ];\n return classes.filter((_, i) => val[i] == '1').join(' ');\n }\n static valueOfJc(c) {\n var type = globalXmlParser.attr(c, \"val\");\n switch (type) {\n case \"start\":\n case \"left\": return \"left\";\n case \"center\": return \"center\";\n case \"end\":\n case \"right\": return \"right\";\n case \"both\": return \"justify\";\n }\n return type;\n }\n static valueOfVertAlign(c, asTagName = false) {\n var type = globalXmlParser.attr(c, \"val\");\n switch (type) {\n case \"subscript\": return \"sub\";\n case \"superscript\": return asTagName ? \"sup\" : \"super\";\n }\n return asTagName ? null : type;\n }\n static valueOfTextAlignment(c) {\n var type = globalXmlParser.attr(c, \"val\");\n switch (type) {\n case \"auto\":\n case \"baseline\": return \"baseline\";\n case \"top\": return \"top\";\n case \"center\": return \"middle\";\n case \"bottom\": return \"bottom\";\n }\n return type;\n }\n static addSize(a, b) {\n if (a == null)\n return b;\n if (b == null)\n return a;\n return `calc(${a} + ${b})`;\n }\n static classNameOftblLook(c) {\n const val = globalXmlParser.hexAttr(c, \"val\", 0);\n let className = \"\";\n if (globalXmlParser.boolAttr(c, \"firstRow\") || (val & 0x0020))\n className += \" first-row\";\n if (globalXmlParser.boolAttr(c, \"lastRow\") || (val & 0x0040))\n className += \" last-row\";\n if (globalXmlParser.boolAttr(c, \"firstColumn\") || (val & 0x0080))\n className += \" first-col\";\n if (globalXmlParser.boolAttr(c, \"lastColumn\") || (val & 0x0100))\n className += \" last-col\";\n if (globalXmlParser.boolAttr(c, \"noHBand\") || (val & 0x0200))\n className += \" no-hband\";\n if (globalXmlParser.boolAttr(c, \"noVBand\") || (val & 0x0400))\n className += \" no-vband\";\n return className.trim();\n }\n}\n\nconst defaultTab = { pos: 0, leader: \"none\", style: \"left\" };\nconst maxTabs = 50;\nfunction computePixelToPoint(container = document.body) {\n const temp = document.createElement(\"div\");\n temp.style.width = '100pt';\n container.appendChild(temp);\n const result = 100 / temp.offsetWidth;\n container.removeChild(temp);\n return result;\n}\nfunction updateTabStop(elem, tabs, defaultTabSize, pixelToPoint = 72 / 96) {\n const p = elem.closest(\"p\");\n const ebb = elem.getBoundingClientRect();\n const pbb = p.getBoundingClientRect();\n const pcs = getComputedStyle(p);\n const tabStops = tabs?.length > 0 ? tabs.map(t => ({\n pos: lengthToPoint(t.position),\n leader: t.leader,\n style: t.style\n })).sort((a, b) => a.pos - b.pos) : [defaultTab];\n const lastTab = tabStops[tabStops.length - 1];\n const pWidthPt = pbb.width * pixelToPoint;\n const size = lengthToPoint(defaultTabSize);\n let pos = lastTab.pos + size;\n if (pos < pWidthPt) {\n for (; pos < pWidthPt && tabStops.length < maxTabs; pos += size) {\n tabStops.push({ ...defaultTab, pos: pos });\n }\n }\n const marginLeft = parseFloat(pcs.marginLeft);\n const pOffset = pbb.left + marginLeft;\n const left = (ebb.left - pOffset) * pixelToPoint;\n const tab = tabStops.find(t => t.style != \"clear\" && t.pos > left);\n if (tab == null)\n return;\n let width = 1;\n if (tab.style == \"right\" || tab.style == \"center\") {\n const tabStops = Array.from(p.querySelectorAll(`.${elem.className}`));\n const nextIdx = tabStops.indexOf(elem) + 1;\n const range = document.createRange();\n range.setStart(elem, 1);\n if (nextIdx < tabStops.length) {\n range.setEndBefore(tabStops[nextIdx]);\n }\n else {\n range.setEndAfter(p);\n }\n const mul = tab.style == \"center\" ? 0.5 : 1;\n const nextBB = range.getBoundingClientRect();\n const offset = nextBB.left + mul * nextBB.width - (pbb.left - marginLeft);\n width = tab.pos - offset * pixelToPoint;\n }\n else {\n width = tab.pos - left;\n }\n elem.innerHTML = \"&nbsp;\";\n elem.style.textDecoration = \"inherit\";\n elem.style.wordSpacing = `${width.toFixed(0)}pt`;\n switch (tab.leader) {\n case \"dot\":\n case \"middleDot\":\n elem.style.textDecoration = \"underline\";\n elem.style.textDecorationStyle = \"dotted\";\n break;\n case \"hyphen\":\n case \"heavy\":\n case \"underscore\":\n elem.style.textDecoration = \"underline\";\n break;\n }\n}\nfunction lengthToPoint(length) {\n return parseFloat(length);\n}\n\nconst ns = {\n svg: \"http://www.w3.org/2000/svg\",\n mathML: \"http://www.w3.org/1998/Math/MathML\"\n};\nclass HtmlRenderer {\n constructor(htmlDocument) {\n this.htmlDocument = htmlDocument;\n this.className = \"docx\";\n this.styleMap = {};\n this.currentPart = null;\n this.tableVerticalMerges = [];\n this.currentVerticalMerge = null;\n this.tableCellPositions = [];\n this.currentCellPosition = null;\n this.footnoteMap = {};\n this.endnoteMap = {};\n this.currentEndnoteIds = [];\n this.usedHederFooterParts = [];\n this.currentTabs = [];\n this.commentMap = {};\n this.tasks = [];\n this.postRenderTasks = [];\n }\n async render(document, bodyContainer, styleContainer = null, options) {\n this.document = document;\n this.options = options;\n this.className = options.className;\n this.rootSelector = options.inWrapper ? `.${this.className}-wrapper` : ':root';\n this.styleMap = null;\n this.tasks = [];\n if (this.options.renderComments && globalThis.Highlight) {\n this.commentHighlight = new Highlight();\n }\n styleContainer = styleContainer || bodyContainer;\n removeAllElements(styleContainer);\n removeAllElements(bodyContainer);\n styleContainer.appendChild(this.createComment(\"docxjs library predefined styles\"));\n styleContainer.appendChild(this.renderDefaultStyle());\n if (document.themePart) {\n styleContainer.appendChild(this.createComment(\"docxjs document theme values\"));\n this.renderTheme(document.themePart, styleContainer);\n }\n if (document.stylesPart != null) {\n this.styleMap = this.processStyles(document.stylesPart.styles);\n styleContainer.appendChild(this.createComment(\"docxjs document styles\"));\n styleContainer.appendChild(this.renderStyles(document.stylesPart.styles));\n }\n if (document.numberingPart) {\n this.prodessNumberings(document.numberingPart.domNumberings);\n styleContainer.appendChild(this.createComment(\"docxjs document numbering styles\"));\n styleContainer.appendChild(this.renderNumbering(document.numberingPart.domNumberings, styleContainer));\n }\n if (document.footnotesPart) {\n this.footnoteMap = keyBy(document.footnotesPart.notes, x => x.id);\n }\n if (document.endnotesPart) {\n this.endnoteMap = keyBy(document.endnotesPart.notes, x => x.id);\n }\n if (document.settingsPart) {\n this.defaultTabSize = document.settingsPart.settings?.defaultTabStop;\n }\n if (!options.ignoreFonts && document.fontTablePart)\n this.renderFontTable(document.fontTablePart, styleContainer);\n var sectionElements = this.renderSections(document.documentPart.body);\n if (this.options.inWrapper) {\n bodyContainer.appendChild(this.renderWrapper(sectionElements));\n }\n else {\n appendChildren(bodyContainer, sectionElements);\n }\n if (this.commentHighlight && options.renderComments) {\n CSS.highlights.set(`${this.className}-comments`, this.commentHighlight);\n }\n this.postRenderTasks.forEach(t => t());\n await Promise.allSettled(this.tasks);\n this.refreshTabStops();\n }\n renderTheme(themePart, styleContainer) {\n const variables = {};\n const fontScheme = themePart.theme?.fontScheme;\n if (fontScheme) {\n if (fontScheme.majorFont) {\n variables['--docx-majorHAnsi-font'] = fontScheme.majorFont.latinTypeface;\n }\n if (fontScheme.minorFont) {\n variables['--docx-minorHAnsi-font'] = fontScheme.minorFont.latinTypeface;\n }\n }\n const colorScheme = themePart.theme?.colorScheme;\n if (colorScheme) {\n for (let [k, v] of Object.entries(colorScheme.colors)) {\n variables[`--docx-${k}-color`] = `#${v}`;\n }\n }\n const cssText = this.styleToString(`.${this.className}`, variables);\n styleContainer.appendChild(this.createStyleElement(cssText));\n }\n renderFontTable(fontsPart, styleContainer) {\n for (let f of fontsPart.fonts) {\n for (let ref of f.embedFontRefs) {\n this.tasks.push(this.document.loadFont(ref.id, ref.key).then(fontData => {\n const cssValues = {\n 'font-family': encloseFontFamily(f.name),\n 'src': `url(${fontData})`\n };\n if (ref.type == \"bold\" || ref.type == \"boldItalic\") {\n cssValues['font-weight'] = 'bold';\n }\n if (ref.type == \"italic\" || ref.type == \"boldItalic\") {\n cssValues['font-style'] = 'italic';\n }\n const cssText = this.styleToString(\"@font-face\", cssValues);\n styleContainer.appendChild(this.createComment(`docxjs ${f.name} font`));\n styleContainer.appendChild(this.createStyleElement(cssText));\n }));\n }\n }\n }\n processStyleName(className) {\n return className ? `${this.className}_${escapeClassName(className)}` : this.className;\n }\n processStyles(styles) {\n const stylesMap = keyBy(styles.filter(x => x.id != null), x => x.id);\n for (const style of styles.filter(x => x.basedOn)) {\n var baseStyle = stylesMap[style.basedOn];\n if (baseStyle) {\n style.paragraphProps = mergeDeep(style.paragraphProps, baseStyle.paragraphProps);\n style.runProps = mergeDeep(style.runProps, baseStyle.runProps);\n for (const baseValues of baseStyle.styles) {\n const styleValues = style.styles.find(x => x.target == baseValues.target);\n if (styleValues) {\n this.copyStyleProperties(baseValues.values, styleValues.values);\n }\n else {\n style.styles.push({ ...baseValues, values: { ...baseValues.values } });\n }\n }\n }\n else if (this.options.debug)\n console.warn(`Can't find base style ${style.basedOn}`);\n }\n for (let style of styles) {\n style.cssName = this.processStyleName(style.id);\n }\n return stylesMap;\n }\n prodessNumberings(numberings) {\n for (let num of numberings.filter(n => n.pStyleName)) {\n const style = this.findStyle(num.pStyleName);\n if (style?.paragraphProps?.numbering) {\n style.paragraphProps.numbering.level = num.level;\n }\n }\n }\n processElement(element) {\n if (element.children) {\n for (var e of element.children) {\n e.parent = element;\n if (e.type == DomType.Table) {\n this.processTable(e);\n }\n else {\n this.processElement(e);\n }\n }\n }\n }\n processTable(table) {\n for (var r of table.children) {\n for (var c of r.children) {\n c.cssStyle = this.copyStyleProperties(table.cellStyle, c.cssStyle, [\n \"border-left\", \"border-right\", \"border-top\", \"border-bottom\",\n \"padding-left\", \"padding-right\", \"padding-top\", \"padding-bottom\"\n ]);\n this.processElement(c);\n }\n }\n }\n copyStyleProperties(input, output, attrs = null) {\n if (!input)\n return output;\n if (output == null)\n output = {};\n if (attrs == null)\n attrs = Object.getOwnPropertyNames(input);\n for (var key of attrs) {\n if (input.hasOwnProperty(key) && !output.hasOwnProperty(key))\n output[key] = input[key];\n }\n return output;\n }\n createPageElement(className, props) {\n var elem = this.createElement(\"section\", { className });\n if (props) {\n if (props.pageMargins) {\n elem.style.paddingLeft = props.pageMargins.left;\n elem.style.paddingRight = props.pageMargins.right;\n elem.style.paddingTop = props.pageMargins.top;\n elem.style.paddingBottom = props.pageMargins.bottom;\n }\n if (props.pageSize) {\n if (!this.options.ignoreWidth)\n elem.style.width = props.pageSize.width;\n if (!this.options.ignoreHeight)\n elem.style.minHeight = props.pageSize.height;\n }\n }\n return elem;\n }\n createSectionContent(props) {\n var elem = this.createElement(\"article\");\n if (props.columns && props.columns.numberOfColumns) {\n elem.style.columnCount = `${props.columns.numberOfColumns}`;\n elem.style.columnGap = props.columns.space;\n if (props.columns.separator) {\n elem.style.columnRule = \"1px solid black\";\n }\n }\n return elem;\n }\n renderSections(document) {\n const result = [];\n this.processElement(document);\n const sections = this.splitBySection(document.children, document.props);\n const pages = this.groupByPageBreaks(sections);\n let prevProps = null;\n for (let i = 0, l = pages.length; i < l; i++) {\n this.currentFootnoteIds = [];\n const section = pages[i][0];\n let props = section.sectProps;\n const pageElement = this.createPageElement(this.className, props);\n this.renderStyleValues(document.cssStyle, pageElement);\n this.options.renderHeaders && this.renderHeaderFooter(props.headerRefs, props, result.length, prevProps != props, pageElement);\n for (const sect of pages[i]) {\n var contentElement = this.createSectionContent(sect.sectProps);\n this.renderElements(sect.elements, contentElement);\n pageElement.appendChild(contentElement);\n props = sect.sectProps;\n }\n if (this.options.renderFootnotes) {\n this.renderNotes(this.currentFootnoteIds, this.footnoteMap, pageElement);\n }\n if (this.options.renderEndnotes && i == l - 1) {\n this.renderNotes(this.currentEndnoteIds, this.endnoteMap, pageElement);\n }\n this.options.renderFooters && this.renderHeaderFooter(props.footerRefs, props, result.length, prevProps != props, pageElement);\n result.push(pageElement);\n prevProps = props;\n }\n return result;\n }\n renderHeaderFooter(refs, props, page, firstOfSection, into) {\n if (!refs)\n return;\n var ref = (props.titlePage && firstOfSection ? refs.find(x => x.type == \"first\") : null)\n ?? (page % 2 == 1 ? refs.find(x => x.type == \"even\") : null)\n ?? refs.find(x => x.type == \"default\");\n var part = ref && this.document.findPartByRelId(ref.id, this.document.documentPart);\n if (part) {\n this.currentPart = part;\n if (!this.usedHederFooterParts.includes(part.path)) {\n this.processElement(part.rootElement);\n this.usedHederFooterParts.push(part.path);\n }\n const [el] = this.renderElements([part.rootElement], into);\n if (props?.pageMargins) {\n if (part.rootElement.type === DomType.Header) {\n el.style.marginTop = `calc(${props.pageMargins.header} - ${props.pageMargins.top})`;\n el.style.minHeight = `calc(${props.pageMargins.top} - ${props.pageMargins.header})`;\n }\n else if (part.rootElement.type === DomType.Footer) {\n el.style.marginBottom = `calc(${props.pageMargins.footer} - ${props.pageMargins.bottom})`;\n el.style.minHeight = `calc(${props.pageMargins.bottom} - ${props.pageMargins.footer})`;\n }\n }\n this.currentPart = null;\n }\n }\n isPageBreakElement(elem) {\n if (elem.type != DomType.Break)\n return false;\n if (elem.break == \"lastRenderedPageBreak\")\n return !this.options.ignoreLastRenderedPageBreak;\n return elem.break == \"page\";\n }\n isPageBreakSection(prev, next) {\n if (!prev)\n return false;\n if (!next)\n return false;\n return prev.pageSize?.orientation != next.pageSize?.orientation\n || prev.pageSize?.width != next.pageSize?.width\n || prev.pageSize?.height != next.pageSize?.height;\n }\n splitBySection(elements, defaultProps) {\n var current = { sectProps: null, elements: [], pageBreak: false };\n var result = [current];\n for (let elem of elements) {\n if (elem.type == DomType.Paragraph) {\n const s = this.findStyle(elem.styleName);\n if (s?.paragraphProps?.pageBreakBefore) {\n current.sectProps = sectProps;\n current.pageBreak = true;\n current = { sectProps: null, elements: [], pageBreak: false };\n result.push(current);\n }\n }\n current.elements.push(elem);\n if (elem.type == DomType.Paragraph) {\n const p = elem;\n var sectProps = p.sectionProps;\n var pBreakIndex = -1;\n var rBreakIndex = -1;\n if (this.options.breakPages && p.children) {\n pBreakIndex = p.children.findIndex(r => {\n rBreakIndex = r.children?.findIndex(this.isPageBreakElement.bind(this)) ?? -1;\n return rBreakIndex != -1;\n });\n }\n if (sectProps || pBreakIndex != -1) {\n current.sectProps = sectProps;\n current.pageBreak = pBreakIndex != -1;\n current = { sectProps: null, elements: [], pageBreak: false };\n result.push(current);\n }\n if (pBreakIndex != -1) {\n let breakRun = p.children[pBreakIndex];\n let splitRun = rBreakIndex < breakRun.children.length - 1;\n if (pBreakIndex < p.children.length - 1 || splitRun) {\n var children = elem.children;\n var newParagraph = { ...elem, children: children.slice(pBreakIndex) };\n elem.children = children.slice(0, pBreakIndex);\n current.elements.push(newParagraph);\n if (splitRun) {\n let runChildren = breakRun.children;\n let newRun = { ...breakRun, children: runChildren.slice(0, rBreakIndex) };\n elem.children.push(newRun);\n breakRun.children = runChildren.slice(rBreakIndex);\n }\n }\n }\n }\n }\n let currentSectProps = null;\n for (let i = result.length - 1; i >= 0; i--) {\n if (result[i].sectProps == null) {\n result[i].sectProps = currentSectProps ?? defaultProps;\n }\n else {\n currentSectProps = result[i].sectProps;\n }\n }\n return result;\n }\n groupByPageBreaks(sections) {\n let current = [];\n let prev;\n const result = [current];\n for (let s of sections) {\n current.push(s);\n if (this.options.ignoreLastRenderedPageBreak || s.pageBreak || this.isPageBreakSection(prev, s.sectProps))\n result.push(current = []);\n prev = s.sectProps;\n }\n return result.filter(x => x.length > 0);\n }\n renderWrapper(children) {\n return this.createElement(\"div\", { className: `${this.className}-wrapper` }, children);\n }\n renderDefaultStyle() {\n var c = this.className;\n var wrapperStyle = `\r\n.${c}-wrapper { background: gray; padding: 30px; padding-bottom: 0px; display: flex; flex-flow: column; align-items: center; } \r\n.${c}-wrapper>section.${c} { background: white; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); margin-bottom: 30px; }`;\n if (this.options.hideWrapperOnPrint) {\n wrapperStyle = `@media not print { ${wrapperStyle} }`;\n }\n var styleText = `${wrapperStyle}\r\n.${c} { color: black; hyphens: auto; text-underline-position: from-font; }\r\nsection.${c} { box-sizing: border-box; display: flex; flex-flow: column nowrap; position: relative; overflow: hidden; }\r\nsection.${c}>article { margin-bottom: auto; z-index: 1; }\r\nsection.${c}>footer { z-index: 1; }\r\n.${c} table { border-collapse: collapse; }\r\n.${c} table td, .${c} table th { vertical-align: top; }\r\n.${c} p { margin: 0pt; min-height: 1em; }\r\n.${c} span { white-space: pre-wrap; overflow-wrap: break-word; }\r\n.${c} a { color: inherit; text-decoration: inherit; }\r\n.${c} svg { fill: transparent; }\r\n`;\n if (this.options.renderComments) {\n styleText += `\r\n.${c}-comment-ref { cursor: default; }\r\n.${c}-comment-popover { display: none; z-index: 1000; padding: 0.5rem; background: white; position: absolute; box-shadow: 0 0 0.25rem rgba(0, 0, 0, 0.25); width: 30ch; }\r\n.${c}-comment-ref:hover~.${c}-comment-popover { display: block; }\r\n.${c}-comment-author,.${c}-comment-date { font-size: 0.875rem; color: #888; }\r\n`;\n }\n return this.createStyleElement(styleText);\n }\n renderNumbering(numberings, styleContainer) {\n var styleText = \"\";\n var resetCounters = [];\n for (var num of numberings) {\n var selector = `p.${this.numberingClass(num.id, num.level)}`;\n var listStyleType = \"none\";\n if (num.bullet) {\n let valiable = `--${this.className}-${num.bullet.src}`.toLowerCase();\n styleText += this.styleToString(`${selector}:before`, {\n \"content\": \"' '\",\n \"display\": \"inline-block\",\n \"background\": `var(${valiable})`\n }, num.bullet.style);\n this.tasks.push(this.document.loadNumberingImage(num.bullet.src).then(data => {\n var text = `${this.rootSelector} { ${valiable}: url(${data}) }`;\n styleContainer.appendChild(this.createStyleElement(text));\n }));\n }\n else if (num.levelText) {\n let counter = this.numberingCounter(num.id, num.level);\n const counterReset = counter + \" \" + (num.start - 1);\n if (num.level > 0) {\n styleText += this.styleToString(`p.${this.numberingClass(num.id, num.level - 1)}`, {\n \"counter-set\": counterReset\n });\n }\n resetCounters.push(counterReset);\n styleText += this.styleToString(`${selector}:before`, {\n \"content\": this.levelTextToContent(num.levelText, num.suff, num.id, this.numFormatToCssValue(num.format)),\n \"counter-increment\": counter,\n ...num.rStyle,\n });\n }\n else {\n listStyleType = this.numFormatToCssValue(num.format);\n }\n styleText += this.styleToString(selector, {\n \"display\": \"list-item\",\n \"list-style-position\": \"inside\",\n \"list-style-type\": listStyleType,\n ...num.pStyle\n });\n }\n if (resetCounters.length > 0) {\n styleText += this.styleToString(this.rootSelector, {\n \"counter-reset\": resetCounters.join(\" \")\n });\n }\n return this.createStyleElement(styleText);\n }\n renderStyles(styles) {\n var styleText = \"\";\n const stylesMap = this.styleMap;\n const defautStyles = keyBy(styles.filter(s => s.isDefault), s => s.target);\n for (const style of styles) {\n var subStyles = style.styles;\n if (style.linked) {\n var linkedStyle = style.linked && stylesMap[style.linked];\n if (linkedStyle)\n subStyles = subStyles.concat(linkedStyle.styles);\n else if (this.options.debug)\n console.warn(`Can't find linked style ${style.linked}`);\n }\n for (const subStyle of subStyles) {\n var selector = `${style.target ?? ''}.${style.cssName}`;\n if (style.target != subStyle.target)\n selector += ` ${subStyle.target}`;\n if (defautStyles[style.target] == style)\n selector = `.${this.className} ${style.target}, ` + selector;\n styleText += this.styleToString(selector, subStyle.values);\n }\n }\n return this.createStyleElement(styleText);\n }\n renderNotes(noteIds, notesMap, into) {\n var notes = noteIds.map(id => notesMap[id]).filter(x => x);\n if (notes.length > 0) {\n var result = this.createElement(\"ol\", null, this.renderElements(notes));\n into.appendChild(result);\n }\n }\n renderElement(elem) {\n switch (elem.type) {\n case DomType.Paragraph:\n return this.renderParagraph(elem);\n case DomType.BookmarkStart:\n return this.renderBookmarkStart(elem);\n case DomType.BookmarkEnd:\n return null;\n case DomType.Run:\n return this.renderRun(elem);\n case DomType.Table:\n return this.renderTable(elem);\n case DomType.Row:\n return this.renderTableRow(elem);\n case DomType.Cell:\n return this.renderTableCell(elem);\n case DomType.Hyperlink:\n return this.renderHyperlink(elem);\n case DomType.SmartTag:\n return this.renderSmartTag(elem);\n case DomType.Drawing:\n return this.renderDrawing(elem);\n case DomType.Image:\n return this.renderImage(elem);\n case DomType.Text:\n return this.renderText(elem);\n case DomType.Text:\n return this.renderText(elem);\n case DomType.DeletedText:\n return this.renderDeletedText(elem);\n case DomType.Tab:\n return this.renderTab(elem);\n case DomType.Symbol:\n return this.renderSymbol(elem);\n case DomType.Break:\n return this.renderBreak(elem);\n case DomType.Footer:\n return this.renderContainer(elem, \"footer\");\n case DomType.Header:\n return this.renderContainer(elem, \"header\");\n case DomType.Footnote:\n case DomType.Endnote:\n return this.renderContainer(elem, \"li\");\n case DomType.FootnoteReference:\n return this.renderFootnoteReference(elem);\n case DomType.EndnoteReference:\n return this.renderEndnoteReference(elem);\n case DomType.NoBreakHyphen:\n return this.createElement(\"wbr\");\n case DomType.VmlPicture:\n return this.renderVmlPicture(elem);\n case DomType.VmlElement:\n return this.renderVmlElement(elem);\n case DomType.MmlMath:\n return this.renderContainerNS(elem, ns.mathML, \"math\", { xmlns: ns.mathML });\n case DomType.MmlMathParagraph:\n return this.renderContainer(elem, \"span\");\n case DomType.MmlFraction:\n return this.renderContainerNS(elem, ns.mathML, \"mfrac\");\n case DomType.MmlBase:\n return this.renderContainerNS(elem, ns.mathML, elem.parent.type == DomType.MmlMatrixRow ? \"mtd\" : \"mrow\");\n case DomType.MmlNumerator:\n case DomType.MmlDenominator:\n case DomType.MmlFunction:\n case DomType.MmlLimit:\n case DomType.MmlBox:\n return this.renderContainerNS(elem, ns.mathML, \"mrow\");\n case DomType.MmlGroupChar:\n return this.renderMmlGroupChar(elem);\n case DomType.MmlLimitLower:\n return this.renderContainerNS(elem, ns.mathML, \"munder\");\n case DomType.MmlMatrix:\n return this.renderContainerNS(elem, ns.mathML, \"mtable\");\n case DomType.MmlMatrixRow:\n return this.renderContainerNS(elem, ns.mathML, \"mtr\");\n case DomType.MmlRadical:\n return this.renderMmlRadical(elem);\n case DomType.MmlSuperscript:\n return this.renderContainerNS(elem, ns.mathML, \"msup\");\n case DomType.MmlSubscript:\n return this.renderContainerNS(elem, ns.mathML, \"msub\");\n case DomType.MmlDegree:\n case DomType.MmlSuperArgument:\n case DomType.MmlSubArgument:\n return this.renderContainerNS(elem, ns.mathML, \"mn\");\n case DomType.MmlFunctionName:\n return this.renderContainerNS(elem, ns.mathML, \"ms\");\n case DomType.MmlDelimiter:\n return this.renderMmlDelimiter(elem);\n case DomType.MmlRun:\n return this.renderMmlRun(elem);\n case DomType.MmlNary:\n return this.renderMmlNary(elem);\n case DomType.MmlPreSubSuper:\n return this.renderMmlPreSubSuper(elem);\n case DomType.MmlBar:\n return this.renderMmlBar(elem);\n case DomType.MmlEquationArray:\n return this.renderMllList(elem);\n case DomType.Inserted:\n return this.renderInserted(elem);\n case DomType.Deleted:\n return this.renderDeleted(elem);\n case DomType.CommentRangeStart:\n return this.renderCommentRangeStart(elem);\n case DomType.CommentRangeEnd:\n return this.renderCommentRangeEnd(elem);\n case DomType.CommentReference:\n return this.renderCommentReference(elem);\n case DomType.AltChunk:\n return this.renderAltChunk(elem);\n }\n return null;\n }\n renderElements(elems, into) {\n if (elems == null)\n return null;\n var result = elems.flatMap(e => this.renderElement(e)).filter(e => e != null);\n if (into)\n appendChildren(into, result);\n return result;\n }\n renderContainer(elem, tagName, props) {\n return this.createElement(tagName, props, this.renderElements(elem.children));\n }\n renderContainerNS(elem, ns, tagName, props) {\n return this.createElementNS(ns, tagName, props, this.renderElements(elem.children));\n }\n renderParagraph(elem) {\n var result = this.renderContainer(elem, \"p\");\n const style = this.findStyle(elem.styleName);\n elem.tabs ?? (elem.tabs = style?.paragraphProps?.tabs);\n this.renderClass(elem, result);\n this.renderStyleValues(elem.cssStyle, result);\n this.renderCommonProperties(result.style, elem);\n const numbering = elem.numbering ?? style?.paragraphProps?.numbering;\n if (numbering) {\n result.classList.add(this.numberingClass(numbering.id, numbering.level));\n }\n return result;\n }\n renderRunProperties(style, props) {\n this.renderCommonProperties(style, props);\n }\n renderCommonProperties(style, props) {\n if (props == null)\n return;\n if (props.color) {\n style[\"color\"] = props.color;\n }\n if (props.fontSize) {\n style[\"font-size\"] = props.fontSize;\n }\n }\n renderHyperlink(elem) {\n var result = this.renderContainer(elem, \"a\");\n this.renderStyleValues(elem.cssStyle, result);\n let href = '';\n if (elem.id) {\n const rel = this.document.documentPart.rels.find(it => it.id == elem.id && it.targetMode === \"External\");\n href = rel?.target ?? href;\n }\n if (elem.anchor) {\n href += `#${elem.anchor}`;\n }\n result.href = href;\n return result;\n }\n renderSmartTag(elem) {\n return this.renderContainer(elem, \"span\");\n }\n renderCommentRangeStart(commentStart) {\n if (!this.options.renderComments)\n return null;\n const rng = new Range();\n this.commentHighlight?.add(rng);\n const result = this.createComment(`start of comment #${commentStart.id}`);\n this.later(() => rng.setStart(result, 0));\n this.commentMap[commentStart.id] = rng;\n return result;\n }\n renderCommentRangeEnd(commentEnd) {\n if (!this.options.renderComments)\n return null;\n const rng = this.commentMap[commentEnd.id];\n const result = this.createComment(`end of comment #${commentEnd.id}`);\n this.later(() => rng?.setEnd(result, 0));\n return result;\n }\n renderCommentReference(commentRef) {\n if (!this.options.renderComments)\n return null;\n var comment = this.document.commentsPart?.commentMap[commentRef.id];\n if (!comment)\n return null;\n const frg = new DocumentFragment();\n const commentRefEl = this.createElement(\"span\", { className: `${this.className}-comment-ref` }, ['💬']);\n const commentsContainerEl = this.createElement(\"div\", { className: `${this.className}-comment-popover` });\n this.renderCommentContent(comment, commentsContainerEl);\n frg.appendChild(this.createComment(`comment #${comment.id} by ${comment.author} on ${comment.date}`));\n frg.appendChild(commentRefEl);\n frg.appendChild(commentsContainerEl);\n return frg;\n }\n renderAltChunk(elem) {\n if (!this.options.renderAltChunks)\n return null;\n var result = this.createElement(\"iframe\");\n this.tasks.push(this.document.loadAltChunk(elem.id, this.currentPart).then(x => {\n result.srcdoc = x;\n }));\n return result;\n }\n renderCommentContent(comment, container) {\n container.appendChild(this.createElement('div', { className: `${this.className}-comment-author` }, [comment.author]));\n container.appendChild(this.createElement('div', { className: `${this.className}-comment-date` }, [new Date(comment.date).toLocaleString()]));\n this.renderElements(comment.children, container);\n }\n renderDrawing(elem) {\n var result = this.renderContainer(elem, \"div\");\n result.style.display = \"inline-block\";\n result.style.position = \"relative\";\n result.style.textIndent = \"0px\";\n this.renderStyleValues(elem.cssStyle, result);\n return result;\n }\n renderImage(elem) {\n let result = this.createElement(\"img\");\n let transform = elem.cssStyle?.transform;\n this.renderStyleValues(elem.cssStyle, result);\n if (elem.srcRect && elem.srcRect.some(x => x != 0)) {\n var [left, top, right, bottom] = elem.srcRect;\n transform = `scale(${1 / (1 - left - right)}, ${1 / (1 - top - bottom)})`;\n result.style['clip-path'] = `rect(${(100 * top).toFixed(2)}% ${(100 * (1 - right)).toFixed(2)}% ${(100 * (1 - bottom)).toFixed(2)}% ${(100 * left).toFixed(2)}%)`;\n }\n if (elem.rotation)\n transform = `rotate(${elem.rotation}deg) ${transform ?? ''}`;\n result.style.transform = transform?.trim();\n if (this.document) {\n this.tasks.push(this.document.loadDocumentImage(elem.src, this.currentPart).then(x => {\n result.src = x;\n }));\n }\n return result;\n }\n renderText(elem) {\n return this.htmlDocument.createTextNode(elem.text);\n }\n renderDeletedText(elem) {\n return this.options.renderChanges ? this.renderText(elem) : null;\n }\n renderBreak(elem) {\n if (elem.break == \"textWrapping\") {\n return this.createElement(\"br\");\n }\n return null;\n }\n renderInserted(elem) {\n if (this.options.renderChanges)\n return this.renderContainer(elem, \"ins\");\n return this.renderElements(elem.children);\n }\n renderDeleted(elem) {\n if (this.options.renderChanges)\n return this.renderContainer(elem, \"del\");\n return null;\n }\n renderSymbol(elem) {\n var span = this.createElement(\"span\");\n span.style.fontFamily = elem.font;\n span.innerHTML = `&#x${elem.char};`;\n return span;\n }\n renderFootnoteReference(elem) {\n var result = this.createElement(\"sup\");\n this.currentFootnoteIds.push(elem.id);\n result.textContent = `${this.currentFootnoteIds.length}`;\n return result;\n }\n renderEndnoteReference(elem) {\n var result = this.createElement(\"sup\");\n this.currentEndnoteIds.push(elem.id);\n result.textContent = `${this.currentEndnoteIds.length}`;\n return result;\n }\n renderTab(elem) {\n var tabSpan = this.createElement(\"span\");\n tabSpan.innerHTML = \"&emsp;\";\n if (this.options.experimental) {\n tabSpan.className = this.tabStopClass();\n var stops = findParent(elem, DomType.Paragraph)?.tabs;\n this.currentTabs.push({ stops, span: tabSpan });\n }\n return tabSpan;\n }\n renderBookmarkStart(elem) {\n return this.createElement(\"span\", { id: elem.name });\n }\n renderRun(elem) {\n if (elem.fieldRun)\n return null;\n const result = this.createElement(\"span\");\n if (elem.id)\n result.id = elem.id;\n this.renderClass(elem, result);\n this.renderStyleValues(elem.cssStyle, result);\n if (elem.verticalAlign) {\n const wrapper = this.createElement(elem.verticalAlign);\n this.renderElements(elem.children, wrapper);\n result.appendChild(wrapper);\n }\n else {\n this.renderElements(elem.children, result);\n }\n return result;\n }\n renderTable(elem) {\n let result = this.createElement(\"table\");\n this.tableCellPositions.push(this.currentCellPosition);\n this.tableVerticalMerges.push(this.currentVerticalMerge);\n this.currentVerticalMerge = {};\n this.currentCellPosition = { col: 0, row: 0 };\n if (elem.columns)\n result.appendChild(this.renderTableColumns(elem.columns));\n this.renderClass(elem, result);\n this.renderElements(elem.children, result);\n this.renderStyleValues(elem.cssStyle, result);\n this.currentVerticalMerge = this.tableVerticalMerges.pop();\n this.currentCellPosition = this.tableCellPositions.pop();\n return result;\n }\n renderTableColumns(columns) {\n let result = this.createElement(\"colgroup\");\n for (let col of columns) {\n let colElem = this.createElement(\"col\");\n if (col.width)\n colElem.style.width = col.width;\n result.appendChild(colElem);\n }\n return result;\n }\n renderTableRow(elem) {\n let result = this.createElement(\"tr\");\n this.currentCellPosition.col = 0;\n if (elem.gridBefore)\n result.appendChild(this.renderTableCellPlaceholder(elem.gridBefore));\n this.renderClass(elem, result);\n this.renderElements(elem.children, result);\n this.renderStyleValues(elem.cssStyle, result);\n if (elem.gridAfter)\n result.appendChild(this.renderTableCellPlaceholder(elem.gridAfter));\n this.currentCellPosition.row++;\n return result;\n }\n renderTableCellPlaceholder(colSpan) {\n const result = this.createElement(\"td\", { colSpan });\n result.style['border'] = 'none';\n return result;\n }\n renderTableCell(elem) {\n let result = this.renderContainer(elem, \"td\");\n const key = this.currentCellPosition.col;\n if (elem.verticalMerge) {\n if (elem.verticalMerge == \"restart\") {\n this.currentVerticalMerge[key] = result;\n result.rowSpan = 1;\n }\n else if (this.currentVerticalMerge[key]) {\n this.currentVerticalMerge[key].rowSpan += 1;\n result.style.display = \"none\";\n }\n }\n else {\n this.currentVerticalMerge[key] = null;\n }\n this.renderClass(elem, result);\n this.renderStyleValues(elem.cssStyle, result);\n if (elem.span)\n result.colSpan = elem.span;\n this.currentCellPosition.col += result.colSpan;\n return result;\n }\n renderVmlPicture(elem) {\n return this.renderContainer(elem, \"div\");\n }\n renderVmlElement(elem) {\n var container = this.createSvgElement(\"svg\");\n container.setAttribute(\"style\", elem.cssStyleText);\n const result = this.renderVmlChildElement(elem);\n if (elem.imageHref?.id) {\n this.tasks.push(this.document?.loadDocumentImage(elem.imageHref.id, this.currentPart)\n .then(x => result.setAttribute(\"href\", x)));\n }\n container.appendChild(result);\n requestAnimationFrame(() => {\n const bb = container.firstElementChild.getBBox();\n container.setAttribute(\"width\", `${Math.ceil(bb.x + bb.width)}`);\n container.setAttribute(\"height\", `${Math.ceil(bb.y + bb.height)}`);\n });\n return container;\n }\n renderVmlChildElement(elem) {\n const result = this.createSvgElement(elem.tagName);\n Object.entries(elem.attrs).forEach(([k, v]) => result.setAttribute(k, v));\n for (let child of elem.children) {\n if (child.type == DomType.VmlElement) {\n result.appendChild(this.renderVmlChildElement(child));\n }\n else {\n result.appendChild(...asArray(this.renderElement(child)));\n }\n }\n return result;\n }\n renderMmlRadical(elem) {\n const base = elem.children.find(el => el.type == DomType.MmlBase);\n if (elem.props?.hideDegree) {\n return this.createElementNS(ns.mathML, \"msqrt\", null, this.renderElements([base]));\n }\n const degree = elem.children.find(el => el.type == DomType.MmlDegree);\n return this.createElementNS(ns.mathML, \"mroot\", null, this.renderElements([base, degree]));\n }\n renderMmlDelimiter(elem) {\n const children = [];\n children.push(this.createElementNS(ns.mathML, \"mo\", null, [elem.props.beginChar ?? '(']));\n children.push(...this.renderElements(elem.children));\n children.push(this.createElementNS(ns.mathML, \"mo\", null, [elem.props.endChar ?? ')']));\n return this.createElementNS(ns.mathML, \"mrow\", null, children);\n }\n renderMmlNary(elem) {\n const children = [];\n const grouped = keyBy(elem.children, x => x.type);\n const sup = grouped[DomType.MmlSuperArgument];\n const sub = grouped[DomType.MmlSubArgument];\n const supElem = sup ? this.createElementNS(ns.mathML, \"mo\", null, asArray(this.renderElement(sup))) : null;\n const subElem = sub ? this.createElementNS(ns.mathML, \"mo\", null, asArray(this.renderElement(sub))) : null;\n const charElem = this.createElementNS(ns.mathML, \"mo\", null, [elem.props?.char ?? '\\u222B']);\n if (supElem || subElem) {\n children.push(this.createElementNS(ns.mathML, \"munderover\", null, [charElem, subElem, supElem]));\n }\n else if (supElem) {\n children.push(this.createElementNS(ns.mathML, \"mover\", null, [charElem, supElem]));\n }\n else if (subElem) {\n children.push(this.createElementNS(ns.mathML, \"munder\", null, [charElem, subElem]));\n }\n else {\n children.push(charElem);\n }\n children.push(...this.renderElements(grouped[DomType.MmlBase].children));\n return this.createElementNS(ns.mathML, \"mrow\", null, children);\n }\n renderMmlPreSubSuper(elem) {\n const children = [];\n const grouped = keyBy(elem.children, x => x.type);\n const sup = grouped[DomType.MmlSuperArgument];\n const sub = grouped[DomType.MmlSubArgument];\n const supElem = sup ? this.createElementNS(ns.mathML, \"mo\", null, asArray(this.renderElement(sup))) : null;\n const subElem = sub ? this.createElementNS(ns.mathML, \"mo\", null, asArray(this.renderElement(sub))) : null;\n const stubElem = this.createElementNS(ns.mathML, \"mo\", null);\n children.push(this.createElementNS(ns.mathML, \"msubsup\", null, [stubElem, subElem, supElem]));\n children.push(...this.renderElements(grouped[DomType.MmlBase].children));\n return this.createElementNS(ns.mathML, \"mrow\", null, children);\n }\n renderMmlGroupChar(elem) {\n const tagName = elem.props.verticalJustification === \"bot\" ? \"mover\" : \"munder\";\n const result = this.renderContainerNS(elem, ns.mathML, tagName);\n if (elem.props.char) {\n result.appendChild(this.createElementNS(ns.mathML, \"mo\", null, [elem.props.char]));\n }\n return result;\n }\n renderMmlBar(elem) {\n const result = this.renderContainerNS(elem, ns.mathML, \"mrow\");\n switch (elem.props.position) {\n case \"top\":\n result.style.textDecoration = \"overline\";\n break;\n case \"bottom\":\n result.style.textDecoration = \"underline\";\n break;\n }\n return result;\n }\n renderMmlRun(elem) {\n const result = this.createElementNS(ns.mathML, \"ms\", null, this.renderElements(elem.children));\n this.renderClass(elem, result);\n this.renderStyleValues(elem.cssStyle, result);\n return result;\n }\n renderMllList(elem) {\n const result = this.createElementNS(ns.mathML, \"mtable\");\n this.renderClass(elem, result);\n this.renderStyleValues(elem.cssStyle, result);\n for (let child of this.renderElements(elem.children)) {\n result.appendChild(this.createElementNS(ns.mathML, \"mtr\", null, [\n this.createElementNS(ns.mathML, \"mtd\", null, [child])\n ]));\n }\n return result;\n }\n renderStyleValues(style, ouput) {\n for (let k in style) {\n if (k.startsWith(\"$\")) {\n ouput.setAttribute(k.slice(1), style[k]);\n }\n else {\n ouput.style[k] = style[k];\n }\n }\n }\n renderClass(input, ouput) {\n if (input.className)\n ouput.className = input.className;\n if (input.styleName)\n ouput.classList.add(this.processStyleName(input.styleName));\n }\n findStyle(styleName) {\n return styleName && this.styleMap?.[styleName];\n }\n numberingClass(id, lvl) {\n return `${this.className}-num-${id}-${lvl}`;\n }\n tabStopClass() {\n return `${this.className}-tab-stop`;\n }\n styleToString(selectors, values, cssText = null) {\n let result = `${selectors} {\\r\\n`;\n for (const key in values) {\n if (key.startsWith('$'))\n continue;\n result += ` ${key}: ${values[key]};\\r\\n`;\n }\n if (cssText)\n result += cssText;\n return result + \"}\\r\\n\";\n }\n numberingCounter(id, lvl) {\n return `${this.className}-num-${id}-${lvl}`;\n }\n levelTextToContent(text, suff, id, numformat) {\n const suffMap = {\n \"tab\": \"\\\\9\",\n \"space\": \"\\\\a0\",\n };\n var result = text.replace(/%\\d*/g, s => {\n let lvl = parseInt(s.substring(1), 10) - 1;\n return `\"counter(${this.numberingCounter(id, lvl)}, ${numformat})\"`;\n });\n return `\"${result}${suffMap[suff] ?? \"\"}\"`;\n }\n numFormatToCssValue(format) {\n var mapping = {\n none: \"none\",\n bullet: \"disc\",\n decimal: \"decimal\",\n lowerLetter: \"lower-alpha\",\n upperLetter: \"upper-alpha\",\n lowerRoman: \"lower-roman\",\n upperRoman: \"upper-roman\",\n decimalZero: \"decimal-leading-zero\",\n aiueo: \"katakana\",\n aiueoFullWidth: \"katakana\",\n chineseCounting: \"simp-chinese-informal\",\n chineseCountingThousand: \"simp-chinese-informal\",\n chineseLegalSimplified: \"simp-chinese-formal\",\n chosung: \"hangul-consonant\",\n ideographDigital: \"cjk-ideographic\",\n ideographTraditional: \"cjk-heavenly-stem\",\n ideographLegalTraditional: \"trad-chinese-formal\",\n ideographZodiac: \"cjk-earthly-branch\",\n iroha: \"katakana-iroha\",\n irohaFullWidth: \"katakana-iroha\",\n japaneseCounting: \"japanese-informal\",\n japaneseDigitalTenThousand: \"cjk-decimal\",\n japaneseLegal: \"japanese-formal\",\n thaiNumbers: \"thai\",\n koreanCounting: \"korean-hangul-formal\",\n koreanDigital: \"korean-hangul-formal\",\n koreanDigital2: \"korean-hanja-informal\",\n hebrew1: \"hebrew\",\n hebrew2: \"hebrew\",\n hindiNumbers: \"devanagari\",\n ganada: \"hangul\",\n taiwaneseCounting: \"cjk-ideographic\",\n taiwaneseCountingThousand: \"cjk-ideographic\",\n taiwaneseDigital: \"cjk-decimal\",\n };\n return mapping[format] ?? format;\n }\n refreshTabStops() {\n if (!this.options.experimental)\n return;\n setTimeout(() => {\n const pixelToPoint = computePixelToPoint();\n for (let tab of this.currentTabs) {\n updateTabStop(tab.span, tab.stops, this.defaultTabSize, pixelToPoint);\n }\n }, 500);\n }\n createElementNS(ns, tagName, props, children) {\n var result = ns ? this.htmlDocument.createElementNS(ns, tagName) : this.htmlDocument.createElement(tagName);\n Object.assign(result, props);\n children && appendChildren(result, children);\n return result;\n }\n createElement(tagName, props, children) {\n return this.createElementNS(undefined, tagName, props, children);\n }\n createSvgElement(tagName, props, children) {\n return this.createElementNS(ns.svg, tagName, props, children);\n }\n createStyleElement(cssText) {\n return this.createElement(\"style\", { innerHTML: cssText });\n }\n createComment(text) {\n return this.htmlDocument.createComment(text);\n }\n later(func) {\n this.postRenderTasks.push(func);\n }\n}\nfunction removeAllElements(elem) {\n elem.innerHTML = '';\n}\nfunction appendChildren(elem, children) {\n children.forEach(c => elem.appendChild(isString(c) ? document.createTextNode(c) : c));\n}\nfunction findParent(elem, type) {\n var parent = elem.parent;\n while (parent != null && parent.type != type)\n parent = parent.parent;\n return parent;\n}\n\nconst defaultOptions = {\n ignoreHeight: false,\n ignoreWidth: false,\n ignoreFonts: false,\n breakPages: true,\n debug: false,\n experimental: false,\n className: \"docx\",\n inWrapper: true,\n hideWrapperOnPrint: false,\n trimXmlDeclaration: true,\n ignoreLastRenderedPageBreak: true,\n renderHeaders: true,\n renderFooters: true,\n renderFootnotes: true,\n renderEndnotes: true,\n useBase64URL: false,\n renderChanges: false,\n renderComments: false,\n renderAltChunks: true\n};\nfunction parseAsync(data, userOptions) {\n const ops = { ...defaultOptions, ...userOptions };\n return WordDocument.load(data, new DocumentParser(ops), ops);\n}\nasync function renderDocument(document, bodyContainer, styleContainer, userOptions) {\n const ops = { ...defaultOptions, ...userOptions };\n const renderer = new HtmlRenderer(window.document);\n return await renderer.render(document, bodyContainer, styleContainer, ops);\n}\nasync function renderAsync(data, bodyContainer, styleContainer, userOptions) {\n const doc = await parseAsync(data, userOptions);\n await renderDocument(doc, bodyContainer, styleContainer, userOptions);\n return doc;\n}\n\nexport { defaultOptions, parseAsync, renderAsync, renderDocument };\n//# sourceMappingURL=docx-preview.mjs.map\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"docx-preview-F-jKDMNv.js","names":["JSZip"],"sources":["../../../../../node_modules/.pnpm/docx-preview@0.3.7/node_modules/docx-preview/dist/docx-preview.mjs"],"sourcesContent":["/*\n * @license\n * docx-preview <https://github.com/VolodymyrBaydalka/docxjs>\n * Released under Apache License 2.0 <https://github.com/VolodymyrBaydalka/docxjs/blob/master/LICENSE>\n * Copyright Volodymyr Baydalka\n */\nimport JSZip from 'jszip';\n\nvar RelationshipTypes;\n(function (RelationshipTypes) {\n RelationshipTypes[\"OfficeDocument\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\";\n RelationshipTypes[\"FontTable\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable\";\n RelationshipTypes[\"Image\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\";\n RelationshipTypes[\"Numbering\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering\";\n RelationshipTypes[\"Styles\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\";\n RelationshipTypes[\"StylesWithEffects\"] = \"http://schemas.microsoft.com/office/2007/relationships/stylesWithEffects\";\n RelationshipTypes[\"Theme\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\";\n RelationshipTypes[\"Settings\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings\";\n RelationshipTypes[\"WebSettings\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings\";\n RelationshipTypes[\"Hyperlink\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\";\n RelationshipTypes[\"Footnotes\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes\";\n RelationshipTypes[\"Endnotes\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes\";\n RelationshipTypes[\"Footer\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer\";\n RelationshipTypes[\"Header\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/header\";\n RelationshipTypes[\"ExtendedProperties\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\";\n RelationshipTypes[\"CoreProperties\"] = \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\";\n RelationshipTypes[\"CustomProperties\"] = \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/custom-properties\";\n RelationshipTypes[\"Comments\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\";\n RelationshipTypes[\"CommentsExtended\"] = \"http://schemas.microsoft.com/office/2011/relationships/commentsExtended\";\n RelationshipTypes[\"AltChunk\"] = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk\";\n})(RelationshipTypes || (RelationshipTypes = {}));\nfunction parseRelationships(root, xml) {\n return xml.elements(root).map(e => ({\n id: xml.attr(e, \"Id\"),\n type: xml.attr(e, \"Type\"),\n target: xml.attr(e, \"Target\"),\n targetMode: xml.attr(e, \"TargetMode\")\n }));\n}\n\nfunction escapeClassName(className) {\n return className?.replace(/[ .]+/g, '-').replace(/[&]+/g, 'and').toLowerCase();\n}\nfunction encloseFontFamily(fontFamily) {\n return /^[^\"'].*\\s.*[^\"']$/.test(fontFamily) ? `'${fontFamily}'` : fontFamily;\n}\nfunction splitPath(path) {\n let si = path.lastIndexOf('/') + 1;\n let folder = si == 0 ? \"\" : path.substring(0, si);\n let fileName = si == 0 ? path : path.substring(si);\n return [folder, fileName];\n}\nfunction resolvePath(path, base) {\n try {\n const prefix = \"http://docx/\";\n const url = new URL(path, prefix + base).toString();\n return url.substring(prefix.length);\n }\n catch {\n return `${base}${path}`;\n }\n}\nfunction keyBy(array, by) {\n return array.reduce((a, x) => {\n a[by(x)] = x;\n return a;\n }, {});\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result);\n reader.onerror = () => reject();\n reader.readAsDataURL(blob);\n });\n}\nfunction isObject(item) {\n return item && typeof item === 'object' && !Array.isArray(item);\n}\nfunction isString(item) {\n return typeof item === 'string' || item instanceof String;\n}\nfunction mergeDeep(target, ...sources) {\n if (!sources.length)\n return target;\n const source = sources.shift();\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n const val = target[key] ?? (target[key] = {});\n mergeDeep(val, source[key]);\n }\n else {\n target[key] = source[key];\n }\n }\n }\n return mergeDeep(target, ...sources);\n}\nfunction asArray(val) {\n return Array.isArray(val) ? val : [val];\n}\nfunction clamp(val, min, max) {\n return min > val ? min : (max < val ? max : val);\n}\n\nconst ns$1 = {\n wordml: \"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"};\nconst LengthUsage = {\n Dxa: { mul: 0.05, unit: \"pt\" },\n Emu: { mul: 1 / 12700, unit: \"pt\" },\n FontSize: { mul: 0.5, unit: \"pt\" },\n Border: { mul: 0.125, unit: \"pt\", min: 0.25, max: 12 },\n Point: { mul: 1, unit: \"pt\" },\n Percent: { mul: 0.02, unit: \"%\" }};\nfunction convertLength(val, usage = LengthUsage.Dxa) {\n if (val == null || /.+(p[xt]|[%])$/.test(val)) {\n return val;\n }\n var num = parseInt(val) * usage.mul;\n if (usage.min && usage.max)\n num = clamp(num, usage.min, usage.max);\n return `${num.toFixed(2)}${usage.unit}`;\n}\nfunction convertBoolean(v, defaultValue = false) {\n switch (v) {\n case \"1\": return true;\n case \"0\": return false;\n case \"on\": return true;\n case \"off\": return false;\n case \"true\": return true;\n case \"false\": return false;\n default: return defaultValue;\n }\n}\nfunction parseCommonProperty(elem, props, xml) {\n if (elem.namespaceURI != ns$1.wordml)\n return false;\n switch (elem.localName) {\n case \"color\":\n props.color = xml.attr(elem, \"val\");\n break;\n case \"sz\":\n props.fontSize = xml.lengthAttr(elem, \"val\", LengthUsage.FontSize);\n break;\n default:\n return false;\n }\n return true;\n}\n\nfunction parseXmlString(xmlString, trimXmlDeclaration = false) {\n if (trimXmlDeclaration)\n xmlString = xmlString.replace(/<[?].*[?]>/, \"\");\n xmlString = removeUTF8BOM(xmlString);\n const result = new DOMParser().parseFromString(xmlString, \"application/xml\");\n const errorText = hasXmlParserError(result);\n if (errorText)\n throw new Error(errorText);\n return result;\n}\nfunction hasXmlParserError(doc) {\n return doc.getElementsByTagName(\"parsererror\")[0]?.textContent;\n}\nfunction removeUTF8BOM(data) {\n return data.charCodeAt(0) === 0xFEFF ? data.substring(1) : data;\n}\nfunction serializeXmlString(elem) {\n return new XMLSerializer().serializeToString(elem);\n}\nclass XmlParser {\n elements(elem, localName = null) {\n const result = [];\n for (let i = 0, l = elem.childNodes.length; i < l; i++) {\n let c = elem.childNodes.item(i);\n if (c.nodeType == Node.ELEMENT_NODE && (localName == null || c.localName == localName))\n result.push(c);\n }\n return result;\n }\n element(elem, localName) {\n for (let i = 0, l = elem.childNodes.length; i < l; i++) {\n let c = elem.childNodes.item(i);\n if (c.nodeType == 1 && c.localName == localName)\n return c;\n }\n return null;\n }\n elementAttr(elem, localName, attrLocalName) {\n var el = this.element(elem, localName);\n return el ? this.attr(el, attrLocalName) : undefined;\n }\n attrs(elem) {\n return Array.from(elem.attributes);\n }\n attr(elem, localName) {\n for (let i = 0, l = elem.attributes.length; i < l; i++) {\n let a = elem.attributes.item(i);\n if (a.localName == localName)\n return a.value;\n }\n return null;\n }\n intAttr(node, attrName, defaultValue = null) {\n var val = this.attr(node, attrName);\n return val ? parseInt(val) : defaultValue;\n }\n hexAttr(node, attrName, defaultValue = null) {\n var val = this.attr(node, attrName);\n return val ? parseInt(val, 16) : defaultValue;\n }\n floatAttr(node, attrName, defaultValue = null) {\n var val = this.attr(node, attrName);\n return val ? parseFloat(val) : defaultValue;\n }\n boolAttr(node, attrName, defaultValue = null) {\n return convertBoolean(this.attr(node, attrName), defaultValue);\n }\n lengthAttr(node, attrName, usage = LengthUsage.Dxa) {\n return convertLength(this.attr(node, attrName), usage);\n }\n}\nconst globalXmlParser = new XmlParser();\n\nclass Part {\n constructor(_package, path) {\n this._package = _package;\n this.path = path;\n }\n async load() {\n this.rels = await this._package.loadRelationships(this.path);\n const xmlText = await this._package.load(this.path);\n const xmlDoc = this._package.parseXmlDocument(xmlText);\n if (this._package.options.keepOrigin) {\n this._xmlDocument = xmlDoc;\n }\n this.parseXml(xmlDoc.firstElementChild);\n }\n save() {\n this._package.update(this.path, serializeXmlString(this._xmlDocument));\n }\n parseXml(root) {\n }\n}\n\nconst embedFontTypeMap = {\n embedRegular: 'regular',\n embedBold: 'bold',\n embedItalic: 'italic',\n embedBoldItalic: 'boldItalic',\n};\nfunction parseFonts(root, xml) {\n return xml.elements(root).map(el => parseFont(el, xml));\n}\nfunction parseFont(elem, xml) {\n let result = {\n name: xml.attr(elem, \"name\"),\n embedFontRefs: []\n };\n for (let el of xml.elements(elem)) {\n switch (el.localName) {\n case \"family\":\n result.family = xml.attr(el, \"val\");\n break;\n case \"altName\":\n result.altName = xml.attr(el, \"val\");\n break;\n case \"embedRegular\":\n case \"embedBold\":\n case \"embedItalic\":\n case \"embedBoldItalic\":\n result.embedFontRefs.push(parseEmbedFontRef(el, xml));\n break;\n }\n }\n return result;\n}\nfunction parseEmbedFontRef(elem, xml) {\n return {\n id: xml.attr(elem, \"id\"),\n key: xml.attr(elem, \"fontKey\"),\n type: embedFontTypeMap[elem.localName]\n };\n}\n\nclass FontTablePart extends Part {\n parseXml(root) {\n this.fonts = parseFonts(root, this._package.xmlParser);\n }\n}\n\nclass OpenXmlPackage {\n constructor(_zip, options) {\n this._zip = _zip;\n this.options = options;\n this.xmlParser = new XmlParser();\n }\n get(path) {\n const p = normalizePath(path);\n return this._zip.files[p] ?? this._zip.files[p.replace(/\\//g, '\\\\')];\n }\n update(path, content) {\n this._zip.file(path, content);\n }\n static async load(input, options) {\n const zip = await JSZip.loadAsync(input);\n return new OpenXmlPackage(zip, options);\n }\n save(type = \"blob\") {\n return this._zip.generateAsync({ type });\n }\n load(path, type = \"string\") {\n return this.get(path)?.async(type) ?? Promise.resolve(null);\n }\n async loadRelationships(path = null) {\n let relsPath = `_rels/.rels`;\n if (path != null) {\n const [f, fn] = splitPath(path);\n relsPath = `${f}_rels/${fn}.rels`;\n }\n const txt = await this.load(relsPath);\n return txt ? parseRelationships(this.parseXmlDocument(txt).firstElementChild, this.xmlParser) : null;\n }\n parseXmlDocument(txt) {\n return parseXmlString(txt, this.options.trimXmlDeclaration);\n }\n}\nfunction normalizePath(path) {\n return path.startsWith('/') ? path.substr(1) : path;\n}\n\nclass DocumentPart extends Part {\n constructor(pkg, path, parser) {\n super(pkg, path);\n this._documentParser = parser;\n }\n parseXml(root) {\n this.body = this._documentParser.parseDocumentFile(root);\n }\n}\n\nfunction parseBorder(elem, xml) {\n return {\n type: xml.attr(elem, \"val\"),\n color: xml.attr(elem, \"color\"),\n size: xml.lengthAttr(elem, \"sz\", LengthUsage.Border),\n offset: xml.lengthAttr(elem, \"space\", LengthUsage.Point),\n frame: xml.boolAttr(elem, 'frame'),\n shadow: xml.boolAttr(elem, 'shadow')\n };\n}\nfunction parseBorders(elem, xml) {\n var result = {};\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"left\":\n result.left = parseBorder(e, xml);\n break;\n case \"top\":\n result.top = parseBorder(e, xml);\n break;\n case \"right\":\n result.right = parseBorder(e, xml);\n break;\n case \"bottom\":\n result.bottom = parseBorder(e, xml);\n break;\n }\n }\n return result;\n}\n\nvar SectionType;\n(function (SectionType) {\n SectionType[\"Continuous\"] = \"continuous\";\n SectionType[\"NextPage\"] = \"nextPage\";\n SectionType[\"NextColumn\"] = \"nextColumn\";\n SectionType[\"EvenPage\"] = \"evenPage\";\n SectionType[\"OddPage\"] = \"oddPage\";\n})(SectionType || (SectionType = {}));\nfunction parseSectionProperties(elem, xml = globalXmlParser) {\n var section = {};\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"pgSz\":\n section.pageSize = {\n width: xml.lengthAttr(e, \"w\"),\n height: xml.lengthAttr(e, \"h\"),\n orientation: xml.attr(e, \"orient\")\n };\n break;\n case \"type\":\n section.type = xml.attr(e, \"val\");\n break;\n case \"pgMar\":\n section.pageMargins = {\n left: xml.lengthAttr(e, \"left\"),\n right: xml.lengthAttr(e, \"right\"),\n top: xml.lengthAttr(e, \"top\"),\n bottom: xml.lengthAttr(e, \"bottom\"),\n header: xml.lengthAttr(e, \"header\"),\n footer: xml.lengthAttr(e, \"footer\"),\n gutter: xml.lengthAttr(e, \"gutter\"),\n };\n break;\n case \"cols\":\n section.columns = parseColumns(e, xml);\n break;\n case \"headerReference\":\n (section.headerRefs ?? (section.headerRefs = [])).push(parseFooterHeaderReference(e, xml));\n break;\n case \"footerReference\":\n (section.footerRefs ?? (section.footerRefs = [])).push(parseFooterHeaderReference(e, xml));\n break;\n case \"titlePg\":\n section.titlePage = xml.boolAttr(e, \"val\", true);\n break;\n case \"pgBorders\":\n section.pageBorders = parseBorders(e, xml);\n break;\n case \"pgNumType\":\n section.pageNumber = parsePageNumber(e, xml);\n break;\n }\n }\n return section;\n}\nfunction parseColumns(elem, xml) {\n return {\n numberOfColumns: xml.intAttr(elem, \"num\"),\n space: xml.lengthAttr(elem, \"space\"),\n separator: xml.boolAttr(elem, \"sep\"),\n equalWidth: xml.boolAttr(elem, \"equalWidth\", true),\n columns: xml.elements(elem, \"col\")\n .map(e => ({\n width: xml.lengthAttr(e, \"w\"),\n space: xml.lengthAttr(e, \"space\")\n }))\n };\n}\nfunction parsePageNumber(elem, xml) {\n return {\n chapSep: xml.attr(elem, \"chapSep\"),\n chapStyle: xml.attr(elem, \"chapStyle\"),\n format: xml.attr(elem, \"fmt\"),\n start: xml.intAttr(elem, \"start\")\n };\n}\nfunction parseFooterHeaderReference(elem, xml) {\n return {\n id: xml.attr(elem, \"id\"),\n type: xml.attr(elem, \"type\"),\n };\n}\n\nfunction parseLineSpacing(elem, xml) {\n return {\n before: xml.lengthAttr(elem, \"before\"),\n after: xml.lengthAttr(elem, \"after\"),\n line: xml.intAttr(elem, \"line\"),\n lineRule: xml.attr(elem, \"lineRule\")\n };\n}\n\nfunction parseRunProperties(elem, xml) {\n let result = {};\n for (let el of xml.elements(elem)) {\n parseRunProperty(el, result, xml);\n }\n return result;\n}\nfunction parseRunProperty(elem, props, xml) {\n if (parseCommonProperty(elem, props, xml))\n return true;\n return false;\n}\n\nfunction parseParagraphProperties(elem, xml) {\n let result = {};\n for (let el of xml.elements(elem)) {\n parseParagraphProperty(el, result, xml);\n }\n return result;\n}\nfunction parseParagraphProperty(elem, props, xml) {\n if (elem.namespaceURI != ns$1.wordml)\n return false;\n if (parseCommonProperty(elem, props, xml))\n return true;\n switch (elem.localName) {\n case \"tabs\":\n props.tabs = parseTabs(elem, xml);\n break;\n case \"sectPr\":\n props.sectionProps = parseSectionProperties(elem, xml);\n break;\n case \"numPr\":\n props.numbering = parseNumbering$1(elem, xml);\n break;\n case \"spacing\":\n props.lineSpacing = parseLineSpacing(elem, xml);\n return false;\n case \"textAlignment\":\n props.textAlignment = xml.attr(elem, \"val\");\n return false;\n case \"keepLines\":\n props.keepLines = xml.boolAttr(elem, \"val\", true);\n break;\n case \"keepNext\":\n props.keepNext = xml.boolAttr(elem, \"val\", true);\n break;\n case \"pageBreakBefore\":\n props.pageBreakBefore = xml.boolAttr(elem, \"val\", true);\n break;\n case \"outlineLvl\":\n props.outlineLevel = xml.intAttr(elem, \"val\");\n break;\n case \"pStyle\":\n props.styleName = xml.attr(elem, \"val\");\n break;\n case \"rPr\":\n props.runProps = parseRunProperties(elem, xml);\n break;\n default:\n return false;\n }\n return true;\n}\nfunction parseTabs(elem, xml) {\n return xml.elements(elem, \"tab\")\n .map(e => ({\n position: xml.lengthAttr(e, \"pos\"),\n leader: xml.attr(e, \"leader\"),\n style: xml.attr(e, \"val\")\n }));\n}\nfunction parseNumbering$1(elem, xml) {\n var result = {};\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"numId\":\n result.id = xml.attr(e, \"val\");\n break;\n case \"ilvl\":\n result.level = xml.intAttr(e, \"val\");\n break;\n }\n }\n return result;\n}\n\nfunction parseNumberingPart(elem, xml) {\n let result = {\n numberings: [],\n abstractNumberings: [],\n bulletPictures: []\n };\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"num\":\n result.numberings.push(parseNumbering(e, xml));\n break;\n case \"abstractNum\":\n result.abstractNumberings.push(parseAbstractNumbering(e, xml));\n break;\n case \"numPicBullet\":\n result.bulletPictures.push(parseNumberingBulletPicture(e, xml));\n break;\n }\n }\n return result;\n}\nfunction parseNumbering(elem, xml) {\n let result = {\n id: xml.attr(elem, 'numId'),\n overrides: []\n };\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"abstractNumId\":\n result.abstractId = xml.attr(e, \"val\");\n break;\n case \"lvlOverride\":\n result.overrides.push(parseNumberingLevelOverrride(e, xml));\n break;\n }\n }\n return result;\n}\nfunction parseAbstractNumbering(elem, xml) {\n let result = {\n id: xml.attr(elem, 'abstractNumId'),\n levels: []\n };\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"name\":\n result.name = xml.attr(e, \"val\");\n break;\n case \"multiLevelType\":\n result.multiLevelType = xml.attr(e, \"val\");\n break;\n case \"numStyleLink\":\n result.numberingStyleLink = xml.attr(e, \"val\");\n break;\n case \"styleLink\":\n result.styleLink = xml.attr(e, \"val\");\n break;\n case \"lvl\":\n result.levels.push(parseNumberingLevel(e, xml));\n break;\n }\n }\n return result;\n}\nfunction parseNumberingLevel(elem, xml) {\n let result = {\n level: xml.intAttr(elem, 'ilvl')\n };\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"start\":\n result.start = xml.attr(e, \"val\");\n break;\n case \"lvlRestart\":\n result.restart = xml.intAttr(e, \"val\");\n break;\n case \"numFmt\":\n result.format = xml.attr(e, \"val\");\n break;\n case \"lvlText\":\n result.text = xml.attr(e, \"val\");\n break;\n case \"lvlJc\":\n result.justification = xml.attr(e, \"val\");\n break;\n case \"lvlPicBulletId\":\n result.bulletPictureId = xml.attr(e, \"val\");\n break;\n case \"pStyle\":\n result.paragraphStyle = xml.attr(e, \"val\");\n break;\n case \"pPr\":\n result.paragraphProps = parseParagraphProperties(e, xml);\n break;\n case \"rPr\":\n result.runProps = parseRunProperties(e, xml);\n break;\n }\n }\n return result;\n}\nfunction parseNumberingLevelOverrride(elem, xml) {\n let result = {\n level: xml.intAttr(elem, 'ilvl')\n };\n for (let e of xml.elements(elem)) {\n switch (e.localName) {\n case \"startOverride\":\n result.start = xml.intAttr(e, \"val\");\n break;\n case \"lvl\":\n result.numberingLevel = parseNumberingLevel(e, xml);\n break;\n }\n }\n return result;\n}\nfunction parseNumberingBulletPicture(elem, xml) {\n var pict = xml.element(elem, \"pict\");\n var shape = pict && xml.element(pict, \"shape\");\n var imagedata = shape && xml.element(shape, \"imagedata\");\n return imagedata ? {\n id: xml.attr(elem, \"numPicBulletId\"),\n referenceId: xml.attr(imagedata, \"id\"),\n style: xml.attr(shape, \"style\")\n } : null;\n}\n\nclass NumberingPart extends Part {\n constructor(pkg, path, parser) {\n super(pkg, path);\n this._documentParser = parser;\n }\n parseXml(root) {\n Object.assign(this, parseNumberingPart(root, this._package.xmlParser));\n this.domNumberings = this._documentParser.parseNumberingFile(root);\n }\n}\n\nclass StylesPart extends Part {\n constructor(pkg, path, parser) {\n super(pkg, path);\n this._documentParser = parser;\n }\n parseXml(root) {\n this.styles = this._documentParser.parseStylesFile(root);\n }\n}\n\nvar DomType;\n(function (DomType) {\n DomType[\"Document\"] = \"document\";\n DomType[\"Paragraph\"] = \"paragraph\";\n DomType[\"Run\"] = \"run\";\n DomType[\"Break\"] = \"break\";\n DomType[\"NoBreakHyphen\"] = \"noBreakHyphen\";\n DomType[\"Table\"] = \"table\";\n DomType[\"Row\"] = \"row\";\n DomType[\"Cell\"] = \"cell\";\n DomType[\"Hyperlink\"] = \"hyperlink\";\n DomType[\"SmartTag\"] = \"smartTag\";\n DomType[\"Drawing\"] = \"drawing\";\n DomType[\"Image\"] = \"image\";\n DomType[\"Text\"] = \"text\";\n DomType[\"Tab\"] = \"tab\";\n DomType[\"Symbol\"] = \"symbol\";\n DomType[\"BookmarkStart\"] = \"bookmarkStart\";\n DomType[\"BookmarkEnd\"] = \"bookmarkEnd\";\n DomType[\"Footer\"] = \"footer\";\n DomType[\"Header\"] = \"header\";\n DomType[\"FootnoteReference\"] = \"footnoteReference\";\n DomType[\"EndnoteReference\"] = \"endnoteReference\";\n DomType[\"Footnote\"] = \"footnote\";\n DomType[\"Endnote\"] = \"endnote\";\n DomType[\"SimpleField\"] = \"simpleField\";\n DomType[\"ComplexField\"] = \"complexField\";\n DomType[\"Instruction\"] = \"instruction\";\n DomType[\"VmlPicture\"] = \"vmlPicture\";\n DomType[\"MmlMath\"] = \"mmlMath\";\n DomType[\"MmlMathParagraph\"] = \"mmlMathParagraph\";\n DomType[\"MmlFraction\"] = \"mmlFraction\";\n DomType[\"MmlFunction\"] = \"mmlFunction\";\n DomType[\"MmlFunctionName\"] = \"mmlFunctionName\";\n DomType[\"MmlNumerator\"] = \"mmlNumerator\";\n DomType[\"MmlDenominator\"] = \"mmlDenominator\";\n DomType[\"MmlRadical\"] = \"mmlRadical\";\n DomType[\"MmlBase\"] = \"mmlBase\";\n DomType[\"MmlDegree\"] = \"mmlDegree\";\n DomType[\"MmlSuperscript\"] = \"mmlSuperscript\";\n DomType[\"MmlSubscript\"] = \"mmlSubscript\";\n DomType[\"MmlPreSubSuper\"] = \"mmlPreSubSuper\";\n DomType[\"MmlSubArgument\"] = \"mmlSubArgument\";\n DomType[\"MmlSuperArgument\"] = \"mmlSuperArgument\";\n DomType[\"MmlNary\"] = \"mmlNary\";\n DomType[\"MmlDelimiter\"] = \"mmlDelimiter\";\n DomType[\"MmlRun\"] = \"mmlRun\";\n DomType[\"MmlEquationArray\"] = \"mmlEquationArray\";\n DomType[\"MmlLimit\"] = \"mmlLimit\";\n DomType[\"MmlLimitLower\"] = \"mmlLimitLower\";\n DomType[\"MmlMatrix\"] = \"mmlMatrix\";\n DomType[\"MmlMatrixRow\"] = \"mmlMatrixRow\";\n DomType[\"MmlBox\"] = \"mmlBox\";\n DomType[\"MmlBar\"] = \"mmlBar\";\n DomType[\"MmlGroupChar\"] = \"mmlGroupChar\";\n DomType[\"VmlElement\"] = \"vmlElement\";\n DomType[\"Inserted\"] = \"inserted\";\n DomType[\"Deleted\"] = \"deleted\";\n DomType[\"DeletedText\"] = \"deletedText\";\n DomType[\"Comment\"] = \"comment\";\n DomType[\"CommentReference\"] = \"commentReference\";\n DomType[\"CommentRangeStart\"] = \"commentRangeStart\";\n DomType[\"CommentRangeEnd\"] = \"commentRangeEnd\";\n DomType[\"AltChunk\"] = \"altChunk\";\n})(DomType || (DomType = {}));\nclass OpenXmlElementBase {\n constructor() {\n this.children = [];\n this.cssStyle = {};\n }\n}\n\nclass WmlHeader extends OpenXmlElementBase {\n constructor() {\n super(...arguments);\n this.type = DomType.Header;\n }\n}\nclass WmlFooter extends OpenXmlElementBase {\n constructor() {\n super(...arguments);\n this.type = DomType.Footer;\n }\n}\n\nclass BaseHeaderFooterPart extends Part {\n constructor(pkg, path, parser) {\n super(pkg, path);\n this._documentParser = parser;\n }\n parseXml(root) {\n this.rootElement = this.createRootElement();\n this.rootElement.children = this._documentParser.parseBodyElements(root);\n }\n}\nclass HeaderPart extends BaseHeaderFooterPart {\n createRootElement() {\n return new WmlHeader();\n }\n}\nclass FooterPart extends BaseHeaderFooterPart {\n createRootElement() {\n return new WmlFooter();\n }\n}\n\nfunction parseExtendedProps(root, xmlParser) {\n const result = {};\n for (let el of xmlParser.elements(root)) {\n switch (el.localName) {\n case \"Template\":\n result.template = el.textContent;\n break;\n case \"Pages\":\n result.pages = safeParseToInt(el.textContent);\n break;\n case \"Words\":\n result.words = safeParseToInt(el.textContent);\n break;\n case \"Characters\":\n result.characters = safeParseToInt(el.textContent);\n break;\n case \"Application\":\n result.application = el.textContent;\n break;\n case \"Lines\":\n result.lines = safeParseToInt(el.textContent);\n break;\n case \"Paragraphs\":\n result.paragraphs = safeParseToInt(el.textContent);\n break;\n case \"Company\":\n result.company = el.textContent;\n break;\n case \"AppVersion\":\n result.appVersion = el.textContent;\n break;\n }\n }\n return result;\n}\nfunction safeParseToInt(value) {\n if (typeof value === 'undefined')\n return;\n return parseInt(value);\n}\n\nclass ExtendedPropsPart extends Part {\n parseXml(root) {\n this.props = parseExtendedProps(root, this._package.xmlParser);\n }\n}\n\nfunction parseCoreProps(root, xmlParser) {\n const result = {};\n for (let el of xmlParser.elements(root)) {\n switch (el.localName) {\n case \"title\":\n result.title = el.textContent;\n break;\n case \"description\":\n result.description = el.textContent;\n break;\n case \"subject\":\n result.subject = el.textContent;\n break;\n case \"creator\":\n result.creator = el.textContent;\n break;\n case \"keywords\":\n result.keywords = el.textContent;\n break;\n case \"language\":\n result.language = el.textContent;\n break;\n case \"lastModifiedBy\":\n result.lastModifiedBy = el.textContent;\n break;\n case \"revision\":\n el.textContent && (result.revision = parseInt(el.textContent));\n break;\n }\n }\n return result;\n}\n\nclass CorePropsPart extends Part {\n parseXml(root) {\n this.props = parseCoreProps(root, this._package.xmlParser);\n }\n}\n\nclass DmlTheme {\n}\nfunction parseTheme(elem, xml) {\n var result = new DmlTheme();\n var themeElements = xml.element(elem, \"themeElements\");\n for (let el of xml.elements(themeElements)) {\n switch (el.localName) {\n case \"clrScheme\":\n result.colorScheme = parseColorScheme(el, xml);\n break;\n case \"fontScheme\":\n result.fontScheme = parseFontScheme(el, xml);\n break;\n }\n }\n return result;\n}\nfunction parseColorScheme(elem, xml) {\n var result = {\n name: xml.attr(elem, \"name\"),\n colors: {}\n };\n for (let el of xml.elements(elem)) {\n var srgbClr = xml.element(el, \"srgbClr\");\n var sysClr = xml.element(el, \"sysClr\");\n if (srgbClr) {\n result.colors[el.localName] = xml.attr(srgbClr, \"val\");\n }\n else if (sysClr) {\n result.colors[el.localName] = xml.attr(sysClr, \"lastClr\");\n }\n }\n return result;\n}\nfunction parseFontScheme(elem, xml) {\n var result = {\n name: xml.attr(elem, \"name\"),\n };\n for (let el of xml.elements(elem)) {\n switch (el.localName) {\n case \"majorFont\":\n result.majorFont = parseFontInfo(el, xml);\n break;\n case \"minorFont\":\n result.minorFont = parseFontInfo(el, xml);\n break;\n }\n }\n return result;\n}\nfunction parseFontInfo(elem, xml) {\n return {\n latinTypeface: xml.elementAttr(elem, \"latin\", \"typeface\"),\n eaTypeface: xml.elementAttr(elem, \"ea\", \"typeface\"),\n csTypeface: xml.elementAttr(elem, \"cs\", \"typeface\"),\n };\n}\n\nclass ThemePart extends Part {\n constructor(pkg, path) {\n super(pkg, path);\n }\n parseXml(root) {\n this.theme = parseTheme(root, this._package.xmlParser);\n }\n}\n\nclass WmlBaseNote {\n}\nclass WmlFootnote extends WmlBaseNote {\n constructor() {\n super(...arguments);\n this.type = DomType.Footnote;\n }\n}\nclass WmlEndnote extends WmlBaseNote {\n constructor() {\n super(...arguments);\n this.type = DomType.Endnote;\n }\n}\n\nclass BaseNotePart extends Part {\n constructor(pkg, path, parser) {\n super(pkg, path);\n this._documentParser = parser;\n }\n}\nclass FootnotesPart extends BaseNotePart {\n constructor(pkg, path, parser) {\n super(pkg, path, parser);\n }\n parseXml(root) {\n this.notes = this._documentParser.parseNotes(root, \"footnote\", WmlFootnote);\n }\n}\nclass EndnotesPart extends BaseNotePart {\n constructor(pkg, path, parser) {\n super(pkg, path, parser);\n }\n parseXml(root) {\n this.notes = this._documentParser.parseNotes(root, \"endnote\", WmlEndnote);\n }\n}\n\nfunction parseSettings(elem, xml) {\n var result = {};\n for (let el of xml.elements(elem)) {\n switch (el.localName) {\n case \"defaultTabStop\":\n result.defaultTabStop = xml.lengthAttr(el, \"val\");\n break;\n case \"footnotePr\":\n result.footnoteProps = parseNoteProperties(el, xml);\n break;\n case \"endnotePr\":\n result.endnoteProps = parseNoteProperties(el, xml);\n break;\n case \"autoHyphenation\":\n result.autoHyphenation = xml.boolAttr(el, \"val\");\n break;\n }\n }\n return result;\n}\nfunction parseNoteProperties(elem, xml) {\n var result = {\n defaultNoteIds: []\n };\n for (let el of xml.elements(elem)) {\n switch (el.localName) {\n case \"numFmt\":\n result.nummeringFormat = xml.attr(el, \"val\");\n break;\n case \"footnote\":\n case \"endnote\":\n result.defaultNoteIds.push(xml.attr(el, \"id\"));\n break;\n }\n }\n return result;\n}\n\nclass SettingsPart extends Part {\n constructor(pkg, path) {\n super(pkg, path);\n }\n parseXml(root) {\n this.settings = parseSettings(root, this._package.xmlParser);\n }\n}\n\nfunction parseCustomProps(root, xml) {\n return xml.elements(root, \"property\").map(e => {\n const firstChild = e.firstChild;\n return {\n formatId: xml.attr(e, \"fmtid\"),\n name: xml.attr(e, \"name\"),\n type: firstChild.nodeName,\n value: firstChild.textContent\n };\n });\n}\n\nclass CustomPropsPart extends Part {\n parseXml(root) {\n this.props = parseCustomProps(root, this._package.xmlParser);\n }\n}\n\nclass CommentsPart extends Part {\n constructor(pkg, path, parser) {\n super(pkg, path);\n this._documentParser = parser;\n }\n parseXml(root) {\n this.comments = this._documentParser.parseComments(root);\n this.commentMap = keyBy(this.comments, x => x.id);\n }\n}\n\nclass CommentsExtendedPart extends Part {\n constructor(pkg, path) {\n super(pkg, path);\n this.comments = [];\n }\n parseXml(root) {\n const xml = this._package.xmlParser;\n for (let el of xml.elements(root, \"commentEx\")) {\n this.comments.push({\n paraId: xml.attr(el, 'paraId'),\n paraIdParent: xml.attr(el, 'paraIdParent'),\n done: xml.boolAttr(el, 'done')\n });\n }\n this.commentMap = keyBy(this.comments, x => x.paraId);\n }\n}\n\nconst topLevelRels = [\n { type: RelationshipTypes.OfficeDocument, target: \"word/document.xml\" },\n { type: RelationshipTypes.ExtendedProperties, target: \"docProps/app.xml\" },\n { type: RelationshipTypes.CoreProperties, target: \"docProps/core.xml\" },\n { type: RelationshipTypes.CustomProperties, target: \"docProps/custom.xml\" },\n];\nclass WordDocument {\n constructor() {\n this.parts = [];\n this.partsMap = {};\n }\n static async load(blob, parser, options) {\n var d = new WordDocument();\n d._options = options;\n d._parser = parser;\n d._package = await OpenXmlPackage.load(blob, options);\n d.rels = await d._package.loadRelationships();\n await Promise.all(topLevelRels.map(rel => {\n const r = d.rels.find(x => x.type === rel.type) ?? rel;\n return d.loadRelationshipPart(r.target, r.type);\n }));\n return d;\n }\n save(type = \"blob\") {\n return this._package.save(type);\n }\n async loadRelationshipPart(path, type) {\n if (this.partsMap[path])\n return this.partsMap[path];\n if (!this._package.get(path))\n return null;\n let part = null;\n switch (type) {\n case RelationshipTypes.OfficeDocument:\n this.documentPart = part = new DocumentPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.FontTable:\n this.fontTablePart = part = new FontTablePart(this._package, path);\n break;\n case RelationshipTypes.Numbering:\n this.numberingPart = part = new NumberingPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.Styles:\n this.stylesPart = part = new StylesPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.Theme:\n this.themePart = part = new ThemePart(this._package, path);\n break;\n case RelationshipTypes.Footnotes:\n this.footnotesPart = part = new FootnotesPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.Endnotes:\n this.endnotesPart = part = new EndnotesPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.Footer:\n part = new FooterPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.Header:\n part = new HeaderPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.CoreProperties:\n this.corePropsPart = part = new CorePropsPart(this._package, path);\n break;\n case RelationshipTypes.ExtendedProperties:\n this.extendedPropsPart = part = new ExtendedPropsPart(this._package, path);\n break;\n case RelationshipTypes.CustomProperties:\n part = new CustomPropsPart(this._package, path);\n break;\n case RelationshipTypes.Settings:\n this.settingsPart = part = new SettingsPart(this._package, path);\n break;\n case RelationshipTypes.Comments:\n this.commentsPart = part = new CommentsPart(this._package, path, this._parser);\n break;\n case RelationshipTypes.CommentsExtended:\n this.commentsExtendedPart = part = new CommentsExtendedPart(this._package, path);\n break;\n }\n if (part == null)\n return Promise.resolve(null);\n this.partsMap[path] = part;\n this.parts.push(part);\n await part.load();\n if (part.rels?.length > 0) {\n const [folder] = splitPath(part.path);\n await Promise.all(part.rels.map(rel => this.loadRelationshipPart(resolvePath(rel.target, folder), rel.type)));\n }\n return part;\n }\n async loadDocumentImage(id, part) {\n const x = await this.loadResource(part ?? this.documentPart, id, \"blob\");\n return this.blobToURL(x);\n }\n async loadNumberingImage(id) {\n const x = await this.loadResource(this.numberingPart, id, \"blob\");\n return this.blobToURL(x);\n }\n async loadFont(id, key) {\n const x = await this.loadResource(this.fontTablePart, id, \"uint8array\");\n return x ? this.blobToURL(new Blob([deobfuscate(x, key)])) : x;\n }\n async loadAltChunk(id, part) {\n return await this.loadResource(part ?? this.documentPart, id, \"string\");\n }\n blobToURL(blob) {\n if (!blob)\n return null;\n if (this._options.useBase64URL) {\n return blobToBase64(blob);\n }\n return URL.createObjectURL(blob);\n }\n findPartByRelId(id, basePart = null) {\n var rel = (basePart.rels ?? this.rels).find(r => r.id == id);\n const folder = basePart ? splitPath(basePart.path)[0] : '';\n return rel ? this.partsMap[resolvePath(rel.target, folder)] : null;\n }\n getPathById(part, id) {\n const rel = part.rels.find(x => x.id == id);\n const [folder] = splitPath(part.path);\n return rel ? resolvePath(rel.target, folder) : null;\n }\n loadResource(part, id, outputType) {\n const path = this.getPathById(part, id);\n return path ? this._package.load(path, outputType) : Promise.resolve(null);\n }\n}\nfunction deobfuscate(data, guidKey) {\n const len = 16;\n const trimmed = guidKey.replace(/{|}|-/g, \"\");\n const numbers = new Array(len);\n for (let i = 0; i < len; i++)\n numbers[len - i - 1] = parseInt(trimmed.substring(i * 2, i * 2 + 2), 16);\n for (let i = 0; i < 32; i++)\n data[i] = data[i] ^ numbers[i % len];\n return data;\n}\n\nfunction parseBookmarkStart(elem, xml) {\n return {\n type: DomType.BookmarkStart,\n id: xml.attr(elem, \"id\"),\n name: xml.attr(elem, \"name\"),\n colFirst: xml.intAttr(elem, \"colFirst\"),\n colLast: xml.intAttr(elem, \"colLast\")\n };\n}\nfunction parseBookmarkEnd(elem, xml) {\n return {\n type: DomType.BookmarkEnd,\n id: xml.attr(elem, \"id\")\n };\n}\n\nclass VmlElement extends OpenXmlElementBase {\n constructor() {\n super(...arguments);\n this.type = DomType.VmlElement;\n this.attrs = {};\n }\n}\nfunction parseVmlElement(elem, parser) {\n var result = new VmlElement();\n switch (elem.localName) {\n case \"rect\":\n result.tagName = \"rect\";\n Object.assign(result.attrs, { width: '100%', height: '100%' });\n break;\n case \"oval\":\n result.tagName = \"ellipse\";\n Object.assign(result.attrs, { cx: \"50%\", cy: \"50%\", rx: \"50%\", ry: \"50%\" });\n break;\n case \"line\":\n result.tagName = \"line\";\n break;\n case \"shape\":\n result.tagName = \"g\";\n break;\n case \"textbox\":\n result.tagName = \"foreignObject\";\n Object.assign(result.attrs, { width: '100%', height: '100%' });\n break;\n default:\n return null;\n }\n for (const at of globalXmlParser.attrs(elem)) {\n switch (at.localName) {\n case \"style\":\n result.cssStyleText = at.value;\n break;\n case \"fillcolor\":\n result.attrs.fill = at.value;\n break;\n case \"from\":\n const [x1, y1] = parsePoint(at.value);\n Object.assign(result.attrs, { x1, y1 });\n break;\n case \"to\":\n const [x2, y2] = parsePoint(at.value);\n Object.assign(result.attrs, { x2, y2 });\n break;\n }\n }\n for (const el of globalXmlParser.elements(elem)) {\n switch (el.localName) {\n case \"stroke\":\n Object.assign(result.attrs, parseStroke(el));\n break;\n case \"fill\":\n Object.assign(result.attrs, parseFill());\n break;\n case \"imagedata\":\n result.tagName = \"image\";\n Object.assign(result.attrs, { width: '100%', height: '100%' });\n result.imageHref = {\n id: globalXmlParser.attr(el, \"id\"),\n title: globalXmlParser.attr(el, \"title\"),\n };\n break;\n case \"txbxContent\":\n result.children.push(...parser.parseBodyElements(el));\n break;\n default:\n const child = parseVmlElement(el, parser);\n child && result.children.push(child);\n break;\n }\n }\n return result;\n}\nfunction parseStroke(el) {\n return {\n 'stroke': globalXmlParser.attr(el, \"color\"),\n 'stroke-width': globalXmlParser.lengthAttr(el, \"weight\", LengthUsage.Emu) ?? '1px'\n };\n}\nfunction parseFill(el) {\n return {};\n}\nfunction parsePoint(val) {\n return val.split(\",\");\n}\n\nclass WmlComment extends OpenXmlElementBase {\n constructor() {\n super(...arguments);\n this.type = DomType.Comment;\n }\n}\nclass WmlCommentReference extends OpenXmlElementBase {\n constructor(id) {\n super();\n this.id = id;\n this.type = DomType.CommentReference;\n }\n}\nclass WmlCommentRangeStart extends OpenXmlElementBase {\n constructor(id) {\n super();\n this.id = id;\n this.type = DomType.CommentRangeStart;\n }\n}\nclass WmlCommentRangeEnd extends OpenXmlElementBase {\n constructor(id) {\n super();\n this.id = id;\n this.type = DomType.CommentRangeEnd;\n }\n}\n\nvar autos = {\n shd: \"inherit\",\n color: \"black\",\n borderColor: \"black\",\n highlight: \"transparent\"\n};\nconst supportedNamespaceURIs = [];\nconst mmlTagMap = {\n \"oMath\": DomType.MmlMath,\n \"oMathPara\": DomType.MmlMathParagraph,\n \"f\": DomType.MmlFraction,\n \"func\": DomType.MmlFunction,\n \"fName\": DomType.MmlFunctionName,\n \"num\": DomType.MmlNumerator,\n \"den\": DomType.MmlDenominator,\n \"rad\": DomType.MmlRadical,\n \"deg\": DomType.MmlDegree,\n \"e\": DomType.MmlBase,\n \"sSup\": DomType.MmlSuperscript,\n \"sSub\": DomType.MmlSubscript,\n \"sPre\": DomType.MmlPreSubSuper,\n \"sup\": DomType.MmlSuperArgument,\n \"sub\": DomType.MmlSubArgument,\n \"d\": DomType.MmlDelimiter,\n \"nary\": DomType.MmlNary,\n \"eqArr\": DomType.MmlEquationArray,\n \"lim\": DomType.MmlLimit,\n \"limLow\": DomType.MmlLimitLower,\n \"m\": DomType.MmlMatrix,\n \"mr\": DomType.MmlMatrixRow,\n \"box\": DomType.MmlBox,\n \"bar\": DomType.MmlBar,\n \"groupChr\": DomType.MmlGroupChar\n};\nclass DocumentParser {\n constructor(options) {\n this.options = {\n ignoreWidth: false,\n debug: false,\n ...options\n };\n }\n parseNotes(xmlDoc, elemName, elemClass) {\n var result = [];\n for (let el of globalXmlParser.elements(xmlDoc, elemName)) {\n const node = new elemClass();\n node.id = globalXmlParser.attr(el, \"id\");\n node.noteType = globalXmlParser.attr(el, \"type\");\n node.children = this.parseBodyElements(el);\n result.push(node);\n }\n return result;\n }\n parseComments(xmlDoc) {\n var result = [];\n for (let el of globalXmlParser.elements(xmlDoc, \"comment\")) {\n const item = new WmlComment();\n item.id = globalXmlParser.attr(el, \"id\");\n item.author = globalXmlParser.attr(el, \"author\");\n item.initials = globalXmlParser.attr(el, \"initials\");\n item.date = globalXmlParser.attr(el, \"date\");\n item.children = this.parseBodyElements(el);\n result.push(item);\n }\n return result;\n }\n parseDocumentFile(xmlDoc) {\n var xbody = globalXmlParser.element(xmlDoc, \"body\");\n var background = globalXmlParser.element(xmlDoc, \"background\");\n var sectPr = globalXmlParser.element(xbody, \"sectPr\");\n return {\n type: DomType.Document,\n children: this.parseBodyElements(xbody),\n props: sectPr ? parseSectionProperties(sectPr, globalXmlParser) : {},\n cssStyle: background ? this.parseBackground(background) : {},\n };\n }\n parseBackground(elem) {\n var result = {};\n var color = xmlUtil.colorAttr(elem, \"color\");\n if (color) {\n result[\"background-color\"] = color;\n }\n return result;\n }\n parseBodyElements(element) {\n var children = [];\n for (const elem of globalXmlParser.elements(element)) {\n switch (elem.localName) {\n case \"p\":\n children.push(this.parseParagraph(elem));\n break;\n case \"altChunk\":\n children.push(this.parseAltChunk(elem));\n break;\n case \"tbl\":\n children.push(this.parseTable(elem));\n break;\n case \"sdt\":\n children.push(...this.parseSdt(elem, e => this.parseBodyElements(e)));\n break;\n }\n }\n return children;\n }\n parseStylesFile(xstyles) {\n var result = [];\n for (const n of globalXmlParser.elements(xstyles)) {\n switch (n.localName) {\n case \"style\":\n result.push(this.parseStyle(n));\n break;\n case \"docDefaults\":\n result.push(this.parseDefaultStyles(n));\n break;\n }\n }\n return result;\n }\n parseDefaultStyles(node) {\n var result = {\n id: null,\n name: null,\n target: null,\n basedOn: null,\n styles: []\n };\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"rPrDefault\":\n var rPr = globalXmlParser.element(c, \"rPr\");\n if (rPr)\n result.styles.push({\n target: \"span\",\n values: this.parseDefaultProperties(rPr, {})\n });\n break;\n case \"pPrDefault\":\n var pPr = globalXmlParser.element(c, \"pPr\");\n if (pPr)\n result.styles.push({\n target: \"p\",\n values: this.parseDefaultProperties(pPr, {})\n });\n break;\n }\n }\n return result;\n }\n parseStyle(node) {\n var result = {\n id: globalXmlParser.attr(node, \"styleId\"),\n isDefault: globalXmlParser.boolAttr(node, \"default\"),\n name: null,\n target: null,\n basedOn: null,\n styles: [],\n linked: null\n };\n switch (globalXmlParser.attr(node, \"type\")) {\n case \"paragraph\":\n result.target = \"p\";\n break;\n case \"table\":\n result.target = \"table\";\n break;\n case \"character\":\n result.target = \"span\";\n break;\n }\n for (const n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"basedOn\":\n result.basedOn = globalXmlParser.attr(n, \"val\");\n break;\n case \"name\":\n result.name = globalXmlParser.attr(n, \"val\");\n break;\n case \"link\":\n result.linked = globalXmlParser.attr(n, \"val\");\n break;\n case \"next\":\n result.next = globalXmlParser.attr(n, \"val\");\n break;\n case \"aliases\":\n result.aliases = globalXmlParser.attr(n, \"val\").split(\",\");\n break;\n case \"pPr\":\n result.styles.push({\n target: \"p\",\n values: this.parseDefaultProperties(n, {})\n });\n result.paragraphProps = parseParagraphProperties(n, globalXmlParser);\n break;\n case \"rPr\":\n result.styles.push({\n target: \"span\",\n values: this.parseDefaultProperties(n, {})\n });\n result.runProps = parseRunProperties(n, globalXmlParser);\n break;\n case \"tblPr\":\n case \"tcPr\":\n result.styles.push({\n target: \"td\",\n values: this.parseDefaultProperties(n, {})\n });\n break;\n case \"tblStylePr\":\n for (let s of this.parseTableStyle(n))\n result.styles.push(s);\n break;\n case \"rsid\":\n case \"qFormat\":\n case \"hidden\":\n case \"semiHidden\":\n case \"unhideWhenUsed\":\n case \"autoRedefine\":\n case \"uiPriority\":\n break;\n default:\n this.options.debug && console.warn(`DOCX: Unknown style element: ${n.localName}`);\n }\n }\n return result;\n }\n parseTableStyle(node) {\n var result = [];\n var type = globalXmlParser.attr(node, \"type\");\n var selector = \"\";\n var modificator = \"\";\n switch (type) {\n case \"firstRow\":\n modificator = \".first-row\";\n selector = \"tr.first-row td\";\n break;\n case \"lastRow\":\n modificator = \".last-row\";\n selector = \"tr.last-row td\";\n break;\n case \"firstCol\":\n modificator = \".first-col\";\n selector = \"td.first-col\";\n break;\n case \"lastCol\":\n modificator = \".last-col\";\n selector = \"td.last-col\";\n break;\n case \"band1Vert\":\n modificator = \":not(.no-vband)\";\n selector = \"td.odd-col\";\n break;\n case \"band2Vert\":\n modificator = \":not(.no-vband)\";\n selector = \"td.even-col\";\n break;\n case \"band1Horz\":\n modificator = \":not(.no-hband)\";\n selector = \"tr.odd-row\";\n break;\n case \"band2Horz\":\n modificator = \":not(.no-hband)\";\n selector = \"tr.even-row\";\n break;\n default: return [];\n }\n for (const n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"pPr\":\n result.push({\n target: `${selector} p`,\n mod: modificator,\n values: this.parseDefaultProperties(n, {})\n });\n break;\n case \"rPr\":\n result.push({\n target: `${selector} span`,\n mod: modificator,\n values: this.parseDefaultProperties(n, {})\n });\n break;\n case \"tblPr\":\n case \"tcPr\":\n result.push({\n target: selector,\n mod: modificator,\n values: this.parseDefaultProperties(n, {})\n });\n break;\n }\n }\n return result;\n }\n parseNumberingFile(node) {\n var result = [];\n var mapping = {};\n var bullets = [];\n for (const n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"abstractNum\":\n this.parseAbstractNumbering(n, bullets)\n .forEach(x => result.push(x));\n break;\n case \"numPicBullet\":\n bullets.push(this.parseNumberingPicBullet(n));\n break;\n case \"num\":\n var numId = globalXmlParser.attr(n, \"numId\");\n var abstractNumId = globalXmlParser.elementAttr(n, \"abstractNumId\", \"val\");\n mapping[abstractNumId] = numId;\n break;\n }\n }\n result.forEach(x => x.id = mapping[x.id]);\n return result;\n }\n parseNumberingPicBullet(elem) {\n var pict = globalXmlParser.element(elem, \"pict\");\n var shape = pict && globalXmlParser.element(pict, \"shape\");\n var imagedata = shape && globalXmlParser.element(shape, \"imagedata\");\n return imagedata ? {\n id: globalXmlParser.intAttr(elem, \"numPicBulletId\"),\n src: globalXmlParser.attr(imagedata, \"id\"),\n style: globalXmlParser.attr(shape, \"style\")\n } : null;\n }\n parseAbstractNumbering(node, bullets) {\n var result = [];\n var id = globalXmlParser.attr(node, \"abstractNumId\");\n for (const n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"lvl\":\n result.push(this.parseNumberingLevel(id, n, bullets));\n break;\n }\n }\n return result;\n }\n parseNumberingLevel(id, node, bullets) {\n var result = {\n id: id,\n level: globalXmlParser.intAttr(node, \"ilvl\"),\n start: 1,\n pStyleName: undefined,\n pStyle: {},\n rStyle: {},\n suff: \"tab\"\n };\n for (const n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"start\":\n result.start = globalXmlParser.intAttr(n, \"val\");\n break;\n case \"pPr\":\n this.parseDefaultProperties(n, result.pStyle);\n break;\n case \"rPr\":\n this.parseDefaultProperties(n, result.rStyle);\n break;\n case \"lvlPicBulletId\":\n var bulletId = globalXmlParser.intAttr(n, \"val\");\n result.bullet = bullets.find(x => x?.id == bulletId);\n break;\n case \"lvlText\":\n result.levelText = globalXmlParser.attr(n, \"val\");\n break;\n case \"pStyle\":\n result.pStyleName = globalXmlParser.attr(n, \"val\");\n break;\n case \"numFmt\":\n result.format = globalXmlParser.attr(n, \"val\");\n break;\n case \"suff\":\n result.suff = globalXmlParser.attr(n, \"val\");\n break;\n }\n }\n return result;\n }\n parseSdt(node, parser) {\n const sdtContent = globalXmlParser.element(node, \"sdtContent\");\n return sdtContent ? parser(sdtContent) : [];\n }\n parseInserted(node, parentParser) {\n return {\n type: DomType.Inserted,\n children: parentParser(node)?.children ?? []\n };\n }\n parseDeleted(node, parentParser) {\n return {\n type: DomType.Deleted,\n children: parentParser(node)?.children ?? []\n };\n }\n parseAltChunk(node) {\n return { type: DomType.AltChunk, children: [], id: globalXmlParser.attr(node, \"id\") };\n }\n parseParagraph(node) {\n var result = { type: DomType.Paragraph, children: [] };\n for (let el of globalXmlParser.elements(node)) {\n switch (el.localName) {\n case \"pPr\":\n this.parseParagraphProperties(el, result);\n break;\n case \"r\":\n result.children.push(this.parseRun(el, result));\n break;\n case \"hyperlink\":\n result.children.push(this.parseHyperlink(el, result));\n break;\n case \"smartTag\":\n result.children.push(this.parseSmartTag(el, result));\n break;\n case \"bookmarkStart\":\n result.children.push(parseBookmarkStart(el, globalXmlParser));\n break;\n case \"bookmarkEnd\":\n result.children.push(parseBookmarkEnd(el, globalXmlParser));\n break;\n case \"commentRangeStart\":\n result.children.push(new WmlCommentRangeStart(globalXmlParser.attr(el, \"id\")));\n break;\n case \"commentRangeEnd\":\n result.children.push(new WmlCommentRangeEnd(globalXmlParser.attr(el, \"id\")));\n break;\n case \"oMath\":\n case \"oMathPara\":\n result.children.push(this.parseMathElement(el));\n break;\n case \"sdt\":\n result.children.push(...this.parseSdt(el, e => this.parseParagraph(e).children));\n break;\n case \"ins\":\n result.children.push(this.parseInserted(el, e => this.parseParagraph(e)));\n break;\n case \"del\":\n result.children.push(this.parseDeleted(el, e => this.parseParagraph(e)));\n break;\n }\n }\n return result;\n }\n parseParagraphProperties(elem, paragraph) {\n this.parseDefaultProperties(elem, paragraph.cssStyle = {}, null, c => {\n if (parseParagraphProperty(c, paragraph, globalXmlParser))\n return true;\n switch (c.localName) {\n case \"pStyle\":\n paragraph.styleName = globalXmlParser.attr(c, \"val\");\n break;\n case \"cnfStyle\":\n paragraph.className = values.classNameOfCnfStyle(c);\n break;\n case \"framePr\":\n this.parseFrame(c, paragraph);\n break;\n case \"rPr\":\n break;\n default:\n return false;\n }\n return true;\n });\n }\n parseFrame(node, paragraph) {\n var dropCap = globalXmlParser.attr(node, \"dropCap\");\n if (dropCap == \"drop\")\n paragraph.cssStyle[\"float\"] = \"left\";\n }\n parseHyperlink(node, parent) {\n var result = { type: DomType.Hyperlink, parent: parent, children: [] };\n result.anchor = globalXmlParser.attr(node, \"anchor\");\n result.id = globalXmlParser.attr(node, \"id\");\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"r\":\n result.children.push(this.parseRun(c, result));\n break;\n }\n }\n return result;\n }\n parseSmartTag(node, parent) {\n var result = { type: DomType.SmartTag, parent, children: [] };\n var uri = globalXmlParser.attr(node, \"uri\");\n var element = globalXmlParser.attr(node, \"element\");\n if (uri)\n result.uri = uri;\n if (element)\n result.element = element;\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"r\":\n result.children.push(this.parseRun(c, result));\n break;\n }\n }\n return result;\n }\n parseRun(node, parent) {\n var result = { type: DomType.Run, parent: parent, children: [] };\n for (let c of globalXmlParser.elements(node)) {\n c = this.checkAlternateContent(c);\n switch (c.localName) {\n case \"t\":\n result.children.push({\n type: DomType.Text,\n text: c.textContent\n });\n break;\n case \"delText\":\n result.children.push({\n type: DomType.DeletedText,\n text: c.textContent\n });\n break;\n case \"commentReference\":\n result.children.push(new WmlCommentReference(globalXmlParser.attr(c, \"id\")));\n break;\n case \"fldSimple\":\n result.children.push({\n type: DomType.SimpleField,\n instruction: globalXmlParser.attr(c, \"instr\"),\n lock: globalXmlParser.boolAttr(c, \"lock\", false),\n dirty: globalXmlParser.boolAttr(c, \"dirty\", false)\n });\n break;\n case \"instrText\":\n result.fieldRun = true;\n result.children.push({\n type: DomType.Instruction,\n text: c.textContent\n });\n break;\n case \"fldChar\":\n result.fieldRun = true;\n result.children.push({\n type: DomType.ComplexField,\n charType: globalXmlParser.attr(c, \"fldCharType\"),\n lock: globalXmlParser.boolAttr(c, \"lock\", false),\n dirty: globalXmlParser.boolAttr(c, \"dirty\", false)\n });\n break;\n case \"noBreakHyphen\":\n result.children.push({ type: DomType.NoBreakHyphen });\n break;\n case \"br\":\n result.children.push({\n type: DomType.Break,\n break: globalXmlParser.attr(c, \"type\") || \"textWrapping\"\n });\n break;\n case \"lastRenderedPageBreak\":\n result.children.push({\n type: DomType.Break,\n break: \"lastRenderedPageBreak\"\n });\n break;\n case \"sym\":\n result.children.push({\n type: DomType.Symbol,\n font: encloseFontFamily(globalXmlParser.attr(c, \"font\")),\n char: globalXmlParser.attr(c, \"char\")\n });\n break;\n case \"tab\":\n result.children.push({ type: DomType.Tab });\n break;\n case \"footnoteReference\":\n result.children.push({\n type: DomType.FootnoteReference,\n id: globalXmlParser.attr(c, \"id\")\n });\n break;\n case \"endnoteReference\":\n result.children.push({\n type: DomType.EndnoteReference,\n id: globalXmlParser.attr(c, \"id\")\n });\n break;\n case \"drawing\":\n let d = this.parseDrawing(c);\n if (d)\n result.children = [d];\n break;\n case \"pict\":\n result.children.push(this.parseVmlPicture(c));\n break;\n case \"rPr\":\n this.parseRunProperties(c, result);\n break;\n }\n }\n return result;\n }\n parseMathElement(elem) {\n const propsTag = `${elem.localName}Pr`;\n const result = { type: mmlTagMap[elem.localName], children: [] };\n for (const el of globalXmlParser.elements(elem)) {\n const childType = mmlTagMap[el.localName];\n if (childType) {\n result.children.push(this.parseMathElement(el));\n }\n else if (el.localName == \"r\") {\n var run = this.parseRun(el);\n run.type = DomType.MmlRun;\n result.children.push(run);\n }\n else if (el.localName == propsTag) {\n result.props = this.parseMathProperies(el);\n }\n }\n return result;\n }\n parseMathProperies(elem) {\n const result = {};\n for (const el of globalXmlParser.elements(elem)) {\n switch (el.localName) {\n case \"chr\":\n result.char = globalXmlParser.attr(el, \"val\");\n break;\n case \"vertJc\":\n result.verticalJustification = globalXmlParser.attr(el, \"val\");\n break;\n case \"pos\":\n result.position = globalXmlParser.attr(el, \"val\");\n break;\n case \"degHide\":\n result.hideDegree = globalXmlParser.boolAttr(el, \"val\");\n break;\n case \"begChr\":\n result.beginChar = globalXmlParser.attr(el, \"val\");\n break;\n case \"endChr\":\n result.endChar = globalXmlParser.attr(el, \"val\");\n break;\n }\n }\n return result;\n }\n parseRunProperties(elem, run) {\n this.parseDefaultProperties(elem, run.cssStyle = {}, null, c => {\n switch (c.localName) {\n case \"rStyle\":\n run.styleName = globalXmlParser.attr(c, \"val\");\n break;\n case \"vertAlign\":\n run.verticalAlign = values.valueOfVertAlign(c, true);\n break;\n default:\n return false;\n }\n return true;\n });\n }\n parseVmlPicture(elem) {\n const result = { type: DomType.VmlPicture, children: [] };\n for (const el of globalXmlParser.elements(elem)) {\n const child = parseVmlElement(el, this);\n child && result.children.push(child);\n }\n return result;\n }\n checkAlternateContent(elem) {\n if (elem.localName != 'AlternateContent')\n return elem;\n var choice = globalXmlParser.element(elem, \"Choice\");\n if (choice) {\n var requires = globalXmlParser.attr(choice, \"Requires\");\n var namespaceURI = elem.lookupNamespaceURI(requires);\n if (supportedNamespaceURIs.includes(namespaceURI))\n return choice.firstElementChild;\n }\n return globalXmlParser.element(elem, \"Fallback\")?.firstElementChild;\n }\n parseDrawing(node) {\n for (var n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"inline\":\n case \"anchor\":\n return this.parseDrawingWrapper(n);\n }\n }\n }\n parseDrawingWrapper(node) {\n var result = { type: DomType.Drawing, children: [], cssStyle: {} };\n var isAnchor = node.localName == \"anchor\";\n let wrapType = null;\n let simplePos = globalXmlParser.boolAttr(node, \"simplePos\");\n globalXmlParser.boolAttr(node, \"behindDoc\");\n let posX = { relative: \"page\", align: \"left\", offset: \"0\" };\n let posY = { relative: \"page\", align: \"top\", offset: \"0\" };\n for (var n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"simplePos\":\n if (simplePos) {\n posX.offset = globalXmlParser.lengthAttr(n, \"x\", LengthUsage.Emu);\n posY.offset = globalXmlParser.lengthAttr(n, \"y\", LengthUsage.Emu);\n }\n break;\n case \"extent\":\n result.cssStyle[\"width\"] = globalXmlParser.lengthAttr(n, \"cx\", LengthUsage.Emu);\n result.cssStyle[\"height\"] = globalXmlParser.lengthAttr(n, \"cy\", LengthUsage.Emu);\n break;\n case \"positionH\":\n case \"positionV\":\n if (!simplePos) {\n let pos = n.localName == \"positionH\" ? posX : posY;\n var alignNode = globalXmlParser.element(n, \"align\");\n var offsetNode = globalXmlParser.element(n, \"posOffset\");\n pos.relative = globalXmlParser.attr(n, \"relativeFrom\") ?? pos.relative;\n if (alignNode)\n pos.align = alignNode.textContent;\n if (offsetNode)\n pos.offset = convertLength(offsetNode.textContent, LengthUsage.Emu);\n }\n break;\n case \"wrapTopAndBottom\":\n wrapType = \"wrapTopAndBottom\";\n break;\n case \"wrapNone\":\n wrapType = \"wrapNone\";\n break;\n case \"graphic\":\n var g = this.parseGraphic(n);\n if (g)\n result.children.push(g);\n break;\n }\n }\n if (wrapType == \"wrapTopAndBottom\") {\n result.cssStyle['display'] = 'block';\n if (posX.align) {\n result.cssStyle['text-align'] = posX.align;\n result.cssStyle['width'] = \"100%\";\n }\n }\n else if (wrapType == \"wrapNone\") {\n result.cssStyle['display'] = 'block';\n result.cssStyle['position'] = 'relative';\n result.cssStyle[\"width\"] = \"0px\";\n result.cssStyle[\"height\"] = \"0px\";\n if (posX.offset)\n result.cssStyle[\"left\"] = posX.offset;\n if (posY.offset)\n result.cssStyle[\"top\"] = posY.offset;\n }\n else if (isAnchor && (posX.align == 'left' || posX.align == 'right')) {\n result.cssStyle[\"float\"] = posX.align;\n }\n return result;\n }\n parseGraphic(elem) {\n var graphicData = globalXmlParser.element(elem, \"graphicData\");\n for (let n of globalXmlParser.elements(graphicData)) {\n switch (n.localName) {\n case \"pic\":\n return this.parsePicture(n);\n }\n }\n return null;\n }\n parsePicture(elem) {\n var result = { type: DomType.Image, src: \"\", cssStyle: {} };\n var blipFill = globalXmlParser.element(elem, \"blipFill\");\n var blip = globalXmlParser.element(blipFill, \"blip\");\n var srcRect = globalXmlParser.element(blipFill, \"srcRect\");\n result.src = globalXmlParser.attr(blip, \"embed\");\n if (srcRect) {\n result.srcRect = [\n globalXmlParser.intAttr(srcRect, \"l\", 0) / 100000,\n globalXmlParser.intAttr(srcRect, \"t\", 0) / 100000,\n globalXmlParser.intAttr(srcRect, \"r\", 0) / 100000,\n globalXmlParser.intAttr(srcRect, \"b\", 0) / 100000,\n ];\n }\n var spPr = globalXmlParser.element(elem, \"spPr\");\n var xfrm = globalXmlParser.element(spPr, \"xfrm\");\n result.cssStyle[\"position\"] = \"relative\";\n if (xfrm) {\n result.rotation = globalXmlParser.intAttr(xfrm, \"rot\", 0) / 60000;\n for (var n of globalXmlParser.elements(xfrm)) {\n switch (n.localName) {\n case \"ext\":\n result.cssStyle[\"width\"] = globalXmlParser.lengthAttr(n, \"cx\", LengthUsage.Emu);\n result.cssStyle[\"height\"] = globalXmlParser.lengthAttr(n, \"cy\", LengthUsage.Emu);\n break;\n case \"off\":\n result.cssStyle[\"left\"] = globalXmlParser.lengthAttr(n, \"x\", LengthUsage.Emu);\n result.cssStyle[\"top\"] = globalXmlParser.lengthAttr(n, \"y\", LengthUsage.Emu);\n break;\n }\n }\n }\n return result;\n }\n parseTable(node) {\n var result = { type: DomType.Table, children: [] };\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"tr\":\n result.children.push(this.parseTableRow(c));\n break;\n case \"tblGrid\":\n result.columns = this.parseTableColumns(c);\n break;\n case \"tblPr\":\n this.parseTableProperties(c, result);\n break;\n }\n }\n return result;\n }\n parseTableColumns(node) {\n var result = [];\n for (const n of globalXmlParser.elements(node)) {\n switch (n.localName) {\n case \"gridCol\":\n result.push({ width: globalXmlParser.lengthAttr(n, \"w\") });\n break;\n }\n }\n return result;\n }\n parseTableProperties(elem, table) {\n table.cssStyle = {};\n table.cellStyle = {};\n this.parseDefaultProperties(elem, table.cssStyle, table.cellStyle, c => {\n switch (c.localName) {\n case \"tblStyle\":\n table.styleName = globalXmlParser.attr(c, \"val\");\n break;\n case \"tblLook\":\n table.className = values.classNameOftblLook(c);\n break;\n case \"tblpPr\":\n this.parseTablePosition(c, table);\n break;\n case \"tblStyleColBandSize\":\n table.colBandSize = globalXmlParser.intAttr(c, \"val\");\n break;\n case \"tblStyleRowBandSize\":\n table.rowBandSize = globalXmlParser.intAttr(c, \"val\");\n break;\n case \"hidden\":\n table.cssStyle[\"display\"] = \"none\";\n break;\n default:\n return false;\n }\n return true;\n });\n switch (table.cssStyle[\"text-align\"]) {\n case \"center\":\n delete table.cssStyle[\"text-align\"];\n table.cssStyle[\"margin-left\"] = \"auto\";\n table.cssStyle[\"margin-right\"] = \"auto\";\n break;\n case \"right\":\n delete table.cssStyle[\"text-align\"];\n table.cssStyle[\"margin-left\"] = \"auto\";\n break;\n }\n }\n parseTablePosition(node, table) {\n var topFromText = globalXmlParser.lengthAttr(node, \"topFromText\");\n var bottomFromText = globalXmlParser.lengthAttr(node, \"bottomFromText\");\n var rightFromText = globalXmlParser.lengthAttr(node, \"rightFromText\");\n var leftFromText = globalXmlParser.lengthAttr(node, \"leftFromText\");\n table.cssStyle[\"float\"] = 'left';\n table.cssStyle[\"margin-bottom\"] = values.addSize(table.cssStyle[\"margin-bottom\"], bottomFromText);\n table.cssStyle[\"margin-left\"] = values.addSize(table.cssStyle[\"margin-left\"], leftFromText);\n table.cssStyle[\"margin-right\"] = values.addSize(table.cssStyle[\"margin-right\"], rightFromText);\n table.cssStyle[\"margin-top\"] = values.addSize(table.cssStyle[\"margin-top\"], topFromText);\n }\n parseTableRow(node) {\n var result = { type: DomType.Row, children: [] };\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"tc\":\n result.children.push(this.parseTableCell(c));\n break;\n case \"trPr\":\n case \"tblPrEx\":\n this.parseTableRowProperties(c, result);\n break;\n }\n }\n return result;\n }\n parseTableRowProperties(elem, row) {\n row.cssStyle = this.parseDefaultProperties(elem, {}, null, c => {\n switch (c.localName) {\n case \"cnfStyle\":\n row.className = values.classNameOfCnfStyle(c);\n break;\n case \"tblHeader\":\n row.isHeader = globalXmlParser.boolAttr(c, \"val\");\n break;\n case \"gridBefore\":\n row.gridBefore = globalXmlParser.intAttr(c, \"val\");\n break;\n case \"gridAfter\":\n row.gridAfter = globalXmlParser.intAttr(c, \"val\");\n break;\n default:\n return false;\n }\n return true;\n });\n }\n parseTableCell(node) {\n var result = { type: DomType.Cell, children: [] };\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"tbl\":\n result.children.push(this.parseTable(c));\n break;\n case \"p\":\n result.children.push(this.parseParagraph(c));\n break;\n case \"tcPr\":\n this.parseTableCellProperties(c, result);\n break;\n }\n }\n return result;\n }\n parseTableCellProperties(elem, cell) {\n cell.cssStyle = this.parseDefaultProperties(elem, {}, null, c => {\n switch (c.localName) {\n case \"gridSpan\":\n cell.span = globalXmlParser.intAttr(c, \"val\", null);\n break;\n case \"vMerge\":\n cell.verticalMerge = globalXmlParser.attr(c, \"val\") ?? \"continue\";\n break;\n case \"cnfStyle\":\n cell.className = values.classNameOfCnfStyle(c);\n break;\n default:\n return false;\n }\n return true;\n });\n this.parseTableCellVerticalText(elem, cell);\n }\n parseTableCellVerticalText(elem, cell) {\n const directionMap = {\n \"btLr\": {\n writingMode: \"vertical-rl\",\n transform: \"rotate(180deg)\"\n },\n \"lrTb\": {\n writingMode: \"vertical-lr\",\n transform: \"none\"\n },\n \"tbRl\": {\n writingMode: \"vertical-rl\",\n transform: \"none\"\n }\n };\n for (const c of globalXmlParser.elements(elem)) {\n if (c.localName === \"textDirection\") {\n const direction = globalXmlParser.attr(c, \"val\");\n const style = directionMap[direction] || { writingMode: \"horizontal-tb\" };\n cell.cssStyle[\"writing-mode\"] = style.writingMode;\n cell.cssStyle[\"transform\"] = style.transform;\n }\n }\n }\n parseDefaultProperties(elem, style = null, childStyle = null, handler = null) {\n style = style || {};\n for (const c of globalXmlParser.elements(elem)) {\n if (handler?.(c))\n continue;\n switch (c.localName) {\n case \"jc\":\n style[\"text-align\"] = values.valueOfJc(c);\n break;\n case \"textAlignment\":\n style[\"vertical-align\"] = values.valueOfTextAlignment(c);\n break;\n case \"color\":\n style[\"color\"] = xmlUtil.colorAttr(c, \"val\", null, autos.color);\n break;\n case \"sz\":\n style[\"font-size\"] = style[\"min-height\"] = globalXmlParser.lengthAttr(c, \"val\", LengthUsage.FontSize);\n break;\n case \"shd\":\n style[\"background-color\"] = xmlUtil.colorAttr(c, \"fill\", null, autos.shd);\n break;\n case \"highlight\":\n style[\"background-color\"] = xmlUtil.colorAttr(c, \"val\", null, autos.highlight);\n break;\n case \"vertAlign\":\n break;\n case \"position\":\n style.verticalAlign = globalXmlParser.lengthAttr(c, \"val\", LengthUsage.FontSize);\n break;\n case \"tcW\":\n if (this.options.ignoreWidth)\n break;\n case \"tblW\":\n style[\"width\"] = values.valueOfSize(c, \"w\");\n break;\n case \"trHeight\":\n this.parseTrHeight(c, style);\n break;\n case \"strike\":\n style[\"text-decoration\"] = globalXmlParser.boolAttr(c, \"val\", true) ? \"line-through\" : \"none\";\n break;\n case \"b\":\n style[\"font-weight\"] = globalXmlParser.boolAttr(c, \"val\", true) ? \"bold\" : \"normal\";\n break;\n case \"i\":\n style[\"font-style\"] = globalXmlParser.boolAttr(c, \"val\", true) ? \"italic\" : \"normal\";\n break;\n case \"caps\":\n style[\"text-transform\"] = globalXmlParser.boolAttr(c, \"val\", true) ? \"uppercase\" : \"none\";\n break;\n case \"smallCaps\":\n style[\"font-variant\"] = globalXmlParser.boolAttr(c, \"val\", true) ? \"small-caps\" : \"none\";\n break;\n case \"u\":\n this.parseUnderline(c, style);\n break;\n case \"ind\":\n case \"tblInd\":\n this.parseIndentation(c, style);\n break;\n case \"rFonts\":\n this.parseFont(c, style);\n break;\n case \"tblBorders\":\n this.parseBorderProperties(c, childStyle || style);\n break;\n case \"tblCellSpacing\":\n style[\"border-spacing\"] = values.valueOfMargin(c);\n style[\"border-collapse\"] = \"separate\";\n break;\n case \"pBdr\":\n this.parseBorderProperties(c, style);\n break;\n case \"bdr\":\n style[\"border\"] = values.valueOfBorder(c);\n break;\n case \"tcBorders\":\n this.parseBorderProperties(c, style);\n break;\n case \"vanish\":\n if (globalXmlParser.boolAttr(c, \"val\", true))\n style[\"display\"] = \"none\";\n break;\n case \"kern\":\n break;\n case \"noWrap\":\n break;\n case \"tblCellMar\":\n case \"tcMar\":\n this.parseMarginProperties(c, childStyle || style);\n break;\n case \"tblLayout\":\n style[\"table-layout\"] = values.valueOfTblLayout(c);\n break;\n case \"vAlign\":\n style[\"vertical-align\"] = values.valueOfTextAlignment(c);\n break;\n case \"spacing\":\n if (elem.localName == \"pPr\")\n this.parseSpacing(c, style);\n break;\n case \"wordWrap\":\n if (globalXmlParser.boolAttr(c, \"val\"))\n style[\"overflow-wrap\"] = \"break-word\";\n break;\n case \"suppressAutoHyphens\":\n style[\"hyphens\"] = globalXmlParser.boolAttr(c, \"val\", true) ? \"none\" : \"auto\";\n break;\n case \"lang\":\n style[\"$lang\"] = globalXmlParser.attr(c, \"val\");\n break;\n case \"rtl\":\n case \"bidi\":\n if (globalXmlParser.boolAttr(c, \"val\", true))\n style[\"direction\"] = \"rtl\";\n break;\n case \"bCs\":\n case \"iCs\":\n case \"szCs\":\n case \"tabs\":\n case \"outlineLvl\":\n case \"contextualSpacing\":\n case \"tblStyleColBandSize\":\n case \"tblStyleRowBandSize\":\n case \"webHidden\":\n case \"pageBreakBefore\":\n case \"suppressLineNumbers\":\n case \"keepLines\":\n case \"keepNext\":\n case \"widowControl\":\n case \"bidi\":\n case \"rtl\":\n case \"noProof\":\n break;\n default:\n if (this.options.debug)\n console.warn(`DOCX: Unknown document element: ${elem.localName}.${c.localName}`);\n break;\n }\n }\n return style;\n }\n parseUnderline(node, style) {\n var val = globalXmlParser.attr(node, \"val\");\n if (val == null)\n return;\n switch (val) {\n case \"dash\":\n case \"dashDotDotHeavy\":\n case \"dashDotHeavy\":\n case \"dashedHeavy\":\n case \"dashLong\":\n case \"dashLongHeavy\":\n case \"dotDash\":\n case \"dotDotDash\":\n style[\"text-decoration\"] = \"underline dashed\";\n break;\n case \"dotted\":\n case \"dottedHeavy\":\n style[\"text-decoration\"] = \"underline dotted\";\n break;\n case \"double\":\n style[\"text-decoration\"] = \"underline double\";\n break;\n case \"single\":\n case \"thick\":\n style[\"text-decoration\"] = \"underline\";\n break;\n case \"wave\":\n case \"wavyDouble\":\n case \"wavyHeavy\":\n style[\"text-decoration\"] = \"underline wavy\";\n break;\n case \"words\":\n style[\"text-decoration\"] = \"underline\";\n break;\n case \"none\":\n style[\"text-decoration\"] = \"none\";\n break;\n }\n var col = xmlUtil.colorAttr(node, \"color\");\n if (col)\n style[\"text-decoration-color\"] = col;\n }\n parseFont(node, style) {\n var ascii = globalXmlParser.attr(node, \"ascii\");\n var asciiTheme = values.themeValue(node, \"asciiTheme\");\n var eastAsia = globalXmlParser.attr(node, \"eastAsia\");\n var fonts = [ascii, asciiTheme, eastAsia].filter(x => x).map(x => encloseFontFamily(x));\n if (fonts.length > 0)\n style[\"font-family\"] = [...new Set(fonts)].join(', ');\n }\n parseIndentation(node, style) {\n var firstLine = globalXmlParser.lengthAttr(node, \"firstLine\");\n var hanging = globalXmlParser.lengthAttr(node, \"hanging\");\n var left = globalXmlParser.lengthAttr(node, \"left\");\n var start = globalXmlParser.lengthAttr(node, \"start\");\n var right = globalXmlParser.lengthAttr(node, \"right\");\n var end = globalXmlParser.lengthAttr(node, \"end\");\n if (firstLine)\n style[\"text-indent\"] = firstLine;\n if (hanging)\n style[\"text-indent\"] = `-${hanging}`;\n if (left || start)\n style[\"margin-inline-start\"] = left || start;\n if (right || end)\n style[\"margin-inline-end\"] = right || end;\n }\n parseSpacing(node, style) {\n var before = globalXmlParser.lengthAttr(node, \"before\");\n var after = globalXmlParser.lengthAttr(node, \"after\");\n var line = globalXmlParser.intAttr(node, \"line\", null);\n var lineRule = globalXmlParser.attr(node, \"lineRule\");\n if (before)\n style[\"margin-top\"] = before;\n if (after)\n style[\"margin-bottom\"] = after;\n if (line !== null) {\n switch (lineRule) {\n case \"auto\":\n style[\"line-height\"] = `${(line / 240).toFixed(2)}`;\n break;\n case \"atLeast\":\n style[\"line-height\"] = `calc(100% + ${line / 20}pt)`;\n break;\n default:\n style[\"line-height\"] = style[\"min-height\"] = `${line / 20}pt`;\n break;\n }\n }\n }\n parseMarginProperties(node, output) {\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"left\":\n output[\"padding-left\"] = values.valueOfMargin(c);\n break;\n case \"right\":\n output[\"padding-right\"] = values.valueOfMargin(c);\n break;\n case \"top\":\n output[\"padding-top\"] = values.valueOfMargin(c);\n break;\n case \"bottom\":\n output[\"padding-bottom\"] = values.valueOfMargin(c);\n break;\n }\n }\n }\n parseTrHeight(node, output) {\n switch (globalXmlParser.attr(node, \"hRule\")) {\n case \"exact\":\n output[\"height\"] = globalXmlParser.lengthAttr(node, \"val\");\n break;\n case \"atLeast\":\n default:\n output[\"height\"] = globalXmlParser.lengthAttr(node, \"val\");\n break;\n }\n }\n parseBorderProperties(node, output) {\n for (const c of globalXmlParser.elements(node)) {\n switch (c.localName) {\n case \"start\":\n case \"left\":\n output[\"border-left\"] = values.valueOfBorder(c);\n break;\n case \"end\":\n case \"right\":\n output[\"border-right\"] = values.valueOfBorder(c);\n break;\n case \"top\":\n output[\"border-top\"] = values.valueOfBorder(c);\n break;\n case \"bottom\":\n output[\"border-bottom\"] = values.valueOfBorder(c);\n break;\n }\n }\n }\n}\nconst knownColors = ['black', 'blue', 'cyan', 'darkBlue', 'darkCyan', 'darkGray', 'darkGreen', 'darkMagenta', 'darkRed', 'darkYellow', 'green', 'lightGray', 'magenta', 'none', 'red', 'white', 'yellow'];\nclass xmlUtil {\n static colorAttr(node, attrName, defValue = null, autoColor = 'black') {\n var v = globalXmlParser.attr(node, attrName);\n if (v) {\n if (v == \"auto\") {\n return autoColor;\n }\n else if (knownColors.includes(v)) {\n return v;\n }\n return `#${v}`;\n }\n var themeColor = globalXmlParser.attr(node, \"themeColor\");\n return themeColor ? `var(--docx-${themeColor}-color)` : defValue;\n }\n}\nclass values {\n static themeValue(c, attr) {\n var val = globalXmlParser.attr(c, attr);\n return val ? `var(--docx-${val}-font)` : null;\n }\n static valueOfSize(c, attr) {\n var type = LengthUsage.Dxa;\n switch (globalXmlParser.attr(c, \"type\")) {\n case \"dxa\": break;\n case \"pct\":\n type = LengthUsage.Percent;\n break;\n case \"auto\": return \"auto\";\n }\n return globalXmlParser.lengthAttr(c, attr, type);\n }\n static valueOfMargin(c) {\n return globalXmlParser.lengthAttr(c, \"w\");\n }\n static valueOfBorder(c) {\n var type = values.parseBorderType(globalXmlParser.attr(c, \"val\"));\n if (type == \"none\")\n return \"none\";\n var color = xmlUtil.colorAttr(c, \"color\");\n var size = globalXmlParser.lengthAttr(c, \"sz\", LengthUsage.Border);\n return `${size} ${type} ${color == \"auto\" ? autos.borderColor : color}`;\n }\n static parseBorderType(type) {\n switch (type) {\n case \"single\": return \"solid\";\n case \"dashDotStroked\": return \"solid\";\n case \"dashed\": return \"dashed\";\n case \"dashSmallGap\": return \"dashed\";\n case \"dotDash\": return \"dotted\";\n case \"dotDotDash\": return \"dotted\";\n case \"dotted\": return \"dotted\";\n case \"double\": return \"double\";\n case \"doubleWave\": return \"double\";\n case \"inset\": return \"inset\";\n case \"nil\": return \"none\";\n case \"none\": return \"none\";\n case \"outset\": return \"outset\";\n case \"thick\": return \"solid\";\n case \"thickThinLargeGap\": return \"solid\";\n case \"thickThinMediumGap\": return \"solid\";\n case \"thickThinSmallGap\": return \"solid\";\n case \"thinThickLargeGap\": return \"solid\";\n case \"thinThickMediumGap\": return \"solid\";\n case \"thinThickSmallGap\": return \"solid\";\n case \"thinThickThinLargeGap\": return \"solid\";\n case \"thinThickThinMediumGap\": return \"solid\";\n case \"thinThickThinSmallGap\": return \"solid\";\n case \"threeDEmboss\": return \"solid\";\n case \"threeDEngrave\": return \"solid\";\n case \"triple\": return \"double\";\n case \"wave\": return \"solid\";\n }\n return 'solid';\n }\n static valueOfTblLayout(c) {\n var type = globalXmlParser.attr(c, \"val\");\n return type == \"fixed\" ? \"fixed\" : \"auto\";\n }\n static classNameOfCnfStyle(c) {\n const val = globalXmlParser.attr(c, \"val\");\n const classes = [\n 'first-row', 'last-row', 'first-col', 'last-col',\n 'odd-col', 'even-col', 'odd-row', 'even-row',\n 'ne-cell', 'nw-cell', 'se-cell', 'sw-cell'\n ];\n return classes.filter((_, i) => val[i] == '1').join(' ');\n }\n static valueOfJc(c) {\n var type = globalXmlParser.attr(c, \"val\");\n switch (type) {\n case \"start\":\n case \"left\": return \"left\";\n case \"center\": return \"center\";\n case \"end\":\n case \"right\": return \"right\";\n case \"both\": return \"justify\";\n }\n return type;\n }\n static valueOfVertAlign(c, asTagName = false) {\n var type = globalXmlParser.attr(c, \"val\");\n switch (type) {\n case \"subscript\": return \"sub\";\n case \"superscript\": return asTagName ? \"sup\" : \"super\";\n }\n return asTagName ? null : type;\n }\n static valueOfTextAlignment(c) {\n var type = globalXmlParser.attr(c, \"val\");\n switch (type) {\n case \"auto\":\n case \"baseline\": return \"baseline\";\n case \"top\": return \"top\";\n case \"center\": return \"middle\";\n case \"bottom\": return \"bottom\";\n }\n return type;\n }\n static addSize(a, b) {\n if (a == null)\n return b;\n if (b == null)\n return a;\n return `calc(${a} + ${b})`;\n }\n static classNameOftblLook(c) {\n const val = globalXmlParser.hexAttr(c, \"val\", 0);\n let className = \"\";\n if (globalXmlParser.boolAttr(c, \"firstRow\") || (val & 0x0020))\n className += \" first-row\";\n if (globalXmlParser.boolAttr(c, \"lastRow\") || (val & 0x0040))\n className += \" last-row\";\n if (globalXmlParser.boolAttr(c, \"firstColumn\") || (val & 0x0080))\n className += \" first-col\";\n if (globalXmlParser.boolAttr(c, \"lastColumn\") || (val & 0x0100))\n className += \" last-col\";\n if (globalXmlParser.boolAttr(c, \"noHBand\") || (val & 0x0200))\n className += \" no-hband\";\n if (globalXmlParser.boolAttr(c, \"noVBand\") || (val & 0x0400))\n className += \" no-vband\";\n return className.trim();\n }\n}\n\nconst defaultTab = { pos: 0, leader: \"none\", style: \"left\" };\nconst maxTabs = 50;\nfunction computePixelToPoint(container = document.body) {\n const temp = document.createElement(\"div\");\n temp.style.width = '100pt';\n container.appendChild(temp);\n const result = 100 / temp.offsetWidth;\n container.removeChild(temp);\n return result;\n}\nfunction updateTabStop(elem, tabs, defaultTabSize, pixelToPoint = 72 / 96) {\n const p = elem.closest(\"p\");\n const ebb = elem.getBoundingClientRect();\n const pbb = p.getBoundingClientRect();\n const pcs = getComputedStyle(p);\n const tabStops = tabs?.length > 0 ? tabs.map(t => ({\n pos: lengthToPoint(t.position),\n leader: t.leader,\n style: t.style\n })).sort((a, b) => a.pos - b.pos) : [defaultTab];\n const lastTab = tabStops[tabStops.length - 1];\n const pWidthPt = pbb.width * pixelToPoint;\n const size = lengthToPoint(defaultTabSize);\n let pos = lastTab.pos + size;\n if (pos < pWidthPt) {\n for (; pos < pWidthPt && tabStops.length < maxTabs; pos += size) {\n tabStops.push({ ...defaultTab, pos: pos });\n }\n }\n const marginLeft = parseFloat(pcs.marginLeft);\n const pOffset = pbb.left + marginLeft;\n const left = (ebb.left - pOffset) * pixelToPoint;\n const tab = tabStops.find(t => t.style != \"clear\" && t.pos > left);\n if (tab == null)\n return;\n let width = 1;\n if (tab.style == \"right\" || tab.style == \"center\") {\n const tabStops = Array.from(p.querySelectorAll(`.${elem.className}`));\n const nextIdx = tabStops.indexOf(elem) + 1;\n const range = document.createRange();\n range.setStart(elem, 1);\n if (nextIdx < tabStops.length) {\n range.setEndBefore(tabStops[nextIdx]);\n }\n else {\n range.setEndAfter(p);\n }\n const mul = tab.style == \"center\" ? 0.5 : 1;\n const nextBB = range.getBoundingClientRect();\n const offset = nextBB.left + mul * nextBB.width - (pbb.left - marginLeft);\n width = tab.pos - offset * pixelToPoint;\n }\n else {\n width = tab.pos - left;\n }\n elem.innerHTML = \"&nbsp;\";\n elem.style.textDecoration = \"inherit\";\n elem.style.wordSpacing = `${width.toFixed(0)}pt`;\n switch (tab.leader) {\n case \"dot\":\n case \"middleDot\":\n elem.style.textDecoration = \"underline\";\n elem.style.textDecorationStyle = \"dotted\";\n break;\n case \"hyphen\":\n case \"heavy\":\n case \"underscore\":\n elem.style.textDecoration = \"underline\";\n break;\n }\n}\nfunction lengthToPoint(length) {\n return parseFloat(length);\n}\n\nconst ns = {\n svg: \"http://www.w3.org/2000/svg\",\n mathML: \"http://www.w3.org/1998/Math/MathML\"\n};\nclass HtmlRenderer {\n constructor(htmlDocument) {\n this.htmlDocument = htmlDocument;\n this.className = \"docx\";\n this.styleMap = {};\n this.currentPart = null;\n this.tableVerticalMerges = [];\n this.currentVerticalMerge = null;\n this.tableCellPositions = [];\n this.currentCellPosition = null;\n this.footnoteMap = {};\n this.endnoteMap = {};\n this.currentEndnoteIds = [];\n this.usedHederFooterParts = [];\n this.currentTabs = [];\n this.commentMap = {};\n this.tasks = [];\n this.postRenderTasks = [];\n }\n async render(document, bodyContainer, styleContainer = null, options) {\n this.document = document;\n this.options = options;\n this.className = options.className;\n this.rootSelector = options.inWrapper ? `.${this.className}-wrapper` : ':root';\n this.styleMap = null;\n this.tasks = [];\n if (this.options.renderComments && globalThis.Highlight) {\n this.commentHighlight = new Highlight();\n }\n styleContainer = styleContainer || bodyContainer;\n removeAllElements(styleContainer);\n removeAllElements(bodyContainer);\n styleContainer.appendChild(this.createComment(\"docxjs library predefined styles\"));\n styleContainer.appendChild(this.renderDefaultStyle());\n if (document.themePart) {\n styleContainer.appendChild(this.createComment(\"docxjs document theme values\"));\n this.renderTheme(document.themePart, styleContainer);\n }\n if (document.stylesPart != null) {\n this.styleMap = this.processStyles(document.stylesPart.styles);\n styleContainer.appendChild(this.createComment(\"docxjs document styles\"));\n styleContainer.appendChild(this.renderStyles(document.stylesPart.styles));\n }\n if (document.numberingPart) {\n this.prodessNumberings(document.numberingPart.domNumberings);\n styleContainer.appendChild(this.createComment(\"docxjs document numbering styles\"));\n styleContainer.appendChild(this.renderNumbering(document.numberingPart.domNumberings, styleContainer));\n }\n if (document.footnotesPart) {\n this.footnoteMap = keyBy(document.footnotesPart.notes, x => x.id);\n }\n if (document.endnotesPart) {\n this.endnoteMap = keyBy(document.endnotesPart.notes, x => x.id);\n }\n if (document.settingsPart) {\n this.defaultTabSize = document.settingsPart.settings?.defaultTabStop;\n }\n if (!options.ignoreFonts && document.fontTablePart)\n this.renderFontTable(document.fontTablePart, styleContainer);\n var sectionElements = this.renderSections(document.documentPart.body);\n if (this.options.inWrapper) {\n bodyContainer.appendChild(this.renderWrapper(sectionElements));\n }\n else {\n appendChildren(bodyContainer, sectionElements);\n }\n if (this.commentHighlight && options.renderComments) {\n CSS.highlights.set(`${this.className}-comments`, this.commentHighlight);\n }\n this.postRenderTasks.forEach(t => t());\n await Promise.allSettled(this.tasks);\n this.refreshTabStops();\n }\n renderTheme(themePart, styleContainer) {\n const variables = {};\n const fontScheme = themePart.theme?.fontScheme;\n if (fontScheme) {\n if (fontScheme.majorFont) {\n variables['--docx-majorHAnsi-font'] = fontScheme.majorFont.latinTypeface;\n }\n if (fontScheme.minorFont) {\n variables['--docx-minorHAnsi-font'] = fontScheme.minorFont.latinTypeface;\n }\n }\n const colorScheme = themePart.theme?.colorScheme;\n if (colorScheme) {\n for (let [k, v] of Object.entries(colorScheme.colors)) {\n variables[`--docx-${k}-color`] = `#${v}`;\n }\n }\n const cssText = this.styleToString(`.${this.className}`, variables);\n styleContainer.appendChild(this.createStyleElement(cssText));\n }\n renderFontTable(fontsPart, styleContainer) {\n for (let f of fontsPart.fonts) {\n for (let ref of f.embedFontRefs) {\n this.tasks.push(this.document.loadFont(ref.id, ref.key).then(fontData => {\n const cssValues = {\n 'font-family': encloseFontFamily(f.name),\n 'src': `url(${fontData})`\n };\n if (ref.type == \"bold\" || ref.type == \"boldItalic\") {\n cssValues['font-weight'] = 'bold';\n }\n if (ref.type == \"italic\" || ref.type == \"boldItalic\") {\n cssValues['font-style'] = 'italic';\n }\n const cssText = this.styleToString(\"@font-face\", cssValues);\n styleContainer.appendChild(this.createComment(`docxjs ${f.name} font`));\n styleContainer.appendChild(this.createStyleElement(cssText));\n }));\n }\n }\n }\n processStyleName(className) {\n return className ? `${this.className}_${escapeClassName(className)}` : this.className;\n }\n processStyles(styles) {\n const stylesMap = keyBy(styles.filter(x => x.id != null), x => x.id);\n for (const style of styles.filter(x => x.basedOn)) {\n var baseStyle = stylesMap[style.basedOn];\n if (baseStyle) {\n style.paragraphProps = mergeDeep(style.paragraphProps, baseStyle.paragraphProps);\n style.runProps = mergeDeep(style.runProps, baseStyle.runProps);\n for (const baseValues of baseStyle.styles) {\n const styleValues = style.styles.find(x => x.target == baseValues.target);\n if (styleValues) {\n this.copyStyleProperties(baseValues.values, styleValues.values);\n }\n else {\n style.styles.push({ ...baseValues, values: { ...baseValues.values } });\n }\n }\n }\n else if (this.options.debug)\n console.warn(`Can't find base style ${style.basedOn}`);\n }\n for (let style of styles) {\n style.cssName = this.processStyleName(style.id);\n }\n return stylesMap;\n }\n prodessNumberings(numberings) {\n for (let num of numberings.filter(n => n.pStyleName)) {\n const style = this.findStyle(num.pStyleName);\n if (style?.paragraphProps?.numbering) {\n style.paragraphProps.numbering.level = num.level;\n }\n }\n }\n processElement(element) {\n if (element.children) {\n for (var e of element.children) {\n e.parent = element;\n if (e.type == DomType.Table) {\n this.processTable(e);\n }\n else {\n this.processElement(e);\n }\n }\n }\n }\n processTable(table) {\n for (var r of table.children) {\n for (var c of r.children) {\n c.cssStyle = this.copyStyleProperties(table.cellStyle, c.cssStyle, [\n \"border-left\", \"border-right\", \"border-top\", \"border-bottom\",\n \"padding-left\", \"padding-right\", \"padding-top\", \"padding-bottom\"\n ]);\n this.processElement(c);\n }\n }\n }\n copyStyleProperties(input, output, attrs = null) {\n if (!input)\n return output;\n if (output == null)\n output = {};\n if (attrs == null)\n attrs = Object.getOwnPropertyNames(input);\n for (var key of attrs) {\n if (input.hasOwnProperty(key) && !output.hasOwnProperty(key))\n output[key] = input[key];\n }\n return output;\n }\n createPageElement(className, props) {\n var elem = this.createElement(\"section\", { className });\n if (props) {\n if (props.pageMargins) {\n elem.style.paddingLeft = props.pageMargins.left;\n elem.style.paddingRight = props.pageMargins.right;\n elem.style.paddingTop = props.pageMargins.top;\n elem.style.paddingBottom = props.pageMargins.bottom;\n }\n if (props.pageSize) {\n if (!this.options.ignoreWidth)\n elem.style.width = props.pageSize.width;\n if (!this.options.ignoreHeight)\n elem.style.minHeight = props.pageSize.height;\n }\n }\n return elem;\n }\n createSectionContent(props) {\n var elem = this.createElement(\"article\");\n if (props.columns && props.columns.numberOfColumns) {\n elem.style.columnCount = `${props.columns.numberOfColumns}`;\n elem.style.columnGap = props.columns.space;\n if (props.columns.separator) {\n elem.style.columnRule = \"1px solid black\";\n }\n }\n return elem;\n }\n renderSections(document) {\n const result = [];\n this.processElement(document);\n const sections = this.splitBySection(document.children, document.props);\n const pages = this.groupByPageBreaks(sections);\n let prevProps = null;\n for (let i = 0, l = pages.length; i < l; i++) {\n this.currentFootnoteIds = [];\n const section = pages[i][0];\n let props = section.sectProps;\n const pageElement = this.createPageElement(this.className, props);\n this.renderStyleValues(document.cssStyle, pageElement);\n this.options.renderHeaders && this.renderHeaderFooter(props.headerRefs, props, result.length, prevProps != props, pageElement);\n for (const sect of pages[i]) {\n var contentElement = this.createSectionContent(sect.sectProps);\n this.renderElements(sect.elements, contentElement);\n pageElement.appendChild(contentElement);\n props = sect.sectProps;\n }\n if (this.options.renderFootnotes) {\n this.renderNotes(this.currentFootnoteIds, this.footnoteMap, pageElement);\n }\n if (this.options.renderEndnotes && i == l - 1) {\n this.renderNotes(this.currentEndnoteIds, this.endnoteMap, pageElement);\n }\n this.options.renderFooters && this.renderHeaderFooter(props.footerRefs, props, result.length, prevProps != props, pageElement);\n result.push(pageElement);\n prevProps = props;\n }\n return result;\n }\n renderHeaderFooter(refs, props, page, firstOfSection, into) {\n if (!refs)\n return;\n var ref = (props.titlePage && firstOfSection ? refs.find(x => x.type == \"first\") : null)\n ?? (page % 2 == 1 ? refs.find(x => x.type == \"even\") : null)\n ?? refs.find(x => x.type == \"default\");\n var part = ref && this.document.findPartByRelId(ref.id, this.document.documentPart);\n if (part) {\n this.currentPart = part;\n if (!this.usedHederFooterParts.includes(part.path)) {\n this.processElement(part.rootElement);\n this.usedHederFooterParts.push(part.path);\n }\n const [el] = this.renderElements([part.rootElement], into);\n if (props?.pageMargins) {\n if (part.rootElement.type === DomType.Header) {\n el.style.marginTop = `calc(${props.pageMargins.header} - ${props.pageMargins.top})`;\n el.style.minHeight = `calc(${props.pageMargins.top} - ${props.pageMargins.header})`;\n }\n else if (part.rootElement.type === DomType.Footer) {\n el.style.marginBottom = `calc(${props.pageMargins.footer} - ${props.pageMargins.bottom})`;\n el.style.minHeight = `calc(${props.pageMargins.bottom} - ${props.pageMargins.footer})`;\n }\n }\n this.currentPart = null;\n }\n }\n isPageBreakElement(elem) {\n if (elem.type != DomType.Break)\n return false;\n if (elem.break == \"lastRenderedPageBreak\")\n return !this.options.ignoreLastRenderedPageBreak;\n return elem.break == \"page\";\n }\n isPageBreakSection(prev, next) {\n if (!prev)\n return false;\n if (!next)\n return false;\n return prev.pageSize?.orientation != next.pageSize?.orientation\n || prev.pageSize?.width != next.pageSize?.width\n || prev.pageSize?.height != next.pageSize?.height;\n }\n splitBySection(elements, defaultProps) {\n var current = { sectProps: null, elements: [], pageBreak: false };\n var result = [current];\n for (let elem of elements) {\n if (elem.type == DomType.Paragraph) {\n const s = this.findStyle(elem.styleName);\n if (s?.paragraphProps?.pageBreakBefore) {\n current.sectProps = sectProps;\n current.pageBreak = true;\n current = { sectProps: null, elements: [], pageBreak: false };\n result.push(current);\n }\n }\n current.elements.push(elem);\n if (elem.type == DomType.Paragraph) {\n const p = elem;\n var sectProps = p.sectionProps;\n var pBreakIndex = -1;\n var rBreakIndex = -1;\n if (this.options.breakPages && p.children) {\n pBreakIndex = p.children.findIndex(r => {\n rBreakIndex = r.children?.findIndex(this.isPageBreakElement.bind(this)) ?? -1;\n return rBreakIndex != -1;\n });\n }\n if (sectProps || pBreakIndex != -1) {\n current.sectProps = sectProps;\n current.pageBreak = pBreakIndex != -1;\n current = { sectProps: null, elements: [], pageBreak: false };\n result.push(current);\n }\n if (pBreakIndex != -1) {\n let breakRun = p.children[pBreakIndex];\n let splitRun = rBreakIndex < breakRun.children.length - 1;\n if (pBreakIndex < p.children.length - 1 || splitRun) {\n var children = elem.children;\n var newParagraph = { ...elem, children: children.slice(pBreakIndex) };\n elem.children = children.slice(0, pBreakIndex);\n current.elements.push(newParagraph);\n if (splitRun) {\n let runChildren = breakRun.children;\n let newRun = { ...breakRun, children: runChildren.slice(0, rBreakIndex) };\n elem.children.push(newRun);\n breakRun.children = runChildren.slice(rBreakIndex);\n }\n }\n }\n }\n }\n let currentSectProps = null;\n for (let i = result.length - 1; i >= 0; i--) {\n if (result[i].sectProps == null) {\n result[i].sectProps = currentSectProps ?? defaultProps;\n }\n else {\n currentSectProps = result[i].sectProps;\n }\n }\n return result;\n }\n groupByPageBreaks(sections) {\n let current = [];\n let prev;\n const result = [current];\n for (let s of sections) {\n current.push(s);\n if (this.options.ignoreLastRenderedPageBreak || s.pageBreak || this.isPageBreakSection(prev, s.sectProps))\n result.push(current = []);\n prev = s.sectProps;\n }\n return result.filter(x => x.length > 0);\n }\n renderWrapper(children) {\n return this.createElement(\"div\", { className: `${this.className}-wrapper` }, children);\n }\n renderDefaultStyle() {\n var c = this.className;\n var wrapperStyle = `\r\n.${c}-wrapper { background: gray; padding: 30px; padding-bottom: 0px; display: flex; flex-flow: column; align-items: center; } \r\n.${c}-wrapper>section.${c} { background: white; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); margin-bottom: 30px; }`;\n if (this.options.hideWrapperOnPrint) {\n wrapperStyle = `@media not print { ${wrapperStyle} }`;\n }\n var styleText = `${wrapperStyle}\r\n.${c} { color: black; hyphens: auto; text-underline-position: from-font; }\r\nsection.${c} { box-sizing: border-box; display: flex; flex-flow: column nowrap; position: relative; overflow: hidden; }\r\nsection.${c}>article { margin-bottom: auto; z-index: 1; }\r\nsection.${c}>footer { z-index: 1; }\r\n.${c} table { border-collapse: collapse; }\r\n.${c} table td, .${c} table th { vertical-align: top; }\r\n.${c} p { margin: 0pt; min-height: 1em; }\r\n.${c} span { white-space: pre-wrap; overflow-wrap: break-word; }\r\n.${c} a { color: inherit; text-decoration: inherit; }\r\n.${c} svg { fill: transparent; }\r\n`;\n if (this.options.renderComments) {\n styleText += `\r\n.${c}-comment-ref { cursor: default; }\r\n.${c}-comment-popover { display: none; z-index: 1000; padding: 0.5rem; background: white; position: absolute; box-shadow: 0 0 0.25rem rgba(0, 0, 0, 0.25); width: 30ch; }\r\n.${c}-comment-ref:hover~.${c}-comment-popover { display: block; }\r\n.${c}-comment-author,.${c}-comment-date { font-size: 0.875rem; color: #888; }\r\n`;\n }\n return this.createStyleElement(styleText);\n }\n renderNumbering(numberings, styleContainer) {\n var styleText = \"\";\n var resetCounters = [];\n for (var num of numberings) {\n var selector = `p.${this.numberingClass(num.id, num.level)}`;\n var listStyleType = \"none\";\n if (num.bullet) {\n let valiable = `--${this.className}-${num.bullet.src}`.toLowerCase();\n styleText += this.styleToString(`${selector}:before`, {\n \"content\": \"' '\",\n \"display\": \"inline-block\",\n \"background\": `var(${valiable})`\n }, num.bullet.style);\n this.tasks.push(this.document.loadNumberingImage(num.bullet.src).then(data => {\n var text = `${this.rootSelector} { ${valiable}: url(${data}) }`;\n styleContainer.appendChild(this.createStyleElement(text));\n }));\n }\n else if (num.levelText) {\n let counter = this.numberingCounter(num.id, num.level);\n const counterReset = counter + \" \" + (num.start - 1);\n if (num.level > 0) {\n styleText += this.styleToString(`p.${this.numberingClass(num.id, num.level - 1)}`, {\n \"counter-set\": counterReset\n });\n }\n resetCounters.push(counterReset);\n styleText += this.styleToString(`${selector}:before`, {\n \"content\": this.levelTextToContent(num.levelText, num.suff, num.id, this.numFormatToCssValue(num.format)),\n \"counter-increment\": counter,\n ...num.rStyle,\n });\n }\n else {\n listStyleType = this.numFormatToCssValue(num.format);\n }\n styleText += this.styleToString(selector, {\n \"display\": \"list-item\",\n \"list-style-position\": \"inside\",\n \"list-style-type\": listStyleType,\n ...num.pStyle\n });\n }\n if (resetCounters.length > 0) {\n styleText += this.styleToString(this.rootSelector, {\n \"counter-reset\": resetCounters.join(\" \")\n });\n }\n return this.createStyleElement(styleText);\n }\n renderStyles(styles) {\n var styleText = \"\";\n const stylesMap = this.styleMap;\n const defautStyles = keyBy(styles.filter(s => s.isDefault), s => s.target);\n for (const style of styles) {\n var subStyles = style.styles;\n if (style.linked) {\n var linkedStyle = style.linked && stylesMap[style.linked];\n if (linkedStyle)\n subStyles = subStyles.concat(linkedStyle.styles);\n else if (this.options.debug)\n console.warn(`Can't find linked style ${style.linked}`);\n }\n for (const subStyle of subStyles) {\n var selector = `${style.target ?? ''}.${style.cssName}`;\n if (style.target != subStyle.target)\n selector += ` ${subStyle.target}`;\n if (defautStyles[style.target] == style)\n selector = `.${this.className} ${style.target}, ` + selector;\n styleText += this.styleToString(selector, subStyle.values);\n }\n }\n return this.createStyleElement(styleText);\n }\n renderNotes(noteIds, notesMap, into) {\n var notes = noteIds.map(id => notesMap[id]).filter(x => x);\n if (notes.length > 0) {\n var result = this.createElement(\"ol\", null, this.renderElements(notes));\n into.appendChild(result);\n }\n }\n renderElement(elem) {\n switch (elem.type) {\n case DomType.Paragraph:\n return this.renderParagraph(elem);\n case DomType.BookmarkStart:\n return this.renderBookmarkStart(elem);\n case DomType.BookmarkEnd:\n return null;\n case DomType.Run:\n return this.renderRun(elem);\n case DomType.Table:\n return this.renderTable(elem);\n case DomType.Row:\n return this.renderTableRow(elem);\n case DomType.Cell:\n return this.renderTableCell(elem);\n case DomType.Hyperlink:\n return this.renderHyperlink(elem);\n case DomType.SmartTag:\n return this.renderSmartTag(elem);\n case DomType.Drawing:\n return this.renderDrawing(elem);\n case DomType.Image:\n return this.renderImage(elem);\n case DomType.Text:\n return this.renderText(elem);\n case DomType.Text:\n return this.renderText(elem);\n case DomType.DeletedText:\n return this.renderDeletedText(elem);\n case DomType.Tab:\n return this.renderTab(elem);\n case DomType.Symbol:\n return this.renderSymbol(elem);\n case DomType.Break:\n return this.renderBreak(elem);\n case DomType.Footer:\n return this.renderContainer(elem, \"footer\");\n case DomType.Header:\n return this.renderContainer(elem, \"header\");\n case DomType.Footnote:\n case DomType.Endnote:\n return this.renderContainer(elem, \"li\");\n case DomType.FootnoteReference:\n return this.renderFootnoteReference(elem);\n case DomType.EndnoteReference:\n return this.renderEndnoteReference(elem);\n case DomType.NoBreakHyphen:\n return this.createElement(\"wbr\");\n case DomType.VmlPicture:\n return this.renderVmlPicture(elem);\n case DomType.VmlElement:\n return this.renderVmlElement(elem);\n case DomType.MmlMath:\n return this.renderContainerNS(elem, ns.mathML, \"math\", { xmlns: ns.mathML });\n case DomType.MmlMathParagraph:\n return this.renderContainer(elem, \"span\");\n case DomType.MmlFraction:\n return this.renderContainerNS(elem, ns.mathML, \"mfrac\");\n case DomType.MmlBase:\n return this.renderContainerNS(elem, ns.mathML, elem.parent.type == DomType.MmlMatrixRow ? \"mtd\" : \"mrow\");\n case DomType.MmlNumerator:\n case DomType.MmlDenominator:\n case DomType.MmlFunction:\n case DomType.MmlLimit:\n case DomType.MmlBox:\n return this.renderContainerNS(elem, ns.mathML, \"mrow\");\n case DomType.MmlGroupChar:\n return this.renderMmlGroupChar(elem);\n case DomType.MmlLimitLower:\n return this.renderContainerNS(elem, ns.mathML, \"munder\");\n case DomType.MmlMatrix:\n return this.renderContainerNS(elem, ns.mathML, \"mtable\");\n case DomType.MmlMatrixRow:\n return this.renderContainerNS(elem, ns.mathML, \"mtr\");\n case DomType.MmlRadical:\n return this.renderMmlRadical(elem);\n case DomType.MmlSuperscript:\n return this.renderContainerNS(elem, ns.mathML, \"msup\");\n case DomType.MmlSubscript:\n return this.renderContainerNS(elem, ns.mathML, \"msub\");\n case DomType.MmlDegree:\n case DomType.MmlSuperArgument:\n case DomType.MmlSubArgument:\n return this.renderContainerNS(elem, ns.mathML, \"mn\");\n case DomType.MmlFunctionName:\n return this.renderContainerNS(elem, ns.mathML, \"ms\");\n case DomType.MmlDelimiter:\n return this.renderMmlDelimiter(elem);\n case DomType.MmlRun:\n return this.renderMmlRun(elem);\n case DomType.MmlNary:\n return this.renderMmlNary(elem);\n case DomType.MmlPreSubSuper:\n return this.renderMmlPreSubSuper(elem);\n case DomType.MmlBar:\n return this.renderMmlBar(elem);\n case DomType.MmlEquationArray:\n return this.renderMllList(elem);\n case DomType.Inserted:\n return this.renderInserted(elem);\n case DomType.Deleted:\n return this.renderDeleted(elem);\n case DomType.CommentRangeStart:\n return this.renderCommentRangeStart(elem);\n case DomType.CommentRangeEnd:\n return this.renderCommentRangeEnd(elem);\n case DomType.CommentReference:\n return this.renderCommentReference(elem);\n case DomType.AltChunk:\n return this.renderAltChunk(elem);\n }\n return null;\n }\n renderElements(elems, into) {\n if (elems == null)\n return null;\n var result = elems.flatMap(e => this.renderElement(e)).filter(e => e != null);\n if (into)\n appendChildren(into, result);\n return result;\n }\n renderContainer(elem, tagName, props) {\n return this.createElement(tagName, props, this.renderElements(elem.children));\n }\n renderContainerNS(elem, ns, tagName, props) {\n return this.createElementNS(ns, tagName, props, this.renderElements(elem.children));\n }\n renderParagraph(elem) {\n var result = this.renderContainer(elem, \"p\");\n const style = this.findStyle(elem.styleName);\n elem.tabs ?? (elem.tabs = style?.paragraphProps?.tabs);\n this.renderClass(elem, result);\n this.renderStyleValues(elem.cssStyle, result);\n this.renderCommonProperties(result.style, elem);\n const numbering = elem.numbering ?? style?.paragraphProps?.numbering;\n if (numbering) {\n result.classList.add(this.numberingClass(numbering.id, numbering.level));\n }\n return result;\n }\n renderRunProperties(style, props) {\n this.renderCommonProperties(style, props);\n }\n renderCommonProperties(style, props) {\n if (props == null)\n return;\n if (props.color) {\n style[\"color\"] = props.color;\n }\n if (props.fontSize) {\n style[\"font-size\"] = props.fontSize;\n }\n }\n renderHyperlink(elem) {\n var result = this.renderContainer(elem, \"a\");\n this.renderStyleValues(elem.cssStyle, result);\n let href = '';\n if (elem.id) {\n const rel = this.document.documentPart.rels.find(it => it.id == elem.id && it.targetMode === \"External\");\n href = rel?.target ?? href;\n }\n if (elem.anchor) {\n href += `#${elem.anchor}`;\n }\n result.href = href;\n return result;\n }\n renderSmartTag(elem) {\n return this.renderContainer(elem, \"span\");\n }\n renderCommentRangeStart(commentStart) {\n if (!this.options.renderComments)\n return null;\n const rng = new Range();\n this.commentHighlight?.add(rng);\n const result = this.createComment(`start of comment #${commentStart.id}`);\n this.later(() => rng.setStart(result, 0));\n this.commentMap[commentStart.id] = rng;\n return result;\n }\n renderCommentRangeEnd(commentEnd) {\n if (!this.options.renderComments)\n return null;\n const rng = this.commentMap[commentEnd.id];\n const result = this.createComment(`end of comment #${commentEnd.id}`);\n this.later(() => rng?.setEnd(result, 0));\n return result;\n }\n renderCommentReference(commentRef) {\n if (!this.options.renderComments)\n return null;\n var comment = this.document.commentsPart?.commentMap[commentRef.id];\n if (!comment)\n return null;\n const frg = new DocumentFragment();\n const commentRefEl = this.createElement(\"span\", { className: `${this.className}-comment-ref` }, ['💬']);\n const commentsContainerEl = this.createElement(\"div\", { className: `${this.className}-comment-popover` });\n this.renderCommentContent(comment, commentsContainerEl);\n frg.appendChild(this.createComment(`comment #${comment.id} by ${comment.author} on ${comment.date}`));\n frg.appendChild(commentRefEl);\n frg.appendChild(commentsContainerEl);\n return frg;\n }\n renderAltChunk(elem) {\n if (!this.options.renderAltChunks)\n return null;\n var result = this.createElement(\"iframe\");\n this.tasks.push(this.document.loadAltChunk(elem.id, this.currentPart).then(x => {\n result.srcdoc = x;\n }));\n return result;\n }\n renderCommentContent(comment, container) {\n container.appendChild(this.createElement('div', { className: `${this.className}-comment-author` }, [comment.author]));\n container.appendChild(this.createElement('div', { className: `${this.className}-comment-date` }, [new Date(comment.date).toLocaleString()]));\n this.renderElements(comment.children, container);\n }\n renderDrawing(elem) {\n var result = this.renderContainer(elem, \"div\");\n result.style.display = \"inline-block\";\n result.style.position = \"relative\";\n result.style.textIndent = \"0px\";\n this.renderStyleValues(elem.cssStyle, result);\n return result;\n }\n renderImage(elem) {\n let result = this.createElement(\"img\");\n let transform = elem.cssStyle?.transform;\n this.renderStyleValues(elem.cssStyle, result);\n if (elem.srcRect && elem.srcRect.some(x => x != 0)) {\n var [left, top, right, bottom] = elem.srcRect;\n transform = `scale(${1 / (1 - left - right)}, ${1 / (1 - top - bottom)})`;\n result.style['clip-path'] = `rect(${(100 * top).toFixed(2)}% ${(100 * (1 - right)).toFixed(2)}% ${(100 * (1 - bottom)).toFixed(2)}% ${(100 * left).toFixed(2)}%)`;\n }\n if (elem.rotation)\n transform = `rotate(${elem.rotation}deg) ${transform ?? ''}`;\n result.style.transform = transform?.trim();\n if (this.document) {\n this.tasks.push(this.document.loadDocumentImage(elem.src, this.currentPart).then(x => {\n result.src = x;\n }));\n }\n return result;\n }\n renderText(elem) {\n return this.htmlDocument.createTextNode(elem.text);\n }\n renderDeletedText(elem) {\n return this.options.renderChanges ? this.renderText(elem) : null;\n }\n renderBreak(elem) {\n if (elem.break == \"textWrapping\") {\n return this.createElement(\"br\");\n }\n return null;\n }\n renderInserted(elem) {\n if (this.options.renderChanges)\n return this.renderContainer(elem, \"ins\");\n return this.renderElements(elem.children);\n }\n renderDeleted(elem) {\n if (this.options.renderChanges)\n return this.renderContainer(elem, \"del\");\n return null;\n }\n renderSymbol(elem) {\n var span = this.createElement(\"span\");\n span.style.fontFamily = elem.font;\n span.innerHTML = `&#x${elem.char};`;\n return span;\n }\n renderFootnoteReference(elem) {\n var result = this.createElement(\"sup\");\n this.currentFootnoteIds.push(elem.id);\n result.textContent = `${this.currentFootnoteIds.length}`;\n return result;\n }\n renderEndnoteReference(elem) {\n var result = this.createElement(\"sup\");\n this.currentEndnoteIds.push(elem.id);\n result.textContent = `${this.currentEndnoteIds.length}`;\n return result;\n }\n renderTab(elem) {\n var tabSpan = this.createElement(\"span\");\n tabSpan.innerHTML = \"&emsp;\";\n if (this.options.experimental) {\n tabSpan.className = this.tabStopClass();\n var stops = findParent(elem, DomType.Paragraph)?.tabs;\n this.currentTabs.push({ stops, span: tabSpan });\n }\n return tabSpan;\n }\n renderBookmarkStart(elem) {\n return this.createElement(\"span\", { id: elem.name });\n }\n renderRun(elem) {\n if (elem.fieldRun)\n return null;\n const result = this.createElement(\"span\");\n if (elem.id)\n result.id = elem.id;\n this.renderClass(elem, result);\n this.renderStyleValues(elem.cssStyle, result);\n if (elem.verticalAlign) {\n const wrapper = this.createElement(elem.verticalAlign);\n this.renderElements(elem.children, wrapper);\n result.appendChild(wrapper);\n }\n else {\n this.renderElements(elem.children, result);\n }\n return result;\n }\n renderTable(elem) {\n let result = this.createElement(\"table\");\n this.tableCellPositions.push(this.currentCellPosition);\n this.tableVerticalMerges.push(this.currentVerticalMerge);\n this.currentVerticalMerge = {};\n this.currentCellPosition = { col: 0, row: 0 };\n if (elem.columns)\n result.appendChild(this.renderTableColumns(elem.columns));\n this.renderClass(elem, result);\n this.renderElements(elem.children, result);\n this.renderStyleValues(elem.cssStyle, result);\n this.currentVerticalMerge = this.tableVerticalMerges.pop();\n this.currentCellPosition = this.tableCellPositions.pop();\n return result;\n }\n renderTableColumns(columns) {\n let result = this.createElement(\"colgroup\");\n for (let col of columns) {\n let colElem = this.createElement(\"col\");\n if (col.width)\n colElem.style.width = col.width;\n result.appendChild(colElem);\n }\n return result;\n }\n renderTableRow(elem) {\n let result = this.createElement(\"tr\");\n this.currentCellPosition.col = 0;\n if (elem.gridBefore)\n result.appendChild(this.renderTableCellPlaceholder(elem.gridBefore));\n this.renderClass(elem, result);\n this.renderElements(elem.children, result);\n this.renderStyleValues(elem.cssStyle, result);\n if (elem.gridAfter)\n result.appendChild(this.renderTableCellPlaceholder(elem.gridAfter));\n this.currentCellPosition.row++;\n return result;\n }\n renderTableCellPlaceholder(colSpan) {\n const result = this.createElement(\"td\", { colSpan });\n result.style['border'] = 'none';\n return result;\n }\n renderTableCell(elem) {\n let result = this.renderContainer(elem, \"td\");\n const key = this.currentCellPosition.col;\n if (elem.verticalMerge) {\n if (elem.verticalMerge == \"restart\") {\n this.currentVerticalMerge[key] = result;\n result.rowSpan = 1;\n }\n else if (this.currentVerticalMerge[key]) {\n this.currentVerticalMerge[key].rowSpan += 1;\n result.style.display = \"none\";\n }\n }\n else {\n this.currentVerticalMerge[key] = null;\n }\n this.renderClass(elem, result);\n this.renderStyleValues(elem.cssStyle, result);\n if (elem.span)\n result.colSpan = elem.span;\n this.currentCellPosition.col += result.colSpan;\n return result;\n }\n renderVmlPicture(elem) {\n return this.renderContainer(elem, \"div\");\n }\n renderVmlElement(elem) {\n var container = this.createSvgElement(\"svg\");\n container.setAttribute(\"style\", elem.cssStyleText);\n const result = this.renderVmlChildElement(elem);\n if (elem.imageHref?.id) {\n this.tasks.push(this.document?.loadDocumentImage(elem.imageHref.id, this.currentPart)\n .then(x => result.setAttribute(\"href\", x)));\n }\n container.appendChild(result);\n requestAnimationFrame(() => {\n const bb = container.firstElementChild.getBBox();\n container.setAttribute(\"width\", `${Math.ceil(bb.x + bb.width)}`);\n container.setAttribute(\"height\", `${Math.ceil(bb.y + bb.height)}`);\n });\n return container;\n }\n renderVmlChildElement(elem) {\n const result = this.createSvgElement(elem.tagName);\n Object.entries(elem.attrs).forEach(([k, v]) => result.setAttribute(k, v));\n for (let child of elem.children) {\n if (child.type == DomType.VmlElement) {\n result.appendChild(this.renderVmlChildElement(child));\n }\n else {\n result.appendChild(...asArray(this.renderElement(child)));\n }\n }\n return result;\n }\n renderMmlRadical(elem) {\n const base = elem.children.find(el => el.type == DomType.MmlBase);\n if (elem.props?.hideDegree) {\n return this.createElementNS(ns.mathML, \"msqrt\", null, this.renderElements([base]));\n }\n const degree = elem.children.find(el => el.type == DomType.MmlDegree);\n return this.createElementNS(ns.mathML, \"mroot\", null, this.renderElements([base, degree]));\n }\n renderMmlDelimiter(elem) {\n const children = [];\n children.push(this.createElementNS(ns.mathML, \"mo\", null, [elem.props.beginChar ?? '(']));\n children.push(...this.renderElements(elem.children));\n children.push(this.createElementNS(ns.mathML, \"mo\", null, [elem.props.endChar ?? ')']));\n return this.createElementNS(ns.mathML, \"mrow\", null, children);\n }\n renderMmlNary(elem) {\n const children = [];\n const grouped = keyBy(elem.children, x => x.type);\n const sup = grouped[DomType.MmlSuperArgument];\n const sub = grouped[DomType.MmlSubArgument];\n const supElem = sup ? this.createElementNS(ns.mathML, \"mo\", null, asArray(this.renderElement(sup))) : null;\n const subElem = sub ? this.createElementNS(ns.mathML, \"mo\", null, asArray(this.renderElement(sub))) : null;\n const charElem = this.createElementNS(ns.mathML, \"mo\", null, [elem.props?.char ?? '\\u222B']);\n if (supElem || subElem) {\n children.push(this.createElementNS(ns.mathML, \"munderover\", null, [charElem, subElem, supElem]));\n }\n else if (supElem) {\n children.push(this.createElementNS(ns.mathML, \"mover\", null, [charElem, supElem]));\n }\n else if (subElem) {\n children.push(this.createElementNS(ns.mathML, \"munder\", null, [charElem, subElem]));\n }\n else {\n children.push(charElem);\n }\n children.push(...this.renderElements(grouped[DomType.MmlBase].children));\n return this.createElementNS(ns.mathML, \"mrow\", null, children);\n }\n renderMmlPreSubSuper(elem) {\n const children = [];\n const grouped = keyBy(elem.children, x => x.type);\n const sup = grouped[DomType.MmlSuperArgument];\n const sub = grouped[DomType.MmlSubArgument];\n const supElem = sup ? this.createElementNS(ns.mathML, \"mo\", null, asArray(this.renderElement(sup))) : null;\n const subElem = sub ? this.createElementNS(ns.mathML, \"mo\", null, asArray(this.renderElement(sub))) : null;\n const stubElem = this.createElementNS(ns.mathML, \"mo\", null);\n children.push(this.createElementNS(ns.mathML, \"msubsup\", null, [stubElem, subElem, supElem]));\n children.push(...this.renderElements(grouped[DomType.MmlBase].children));\n return this.createElementNS(ns.mathML, \"mrow\", null, children);\n }\n renderMmlGroupChar(elem) {\n const tagName = elem.props.verticalJustification === \"bot\" ? \"mover\" : \"munder\";\n const result = this.renderContainerNS(elem, ns.mathML, tagName);\n if (elem.props.char) {\n result.appendChild(this.createElementNS(ns.mathML, \"mo\", null, [elem.props.char]));\n }\n return result;\n }\n renderMmlBar(elem) {\n const result = this.renderContainerNS(elem, ns.mathML, \"mrow\");\n switch (elem.props.position) {\n case \"top\":\n result.style.textDecoration = \"overline\";\n break;\n case \"bottom\":\n result.style.textDecoration = \"underline\";\n break;\n }\n return result;\n }\n renderMmlRun(elem) {\n const result = this.createElementNS(ns.mathML, \"ms\", null, this.renderElements(elem.children));\n this.renderClass(elem, result);\n this.renderStyleValues(elem.cssStyle, result);\n return result;\n }\n renderMllList(elem) {\n const result = this.createElementNS(ns.mathML, \"mtable\");\n this.renderClass(elem, result);\n this.renderStyleValues(elem.cssStyle, result);\n for (let child of this.renderElements(elem.children)) {\n result.appendChild(this.createElementNS(ns.mathML, \"mtr\", null, [\n this.createElementNS(ns.mathML, \"mtd\", null, [child])\n ]));\n }\n return result;\n }\n renderStyleValues(style, ouput) {\n for (let k in style) {\n if (k.startsWith(\"$\")) {\n ouput.setAttribute(k.slice(1), style[k]);\n }\n else {\n ouput.style[k] = style[k];\n }\n }\n }\n renderClass(input, ouput) {\n if (input.className)\n ouput.className = input.className;\n if (input.styleName)\n ouput.classList.add(this.processStyleName(input.styleName));\n }\n findStyle(styleName) {\n return styleName && this.styleMap?.[styleName];\n }\n numberingClass(id, lvl) {\n return `${this.className}-num-${id}-${lvl}`;\n }\n tabStopClass() {\n return `${this.className}-tab-stop`;\n }\n styleToString(selectors, values, cssText = null) {\n let result = `${selectors} {\\r\\n`;\n for (const key in values) {\n if (key.startsWith('$'))\n continue;\n result += ` ${key}: ${values[key]};\\r\\n`;\n }\n if (cssText)\n result += cssText;\n return result + \"}\\r\\n\";\n }\n numberingCounter(id, lvl) {\n return `${this.className}-num-${id}-${lvl}`;\n }\n levelTextToContent(text, suff, id, numformat) {\n const suffMap = {\n \"tab\": \"\\\\9\",\n \"space\": \"\\\\a0\",\n };\n var result = text.replace(/%\\d*/g, s => {\n let lvl = parseInt(s.substring(1), 10) - 1;\n return `\"counter(${this.numberingCounter(id, lvl)}, ${numformat})\"`;\n });\n return `\"${result}${suffMap[suff] ?? \"\"}\"`;\n }\n numFormatToCssValue(format) {\n var mapping = {\n none: \"none\",\n bullet: \"disc\",\n decimal: \"decimal\",\n lowerLetter: \"lower-alpha\",\n upperLetter: \"upper-alpha\",\n lowerRoman: \"lower-roman\",\n upperRoman: \"upper-roman\",\n decimalZero: \"decimal-leading-zero\",\n aiueo: \"katakana\",\n aiueoFullWidth: \"katakana\",\n chineseCounting: \"simp-chinese-informal\",\n chineseCountingThousand: \"simp-chinese-informal\",\n chineseLegalSimplified: \"simp-chinese-formal\",\n chosung: \"hangul-consonant\",\n ideographDigital: \"cjk-ideographic\",\n ideographTraditional: \"cjk-heavenly-stem\",\n ideographLegalTraditional: \"trad-chinese-formal\",\n ideographZodiac: \"cjk-earthly-branch\",\n iroha: \"katakana-iroha\",\n irohaFullWidth: \"katakana-iroha\",\n japaneseCounting: \"japanese-informal\",\n japaneseDigitalTenThousand: \"cjk-decimal\",\n japaneseLegal: \"japanese-formal\",\n thaiNumbers: \"thai\",\n koreanCounting: \"korean-hangul-formal\",\n koreanDigital: \"korean-hangul-formal\",\n koreanDigital2: \"korean-hanja-informal\",\n hebrew1: \"hebrew\",\n hebrew2: \"hebrew\",\n hindiNumbers: \"devanagari\",\n ganada: \"hangul\",\n taiwaneseCounting: \"cjk-ideographic\",\n taiwaneseCountingThousand: \"cjk-ideographic\",\n taiwaneseDigital: \"cjk-decimal\",\n };\n return mapping[format] ?? format;\n }\n refreshTabStops() {\n if (!this.options.experimental)\n return;\n setTimeout(() => {\n const pixelToPoint = computePixelToPoint();\n for (let tab of this.currentTabs) {\n updateTabStop(tab.span, tab.stops, this.defaultTabSize, pixelToPoint);\n }\n }, 500);\n }\n createElementNS(ns, tagName, props, children) {\n var result = ns ? this.htmlDocument.createElementNS(ns, tagName) : this.htmlDocument.createElement(tagName);\n Object.assign(result, props);\n children && appendChildren(result, children);\n return result;\n }\n createElement(tagName, props, children) {\n return this.createElementNS(undefined, tagName, props, children);\n }\n createSvgElement(tagName, props, children) {\n return this.createElementNS(ns.svg, tagName, props, children);\n }\n createStyleElement(cssText) {\n return this.createElement(\"style\", { innerHTML: cssText });\n }\n createComment(text) {\n return this.htmlDocument.createComment(text);\n }\n later(func) {\n this.postRenderTasks.push(func);\n }\n}\nfunction removeAllElements(elem) {\n elem.innerHTML = '';\n}\nfunction appendChildren(elem, children) {\n children.forEach(c => elem.appendChild(isString(c) ? document.createTextNode(c) : c));\n}\nfunction findParent(elem, type) {\n var parent = elem.parent;\n while (parent != null && parent.type != type)\n parent = parent.parent;\n return parent;\n}\n\nconst defaultOptions = {\n ignoreHeight: false,\n ignoreWidth: false,\n ignoreFonts: false,\n breakPages: true,\n debug: false,\n experimental: false,\n className: \"docx\",\n inWrapper: true,\n hideWrapperOnPrint: false,\n trimXmlDeclaration: true,\n ignoreLastRenderedPageBreak: true,\n renderHeaders: true,\n renderFooters: true,\n renderFootnotes: true,\n renderEndnotes: true,\n useBase64URL: false,\n renderChanges: false,\n renderComments: false,\n renderAltChunks: true\n};\nfunction parseAsync(data, userOptions) {\n const ops = { ...defaultOptions, ...userOptions };\n return WordDocument.load(data, new DocumentParser(ops), ops);\n}\nasync function renderDocument(document, bodyContainer, styleContainer, userOptions) {\n const ops = { ...defaultOptions, ...userOptions };\n const renderer = new HtmlRenderer(window.document);\n return await renderer.render(document, bodyContainer, styleContainer, ops);\n}\nasync function renderAsync(data, bodyContainer, styleContainer, userOptions) {\n const doc = await parseAsync(data, userOptions);\n await renderDocument(doc, bodyContainer, styleContainer, userOptions);\n return doc;\n}\n\nexport { defaultOptions, parseAsync, renderAsync, renderDocument };\n//# sourceMappingURL=docx-preview.mjs.map\n"],"x_google_ignoreList":[0],"mappings":"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"}