{"version":3,"file":"docx-preview.min.js","mappings":"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","sources":["webpack://docx/webpack/universalModuleDefinition","webpack://docx/./src/mathml.scss","webpack://docx/./node_modules/css-loader/dist/runtime/api.js","webpack://docx/./node_modules/css-loader/dist/runtime/getUrl.js","webpack://docx/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://docx/./src/common/open-xml-package.ts","webpack://docx/./src/common/part.ts","webpack://docx/./src/common/relationship.ts","webpack://docx/./src/document-parser.ts","webpack://docx/./src/document-props/core-props-part.ts","webpack://docx/./src/document-props/core-props.ts","webpack://docx/./src/document-props/custom-props-part.ts","webpack://docx/./src/document-props/custom-props.ts","webpack://docx/./src/document-props/extended-props-part.ts","webpack://docx/./src/document-props/extended-props.ts","webpack://docx/./src/document/bookmarks.ts","webpack://docx/./src/document/border.ts","webpack://docx/./src/document/common.ts","webpack://docx/./src/document/document-part.ts","webpack://docx/./src/document/dom.ts","webpack://docx/./src/document/line-spacing.ts","webpack://docx/./src/document/paragraph.ts","webpack://docx/./src/document/run.ts","webpack://docx/./src/document/section.ts","webpack://docx/./src/docx-preview.ts","webpack://docx/./src/font-table/font-table.ts","webpack://docx/./src/font-table/fonts.ts","webpack://docx/./src/header-footer/elements.ts","webpack://docx/./src/header-footer/parts.ts","webpack://docx/./src/html-renderer.ts","webpack://docx/./src/javascript.ts","webpack://docx/./src/notes/elements.ts","webpack://docx/./src/notes/parts.ts","webpack://docx/./src/numbering/numbering-part.ts","webpack://docx/./src/numbering/numbering.ts","webpack://docx/./src/parser/xml-parser.ts","webpack://docx/./src/settings/settings-part.ts","webpack://docx/./src/settings/settings.ts","webpack://docx/./src/styles/styles-part.ts","webpack://docx/./src/theme/theme-part.ts","webpack://docx/./src/theme/theme.ts","webpack://docx/./src/utils.ts","webpack://docx/./src/vml/vml.ts","webpack://docx/./src/word-document.ts","webpack://docx/external umd {\"root\":\"JSZip\",\"commonjs\":\"jszip\",\"commonjs2\":\"jszip\",\"amd\":\"jszip\"}","webpack://docx/webpack/bootstrap","webpack://docx/webpack/runtime/compat get default export","webpack://docx/webpack/runtime/define property getters","webpack://docx/webpack/runtime/hasOwnProperty shorthand","webpack://docx/webpack/runtime/make namespace object","webpack://docx/webpack/runtime/jsonp chunk loading","webpack://docx/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jszip\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jszip\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"docx\"] = factory(require(\"jszip\"));\n\telse\n\t\troot[\"docx\"] = factory(root[\"JSZip\"]);\n})(globalThis, (__WEBPACK_EXTERNAL_MODULE__626__) => {\nreturn ","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 100%27 preserveAspectRatio=%27none%27%3E%3Cpath d=%27m0,75 l5,0 l5,25 l10,-100%27 stroke=%27black%27 fill=%27none%27 vector-effect=%27non-scaling-stroke%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `@namespace \"http://www.w3.org/1998/Math/MathML\";math{display:inline-block;line-height:initial}mfrac{display:inline-block;vertical-align:-50%;text-align:center}mfrac>:first-child{border-bottom:solid thin currentColor}mfrac>*{display:block}msub>:nth-child(2){font-size:smaller;vertical-align:sub}msup>:nth-child(2){font-size:smaller;vertical-align:super}munder,mover,munderover{display:inline-flex;flex-flow:column nowrap;vertical-align:middle;text-align:center}munder>:not(:first-child),mover>:not(:first-child),munderover>:not(:first-child){font-size:smaller}munderover>:last-child{order:-1}mroot,msqrt{position:relative;display:inline-block;border-top:solid thin currentColor;margin-top:.5px;vertical-align:middle;margin-left:1ch}mroot:before,msqrt:before{content:\"\";display:inline-block;position:absolute;width:1ch;left:-1ch;top:-1px;bottom:0;background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___})}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/mathml.scss\"],\"names\":[],\"mappings\":\"AAAA,+CAAA,CAEA,KACI,oBAAA,CACA,mBAAA,CAGJ,MACI,oBAAA,CACA,mBAAA,CACA,iBAAA,CAEA,mBACI,qCAAA,CAGJ,QACI,aAAA,CAKJ,mBACI,iBAAA,CACA,kBAAA,CAKJ,mBACI,iBAAA,CACA,oBAAA,CAIR,wBACI,mBAAA,CACA,uBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,iFACI,iBAAA,CAKJ,uBAAA,QAAA,CAGJ,YACI,iBAAA,CACA,oBAAA,CACA,kCAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAEA,0BACI,UAAA,CACA,oBAAA,CACA,iBAAA,CACA,SAAA,CACA,SAAA,CACA,QAAA,CACA,QAAA,CACA,wDAAA\",\"sourcesContent\":[\"@namespace \\\"http://www.w3.org/1998/Math/MathML\\\";\\r\\n\\r\\nmath {\\r\\n display: inline-block;\\r\\n line-height: initial;\\r\\n}\\r\\n\\r\\nmfrac {\\r\\n display: inline-block;\\r\\n vertical-align: -50%;\\r\\n text-align: center;\\r\\n\\r\\n &>:first-child {\\r\\n border-bottom: solid thin currentColor;\\r\\n }\\r\\n\\r\\n &>* {\\r\\n display: block;\\r\\n }\\r\\n}\\r\\n\\r\\nmsub {\\r\\n &>:nth-child(2) {\\r\\n font-size: smaller;\\r\\n vertical-align: sub;\\r\\n }\\r\\n}\\r\\n\\r\\nmsup {\\r\\n &>:nth-child(2) {\\r\\n font-size: smaller;\\r\\n vertical-align: super;\\r\\n }\\r\\n}\\r\\n\\r\\nmunder, mover, munderover {\\r\\n display: inline-flex;\\r\\n flex-flow: column nowrap;\\r\\n vertical-align: middle;\\r\\n text-align: center;\\r\\n\\r\\n &>:not(:first-child) {\\r\\n font-size: smaller;\\r\\n }\\r\\n}\\r\\n\\r\\nmunderover {\\r\\n &>:last-child { order: -1; }\\r\\n}\\r\\n\\r\\nmroot, msqrt {\\r\\n position: relative;\\r\\n display: inline-block;\\r\\n border-top: solid thin currentColor; \\r\\n margin-top: 0.5px;\\r\\n vertical-align: middle; \\r\\n margin-left: 1ch; \\r\\n\\r\\n &:before {\\r\\n content: \\\"\\\";\\r\\n display: inline-block;\\r\\n position: absolute;\\r\\n width: 1ch;\\r\\n left: -1ch;\\r\\n top: -1px;\\r\\n bottom: 0;\\r\\n background-image: url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 100' preserveAspectRatio='none'%3E%3Cpath d='m0,75 l5,0 l5,25 l10,-100' stroke='black' fill='none' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E\\\");\\r\\n }\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n options = {};\n }\n if (!url) {\n return url;\n }\n url = String(url.__esModule ? url.default : url);\n\n // If url is already wrapped in quotes, remove them\n if (/^['\"].*['\"]$/.test(url)) {\n url = url.slice(1, -1);\n }\n if (options.hash) {\n url += options.hash;\n }\n\n // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n if (/[\"'() \\t\\n]|(%20)/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n }\n return url;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","import * as JSZip from \"jszip\";\r\nimport { parseXmlString, XmlParser } from \"../parser/xml-parser\";\r\nimport { splitPath } from \"../utils\";\r\nimport { parseRelationships, Relationship } from \"./relationship\";\r\n\r\nexport interface OpenXmlPackageOptions {\r\n trimXmlDeclaration: boolean,\r\n keepOrigin: boolean,\r\n}\r\n\r\nexport class OpenXmlPackage {\r\n xmlParser: XmlParser = new XmlParser();\r\n\r\n constructor(private _zip: JSZip, public options: OpenXmlPackageOptions) {\r\n }\r\n\r\n get(path: string): any {\r\n return this._zip.files[normalizePath(path)];\r\n }\r\n\r\n update(path: string, content: any) {\r\n this._zip.file(path, content);\r\n }\r\n\r\n static async load(input: Blob | any, options: OpenXmlPackageOptions): Promise {\r\n const zip = await JSZip.loadAsync(input);\r\n\t\treturn new OpenXmlPackage(zip, options);\r\n }\r\n\r\n save(type: any = \"blob\"): Promise {\r\n return this._zip.generateAsync({ type });\r\n }\r\n\r\n load(path: string, type: JSZip.OutputType = \"string\"): Promise {\r\n return this.get(path)?.async(type) ?? Promise.resolve(null);\r\n }\r\n\r\n async loadRelationships(path: string = null): Promise {\r\n let relsPath = `_rels/.rels`;\r\n\r\n if (path != null) {\r\n const [f, fn] = splitPath(path);\r\n relsPath = `${f}_rels/${fn}.rels`;\r\n }\r\n\r\n const txt = await this.load(relsPath);\r\n\t\treturn txt ? parseRelationships(this.parseXmlDocument(txt).firstElementChild, this.xmlParser) : null;\r\n }\r\n\r\n /** @internal */\r\n parseXmlDocument(txt: string): Document {\r\n return parseXmlString(txt, this.options.trimXmlDeclaration);\r\n }\r\n}\r\n\r\nfunction normalizePath(path: string) {\r\n return path.startsWith('/') ? path.substr(1) : path;\r\n}","import { serializeXmlString } from \"../parser/xml-parser\";\r\nimport { OpenXmlPackage } from \"./open-xml-package\";\r\nimport { Relationship } from \"./relationship\";\r\n\r\nexport class Part {\r\n protected _xmlDocument: Document;\r\n\r\n rels: Relationship[];\r\n\r\n constructor(protected _package: OpenXmlPackage, public path: string) {\r\n }\r\n\r\n async load(): Promise {\r\n\t\tthis.rels = await this._package.loadRelationships(this.path);\r\n\r\n\t\tconst xmlText = await this._package.load(this.path);\r\n\t\tconst xmlDoc = this._package.parseXmlDocument(xmlText);\r\n\r\n\t\tif (this._package.options.keepOrigin) {\r\n\t\t\tthis._xmlDocument = xmlDoc;\r\n\t\t}\r\n\r\n\t\tthis.parseXml(xmlDoc.firstElementChild);\r\n }\r\n\r\n save() {\r\n this._package.update(this.path, serializeXmlString(this._xmlDocument));\r\n }\r\n\r\n protected parseXml(root: Element) {\r\n }\r\n}","import { XmlParser } from \"../parser/xml-parser\";\r\n\r\nexport interface Relationship {\r\n id: string,\r\n type: RelationshipTypes | string,\r\n target: string\r\n targetMode: \"\" | \"External\" | string \r\n}\r\n\r\nexport enum RelationshipTypes {\r\n OfficeDocument = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\r\n FontTable = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable\",\r\n Image = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\r\n Numbering = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering\",\r\n Styles = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\r\n StylesWithEffects = \"http://schemas.microsoft.com/office/2007/relationships/stylesWithEffects\",\r\n Theme = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\r\n Settings = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings\",\r\n WebSettings = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings\",\r\n Hyperlink = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\r\n Footnotes = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes\",\r\n\tEndnotes = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes\",\r\n Footer = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer\",\r\n Header = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/header\",\r\n ExtendedProperties = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\",\r\n CoreProperties = \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\r\n\tCustomProperties = \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/custom-properties\",\r\n}\r\n\r\nexport function parseRelationships(root: Element, xml: XmlParser): Relationship[] {\r\n return xml.elements(root).map(e => {\r\n id: xml.attr(e, \"Id\"),\r\n type: xml.attr(e, \"Type\"),\r\n target: xml.attr(e, \"Target\"),\r\n targetMode: xml.attr(e, \"TargetMode\")\r\n });\r\n}","import {\r\n\tDomType, WmlTable, IDomNumbering,\r\n\tWmlHyperlink, IDomImage, OpenXmlElement, WmlTableColumn, WmlTableCell,\r\n\tWmlTableRow, NumberingPicBullet, WmlText, WmlSymbol, WmlBreak, WmlNoteReference\r\n} from './document/dom';\r\nimport { DocumentElement } from './document/document';\r\nimport { WmlParagraph, parseParagraphProperties, parseParagraphProperty } from './document/paragraph';\r\nimport { parseSectionProperties, SectionProperties } from './document/section';\r\nimport xml from './parser/xml-parser';\r\nimport { parseRunProperties, WmlRun } from './document/run';\r\nimport { parseBookmarkEnd, parseBookmarkStart } from './document/bookmarks';\r\nimport { IDomStyle, IDomSubStyle } from './document/style';\r\nimport { WmlFieldChar, WmlFieldSimple, WmlInstructionText } from './document/fields';\r\nimport { convertLength, LengthUsage, LengthUsageType } from './document/common';\r\nimport { parseVmlElement } from './vml/vml';\r\n\r\nexport var autos = {\r\n\tshd: \"inherit\",\r\n\tcolor: \"black\",\r\n\tborderColor: \"black\",\r\n\thighlight: \"transparent\"\r\n};\r\n\r\nconst supportedNamespaceURIs = [];\r\n\r\nconst mmlTagMap = {\r\n\t\"oMath\": DomType.MmlMath,\r\n\t\"oMathPara\": DomType.MmlMathParagraph,\r\n\t\"f\": DomType.MmlFraction,\r\n\t\"num\": DomType.MmlNumerator,\r\n\t\"den\": DomType.MmlDenominator,\r\n\t\"rad\": DomType.MmlRadical,\r\n\t\"deg\": DomType.MmlDegree,\r\n\t\"e\": DomType.MmlBase,\r\n\t\"sSup\": DomType.MmlSuperscript,\r\n\t\"sSub\": DomType.MmlSubscript,\r\n\t\"sup\": DomType.MmlSuperArgument,\r\n\t\"sub\": DomType.MmlSubArgument,\r\n\t\"d\": DomType.MmlDelimiter,\r\n\t\"nary\": DomType.MmlNary,\r\n}\r\n\r\nexport interface DocumentParserOptions {\r\n\tignoreWidth: boolean;\r\n\tdebug: boolean;\r\n}\r\n\r\nexport class DocumentParser {\r\n\toptions: DocumentParserOptions;\r\n\r\n\tconstructor(options?: Partial) {\r\n\t\tthis.options = {\r\n\t\t\tignoreWidth: false,\r\n\t\t\tdebug: false,\r\n\t\t\t...options\r\n\t\t};\r\n\t}\r\n\r\n\tparseNotes(xmlDoc: Element, elemName: string, elemClass: any): any[] {\r\n\t\tvar result = [];\r\n\r\n\t\tfor (let el of xml.elements(xmlDoc, elemName)) {\r\n\t\t\tconst node = new elemClass();\r\n\t\t\tnode.id = xml.attr(el, \"id\");\r\n\t\t\tnode.noteType = xml.attr(el, \"type\");\r\n\t\t\tnode.children = this.parseBodyElements(el);\r\n\t\t\tresult.push(node);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseDocumentFile(xmlDoc: Element): DocumentElement {\r\n\t\tvar xbody = xml.element(xmlDoc, \"body\");\r\n\t\tvar background = xml.element(xmlDoc, \"background\");\r\n\t\tvar sectPr = xml.element(xbody, \"sectPr\");\r\n\r\n\t\treturn {\r\n\t\t\ttype: DomType.Document,\r\n\t\t\tchildren: this.parseBodyElements(xbody),\r\n\t\t\tprops: sectPr ? parseSectionProperties(sectPr, xml) : {} as SectionProperties,\r\n\t\t\tcssStyle: background ? this.parseBackground(background) : {},\r\n\t\t};\r\n\t}\r\n\r\n\tparseBackground(elem: Element): any {\r\n\t\tvar result = {};\r\n\t\tvar color = xmlUtil.colorAttr(elem, \"color\");\r\n\r\n\t\tif (color) {\r\n\t\t\tresult[\"background-color\"] = color;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseBodyElements(element: Element): OpenXmlElement[] {\r\n\t\tvar children = [];\r\n\r\n\t\tfor (let elem of xml.elements(element)) {\r\n\t\t\tswitch (elem.localName) {\r\n\t\t\t\tcase \"p\":\r\n\t\t\t\t\tchildren.push(this.parseParagraph(elem));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tbl\":\r\n\t\t\t\t\tchildren.push(this.parseTable(elem));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"sdt\":\r\n\t\t\t\t\tchildren.push(...this.parseSdt(elem, e => this.parseBodyElements(e)));\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn children;\r\n\t}\r\n\r\n\tparseStylesFile(xstyles: Element): IDomStyle[] {\r\n\t\tvar result = [];\r\n\r\n\t\txmlUtil.foreach(xstyles, n => {\r\n\t\t\tswitch (n.localName) {\r\n\t\t\t\tcase \"style\":\r\n\t\t\t\t\tresult.push(this.parseStyle(n));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"docDefaults\":\r\n\t\t\t\t\tresult.push(this.parseDefaultStyles(n));\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseDefaultStyles(node: Element): IDomStyle {\r\n\t\tvar result = {\r\n\t\t\tid: null,\r\n\t\t\tname: null,\r\n\t\t\ttarget: null,\r\n\t\t\tbasedOn: null,\r\n\t\t\tstyles: []\r\n\t\t};\r\n\r\n\t\txmlUtil.foreach(node, c => {\r\n\t\t\tswitch (c.localName) {\r\n\t\t\t\tcase \"rPrDefault\":\r\n\t\t\t\t\tvar rPr = xml.element(c, \"rPr\");\r\n\r\n\t\t\t\t\tif (rPr)\r\n\t\t\t\t\t\tresult.styles.push({\r\n\t\t\t\t\t\t\ttarget: \"span\",\r\n\t\t\t\t\t\t\tvalues: this.parseDefaultProperties(rPr, {})\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"pPrDefault\":\r\n\t\t\t\t\tvar pPr = xml.element(c, \"pPr\");\r\n\r\n\t\t\t\t\tif (pPr)\r\n\t\t\t\t\t\tresult.styles.push({\r\n\t\t\t\t\t\t\ttarget: \"p\",\r\n\t\t\t\t\t\t\tvalues: this.parseDefaultProperties(pPr, {})\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseStyle(node: Element): IDomStyle {\r\n\t\tvar result = {\r\n\t\t\tid: xml.attr(node, \"styleId\"),\r\n\t\t\tisDefault: xml.boolAttr(node, \"default\"),\r\n\t\t\tname: null,\r\n\t\t\ttarget: null,\r\n\t\t\tbasedOn: null,\r\n\t\t\tstyles: [],\r\n\t\t\tlinked: null\r\n\t\t};\r\n\r\n\t\tswitch (xml.attr(node, \"type\")) {\r\n\t\t\tcase \"paragraph\": result.target = \"p\"; break;\r\n\t\t\tcase \"table\": result.target = \"table\"; break;\r\n\t\t\tcase \"character\": result.target = \"span\"; break;\r\n\t\t\t//case \"numbering\": result.target = \"p\"; break;\r\n\t\t}\r\n\r\n\t\txmlUtil.foreach(node, n => {\r\n\t\t\tswitch (n.localName) {\r\n\t\t\t\tcase \"basedOn\":\r\n\t\t\t\t\tresult.basedOn = xml.attr(n, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"name\":\r\n\t\t\t\t\tresult.name = xml.attr(n, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"link\":\r\n\t\t\t\t\tresult.linked = xml.attr(n, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"next\":\r\n\t\t\t\t\tresult.next = xml.attr(n, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"aliases\":\r\n\t\t\t\t\tresult.aliases = xml.attr(n, \"val\").split(\",\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"pPr\":\r\n\t\t\t\t\tresult.styles.push({\r\n\t\t\t\t\t\ttarget: \"p\",\r\n\t\t\t\t\t\tvalues: this.parseDefaultProperties(n, {})\r\n\t\t\t\t\t});\r\n\t\t\t\t\tresult.paragraphProps = parseParagraphProperties(n, xml);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"rPr\":\r\n\t\t\t\t\tresult.styles.push({\r\n\t\t\t\t\t\ttarget: \"span\",\r\n\t\t\t\t\t\tvalues: this.parseDefaultProperties(n, {})\r\n\t\t\t\t\t});\r\n\t\t\t\t\tresult.runProps = parseRunProperties(n, xml);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblPr\":\r\n\t\t\t\tcase \"tcPr\":\r\n\t\t\t\t\tresult.styles.push({\r\n\t\t\t\t\t\ttarget: \"td\", //TODO: maybe move to processor\r\n\t\t\t\t\t\tvalues: this.parseDefaultProperties(n, {})\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblStylePr\":\r\n\t\t\t\t\tfor (let s of this.parseTableStyle(n))\r\n\t\t\t\t\t\tresult.styles.push(s);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"rsid\":\r\n\t\t\t\tcase \"qFormat\":\r\n\t\t\t\tcase \"hidden\":\r\n\t\t\t\tcase \"semiHidden\":\r\n\t\t\t\tcase \"unhideWhenUsed\":\r\n\t\t\t\tcase \"autoRedefine\":\r\n\t\t\t\tcase \"uiPriority\":\r\n\t\t\t\t\t//TODO: ignore\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthis.options.debug && console.warn(`DOCX: Unknown style element: ${n.localName}`);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseTableStyle(node: Element): IDomSubStyle[] {\r\n\t\tvar result = [];\r\n\r\n\t\tvar type = xml.attr(node, \"type\");\r\n\t\tvar selector = \"\";\r\n\t\tvar modificator = \"\";\r\n\r\n\t\tswitch (type) {\r\n\t\t\tcase \"firstRow\":\r\n\t\t\t\tmodificator = \".first-row\";\r\n\t\t\t\tselector = \"tr.first-row td\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"lastRow\":\r\n\t\t\t\tmodificator = \".last-row\";\r\n\t\t\t\tselector = \"tr.last-row td\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"firstCol\":\r\n\t\t\t\tmodificator = \".first-col\";\r\n\t\t\t\tselector = \"td.first-col\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"lastCol\":\r\n\t\t\t\tmodificator = \".last-col\";\r\n\t\t\t\tselector = \"td.last-col\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"band1Vert\":\r\n\t\t\t\tmodificator = \":not(.no-vband)\";\r\n\t\t\t\tselector = \"td.odd-col\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"band2Vert\":\r\n\t\t\t\tmodificator = \":not(.no-vband)\";\r\n\t\t\t\tselector = \"td.even-col\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"band1Horz\":\r\n\t\t\t\tmodificator = \":not(.no-hband)\";\r\n\t\t\t\tselector = \"tr.odd-row\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"band2Horz\":\r\n\t\t\t\tmodificator = \":not(.no-hband)\";\r\n\t\t\t\tselector = \"tr.even-row\";\r\n\t\t\t\tbreak;\r\n\t\t\tdefault: return [];\r\n\t\t}\r\n\r\n\t\txmlUtil.foreach(node, n => {\r\n\t\t\tswitch (n.localName) {\r\n\t\t\t\tcase \"pPr\":\r\n\t\t\t\t\tresult.push({\r\n\t\t\t\t\t\ttarget: `${selector} p`,\r\n\t\t\t\t\t\tmod: modificator,\r\n\t\t\t\t\t\tvalues: this.parseDefaultProperties(n, {})\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"rPr\":\r\n\t\t\t\t\tresult.push({\r\n\t\t\t\t\t\ttarget: `${selector} span`,\r\n\t\t\t\t\t\tmod: modificator,\r\n\t\t\t\t\t\tvalues: this.parseDefaultProperties(n, {})\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblPr\":\r\n\t\t\t\tcase \"tcPr\":\r\n\t\t\t\t\tresult.push({\r\n\t\t\t\t\t\ttarget: selector, //TODO: maybe move to processor\r\n\t\t\t\t\t\tmod: modificator,\r\n\t\t\t\t\t\tvalues: this.parseDefaultProperties(n, {})\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseNumberingFile(xnums: Element): IDomNumbering[] {\r\n\t\tvar result = [];\r\n\t\tvar mapping = {};\r\n\t\tvar bullets = [];\r\n\r\n\t\txmlUtil.foreach(xnums, n => {\r\n\t\t\tswitch (n.localName) {\r\n\t\t\t\tcase \"abstractNum\":\r\n\t\t\t\t\tthis.parseAbstractNumbering(n, bullets)\r\n\t\t\t\t\t\t.forEach(x => result.push(x));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"numPicBullet\":\r\n\t\t\t\t\tbullets.push(this.parseNumberingPicBullet(n));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"num\":\r\n\t\t\t\t\tvar numId = xml.attr(n, \"numId\");\r\n\t\t\t\t\tvar abstractNumId = xml.elementAttr(n, \"abstractNumId\", \"val\");\r\n\t\t\t\t\tmapping[abstractNumId] = numId;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tresult.forEach(x => x.id = mapping[x.id]);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseNumberingPicBullet(elem: Element): NumberingPicBullet {\r\n\t\tvar pict = xml.element(elem, \"pict\");\r\n\t\tvar shape = pict && xml.element(pict, \"shape\");\r\n\t\tvar imagedata = shape && xml.element(shape, \"imagedata\");\r\n\r\n\t\treturn imagedata ? {\r\n\t\t\tid: xml.intAttr(elem, \"numPicBulletId\"),\r\n\t\t\tsrc: xml.attr(imagedata, \"id\"),\r\n\t\t\tstyle: xml.attr(shape, \"style\")\r\n\t\t} : null;\r\n\t}\r\n\r\n\tparseAbstractNumbering(node: Element, bullets: any[]): IDomNumbering[] {\r\n\t\tvar result = [];\r\n\t\tvar id = xml.attr(node, \"abstractNumId\");\r\n\r\n\t\txmlUtil.foreach(node, n => {\r\n\t\t\tswitch (n.localName) {\r\n\t\t\t\tcase \"lvl\":\r\n\t\t\t\t\tresult.push(this.parseNumberingLevel(id, n, bullets));\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseNumberingLevel(id: string, node: Element, bullets: any[]): IDomNumbering {\r\n\t\tvar result: IDomNumbering = {\r\n\t\t\tid: id,\r\n\t\t\tlevel: xml.intAttr(node, \"ilvl\"),\r\n\t\t\tpStyleName: undefined,\r\n\t\t\tpStyle: {},\r\n\t\t\trStyle: {},\r\n\t\t\tsuff: \"tab\"\r\n\t\t};\r\n\r\n\t\txmlUtil.foreach(node, n => {\r\n\t\t\tswitch (n.localName) {\r\n\t\t\t\tcase \"pPr\":\r\n\t\t\t\t\tthis.parseDefaultProperties(n, result.pStyle);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"rPr\":\r\n\t\t\t\t\tthis.parseDefaultProperties(n, result.rStyle);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"lvlPicBulletId\":\r\n\t\t\t\t\tvar id = xml.intAttr(n, \"val\");\r\n\t\t\t\t\tresult.bullet = bullets.find(x => x.id == id);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"lvlText\":\r\n\t\t\t\t\tresult.levelText = xml.attr(n, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"pStyle\":\r\n\t\t\t\t\tresult.pStyleName = xml.attr(n, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"numFmt\":\r\n\t\t\t\t\tresult.format = xml.attr(n, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"suff\":\r\n\t\t\t\t\tresult.suff = xml.attr(n, \"val\");\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseSdt(node: Element, parser: Function): OpenXmlElement[] {\r\n\t\tconst sdtContent = xml.element(node, \"sdtContent\");\r\n\t\treturn sdtContent ? parser(sdtContent) : [];\r\n\t}\r\n\r\n\tparseInserted(node: Element, parentParser: Function): OpenXmlElement {\r\n\t\treturn { \r\n\t\t\ttype: DomType.Inserted, \r\n\t\t\tchildren: parentParser(node)?.children ?? []\r\n\t\t};\r\n\t}\r\n\r\n\tparseDeleted(node: Element, parentParser: Function): OpenXmlElement {\r\n\t\treturn { \r\n\t\t\ttype: DomType.Deleted, \r\n\t\t\tchildren: parentParser(node)?.children ?? []\r\n\t\t};\r\n\t}\r\n\r\n\tparseParagraph(node: Element): OpenXmlElement {\r\n\t\tvar result = { type: DomType.Paragraph, children: [] };\r\n\r\n\t\tfor (let el of xml.elements(node)) {\r\n\t\t\tswitch (el.localName) {\r\n\t\t\t\tcase \"pPr\":\r\n\t\t\t\t\tthis.parseParagraphProperties(el, result);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"r\":\r\n\t\t\t\t\tresult.children.push(this.parseRun(el, result));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"hyperlink\":\r\n\t\t\t\t\tresult.children.push(this.parseHyperlink(el, result));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"bookmarkStart\":\r\n\t\t\t\t\tresult.children.push(parseBookmarkStart(el, xml));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"bookmarkEnd\":\r\n\t\t\t\t\tresult.children.push(parseBookmarkEnd(el, xml));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"oMath\":\r\n\t\t\t\tcase \"oMathPara\":\r\n\t\t\t\t\tresult.children.push(this.parseMathElement(el));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"sdt\":\r\n\t\t\t\t\tresult.children.push(...this.parseSdt(el, e => this.parseParagraph(e).children));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"ins\":\r\n\t\t\t\t\tresult.children.push(this.parseInserted(el, e => this.parseParagraph(e)));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"del\":\r\n\t\t\t\t\tresult.children.push(this.parseDeleted(el, e => this.parseParagraph(e)));\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseParagraphProperties(elem: Element, paragraph: WmlParagraph) {\r\n\t\tthis.parseDefaultProperties(elem, paragraph.cssStyle = {}, null, c => {\r\n\t\t\tif (parseParagraphProperty(c, paragraph, xml))\r\n\t\t\t\treturn true;\r\n\r\n\t\t\tswitch (c.localName) {\r\n\t\t\t\tcase \"pStyle\":\r\n\t\t\t\t\tparagraph.styleName = xml.attr(c, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"cnfStyle\":\r\n\t\t\t\t\tparagraph.className = values.classNameOfCnfStyle(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"framePr\":\r\n\t\t\t\t\tthis.parseFrame(c, paragraph);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"rPr\":\r\n\t\t\t\t\t//TODO ignore\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\t}\r\n\r\n\tparseFrame(node: Element, paragraph: WmlParagraph) {\r\n\t\tvar dropCap = xml.attr(node, \"dropCap\");\r\n\r\n\t\tif (dropCap == \"drop\")\r\n\t\t\tparagraph.cssStyle[\"float\"] = \"left\";\r\n\t}\r\n\r\n\tparseHyperlink(node: Element, parent?: OpenXmlElement): WmlHyperlink {\r\n\t\tvar result: WmlHyperlink = { type: DomType.Hyperlink, parent: parent, children: [] };\r\n\t\tvar anchor = xml.attr(node, \"anchor\");\r\n\t\tvar relId = xml.attr(node, \"id\");\r\n\r\n\t\tif (anchor)\r\n\t\t\tresult.href = \"#\" + anchor;\r\n\r\n\t\tif (relId)\r\n\t\t\tresult.id = relId;\r\n\r\n\t\txmlUtil.foreach(node, c => {\r\n\t\t\tswitch (c.localName) {\r\n\t\t\t\tcase \"r\":\r\n\t\t\t\t\tresult.children.push(this.parseRun(c, result));\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseRun(node: Element, parent?: OpenXmlElement): WmlRun {\r\n\t\tvar result: WmlRun = { type: DomType.Run, parent: parent, children: [] };\r\n\r\n\t\txmlUtil.foreach(node, c => {\r\n\t\t\tc = this.checkAlternateContent(c);\r\n\r\n\t\t\tswitch (c.localName) {\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\t\tresult.children.push({\r\n\t\t\t\t\t\ttype: DomType.Text,\r\n\t\t\t\t\t\ttext: c.textContent\r\n\t\t\t\t\t});//.replace(\" \", \"\\u00A0\"); // TODO\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"delText\":\r\n\t\t\t\t\tresult.children.push({\r\n\t\t\t\t\t\ttype: DomType.DeletedText,\r\n\t\t\t\t\t\ttext: c.textContent\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"fldSimple\":\r\n\t\t\t\t\tresult.children.push({\r\n\t\t\t\t\t\ttype: DomType.SimpleField,\r\n\t\t\t\t\t\tinstruction: xml.attr(c, \"instr\"),\r\n\t\t\t\t\t\tlock: xml.boolAttr(c, \"lock\", false),\r\n\t\t\t\t\t\tdirty: xml.boolAttr(c, \"dirty\", false)\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"instrText\":\r\n\t\t\t\t\tresult.fieldRun = true;\r\n\t\t\t\t\tresult.children.push({\r\n\t\t\t\t\t\ttype: DomType.Instruction,\r\n\t\t\t\t\t\ttext: c.textContent\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"fldChar\":\r\n\t\t\t\t\tresult.fieldRun = true;\r\n\t\t\t\t\tresult.children.push({\r\n\t\t\t\t\t\ttype: DomType.ComplexField,\r\n\t\t\t\t\t\tcharType: xml.attr(c, \"fldCharType\"),\r\n\t\t\t\t\t\tlock: xml.boolAttr(c, \"lock\", false),\r\n\t\t\t\t\t\tdirty: xml.boolAttr(c, \"dirty\", false)\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"noBreakHyphen\":\r\n\t\t\t\t\tresult.children.push({ type: DomType.NoBreakHyphen });\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"br\":\r\n\t\t\t\t\tresult.children.push({\r\n\t\t\t\t\t\ttype: DomType.Break,\r\n\t\t\t\t\t\tbreak: xml.attr(c, \"type\") || \"textWrapping\"\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"lastRenderedPageBreak\":\r\n\t\t\t\t\tresult.children.push({\r\n\t\t\t\t\t\ttype: DomType.Break,\r\n\t\t\t\t\t\tbreak: \"lastRenderedPageBreak\"\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"sym\":\r\n\t\t\t\t\tresult.children.push({\r\n\t\t\t\t\t\ttype: DomType.Symbol,\r\n\t\t\t\t\t\tfont: xml.attr(c, \"font\"),\r\n\t\t\t\t\t\tchar: xml.attr(c, \"char\")\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tab\":\r\n\t\t\t\t\tresult.children.push({ type: DomType.Tab });\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"footnoteReference\":\r\n\t\t\t\t\tresult.children.push({\r\n\t\t\t\t\t\ttype: DomType.FootnoteReference,\r\n\t\t\t\t\t\tid: xml.attr(c, \"id\")\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"endnoteReference\":\r\n\t\t\t\t\tresult.children.push({\r\n\t\t\t\t\t\ttype: DomType.EndnoteReference,\r\n\t\t\t\t\t\tid: xml.attr(c, \"id\")\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"drawing\":\r\n\t\t\t\t\tlet d = this.parseDrawing(c);\r\n\r\n\t\t\t\t\tif (d)\r\n\t\t\t\t\t\tresult.children = [d];\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"pict\":\r\n\t\t\t\t\tresult.children.push(this.parseVmlPicture(c));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"rPr\":\r\n\t\t\t\t\tthis.parseRunProperties(c, result);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseMathElement(elem: Element): OpenXmlElement {\r\n\t\tconst propsTag = `${elem.localName}Pr`;\r\n\t\tconst result = { type: mmlTagMap[elem.localName], children: [] } as OpenXmlElement;\r\n\r\n\t\tfor (const el of xml.elements(elem)) {\r\n\t\t\tconst childType = mmlTagMap[el.localName];\r\n\r\n\t\t\tif (childType) {\r\n\t\t\t\tresult.children.push(this.parseMathElement(el));\r\n\t\t\t} else if (el.localName == \"r\") {\r\n\t\t\t\tvar run = this.parseRun(el);\r\n\t\t\t\trun.type = DomType.MmlRun;\r\n\t\t\t\tresult.children.push(run);\r\n\t\t\t} else if (el.localName == propsTag) {\r\n\t\t\t\tresult.props = this.parseMathProperies(el);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseMathProperies(elem: Element): Record {\r\n\t\tconst result: Record = {};\r\n\r\n\t\tfor (const el of xml.elements(elem)) {\r\n\t\t\tswitch (el.localName) {\r\n\t\t\t\tcase \"chr\": result.char = xml.attr(el, \"val\"); break;\r\n\t\t\t\tcase \"degHide\": result.hideDegree = xml.boolAttr(el, \"val\"); break;\r\n\t\t\t\tcase \"begChr\": result.beginChar = xml.attr(el, \"val\"); break;\r\n\t\t\t\tcase \"endChr\": result.endChar = xml.attr(el, \"val\"); break;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseRunProperties(elem: Element, run: WmlRun) {\r\n\t\tthis.parseDefaultProperties(elem, run.cssStyle = {}, null, c => {\r\n\t\t\tswitch (c.localName) {\r\n\t\t\t\tcase \"rStyle\":\r\n\t\t\t\t\trun.styleName = xml.attr(c, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"vertAlign\":\r\n\t\t\t\t\trun.verticalAlign = values.valueOfVertAlign(c, true);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\t}\r\n\r\n\tparseVmlPicture(elem: Element): OpenXmlElement {\r\n\t\tconst result = { type: DomType.VmlPicture, children: [] };\r\n\r\n\t\tfor (const el of xml.elements(elem)) {\r\n\t\t\tconst child = parseVmlElement(el);\r\n\t\t\tchild && result.children.push(child);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tcheckAlternateContent(elem: Element): Element {\r\n\t\tif (elem.localName != 'AlternateContent')\r\n\t\t\treturn elem;\r\n\r\n\t\tvar choice = xml.element(elem, \"Choice\");\r\n\r\n\t\tif (choice) {\r\n\t\t\tvar requires = xml.attr(choice, \"Requires\");\r\n\t\t\tvar namespaceURI = elem.lookupNamespaceURI(requires);\r\n\r\n\t\t\tif (supportedNamespaceURIs.includes(namespaceURI))\r\n\t\t\t\treturn choice.firstElementChild;\r\n\t\t}\r\n\r\n\t\treturn xml.element(elem, \"Fallback\")?.firstElementChild;\r\n\t}\r\n\r\n\tparseDrawing(node: Element): OpenXmlElement {\r\n\t\tfor (var n of xml.elements(node)) {\r\n\t\t\tswitch (n.localName) {\r\n\t\t\t\tcase \"inline\":\r\n\t\t\t\tcase \"anchor\":\r\n\t\t\t\t\treturn this.parseDrawingWrapper(n);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tparseDrawingWrapper(node: Element): OpenXmlElement {\r\n\t\tvar result = { type: DomType.Drawing, children: [], cssStyle: {} };\r\n\t\tvar isAnchor = node.localName == \"anchor\";\r\n\r\n\t\t//TODO\r\n\t\t// result.style[\"margin-left\"] = xml.sizeAttr(node, \"distL\", SizeType.Emu);\r\n\t\t// result.style[\"margin-top\"] = xml.sizeAttr(node, \"distT\", SizeType.Emu);\r\n\t\t// result.style[\"margin-right\"] = xml.sizeAttr(node, \"distR\", SizeType.Emu);\r\n\t\t// result.style[\"margin-bottom\"] = xml.sizeAttr(node, \"distB\", SizeType.Emu);\r\n\r\n\t\tlet wrapType: \"wrapTopAndBottom\" | \"wrapNone\" | null = null;\r\n\t\tlet simplePos = xml.boolAttr(node, \"simplePos\");\r\n\r\n\t\tlet posX = { relative: \"page\", align: \"left\", offset: \"0\" };\r\n\t\tlet posY = { relative: \"page\", align: \"top\", offset: \"0\" };\r\n\r\n\t\tfor (var n of xml.elements(node)) {\r\n\t\t\tswitch (n.localName) {\r\n\t\t\t\tcase \"simplePos\":\r\n\t\t\t\t\tif (simplePos) {\r\n\t\t\t\t\t\tposX.offset = xml.lengthAttr(n, \"x\", LengthUsage.Emu);\r\n\t\t\t\t\t\tposY.offset = xml.lengthAttr(n, \"y\", LengthUsage.Emu);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"extent\":\r\n\t\t\t\t\tresult.cssStyle[\"width\"] = xml.lengthAttr(n, \"cx\", LengthUsage.Emu);\r\n\t\t\t\t\tresult.cssStyle[\"height\"] = xml.lengthAttr(n, \"cy\", LengthUsage.Emu);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"positionH\":\r\n\t\t\t\tcase \"positionV\":\r\n\t\t\t\t\tif (!simplePos) {\r\n\t\t\t\t\t\tlet pos = n.localName == \"positionH\" ? posX : posY;\r\n\t\t\t\t\t\tvar alignNode = xml.element(n, \"align\");\r\n\t\t\t\t\t\tvar offsetNode = xml.element(n, \"posOffset\");\r\n\r\n\t\t\t\t\t\tpos.relative = xml.attr(n, \"relativeFrom\") ?? pos.relative;\r\n\r\n\t\t\t\t\t\tif (alignNode)\r\n\t\t\t\t\t\t\tpos.align = alignNode.textContent;\r\n\r\n\t\t\t\t\t\tif (offsetNode)\r\n\t\t\t\t\t\t\tpos.offset = xmlUtil.sizeValue(offsetNode, LengthUsage.Emu);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"wrapTopAndBottom\":\r\n\t\t\t\t\twrapType = \"wrapTopAndBottom\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"wrapNone\":\r\n\t\t\t\t\twrapType = \"wrapNone\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"graphic\":\r\n\t\t\t\t\tvar g = this.parseGraphic(n);\r\n\r\n\t\t\t\t\tif (g)\r\n\t\t\t\t\t\tresult.children.push(g);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (wrapType == \"wrapTopAndBottom\") {\r\n\t\t\tresult.cssStyle['display'] = 'block';\r\n\r\n\t\t\tif (posX.align) {\r\n\t\t\t\tresult.cssStyle['text-align'] = posX.align;\r\n\t\t\t\tresult.cssStyle['width'] = \"100%\";\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (wrapType == \"wrapNone\") {\r\n\t\t\tresult.cssStyle['display'] = 'block';\r\n\t\t\tresult.cssStyle['position'] = 'relative';\r\n\t\t\tresult.cssStyle[\"width\"] = \"0px\";\r\n\t\t\tresult.cssStyle[\"height\"] = \"0px\";\r\n\r\n\t\t\tif (posX.offset)\r\n\t\t\t\tresult.cssStyle[\"left\"] = posX.offset;\r\n\t\t\tif (posY.offset)\r\n\t\t\t\tresult.cssStyle[\"top\"] = posY.offset;\r\n\t\t}\r\n\t\telse if (isAnchor && (posX.align == 'left' || posX.align == 'right')) {\r\n\t\t\tresult.cssStyle[\"float\"] = posX.align;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseGraphic(elem: Element): OpenXmlElement {\r\n\t\tvar graphicData = xml.element(elem, \"graphicData\");\r\n\r\n\t\tfor (let n of xml.elements(graphicData)) {\r\n\t\t\tswitch (n.localName) {\r\n\t\t\t\tcase \"pic\":\r\n\t\t\t\t\treturn this.parsePicture(n);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tparsePicture(elem: Element): IDomImage {\r\n\t\tvar result = { type: DomType.Image, src: \"\", cssStyle: {} };\r\n\t\tvar blipFill = xml.element(elem, \"blipFill\");\r\n\t\tvar blip = xml.element(blipFill, \"blip\");\r\n\r\n\t\tresult.src = xml.attr(blip, \"embed\");\r\n\r\n\t\tvar spPr = xml.element(elem, \"spPr\");\r\n\t\tvar xfrm = xml.element(spPr, \"xfrm\");\r\n\r\n\t\tresult.cssStyle[\"position\"] = \"relative\";\r\n\r\n\t\tfor (var n of xml.elements(xfrm)) {\r\n\t\t\tswitch (n.localName) {\r\n\t\t\t\tcase \"ext\":\r\n\t\t\t\t\tresult.cssStyle[\"width\"] = xml.lengthAttr(n, \"cx\", LengthUsage.Emu);\r\n\t\t\t\t\tresult.cssStyle[\"height\"] = xml.lengthAttr(n, \"cy\", LengthUsage.Emu);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"off\":\r\n\t\t\t\t\tresult.cssStyle[\"left\"] = xml.lengthAttr(n, \"x\", LengthUsage.Emu);\r\n\t\t\t\t\tresult.cssStyle[\"top\"] = xml.lengthAttr(n, \"y\", LengthUsage.Emu);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseTable(node: Element): WmlTable {\r\n\t\tvar result: WmlTable = { type: DomType.Table, children: [] };\r\n\r\n\t\txmlUtil.foreach(node, c => {\r\n\t\t\tswitch (c.localName) {\r\n\t\t\t\tcase \"tr\":\r\n\t\t\t\t\tresult.children.push(this.parseTableRow(c));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblGrid\":\r\n\t\t\t\t\tresult.columns = this.parseTableColumns(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblPr\":\r\n\t\t\t\t\tthis.parseTableProperties(c, result);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseTableColumns(node: Element): WmlTableColumn[] {\r\n\t\tvar result = [];\r\n\r\n\t\txmlUtil.foreach(node, n => {\r\n\t\t\tswitch (n.localName) {\r\n\t\t\t\tcase \"gridCol\":\r\n\t\t\t\t\tresult.push({ width: xml.lengthAttr(n, \"w\") });\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseTableProperties(elem: Element, table: WmlTable) {\r\n\t\ttable.cssStyle = {};\r\n\t\ttable.cellStyle = {};\r\n\r\n\t\tthis.parseDefaultProperties(elem, table.cssStyle, table.cellStyle, c => {\r\n\t\t\tswitch (c.localName) {\r\n\t\t\t\tcase \"tblStyle\":\r\n\t\t\t\t\ttable.styleName = xml.attr(c, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblLook\":\r\n\t\t\t\t\ttable.className = values.classNameOftblLook(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblpPr\":\r\n\t\t\t\t\tthis.parseTablePosition(c, table);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblStyleColBandSize\":\r\n\t\t\t\t\ttable.colBandSize = xml.intAttr(c, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblStyleRowBandSize\":\r\n\t\t\t\t\ttable.rowBandSize = xml.intAttr(c, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tswitch (table.cssStyle[\"text-align\"]) {\r\n\t\t\tcase \"center\":\r\n\t\t\t\tdelete table.cssStyle[\"text-align\"];\r\n\t\t\t\ttable.cssStyle[\"margin-left\"] = \"auto\";\r\n\t\t\t\ttable.cssStyle[\"margin-right\"] = \"auto\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"right\":\r\n\t\t\t\tdelete table.cssStyle[\"text-align\"];\r\n\t\t\t\ttable.cssStyle[\"margin-left\"] = \"auto\";\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tparseTablePosition(node: Element, table: WmlTable) {\r\n\t\tvar topFromText = xml.lengthAttr(node, \"topFromText\");\r\n\t\tvar bottomFromText = xml.lengthAttr(node, \"bottomFromText\");\r\n\t\tvar rightFromText = xml.lengthAttr(node, \"rightFromText\");\r\n\t\tvar leftFromText = xml.lengthAttr(node, \"leftFromText\");\r\n\r\n\t\ttable.cssStyle[\"float\"] = 'left';\r\n\t\ttable.cssStyle[\"margin-bottom\"] = values.addSize(table.cssStyle[\"margin-bottom\"], bottomFromText);\r\n\t\ttable.cssStyle[\"margin-left\"] = values.addSize(table.cssStyle[\"margin-left\"], leftFromText);\r\n\t\ttable.cssStyle[\"margin-right\"] = values.addSize(table.cssStyle[\"margin-right\"], rightFromText);\r\n\t\ttable.cssStyle[\"margin-top\"] = values.addSize(table.cssStyle[\"margin-top\"], topFromText);\r\n\t}\r\n\r\n\tparseTableRow(node: Element): WmlTableRow {\r\n\t\tvar result: WmlTableRow = { type: DomType.Row, children: [] };\r\n\r\n\t\txmlUtil.foreach(node, c => {\r\n\t\t\tswitch (c.localName) {\r\n\t\t\t\tcase \"tc\":\r\n\t\t\t\t\tresult.children.push(this.parseTableCell(c));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"trPr\":\r\n\t\t\t\t\tthis.parseTableRowProperties(c, result);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseTableRowProperties(elem: Element, row: WmlTableRow) {\r\n\t\trow.cssStyle = this.parseDefaultProperties(elem, {}, null, c => {\r\n\t\t\tswitch (c.localName) {\r\n\t\t\t\tcase \"cnfStyle\":\r\n\t\t\t\t\trow.className = values.classNameOfCnfStyle(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblHeader\":\r\n\t\t\t\t\trow.isHeader = xml.boolAttr(c, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\t}\r\n\r\n\tparseTableCell(node: Element): OpenXmlElement {\r\n\t\tvar result: WmlTableCell = { type: DomType.Cell, children: [] };\r\n\r\n\t\txmlUtil.foreach(node, c => {\r\n\t\t\tswitch (c.localName) {\r\n\t\t\t\tcase \"tbl\":\r\n\t\t\t\t\tresult.children.push(this.parseTable(c));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"p\":\r\n\t\t\t\t\tresult.children.push(this.parseParagraph(c));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tcPr\":\r\n\t\t\t\t\tthis.parseTableCellProperties(c, result);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tparseTableCellProperties(elem: Element, cell: WmlTableCell) {\r\n\t\tcell.cssStyle = this.parseDefaultProperties(elem, {}, null, c => {\r\n\t\t\tswitch (c.localName) {\r\n\t\t\t\tcase \"gridSpan\":\r\n\t\t\t\t\tcell.span = xml.intAttr(c, \"val\", null);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"vMerge\":\r\n\t\t\t\t\tcell.verticalMerge = xml.attr(c, \"val\") ?? \"continue\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"cnfStyle\":\r\n\t\t\t\t\tcell.className = values.classNameOfCnfStyle(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\t}\r\n\r\n\tparseDefaultProperties(elem: Element, style: Record = null, childStyle: Record = null, handler: (prop: Element) => boolean = null): Record {\r\n\t\tstyle = style || {};\r\n\r\n\t\txmlUtil.foreach(elem, c => {\r\n\t\t\tif (handler?.(c))\r\n\t\t\t\treturn;\r\n\r\n\t\t\tswitch (c.localName) {\r\n\t\t\t\tcase \"jc\":\r\n\t\t\t\t\tstyle[\"text-align\"] = values.valueOfJc(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"textAlignment\":\r\n\t\t\t\t\tstyle[\"vertical-align\"] = values.valueOfTextAlignment(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"color\":\r\n\t\t\t\t\tstyle[\"color\"] = xmlUtil.colorAttr(c, \"val\", null, autos.color);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"sz\":\r\n\t\t\t\t\tstyle[\"font-size\"] = style[\"min-height\"] = xml.lengthAttr(c, \"val\", LengthUsage.FontSize);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"shd\":\r\n\t\t\t\t\tstyle[\"background-color\"] = xmlUtil.colorAttr(c, \"fill\", null, autos.shd);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"highlight\":\r\n\t\t\t\t\tstyle[\"background-color\"] = xmlUtil.colorAttr(c, \"val\", null, autos.highlight);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"vertAlign\":\r\n\t\t\t\t\t//TODO\r\n\t\t\t\t\t// style.verticalAlign = values.valueOfVertAlign(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"position\":\r\n\t\t\t\t\tstyle.verticalAlign = xml.lengthAttr(c, \"val\", LengthUsage.FontSize);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tcW\":\r\n\t\t\t\t\tif (this.options.ignoreWidth)\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblW\":\r\n\t\t\t\t\tstyle[\"width\"] = values.valueOfSize(c, \"w\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"trHeight\":\r\n\t\t\t\t\tthis.parseTrHeight(c, style);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"strike\":\r\n\t\t\t\t\tstyle[\"text-decoration\"] = xml.boolAttr(c, \"val\", true) ? \"line-through\" : \"none\"\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"b\":\r\n\t\t\t\t\tstyle[\"font-weight\"] = xml.boolAttr(c, \"val\", true) ? \"bold\" : \"normal\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"i\":\r\n\t\t\t\t\tstyle[\"font-style\"] = xml.boolAttr(c, \"val\", true) ? \"italic\" : \"normal\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"caps\":\r\n\t\t\t\t\tstyle[\"text-transform\"] = xml.boolAttr(c, \"val\", true) ? \"uppercase\" : \"none\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"smallCaps\":\r\n\t\t\t\t\tstyle[\"text-transform\"] = xml.boolAttr(c, \"val\", true) ? \"lowercase\" : \"none\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\t\tthis.parseUnderline(c, style);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"ind\":\r\n\t\t\t\tcase \"tblInd\":\r\n\t\t\t\t\tthis.parseIndentation(c, style);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"rFonts\":\r\n\t\t\t\t\tthis.parseFont(c, style);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblBorders\":\r\n\t\t\t\t\tthis.parseBorderProperties(c, childStyle || style);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblCellSpacing\":\r\n\t\t\t\t\tstyle[\"border-spacing\"] = values.valueOfMargin(c);\r\n\t\t\t\t\tstyle[\"border-collapse\"] = \"separate\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"pBdr\":\r\n\t\t\t\t\tthis.parseBorderProperties(c, style);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"bdr\":\r\n\t\t\t\t\tstyle[\"border\"] = values.valueOfBorder(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tcBorders\":\r\n\t\t\t\t\tthis.parseBorderProperties(c, style);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"vanish\":\r\n\t\t\t\t\tif (xml.boolAttr(c, \"val\", true))\r\n\t\t\t\t\t\tstyle[\"display\"] = \"none\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"kern\":\r\n\t\t\t\t\t//TODO\r\n\t\t\t\t\t//style['letter-spacing'] = xml.lengthAttr(elem, 'val', LengthUsage.FontSize);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"noWrap\":\r\n\t\t\t\t\t//TODO\r\n\t\t\t\t\t//style[\"white-space\"] = \"nowrap\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblCellMar\":\r\n\t\t\t\tcase \"tcMar\":\r\n\t\t\t\t\tthis.parseMarginProperties(c, childStyle || style);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"tblLayout\":\r\n\t\t\t\t\tstyle[\"table-layout\"] = values.valueOfTblLayout(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"vAlign\":\r\n\t\t\t\t\tstyle[\"vertical-align\"] = values.valueOfTextAlignment(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"spacing\":\r\n\t\t\t\t\tif (elem.localName == \"pPr\")\r\n\t\t\t\t\t\tthis.parseSpacing(c, style);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"wordWrap\":\r\n\t\t\t\t\tif (xml.boolAttr(c, \"val\")) //TODO: test with examples\r\n\t\t\t\t\t\tstyle[\"overflow-wrap\"] = \"break-word\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"suppressAutoHyphens\":\r\n\t\t\t\t\tstyle[\"hyphens\"] = xml.boolAttr(c, \"val\", true) ? \"none\" : \"auto\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"lang\":\r\n\t\t\t\t\tstyle[\"$lang\"] = xml.attr(c, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"bCs\":\r\n\t\t\t\tcase \"iCs\":\r\n\t\t\t\tcase \"szCs\":\r\n\t\t\t\tcase \"tabs\": //ignore - tabs is parsed by other parser\r\n\t\t\t\tcase \"outlineLvl\": //TODO\r\n\t\t\t\tcase \"contextualSpacing\": //TODO\r\n\t\t\t\tcase \"tblStyleColBandSize\": //TODO\r\n\t\t\t\tcase \"tblStyleRowBandSize\": //TODO\r\n\t\t\t\tcase \"webHidden\": //TODO - maybe web-hidden should be implemented\r\n\t\t\t\tcase \"pageBreakBefore\": //TODO - maybe ignore \r\n\t\t\t\tcase \"suppressLineNumbers\": //TODO - maybe ignore\r\n\t\t\t\tcase \"keepLines\": //TODO - maybe ignore\r\n\t\t\t\tcase \"keepNext\": //TODO - maybe ignore\r\n\t\t\t\tcase \"widowControl\": //TODO - maybe ignore \r\n\t\t\t\tcase \"bidi\": //TODO - maybe ignore\r\n\t\t\t\tcase \"rtl\": //TODO - maybe ignore\r\n\t\t\t\tcase \"noProof\": //ignore spellcheck\r\n\t\t\t\t\t//TODO ignore\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif (this.options.debug)\r\n\t\t\t\t\t\tconsole.warn(`DOCX: Unknown document element: ${elem.localName}.${c.localName}`);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn style;\r\n\t}\r\n\r\n\tparseUnderline(node: Element, style: Record) {\r\n\t\tvar val = xml.attr(node, \"val\");\r\n\r\n\t\tif (val == null)\r\n\t\t\treturn;\r\n\r\n\t\tswitch (val) {\r\n\t\t\tcase \"dash\":\r\n\t\t\tcase \"dashDotDotHeavy\":\r\n\t\t\tcase \"dashDotHeavy\":\r\n\t\t\tcase \"dashedHeavy\":\r\n\t\t\tcase \"dashLong\":\r\n\t\t\tcase \"dashLongHeavy\":\r\n\t\t\tcase \"dotDash\":\r\n\t\t\tcase \"dotDotDash\":\r\n\t\t\t\tstyle[\"text-decoration-style\"] = \"dashed\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"dotted\":\r\n\t\t\tcase \"dottedHeavy\":\r\n\t\t\t\tstyle[\"text-decoration-style\"] = \"dotted\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"double\":\r\n\t\t\t\tstyle[\"text-decoration-style\"] = \"double\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"single\":\r\n\t\t\tcase \"thick\":\r\n\t\t\t\tstyle[\"text-decoration\"] = \"underline\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"wave\":\r\n\t\t\tcase \"wavyDouble\":\r\n\t\t\tcase \"wavyHeavy\":\r\n\t\t\t\tstyle[\"text-decoration-style\"] = \"wavy\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"words\":\r\n\t\t\t\tstyle[\"text-decoration\"] = \"underline\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"none\":\r\n\t\t\t\tstyle[\"text-decoration\"] = \"none\";\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tvar col = xmlUtil.colorAttr(node, \"color\");\r\n\r\n\t\tif (col)\r\n\t\t\tstyle[\"text-decoration-color\"] = col;\r\n\t}\r\n\r\n\tparseFont(node: Element, style: Record) {\r\n\t\tvar ascii = xml.attr(node, \"ascii\");\r\n\t\tvar asciiTheme = values.themeValue(node, \"asciiTheme\");\r\n\r\n\t\tvar fonts = [ascii, asciiTheme].filter(x => x).join(', ');\r\n\r\n\t\tif (fonts.length > 0)\r\n\t\t\tstyle[\"font-family\"] = fonts;\r\n\t}\r\n\r\n\tparseIndentation(node: Element, style: Record) {\r\n\t\tvar firstLine = xml.lengthAttr(node, \"firstLine\");\r\n\t\tvar hanging = xml.lengthAttr(node, \"hanging\");\r\n\t\tvar left = xml.lengthAttr(node, \"left\");\r\n\t\tvar start = xml.lengthAttr(node, \"start\");\r\n\t\tvar right = xml.lengthAttr(node, \"right\");\r\n\t\tvar end = xml.lengthAttr(node, \"end\");\r\n\r\n\t\tif (firstLine) style[\"text-indent\"] = firstLine;\r\n\t\tif (hanging) style[\"text-indent\"] = `-${hanging}`;\r\n\t\tif (left || start) style[\"margin-left\"] = left || start;\r\n\t\tif (right || end) style[\"margin-right\"] = right || end;\r\n\t}\r\n\r\n\tparseSpacing(node: Element, style: Record) {\r\n\t\tvar before = xml.lengthAttr(node, \"before\");\r\n\t\tvar after = xml.lengthAttr(node, \"after\");\r\n\t\tvar line = xml.intAttr(node, \"line\", null);\r\n\t\tvar lineRule = xml.attr(node, \"lineRule\");\r\n\r\n\t\tif (before) style[\"margin-top\"] = before;\r\n\t\tif (after) style[\"margin-bottom\"] = after;\r\n\r\n\t\tif (line !== null) {\r\n\t\t\tswitch (lineRule) {\r\n\t\t\t\tcase \"auto\":\r\n\t\t\t\t\tstyle[\"line-height\"] = `${(line / 240).toFixed(2)}`;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"atLeast\":\r\n\t\t\t\t\tstyle[\"line-height\"] = `calc(100% + ${line / 20}pt)`;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tstyle[\"line-height\"] = style[\"min-height\"] = `${line / 20}pt`\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tparseMarginProperties(node: Element, output: Record) {\r\n\t\txmlUtil.foreach(node, c => {\r\n\t\t\tswitch (c.localName) {\r\n\t\t\t\tcase \"left\":\r\n\t\t\t\t\toutput[\"padding-left\"] = values.valueOfMargin(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"right\":\r\n\t\t\t\t\toutput[\"padding-right\"] = values.valueOfMargin(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"top\":\r\n\t\t\t\t\toutput[\"padding-top\"] = values.valueOfMargin(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"bottom\":\r\n\t\t\t\t\toutput[\"padding-bottom\"] = values.valueOfMargin(c);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tparseTrHeight(node: Element, output: Record) {\r\n\t\tswitch (xml.attr(node, \"hRule\")) {\r\n\t\t\tcase \"exact\":\r\n\t\t\t\toutput[\"height\"] = xml.lengthAttr(node, \"val\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"atLeast\":\r\n\t\t\tdefault:\r\n\t\t\t\toutput[\"height\"] = xml.lengthAttr(node, \"val\");\r\n\t\t\t\t// min-height doesn't work for tr\r\n\t\t\t\t//output[\"min-height\"] = xml.sizeAttr(node, \"val\"); \r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tparseBorderProperties(node: Element, output: Record) {\r\n\t\txmlUtil.foreach(node, c => {\r\n\t\t\tswitch (c.localName) {\r\n\t\t\t\tcase \"start\":\r\n\t\t\t\tcase \"left\":\r\n\t\t\t\t\toutput[\"border-left\"] = values.valueOfBorder(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"end\":\r\n\t\t\t\tcase \"right\":\r\n\t\t\t\t\toutput[\"border-right\"] = values.valueOfBorder(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"top\":\r\n\t\t\t\t\toutput[\"border-top\"] = values.valueOfBorder(c);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"bottom\":\r\n\t\t\t\t\toutput[\"border-bottom\"] = values.valueOfBorder(c);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\nconst knownColors = ['black', 'blue', 'cyan', 'darkBlue', 'darkCyan', 'darkGray', 'darkGreen', 'darkMagenta', 'darkRed', 'darkYellow', 'green', 'lightGray', 'magenta', 'none', 'red', 'white', 'yellow'];\r\n\r\nclass xmlUtil {\r\n\tstatic foreach(node: Element, cb: (n: Element) => void) {\r\n\t\tfor (var i = 0; i < node.childNodes.length; i++) {\r\n\t\t\tlet n = node.childNodes[i];\r\n\r\n\t\t\tif (n.nodeType == Node.ELEMENT_NODE)\r\n\t\t\t\tcb(n);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic colorAttr(node: Element, attrName: string, defValue: string = null, autoColor: string = 'black') {\r\n\t\tvar v = xml.attr(node, attrName);\r\n\r\n\t\tif (v) {\r\n\t\t\tif (v == \"auto\") {\r\n\t\t\t\treturn autoColor;\r\n\t\t\t} else if (knownColors.includes(v)) {\r\n\t\t\t\treturn v;\r\n\t\t\t}\r\n\r\n\t\t\treturn `#${v}`;\r\n\t\t}\r\n\r\n\t\tvar themeColor = xml.attr(node, \"themeColor\");\r\n\r\n\t\treturn themeColor ? `var(--docx-${themeColor}-color)` : defValue;\r\n\t}\r\n\r\n\tstatic sizeValue(node: Element, type: LengthUsageType = LengthUsage.Dxa) {\r\n\t\treturn convertLength(node.textContent, type);\r\n\t}\r\n}\r\n\r\nclass values {\r\n\tstatic themeValue(c: Element, attr: string) {\r\n\t\tvar val = xml.attr(c, attr);\r\n\t\treturn val ? `var(--docx-${val}-font)` : null;\r\n\t}\r\n\r\n\tstatic valueOfSize(c: Element, attr: string) {\r\n\t\tvar type = LengthUsage.Dxa;\r\n\r\n\t\tswitch (xml.attr(c, \"type\")) {\r\n\t\t\tcase \"dxa\": break;\r\n\t\t\tcase \"pct\": type = LengthUsage.Percent; break;\r\n\t\t\tcase \"auto\": return \"auto\";\r\n\t\t}\r\n\r\n\t\treturn xml.lengthAttr(c, attr, type);\r\n\t}\r\n\r\n\tstatic valueOfMargin(c: Element) {\r\n\t\treturn xml.lengthAttr(c, \"w\");\r\n\t}\r\n\r\n\tstatic valueOfBorder(c: Element) {\r\n\t\tvar type = xml.attr(c, \"val\");\r\n\r\n\t\tif (type == \"nil\")\r\n\t\t\treturn \"none\";\r\n\r\n\t\tvar color = xmlUtil.colorAttr(c, \"color\");\r\n\t\tvar size = xml.lengthAttr(c, \"sz\", LengthUsage.Border);\r\n\r\n\t\treturn `${size} solid ${color == \"auto\" ? autos.borderColor : color}`;\r\n\t}\r\n\r\n\tstatic valueOfTblLayout(c: Element) {\r\n\t\tvar type = xml.attr(c, \"val\");\r\n\t\treturn type == \"fixed\" ? \"fixed\" : \"auto\";\r\n\t}\r\n\r\n\tstatic classNameOfCnfStyle(c: Element) {\r\n\t\tconst val = xml.attr(c, \"val\");\r\n\t\tconst classes = [\r\n\t\t\t'first-row', 'last-row', 'first-col', 'last-col',\r\n\t\t\t'odd-col', 'even-col', 'odd-row', 'even-row',\r\n\t\t\t'ne-cell', 'nw-cell', 'se-cell', 'sw-cell'\r\n\t\t];\r\n\r\n\t\treturn classes.filter((_, i) => val[i] == '1').join(' ');\r\n\t}\r\n\r\n\tstatic valueOfJc(c: Element) {\r\n\t\tvar type = xml.attr(c, \"val\");\r\n\r\n\t\tswitch (type) {\r\n\t\t\tcase \"start\":\r\n\t\t\tcase \"left\": return \"left\";\r\n\t\t\tcase \"center\": return \"center\";\r\n\t\t\tcase \"end\":\r\n\t\t\tcase \"right\": return \"right\";\r\n\t\t\tcase \"both\": return \"justify\";\r\n\t\t}\r\n\r\n\t\treturn type;\r\n\t}\r\n\r\n\tstatic valueOfVertAlign(c: Element, asTagName: boolean = false) {\r\n\t\tvar type = xml.attr(c, \"val\");\r\n\r\n\t\tswitch (type) {\r\n\t\t\tcase \"subscript\": return \"sub\";\r\n\t\t\tcase \"superscript\": return asTagName ? \"sup\" : \"super\";\r\n\t\t}\r\n\r\n\t\treturn asTagName ? null : type;\r\n\t}\r\n\r\n\tstatic valueOfTextAlignment(c: Element) {\r\n\t\tvar type = xml.attr(c, \"val\");\r\n\r\n\t\tswitch (type) {\r\n\t\t\tcase \"auto\":\r\n\t\t\tcase \"baseline\": return \"baseline\";\r\n\t\t\tcase \"top\": return \"top\";\r\n\t\t\tcase \"center\": return \"middle\";\r\n\t\t\tcase \"bottom\": return \"bottom\";\r\n\t\t}\r\n\r\n\t\treturn type;\r\n\t}\r\n\r\n\tstatic addSize(a: string, b: string): string {\r\n\t\tif (a == null) return b;\r\n\t\tif (b == null) return a;\r\n\r\n\t\treturn `calc(${a} + ${b})`; //TODO\r\n\t}\r\n\r\n\tstatic classNameOftblLook(c: Element) {\r\n\t\tconst val = xml.hexAttr(c, \"val\", 0);\r\n\t\tlet className = \"\";\r\n\r\n\t\tif (xml.boolAttr(c, \"firstRow\") || (val & 0x0020)) className += \" first-row\";\r\n\t\tif (xml.boolAttr(c, \"lastRow\") || (val & 0x0040)) className += \" last-row\";\r\n\t\tif (xml.boolAttr(c, \"firstColumn\") || (val & 0x0080)) className += \" first-col\";\r\n\t\tif (xml.boolAttr(c, \"lastColumn\") || (val & 0x0100)) className += \" last-col\";\r\n\t\tif (xml.boolAttr(c, \"noHBand\") || (val & 0x0200)) className += \" no-hband\";\r\n\t\tif (xml.boolAttr(c, \"noVBand\") || (val & 0x0400)) className += \" no-vband\";\r\n\r\n\t\treturn className.trim();\r\n\t}\r\n}","import { Part } from \"../common/part\";\r\nimport { CorePropsDeclaration, parseCoreProps } from \"./core-props\";\r\n\r\nexport class CorePropsPart extends Part {\r\n props: CorePropsDeclaration;\r\n\r\n parseXml(root: Element) {\r\n this.props = parseCoreProps(root, this._package.xmlParser);\r\n }\r\n}","import { XmlParser } from \"../parser/xml-parser\";\r\n\r\nexport interface CorePropsDeclaration {\r\n title: string,\r\n description: string,\r\n subject: string,\r\n creator: string,\r\n keywords: string,\r\n language: string,\r\n lastModifiedBy: string,\r\n revision: number,\r\n}\r\n\r\nexport function parseCoreProps(root: Element, xmlParser: XmlParser): CorePropsDeclaration {\r\n const result = {};\r\n\r\n for (let el of xmlParser.elements(root)) {\r\n switch (el.localName) {\r\n case \"title\": result.title = el.textContent; break;\r\n case \"description\": result.description = el.textContent; break;\r\n case \"subject\": result.subject = el.textContent; break;\r\n case \"creator\": result.creator = el.textContent; break;\r\n case \"keywords\": result.keywords = el.textContent; break;\r\n case \"language\": result.language = el.textContent; break;\r\n case \"lastModifiedBy\": result.lastModifiedBy = el.textContent; break;\r\n case \"revision\": el.textContent && (result.revision = parseInt(el.textContent)); break;\r\n }\r\n }\r\n\r\n return result;\r\n}","import { Part } from \"../common/part\";\r\nimport { CustomProperty, parseCustomProps } from \"./custom-props\";\r\n\r\nexport class CustomPropsPart extends Part {\r\n props: CustomProperty[];\r\n\r\n parseXml(root: Element) {\r\n this.props = parseCustomProps(root, this._package.xmlParser);\r\n }\r\n}","import { XmlParser } from \"../parser/xml-parser\";\r\n\r\nexport interface CustomProperty {\r\n\tformatId: string;\r\n\tname: string;\r\n\ttype: string;\r\n\tvalue: string;\r\n}\r\n\r\nexport function parseCustomProps(root: Element, xml: XmlParser): CustomProperty[] {\r\n\treturn xml.elements(root, \"property\").map(e => {\r\n\t\tconst firstChild = e.firstChild;\r\n\r\n\t\treturn {\r\n\t\t\tformatId: xml.attr(e, \"fmtid\"),\r\n\t\t\tname: xml.attr(e, \"name\"),\r\n\t\t\ttype: firstChild.nodeName,\r\n\t\t\tvalue: firstChild.textContent\r\n\t\t};\r\n\t});\r\n}","import { Part } from \"../common/part\";\r\nimport { ExtendedPropsDeclaration, parseExtendedProps } from \"./extended-props\";\r\n\r\nexport class ExtendedPropsPart extends Part {\r\n props: ExtendedPropsDeclaration;\r\n\r\n parseXml(root: Element) {\r\n this.props = parseExtendedProps(root, this._package.xmlParser);\r\n }\r\n}","import { XmlParser } from \"../parser/xml-parser\";\r\n\r\nexport interface ExtendedPropsDeclaration {\r\n template: string,\r\n totalTime: number,\r\n pages: number,\r\n words: number,\r\n characters: number,\r\n application: string,\r\n lines: number,\r\n paragraphs: number,\r\n company: string,\r\n appVersion: string\r\n}\r\n\r\nexport function parseExtendedProps(root: Element, xmlParser: XmlParser): ExtendedPropsDeclaration {\r\n const result = {\r\n\r\n };\r\n\r\n for (let el of xmlParser.elements(root)) {\r\n switch (el.localName) {\r\n case \"Template\":\r\n result.template = el.textContent;\r\n break;\r\n case \"Pages\":\r\n result.pages = safeParseToInt(el.textContent);\r\n break;\r\n case \"Words\":\r\n result.words = safeParseToInt(el.textContent);\r\n break;\r\n case \"Characters\":\r\n result.characters = safeParseToInt(el.textContent);\r\n break;\r\n case \"Application\":\r\n result.application = el.textContent;\r\n break;\r\n case \"Lines\":\r\n result.lines = safeParseToInt(el.textContent);\r\n break;\r\n case \"Paragraphs\":\r\n result.paragraphs = safeParseToInt(el.textContent);\r\n break;\r\n case \"Company\":\r\n result.company = el.textContent;\r\n break;\r\n case \"AppVersion\":\r\n result.appVersion = el.textContent;\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction safeParseToInt(value: string): number {\r\n if (typeof value === 'undefined')\r\n return;\r\n return parseInt(value);\r\n}","import { XmlParser } from \"../parser/xml-parser\";\r\nimport { DomType, OpenXmlElement } from \"./dom\";\r\n\r\nexport interface WmlBookmarkStart extends OpenXmlElement {\r\n id: string;\r\n name: string;\r\n colFirst: number;\r\n colLast: number;\r\n}\r\n\r\nexport interface WmlBookmarkEnd extends OpenXmlElement {\r\n id: string;\r\n}\r\n\r\nexport function parseBookmarkStart(elem: Element, xml: XmlParser): WmlBookmarkStart {\r\n return {\r\n type: DomType.BookmarkStart,\r\n id: xml.attr(elem, \"id\"),\r\n name: xml.attr(elem, \"name\"),\r\n colFirst: xml.intAttr(elem, \"colFirst\"),\r\n colLast: xml.intAttr(elem, \"colLast\")\r\n }\r\n}\r\n\r\nexport function parseBookmarkEnd(elem: Element, xml: XmlParser): WmlBookmarkEnd {\r\n return {\r\n type: DomType.BookmarkEnd,\r\n id: xml.attr(elem, \"id\")\r\n }\r\n}","import { XmlParser } from \"../parser/xml-parser\";\r\nimport { Length, LengthUsage } from \"./common\";\r\n\r\nexport interface Border {\r\n color: string;\r\n type: string;\r\n size: Length;\r\n frame: boolean;\r\n shadow: boolean;\r\n offset: Length;\r\n}\r\n\r\nexport interface Borders {\r\n top: Border;\r\n left: Border;\r\n right: Border;\r\n bottom: Border;\r\n}\r\n\r\nexport function parseBorder(elem: Element, xml: XmlParser): Border {\r\n return {\r\n type: xml.attr(elem, \"val\"),\r\n color: xml.attr(elem, \"color\"),\r\n size: xml.lengthAttr(elem, \"sz\", LengthUsage.Border),\r\n offset: xml.lengthAttr(elem, \"space\", LengthUsage.Point),\r\n frame: xml.boolAttr(elem, 'frame'),\r\n shadow: xml.boolAttr(elem, 'shadow')\r\n };\r\n}\r\n\r\nexport function parseBorders(elem: Element, xml: XmlParser): Borders {\r\n var result = {};\r\n\r\n for (let e of xml.elements(elem)) {\r\n switch (e.localName) {\r\n case \"left\": result.left = parseBorder(e, xml); break;\r\n case \"top\": result.top = parseBorder(e, xml); break;\r\n case \"right\": result.right = parseBorder(e, xml); break;\r\n case \"bottom\": result.bottom = parseBorder(e, xml); break;\r\n }\r\n }\r\n\r\n return result;\r\n}","import { XmlParser } from \"../parser/xml-parser\";\r\n\r\nexport const ns = {\r\n wordml: \"http://schemas.openxmlformats.org/wordprocessingml/2006/main\",\r\n drawingml: \"http://schemas.openxmlformats.org/drawingml/2006/main\",\r\n picture: \"http://schemas.openxmlformats.org/drawingml/2006/picture\",\r\n\tcompatibility: \"http://schemas.openxmlformats.org/markup-compatibility/2006\",\r\n\tmath: \"http://schemas.openxmlformats.org/officeDocument/2006/math\"\r\n}\r\n\r\nexport type LengthType = \"px\" | \"pt\" | \"%\" | \"\";\r\nexport type Length = string;\r\n\r\nexport interface Font {\r\n name: string;\r\n family: string;\r\n}\r\n\r\nexport interface CommonProperties {\r\n fontSize: Length;\r\n color: string;\r\n}\r\n\r\nexport type LengthUsageType = { mul: number, unit: LengthType };\r\n\r\nexport const LengthUsage: Record = {\r\n Dxa: { mul: 0.05, unit: \"pt\" }, //twips\r\n Emu: { mul: 1 / 12700, unit: \"pt\" },\r\n FontSize: { mul: 0.5, unit: \"pt\" },\r\n Border: { mul: 0.125, unit: \"pt\" },\r\n Point: { mul: 1, unit: \"pt\" },\r\n Percent: { mul: 0.02, unit: \"%\" },\r\n LineHeight: { mul: 1 / 240, unit: \"\" },\r\n VmlEmu: { mul: 1 / 12700, unit: \"\" },\r\n}\r\n\r\nexport function convertLength(val: string, usage: LengthUsageType = LengthUsage.Dxa): string {\r\n //\"simplified\" docx documents use pt's as units\r\n if (val == null || /.+(p[xt]|[%])$/.test(val)) {\r\n return val;\r\n }\r\n\r\n\treturn `${(parseInt(val) * usage.mul).toFixed(2)}${usage.unit}`;\r\n}\r\n\r\nexport function convertBoolean(v: string, defaultValue = false): boolean {\r\n switch (v) {\r\n case \"1\": return true;\r\n case \"0\": return false;\r\n case \"on\": return true;\r\n case \"off\": return false;\r\n case \"true\": return true;\r\n case \"false\": return false;\r\n default: return defaultValue;\r\n }\r\n}\r\n\r\nexport function convertPercentage(val: string): number {\r\n return val ? parseInt(val) / 100 : null;\r\n}\r\n\r\nexport function parseCommonProperty(elem: Element, props: CommonProperties, xml: XmlParser): boolean {\r\n if(elem.namespaceURI != ns.wordml)\r\n return false;\r\n\r\n switch(elem.localName) {\r\n case \"color\": \r\n props.color = xml.attr(elem, \"val\");\r\n break;\r\n\r\n case \"sz\":\r\n props.fontSize = xml.lengthAttr(elem, \"val\", LengthUsage.FontSize);\r\n break;\r\n\r\n default:\r\n return false;\r\n }\r\n\r\n return true;\r\n}","import { OpenXmlPackage } from \"../common/open-xml-package\";\r\nimport { Part } from \"../common/part\";\r\nimport { DocumentParser } from \"../document-parser\";\r\nimport { DocumentElement } from \"./document\";\r\n\r\nexport class DocumentPart extends Part {\r\n private _documentParser: DocumentParser;\r\n\r\n constructor(pkg: OpenXmlPackage, path: string, parser: DocumentParser) {\r\n super(pkg, path);\r\n this._documentParser = parser;\r\n }\r\n \r\n body: DocumentElement\r\n\r\n parseXml(root: Element) {\r\n this.body = this._documentParser.parseDocumentFile(root);\r\n }\r\n}","export enum DomType {\r\n Document = \"document\",\r\n Paragraph = \"paragraph\",\r\n Run = \"run\",\r\n Break = \"break\",\r\n NoBreakHyphen = \"noBreakHyphen\",\r\n Table = \"table\",\r\n Row = \"row\",\r\n Cell = \"cell\",\r\n Hyperlink = \"hyperlink\",\r\n Drawing = \"drawing\",\r\n Image = \"image\",\r\n Text = \"text\",\r\n Tab = \"tab\",\r\n Symbol = \"symbol\",\r\n BookmarkStart = \"bookmarkStart\",\r\n BookmarkEnd = \"bookmarkEnd\",\r\n Footer = \"footer\",\r\n Header = \"header\",\r\n FootnoteReference = \"footnoteReference\", \r\n\tEndnoteReference = \"endnoteReference\",\r\n Footnote = \"footnote\",\r\n Endnote = \"endnote\",\r\n SimpleField = \"simpleField\",\r\n ComplexField = \"complexField\",\r\n Instruction = \"instruction\",\r\n\tVmlPicture = \"vmlPicture\",\r\n\tMmlMath = \"mmlMath\",\r\n\tMmlMathParagraph = \"mmlMathParagraph\",\r\n\tMmlFraction = \"mmlFraction\",\r\n\tMmlNumerator = \"mmlNumerator\",\r\n\tMmlDenominator = \"mmlDenominator\",\r\n\tMmlRadical = \"mmlRadical\",\r\n\tMmlBase = \"mmlBase\",\r\n\tMmlDegree = \"mmlDegree\",\r\n\tMmlSuperscript = \"mmlSuperscript\",\r\n\tMmlSubscript = \"mmlSubscript\",\r\n\tMmlSubArgument = \"mmlSubArgument\",\r\n\tMmlSuperArgument = \"mmlSuperArgument\",\r\n\tMmlNary = \"mmlNary\",\r\n\tMmlDelimiter = \"mmlDelimiter\",\r\n\tMmlRun = \"mmlRun\",\r\n\tVmlElement = \"vmlElement\",\r\n\tInserted = \"inserted\",\r\n\tDeleted = \"deleted\",\r\n\tDeletedText = \"deletedText\"\r\n}\r\n\r\nexport interface OpenXmlElement {\r\n type: DomType;\r\n children?: OpenXmlElement[];\r\n cssStyle?: Record;\r\n props?: Record;\r\n \r\n\tstyleName?: string; //style name\r\n\tclassName?: string; //class mods\r\n\r\n parent?: OpenXmlElement;\r\n}\r\n\r\nexport abstract class OpenXmlElementBase implements OpenXmlElement {\r\n type: DomType;\r\n children?: OpenXmlElement[] = [];\r\n cssStyle?: Record = {};\r\n props?: Record;\r\n\r\n className?: string;\r\n styleName?: string;\r\n\r\n parent?: OpenXmlElement;\r\n}\r\n\r\nexport interface WmlHyperlink extends OpenXmlElement {\r\n\tid?: string;\r\n href?: string;\r\n}\r\n\r\nexport interface WmlNoteReference extends OpenXmlElement {\r\n id: string;\r\n}\r\n\r\nexport interface WmlBreak extends OpenXmlElement{\r\n break: \"page\" | \"lastRenderedPageBreak\" | \"textWrapping\";\r\n}\r\n\r\nexport interface WmlText extends OpenXmlElement{\r\n text: string;\r\n}\r\n\r\nexport interface WmlSymbol extends OpenXmlElement {\r\n font: string;\r\n char: string;\r\n}\r\n\r\nexport interface WmlTable extends OpenXmlElement {\r\n columns?: WmlTableColumn[];\r\n cellStyle?: Record;\r\n\r\n\tcolBandSize?: number;\r\n\trowBandSize?: number;\r\n}\r\n\r\nexport interface WmlTableRow extends OpenXmlElement {\r\n\tisHeader?: boolean;\r\n}\r\n\r\nexport interface WmlTableCell extends OpenXmlElement {\r\n\tverticalMerge?: 'restart' | 'continue' | string;\r\n span?: number;\r\n}\r\n\r\nexport interface IDomImage extends OpenXmlElement {\r\n src: string;\r\n}\r\n\r\nexport interface WmlTableColumn {\r\n width?: string;\r\n}\r\n\r\nexport interface IDomNumbering {\r\n id: string;\r\n level: number;\r\n pStyleName: string;\r\n pStyle: Record;\r\n rStyle: Record;\r\n levelText?: string;\r\n suff: string;\r\n format?: string;\r\n bullet?: NumberingPicBullet;\r\n}\r\n\r\nexport interface NumberingPicBullet {\r\n id: number;\r\n src: string;\r\n style?: string;\r\n}\r\n","import { XmlParser } from \"../parser/xml-parser\";\r\nimport { Length } from \"./common\";\r\n\r\nexport interface LineSpacing {\r\n after: Length;\r\n before: Length;\r\n line: number;\r\n lineRule: \"atLeast\" | \"exactly\" | \"auto\";\r\n}\r\n\r\nexport function parseLineSpacing(elem: Element, xml: XmlParser): LineSpacing {\r\n return {\r\n before: xml.lengthAttr(elem, \"before\"),\r\n after: xml.lengthAttr(elem, \"after\"),\r\n line: xml.intAttr(elem, \"line\"),\r\n lineRule: xml.attr(elem, \"lineRule\")\r\n } as LineSpacing;\r\n}","import { OpenXmlElement } from \"./dom\";\r\nimport { CommonProperties, Length, ns, parseCommonProperty } from \"./common\";\r\nimport { Borders } from \"./border\";\r\nimport { parseSectionProperties, SectionProperties } from \"./section\";\r\nimport { LineSpacing, parseLineSpacing } from \"./line-spacing\";\r\nimport { XmlParser } from \"../parser/xml-parser\";\r\nimport { parseRunProperties, RunProperties } from \"./run\";\r\n\r\nexport interface WmlParagraph extends OpenXmlElement, ParagraphProperties {\r\n}\r\n\r\nexport interface ParagraphProperties extends CommonProperties {\r\n sectionProps: SectionProperties;\r\n tabs: ParagraphTab[];\r\n numbering: ParagraphNumbering;\r\n\r\n border: Borders;\r\n textAlignment: \"auto\" | \"baseline\" | \"bottom\" | \"center\" | \"top\" | string;\r\n lineSpacing: LineSpacing;\r\n keepLines: boolean;\r\n keepNext: boolean;\r\n pageBreakBefore: boolean;\r\n outlineLevel: number;\r\n\tstyleName?: string;\r\n\r\n runProps: RunProperties;\r\n}\r\n\r\nexport interface ParagraphTab {\r\n style: \"bar\" | \"center\" | \"clear\" | \"decimal\" | \"end\" | \"num\" | \"start\" | \"left\" | \"right\";\r\n leader: \"none\" | \"dot\" | \"heavy\" | \"hyphen\" | \"middleDot\" | \"underscore\";\r\n position: Length;\r\n}\r\n\r\nexport interface ParagraphNumbering {\r\n id: string;\r\n level: number;\r\n}\r\n\r\nexport function parseParagraphProperties(elem: Element, xml: XmlParser): ParagraphProperties {\r\n let result = {};\r\n\r\n for(let el of xml.elements(elem)) {\r\n parseParagraphProperty(el, result, xml);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function parseParagraphProperty(elem: Element, props: ParagraphProperties, xml: XmlParser) {\r\n if (elem.namespaceURI != ns.wordml)\r\n return false;\r\n\r\n if(parseCommonProperty(elem, props, xml))\r\n return true;\r\n\r\n switch (elem.localName) {\r\n case \"tabs\":\r\n props.tabs = parseTabs(elem, xml);\r\n break;\r\n\r\n case \"sectPr\":\r\n props.sectionProps = parseSectionProperties(elem, xml);\r\n break;\r\n\r\n case \"numPr\":\r\n props.numbering = parseNumbering(elem, xml);\r\n break;\r\n \r\n case \"spacing\":\r\n props.lineSpacing = parseLineSpacing(elem, xml);\r\n return false; // TODO\r\n break;\r\n\r\n case \"textAlignment\":\r\n props.textAlignment = xml.attr(elem, \"val\");\r\n return false; //TODO\r\n break;\r\n\r\n case \"keepNext\":\r\n props.keepLines = xml.boolAttr(elem, \"val\", true);\r\n break;\r\n \r\n case \"keepNext\":\r\n props.keepNext = xml.boolAttr(elem, \"val\", true);\r\n break;\r\n \r\n case \"pageBreakBefore\":\r\n props.pageBreakBefore = xml.boolAttr(elem, \"val\", true);\r\n break;\r\n \r\n case \"outlineLvl\":\r\n props.outlineLevel = xml.intAttr(elem, \"val\");\r\n break;\r\n\r\n case \"pStyle\":\r\n props.styleName = xml.attr(elem, \"val\");\r\n break;\r\n\r\n case \"rPr\":\r\n props.runProps = parseRunProperties(elem, xml);\r\n break;\r\n \r\n default:\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function parseTabs(elem: Element, xml: XmlParser): ParagraphTab[] {\r\n return xml.elements(elem, \"tab\")\r\n .map(e => {\r\n position: xml.lengthAttr(e, \"pos\"),\r\n leader: xml.attr(e, \"leader\"),\r\n style: xml.attr(e, \"val\")\r\n });\r\n}\r\n\r\nexport function parseNumbering(elem: Element, xml: XmlParser): ParagraphNumbering {\r\n var result = {};\r\n\r\n for (let e of xml.elements(elem)) {\r\n switch (e.localName) {\r\n case \"numId\":\r\n result.id = xml.attr(e, \"val\");\r\n break;\r\n\r\n case \"ilvl\":\r\n result.level = xml.intAttr(e, \"val\");\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n}","import { XmlParser } from \"../parser/xml-parser\";\r\nimport { CommonProperties, parseCommonProperty } from \"./common\";\r\nimport { OpenXmlElement } from \"./dom\";\r\n\r\nexport interface WmlRun extends OpenXmlElement, RunProperties {\r\n id?: string;\r\n verticalAlign?: string;\r\n\tfieldRun?: boolean; \r\n}\r\n\r\nexport interface RunProperties extends CommonProperties {\r\n\r\n}\r\n\r\nexport function parseRunProperties(elem: Element, xml: XmlParser): RunProperties {\r\n let result = {};\r\n\r\n for(let el of xml.elements(elem)) {\r\n parseRunProperty(el, result, xml);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function parseRunProperty(elem: Element, props: RunProperties, xml: XmlParser) {\r\n if (parseCommonProperty(elem, props, xml))\r\n return true;\r\n\r\n return false;\r\n}","import globalXmlParser, { XmlParser } from \"../parser/xml-parser\";\r\nimport { Borders, parseBorders } from \"./border\";\r\nimport { Length } from \"./common\";\r\n\r\nexport interface Column {\r\n space: Length;\r\n width: Length;\r\n}\r\n\r\nexport interface Columns {\r\n space: Length;\r\n numberOfColumns: number;\r\n separator: boolean;\r\n equalWidth: boolean;\r\n columns: Column[];\r\n}\r\n\r\nexport interface PageSize {\r\n width: Length, \r\n height: Length, \r\n orientation: \"landscape\" | string \r\n}\r\n\r\nexport interface PageNumber {\r\n start: number;\r\n chapSep: \"colon\" | \"emDash\" | \"endash\" | \"hyphen\" | \"period\" | string;\r\n chapStyle: string;\r\n format: \"none\" | \"cardinalText\" | \"decimal\" | \"decimalEnclosedCircle\" | \"decimalEnclosedFullstop\" \r\n | \"decimalEnclosedParen\" | \"decimalZero\" | \"lowerLetter\" | \"lowerRoman\"\r\n | \"ordinalText\" | \"upperLetter\" | \"upperRoman\" | string;\r\n}\r\n\r\nexport interface PageMargins {\r\n top: Length;\r\n right: Length;\r\n bottom: Length;\r\n left: Length;\r\n header: Length;\r\n footer: Length;\r\n gutter: Length;\r\n}\r\n\r\nexport enum SectionType {\r\n Continuous = \"continuous\",\r\n NextPage = \"nextPage\", \r\n NextColumn = \"nextColumn\",\r\n EvenPage = \"evenPage\",\r\n OddPage = \"oddPage\",\r\n}\r\n\r\nexport interface FooterHeaderReference {\r\n id: string;\r\n type: string | \"first\" | \"even\" | \"default\";\r\n}\r\n\r\nexport interface SectionProperties {\r\n type: SectionType | string;\r\n pageSize: PageSize,\r\n pageMargins: PageMargins,\r\n pageBorders: Borders;\r\n pageNumber: PageNumber;\r\n columns: Columns;\r\n footerRefs: FooterHeaderReference[];\r\n headerRefs: FooterHeaderReference[];\r\n titlePage: boolean;\r\n}\r\n\r\nexport function parseSectionProperties(elem: Element, xml: XmlParser = globalXmlParser): SectionProperties {\r\n var section = {};\r\n\r\n for (let e of xml.elements(elem)) {\r\n switch (e.localName) {\r\n case \"pgSz\":\r\n section.pageSize = {\r\n width: xml.lengthAttr(e, \"w\"),\r\n height: xml.lengthAttr(e, \"h\"),\r\n orientation: xml.attr(e, \"orient\")\r\n }\r\n break;\r\n\r\n case \"type\":\r\n section.type = xml.attr(e, \"val\");\r\n break;\r\n\r\n case \"pgMar\":\r\n section.pageMargins = {\r\n left: xml.lengthAttr(e, \"left\"),\r\n right: xml.lengthAttr(e, \"right\"),\r\n top: xml.lengthAttr(e, \"top\"),\r\n bottom: xml.lengthAttr(e, \"bottom\"),\r\n header: xml.lengthAttr(e, \"header\"),\r\n footer: xml.lengthAttr(e, \"footer\"),\r\n gutter: xml.lengthAttr(e, \"gutter\"),\r\n };\r\n break;\r\n\r\n case \"cols\":\r\n section.columns = parseColumns(e, xml);\r\n break;\r\n\r\n case \"headerReference\":\r\n (section.headerRefs ?? (section.headerRefs = [])).push(parseFooterHeaderReference(e, xml)); \r\n break;\r\n \r\n case \"footerReference\":\r\n (section.footerRefs ?? (section.footerRefs = [])).push(parseFooterHeaderReference(e, xml)); \r\n break;\r\n\r\n case \"titlePg\":\r\n section.titlePage = xml.boolAttr(e, \"val\", true);\r\n break;\r\n\r\n case \"pgBorders\":\r\n section.pageBorders = parseBorders(e, xml);\r\n break;\r\n\r\n case \"pgNumType\":\r\n section.pageNumber = parsePageNumber(e, xml);\r\n break;\r\n }\r\n }\r\n\r\n return section;\r\n}\r\n\r\nfunction parseColumns(elem: Element, xml: XmlParser): Columns {\r\n return {\r\n numberOfColumns: xml.intAttr(elem, \"num\"),\r\n space: xml.lengthAttr(elem, \"space\"),\r\n separator: xml.boolAttr(elem, \"sep\"),\r\n equalWidth: xml.boolAttr(elem, \"equalWidth\", true),\r\n columns: xml.elements(elem, \"col\")\r\n .map(e => {\r\n width: xml.lengthAttr(e, \"w\"),\r\n space: xml.lengthAttr(e, \"space\")\r\n })\r\n };\r\n}\r\n\r\nfunction parsePageNumber(elem: Element, xml: XmlParser): PageNumber {\r\n return {\r\n chapSep: xml.attr(elem, \"chapSep\"),\r\n chapStyle: xml.attr(elem, \"chapStyle\"),\r\n format: xml.attr(elem, \"fmt\"),\r\n start: xml.intAttr(elem, \"start\")\r\n };\r\n}\r\n\r\nfunction parseFooterHeaderReference(elem: Element, xml: XmlParser): FooterHeaderReference {\r\n return {\r\n id: xml.attr(elem, \"id\"),\r\n type: xml.attr(elem, \"type\"),\r\n }\r\n}","import { WordDocument } from './word-document';\r\nimport { DocumentParser } from './document-parser';\r\nimport { HtmlRenderer } from './html-renderer';\r\n\r\nexport interface Options {\r\n inWrapper: boolean;\r\n ignoreWidth: boolean;\r\n ignoreHeight: boolean;\r\n ignoreFonts: boolean;\r\n breakPages: boolean;\r\n debug: boolean;\r\n experimental: boolean;\r\n className: string;\r\n trimXmlDeclaration: boolean;\r\n renderHeaders: boolean;\r\n renderFooters: boolean;\r\n renderFootnotes: boolean;\r\n\trenderEndnotes: boolean;\r\n ignoreLastRenderedPageBreak: boolean;\r\n\tuseBase64URL: boolean;\r\n\tuseMathMLPolyfill: boolean;\r\n\trenderChanges: boolean;\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n ignoreHeight: false,\r\n ignoreWidth: false,\r\n ignoreFonts: false,\r\n breakPages: true,\r\n debug: false,\r\n experimental: false,\r\n className: \"docx\",\r\n inWrapper: true,\r\n trimXmlDeclaration: true,\r\n ignoreLastRenderedPageBreak: true,\r\n renderHeaders: true,\r\n renderFooters: true,\r\n renderFootnotes: true,\r\n\trenderEndnotes: true,\r\n\tuseBase64URL: false,\r\n\tuseMathMLPolyfill: false,\r\n\trenderChanges: false\r\n}\r\n\r\nexport function praseAsync(data: Blob | any, userOptions: Partial = null): Promise {\r\n const ops = { ...defaultOptions, ...userOptions };\r\n return WordDocument.load(data, new DocumentParser(ops), ops);\r\n}\r\n\r\nexport async function renderAsync(data: Blob | any, bodyContainer: HTMLElement, styleContainer: HTMLElement = null, userOptions: Partial = null): Promise {\r\n const ops = { ...defaultOptions, ...userOptions };\r\n const renderer = new HtmlRenderer(window.document);\r\n\tconst doc = await WordDocument.load(data, new DocumentParser(ops), ops)\r\n\r\n\trenderer.render(doc, bodyContainer, styleContainer, ops);\r\n\t\r\n return doc;\r\n}","import { Part } from \"../common/part\";\r\nimport { FontDeclaration, parseFonts } from \"./fonts\";\r\n\r\nexport class FontTablePart extends Part {\r\n fonts: FontDeclaration[];\r\n\r\n parseXml(root: Element) {\r\n this.fonts = parseFonts(root, this._package.xmlParser);\r\n }\r\n}","import { XmlParser } from \"../parser/xml-parser\";\r\n\r\nconst embedFontTypeMap = {\r\n embedRegular: 'regular',\r\n embedBold: 'bold',\r\n embedItalic: 'italic',\r\n embedBoldItalic: 'boldItalic',\r\n}\r\n\r\nexport interface FontDeclaration {\r\n name: string,\r\n altName: string,\r\n family: string,\r\n embedFontRefs: EmbedFontRef[];\r\n}\r\n\r\nexport interface EmbedFontRef {\r\n id: string;\r\n key: string;\r\n type: 'regular' | 'bold' | 'italic' | 'boldItalic';\r\n}\r\n\r\nexport function parseFonts(root: Element, xml: XmlParser): FontDeclaration[] {\r\n return xml.elements(root).map(el => parseFont(el, xml));\r\n}\r\n\r\nexport function parseFont(elem: Element, xml: XmlParser): FontDeclaration {\r\n let result = {\r\n name: xml.attr(elem, \"name\"),\r\n embedFontRefs: []\r\n };\r\n\r\n for (let el of xml.elements(elem)) {\r\n switch (el.localName) {\r\n case \"family\":\r\n result.family = xml.attr(el, \"val\");\r\n break;\r\n\r\n case \"altName\":\r\n result.altName = xml.attr(el, \"val\");\r\n break;\r\n\r\n case \"embedRegular\":\r\n case \"embedBold\":\r\n case \"embedItalic\":\r\n case \"embedBoldItalic\":\r\n result.embedFontRefs.push(parseEmbedFontRef(el, xml));\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function parseEmbedFontRef(elem: Element, xml: XmlParser): EmbedFontRef {\r\n return { \r\n id: xml.attr(elem, \"id\"), \r\n key: xml.attr(elem, \"fontKey\"),\r\n type: embedFontTypeMap[elem.localName]\r\n };\r\n}","import { OpenXmlElementBase, DomType } from \"../document/dom\";\r\n\r\nexport class WmlHeader extends OpenXmlElementBase {\r\n type: DomType = DomType.Header;\r\n}\r\n\r\nexport class WmlFooter extends OpenXmlElementBase {\r\n type: DomType = DomType.Footer;\r\n}","import { OpenXmlPackage } from \"../common/open-xml-package\";\r\nimport { Part } from \"../common/part\";\r\nimport { DocumentParser } from \"../document-parser\";\r\nimport { OpenXmlElement } from \"../document/dom\";\r\nimport { WmlHeader, WmlFooter } from \"./elements\";\r\n\r\nexport abstract class BaseHeaderFooterPart extends Part {\r\n rootElement: T;\r\n\r\n private _documentParser: DocumentParser;\r\n\r\n constructor(pkg: OpenXmlPackage, path: string, parser: DocumentParser) {\r\n super(pkg, path);\r\n this._documentParser = parser;\r\n }\r\n\r\n parseXml(root: Element) {\r\n this.rootElement = this.createRootElement();\r\n this.rootElement.children = this._documentParser.parseBodyElements(root);\r\n }\r\n\r\n protected abstract createRootElement(): T;\r\n}\r\n\r\nexport class HeaderPart extends BaseHeaderFooterPart {\r\n protected createRootElement(): WmlHeader {\r\n return new WmlHeader();\r\n }\r\n}\r\n\r\nexport class FooterPart extends BaseHeaderFooterPart {\r\n protected createRootElement(): WmlFooter {\r\n return new WmlFooter();\r\n }\r\n}","import { WordDocument } from './word-document';\r\nimport {\r\n\tDomType, WmlTable, IDomNumbering,\r\n\tWmlHyperlink, IDomImage, OpenXmlElement, WmlTableColumn, WmlTableCell, WmlText, WmlSymbol, WmlBreak, WmlNoteReference\r\n} from './document/dom';\r\nimport { CommonProperties } from './document/common';\r\nimport { Options } from './docx-preview';\r\nimport { DocumentElement } from './document/document';\r\nimport { WmlParagraph } from './document/paragraph';\r\nimport { asArray, escapeClassName, isString, keyBy, mergeDeep } from './utils';\r\nimport { computePixelToPoint, updateTabStop } from './javascript';\r\nimport { FontTablePart } from './font-table/font-table';\r\nimport { FooterHeaderReference, SectionProperties } from './document/section';\r\nimport { WmlRun, RunProperties } from './document/run';\r\nimport { WmlBookmarkStart } from './document/bookmarks';\r\nimport { IDomStyle } from './document/style';\r\nimport { WmlBaseNote, WmlFootnote } from './notes/elements';\r\nimport { ThemePart } from './theme/theme-part';\r\nimport { BaseHeaderFooterPart } from './header-footer/parts';\r\nimport { Part } from './common/part';\r\nimport mathMLCSS from \"./mathml.scss\";\r\nimport { VmlElement } from './vml/vml';\r\n\r\nconst ns = {\r\n\tsvg: \"http://www.w3.org/2000/svg\",\r\n\tmathML: \"http://www.w3.org/1998/Math/MathML\"\r\n}\r\n\r\ninterface CellPos {\r\n\tcol: number;\r\n\trow: number;\r\n}\r\n\r\ntype CellVerticalMergeType = Record;\r\n\r\nexport class HtmlRenderer {\r\n\r\n\tclassName: string = \"docx\";\r\n\trootSelector: string;\r\n\tdocument: WordDocument;\r\n\toptions: Options;\r\n\tstyleMap: Record = {};\r\n\tcurrentPart: Part = null;\r\n\r\n\ttableVerticalMerges: CellVerticalMergeType[] = [];\r\n\tcurrentVerticalMerge: CellVerticalMergeType = null;\r\n\ttableCellPositions: CellPos[] = [];\r\n\tcurrentCellPosition: CellPos = null;\r\n\r\n\tfootnoteMap: Record = {};\r\n\tendnoteMap: Record = {};\r\n\tcurrentFootnoteIds: string[];\r\n\tcurrentEndnoteIds: string[] = [];\r\n\tusedHederFooterParts: any[] = [];\r\n\r\n\tdefaultTabSize: string;\r\n\tcurrentTabs: any[] = [];\r\n\ttabsTimeout: any = 0;\r\n\r\n\tconstructor(public htmlDocument: Document) {\r\n\t}\r\n\r\n\trender(document: WordDocument, bodyContainer: HTMLElement, styleContainer: HTMLElement = null, options: Options) {\r\n\t\tthis.document = document;\r\n\t\tthis.options = options;\r\n\t\tthis.className = options.className;\r\n\t\tthis.rootSelector = options.inWrapper ? `.${this.className}-wrapper` : ':root';\r\n\t\tthis.styleMap = null;\r\n\r\n\t\tstyleContainer = styleContainer || bodyContainer;\r\n\r\n\t\tremoveAllElements(styleContainer);\r\n\t\tremoveAllElements(bodyContainer);\r\n\r\n\t\tappendComment(styleContainer, \"docxjs library predefined styles\");\r\n\t\tstyleContainer.appendChild(this.renderDefaultStyle());\r\n\r\n\t\tif (!window.MathMLElement && options.useMathMLPolyfill) {\r\n\t\t\tappendComment(styleContainer, \"docxjs mathml polyfill styles\");\r\n\t\t\tstyleContainer.appendChild(createStyleElement(mathMLCSS));\r\n\t\t} \r\n\r\n\t\tif (document.themePart) {\r\n\t\t\tappendComment(styleContainer, \"docxjs document theme values\");\r\n\t\t\tthis.renderTheme(document.themePart, styleContainer);\r\n\t\t}\r\n\r\n\t\tif (document.stylesPart != null) {\r\n\t\t\tthis.styleMap = this.processStyles(document.stylesPart.styles);\r\n\r\n\t\t\tappendComment(styleContainer, \"docxjs document styles\");\r\n\t\t\tstyleContainer.appendChild(this.renderStyles(document.stylesPart.styles));\r\n\t\t}\r\n\r\n\t\tif (document.numberingPart) {\r\n\t\t\tthis.prodessNumberings(document.numberingPart.domNumberings);\r\n\r\n\t\t\tappendComment(styleContainer, \"docxjs document numbering styles\");\r\n\t\t\tstyleContainer.appendChild(this.renderNumbering(document.numberingPart.domNumberings, styleContainer));\r\n\t\t\t//styleContainer.appendChild(this.renderNumbering2(document.numberingPart, styleContainer));\r\n\t\t}\r\n\r\n\t\tif (document.footnotesPart) {\r\n\t\t\tthis.footnoteMap = keyBy(document.footnotesPart.notes, x => x.id);\r\n\t\t}\r\n\r\n\t\tif (document.endnotesPart) {\r\n\t\t\tthis.endnoteMap = keyBy(document.endnotesPart.notes, x => x.id);\r\n\t\t}\r\n\r\n\t\tif (document.settingsPart) {\r\n\t\t\tthis.defaultTabSize = document.settingsPart.settings?.defaultTabStop;\r\n\t\t}\r\n\r\n\t\tif (!options.ignoreFonts && document.fontTablePart)\r\n\t\t\tthis.renderFontTable(document.fontTablePart, styleContainer);\r\n\r\n\t\tvar sectionElements = this.renderSections(document.documentPart.body);\r\n\r\n\t\tif (this.options.inWrapper) {\r\n\t\t\tbodyContainer.appendChild(this.renderWrapper(sectionElements));\r\n\t\t} else {\r\n\t\t\tappendChildren(bodyContainer, sectionElements);\r\n\t\t}\r\n\r\n\t\tthis.refreshTabStops();\r\n\t}\r\n\r\n\trenderTheme(themePart: ThemePart, styleContainer: HTMLElement) {\r\n\t\tconst variables = {};\r\n\t\tconst fontScheme = themePart.theme?.fontScheme;\r\n\r\n\t\tif (fontScheme) {\r\n\t\t\tif (fontScheme.majorFont) {\r\n\t\t\t\tvariables['--docx-majorHAnsi-font'] = fontScheme.majorFont.latinTypeface;\r\n\t\t\t}\r\n\r\n\t\t\tif (fontScheme.minorFont) {\r\n\t\t\t\tvariables['--docx-minorHAnsi-font'] = fontScheme.minorFont.latinTypeface;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst colorScheme = themePart.theme?.colorScheme;\r\n\r\n\t\tif (colorScheme) {\r\n\t\t\tfor (let [k, v] of Object.entries(colorScheme.colors)) {\r\n\t\t\t\tvariables[`--docx-${k}-color`] = `#${v}`;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst cssText = this.styleToString(`.${this.className}`, variables);\r\n\t\tstyleContainer.appendChild(createStyleElement(cssText));\r\n\t}\r\n\r\n\trenderFontTable(fontsPart: FontTablePart, styleContainer: HTMLElement) {\r\n\t\tfor (let f of fontsPart.fonts) {\r\n\t\t\tfor (let ref of f.embedFontRefs) {\r\n\t\t\t\tthis.document.loadFont(ref.id, ref.key).then(fontData => {\r\n\t\t\t\t\tconst cssValues = {\r\n\t\t\t\t\t\t'font-family': f.name,\r\n\t\t\t\t\t\t'src': `url(${fontData})`\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tif (ref.type == \"bold\" || ref.type == \"boldItalic\") {\r\n\t\t\t\t\t\tcssValues['font-weight'] = 'bold';\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (ref.type == \"italic\" || ref.type == \"boldItalic\") {\r\n\t\t\t\t\t\tcssValues['font-style'] = 'italic';\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tappendComment(styleContainer, `docxjs ${f.name} font`);\r\n\t\t\t\t\tconst cssText = this.styleToString(\"@font-face\", cssValues);\r\n\t\t\t\t\tstyleContainer.appendChild(createStyleElement(cssText));\r\n\t\t\t\t\tthis.refreshTabStops();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprocessStyleName(className: string): string {\r\n\t\treturn className ? `${this.className}_${escapeClassName(className)}` : this.className;\r\n\t}\r\n\r\n\tprocessStyles(styles: IDomStyle[]) {\r\n\t\tconst stylesMap = keyBy(styles.filter(x => x.id != null), x => x.id);\r\n\r\n\t\tfor (const style of styles.filter(x => x.basedOn)) {\r\n\t\t\tvar baseStyle = stylesMap[style.basedOn];\r\n\r\n\t\t\tif (baseStyle) {\r\n\t\t\t\tstyle.paragraphProps = mergeDeep(style.paragraphProps, baseStyle.paragraphProps);\r\n\t\t\t\tstyle.runProps = mergeDeep(style.runProps, baseStyle.runProps);\r\n\r\n\t\t\t\tfor (const baseValues of baseStyle.styles) {\r\n\t\t\t\t\tconst styleValues = style.styles.find(x => x.target == baseValues.target);\r\n\r\n\t\t\t\t\tif (styleValues) {\r\n\t\t\t\t\t\tthis.copyStyleProperties(baseValues.values, styleValues.values);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstyle.styles.push({ ...baseValues, values: { ...baseValues.values } });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (this.options.debug)\r\n\t\t\t\tconsole.warn(`Can't find base style ${style.basedOn}`);\r\n\t\t}\r\n\r\n\t\tfor (let style of styles) {\r\n\t\t\tstyle.cssName = this.processStyleName(style.id);\r\n\t\t}\r\n\r\n\t\treturn stylesMap;\r\n\t}\r\n\r\n\tprodessNumberings(numberings: IDomNumbering[]) {\r\n\t\tfor (let num of numberings.filter(n => n.pStyleName)) {\r\n\t\t\tconst style = this.findStyle(num.pStyleName);\r\n\r\n\t\t\tif (style?.paragraphProps?.numbering) {\r\n\t\t\t\tstyle.paragraphProps.numbering.level = num.level;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprocessElement(element: OpenXmlElement) {\r\n\t\tif (element.children) {\r\n\t\t\tfor (var e of element.children) {\r\n\t\t\t\te.parent = element;\r\n\r\n\t\t\t\tif (e.type == DomType.Table) {\r\n\t\t\t\t\tthis.processTable(e);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processElement(e);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprocessTable(table: WmlTable) {\r\n\t\tfor (var r of table.children) {\r\n\t\t\tfor (var c of r.children) {\r\n\t\t\t\tc.cssStyle = this.copyStyleProperties(table.cellStyle, c.cssStyle, [\r\n\t\t\t\t\t\"border-left\", \"border-right\", \"border-top\", \"border-bottom\",\r\n\t\t\t\t\t\"padding-left\", \"padding-right\", \"padding-top\", \"padding-bottom\"\r\n\t\t\t\t]);\r\n\r\n\t\t\t\tthis.processElement(c);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcopyStyleProperties(input: Record, output: Record, attrs: string[] = null): Record {\r\n\t\tif (!input)\r\n\t\t\treturn output;\r\n\r\n\t\tif (output == null) output = {};\r\n\t\tif (attrs == null) attrs = Object.getOwnPropertyNames(input);\r\n\r\n\t\tfor (var key of attrs) {\r\n\t\t\tif (input.hasOwnProperty(key) && !output.hasOwnProperty(key))\r\n\t\t\t\toutput[key] = input[key];\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tcreateSection(className: string, props: SectionProperties) {\r\n\t\tvar elem = this.createElement(\"section\", { className });\r\n\r\n\t\tif (props) {\r\n\t\t\tif (props.pageMargins) {\r\n\t\t\t\telem.style.paddingLeft = props.pageMargins.left;\r\n\t\t\t\telem.style.paddingRight = props.pageMargins.right;\r\n\t\t\t\telem.style.paddingTop = props.pageMargins.top;\r\n\t\t\t\telem.style.paddingBottom = props.pageMargins.bottom;\r\n\t\t\t}\r\n\r\n\t\t\tif (props.pageSize) {\r\n\t\t\t\tif (!this.options.ignoreWidth)\r\n\t\t\t\t\telem.style.width = props.pageSize.width;\r\n\t\t\t\tif (!this.options.ignoreHeight)\r\n\t\t\t\t\telem.style.minHeight = props.pageSize.height;\r\n\t\t\t}\r\n\r\n\t\t\tif (props.columns && props.columns.numberOfColumns) {\r\n\t\t\t\telem.style.columnCount = `${props.columns.numberOfColumns}`;\r\n\t\t\t\telem.style.columnGap = props.columns.space;\r\n\r\n\t\t\t\tif (props.columns.separator) {\r\n\t\t\t\t\telem.style.columnRule = \"1px solid black\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn elem;\r\n\t}\r\n\r\n\trenderSections(document: DocumentElement): HTMLElement[] {\r\n\t\tconst result = [];\r\n\r\n\t\tthis.processElement(document);\r\n\t\tconst sections = this.splitBySection(document.children);\r\n\t\tlet prevProps = null;\r\n\r\n\t\tfor (let i = 0, l = sections.length; i < l; i++) {\r\n\t\t\tthis.currentFootnoteIds = [];\r\n\r\n\t\t\tconst section = sections[i];\r\n\t\t\tconst props = section.sectProps || document.props;\r\n\t\t\tconst sectionElement = this.createSection(this.className, props);\r\n\t\t\tthis.renderStyleValues(document.cssStyle, sectionElement);\r\n\r\n\t\t\tthis.options.renderHeaders && this.renderHeaderFooter(props.headerRefs, props,\r\n\t\t\t\tresult.length, prevProps != props, sectionElement);\r\n\r\n\t\t\tvar contentElement = this.createElement(\"article\");\r\n\t\t\tthis.renderElements(section.elements, contentElement);\r\n\t\t\tsectionElement.appendChild(contentElement);\r\n\r\n\t\t\tif (this.options.renderFootnotes) {\r\n\t\t\t\tthis.renderNotes(this.currentFootnoteIds, this.footnoteMap, sectionElement);\r\n\t\t\t}\r\n\r\n\t\t\tif (this.options.renderEndnotes && i == l - 1) {\r\n\t\t\t\tthis.renderNotes(this.currentEndnoteIds, this.endnoteMap, sectionElement);\r\n\t\t\t}\r\n\r\n\t\t\tthis.options.renderFooters && this.renderHeaderFooter(props.footerRefs, props,\r\n\t\t\t\tresult.length, prevProps != props, sectionElement);\r\n\r\n\t\t\tresult.push(sectionElement);\r\n\t\t\tprevProps = props;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderHeaderFooter(refs: FooterHeaderReference[], props: SectionProperties, page: number, firstOfSection: boolean, into: HTMLElement) {\r\n\t\tif (!refs) return;\r\n\r\n\t\tvar ref = (props.titlePage && firstOfSection ? refs.find(x => x.type == \"first\") : null)\r\n\t\t\t?? (page % 2 == 1 ? refs.find(x => x.type == \"even\") : null)\r\n\t\t\t?? refs.find(x => x.type == \"default\");\r\n\r\n\t\tvar part = ref && this.document.findPartByRelId(ref.id, this.document.documentPart) as BaseHeaderFooterPart;\r\n\r\n\t\tif (part) {\r\n\t\t\tthis.currentPart = part;\r\n\t\t\tif (!this.usedHederFooterParts.includes(part.path)) {\r\n\t\t\t\tthis.processElement(part.rootElement);\r\n\t\t\t\tthis.usedHederFooterParts.push(part.path);\r\n\t\t\t}\r\n\t\t\tthis.renderElements([part.rootElement], into);\r\n\t\t\tthis.currentPart = null;\r\n\t\t}\r\n\t}\r\n\r\n\tisPageBreakElement(elem: OpenXmlElement): boolean {\r\n\t\tif (elem.type != DomType.Break)\r\n\t\t\treturn false;\r\n\r\n\t\tif ((elem as WmlBreak).break == \"lastRenderedPageBreak\")\r\n\t\t\treturn !this.options.ignoreLastRenderedPageBreak;\r\n\r\n\t\treturn (elem as WmlBreak).break == \"page\";\r\n\t}\r\n\r\n\tsplitBySection(elements: OpenXmlElement[]): { sectProps: SectionProperties, elements: OpenXmlElement[] }[] {\r\n\t\tvar current = { sectProps: null, elements: [] };\r\n\t\tvar result = [current];\r\n\r\n\t\tfor (let elem of elements) {\r\n\t\t\tif (elem.type == DomType.Paragraph) {\r\n\t\t\t\tconst s = this.findStyle((elem as WmlParagraph).styleName);\r\n\r\n\t\t\t\tif (s?.paragraphProps?.pageBreakBefore) {\r\n\t\t\t\t\tcurrent.sectProps = sectProps;\r\n\t\t\t\t\tcurrent = { sectProps: null, elements: [] };\r\n\t\t\t\t\tresult.push(current);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcurrent.elements.push(elem);\r\n\r\n\t\t\tif (elem.type == DomType.Paragraph) {\r\n\t\t\t\tconst p = elem as WmlParagraph;\r\n\r\n\t\t\t\tvar sectProps = p.sectionProps;\r\n\t\t\t\tvar pBreakIndex = -1;\r\n\t\t\t\tvar rBreakIndex = -1;\r\n\r\n\t\t\t\tif (this.options.breakPages && p.children) {\r\n\t\t\t\t\tpBreakIndex = p.children.findIndex(r => {\r\n\t\t\t\t\t\trBreakIndex = r.children?.findIndex(this.isPageBreakElement.bind(this)) ?? -1;\r\n\t\t\t\t\t\treturn rBreakIndex != -1;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (sectProps || pBreakIndex != -1) {\r\n\t\t\t\t\tcurrent.sectProps = sectProps;\r\n\t\t\t\t\tcurrent = { sectProps: null, elements: [] };\r\n\t\t\t\t\tresult.push(current);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (pBreakIndex != -1) {\r\n\t\t\t\t\tlet breakRun = p.children[pBreakIndex];\r\n\t\t\t\t\tlet splitRun = rBreakIndex < breakRun.children.length - 1;\r\n\r\n\t\t\t\t\tif (pBreakIndex < p.children.length - 1 || splitRun) {\r\n\t\t\t\t\t\tvar children = elem.children;\r\n\t\t\t\t\t\tvar newParagraph = { ...elem, children: children.slice(pBreakIndex) };\r\n\t\t\t\t\t\telem.children = children.slice(0, pBreakIndex);\r\n\t\t\t\t\t\tcurrent.elements.push(newParagraph);\r\n\r\n\t\t\t\t\t\tif (splitRun) {\r\n\t\t\t\t\t\t\tlet runChildren = breakRun.children;\r\n\t\t\t\t\t\t\tlet newRun = { ...breakRun, children: runChildren.slice(0, rBreakIndex) };\r\n\t\t\t\t\t\t\telem.children.push(newRun);\r\n\t\t\t\t\t\t\tbreakRun.children = runChildren.slice(rBreakIndex);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet currentSectProps = null;\r\n\r\n\t\tfor (let i = result.length - 1; i >= 0; i--) {\r\n\t\t\tif (result[i].sectProps == null) {\r\n\t\t\t\tresult[i].sectProps = currentSectProps;\r\n\t\t\t} else {\r\n\t\t\t\tcurrentSectProps = result[i].sectProps\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderWrapper(children: HTMLElement[]) {\r\n\t\treturn this.createElement(\"div\", { className: `${this.className}-wrapper` }, children);\r\n\t}\r\n\r\n\trenderDefaultStyle() {\r\n\t\tvar c = this.className;\r\n\t\tvar styleText = `\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; }\r\n.${c} { color: black; hyphens: auto; }\r\nsection.${c} { box-sizing: border-box; display: flex; flex-flow: column nowrap; position: relative; overflow: hidden; }\r\nsection.${c}>article { margin-bottom: auto; }\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`;\r\n\r\n\t\treturn createStyleElement(styleText);\r\n\t}\r\n\r\n\t// renderNumbering2(numberingPart: NumberingPartProperties, container: HTMLElement): HTMLElement {\r\n\t// let css = \"\";\r\n\t// const numberingMap = keyBy(numberingPart.abstractNumberings, x => x.id);\r\n\t// const bulletMap = keyBy(numberingPart.bulletPictures, x => x.id);\r\n\t// const topCounters = [];\r\n\r\n\t// for(let num of numberingPart.numberings) {\r\n\t// const absNum = numberingMap[num.abstractId];\r\n\r\n\t// for(let lvl of absNum.levels) {\r\n\t// const className = this.numberingClass(num.id, lvl.level);\r\n\t// let listStyleType = \"none\";\r\n\r\n\t// if(lvl.text && lvl.format == 'decimal') {\r\n\t// const counter = this.numberingCounter(num.id, lvl.level);\r\n\r\n\t// if (lvl.level > 0) {\r\n\t// css += this.styleToString(`p.${this.numberingClass(num.id, lvl.level - 1)}`, {\r\n\t// \"counter-reset\": counter\r\n\t// });\r\n\t// } else {\r\n\t// topCounters.push(counter);\r\n\t// }\r\n\r\n\t// css += this.styleToString(`p.${className}:before`, {\r\n\t// \"content\": this.levelTextToContent(lvl.text, num.id),\r\n\t// \"counter-increment\": counter\r\n\t// });\r\n\t// } else if(lvl.bulletPictureId) {\r\n\t// let pict = bulletMap[lvl.bulletPictureId];\r\n\t// let variable = `--${this.className}-${pict.referenceId}`.toLowerCase();\r\n\r\n\t// css += this.styleToString(`p.${className}:before`, {\r\n\t// \"content\": \"' '\",\r\n\t// \"display\": \"inline-block\",\r\n\t// \"background\": `var(${variable})`\r\n\t// }, pict.style);\r\n\r\n\t// this.document.loadNumberingImage(pict.referenceId).then(data => {\r\n\t// var text = `.${this.className}-wrapper { ${variable}: url(${data}) }`;\r\n\t// container.appendChild(createStyleElement(text));\r\n\t// });\r\n\t// } else {\r\n\t// listStyleType = this.numFormatToCssValue(lvl.format);\r\n\t// }\r\n\r\n\t// css += this.styleToString(`p.${className}`, {\r\n\t// \"display\": \"list-item\",\r\n\t// \"list-style-position\": \"inside\",\r\n\t// \"list-style-type\": listStyleType,\r\n\t// //TODO\r\n\t// //...num.style\r\n\t// });\r\n\t// }\r\n\t// }\r\n\r\n\t// if (topCounters.length > 0) {\r\n\t// css += this.styleToString(`.${this.className}-wrapper`, {\r\n\t// \"counter-reset\": topCounters.join(\" \")\r\n\t// });\r\n\t// }\r\n\r\n\t// return createStyleElement(css);\r\n\t// }\r\n\r\n\trenderNumbering(numberings: IDomNumbering[], styleContainer: HTMLElement) {\r\n\t\tvar styleText = \"\";\r\n\t\tvar rootCounters = [];\r\n\r\n\t\tfor (var num of numberings) {\r\n\t\t\tvar selector = `p.${this.numberingClass(num.id, num.level)}`;\r\n\t\t\tvar listStyleType = \"none\";\r\n\r\n\t\t\tif (num.bullet) {\r\n\t\t\t\tlet valiable = `--${this.className}-${num.bullet.src}`.toLowerCase();\r\n\r\n\t\t\t\tstyleText += this.styleToString(`${selector}:before`, {\r\n\t\t\t\t\t\"content\": \"' '\",\r\n\t\t\t\t\t\"display\": \"inline-block\",\r\n\t\t\t\t\t\"background\": `var(${valiable})`\r\n\t\t\t\t}, num.bullet.style);\r\n\r\n\t\t\t\tthis.document.loadNumberingImage(num.bullet.src).then(data => {\r\n\t\t\t\t\tvar text = `${this.rootSelector} { ${valiable}: url(${data}) }`;\r\n\t\t\t\t\tstyleContainer.appendChild(createStyleElement(text));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse if (num.levelText) {\r\n\t\t\t\tlet counter = this.numberingCounter(num.id, num.level);\r\n\r\n\t\t\t\tif (num.level > 0) {\r\n\t\t\t\t\tstyleText += this.styleToString(`p.${this.numberingClass(num.id, num.level - 1)}`, {\r\n\t\t\t\t\t\t\"counter-reset\": counter\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\trootCounters.push(counter);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstyleText += this.styleToString(`${selector}:before`, {\r\n\t\t\t\t\t\"content\": this.levelTextToContent(num.levelText, num.suff, num.id, this.numFormatToCssValue(num.format)),\r\n\t\t\t\t\t\"counter-increment\": counter,\r\n\t\t\t\t\t...num.rStyle,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlistStyleType = this.numFormatToCssValue(num.format);\r\n\t\t\t}\r\n\r\n\t\t\tstyleText += this.styleToString(selector, {\r\n\t\t\t\t\"display\": \"list-item\",\r\n\t\t\t\t\"list-style-position\": \"inside\",\r\n\t\t\t\t\"list-style-type\": listStyleType,\r\n\t\t\t\t...num.pStyle\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (rootCounters.length > 0) {\r\n\t\t\tstyleText += this.styleToString(this.rootSelector, {\r\n\t\t\t\t\"counter-reset\": rootCounters.join(\" \")\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn createStyleElement(styleText);\r\n\t}\r\n\r\n\trenderStyles(styles: IDomStyle[]): HTMLElement {\r\n\t\tvar styleText = \"\";\r\n\t\tconst stylesMap = this.styleMap;\r\n\t\tconst defautStyles = keyBy(styles.filter(s => s.isDefault), s => s.target);\r\n\r\n\t\tfor (const style of styles) {\r\n\t\t\tvar subStyles = style.styles;\r\n\r\n\t\t\tif (style.linked) {\r\n\t\t\t\tvar linkedStyle = style.linked && stylesMap[style.linked];\r\n\r\n\t\t\t\tif (linkedStyle)\r\n\t\t\t\t\tsubStyles = subStyles.concat(linkedStyle.styles);\r\n\t\t\t\telse if (this.options.debug)\r\n\t\t\t\t\tconsole.warn(`Can't find linked style ${style.linked}`);\r\n\t\t\t}\r\n\r\n\t\t\tfor (const subStyle of subStyles) {\r\n\t\t\t\t//TODO temporary disable modificators until test it well\r\n\t\t\t\tvar selector = `${style.target ?? ''}.${style.cssName}`; //${subStyle.mod ?? ''} \r\n\r\n\t\t\t\tif (style.target != subStyle.target)\r\n\t\t\t\t\tselector += ` ${subStyle.target}`;\r\n\r\n\t\t\t\tif (defautStyles[style.target] == style)\r\n\t\t\t\t\tselector = `.${this.className} ${style.target}, ` + selector;\r\n\r\n\t\t\t\tstyleText += this.styleToString(selector, subStyle.values);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn createStyleElement(styleText);\r\n\t}\r\n\r\n\trenderNotes(noteIds: string[], notesMap: Record, into: HTMLElement) {\r\n\t\tvar notes = noteIds.map(id => notesMap[id]).filter(x => x);\r\n\r\n\t\tif (notes.length > 0) {\r\n\t\t\tvar result = this.createElement(\"ol\", null, this.renderElements(notes));\r\n\t\t\tinto.appendChild(result);\r\n\t\t}\r\n\t}\r\n\r\n\trenderElement(elem: OpenXmlElement): Node | Node[] {\r\n\t\tswitch (elem.type) {\r\n\t\t\tcase DomType.Paragraph:\r\n\t\t\t\treturn this.renderParagraph(elem as WmlParagraph);\r\n\r\n\t\t\tcase DomType.BookmarkStart:\r\n\t\t\t\treturn this.renderBookmarkStart(elem as WmlBookmarkStart);\r\n\r\n\t\t\tcase DomType.BookmarkEnd:\r\n\t\t\t\treturn null; //ignore bookmark end\r\n\r\n\t\t\tcase DomType.Run:\r\n\t\t\t\treturn this.renderRun(elem as WmlRun);\r\n\r\n\t\t\tcase DomType.Table:\r\n\t\t\t\treturn this.renderTable(elem);\r\n\r\n\t\t\tcase DomType.Row:\r\n\t\t\t\treturn this.renderTableRow(elem);\r\n\r\n\t\t\tcase DomType.Cell:\r\n\t\t\t\treturn this.renderTableCell(elem);\r\n\r\n\t\t\tcase DomType.Hyperlink:\r\n\t\t\t\treturn this.renderHyperlink(elem);\r\n\r\n\t\t\tcase DomType.Drawing:\r\n\t\t\t\treturn this.renderDrawing(elem);\r\n\r\n\t\t\tcase DomType.Image:\r\n\t\t\t\treturn this.renderImage(elem as IDomImage);\r\n\r\n\t\t\tcase DomType.Text:\r\n\t\t\t\treturn this.renderText(elem as WmlText);\r\n\r\n\t\t\tcase DomType.Text:\r\n\t\t\t\treturn this.renderText(elem as WmlText);\r\n\r\n\t\t\tcase DomType.DeletedText:\r\n\t\t\t\treturn this.renderDeletedText(elem as WmlText);\r\n\t\r\n\t\t\tcase DomType.Tab:\r\n\t\t\t\treturn this.renderTab(elem);\r\n\r\n\t\t\tcase DomType.Symbol:\r\n\t\t\t\treturn this.renderSymbol(elem as WmlSymbol);\r\n\r\n\t\t\tcase DomType.Break:\r\n\t\t\t\treturn this.renderBreak(elem as WmlBreak);\r\n\r\n\t\t\tcase DomType.Footer:\r\n\t\t\t\treturn this.renderContainer(elem, \"footer\");\r\n\r\n\t\t\tcase DomType.Header:\r\n\t\t\t\treturn this.renderContainer(elem, \"header\");\r\n\r\n\t\t\tcase DomType.Footnote:\r\n\t\t\tcase DomType.Endnote:\r\n\t\t\t\treturn this.renderContainer(elem, \"li\");\r\n\r\n\t\t\tcase DomType.FootnoteReference:\r\n\t\t\t\treturn this.renderFootnoteReference(elem as WmlNoteReference);\r\n\r\n\t\t\tcase DomType.EndnoteReference:\r\n\t\t\t\treturn this.renderEndnoteReference(elem as WmlNoteReference);\r\n\r\n\t\t\tcase DomType.NoBreakHyphen:\r\n\t\t\t\treturn this.createElement(\"wbr\");\r\n\r\n\t\t\tcase DomType.VmlPicture:\r\n\t\t\t\treturn this.renderVmlPicture(elem);\r\n\r\n\t\t\tcase DomType.VmlElement:\r\n\t\t\t\treturn this.renderVmlElement(elem as VmlElement);\r\n\t\r\n\t\t\tcase DomType.MmlMath:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \"math\", { xmlns: ns.mathML });\r\n\t\r\n\t\t\tcase DomType.MmlMathParagraph:\r\n\t\t\t\treturn this.renderContainer(elem, \"span\");\r\n\r\n\t\t\tcase DomType.MmlFraction:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \"mfrac\");\r\n\r\n\t\t\tcase DomType.MmlNumerator:\r\n\t\t\tcase DomType.MmlDenominator:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \"mrow\");\r\n\r\n\t\t\tcase DomType.MmlRadical:\r\n\t\t\t\treturn this.renderMmlRadical(elem);\r\n\r\n\t\t\tcase DomType.MmlDegree:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \"mn\");\r\n\r\n\t\t\tcase DomType.MmlSuperscript:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \"msup\");\r\n\r\n\t\t\tcase DomType.MmlSubscript:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \"msub\");\r\n\t\r\n\t\t\tcase DomType.MmlBase:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \"mrow\");\r\n\r\n\t\t\tcase DomType.MmlSuperArgument:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \"mn\");\r\n\r\n\t\t\tcase DomType.MmlSubArgument:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \"mn\");\r\n\r\n\t\t\tcase DomType.MmlDelimiter:\r\n\t\t\t\treturn this.renderMmlDelimiter(elem);\r\n\r\n\t\t\tcase DomType.MmlRun:\r\n\t\t\t\treturn this.renderMmlRun(elem);\r\n\r\n\t\t\tcase DomType.MmlNary:\r\n\t\t\t\treturn this.renderMmlNary(elem);\r\n\r\n\t\t\tcase DomType.Inserted:\r\n\t\t\t\treturn this.renderInserted(elem);\r\n\r\n\t\t\tcase DomType.Deleted:\r\n\t\t\t\treturn this.renderDeleted(elem);\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\trenderChildren(elem: OpenXmlElement, into?: Element): Node[] {\r\n\t\treturn this.renderElements(elem.children, into);\r\n\t}\r\n\r\n\trenderElements(elems: OpenXmlElement[], into?: Element): Node[] {\r\n\t\tif (elems == null)\r\n\t\t\treturn null;\r\n\r\n\t\tvar result = elems.flatMap(e => this.renderElement(e)).filter(e => e != null);\r\n\r\n\t\tif (into)\r\n\t\t\tappendChildren(into, result);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderContainer(elem: OpenXmlElement, tagName: keyof HTMLElementTagNameMap, props?: Record) {\r\n\t\treturn this.createElement(tagName, props, this.renderChildren(elem));\r\n\t}\r\n\r\n\trenderContainerNS(elem: OpenXmlElement, ns: string, tagName: string, props?: Record) {\r\n\t\treturn createElementNS(ns, tagName, props, this.renderChildren(elem));\r\n\t}\r\n\r\n\trenderParagraph(elem: WmlParagraph) {\r\n\t\tvar result = this.createElement(\"p\");\r\n\r\n\t\tconst style = this.findStyle(elem.styleName);\r\n\t\telem.tabs ??= style?.paragraphProps?.tabs; //TODO\r\n\r\n\t\tthis.renderClass(elem, result);\r\n\t\tthis.renderChildren(elem, result);\r\n\t\tthis.renderStyleValues(elem.cssStyle, result);\r\n\t\tthis.renderCommonProperties(result.style, elem);\r\n\r\n\t\tconst numbering = elem.numbering ?? style?.paragraphProps?.numbering;\r\n\r\n\t\tif (numbering) {\r\n\t\t\tresult.classList.add(this.numberingClass(numbering.id, numbering.level));\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderRunProperties(style: any, props: RunProperties) {\r\n\t\tthis.renderCommonProperties(style, props);\r\n\t}\r\n\r\n\trenderCommonProperties(style: any, props: CommonProperties) {\r\n\t\tif (props == null)\r\n\t\t\treturn;\r\n\r\n\t\tif (props.color) {\r\n\t\t\tstyle[\"color\"] = props.color;\r\n\t\t}\r\n\r\n\t\tif (props.fontSize) {\r\n\t\t\tstyle[\"font-size\"] = props.fontSize;\r\n\t\t}\r\n\t}\r\n\r\n\trenderHyperlink(elem: WmlHyperlink) {\r\n\t\tvar result = this.createElement(\"a\");\r\n\r\n\t\tthis.renderChildren(elem, result);\r\n\t\tthis.renderStyleValues(elem.cssStyle, result);\r\n\r\n\t\tif (elem.href) {\r\n\t\t\tresult.href = elem.href;\r\n\t\t} else if(elem.id) {\r\n\t\t\tconst rel = this.document.documentPart.rels\r\n\t\t\t\t.find(it => it.id == elem.id && it.targetMode === \"External\");\r\n\t\t\tresult.href = rel?.target;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderDrawing(elem: OpenXmlElement) {\r\n\t\tvar result = this.createElement(\"div\");\r\n\r\n\t\tresult.style.display = \"inline-block\";\r\n\t\tresult.style.position = \"relative\";\r\n\t\tresult.style.textIndent = \"0px\";\r\n\r\n\t\tthis.renderChildren(elem, result);\r\n\t\tthis.renderStyleValues(elem.cssStyle, result);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderImage(elem: IDomImage) {\r\n\t\tlet result = this.createElement(\"img\");\r\n\r\n\t\tthis.renderStyleValues(elem.cssStyle, result);\r\n\r\n\t\tif (this.document) {\r\n\t\t\tthis.document.loadDocumentImage(elem.src, this.currentPart).then(x => {\r\n\t\t\t\tresult.src = x;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderText(elem: WmlText) {\r\n\t\treturn this.htmlDocument.createTextNode(elem.text);\r\n\t}\r\n\r\n\trenderDeletedText(elem: WmlText) {\r\n\t\treturn this.options.renderEndnotes ? this.htmlDocument.createTextNode(elem.text) : null;\r\n\t}\r\n\r\n\trenderBreak(elem: WmlBreak) {\r\n\t\tif (elem.break == \"textWrapping\") {\r\n\t\t\treturn this.createElement(\"br\");\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\trenderInserted(elem: OpenXmlElement): Node | Node[] {\r\n\t\tif (this.options.renderChanges)\r\n\t\t\treturn this.renderContainer(elem, \"ins\");\r\n\r\n\t\treturn this.renderChildren(elem);\r\n\t}\r\n\r\n\trenderDeleted(elem: OpenXmlElement): Node {\r\n\t\tif (this.options.renderChanges)\r\n\t\t\treturn this.renderContainer(elem, \"del\");\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\trenderSymbol(elem: WmlSymbol) {\r\n\t\tvar span = this.createElement(\"span\");\r\n\t\tspan.style.fontFamily = elem.font;\r\n\t\tspan.innerHTML = `&#x${elem.char};`\r\n\t\treturn span;\r\n\t}\r\n\r\n\trenderFootnoteReference(elem: WmlNoteReference) {\r\n\t\tvar result = this.createElement(\"sup\");\r\n\t\tthis.currentFootnoteIds.push(elem.id);\r\n\t\tresult.textContent = `${this.currentFootnoteIds.length}`;\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderEndnoteReference(elem: WmlNoteReference) {\r\n\t\tvar result = this.createElement(\"sup\");\r\n\t\tthis.currentEndnoteIds.push(elem.id);\r\n\t\tresult.textContent = `${this.currentEndnoteIds.length}`;\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderTab(elem: OpenXmlElement) {\r\n\t\tvar tabSpan = this.createElement(\"span\");\r\n\r\n\t\ttabSpan.innerHTML = \" \";//\" \";\r\n\r\n\t\tif (this.options.experimental) {\r\n\t\t\ttabSpan.className = this.tabStopClass();\r\n\t\t\tvar stops = findParent(elem, DomType.Paragraph)?.tabs;\r\n\t\t\tthis.currentTabs.push({ stops, span: tabSpan });\r\n\t\t}\r\n\r\n\t\treturn tabSpan;\r\n\t}\r\n\r\n\trenderBookmarkStart(elem: WmlBookmarkStart): HTMLElement {\r\n\t\tvar result = this.createElement(\"span\");\r\n\t\tresult.id = elem.name;\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderRun(elem: WmlRun) {\r\n\t\tif (elem.fieldRun)\r\n\t\t\treturn null;\r\n\r\n\t\tconst result = this.createElement(\"span\");\r\n\r\n\t\tif (elem.id)\r\n\t\t\tresult.id = elem.id;\r\n\r\n\t\tthis.renderClass(elem, result);\r\n\t\tthis.renderStyleValues(elem.cssStyle, result);\r\n\r\n\t\tif (elem.verticalAlign) {\r\n\t\t\tconst wrapper = this.createElement(elem.verticalAlign as any);\r\n\t\t\tthis.renderChildren(elem, wrapper);\r\n\t\t\tresult.appendChild(wrapper);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.renderChildren(elem, result);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderTable(elem: WmlTable) {\r\n\t\tlet result = this.createElement(\"table\");\r\n\r\n\t\tthis.tableCellPositions.push(this.currentCellPosition);\r\n\t\tthis.tableVerticalMerges.push(this.currentVerticalMerge);\r\n\t\tthis.currentVerticalMerge = {};\r\n\t\tthis.currentCellPosition = { col: 0, row: 0 };\r\n\r\n\t\tif (elem.columns)\r\n\t\t\tresult.appendChild(this.renderTableColumns(elem.columns));\r\n\r\n\t\tthis.renderClass(elem, result);\r\n\t\tthis.renderChildren(elem, result);\r\n\t\tthis.renderStyleValues(elem.cssStyle, result);\r\n\r\n\t\tthis.currentVerticalMerge = this.tableVerticalMerges.pop();\r\n\t\tthis.currentCellPosition = this.tableCellPositions.pop();\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderTableColumns(columns: WmlTableColumn[]) {\r\n\t\tlet result = this.createElement(\"colgroup\");\r\n\r\n\t\tfor (let col of columns) {\r\n\t\t\tlet colElem = this.createElement(\"col\");\r\n\r\n\t\t\tif (col.width)\r\n\t\t\t\tcolElem.style.width = col.width;\r\n\r\n\t\t\tresult.appendChild(colElem);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderTableRow(elem: OpenXmlElement) {\r\n\t\tlet result = this.createElement(\"tr\");\r\n\r\n\t\tthis.currentCellPosition.col = 0;\r\n\r\n\t\tthis.renderClass(elem, result);\r\n\t\tthis.renderChildren(elem, result);\r\n\t\tthis.renderStyleValues(elem.cssStyle, result);\r\n\r\n\t\tthis.currentCellPosition.row++;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderTableCell(elem: WmlTableCell) {\r\n\t\tlet result = this.createElement(\"td\");\r\n\r\n\t\tconst key = this.currentCellPosition.col;\r\n\r\n\t\tif (elem.verticalMerge) {\r\n\t\t\tif (elem.verticalMerge == \"restart\") {\r\n\t\t\t\tthis.currentVerticalMerge[key] = result;\r\n\t\t\t\tresult.rowSpan = 1;\r\n\t\t\t} else if (this.currentVerticalMerge[key]) {\r\n\t\t\t\tthis.currentVerticalMerge[key].rowSpan += 1;\r\n\t\t\t\tresult.style.display = \"none\";\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.currentVerticalMerge[key] = null;\r\n\t\t}\r\n\r\n\t\tthis.renderClass(elem, result);\r\n\t\tthis.renderChildren(elem, result);\r\n\t\tthis.renderStyleValues(elem.cssStyle, result);\r\n\r\n\t\tif (elem.span)\r\n\t\t\tresult.colSpan = elem.span;\r\n\r\n\t\tthis.currentCellPosition.col += result.colSpan;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderVmlPicture(elem: OpenXmlElement) {\r\n\t\tvar result = createElement(\"div\");\r\n\t\tthis.renderChildren(elem, result);\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderVmlElement(elem: VmlElement): SVGElement {\r\n\t\tvar container = createSvgElement(\"svg\");\r\n\r\n\t\tcontainer.setAttribute(\"style\", elem.cssStyleText);\r\n\r\n\t\tconst result = createSvgElement(elem.tagName as any);\r\n\t\tObject.entries(elem.attrs).forEach(([k, v]) => result.setAttribute(k, v));\r\n\r\n\t\tif (elem.imageHref?.id) {\r\n\t\t\tthis.document?.loadDocumentImage(elem.imageHref.id, this.currentPart)\r\n\t\t\t\t.then(x => result.setAttribute(\"href\", x));\r\n\t\t}\r\n\t\t\r\n\t\tcontainer.appendChild(result);\r\n\r\n\t\trequestAnimationFrame(() => {\r\n\t\t\tconst bb = (container.firstElementChild as any).getBBox();\r\n\r\n\t\t\tcontainer.setAttribute(\"width\", `${Math.ceil(bb.x + bb.width)}`);\r\n\t\t\tcontainer.setAttribute(\"height\", `${Math.ceil(bb.y + bb.height)}`);\r\n\t\t});\r\n\r\n\t\treturn container;\r\n\t}\r\n\r\n\trenderMmlRadical(elem: OpenXmlElement): HTMLElement {\r\n\t\tconst base = elem.children.find(el => el.type == DomType.MmlBase);\r\n\r\n\t\tif (elem.props?.hideDegree) {\r\n\t\t\treturn createElementNS(ns.mathML, \"msqrt\", null, this.renderElements([base]));\r\n\t\t}\r\n\r\n\t\tconst degree = elem.children.find(el => el.type == DomType.MmlDegree);\r\n\t\treturn createElementNS(ns.mathML, \"mroot\", null, this.renderElements([base, degree]));\r\n\t}\r\n\r\n\trenderMmlDelimiter(elem: OpenXmlElement): HTMLElement {\t\t\r\n\t\tconst children = [];\r\n\r\n\t\tchildren.push(createElementNS(ns.mathML, \"mo\", null, [elem.props.beginChar ?? '(']));\r\n\t\tchildren.push(...this.renderElements(elem.children));\r\n\t\tchildren.push(createElementNS(ns.mathML, \"mo\", null, [elem.props.endChar ?? ')']));\r\n\r\n\t\treturn createElementNS(ns.mathML, \"mrow\", null, children);\r\n\t}\r\n\r\n\trenderMmlNary(elem: OpenXmlElement): HTMLElement {\t\t\r\n\t\tconst children = [];\r\n\t\tconst grouped = keyBy(elem.children, x => x.type);\r\n\r\n\t\tconst sup = grouped[DomType.MmlSuperArgument];\r\n\t\tconst sub = grouped[DomType.MmlSubArgument];\r\n\t\tconst supElem = sup ? createElementNS(ns.mathML, \"mo\", null, asArray(this.renderElement(sup))) : null;\r\n\t\tconst subElem = sub ? createElementNS(ns.mathML, \"mo\", null, asArray(this.renderElement(sub))) : null;\r\n\r\n\t\tif (elem.props?.char) {\r\n\t\t\tconst charElem = createElementNS(ns.mathML, \"mo\", null, [elem.props.char]);\r\n\r\n\t\t\tif (supElem || subElem) {\r\n\t\t\t\tchildren.push(createElementNS(ns.mathML, \"munderover\", null, [charElem, subElem, supElem]));\r\n\t\t\t} else if(supElem) {\r\n\t\t\t\tchildren.push(createElementNS(ns.mathML, \"mover\", null, [charElem, supElem]));\r\n\t\t\t} else if(subElem) {\r\n\t\t\t\tchildren.push(createElementNS(ns.mathML, \"munder\", null, [charElem, subElem]));\r\n\t\t\t} else {\r\n\t\t\t\tchildren.push(charElem);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tchildren.push(...this.renderElements(grouped[DomType.MmlBase].children));\r\n\r\n\t\treturn createElementNS(ns.mathML, \"mrow\", null, children);\r\n\t}\r\n\r\n\trenderMmlRun(elem: OpenXmlElement) {\r\n\t\tconst result = createElementNS(ns.mathML, \"ms\");\r\n\r\n\t\tthis.renderClass(elem, result);\r\n\t\tthis.renderStyleValues(elem.cssStyle, result);\r\n\t\tthis.renderChildren(elem, result);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderStyleValues(style: Record, ouput: HTMLElement) {\r\n\t\tfor (let k in style) {\r\n\t\t\tif (k.startsWith(\"$\")) {\r\n\t\t\t\touput.setAttribute(k.slice(1), style[k]);\r\n\t\t\t} else {\r\n\t\t\t\touput.style[k] = style[k];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trenderClass(input: OpenXmlElement, ouput: HTMLElement) {\r\n\t\tif (input.className)\r\n\t\t\touput.className = input.className;\r\n\r\n\t\tif (input.styleName)\r\n\t\t\touput.classList.add(this.processStyleName(input.styleName));\r\n\t}\r\n\r\n\tfindStyle(styleName: string) {\r\n\t\treturn styleName && this.styleMap?.[styleName];\r\n\t}\r\n\r\n\tnumberingClass(id: string, lvl: number) {\r\n\t\treturn `${this.className}-num-${id}-${lvl}`;\r\n\t}\r\n\r\n\ttabStopClass() {\r\n\t\treturn `${this.className}-tab-stop`;\r\n\t}\r\n\r\n\tstyleToString(selectors: string, values: Record, cssText: string = null) {\r\n\t\tlet result = `${selectors} {\\r\\n`;\r\n\r\n\t\tfor (const key in values) {\r\n\t\t\tif (key.startsWith('$'))\r\n\t\t\t\tcontinue;\r\n\t\t\t\r\n\t\t\tresult += ` ${key}: ${values[key]};\\r\\n`;\r\n\t\t}\r\n\r\n\t\tif (cssText)\r\n\t\t\tresult += cssText;\r\n\r\n\t\treturn result + \"}\\r\\n\";\r\n\t}\r\n\r\n\tnumberingCounter(id: string, lvl: number) {\r\n\t\treturn `${this.className}-num-${id}-${lvl}`;\r\n\t}\r\n\r\n\tlevelTextToContent(text: string, suff: string, id: string, numformat: string) {\r\n\t\tconst suffMap = {\r\n\t\t\t\"tab\": \"\\\\9\",\r\n\t\t\t\"space\": \"\\\\a0\",\r\n\t\t};\r\n\r\n\t\tvar result = text.replace(/%\\d*/g, s => {\r\n\t\t\tlet lvl = parseInt(s.substring(1), 10) - 1;\r\n\t\t\treturn `\"counter(${this.numberingCounter(id, lvl)}, ${numformat})\"`;\r\n\t\t});\r\n\r\n\t\treturn `\"${result}${suffMap[suff] ?? \"\"}\"`;\r\n\t}\r\n\r\n\tnumFormatToCssValue(format: string) {\r\n\t\tvar mapping = {\r\n\t\t\tnone: \"none\",\r\n\t\t\tbullet: \"disc\",\r\n\t\t\tdecimal: \"decimal\",\r\n\t\t\tlowerLetter: \"lower-alpha\",\r\n\t\t\tupperLetter: \"upper-alpha\",\r\n\t\t\tlowerRoman: \"lower-roman\",\r\n\t\t\tupperRoman: \"upper-roman\",\r\n\t\t\tdecimalZero: \"decimal-leading-zero\", // 01,02,03,...\r\n\t\t\t// ordinal: \"\", // 1st, 2nd, 3rd,...\r\n\t\t\t// ordinalText: \"\", //First, Second, Third, ...\r\n\t\t\t// cardinalText: \"\", //One,Two Three,...\r\n\t\t\t// numberInDash: \"\", //-1-,-2-,-3-, ...\r\n\t\t\t// hex: \"upper-hexadecimal\",\r\n\t\t\taiueo: \"katakana\",\r\n\t\t\taiueoFullWidth: \"katakana\",\r\n\t\t\tchineseCounting: \"simp-chinese-informal\",\r\n\t\t\tchineseCountingThousand: \"simp-chinese-informal\",\r\n\t\t\tchineseLegalSimplified: \"simp-chinese-formal\", // 中文大写\r\n\t\t\tchosung: \"hangul-consonant\",\r\n\t\t\tideographDigital: \"cjk-ideographic\",\r\n\t\t\tideographTraditional: \"cjk-heavenly-stem\", // 十天干\r\n\t\t\tideographLegalTraditional: \"trad-chinese-formal\",\r\n\t\t\tideographZodiac: \"cjk-earthly-branch\", // 十二地支\r\n\t\t\tiroha: \"katakana-iroha\",\r\n\t\t\tirohaFullWidth: \"katakana-iroha\",\r\n\t\t\tjapaneseCounting: \"japanese-informal\",\r\n\t\t\tjapaneseDigitalTenThousand: \"cjk-decimal\",\r\n\t\t\tjapaneseLegal: \"japanese-formal\",\r\n\t\t\tthaiNumbers: \"thai\",\r\n\t\t\tkoreanCounting: \"korean-hangul-formal\",\r\n\t\t\tkoreanDigital: \"korean-hangul-formal\",\r\n\t\t\tkoreanDigital2: \"korean-hanja-informal\",\r\n\t\t\thebrew1: \"hebrew\",\r\n\t\t\thebrew2: \"hebrew\",\r\n\t\t\thindiNumbers: \"devanagari\",\r\n\t\t\tganada: \"hangul\",\r\n\t\t\ttaiwaneseCounting: \"cjk-ideographic\",\r\n\t\t\ttaiwaneseCountingThousand: \"cjk-ideographic\",\r\n\t\t\ttaiwaneseDigital: \"cjk-decimal\",\r\n\t\t};\r\n\r\n\t\treturn mapping[format] ?? format;\r\n\t}\r\n\r\n\trefreshTabStops() {\r\n\t\tif (!this.options.experimental)\r\n\t\t\treturn;\r\n\r\n\t\tclearTimeout(this.tabsTimeout);\r\n\r\n\t\tthis.tabsTimeout = setTimeout(() => {\r\n\t\t\tconst pixelToPoint = computePixelToPoint();\r\n\r\n\t\t\tfor (let tab of this.currentTabs) {\r\n\t\t\t\tupdateTabStop(tab.span, tab.stops, this.defaultTabSize, pixelToPoint);\r\n\t\t\t}\r\n\t\t}, 500);\r\n\t}\r\n\r\n\tcreateElement = createElement;\r\n}\r\n\r\ntype ChildType = Node | string;\r\n\r\nfunction createElement(\r\n\ttagName: T,\r\n\tprops?: Partial>,\r\n\tchildren?: ChildType[]\r\n): HTMLElementTagNameMap[T] {\r\n\treturn createElementNS(undefined, tagName, props, children);\r\n}\r\n\r\nfunction createSvgElement(\r\n\ttagName: T,\r\n\tprops?: Partial>,\r\n\tchildren?: ChildType[]\r\n): SVGElementTagNameMap[T] {\r\n\treturn createElementNS(ns.svg, tagName, props, children);\r\n}\r\n\r\nfunction createElementNS(ns: string, tagName: string, props?: Partial>, children?: ChildType[]): any {\r\n\tvar result = ns ? document.createElementNS(ns, tagName) : document.createElement(tagName);\r\n\tObject.assign(result, props);\r\n\tchildren && appendChildren(result, children);\r\n\treturn result;\r\n}\r\n\r\nfunction removeAllElements(elem: HTMLElement) {\r\n\telem.innerHTML = '';\r\n}\r\n\r\nfunction appendChildren(elem: Element, children: (Node | string)[]) {\r\n\tchildren.forEach(c => elem.appendChild(isString(c) ? document.createTextNode(c) : c));\r\n}\r\n\r\nfunction createStyleElement(cssText: string) {\r\n\treturn createElement(\"style\", { innerHTML: cssText });\r\n}\r\n\r\nfunction appendComment(elem: HTMLElement, comment: string) {\r\n\telem.appendChild(document.createComment(comment));\r\n}\r\n\r\nfunction findParent(elem: OpenXmlElement, type: DomType): T {\r\n\tvar parent = elem.parent;\r\n\r\n\twhile (parent != null && parent.type != type)\r\n\t\tparent = parent.parent;\r\n\r\n\treturn parent;\r\n}\r\n","import { Length } from \"./document/common\";\r\nimport { ParagraphTab } from \"./document/paragraph\";\r\n\r\ninterface TabStop {\r\n\tpos: number;\r\n\tleader: string;\r\n\tstyle: string;\r\n}\r\n\r\nconst defaultTab: TabStop = { pos: 0, leader: \"none\", style: \"left\" };\r\nconst maxTabs = 50;\r\n\r\nexport function computePixelToPoint(container: HTMLElement = document.body) {\r\n\tconst temp = document.createElement(\"div\");\r\n\ttemp.style.width = '100pt';\r\n\t\r\n\tcontainer.appendChild(temp);\r\n\tconst result = 100 / temp.offsetWidth;\r\n\tcontainer.removeChild(temp);\r\n\r\n\treturn result\r\n}\r\n\r\nexport function updateTabStop(elem: HTMLElement, tabs: ParagraphTab[], defaultTabSize: Length, pixelToPoint: number = 72 / 96) {\r\n const p = elem.closest(\"p\");\r\n\r\n const ebb = elem.getBoundingClientRect();\r\n const pbb = p.getBoundingClientRect();\r\n const pcs = getComputedStyle(p);\r\n\r\n\tconst tabStops = tabs?.length > 0 ? tabs.map(t => ({\r\n\t\tpos: lengthToPoint(t.position),\r\n\t\tleader: t.leader,\r\n\t\tstyle: t.style\r\n\t})).sort((a, b) => a.pos - b.pos) : [defaultTab];\r\n\r\n\tconst lastTab = tabStops[tabStops.length - 1];\r\n\tconst pWidthPt = pbb.width * pixelToPoint;\r\n\tconst size = lengthToPoint(defaultTabSize);\r\n let pos = lastTab.pos + size;\r\n\r\n if (pos < pWidthPt) {\r\n for (; pos < pWidthPt && tabStops.length < maxTabs; pos += size) {\r\n tabStops.push({ ...defaultTab, pos: pos });\r\n }\r\n }\r\n\r\n const marginLeft = parseFloat(pcs.marginLeft);\r\n const pOffset = pbb.left + marginLeft;\r\n const left = (ebb.left - pOffset) * pixelToPoint;\r\n const tab = tabStops.find(t => t.style != \"clear\" && t.pos > left);\r\n\r\n if(tab == null)\r\n return;\r\n\r\n let width: number = 1;\r\n\r\n if (tab.style == \"right\" || tab.style == \"center\") {\r\n\t\tconst tabStops = Array.from(p.querySelectorAll(`.${elem.className}`));\r\n\t\tconst nextIdx = tabStops.indexOf(elem) + 1;\r\n const range = document.createRange();\r\n range.setStart(elem, 1);\r\n\r\n\t\tif (nextIdx < tabStops.length) {\r\n\t\t\trange.setEndBefore(tabStops[nextIdx]);\r\n\t\t} else {\r\n\t\t\trange.setEndAfter(p);\r\n\t\t}\r\n\r\n\t\tconst mul = tab.style == \"center\" ? 0.5 : 1;\r\n const nextBB = range.getBoundingClientRect();\r\n\t\tconst offset = nextBB.left + mul * nextBB.width - (pbb.left - marginLeft);\r\n\r\n\t\twidth = tab.pos - offset * pixelToPoint;\r\n } else {\r\n width = tab.pos - left;\r\n }\r\n\r\n elem.innerHTML = \" \";\r\n elem.style.textDecoration = \"inherit\";\r\n elem.style.wordSpacing = `${width.toFixed(0)}pt`;\r\n\r\n switch (tab.leader) {\r\n case \"dot\":\r\n case \"middleDot\":\r\n elem.style.textDecoration = \"underline\";\r\n elem.style.textDecorationStyle = \"dotted\";\r\n break;\r\n\r\n case \"hyphen\":\r\n case \"heavy\":\r\n case \"underscore\":\r\n elem.style.textDecoration = \"underline\";\r\n break;\r\n }\r\n}\r\n\r\nfunction lengthToPoint(length: Length): number {\r\n\treturn parseFloat(length);\r\n}","import { OpenXmlElementBase, DomType } from \"../document/dom\";\r\n\r\nexport abstract class WmlBaseNote implements OpenXmlElementBase {\r\n type: DomType;\r\n id: string;\r\n\tnoteType: string;\r\n}\r\n\r\nexport class WmlFootnote extends WmlBaseNote {\r\n\ttype = DomType.Footnote\r\n}\r\n\r\nexport class WmlEndnote extends WmlBaseNote {\r\n\ttype = DomType.Endnote\r\n}","import { OpenXmlPackage } from \"../common/open-xml-package\";\r\nimport { Part } from \"../common/part\";\r\nimport { DocumentParser } from \"../document-parser\";\r\nimport { WmlBaseNote, WmlEndnote, WmlFootnote } from \"./elements\";\r\n\r\nexport class BaseNotePart extends Part {\r\n protected _documentParser: DocumentParser;\r\n\r\n notes: T[]\r\n\r\n constructor(pkg: OpenXmlPackage, path: string, parser: DocumentParser) {\r\n super(pkg, path);\r\n this._documentParser = parser;\r\n }\r\n}\r\n\r\nexport class FootnotesPart extends BaseNotePart {\r\n constructor(pkg: OpenXmlPackage, path: string, parser: DocumentParser) {\r\n super(pkg, path, parser);\r\n }\r\n\r\n parseXml(root: Element) {\r\n this.notes = this._documentParser.parseNotes(root, \"footnote\", WmlFootnote);\r\n }\r\n}\r\n\r\nexport class EndnotesPart extends BaseNotePart {\r\n constructor(pkg: OpenXmlPackage, path: string, parser: DocumentParser) {\r\n super(pkg, path, parser);\r\n }\r\n\r\n parseXml(root: Element) {\r\n this.notes = this._documentParser.parseNotes(root, \"endnote\", WmlEndnote);\r\n }\r\n}","import { OpenXmlPackage } from \"../common/open-xml-package\";\r\nimport { Part } from \"../common/part\";\r\nimport { DocumentParser } from \"../document-parser\";\r\nimport { IDomNumbering } from \"../document/dom\";\r\nimport { AbstractNumbering, Numbering, NumberingBulletPicture, NumberingPartProperties, parseNumberingPart } from \"./numbering\";\r\n\r\nexport class NumberingPart extends Part implements NumberingPartProperties {\r\n private _documentParser: DocumentParser;\r\n\r\n constructor(pkg: OpenXmlPackage, path: string, parser: DocumentParser) {\r\n super(pkg, path);\r\n this._documentParser = parser;\r\n }\r\n\r\n numberings: Numbering[];\r\n abstractNumberings: AbstractNumbering[];\r\n bulletPictures: NumberingBulletPicture[];\r\n \r\n domNumberings: IDomNumbering[];\r\n\r\n parseXml(root: Element) {\r\n Object.assign(this, parseNumberingPart(root, this._package.xmlParser));\r\n this.domNumberings = this._documentParser.parseNumberingFile(root); \r\n }\r\n}","import { NumberingPicBullet } from \"../document/dom\";\r\nimport { ParagraphProperties, parseParagraphProperties } from \"../document/paragraph\";\r\nimport { parseRunProperties, RunProperties } from \"../document/run\";\r\nimport { XmlParser } from \"../parser/xml-parser\";\r\n\r\nexport interface NumberingPartProperties {\r\n numberings: Numbering[];\r\n abstractNumberings: AbstractNumbering[];\r\n bulletPictures: NumberingBulletPicture[];\r\n}\r\n\r\nexport interface Numbering {\r\n id: string;\r\n abstractId: string;\r\n overrides: NumberingLevelOverride[];\r\n}\r\n\r\nexport interface NumberingLevelOverride {\r\n level: number;\r\n start: number;\r\n numberingLevel: NumberingLevel;\r\n}\r\n\r\nexport interface AbstractNumbering {\r\n id: string;\r\n name: string;\r\n multiLevelType: \"singleLevel\" | \"multiLevel\" | \"hybridMultilevel\" | string;\r\n levels: NumberingLevel[];\r\n numberingStyleLink: string;\r\n styleLink: string;\r\n}\r\n\r\nexport interface NumberingLevel {\r\n level: number;\r\n start: string;\r\n restart: number;\r\n format: 'lowerRoman' | 'lowerLetter' | string;\r\n text: string;\r\n justification: string;\r\n bulletPictureId: string;\r\n paragraphStyle: string;\r\n paragraphProps: ParagraphProperties;\r\n runProps: RunProperties;\r\n}\r\n\r\nexport interface NumberingBulletPicture {\r\n id: string;\r\n referenceId: string;\r\n style: string;\r\n}\r\n\r\nexport function parseNumberingPart(elem: Element, xml: XmlParser): NumberingPartProperties {\r\n let result: NumberingPartProperties = {\r\n numberings: [],\r\n abstractNumberings: [],\r\n bulletPictures: []\r\n }\r\n \r\n for (let e of xml.elements(elem)) {\r\n switch (e.localName) {\r\n case \"num\":\r\n result.numberings.push(parseNumbering(e, xml));\r\n break;\r\n case \"abstractNum\":\r\n result.abstractNumberings.push(parseAbstractNumbering(e, xml));\r\n break;\r\n case \"numPicBullet\":\r\n result.bulletPictures.push(parseNumberingBulletPicture(e, xml));\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function parseNumbering(elem: Element, xml: XmlParser): Numbering {\r\n let result = {\r\n id: xml.attr(elem, 'numId'),\r\n overrides: []\r\n };\r\n\r\n for (let e of xml.elements(elem)) {\r\n switch (e.localName) {\r\n case \"abstractNumId\":\r\n result.abstractId = xml.attr(e, \"val\");\r\n break;\r\n case \"lvlOverride\":\r\n result.overrides.push(parseNumberingLevelOverrride(e, xml));\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function parseAbstractNumbering(elem: Element, xml: XmlParser): AbstractNumbering {\r\n let result = {\r\n id: xml.attr(elem, 'abstractNumId'),\r\n levels: []\r\n };\r\n\r\n for (let e of xml.elements(elem)) {\r\n switch (e.localName) {\r\n case \"name\":\r\n result.name = xml.attr(e, \"val\");\r\n break;\r\n case \"multiLevelType\":\r\n result.multiLevelType = xml.attr(e, \"val\");\r\n break;\r\n case \"numStyleLink\":\r\n result.numberingStyleLink = xml.attr(e, \"val\");\r\n break;\r\n case \"styleLink\":\r\n result.styleLink = xml.attr(e, \"val\");\r\n break;\r\n case \"lvl\":\r\n result.levels.push(parseNumberingLevel(e, xml));\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function parseNumberingLevel(elem: Element, xml: XmlParser): NumberingLevel {\r\n let result = {\r\n level: xml.intAttr(elem, 'ilvl')\r\n };\r\n\r\n for (let e of xml.elements(elem)) {\r\n switch (e.localName) {\r\n case \"start\":\r\n result.start = xml.attr(e, \"val\");\r\n break;\r\n case \"lvlRestart\":\r\n result.restart = xml.intAttr(e, \"val\");\r\n break;\r\n case \"numFmt\":\r\n result.format = xml.attr(e, \"val\");\r\n break;\r\n case \"lvlText\":\r\n result.text = xml.attr(e, \"val\");\r\n break;\r\n case \"lvlJc\":\r\n result.justification = xml.attr(e, \"val\");\r\n break;\r\n case \"lvlPicBulletId\":\r\n result.bulletPictureId = xml.attr(e, \"val\");\r\n break;\r\n case \"pStyle\":\r\n result.paragraphStyle = xml.attr(e, \"val\");\r\n break;\r\n case \"pPr\":\r\n result.paragraphProps = parseParagraphProperties(e, xml);\r\n break;\r\n case \"rPr\":\r\n result.runProps = parseRunProperties(e, xml);\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function parseNumberingLevelOverrride(elem: Element, xml: XmlParser): NumberingLevelOverride {\r\n let result = {\r\n level: xml.intAttr(elem, 'ilvl')\r\n };\r\n\r\n for (let e of xml.elements(elem)) {\r\n switch (e.localName) {\r\n case \"startOverride\":\r\n result.start = xml.intAttr(e, \"val\");\r\n break;\r\n case \"lvl\":\r\n result.numberingLevel = parseNumberingLevel(e, xml);\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function parseNumberingBulletPicture(elem: Element, xml: XmlParser): NumberingBulletPicture {\r\n //TODO\r\n var pict = xml.element(elem, \"pict\");\r\n var shape = pict && xml.element(pict, \"shape\");\r\n var imagedata = shape && xml.element(shape, \"imagedata\");\r\n\r\n return imagedata ? {\r\n id: xml.attr(elem, \"numPicBulletId\"),\r\n referenceId: xml.attr(imagedata, \"id\"),\r\n style: xml.attr(shape, \"style\")\r\n } : null;\r\n}","import { Length, LengthUsage, LengthUsageType, convertLength, convertBoolean } from \"../document/common\";\r\n\r\nexport function parseXmlString(xmlString: string, trimXmlDeclaration: boolean = false): Document {\r\n if (trimXmlDeclaration)\r\n xmlString = xmlString.replace(/<[?].*[?]>/, \"\");\r\n \r\n xmlString = removeUTF8BOM(xmlString);\r\n \r\n const result = new DOMParser().parseFromString(xmlString, \"application/xml\"); \r\n const errorText = hasXmlParserError(result);\r\n\r\n if (errorText)\r\n throw new Error(errorText);\r\n\r\n return result;\r\n}\r\n\r\nfunction hasXmlParserError(doc: Document) {\r\n return doc.getElementsByTagName(\"parsererror\")[0]?.textContent;\r\n}\r\n\r\nfunction removeUTF8BOM(data: string) {\r\n return data.charCodeAt(0) === 0xFEFF ? data.substring(1) : data;\r\n}\r\n\r\nexport function serializeXmlString(elem: Node): string {\r\n return new XMLSerializer().serializeToString(elem);\r\n}\r\n\r\nexport class XmlParser {\r\n elements(elem: Element, localName: string = null): Element[] {\r\n const result = [];\r\n\r\n for (let i = 0, l = elem.childNodes.length; i < l; i++) {\r\n let c = elem.childNodes.item(i);\r\n\r\n if (c.nodeType == 1 && (localName == null || (c as Element).localName == localName))\r\n result.push(c);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n element(elem: Element, localName: string): Element {\r\n for (let i = 0, l = elem.childNodes.length; i < l; i++) {\r\n let c = elem.childNodes.item(i);\r\n\r\n if (c.nodeType == 1 && (c as Element).localName == localName)\r\n return c as Element;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n elementAttr(elem: Element, localName: string, attrLocalName: string): string {\r\n var el = this.element(elem, localName);\r\n return el ? this.attr(el, attrLocalName) : undefined;\r\n }\r\n\r\n\tattrs(elem: Element) {\r\n\t\treturn Array.from(elem.attributes);\r\n\t}\r\n\r\n attr(elem: Element, localName: string): string {\r\n for (let i = 0, l = elem.attributes.length; i < l; i++) {\r\n let a = elem.attributes.item(i);\r\n\r\n if (a.localName == localName)\r\n return a.value;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n intAttr(node: Element, attrName: string, defaultValue: number = null): number {\r\n var val = this.attr(node, attrName);\r\n return val ? parseInt(val) : defaultValue;\r\n }\r\n\r\n\thexAttr(node: Element, attrName: string, defaultValue: number = null): number {\r\n var val = this.attr(node, attrName);\r\n return val ? parseInt(val, 16) : defaultValue;\r\n }\r\n\r\n floatAttr(node: Element, attrName: string, defaultValue: number = null): number {\r\n var val = this.attr(node, attrName);\r\n return val ? parseFloat(val) : defaultValue;\r\n }\r\n\r\n boolAttr(node: Element, attrName: string, defaultValue: boolean = null) {\r\n return convertBoolean(this.attr(node, attrName), defaultValue);\r\n }\r\n\r\n lengthAttr(node: Element, attrName: string, usage: LengthUsageType = LengthUsage.Dxa): Length {\r\n return convertLength(this.attr(node, attrName), usage);\r\n }\r\n}\r\n\r\nconst globalXmlParser = new XmlParser();\r\n\r\nexport default globalXmlParser;","import { OpenXmlPackage } from \"../common/open-xml-package\";\r\nimport { Part } from \"../common/part\";\r\nimport { WmlSettings, parseSettings } from \"./settings\";\r\n\r\nexport class SettingsPart extends Part {\r\n\tsettings: WmlSettings;\r\n\r\n\tconstructor(pkg: OpenXmlPackage, path: string) {\r\n\t\tsuper(pkg, path);\r\n\t}\r\n\r\n\tparseXml(root: Element) {\r\n\t\tthis.settings = parseSettings(root, this._package.xmlParser);\r\n\t}\r\n}","import { DocumentParser } from \"../document-parser\";\r\nimport { Length } from \"../document/common\";\r\nimport { XmlParser } from \"../parser/xml-parser\";\r\n\r\nexport interface WmlSettings {\r\n\tdefaultTabStop: Length;\r\n\tfootnoteProps: NoteProperties;\r\n\tendnoteProps: NoteProperties;\r\n\tautoHyphenation: boolean;\r\n}\r\n\r\nexport interface NoteProperties {\r\n\tnummeringFormat: string;\r\n\tdefaultNoteIds: string[];\r\n}\r\n\r\nexport function parseSettings(elem: Element, xml: XmlParser) {\r\n\tvar result = {} as WmlSettings; \r\n\r\n\tfor (let el of xml.elements(elem)) {\r\n\t\tswitch(el.localName) {\r\n\t\t\tcase \"defaultTabStop\": result.defaultTabStop = xml.lengthAttr(el, \"val\"); break;\r\n\t\t\tcase \"footnotePr\": result.footnoteProps = parseNoteProperties(el, xml); break;\r\n\t\t\tcase \"endnotePr\": result.endnoteProps = parseNoteProperties(el, xml); break;\r\n\t\t\tcase \"autoHyphenation\": result.autoHyphenation = xml.boolAttr(el, \"val\"); break;\r\n\t\t}\r\n\t}\r\n\r\n return result;\r\n}\r\n\r\nexport function parseNoteProperties(elem: Element, xml: XmlParser) {\r\n\tvar result = {\r\n\t\tdefaultNoteIds: []\r\n\t} as NoteProperties; \r\n\r\n\tfor (let el of xml.elements(elem)) {\r\n\t\tswitch(el.localName) {\r\n\t\t\tcase \"numFmt\": \r\n\t\t\t\tresult.nummeringFormat = xml.attr(el, \"val\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"footnote\": \r\n\t\t\tcase \"endnote\": \r\n\t\t\t\tresult.defaultNoteIds.push(xml.attr(el, \"id\"));\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n return result;\r\n}","import { OpenXmlPackage } from \"../common/open-xml-package\";\r\nimport { Part } from \"../common/part\";\r\nimport { DocumentParser } from \"../document-parser\";\r\nimport { IDomStyle } from \"../document/style\";\r\n\r\nexport class StylesPart extends Part {\r\n styles: IDomStyle[];\r\n\r\n private _documentParser: DocumentParser;\r\n\r\n constructor(pkg: OpenXmlPackage, path: string, parser: DocumentParser) {\r\n super(pkg, path);\r\n this._documentParser = parser;\r\n }\r\n\r\n parseXml(root: Element) {\r\n this.styles = this._documentParser.parseStylesFile(root); \r\n }\r\n}","import { OpenXmlPackage } from \"../common/open-xml-package\";\r\nimport { Part } from \"../common/part\";\r\nimport { DmlTheme, parseTheme } from \"./theme\";\r\n\r\nexport class ThemePart extends Part {\r\n theme: DmlTheme;\r\n\r\n constructor(pkg: OpenXmlPackage, path: string) {\r\n super(pkg, path);\r\n }\r\n\r\n parseXml(root: Element) {\r\n this.theme = parseTheme(root, this._package.xmlParser);\r\n }\r\n}","import { XmlParser } from \"../parser/xml-parser\";\r\n\r\nexport class DmlTheme {\r\n colorScheme: DmlColorScheme;\r\n fontScheme: DmlFontScheme;\r\n}\r\n\r\nexport interface DmlColorScheme {\r\n name: string;\r\n colors: Record;\r\n}\r\n\r\nexport interface DmlFontScheme {\r\n name: string;\r\n majorFont: DmlFormInfo,\r\n minorFont: DmlFormInfo\r\n}\r\n\r\nexport interface DmlFormInfo {\r\n latinTypeface: string;\r\n eaTypeface: string;\r\n csTypeface: string;\r\n}\r\n\r\nexport function parseTheme(elem: Element, xml: XmlParser) {\r\n var result = new DmlTheme();\r\n var themeElements = xml.element(elem, \"themeElements\");\r\n\r\n for (let el of xml.elements(themeElements)) {\r\n switch(el.localName) {\r\n case \"clrScheme\": result.colorScheme = parseColorScheme(el, xml); break;\r\n case \"fontScheme\": result.fontScheme = parseFontScheme(el, xml); break;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function parseColorScheme(elem: Element, xml: XmlParser) {\r\n var result: DmlColorScheme = { \r\n name: xml.attr(elem, \"name\"),\r\n colors: {}\r\n };\r\n\r\n for (let el of xml.elements(elem)) {\r\n var srgbClr = xml.element(el, \"srgbClr\");\r\n var sysClr = xml.element(el, \"sysClr\");\r\n\r\n if (srgbClr) {\r\n result.colors[el.localName] = xml.attr(srgbClr, \"val\");\r\n }\r\n else if (sysClr) {\r\n result.colors[el.localName] = xml.attr(sysClr, \"lastClr\");\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function parseFontScheme(elem: Element, xml: XmlParser) {\r\n var result: DmlFontScheme = { \r\n name: xml.attr(elem, \"name\"),\r\n } as DmlFontScheme;\r\n\r\n for (let el of xml.elements(elem)) {\r\n switch (el.localName) {\r\n case \"majorFont\": result.majorFont = parseFontInfo(el, xml); break;\r\n case \"minorFont\": result.minorFont = parseFontInfo(el, xml); break;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function parseFontInfo(elem: Element, xml: XmlParser): DmlFormInfo {\r\n return {\r\n latinTypeface: xml.elementAttr(elem, \"latin\", \"typeface\"),\r\n eaTypeface: xml.elementAttr(elem, \"ea\", \"typeface\"),\r\n csTypeface: xml.elementAttr(elem, \"cs\", \"typeface\"),\r\n };\r\n}","export function escapeClassName(className: string) {\r\n\treturn className?.replace(/[ .]+/g, '-').replace(/[&]+/g, 'and').toLowerCase();\r\n}\r\n\r\nexport function splitPath(path: string): [string, string] {\r\n let si = path.lastIndexOf('/') + 1;\r\n let folder = si == 0 ? \"\" : path.substring(0, si);\r\n let fileName = si == 0 ? path : path.substring(si);\r\n\r\n return [folder, fileName];\r\n}\r\n\r\nexport function resolvePath(path: string, base: string): string {\r\n try {\r\n const prefix = \"http://docx/\";\r\n const url = new URL(path, prefix + base).toString();\r\n return url.substring(prefix.length);\r\n } catch {\r\n return `${base}${path}`;\r\n }\r\n}\r\n\r\nexport function keyBy(array: T[], by: (x: T) => any): Record {\r\n return array.reduce((a, x) => {\r\n a[by(x)] = x;\r\n return a;\r\n }, {});\r\n}\r\n\r\nexport function blobToBase64(blob: Blob): Promise {\r\n\treturn new Promise((resolve, reject) => {\r\n\t\tconst reader = new FileReader();\r\n\t\treader.onloadend = () => resolve(reader.result as string);\r\n\t\treader.onerror = () => reject();\r\n\t\treader.readAsDataURL(blob);\r\n\t});\r\n}\r\n\r\nexport function isObject(item) {\r\n return item && typeof item === 'object' && !Array.isArray(item);\r\n}\r\n\r\nexport function isString(item: unknown): item is string {\r\n return item && typeof item === 'string' || item instanceof String;\r\n}\r\n\r\nexport function mergeDeep(target, ...sources) {\r\n if (!sources.length) \r\n return target;\r\n \r\n const source = sources.shift();\r\n\r\n if (isObject(target) && isObject(source)) {\r\n for (const key in source) {\r\n if (isObject(source[key])) {\r\n const val = target[key] ?? (target[key] = {});\r\n mergeDeep(val, source[key]);\r\n } else {\r\n target[key] = source[key];\r\n }\r\n }\r\n }\r\n\r\n return mergeDeep(target, ...sources);\r\n}\r\n\r\nexport function parseCssRules(text: string): Record {\r\n\tconst result: Record = {};\r\n\r\n\tfor (const rule of text.split(';')) {\r\n\t\tconst [key, val] = rule.split(':');\r\n\t\tresult[key] = val;\r\n\t}\r\n\r\n\treturn result\r\n}\r\n\r\nexport function formatCssRules(style: Record): string {\r\n\treturn Object.entries(style).map((k, v) => `${k}: ${v}`).join(';');\r\n}\r\n\r\nexport function asArray(val: T | T[]): T[] {\r\n\treturn Array.isArray(val) ? val : [val];\r\n}","import { convertLength, LengthUsage } from '../document/common';\r\nimport { OpenXmlElementBase, DomType } from '../document/dom';\r\nimport xml from '../parser/xml-parser';\r\nimport { formatCssRules, parseCssRules } from '../utils';\r\n\r\nexport class VmlElement extends OpenXmlElementBase {\r\n\ttype: DomType = DomType.VmlElement;\r\n\ttagName: string;\r\n\tcssStyleText?: string;\r\n\tattrs: Record = {};\r\n\twrapType?: string;\r\n\timageHref?: {\r\n\t\tid: string,\r\n\t\ttitle: string\r\n\t}\r\n}\r\n\r\nexport function parseVmlElement(elem: Element): VmlElement {\r\n\tvar result = new VmlElement();\r\n\r\n\tswitch (elem.localName) {\r\n\t\tcase \"rect\":\r\n\t\t\tresult.tagName = \"rect\"; \r\n\t\t\tObject.assign(result.attrs, { width: '100%', height: '100%' });\r\n\t\t\tbreak;\r\n\r\n\t\tcase \"oval\":\r\n\t\t\tresult.tagName = \"ellipse\"; \r\n\t\t\tObject.assign(result.attrs, { cx: \"50%\", cy: \"50%\", rx: \"50%\", ry: \"50%\" });\r\n\t\t\tbreak;\r\n\t\r\n\t\tcase \"line\":\r\n\t\t\tresult.tagName = \"line\"; \r\n\t\t\tbreak;\r\n\r\n\t\tcase \"shape\":\r\n\t\t\tresult.tagName = \"g\"; \r\n\t\t\tbreak;\r\n\t\t\r\n\t\tdefault:\r\n\t\t\treturn null;\r\n\t}\r\n\r\n\tfor (const at of xml.attrs(elem)) {\r\n\t\tswitch(at.localName) {\r\n\t\t\tcase \"style\": \r\n\t\t\t\tresult.cssStyleText = at.value;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"fillcolor\": \r\n\t\t\t\tresult.attrs.fill = at.value; \r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"from\":\r\n\t\t\t\tconst [x1, y1] = parsePoint(at.value);\r\n\t\t\t\tObject.assign(result.attrs, { x1, y1 });\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"to\":\r\n\t\t\t\tconst [x2, y2] = parsePoint(at.value);\r\n\t\t\t\tObject.assign(result.attrs, { x2, y2 });\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const el of xml.elements(elem)) {\r\n\t\tswitch (el.localName) {\r\n\t\t\tcase \"stroke\": \r\n\t\t\t\tObject.assign(result.attrs, parseStroke(el));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"fill\": \r\n\t\t\t\tObject.assign(result.attrs, parseFill(el));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"imagedata\":\r\n\t\t\t\tresult.tagName = \"image\";\r\n\t\t\t\tObject.assign(result.attrs, { width: '100%', height: '100%' });\r\n\t\t\t\tresult.imageHref = {\r\n\t\t\t\t\tid: xml.attr(el, \"id\"),\r\n\t\t\t\t\ttitle: xml.attr(el, \"title\"),\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\tconst child = parseVmlElement(el);\r\n\t\t\t\tchild && result.children.push(child);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nfunction parseStroke(el: Element): Record {\r\n\treturn {\r\n\t\t'stroke': xml.attr(el, \"color\"),\r\n\t\t'stroke-width': xml.lengthAttr(el, \"weight\", LengthUsage.Emu) ?? '1px'\r\n\t};\r\n}\r\n\r\nfunction parseFill(el: Element): Record {\r\n\treturn {\r\n\t\t//'fill': xml.attr(el, \"color2\")\r\n\t};\r\n}\r\n\r\nfunction parsePoint(val: string): string[] {\r\n\treturn val.split(\",\");\r\n}\r\n\r\nfunction convertPath(path: string): string {\r\n\treturn path.replace(/([mlxe])|([-\\d]+)|([,])/g, (m) => {\r\n\t\tif (/[-\\d]/.test(m)) return convertLength(m, LengthUsage.VmlEmu);\r\n\t\tif (/[ml,]/.test(m)) return m;\r\n\r\n\t\treturn '';\r\n\t});\r\n}","import { OutputType } from \"jszip\";\r\n\r\nimport { DocumentParser } from './document-parser';\r\nimport { Relationship, RelationshipTypes } from './common/relationship';\r\nimport { Part } from './common/part';\r\nimport { FontTablePart } from './font-table/font-table';\r\nimport { OpenXmlPackage } from './common/open-xml-package';\r\nimport { DocumentPart } from './document/document-part';\r\nimport { blobToBase64, resolvePath, splitPath } from './utils';\r\nimport { NumberingPart } from './numbering/numbering-part';\r\nimport { StylesPart } from './styles/styles-part';\r\nimport { FooterPart, HeaderPart } from \"./header-footer/parts\";\r\nimport { ExtendedPropsPart } from \"./document-props/extended-props-part\";\r\nimport { CorePropsPart } from \"./document-props/core-props-part\";\r\nimport { ThemePart } from \"./theme/theme-part\";\r\nimport { EndnotesPart, FootnotesPart } from \"./notes/parts\";\r\nimport { SettingsPart } from \"./settings/settings-part\";\r\nimport { CustomPropsPart } from \"./document-props/custom-props-part\";\r\n\r\nconst topLevelRels = [\r\n\t{ type: RelationshipTypes.OfficeDocument, target: \"word/document.xml\" },\r\n\t{ type: RelationshipTypes.ExtendedProperties, target: \"docProps/app.xml\" },\r\n\t{ type: RelationshipTypes.CoreProperties, target: \"docProps/core.xml\" },\r\n\t{ type: RelationshipTypes.CustomProperties, target: \"docProps/custom.xml\" },\r\n];\r\n\r\nexport class WordDocument {\r\n\tprivate _package: OpenXmlPackage;\r\n\tprivate _parser: DocumentParser;\r\n\tprivate _options: any;\r\n\r\n\trels: Relationship[];\r\n\tparts: Part[] = [];\r\n\tpartsMap: Record = {};\r\n\r\n\tdocumentPart: DocumentPart;\r\n\tfontTablePart: FontTablePart;\r\n\tnumberingPart: NumberingPart;\r\n\tstylesPart: StylesPart;\r\n\tfootnotesPart: FootnotesPart;\r\n\tendnotesPart: EndnotesPart;\r\n\tthemePart: ThemePart;\r\n\tcorePropsPart: CorePropsPart;\r\n\textendedPropsPart: ExtendedPropsPart;\r\n\tsettingsPart: SettingsPart;\r\n\r\n\tstatic async load(blob: Blob | any, parser: DocumentParser, options: any): Promise {\r\n\t\tvar d = new WordDocument();\r\n\r\n\t\td._options = options;\r\n\t\td._parser = parser;\r\n\t\td._package = await OpenXmlPackage.load(blob, options);\r\n\t\td.rels = await d._package.loadRelationships();\r\n\r\n\t\tawait Promise.all(topLevelRels.map(rel => {\r\n\t\t\tconst r = d.rels.find(x => x.type === rel.type) ?? rel; //fallback \r\n\t\t\treturn d.loadRelationshipPart(r.target, r.type);\r\n\t\t}));\r\n\r\n\t\treturn d;\r\n\t}\r\n\r\n\tsave(type = \"blob\"): Promise {\r\n\t\treturn this._package.save(type);\r\n\t}\r\n\r\n\tprivate async loadRelationshipPart(path: string, type: string): Promise {\r\n\t\tif (this.partsMap[path])\r\n\t\t\treturn this.partsMap[path];\r\n\r\n\t\tif (!this._package.get(path))\r\n\t\t\treturn null;\r\n\r\n\t\tlet part: Part = null;\r\n\r\n\t\tswitch (type) {\r\n\t\t\tcase RelationshipTypes.OfficeDocument:\r\n\t\t\t\tthis.documentPart = part = new DocumentPart(this._package, path, this._parser);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase RelationshipTypes.FontTable:\r\n\t\t\t\tthis.fontTablePart = part = new FontTablePart(this._package, path);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase RelationshipTypes.Numbering:\r\n\t\t\t\tthis.numberingPart = part = new NumberingPart(this._package, path, this._parser);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase RelationshipTypes.Styles:\r\n\t\t\t\tthis.stylesPart = part = new StylesPart(this._package, path, this._parser);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase RelationshipTypes.Theme:\r\n\t\t\t\tthis.themePart = part = new ThemePart(this._package, path);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase RelationshipTypes.Footnotes:\r\n\t\t\t\tthis.footnotesPart = part = new FootnotesPart(this._package, path, this._parser);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase RelationshipTypes.Endnotes:\r\n\t\t\t\tthis.endnotesPart = part = new EndnotesPart(this._package, path, this._parser);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase RelationshipTypes.Footer:\r\n\t\t\t\tpart = new FooterPart(this._package, path, this._parser);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase RelationshipTypes.Header:\r\n\t\t\t\tpart = new HeaderPart(this._package, path, this._parser);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase RelationshipTypes.CoreProperties:\r\n\t\t\t\tthis.corePropsPart = part = new CorePropsPart(this._package, path);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase RelationshipTypes.ExtendedProperties:\r\n\t\t\t\tthis.extendedPropsPart = part = new ExtendedPropsPart(this._package, path);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase RelationshipTypes.CustomProperties:\r\n\t\t\t\tpart = new CustomPropsPart(this._package, path);\r\n\t\t\t\tbreak;\r\n\t\r\n\t\t\tcase RelationshipTypes.Settings:\r\n\t\t\t\tthis.settingsPart = part = new SettingsPart(this._package, path);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif (part == null)\r\n\t\t\treturn Promise.resolve(null);\r\n\r\n\t\tthis.partsMap[path] = part;\r\n\t\tthis.parts.push(part);\r\n\r\n\t\tawait part.load();\r\n\r\n\t\tif (part.rels?.length > 0) {\r\n\t\t\tconst [folder] = splitPath(part.path);\r\n\t\t\tawait Promise.all(part.rels.map(rel => this.loadRelationshipPart(resolvePath(rel.target, folder), rel.type)));\r\n\t\t}\r\n\r\n\t\treturn part;\r\n\t}\r\n\r\n\tasync loadDocumentImage(id: string, part?: Part): Promise {\r\n\t\tconst x = await this.loadResource(part ?? this.documentPart, id, \"blob\");\r\n\t\treturn this.blobToURL(x);\r\n\t}\r\n\r\n\tasync loadNumberingImage(id: string): Promise {\r\n\t\tconst x = await this.loadResource(this.numberingPart, id, \"blob\");\r\n\t\treturn this.blobToURL(x);\r\n\t}\r\n\r\n\tasync loadFont(id: string, key: string): Promise {\r\n\t\tconst x = await this.loadResource(this.fontTablePart, id, \"uint8array\");\r\n\t\treturn x ? this.blobToURL(new Blob([deobfuscate(x, key)])) : x;\r\n\t}\r\n\r\n\tprivate blobToURL(blob: Blob): string | Promise {\r\n\t\tif (!blob)\r\n\t\t\treturn null;\r\n\r\n\t\tif (this._options.useBase64URL) {\r\n\t\t\treturn blobToBase64(blob);\r\n\t\t}\r\n\r\n\t\treturn URL.createObjectURL(blob);\r\n\t}\r\n\r\n\tfindPartByRelId(id: string, basePart: Part = null) {\r\n\t\tvar rel = (basePart.rels ?? this.rels).find(r => r.id == id);\r\n\t\tconst folder = basePart ? splitPath(basePart.path)[0] : '';\r\n\t\treturn rel ? this.partsMap[resolvePath(rel.target, folder)] : null;\r\n\t}\r\n\r\n\tgetPathById(part: Part, id: string): string {\r\n\t\tconst rel = part.rels.find(x => x.id == id);\r\n\t\tconst [folder] = splitPath(part.path);\r\n\t\treturn rel ? resolvePath(rel.target, folder) : null;\r\n\t}\r\n\r\n\tprivate loadResource(part: Part, id: string, outputType: OutputType) {\r\n\t\tconst path = this.getPathById(part, id);\r\n\t\treturn path ? this._package.load(path, outputType) : Promise.resolve(null);\r\n\t}\r\n}\r\n\r\nexport function deobfuscate(data: Uint8Array, guidKey: string): Uint8Array {\r\n\tconst len = 16;\r\n\tconst trimmed = guidKey.replace(/{|}|-/g, \"\");\r\n\tconst numbers = new Array(len);\r\n\r\n\tfor (let i = 0; i < len; i++)\r\n\t\tnumbers[len - i - 1] = parseInt(trimmed.substr(i * 2, 2), 16);\r\n\r\n\tfor (let i = 0; i < 32; i++)\r\n\t\tdata[i] = data[i] ^ numbers[i % len]\r\n\r\n\treturn data;\r\n}","module.exports = __WEBPACK_EXTERNAL_MODULE__626__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t345: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// no jsonp function","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(667);\n"],"names":["root","factory","exports","module","require","define","amd","globalThis","__WEBPACK_EXTERNAL_MODULE__626__","___CSS_LOADER_URL_IMPORT_0___","URL","___CSS_LOADER_EXPORT___","___CSS_LOADER_URL_REPLACEMENT_0___","push","id","toString","cssWithMappingToString","list","this","map","item","content","needLayer","concat","length","join","i","modules","media","dedupe","supports","layer","undefined","alreadyImportedModules","k","_k","url","options","String","__esModule","default","test","slice","hash","needQuotes","replace","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","data","sourceMapping","OpenXmlPackage","constructor","_zip","xmlParser","XmlParser","get","path","files","startsWith","substr","normalizePath","update","file","static","input","zip","JSZip","loadAsync","save","type","generateAsync","load","async","Promise","resolve","relsPath","f","fn","splitPath","txt","parseRelationships","parseXmlDocument","firstElementChild","parseXmlString","trimXmlDeclaration","_package","rels","loadRelationships","xmlText","xmlDoc","keepOrigin","_xmlDocument","parseXml","serializeXmlString","RelationshipTypes","xml","elements","e","attr","target","targetMode","autos","shd","color","borderColor","highlight","supportedNamespaceURIs","mmlTagMap","DomType","MmlMath","MmlMathParagraph","MmlFraction","MmlNumerator","MmlDenominator","MmlRadical","MmlDegree","MmlBase","MmlSuperscript","MmlSubscript","MmlSuperArgument","MmlSubArgument","MmlDelimiter","MmlNary","ignoreWidth","debug","parseNotes","elemName","elemClass","result","el","node","noteType","children","parseBodyElements","parseDocumentFile","xbody","element","background","sectPr","Document","props","parseSectionProperties","cssStyle","parseBackground","elem","xmlUtil","colorAttr","localName","parseParagraph","parseTable","parseSdt","parseStylesFile","xstyles","foreach","n","parseStyle","parseDefaultStyles","name","basedOn","styles","c","rPr","values","parseDefaultProperties","pPr","isDefault","boolAttr","linked","next","aliases","split","paragraphProps","parseParagraphProperties","runProps","parseRunProperties","s","parseTableStyle","console","warn","selector","modificator","mod","parseNumberingFile","xnums","mapping","bullets","parseAbstractNumbering","forEach","x","parseNumberingPicBullet","numId","abstractNumId","elementAttr","pict","shape","imagedata","intAttr","src","style","parseNumberingLevel","level","pStyleName","pStyle","rStyle","suff","bullet","find","levelText","format","parser","sdtContent","parseInserted","parentParser","Inserted","parseDeleted","Deleted","Paragraph","parseRun","parseHyperlink","parseBookmarkStart","parseBookmarkEnd","parseMathElement","paragraph","parseParagraphProperty","styleName","className","classNameOfCnfStyle","parseFrame","parent","Hyperlink","anchor","relId","href","Run","checkAlternateContent","Text","text","textContent","DeletedText","SimpleField","instruction","lock","dirty","fieldRun","Instruction","ComplexField","charType","NoBreakHyphen","Break","break","Symbol","font","char","Tab","FootnoteReference","EndnoteReference","d","parseDrawing","parseVmlPicture","propsTag","run","MmlRun","parseMathProperies","hideDegree","beginChar","endChar","verticalAlign","valueOfVertAlign","VmlPicture","child","parseVmlElement","choice","requires","namespaceURI","lookupNamespaceURI","includes","parseDrawingWrapper","Drawing","isAnchor","wrapType","simplePos","posX","relative","align","offset","posY","lengthAttr","LengthUsage","Emu","pos","alignNode","offsetNode","sizeValue","g","parseGraphic","graphicData","parsePicture","Image","blipFill","blip","spPr","xfrm","Table","parseTableRow","columns","parseTableColumns","parseTableProperties","width","table","cellStyle","classNameOftblLook","parseTablePosition","colBandSize","rowBandSize","topFromText","bottomFromText","rightFromText","leftFromText","addSize","Row","parseTableCell","parseTableRowProperties","row","isHeader","Cell","parseTableCellProperties","cell","span","verticalMerge","childStyle","handler","valueOfJc","valueOfTextAlignment","FontSize","valueOfSize","parseTrHeight","parseUnderline","parseIndentation","parseFont","parseBorderProperties","valueOfMargin","valueOfBorder","parseMarginProperties","valueOfTblLayout","parseSpacing","val","col","fonts","themeValue","filter","firstLine","hanging","left","start","right","end","before","after","line","lineRule","toFixed","output","knownColors","cb","childNodes","nodeType","Node","ELEMENT_NODE","attrName","defValue","autoColor","v","themeColor","Dxa","convertLength","Percent","Border","_","asTagName","a","b","hexAttr","trim","CorePropsPart","Part","parseCoreProps","title","description","subject","creator","keywords","language","lastModifiedBy","revision","parseInt","CustomPropsPart","parseCustomProps","firstChild","formatId","nodeName","value","ExtendedPropsPart","parseExtendedProps","safeParseToInt","template","pages","words","characters","application","lines","paragraphs","company","appVersion","BookmarkStart","colFirst","colLast","BookmarkEnd","parseBorder","size","Point","frame","shadow","top","bottom","ns","wordml","drawingml","picture","compatibility","math","mul","unit","LineHeight","VmlEmu","usage","defaultValue","fontSize","DocumentPart","pkg","super","_documentParser","body","parseCommonProperty","tabs","parseTabs","sectionProps","numbering","parseNumbering","lineSpacing","parseLineSpacing","textAlignment","keepLines","keepNext","pageBreakBefore","outlineLevel","position","leader","parseRunProperty","SectionType","parseColumns","numberOfColumns","space","separator","equalWidth","parsePageNumber","chapSep","chapStyle","parseFooterHeaderReference","section","pageSize","height","orientation","pageMargins","header","footer","gutter","headerRefs","footerRefs","titlePage","pageBorders","parseBorders","pageNumber","defaultOptions","ignoreHeight","ignoreFonts","breakPages","experimental","inWrapper","ignoreLastRenderedPageBreak","renderHeaders","renderFooters","renderFootnotes","renderEndnotes","useBase64URL","useMathMLPolyfill","renderChanges","userOptions","ops","WordDocument","DocumentParser","bodyContainer","styleContainer","renderer","HtmlRenderer","window","document","doc","render","FontTablePart","parseFonts","embedFontTypeMap","embedRegular","embedBold","embedItalic","embedBoldItalic","embedFontRefs","family","altName","parseEmbedFontRef","key","WmlHeader","OpenXmlElementBase","Header","WmlFooter","Footer","BaseHeaderFooterPart","rootElement","createRootElement","createElement","tagName","createElementNS","createSvgElement","Object","assign","appendChildren","removeAllElements","innerHTML","appendChild","isString","createTextNode","createStyleElement","cssText","appendComment","comment","createComment","htmlDocument","styleMap","currentPart","tableVerticalMerges","currentVerticalMerge","tableCellPositions","currentCellPosition","footnoteMap","endnoteMap","currentEndnoteIds","usedHederFooterParts","currentTabs","tabsTimeout","rootSelector","renderDefaultStyle","MathMLElement","themePart","renderTheme","stylesPart","processStyles","renderStyles","numberingPart","prodessNumberings","domNumberings","renderNumbering","footnotesPart","keyBy","notes","endnotesPart","settingsPart","defaultTabSize","settings","defaultTabStop","fontTablePart","renderFontTable","sectionElements","renderSections","documentPart","renderWrapper","refreshTabStops","variables","fontScheme","theme","majorFont","latinTypeface","minorFont","colorScheme","entries","colors","styleToString","fontsPart","ref","loadFont","then","fontData","cssValues","processStyleName","escapeClassName","stylesMap","baseStyle","mergeDeep","baseValues","styleValues","copyStyleProperties","cssName","numberings","num","findStyle","processElement","processTable","r","attrs","getOwnPropertyNames","hasOwnProperty","createSection","paddingLeft","paddingRight","paddingTop","paddingBottom","minHeight","columnCount","columnGap","columnRule","sections","splitBySection","prevProps","l","currentFootnoteIds","sectProps","sectionElement","renderStyleValues","renderHeaderFooter","contentElement","renderElements","renderNotes","refs","page","firstOfSection","into","part","findPartByRelId","isPageBreakElement","current","p","pBreakIndex","rBreakIndex","findIndex","bind","breakRun","splitRun","newParagraph","runChildren","newRun","currentSectProps","styleText","rootCounters","numberingClass","listStyleType","valiable","toLowerCase","loadNumberingImage","counter","numberingCounter","levelTextToContent","numFormatToCssValue","defautStyles","subStyles","linkedStyle","subStyle","noteIds","notesMap","renderElement","renderParagraph","renderBookmarkStart","renderRun","renderTable","renderTableRow","renderTableCell","renderHyperlink","renderDrawing","renderImage","renderText","renderDeletedText","renderTab","renderSymbol","renderBreak","renderContainer","Footnote","Endnote","renderFootnoteReference","renderEndnoteReference","renderVmlPicture","VmlElement","renderVmlElement","renderContainerNS","xmlns","renderMmlRadical","renderMmlDelimiter","renderMmlRun","renderMmlNary","renderInserted","renderDeleted","renderChildren","elems","flatMap","renderClass","renderCommonProperties","classList","add","renderRunProperties","rel","it","display","textIndent","loadDocumentImage","fontFamily","tabSpan","tabStopClass","stops","findParent","wrapper","renderTableColumns","pop","colElem","rowSpan","colSpan","container","setAttribute","cssStyleText","imageHref","requestAnimationFrame","bb","getBBox","Math","ceil","y","base","degree","grouped","sup","sub","supElem","asArray","subElem","charElem","ouput","lvl","selectors","numformat","substring","none","decimal","lowerLetter","upperLetter","lowerRoman","upperRoman","decimalZero","aiueo","aiueoFullWidth","chineseCounting","chineseCountingThousand","chineseLegalSimplified","chosung","ideographDigital","ideographTraditional","ideographLegalTraditional","ideographZodiac","iroha","irohaFullWidth","japaneseCounting","japaneseDigitalTenThousand","japaneseLegal","thaiNumbers","koreanCounting","koreanDigital","koreanDigital2","hebrew1","hebrew2","hindiNumbers","ganada","taiwaneseCounting","taiwaneseCountingThousand","taiwaneseDigital","clearTimeout","setTimeout","pixelToPoint","computePixelToPoint","tab","updateTabStop","defaultTab","lengthToPoint","parseFloat","temp","offsetWidth","removeChild","closest","ebb","getBoundingClientRect","pbb","pcs","getComputedStyle","tabStops","t","sort","lastTab","pWidthPt","marginLeft","pOffset","Array","from","querySelectorAll","nextIdx","indexOf","range","createRange","setStart","setEndBefore","setEndAfter","nextBB","textDecoration","wordSpacing","textDecorationStyle","WmlBaseNote","BaseNotePart","WmlFootnote","WmlEndnote","NumberingPart","parseNumberingPart","overrides","abstractId","parseNumberingLevelOverrride","levels","multiLevelType","numberingStyleLink","styleLink","restart","justification","bulletPictureId","paragraphStyle","numberingLevel","parseNumberingBulletPicture","referenceId","abstractNumberings","bulletPictures","xmlString","charCodeAt","DOMParser","parseFromString","errorText","getElementsByTagName","Error","XMLSerializer","serializeToString","attrLocalName","attributes","floatAttr","convertBoolean","globalXmlParser","SettingsPart","parseSettings","parseNoteProperties","defaultNoteIds","nummeringFormat","footnoteProps","endnoteProps","autoHyphenation","StylesPart","ThemePart","parseTheme","DmlTheme","parseColorScheme","srgbClr","sysClr","parseFontScheme","parseFontInfo","eaTypeface","csTypeface","themeElements","isObject","isArray","si","lastIndexOf","prefix","array","by","reduce","blob","reject","reader","FileReader","onloadend","onerror","readAsDataURL","sources","source","shift","rule","parseStroke","parsePoint","cx","cy","rx","ry","at","fill","x1","y1","x2","y2","topLevelRels","OfficeDocument","ExtendedProperties","CoreProperties","CustomProperties","parts","partsMap","_options","_parser","all","loadRelationshipPart","FontTable","Numbering","Styles","Theme","Footnotes","FootnotesPart","Endnotes","EndnotesPart","FooterPart","HeaderPart","corePropsPart","extendedPropsPart","Settings","folder","resolvePath","loadResource","blobToURL","Blob","deobfuscate","blobToBase64","createObjectURL","basePart","getPathById","outputType","guidKey","trimmed","numbers","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","m","getter","definition","o","defineProperty","enumerable","obj","prop","prototype","call","toStringTag","baseURI","self","location"],"sourceRoot":""}