@apollo-design/docx-preview 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docx-preview.js","names":[],"sources":["../src/common/relationship.ts","../src/utils.ts","../src/document/common.ts","../src/parser/xml-parser.ts","../src/common/part.ts","../src/font-table/fonts.ts","../src/font-table/font-table.ts","../src/common/content-types.ts","../src/common/open-xml-package.ts","../src/document/document-part.ts","../src/document/border.ts","../src/document/section.ts","../src/document/line-spacing.ts","../src/document/run.ts","../src/document/paragraph.ts","../src/numbering/numbering.ts","../src/numbering/numbering-part.ts","../src/styles/styles-part.ts","../src/document/dom.ts","../src/header-footer/elements.ts","../src/header-footer/parts.ts","../src/document-props/extended-props.ts","../src/document-props/extended-props-part.ts","../src/document-props/core-props.ts","../src/document-props/core-props-part.ts","../src/theme/theme.ts","../src/theme/theme-part.ts","../src/notes/elements.ts","../src/notes/parts.ts","../src/settings/settings.ts","../src/settings/settings-part.ts","../src/document-props/custom-props.ts","../src/document-props/custom-props-part.ts","../src/comments/comments-part.ts","../src/comments/comments-extended-part.ts","../src/word-document.ts","../src/document/bookmarks.ts","../src/vml/vml.ts","../src/comments/elements.ts","../src/document-parser.ts","../src/javascript.ts","../src/html.ts","../src/html-renderer.ts","../src/pagination.ts","../src/docx-preview.ts"],"sourcesContent":["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\tComments = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",\r\n CommentsExtended = \"http://schemas.microsoft.com/office/2011/relationships/commentsExtended\",\r\n AltChunk = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk\"\r\n}\r\n\r\nexport function parseRelationships(root: Element, xml: XmlParser): Relationship[] {\r\n return xml.elements(root).map(e => <Relationship>{\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}","export function escapeClassName(className: string) {\r\n\treturn className?.replace(/[ .]+/g, '-').replace(/[&]+/g, 'and').toLowerCase();\r\n}\r\n\r\nexport function encloseFontFamily(fontFamily: string): string {\r\n return /^[^\"'].*\\s.*[^\"']$/.test(fontFamily) ? `'${fontFamily}'` : fontFamily;\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<T = any>(array: T[], by: (x: T) => any): Record<any, T> {\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<string> {\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 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<string, string> {\r\n\tconst result: Record<string, string> = {};\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, string>): string {\r\n\treturn Object.entries(style).map((k, v) => `${k}: ${v}`).join(';');\r\n}\r\n\r\nexport function asArray<T>(val: T | T[]): T[] {\r\n\treturn Array.isArray(val) ? val : [val];\r\n}\r\n\r\nexport function clamp(val, min, max) {\r\n return min > val ? min : (max < val ? max : val);\r\n}","import { XmlParser } from \"../parser/xml-parser\";\r\nimport { clamp } from \"../utils\";\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, min?: number, max?: number };\r\n\r\nexport const LengthUsage: Record<string, LengthUsageType> = {\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\", min: 0.25, max: 12 }, //NOTE: http://officeopenxml.com/WPtextBorders.php\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 var num = parseInt(val) * usage.mul;\r\n\r\n if (usage.min && usage.max)\r\n num = clamp(num, usage.min, usage.max);\r\n \r\n\treturn `${num.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 { 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 == Node.ELEMENT_NODE && (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 { 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<any> {\r\n this.rels = await this._package.loadRelationships(this.path);\r\n\r\n const xmlText = await this._package.load(this.path);\r\n const xmlDoc = this._package.parseXmlDocument(xmlText);\r\n\r\n if (this._package.options.keepOrigin) {\r\n this._xmlDocument = xmlDoc;\r\n }\r\n\r\n this.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\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 = <FontDeclaration>{\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 { 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\nexport interface ContentType {\r\n extension: string,\r\n partName: string,\r\n contentType: string;\r\n}\r\n\r\nexport function parseContentTypes(root: Element, xml: XmlParser): ContentType[] {\r\n return xml.elements(root).map(e => <ContentType>{\r\n extension: xml.attr(e, \"Extension\"),\r\n partName: xml.attr(e, \"PartName\"),\r\n contentType: xml.attr(e, \"ContentType\")\r\n });\r\n}","import JSZip from \"jszip\";\r\nimport { parseXmlString, XmlParser } from \"../parser/xml-parser\";\r\nimport { splitPath } from \"../utils\";\r\nimport { parseRelationships, Relationship } from \"./relationship\";\r\nimport { ContentType, parseContentTypes } from \"./content-types\";\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 const p = normalizePath(path);\r\n return this._zip.files[p] ?? this._zip.files[p.replace(/\\//g, '\\\\')];\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<OpenXmlPackage> {\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<any> {\r\n return this._zip.generateAsync({ type });\r\n }\r\n\r\n load(path: string, type: JSZip.OutputType = \"string\"): Promise<any> {\r\n return this.get(path)?.async(type) ?? Promise.resolve(null);\r\n }\r\n\r\n async loadRelationships(path: string = null): Promise<Relationship[]> {\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 async loadContentTypes(): Promise<ContentType[]> {\r\n const txt = await this.load(\"[Content_Types].xml\");\r\n\t\treturn txt ? parseContentTypes(this.parseXmlDocument(txt).firstElementChild, this.xmlParser) : [];\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 { 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}","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 = <Borders>{};\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 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 = <SectionProperties>{};\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 => <Column>{\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 { 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 { 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 = <RunProperties>{};\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 { 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 = <ParagraphProperties>{};\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 \"keepLines\":\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 => <ParagraphTab>{\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 = <ParagraphNumbering>{};\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 { 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 = <Numbering>{\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 = <AbstractNumbering>{\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 = <NumberingLevel>{\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 = <NumberingLevelOverride>{\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 { 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 { 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}","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 SmartTag = \"smartTag\",\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\tMmlFunction = \"mmlFunction\",\r\n\tMmlFunctionName = \"mmlFunctionName\",\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\tMmlPreSubSuper = \"mmlPreSubSuper\",\r\n\tMmlSubArgument = \"mmlSubArgument\",\r\n\tMmlSuperArgument = \"mmlSuperArgument\",\r\n\tMmlNary = \"mmlNary\",\r\n\tMmlDelimiter = \"mmlDelimiter\",\r\n\tMmlRun = \"mmlRun\",\r\n\tMmlEquationArray = \"mmlEquationArray\",\r\n\tMmlLimit = \"mmlLimit\",\r\n\tMmlLimitLower = \"mmlLimitLower\",\r\n\tMmlMatrix = \"mmlMatrix\",\r\n\tMmlMatrixRow = \"mmlMatrixRow\",\r\n\tMmlBox = \"mmlBox\",\r\n\tMmlBar = \"mmlBar\",\r\n\tMmlGroupChar = \"mmlGroupChar\",\r\n\tVmlElement = \"vmlElement\",\r\n\tInserted = \"inserted\",\r\n\tDeleted = \"deleted\",\r\n\tDeletedText = \"deletedText\",\r\n\tComment = \"comment\",\r\n\tCommentReference = \"commentReference\",\r\n\tCommentRangeStart = \"commentRangeStart\",\r\n\tCommentRangeEnd = \"commentRangeEnd\",\r\n AltChunk = \"altChunk\"\r\n}\r\n\r\nexport interface OpenXmlElement {\r\n type: DomType;\r\n children?: OpenXmlElement[];\r\n cssStyle?: Record<string, string>;\r\n props?: Record<string, any>;\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<string, string> = {};\r\n props?: Record<string, any>;\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 anchor?: string;\r\n}\r\n\r\nexport interface WmlAltChunk extends OpenXmlElement {\r\n\tid?: string;\r\n}\r\n\r\nexport interface WmlSmartTag extends OpenXmlElement {\r\n\turi?: string;\r\n element?: string;\r\n}\r\n\r\nexport interface WmlChange extends OpenXmlElement {\r\n id: string;\r\n author: string;\r\n date: 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: number;\r\n}\r\n\r\nexport interface WmlTable extends OpenXmlElement {\r\n columns?: WmlTableColumn[];\r\n cellStyle?: Record<string, string>;\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 gridBefore?: number;\r\n gridAfter?: number;\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 srcRect: number[];\r\n rotation: number;\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 start: number;\r\n pStyleName: string;\r\n pStyle: Record<string, string>;\r\n rStyle: Record<string, string>;\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 { 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<T extends OpenXmlElement = OpenXmlElement> 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<WmlHeader> {\r\n protected createRootElement(): WmlHeader {\r\n return new WmlHeader();\r\n }\r\n}\r\n\r\nexport class FooterPart extends BaseHeaderFooterPart<WmlFooter> {\r\n protected createRootElement(): WmlFooter {\r\n return new WmlFooter();\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 = <ExtendedPropsDeclaration>{\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 { 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 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 = <CorePropsDeclaration>{};\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 { 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 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<string, string>;\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}","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 { 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<T extends WmlBaseNote> 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<WmlFootnote> {\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<WmlEndnote> {\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 { 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\t/** w:compatSetting \"compatibilityMode\"; 11 = Word 2003 layout rules */\r\n\tcompatMode?: number;\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\tcase \"compat\":\r\n\t\t\t\tfor (let c of xml.elements(el)) {\r\n\t\t\t\t\tif (c.localName == \"compatSetting\"\r\n\t\t\t\t\t\t&& xml.attr(c, \"name\") == \"compatibilityMode\"\r\n\t\t\t\t\t\t&& (xml.attr(c, \"uri\") ?? \"\").includes(\"schemas.microsoft.com/office/word\")) {\r\n\t\t\t\t\t\tresult.compatMode = xml.intAttr(c, \"val\", null);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\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 { 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 { 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 { 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 { Part } from \"../common/part\";\r\nimport { OpenXmlPackage } from \"../common/open-xml-package\";\r\nimport { DocumentParser } from \"../document-parser\";\r\nimport { WmlComment } from \"./elements\";\r\nimport { keyBy } from \"../utils\";\r\n\r\nexport class CommentsPart extends Part {\r\n protected _documentParser: DocumentParser;\r\n\r\n comments: WmlComment[]\r\n commentMap: Record<string, WmlComment>;\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\tparseXml(root: Element) {\r\n this.comments = this._documentParser.parseComments(root);\r\n\t\tthis.commentMap = keyBy(this.comments, x => x.id);\r\n }\r\n}","import { Part } from \"../common/part\";\r\nimport { OpenXmlPackage } from \"../common/open-xml-package\";\r\nimport { keyBy } from \"../utils\";\r\n\r\nexport type CommentsExtended = {\r\n paraId: string;\r\n paraIdParent?: string;\r\n done: boolean;\r\n}\r\n\r\nexport class CommentsExtendedPart extends Part {\r\n comments: CommentsExtended[] = [];\r\n commentMap: Record<string, CommentsExtended>;\r\n\r\n constructor(pkg: OpenXmlPackage, path: string) {\r\n super(pkg, path);\r\n }\r\n\r\n\tparseXml(root: Element) {\r\n const xml = this._package.xmlParser;\r\n\r\n for (let el of xml.elements(root, \"commentEx\")) {\r\n this.comments.push({\r\n paraId: xml.attr(el, 'paraId'),\r\n paraIdParent: xml.attr(el, 'paraIdParent'),\r\n done: xml.boolAttr(el, 'done')\r\n });\r\n }\r\n\r\n\t\tthis.commentMap = keyBy(this.comments, x => x.paraId);\r\n }\r\n}\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\nimport { CommentsPart } from \"./comments/comments-part\";\r\nimport { CommentsExtendedPart } from \"./comments/comments-extended-part\";\r\nimport { ContentType } from \"./common/content-types\";\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<string, Part> = {};\r\n\tcontentTypes: ContentType[] = [];\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\tcommentsPart: CommentsPart;\r\n\tcommentsExtendedPart: CommentsExtendedPart;\r\n\r\n\tstatic async load(blob: Blob | any, parser: DocumentParser, options: any): Promise<WordDocument> {\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\t\td.contentTypes = await d._package.loadContentTypes();\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<any> {\r\n\t\treturn this._package.save(type);\r\n\t}\r\n\r\n\tprivate async loadRelationshipPart(path: string, type: string): Promise<Part> {\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\r\n\t\t\tcase RelationshipTypes.Comments:\r\n\t\t\t\tthis.commentsPart = part = new CommentsPart(this._package, path, this._parser);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase RelationshipTypes.CommentsExtended:\r\n\t\t\t\tthis.commentsExtendedPart = part = new CommentsExtendedPart(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<string> {\r\n\t\tconst path = this.getPathById(part ?? this.documentPart, id);\r\n\t\treturn path ? this.blobToURL(await this._package.load(path, \"blob\"), path) : null;\r\n\t}\r\n\r\n\tasync loadNumberingImage(id: string): Promise<string> {\r\n\t\tconst path = this.getPathById(this.numberingPart, id);\r\n\t\treturn path ? this.blobToURL(await this._package.load(path, \"blob\"), path) : null;\r\n\t}\r\n\r\n\tasync loadFont(id: string, key: string): Promise<string> {\r\n\t\tconst path = this.getPathById(this.fontTablePart, id);\r\n\t\tif (!path) return null;\r\n\t\tconst x = await this._package.load(path, \"uint8array\");\r\n\t\treturn x ? this.blobToURL(new Blob([deobfuscate(x, key)]), path) : x;\r\n\t}\r\n\r\n\tasync loadAltChunk(id: string, part?: Part): Promise<string> {\r\n\t\tconst path = this.getPathById(part ?? this.documentPart, id);\r\n\t\treturn path ? this._package.load(path, \"string\") : Promise.resolve(null);\r\n\t}\r\n\r\n\tprivate blobToURL(blob: Blob, path?: string): string | Promise<string> {\r\n\t\tif (!blob)\r\n\t\t\treturn null;\r\n\r\n\t\tif (path) {\r\n\t\t\tconst ct = this.contentTypes.find(x => x.partName === path || (x.extension && path.endsWith(`.${x.extension}`)));\r\n\t\t\tblob = ct ? new Blob([blob], { type: ct.contentType }) : blob;\r\n\t\t}\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\r\nexport function deobfuscate(data: Uint8Array, guidKey: string) {\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.substring(i * 2, 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\t// FIXME: return type\r\n\treturn data as any;\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 { DocumentParser } from '../document-parser';\r\nimport { 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<string, string> = {};\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, parser: DocumentParser): 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\r\n\t\tcase \"textbox\":\r\n\t\t\tresult.tagName = \"foreignObject\"; \r\n\t\t\tObject.assign(result.attrs, { width: '100%', height: '100%' });\r\n\t\t\tbreak;\r\n\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\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\tcase \"txbxContent\": \r\n\t\t\t\tresult.children.push(...parser.parseBodyElements(el));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\tconst child = parseVmlElement(el, parser);\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<string, string> {\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<string, string> {\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 { DomType, OpenXmlElementBase } from \"../document/dom\";\r\n\r\nexport class WmlComment extends OpenXmlElementBase {\r\n\ttype = DomType.Comment;\r\n id: string;\r\n\tauthor: string;\r\n\tinitials: string;\r\n\tdate: string;\r\n}\r\n\r\nexport class WmlCommentReference extends OpenXmlElementBase {\r\n\ttype = DomType.CommentReference;\r\n\t\r\n\tconstructor(public id?: string) {\r\n\t\tsuper();\r\n\t}\r\n}\r\n\r\nexport class WmlCommentRangeStart extends OpenXmlElementBase {\r\n\ttype = DomType.CommentRangeStart;\r\n\t\r\n\tconstructor(public id?: string) {\r\n\t\tsuper();\r\n\t}\r\n}\r\nexport class WmlCommentRangeEnd extends OpenXmlElementBase {\r\n\ttype = DomType.CommentRangeEnd;\r\n\r\n\tconstructor(public id?: string) {\r\n\t\tsuper();\r\n\t}\r\n}","import {\r\n\tDomType, WmlTable, IDomNumbering,\r\n\tWmlHyperlink, WmlSmartTag, IDomImage, OpenXmlElement, WmlTableColumn, WmlTableCell,\r\n\tWmlTableRow, NumberingPicBullet, WmlText, WmlSymbol, WmlBreak, WmlNoteReference,\r\n\tWmlAltChunk, WmlChange\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\nimport { WmlComment, WmlCommentRangeEnd, WmlCommentRangeStart, WmlCommentReference } from './comments/elements';\r\nimport { encloseFontFamily } from './utils';\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\"func\": DomType.MmlFunction,\r\n\t\"fName\": DomType.MmlFunctionName,\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\"sPre\": DomType.MmlPreSubSuper,\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\t\"eqArr\": DomType.MmlEquationArray,\r\n\t\"lim\": DomType.MmlLimit,\r\n\t\"limLow\": DomType.MmlLimitLower,\r\n\t\"m\": DomType.MmlMatrix,\r\n\t\"mr\": DomType.MmlMatrixRow,\r\n\t\"box\": DomType.MmlBox,\r\n\t\"bar\": DomType.MmlBar,\r\n\t\"groupChr\": DomType.MmlGroupChar\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<DocumentParserOptions>) {\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\tparseComments(xmlDoc: Element): any[] {\r\n\t\tvar result = [];\r\n\r\n\t\tfor (let el of xml.elements(xmlDoc, \"comment\")) {\r\n\t\t\tconst item = new WmlComment();\r\n\t\t\titem.id = xml.attr(el, \"id\");\r\n\t\t\titem.author = xml.attr(el, \"author\");\r\n\t\t\titem.initials = xml.attr(el, \"initials\");\r\n\t\t\titem.date = xml.attr(el, \"date\");\r\n\t\t\titem.children = this.parseBodyElements(el);\r\n\t\t\tresult.push(item);\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 (const 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 \"altChunk\":\r\n\t\t\t\t\tchildren.push(this.parseAltChunk(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\tfor (const n of xml.elements(xstyles)) {\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 = <IDomStyle>{\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\tfor (const c of xml.elements(node)){\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 = <IDomStyle>{\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\tfor (const n of xml.elements(node)) {\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\tfor (const n of xml.elements(node)) {\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(node: Element): IDomNumbering[] {\r\n\t\tconst levels = [];\r\n\t\tconst nums = [];\r\n\t\tconst bullets = [];\r\n\r\n\t\tfor (const n of xml.elements(node)) {\r\n\t\t\tswitch (n.localName) {\r\n\t\t\t\tcase \"abstractNum\":\r\n\t\t\t\t\tlevels.push(...this.parseAbstractNumbering(n, bullets));\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\tnums.push({\r\n\t\t\t\t\t\tnumId: xml.attr(n, \"numId\"),\r\n\t\t\t\t\t\tabstractNumId: xml.elementAttr(n, \"abstractNumId\", \"val\"),\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 nums.flatMap(x => levels.filter(lvl => x.abstractNumId == lvl.id).map(lvl => ({ ...lvl, id: x.numId })));\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\tfor (const n of xml.elements(node)) {\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\tstart: 1,\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\tfor (const n of xml.elements(node)) {\r\n\t\t\tswitch (n.localName) {\r\n\t\t\t\tcase \"start\":\r\n\t\t\t\t\tresult.start = xml.intAttr(n, \"val\");\r\n\t\t\t\t\tbreak;\r\n\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 bulletId = xml.intAttr(n, \"val\");\r\n\t\t\t\t\tresult.bullet = bullets.find(x => x?.id == bulletId);\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\tparseChange(type: DomType, node: Element, parentParser: Function): WmlChange {\r\n\t\treturn <WmlChange>{\r\n\t\t\ttype,\r\n\t\t\tchildren: parentParser(node)?.children ?? [],\r\n\t\t\tid: xml.attr(node, \"id\"),\r\n\t\t\tauthor: xml.attr(node, \"author\"),\r\n\t\t\tdate: xml.attr(node, \"date\"),\r\n\t\t};\r\n\t}\r\n\r\n\tparseAltChunk(node: Element): WmlAltChunk {\r\n\t\treturn { type: DomType.AltChunk, children: [], id: xml.attr(node, \"id\") };\r\n\t}\r\n\r\n\tparseParagraph(node: Element): OpenXmlElement {\r\n\t\tvar result = <WmlParagraph>{ 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 \"smartTag\":\r\n\t\t\t\t\tresult.children.push(this.parseSmartTag(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 \"commentRangeStart\":\r\n\t\t\t\t\tresult.children.push(new WmlCommentRangeStart(xml.attr(el, \"id\")));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"commentRangeEnd\":\r\n\t\t\t\t\tresult.children.push(new WmlCommentRangeEnd(xml.attr(el, \"id\")));\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.parseChange(DomType.Inserted, 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.parseChange(DomType.Deleted, 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 = <WmlHyperlink>{ type: DomType.Hyperlink, parent: parent, children: [] };\r\n\r\n\t\tresult.anchor = xml.attr(node, \"anchor\");\r\n\t\tresult.id = xml.attr(node, \"id\");\r\n\r\n\t\tfor (const c of xml.elements(node)) {\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\tparseSmartTag(node: Element, parent?: OpenXmlElement): WmlSmartTag {\r\n\t\tvar result: WmlSmartTag = { type: DomType.SmartTag, parent, children: [] };\r\n\t\tvar uri = xml.attr(node, \"uri\");\r\n\t\tvar element = xml.attr(node, \"element\");\r\n\r\n\t\tif (uri)\r\n\t\t\tresult.uri = uri;\r\n\r\n\t\tif (element)\r\n\t\t\tresult.element = element;\r\n\r\n\t\tfor (const c of xml.elements(node)) {\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\tcase \"smartTag\":\r\n\t\t\t\t\tresult.children.push(this.parseSmartTag(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 = <WmlRun>{ type: DomType.Run, parent: parent, children: [] };\r\n\r\n\t\tfor (let c of xml.elements(node)) {\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(<WmlText>{\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(<WmlText>{\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 \"commentReference\":\r\n\t\t\t\t\tresult.children.push(new WmlCommentReference(xml.attr(c, \"id\")));\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(<WmlFieldSimple>{\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(<WmlInstructionText>{\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(<WmlFieldChar>{\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(<WmlBreak>{\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(<WmlBreak>{\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(<WmlSymbol>{\r\n\t\t\t\t\t\ttype: DomType.Symbol,\r\n\t\t\t\t\t\tfont: encloseFontFamily(xml.attr(c, \"font\")),\r\n\t\t\t\t\t\tchar: xml.hexAttr(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(<WmlNoteReference>{\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(<WmlNoteReference>{\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.push(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<string, any> {\r\n\t\tconst result: Record<string, any> = {};\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 \"vertJc\": result.verticalJustification = xml.attr(el, \"val\"); break;\r\n\t\t\t\tcase \"pos\": result.position = 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, this);\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 = <OpenXmlElement>{ 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\t\tlet behindDoc = xml.boolAttr(node, \"behindDoc\");\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 = convertLength(offsetNode.textContent, 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 = <IDomImage>{ 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\t\tvar srcRect = xml.element(blipFill, \"srcRect\");\r\n\r\n\t\tresult.src = xml.attr(blip, \"embed\");\r\n\r\n\t\tif (srcRect) {\r\n\t\t\tresult.srcRect = [\r\n\t\t\t\txml.intAttr(srcRect, \"l\", 0) / 100000,\r\n\t\t\t\txml.intAttr(srcRect, \"t\", 0) / 100000,\r\n\t\t\t\txml.intAttr(srcRect, \"r\", 0) / 100000,\r\n\t\t\t\txml.intAttr(srcRect, \"b\", 0) / 100000,\r\n\t\t\t];\r\n\t\t}\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\tif (xfrm) {\r\n\t\t\tresult.rotation = xml.intAttr(xfrm, \"rot\", 0) / 60000;\r\n\r\n\t\t\tfor (var n of xml.elements(xfrm)) {\r\n\t\t\t\tswitch (n.localName) {\r\n\t\t\t\t\tcase \"ext\":\r\n\t\t\t\t\t\tresult.cssStyle[\"width\"] = xml.lengthAttr(n, \"cx\", LengthUsage.Emu);\r\n\t\t\t\t\t\tresult.cssStyle[\"height\"] = xml.lengthAttr(n, \"cy\", LengthUsage.Emu);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"off\":\r\n\t\t\t\t\t\tresult.cssStyle[\"left\"] = xml.lengthAttr(n, \"x\", LengthUsage.Emu);\r\n\t\t\t\t\t\tresult.cssStyle[\"top\"] = xml.lengthAttr(n, \"y\", LengthUsage.Emu);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\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\tfor (const c of xml.elements(node)) {\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\tfor (const n of xml.elements(node)) {\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\r\n\t\t\t\tcase \"hidden\":\r\n\t\t\t\t\ttable.cssStyle[\"display\"] = \"none\";\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\tvar horzAnchor = xml.attr(node, \"horzAnchor\"); // margin | page | text\r\n\t\tvar vertAnchor = xml.attr(node, \"vertAnchor\");\r\n\t\tvar tblpXSpec = xml.attr(node, \"tblpXSpec\"); // left | center | right | ...\r\n\t\tvar tblpYSpec = xml.attr(node, \"tblpYSpec\"); // top | center | bottom | ...\r\n\r\n\t\t// Bottom-anchored floating tables (公文版记行: vertAnchor=\"margin\" +\r\n\t\t// tblpYSpec=\"bottom\") pin to the bottom of the text area. Page\r\n\t\t// sections are position:relative and expose their paddings as\r\n\t\t// --docx-pad-* variables (see createPageElement), so the table is\r\n\t\t// taken out of normal flow and anchored absolutely.\r\n\t\tif (tblpYSpec == \"bottom\" && vertAnchor != \"text\") {\r\n\t\t\ttable.cssStyle[\"position\"] = \"absolute\";\r\n\t\t\ttable.cssStyle[\"bottom\"] = vertAnchor == \"page\" ? \"0px\" : \"var(--docx-pad-bottom, 0px)\";\r\n\r\n\t\t\tif (tblpXSpec == \"right\") {\r\n\t\t\t\ttable.cssStyle[\"right\"] = horzAnchor == \"page\" ? \"0px\" : \"var(--docx-pad-right, 0px)\";\r\n\t\t\t} else if (tblpXSpec == \"center\") {\r\n\t\t\t\ttable.cssStyle[\"left\"] = \"50%\";\r\n\t\t\t\ttable.cssStyle[\"transform\"] = \"translateX(-50%)\";\r\n\t\t\t} else {\r\n\t\t\t\ttable.cssStyle[\"left\"] = horzAnchor == \"page\" ? \"0px\" : \"var(--docx-pad-left, 0px)\";\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\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\tfor (const c of xml.elements(node)) {\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\tcase \"tblPrEx\":\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\tcase \"gridBefore\":\r\n\t\t\t\t\trow.gridBefore = xml.intAttr(c, \"val\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"gridAfter\":\r\n\t\t\t\t\trow.gridAfter = 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\t}\r\n\r\n\tparseTableCell(node: Element): OpenXmlElement {\r\n\t\tvar result: WmlTableCell = { type: DomType.Cell, children: [] };\r\n\r\n\t\tfor (const c of xml.elements(node)) {\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\r\n\t\tthis.parseTableCellVerticalText(elem, cell);\r\n\t}\r\n\r\n\tparseTableCellVerticalText(elem: Element, cell: WmlTableCell) {\r\n\t\tconst directionMap = {\r\n\t\t\t\"btLr\": {\r\n\t\t\t\twritingMode: \"vertical-rl\",\r\n\t\t\t\ttransform: \"rotate(180deg)\"\r\n\t\t\t},\r\n\t\t\t\"lrTb\": {\r\n\t\t\t\twritingMode: \"vertical-lr\",\r\n\t\t\t\ttransform: \"none\"\r\n\t\t\t},\r\n\t\t\t\"tbRl\": {\r\n\t\t\t\twritingMode: \"vertical-rl\",\r\n\t\t\t\ttransform: \"none\"\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tfor (const c of xml.elements(elem)) {\r\n\t\t\tif (c.localName === \"textDirection\") {\r\n\t\t\t\tconst direction = xml.attr(c, \"val\");\r\n\t\t\t\tconst style = directionMap[direction] || { writingMode: \"horizontal-tb\" };\r\n\t\t\t\tcell.cssStyle[\"writing-mode\"] = style.writingMode;\r\n\t\t\t\tcell.cssStyle[\"transform\"] = style.transform;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tparseDefaultProperties(elem: Element, style: Record<string, string> = null, childStyle: Record<string, string> = null, handler: (prop: Element) => boolean = null): Record<string, string> {\r\n\t\tstyle = style || {};\r\n\r\n\t\tfor (const c of xml.elements(elem)) {\r\n\t\t\tif (handler?.(c))\r\n\t\t\t\tcontinue;\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[\"font-variant\"] = xml.boolAttr(c, \"val\", true) ? \"small-caps\" : \"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 \"rtl\":\r\n\t\t\t\tcase \"bidi\":\r\n\t\t\t\t\tif (xml.boolAttr(c, \"val\", true))\r\n\t\t\t\t\t\tstyle[\"direction\"] = \"rtl\";\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 \"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<string, string>) {\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\"] = \"underline 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\"] = \"underline dotted\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"double\":\r\n\t\t\t\tstyle[\"text-decoration\"] = \"underline 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\"] = \"underline 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<string, string>) {\r\n\t\t// Fonts are resolved per script (Latin / East Asian) as CSS custom\r\n\t\t// properties, which inherit independently down the style hierarchy —\r\n\t\t// mirroring Word's per-script font resolution. A run-level rFonts\r\n\t\t// carrying only w:ascii then overrides just the Latin component and\r\n\t\t// keeps the East Asian font inherited from the paragraph style,\r\n\t\t// instead of clobbering the whole font-family. The universal rule in\r\n\t\t// renderDefaultStyle composes the final font-family on every element.\r\n\t\tvar ascii = xml.attr(node, \"ascii\") ?? xml.attr(node, \"hAnsi\")\r\n\t\t\t?? values.themeValue(node, \"asciiTheme\") ?? values.themeValue(node, \"hAnsiTheme\");\r\n\t\tvar eastAsia = xml.attr(node, \"eastAsia\") ?? values.themeValue(node, \"eastAsiaTheme\");\r\n\r\n\t\tif (ascii) style[\"--docx-font-ascii\"] = encloseFontFamily(ascii);\r\n\t\tif (eastAsia) style[\"--docx-font-ea\"] = encloseFontFamily(eastAsia);\r\n\t}\r\n\r\n\tparseIndentation(node: Element, style: Record<string, string>) {\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-inline-start\"] = left || start;\r\n\t\tif (right || end) style[\"margin-inline-end\"] = right || end;\r\n\t}\r\n\r\n\tparseSpacing(node: Element, style: Record<string, string>) {\r\n\t\tvar before = xml.lengthAttr(node, \"before\");\r\n\t\tvar after = xml.lengthAttr(node, \"after\");\r\n\t\tvar beforeLines = xml.intAttr(node, \"beforeLines\", null);\r\n\t\tvar afterLines = xml.intAttr(node, \"afterLines\", null);\r\n\t\tvar line = xml.intAttr(node, \"line\", null);\r\n\t\tvar lineRule = xml.attr(node, \"lineRule\");\r\n\r\n\t\t// beforeLines/afterLines are hundredths of a line; 1em approximates\r\n\t\t// Word's single line height closely enough for preview purposes.\r\n\t\tif (before) style[\"margin-top\"] = before;\r\n\t\telse if (beforeLines != null) style[\"margin-top\"] = `${beforeLines / 100}em`;\r\n\t\tif (after) style[\"margin-bottom\"] = after;\r\n\t\telse if (afterLines != null) style[\"margin-bottom\"] = `${afterLines / 100}em`;\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\t// Word: line height = max(natural, X). calc(100% + X)\r\n\t\t\t\t\t// renders nearly double that; plain X is the closer\r\n\t\t\t\t\t// approximation for typical (CJK) documents.\r\n\t\t\t\t\tstyle[\"line-height\"] = `${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<string, string>) {\r\n\t\tfor (const c of xml.elements(node)) {\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<string, string>) {\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<string, string>) {\r\n\t\tfor (const c of xml.elements(node)) {\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 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\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 = values.parseBorderType(xml.attr(c, \"val\"));\r\n\r\n\t\tif (type == \"none\")\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} ${type} ${color == \"auto\" ? autos.borderColor : color}`;\r\n\t}\r\n\r\n\tstatic parseBorderType(type: string) {\r\n\t\tswitch (type) {\r\n\t\t\tcase \"single\": return \"solid\";\r\n\t\t\tcase \"dashDotStroked\": return \"solid\";\r\n\t\t\tcase \"dashed\": return \"dashed\";\r\n\t\t\tcase \"dashSmallGap\": return \"dashed\";\r\n\t\t\tcase \"dotDash\": return \"dotted\";\r\n\t\t\tcase \"dotDotDash\": return \"dotted\";\r\n\t\t\tcase \"dotted\": return \"dotted\";\r\n\t\t\tcase \"double\": return \"double\";\r\n\t\t\tcase \"doubleWave\": return \"double\";\r\n\t\t\tcase \"inset\": return \"inset\";\r\n\t\t\tcase \"nil\": return \"none\";\r\n\t\t\tcase \"none\": return \"none\";\r\n\t\t\tcase \"outset\": return \"outset\";\r\n\t\t\tcase \"thick\": return \"solid\";\r\n\t\t\tcase \"thickThinLargeGap\": return \"solid\";\r\n\t\t\tcase \"thickThinMediumGap\": return \"solid\";\r\n\t\t\tcase \"thickThinSmallGap\": return \"solid\";\r\n\t\t\tcase \"thinThickLargeGap\": return \"solid\";\r\n\t\t\tcase \"thinThickMediumGap\": return \"solid\";\r\n\t\t\tcase \"thinThickSmallGap\": return \"solid\";\r\n\t\t\tcase \"thinThickThinLargeGap\": return \"solid\";\r\n\t\t\tcase \"thinThickThinMediumGap\": return \"solid\";\r\n\t\t\tcase \"thinThickThinSmallGap\": return \"solid\";\r\n\t\t\tcase \"threeDEmboss\": return \"solid\";\r\n\t\t\tcase \"threeDEngrave\": return \"solid\";\r\n\t\t\tcase \"triple\": return \"double\";\r\n\t\t\tcase \"wave\": return \"solid\";\r\n\t\t}\r\n\r\n\t\treturn 'solid';\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\tif (val)\r\n\t\t\treturn classes.filter((_, i) => val[i] == '1').join(' ');\r\n\r\n\t\tconst attrs = [\r\n\t\t\t'firstRow', 'lastRow', 'firstColumn', 'lastColumn',\r\n\t\t\t'oddVBand', 'evenVBand', 'oddHBand', 'evenHBand',\r\n\t\t\t'firstRowLastColumn', 'firstRowFirstColumn', 'lastRowLastColumn', 'lastRowFirstColumn'\r\n\t\t];\r\n\r\n\t\treturn classes.filter((_, i) => xml.boolAttr(c, attrs[i])).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}\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 = \"&nbsp;\";\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 { isString } from \"./utils\";\r\n\r\nexport enum ns {\r\n html = \"http://www.w3.org/1999/xhtml\",\r\n svg = \"http://www.w3.org/2000/svg\",\r\n mathML = \"http://www.w3.org/1998/Math/MathML\"\r\n}\r\n\r\nexport type HElement = {\r\n ns?: ns;\r\n tagName: \"#fragment\" | \"#comment\" | string;\r\n className?: string;\r\n style?: string | Record<string, string>;\r\n children?: (HElement | Node | string)[];\r\n} & Record<string, any>;\r\n\r\nexport function h(elem: HElement | Node | string) {\r\n if (isString(elem)) return document.createTextNode(elem);\r\n if (elem instanceof Node) return elem;\r\n\r\n const { ns, tagName, className, style, children, ...props } = elem;\r\n\r\n if (tagName === \"#fragment\") return document.createDocumentFragment();\r\n if (tagName === \"#comment\") return document.createComment(children[0] as string);\r\n const result = (ns ? document.createElementNS(ns, tagName) : document.createElement(tagName)) as HTMLElement | SVGElement | MathMLElement;\r\n if (className) result.setAttribute(\"class\", className);\r\n if (style) {\r\n if (isString(style)) {\r\n result.setAttribute(\"style\", style);\r\n } else {\r\n // CSS custom properties (\"--*\") are not members of\r\n // CSSStyleDeclaration — Object.assign drops them, so they must\r\n // go through setProperty.\r\n for (const [key, value] of Object.entries(style)) {\r\n if (key.startsWith(\"--\")) result.style.setProperty(key, value);\r\n else (result.style as any)[key] = value;\r\n }\r\n }\r\n }\r\n if (props) {\r\n for (const [key, value] of Object.entries(props))\r\n if (value !== undefined)\r\n result[key] = value\r\n }\r\n if (children) children.forEach(c => result.appendChild(h(c)));\r\n return result;\r\n}\r\n\r\nexport function cx(...classNames: (string | false | undefined)[]) {\r\n return classNames.filter(Boolean).join(\" \");\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\tWmlSmartTag,\r\n\tWmlAltChunk,\r\n\tWmlTableRow,\r\n\tWmlChange\r\n} from './document/dom';\r\nimport { Options } from './docx-preview';\r\nimport { DocumentElement } from './document/document';\r\nimport { WmlParagraph } from './document/paragraph';\r\nimport { asArray, encloseFontFamily, 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 } 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 { VmlElement } from './vml/vml';\r\nimport { WmlCommentRangeStart, WmlCommentReference } from './comments/elements';\r\nimport { WmlFieldChar, WmlInstructionText } from './document/fields';\r\nimport { cx, h, ns } from './html';\r\n\r\ninterface CellPos {\r\n\tcol: number;\r\n\trow: number;\r\n}\r\n\r\ninterface Section {\r\n\tsectProps: SectionProperties;\r\n\telements: OpenXmlElement[];\r\n\tpageBreak: boolean;\r\n}\r\n\r\ndeclare const Highlight: any;\r\n\r\ntype CellVerticalMergeType = Record<number, HTMLTableCellElement>;\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<string, IDomStyle> = {};\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<string, WmlFootnote> = {};\r\n\tendnoteMap: Record<string, WmlFootnote> = {};\r\n\tcurrentFootnoteIds: string[];\r\n\tcurrentEndnoteIds: string[] = [];\r\n\tusedHederFooterParts: any[] = [];\r\n\r\n\tdefaultTabSize: string;\r\n\tcurrentTabs: any[] = [];\r\n\r\n\tlegacyCompat: boolean = false;\r\n\tprivate defaultParagraphStyle: IDomStyle;\r\n\tprivate docDefaultsStyle: IDomStyle;\r\n\r\n\tcommentHighlight: any;\r\n\tcommentMap: Record<string, Range> = {};\r\n\r\n\ttasks: Promise<any>[] = [];\r\n\tpostRenderTasks: any[] = [];\r\n\th = h;\r\n\r\n\tasync render(document: WordDocument, options: Options): Promise<Node[]> {\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.h = options.h ?? h;\r\n\t\tthis.styleMap = null;\r\n\t\tthis.tasks = [];\r\n\r\n\t\tif (this.options.renderComments && globalThis.Highlight) {\r\n\t\t\tthis.commentHighlight = new Highlight();\r\n\t\t}\r\n\r\n\t\tconst result: Node[] = [...this.renderDefaultStyle()];\r\n\r\n\t\tif (document.themePart) {\r\n\t\t\tresult.push(...this.renderTheme(document.themePart));\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\t\t\tresult.push(...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\tresult.push(...await this.renderNumbering(document.numberingPart.domNumberings));\r\n\t\t\t//result.push(...await this.renderNumbering2(document.numberingPart.domNumberings));\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\r\n\t\t\t// Word 2003 layout rules (compatMode 11 — typical for WPS-authored\r\n\t\t\t// documents) expand space runs even on the last line of justified\r\n\t\t\t// paragraphs; see renderParagraph for the actual application.\r\n\t\t\tconst compatMode = document.settingsPart.settings?.compatMode;\r\n\t\t\tthis.legacyCompat = compatMode != null && compatMode <= 11;\r\n\t\t}\r\n\r\n\t\tif (!options.ignoreFonts && document.fontTablePart)\r\n\t\t\tresult.push(...await this.renderFontTable(document.fontTablePart));\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\tresult.push(this.renderWrapper(sectionElements));\r\n\t\t} else {\r\n\t\t\tresult.push(...sectionElements);\r\n\t\t}\r\n\r\n\t\tif (this.commentHighlight && options.renderComments) {\r\n\t\t\t(CSS as any).highlights.set(`${this.className}-comments`, this.commentHighlight);\r\n\t\t}\r\n\r\n\t\tthis.postRenderTasks.forEach(t => t());\r\n\r\n\t\tawait Promise.allSettled(this.tasks);\r\n\r\n\t\tthis.refreshTabStops();\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderTheme(themePart: ThemePart) {\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\t// An empty East Asian theme typeface falls back to the Latin\r\n\t\t\t\t// one, so var() references never come out undefined (which\r\n\t\t\t\t// would invalidate the whole font-family declaration).\r\n\t\t\t\tvariables['--docx-majorEastAsia-font'] = fontScheme.majorFont.eaTypeface || 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\tvariables['--docx-minorEastAsia-font'] = fontScheme.minorFont.eaTypeface || 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\treturn [\r\n\t\t\tthis.h({ tagName: \"#comment\", children: [\"docxjs document theme values\"] }),\r\n\t\t\tthis.h({ tagName: \"style\", children: [cssText] })\r\n\t\t];\r\n\t}\r\n\r\n\tasync renderFontTable(fontsPart: FontTablePart) {\r\n\t\tconst result = [];\r\n\r\n\t\tfor (let f of fontsPart.fonts) {\r\n\t\t\tfor (let ref of f.embedFontRefs) {\r\n\t\t\t\ttry{\r\n\t\t\t\t\tconst fontData = await this.document.loadFont(ref.id, ref.key);\r\n\t\t\t\t\tconst cssValues = {\r\n\t\t\t\t\t\t'font-family': encloseFontFamily(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\tresult.push(this.h({ tagName: \"#comment\", children: [`docxjs ${f.name} font`] }));\r\n\t\t\t\t\tresult.push(this.h({ tagName: \"style\", children: [this.styleToString(`@font-face`, cssValues)] }));\r\n\t\t\t\t} catch(e) {\r\n\t\t\t\t\tif (this.options.debug) console.warn(`Can't load font with id ${ref.id} and key ${ref.key}`);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\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\tthis.defaultParagraphStyle = styles.find(s => s.isDefault && s.target == \"p\");\r\n\t\tthis.docDefaultsStyle = styles.find(s => s.id == null);\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<string, string>, output: Record<string, string>, attrs: string[] = null): Record<string, string> {\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\tcreatePageElement(className: string, props: SectionProperties, docStyle: Record<string, any>) {\r\n\t\tconst style: Record<string, string> = { ...docStyle };\r\n\r\n\t\tif (props) {\r\n\t\t\tif (props.pageMargins) {\r\n\t\t\t\tstyle.paddingLeft = props.pageMargins.left;\r\n\t\t\t\tstyle.paddingRight = props.pageMargins.right;\r\n\t\t\t\tstyle.paddingTop = props.pageMargins.top;\r\n\t\t\t\tstyle.paddingBottom = props.pageMargins.bottom;\r\n\r\n\t\t\t\t// Exposed for absolutely-positioned content anchored to the\r\n\t\t\t\t// text area (floating tables with tblpYSpec=\"bottom\" etc.).\r\n\t\t\t\tstyle[\"--docx-pad-left\"] = props.pageMargins.left;\r\n\t\t\t\tstyle[\"--docx-pad-right\"] = props.pageMargins.right;\r\n\t\t\t\tstyle[\"--docx-pad-top\"] = props.pageMargins.top;\r\n\t\t\t\tstyle[\"--docx-pad-bottom\"] = 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\tstyle.width = props.pageSize.width;\r\n\t\t\t\tif (!this.options.ignoreHeight)\r\n\t\t\t\t\tstyle.minHeight = props.pageSize.height;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.h({ tagName: \"section\", className, style }) as HTMLElement;\r\n\t}\r\n\r\n\tcreateSectionContent(props: SectionProperties) {\r\n\t\tconst style: Record<string, string> = {};\r\n\r\n\t\tif (props.columns && props.columns.numberOfColumns) {\r\n\t\t\tstyle.columnCount = `${props.columns.numberOfColumns}`;\r\n\t\t\tstyle.columnGap = props.columns.space;\r\n\r\n\t\t\tif (props.columns.separator) {\r\n\t\t\t\tstyle.columnRule = \"1px solid black\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.h({ tagName: \"article\", style });\r\n\t}\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, document.props);\r\n\t\tconst pages = this.groupByPageBreaks(sections);\r\n\t\tlet prevProps = null;\r\n\r\n\t\tfor (let i = 0, l = pages.length; i < l; i++) {\t\t\t\r\n\t\t\tthis.currentFootnoteIds = [];\r\n\r\n\t\t\tconst section = pages[i][0];\r\n\t\t\tlet props = section.sectProps;\r\n\t\t\tconst pageElement = this.createPageElement(this.className, props, document.cssStyle);\r\n\r\n\t\t\tthis.options.renderHeaders && this.renderHeaderFooter(props.headerRefs, props,\r\n\t\t\t\tresult.length, prevProps != props, pageElement);\r\n\r\n\t\t\tfor (const sect of pages[i]) {\r\n\t\t\t\tvar contentElement = this.createSectionContent(sect.sectProps);\r\n\t\t\t\tthis.renderElements(sect.elements, contentElement);\r\n\t\t\t\tpageElement.appendChild(contentElement);\r\n\t\t\t\tprops = sect.sectProps;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.options.renderFootnotes) {\r\n\t\t\t\tconst notes = this.renderNotes(this.currentFootnoteIds, this.footnoteMap);\r\n\t\t\t\tnotes && pageElement.appendChild(notes);\r\n\t\t\t}\r\n\r\n\t\t\tif (this.options.renderEndnotes && i == l - 1) {\r\n\t\t\t\tconst notes = this.renderNotes(this.currentEndnoteIds, this.endnoteMap);\r\n\t\t\t\tnotes && pageElement.appendChild(notes);\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, pageElement);\r\n\r\n\t\t\tresult.push(pageElement);\r\n\t\t\tprevProps = props;\r\n\t\t}\r\n\r\n\t\tthis.resolvePageFields(result);\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\tconst [el] = this.renderElements([part.rootElement], into) as HTMLElement[];\r\n\r\n\t\t\tif (props?.pageMargins) {\r\n\t\t\t\tif (part.rootElement.type === DomType.Header) {\r\n\t\t\t\t\tel.style.marginTop = `calc(${props.pageMargins.header} - ${props.pageMargins.top})`;\r\n\t\t\t\t\tel.style.minHeight = `calc(${props.pageMargins.top} - ${props.pageMargins.header})`;\r\n\t\t\t\t}\r\n\t\t\t\telse if (part.rootElement.type === DomType.Footer) {\r\n\t\t\t\t\tel.style.marginBottom = `calc(${props.pageMargins.footer} - ${props.pageMargins.bottom})`;\r\n\t\t\t\t\tel.style.minHeight = `calc(${props.pageMargins.bottom} - ${props.pageMargins.footer})`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\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\tisPageBreakSection(prev: SectionProperties, next: SectionProperties): boolean {\r\n\t\tif (!prev) return false;\r\n\t\tif (!next) return false;\r\n\r\n\t\treturn prev.pageSize?.orientation != next.pageSize?.orientation\r\n\t\t\t|| prev.pageSize?.width != next.pageSize?.width\r\n\t\t\t|| prev.pageSize?.height != next.pageSize?.height;\r\n\t}\r\n\r\n\tsplitBySection(elements: OpenXmlElement[], defaultProps: SectionProperties): Section[] {\r\n\t\tvar current: Section = { sectProps: null, elements: [], pageBreak: false };\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.pageBreak = true;\r\n\t\t\t\t\tcurrent = { sectProps: null, elements: [], pageBreak: false };\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.pageBreak = pBreakIndex != -1;\r\n\t\t\t\t\tcurrent = { sectProps: null, elements: [], pageBreak: false };\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 ?? defaultProps;\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\tgroupByPageBreaks(sections: Section[]): Section[][] {\r\n\t\tlet current = [];\r\n\t\tlet prev: SectionProperties;\r\n\t\tconst result: Section[][] = [current];\r\n\r\n\t\tfor (let s of sections) {\r\n\t\t\tcurrent.push(s);\r\n\r\n\t\t\tif (this.options.ignoreLastRenderedPageBreak || s.pageBreak || this.isPageBreakSection(prev, s.sectProps))\r\n\t\t\t\tresult.push(current = []);\r\n\r\n\t\t\tprev = s.sectProps;\r\n\t\t}\r\n\r\n\t\treturn result.filter(x => x.length > 0);\r\n\t}\r\n\r\n\trenderWrapper(children: HTMLElement[]) {\r\n\t\treturn this.h({ tagName: \"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 wrapperStyle = `\r\n.${c}-wrapper { background: gray; padding: 30px; padding-bottom: 0px; display: flex; flex-flow: column; align-items: center; } \r\n.${c}-wrapper>section.${c} { background: white; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); margin-bottom: 30px; }`;\r\n\t\tif (this.options.hideWrapperOnPrint) {\r\n\t\t\twrapperStyle = `@media not print { ${wrapperStyle} }`;\r\n\t\t}\r\n\t\tvar styleText = `${wrapperStyle}\r\n.${c} { color: black; hyphens: auto; text-underline-position: from-font; }\r\n.${c} { --docx-font-ascii: serif; --docx-font-ea: serif; }\r\n.${c}, .${c} * { font-family: var(--docx-font-ascii), var(--docx-font-ea); }\r\nsection.${c} { box-sizing: border-box; display: flex; flex-flow: column nowrap; position: relative; overflow: hidden; }\r\nsection.${c}>article { margin-bottom: auto; z-index: 1; }\r\nsection.${c}>footer { z-index: 1; }\r\n.${c} table { border-collapse: collapse; }\r\n.${c} table td, .${c} table th { vertical-align: top; }\r\n.${c} p { margin: 0pt; min-height: 1em; }\r\n.${c} span { white-space: pre-wrap; overflow-wrap: break-word; }\r\n.${c} a { color: inherit; text-decoration: inherit; }\r\n.${c} svg { fill: transparent; }\r\n`;\r\n\r\n\t\tif (this.options.renderComments) {\r\n\t\t\tstyleText += `\r\n.${c}-comment-ref { cursor: default; }\r\n.${c}-comment-popover { display: none; z-index: 1000; padding: 0.5rem; background: white; position: absolute; box-shadow: 0 0 0.25rem rgba(0, 0, 0, 0.25); width: 30ch; }\r\n.${c}-comment-ref:hover~.${c}-comment-popover { display: block; }\r\n.${c}-comment-author,.${c}-comment-date { font-size: 0.875rem; color: #888; }\r\n`\r\n\t\t};\r\n\r\n\t\treturn [\r\n\t\t\tthis.h({ tagName: \"#comment\", children: [\"docxjs library predefined styles\"] }),\r\n\t\t\tthis.h({ tagName: \"style\", children: [styleText] })\r\n\t\t];\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\tasync renderNumbering(numberings: IDomNumbering[]) {\r\n\t\tvar styleText = \"\";\r\n\t\tvar resetCounters = [];\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\ttry {\r\n\t\t\t\t\tconst imgData = await this.document.loadNumberingImage(num.bullet.src);\r\n\t\t\t\t\tstyleText += `${this.rootSelector} { ${valiable}: url(${imgData}) }`;\r\n\t\t\t\t} catch(e) {\r\n\t\t\t\t\tif (this.options.debug) console.warn(`Can't load numbering image with src ${num.bullet.src}`);\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\t\t\t\tconst counterReset = counter + \" \" + (num.start - 1);\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-set\": counterReset\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\t// reset all level counters with start value\r\n\t\t\t\tresetCounters.push(counterReset);\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 (resetCounters.length > 0) {\r\n\t\t\tstyleText += this.styleToString(this.rootSelector, {\r\n\t\t\t\t\"counter-reset\": resetCounters.join(\" \")\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn [\r\n\t\t\tthis.h({ tagName: \"#comment\", children: [\"docxjs document numbering styles\"] }),\r\n\t\t\tthis.h({ tagName: \"style\", children: [styleText] })\r\n\t\t];\r\n\t}\r\n\r\n\trenderStyles(styles: IDomStyle[]) {\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\t// docDefaults run properties must sit at the very bottom of the\r\n\t\t\t\t// cascade. Emitted as \".docx span\" they would directly match\r\n\t\t\t\t// every span and beat fonts inherited from paragraph styles —\r\n\t\t\t\t// the reverse of Word's style hierarchy. Emitted on the root\r\n\t\t\t\t// container they are inherited, so paragraph fonts win.\r\n\t\t\t\tif (style.id == null && subStyle.target == \"span\")\r\n\t\t\t\t\tselector = `.${this.className}`;\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 [\r\n\t\t\tthis.h({ tagName: \"#comment\", children: [\"docxjs document styles\"] }),\r\n\t\t\tthis.h({ tagName: \"style\", children: [styleText] })\r\n\t\t];\r\n\t}\r\n\r\n\trenderNotes(noteIds: string[], notesMap: Record<string, WmlBaseNote>) {\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\treturn this.h({ tagName: \"ol\", children: this.renderElements(notes) });\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\t\t\t\r\n\t\t\tcase DomType.SmartTag:\r\n\t\t\t\treturn this.renderSmartTag(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.h({ tagName: \"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.MmlBase:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \r\n\t\t\t\t\telem.parent.type == DomType.MmlMatrixRow ? \"mtd\" : \"mrow\");\r\n\r\n\t\t\tcase DomType.MmlNumerator:\r\n\t\t\tcase DomType.MmlDenominator:\r\n\t\t\tcase DomType.MmlFunction:\r\n\t\t\tcase DomType.MmlLimit:\r\n\t\t\tcase DomType.MmlBox:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \"mrow\");\r\n\r\n\t\t\tcase DomType.MmlGroupChar:\r\n\t\t\t\treturn this.renderMmlGroupChar(elem);\r\n\r\n\t\t\tcase DomType.MmlLimitLower:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \"munder\");\r\n\r\n\t\t\tcase DomType.MmlMatrix:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \"mtable\");\r\n\r\n\t\t\tcase DomType.MmlMatrixRow:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \"mtr\");\r\n\t\r\n\t\t\tcase DomType.MmlRadical:\r\n\t\t\t\treturn this.renderMmlRadical(elem);\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\r\n\t\t\tcase DomType.MmlDegree:\r\n\t\t\tcase DomType.MmlSuperArgument:\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.MmlFunctionName:\r\n\t\t\t\treturn this.renderContainerNS(elem, ns.mathML, \"ms\");\r\n\t\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.MmlPreSubSuper:\r\n\t\t\t\treturn this.renderMmlPreSubSuper(elem);\r\n\r\n\t\t\tcase DomType.MmlBar:\r\n\t\t\t\treturn this.renderMmlBar(elem);\r\n\t\r\n\t\t\tcase DomType.MmlEquationArray:\r\n\t\t\t\treturn this.renderMllList(elem);\r\n\r\n\t\t\tcase DomType.Inserted:\r\n\t\t\t\treturn this.renderInserted(elem as WmlChange);\r\n\r\n\t\t\tcase DomType.Deleted:\r\n\t\t\t\treturn this.renderDeleted(elem as WmlChange);\r\n\r\n\t\t\tcase DomType.CommentRangeStart:\r\n\t\t\t\treturn this.renderCommentRangeStart(elem);\r\n\r\n\t\t\tcase DomType.CommentRangeEnd:\r\n\t\t\t\treturn this.renderCommentRangeEnd(elem);\r\n\r\n\t\t\tcase DomType.CommentReference:\r\n\t\t\t\treturn this.renderCommentReference(elem);\r\n\r\n\t\t\tcase DomType.AltChunk:\r\n\t\t\t\treturn this.renderAltChunk(elem);\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\trenderElements(elems: OpenXmlElement[], into?: Node): 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\tresult.forEach(c => into.appendChild(isString(c) ? document.createTextNode(c) : c));\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderContainer<T extends keyof HTMLElementTagNameMap>(elem: OpenXmlElement, tagName: T, props?: Record<string, any>): HTMLElementTagNameMap[T] {\r\n\t\treturn this.h({ tagName, children: this.renderElements(elem.children), ...props }) as any;\r\n\t}\r\n\r\n\trenderContainerNS(elem: OpenXmlElement, ns: ns, tagName: string, props?: Record<string, any>) {\r\n\t\treturn this.h({ ns, tagName, children: this.renderElements(elem.children), ...props });\r\n\t}\r\n\r\n\t/**\r\n\t * Marks the cached-result runs of PAGE / NUMPAGES complex fields with a\r\n\t * marker class (`docx-field-page` / `docx-field-numpages`), so the actual\r\n\t * numbers can be substituted once page layout is final (see the end of\r\n\t * renderSections and pagination.ts). Field runs themselves are skipped\r\n\t * by renderRun, leaving the cached value as a plain run between the\r\n\t * separate and end markers.\r\n\t */\r\n\tprivate markPageFieldRuns(elem: WmlParagraph) {\r\n\t\tlet instruction: string = null;\r\n\t\tlet inResult = false;\r\n\r\n\t\tfor (const run of elem.children ?? []) {\r\n\t\t\tif (run.type != DomType.Run) continue;\r\n\r\n\t\t\tfor (const sub of run.children ?? []) {\r\n\t\t\t\tif (sub.type == DomType.ComplexField) {\r\n\t\t\t\t\tconst charType = (sub as WmlFieldChar).charType;\r\n\t\t\t\t\tif (charType == \"begin\") { instruction = null; inResult = false; }\r\n\t\t\t\t\telse if (charType == \"separate\") inResult = true;\r\n\t\t\t\t\telse if (charType == \"end\") { instruction = null; inResult = false; }\r\n\t\t\t\t} else if (sub.type == DomType.Instruction) {\r\n\t\t\t\t\tinstruction = (sub as WmlInstructionText).text?.trim().split(/\\s/)[0]?.toUpperCase();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (inResult && (instruction == \"PAGE\" || instruction == \"NUMPAGES\") && !(run as WmlRun).fieldRun) {\r\n\t\t\t\trun.className = cx(run.className, `${this.className}-field-${instruction.toLowerCase()}`);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Substitutes final page numbers into PAGE / NUMPAGES field markers\r\n\t * across the given page sections. Numbering is continuous from 1 —\r\n\t * per-section restarts (w:pgNumType) are not modeled yet.\r\n\t */\r\n\tprivate resolvePageFields(pages: HTMLElement[]) {\r\n\t\tconst total = `${pages.length}`;\r\n\r\n\t\tpages.forEach((page, i) => {\r\n\t\t\tfor (const el of Array.from(page.querySelectorAll(`.${this.className}-field-page`)))\r\n\t\t\t\tel.textContent = `${i + 1}`;\r\n\t\t\tfor (const el of Array.from(page.querySelectorAll(`.${this.className}-field-numpages`)))\r\n\t\t\t\tel.textContent = total;\r\n\t\t});\r\n\t}\r\n\r\n\trenderParagraph(elem: WmlParagraph) {\r\n\t\tthis.markPageFieldRuns(elem);\r\n\r\n\t\tvar result = this.toHTML(elem, ns.html, \"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\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\t// Legacy Word 2003 layout (compatMode 11, typical for WPS-authored\r\n\t\t// documents) expands space runs even on the last line of a justified\r\n\t\t// paragraph — e.g. the 密级…发文字号 header line spread across the\r\n\t\t// text width by a run of spaces. CSS justify never stretches the last\r\n\t\t// line, so opt such paragraphs into text-align-last, but only when\r\n\t\t// they actually contain a deliberate interior space gap (otherwise\r\n\t\t// every justified body paragraph's last line would be stretched).\r\n\t\tif (this.legacyCompat && this.textAlignOf(elem) === \"justify\"\r\n\t\t\t&& / {2,}| {2,}| /.test(result.textContent)) {\r\n\t\t\tresult.style.setProperty(\"text-align-last\", \"justify\");\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/** Effective text-align of a paragraph: direct formatting, then its\r\n\t * style, then the default paragraph style, then docDefaults. */\r\n\tprivate textAlignOf(elem: WmlParagraph): string | null {\r\n\t\tif (elem.cssStyle?.[\"text-align\"])\r\n\t\t\treturn elem.cssStyle[\"text-align\"];\r\n\r\n\t\tconst from = (s: IDomStyle) =>\r\n\t\t\ts?.styles?.find(x => x.target == \"p\")?.values?.[\"text-align\"];\r\n\r\n\t\treturn from(this.findStyle(elem.styleName))\r\n\t\t\t?? from(this.defaultParagraphStyle)\r\n\t\t\t?? from(this.docDefaultsStyle)\r\n\t\t\t?? null;\r\n\t}\r\n\r\n\trenderHyperlink(elem: WmlHyperlink) {\r\n\t\tconst res = this.toH(elem, ns.html, \"a\");\r\n\t\tres.href = '';\r\n\r\n\t\tif (elem.id) {\r\n\t\t\tconst rel = this.document.documentPart.rels.find(it => it.id == elem.id && it.targetMode === \"External\");\r\n\t\t\tres.href = rel?.target ?? res.href;\r\n\t\t}\r\n\r\n\t\tif (elem.anchor) {\r\n\t\t\tres.href += `#${elem.anchor}`;\r\n\t\t}\r\n\r\n\t\treturn this.h(res);\r\n\t}\r\n\t\r\n\trenderSmartTag(elem: WmlSmartTag) {\r\n\t\treturn this.renderContainer(elem, \"span\");\r\n\t}\r\n\t\r\n\trenderCommentRangeStart(commentStart: WmlCommentRangeStart) {\r\n\t\tif (!this.options.renderComments)\r\n\t\t\treturn null;\r\n\r\n\t\tconst rng = new Range();\r\n\t\tthis.commentHighlight?.add(rng);\r\n\r\n\t\tconst result = this.h({ tagName: \"#comment\", children: [`start of comment #${commentStart.id}`] });\r\n\t\tthis.later(() => rng.setStart(result, 0));\r\n\t\tthis.commentMap[commentStart.id] = rng;\r\n\r\n\t\treturn result\r\n\t}\r\n\r\n\trenderCommentRangeEnd(commentEnd: WmlCommentRangeStart) {\r\n\t\tif (!this.options.renderComments)\r\n\t\t\treturn null;\r\n\r\n\t\tconst rng = this.commentMap[commentEnd.id];\r\n\t\tconst result = this.h({ tagName: \"#comment\", children: [`end of comment #${commentEnd.id}`] });\r\n\t\tthis.later(() => rng?.setEnd(result, 0));\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderCommentReference(commentRef: WmlCommentReference) {\r\n\t\tif (!this.options.renderComments)\r\n\t\t\treturn null;\r\n\r\n\t\tvar comment = this.document.commentsPart?.commentMap[commentRef.id];\r\n\r\n\t\tif (!comment)\r\n\t\t\treturn null;\r\n\r\n\t\tconst commentRefEl = this.h({ tagName: \"span\", className: `${this.className}-comment-ref`, children: ['💬'] });\r\n\t\tconst commentsContainerEl = this.h({\r\n\t\t\ttagName: \"div\", className: `${this.className}-comment-popover`, children: [\r\n\t\t\t\tthis.h({ tagName: 'div', className: `${this.className}-comment-author`, children: [comment.author] }),\r\n\t\t\t\tthis.h({ tagName: 'div', className: `${this.className}-comment-date`, children: [new Date(comment.date).toLocaleString()] }),\r\n\t\t\t\t...this.renderElements(comment.children)\r\n\t\t\t]\r\n\t\t});\r\n\r\n\t\treturn this.h({ tagName: \"#fragment\", children: [\r\n\t\t\tthis.h({ tagName: \"#comment\", children: [`comment #${comment.id} by ${comment.author} on ${comment.date}`] }),\r\n\t\t\tcommentRefEl,\r\n\t\t\tcommentsContainerEl\r\n\t\t] });\r\n\t}\r\n\r\n\trenderAltChunk(elem: WmlAltChunk) {\r\n\t\tif (!this.options.renderAltChunks)\r\n\t\t\treturn null;\r\n\r\n\t\tvar result = this.h({ tagName: \"iframe\" }) as HTMLIFrameElement;\r\n\t\t\r\n\t\tthis.tasks.push(this.document.loadAltChunk(elem.id, this.currentPart).then(x => {\r\n\t\t\tresult.srcdoc = x;\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.toHTML(elem, ns.html, \"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\treturn result;\r\n\t}\r\n\r\n\trenderImage(elem: IDomImage) {\r\n\t\tlet result = this.toHTML(elem, ns.html, \"img\", []);\r\n\t\tlet transform = elem.cssStyle?.transform;\r\n\r\n\t\tif (elem.srcRect && elem.srcRect.some(x => x != 0)) {\r\n\t\t\tvar [left, top, right, bottom] = elem.srcRect;\r\n\t\t\ttransform = `scale(${1 / (1 - left - right)}, ${1 / (1 - top - bottom)})`;\r\n\t\t\tresult.style['clip-path'] = `rect(${(100 * top).toFixed(2)}% ${(100 * (1 - right)).toFixed(2)}% ${(100 * (1 - bottom)).toFixed(2)}% ${(100 * left).toFixed(2)}%)`;\r\n\t\t}\r\n\r\n\t\tif (elem.rotation)\r\n\t\t\ttransform = `rotate(${elem.rotation}deg) ${transform ?? ''}`;\r\n\r\n\t\tresult.style.transform = transform?.trim();\r\n\r\n\t\tif (this.document) {\r\n\t\t\tthis.tasks.push(this.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.h(elem.text);\r\n\t}\r\n\r\n\trenderDeletedText(elem: WmlText) {\r\n\t\treturn this.options.renderChanges ? this.renderText(elem) : null;\r\n\t}\r\n\r\n\trenderBreak(elem: WmlBreak) {\r\n\t\treturn elem.break == \"textWrapping\" ? this.h({ tagName: \"br\" }) : null;\r\n\t}\r\n\r\n\trenderInserted(elem: WmlChange): Node | Node[] {\r\n\t\tif (this.options.renderChanges)\r\n\t\t\treturn this.renderChange(elem, \"ins\");\r\n\r\n\t\treturn this.renderElements(elem.children);\r\n\t}\r\n\r\n\trenderDeleted(elem: WmlChange): Node {\r\n\t\tif (this.options.renderChanges)\r\n\t\t\treturn this.renderChange(elem, \"del\");\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\trenderChange(elem: WmlChange, tag: string) {\r\n\t\treturn this.renderContainer(elem, tag as any, {\r\n\t\t\tdateTime: elem.date\t\t\r\n\t\t});\r\n\t}\r\n\r\n\trenderSymbol(elem: WmlSymbol) {\r\n\t\treturn this.h({ tagName: \"span\", children: [String.fromCharCode(elem.char)], style: { fontFamily: elem.font } });\r\n\t}\r\n\r\n\trenderFootnoteReference(elem: WmlNoteReference) {\r\n\t\tthis.currentFootnoteIds.push(elem.id);\r\n\t\treturn this.h({ tagName: \"sup\", children: [`${this.currentFootnoteIds.length}`] });\r\n\t}\r\n\r\n\trenderEndnoteReference(elem: WmlNoteReference) {\r\n\t\tthis.currentEndnoteIds.push(elem.id);\r\n\t\treturn this.h({ tagName: \"sup\", children: [`${this.currentEndnoteIds.length}`] });\r\n\t}\r\n\r\n\trenderTab(elem: OpenXmlElement) {\r\n\t\tvar tabSpan = this.h({ tagName: \"span\", children: [\"\\u2003\"] }) as HTMLElement;//\"&nbsp;\";\r\n\r\n\t\tif (this.options.experimental) {\r\n\t\t\ttabSpan.className = this.tabStopClass();\r\n\t\t\tvar stops = findParent<WmlParagraph>(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) {\r\n\t\treturn this.h({ tagName: \"span\", id: elem.name });\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\tlet children = this.renderElements(elem.children);\r\n\r\n\t\tif (elem.verticalAlign) {\r\n\t\t\tchildren = [this.h({ tagName: elem.verticalAlign, children: this.renderElements(elem.children) })];\r\n\t\t}\r\n\r\n\t\tconst result = this.toHTML(elem, ns.html, \"span\", children);\r\n\r\n\t\tif (elem.id)\r\n\t\t\tresult.id = elem.id;\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderTable(elem: WmlTable) {\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\tconst children = [];\r\n\r\n\t\tif (elem.columns)\r\n\t\t\tchildren.push(this.renderTableColumns(elem.columns));\r\n\r\n\t\tchildren.push(...this.renderElements(elem.children));\r\n\r\n\t\tthis.currentVerticalMerge = this.tableVerticalMerges.pop();\r\n\t\tthis.currentCellPosition = this.tableCellPositions.pop();\r\n\t\treturn this.toHTML(elem, ns.html, \"table\", children);\r\n\t}\r\n\r\n\trenderTableColumns(columns: WmlTableColumn[]) {\r\n\t\tconst children = columns.map(x => this.h({ tagName: \"col\", style: { width: x.width } }));\r\n\t\treturn this.h({ tagName: \"colgroup\", children });\r\n\t}\r\n\r\n\trenderTableRow(elem: WmlTableRow) {\r\n\t\tthis.currentCellPosition.col = 0;\r\n\r\n\t\tconst children = [];\r\n\r\n\t\tif (elem.gridBefore)\r\n\t\t\tchildren.push(this.renderTableCellPlaceholder(elem.gridBefore));\r\n\r\n\t\tchildren.push(...this.renderElements(elem.children));\r\n\r\n\t\tif (elem.gridAfter)\r\n\t\t\tchildren.push(this.renderTableCellPlaceholder(elem.gridAfter));\r\n\r\n\t\tthis.currentCellPosition.row++;\r\n\r\n\t\treturn this.toHTML(elem, ns.html, \"tr\", children) as HTMLTableRowElement;\r\n\t}\r\n\r\n\trenderTableCellPlaceholder(colSpan: number) {\r\n\t\treturn this.h({ tagName: \"td\", colSpan, style: { border: \"none\" } });\r\n\t}\r\n\r\n\trenderTableCell(elem: WmlTableCell) {\r\n\t\tlet result = this.toHTML(elem, ns.html, \"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\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\treturn this.renderContainer(elem, \"div\");\r\n\t}\r\n\r\n\trenderVmlElement(elem: VmlElement): SVGElement {\r\n\t\tvar container = this.h({ ns: ns.svg, tagName: \"svg\", style: elem.cssStyleText }) as SVGElement;\r\n\r\n\t\tconst result = this.renderVmlChildElement(elem);\r\n\r\n\t\tif (elem.imageHref?.id) {\r\n\t\t\tthis.tasks.push(this.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\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\trenderVmlChildElement(elem: VmlElement): any {\r\n\t\tconst result = this.createSvgElement(elem.tagName as any);\r\n\t\tObject.entries(elem.attrs).forEach(([k, v]) => result.setAttribute(k, v));\r\n\r\n\t\tfor (let child of elem.children) {\r\n\t\t\tif (child.type == DomType.VmlElement) {\r\n\t\t\t\tresult.appendChild(this.renderVmlChildElement(child as VmlElement));\r\n\t\t\t} else {\r\n\t\t\t\tresult.appendChild(...asArray(this.renderElement(child as any)));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderMmlRadical(elem: OpenXmlElement) {\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 this.createMathMLElement(\"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 this.createMathMLElement(\"mroot\", null, this.renderElements([base, degree]));\r\n\t}\r\n\r\n\trenderMmlDelimiter(elem: OpenXmlElement) {\t\t\r\n\t\tconst children = [];\r\n\r\n\t\tchildren.push(this.createMathMLElement(\"mo\", null, [elem.props.beginChar ?? '(']));\r\n\t\tchildren.push(...this.renderElements(elem.children));\r\n\t\tchildren.push(this.createMathMLElement(\"mo\", null, [elem.props.endChar ?? ')']));\r\n\r\n\t\treturn this.createMathMLElement(\"mrow\", null, children);\r\n\t}\r\n\r\n\trenderMmlNary(elem: OpenXmlElement) {\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 ? this.createMathMLElement(\"mo\", null, asArray(this.renderElement(sup))) : null;\r\n\t\tconst subElem = sub ? this.createMathMLElement(\"mo\", null, asArray(this.renderElement(sub))) : null;\r\n\r\n\t\tconst charElem = this.createMathMLElement(\"mo\", null, [elem.props?.char ?? '\\u222B']);\r\n\r\n\t\tif (supElem || subElem) {\r\n\t\t\tchildren.push(this.createMathMLElement(\"munderover\", null, [charElem, subElem, supElem]));\r\n\t\t} else if(supElem) {\r\n\t\t\tchildren.push(this.createMathMLElement(\"mover\", null, [charElem, supElem]));\r\n\t\t} else if(subElem) {\r\n\t\t\tchildren.push(this.createMathMLElement(\"munder\", null, [charElem, subElem]));\r\n\t\t} else {\r\n\t\t\tchildren.push(charElem);\r\n\t\t}\r\n\r\n\t\tchildren.push(...this.renderElements(grouped[DomType.MmlBase].children));\r\n\r\n\t\treturn this.createMathMLElement(\"mrow\", null, children);\r\n\t}\r\n\r\n\trenderMmlPreSubSuper(elem: OpenXmlElement) {\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 ? this.createMathMLElement(\"mo\", null, asArray(this.renderElement(sup))) : null;\r\n\t\tconst subElem = sub ? this.createMathMLElement(\"mo\", null, asArray(this.renderElement(sub))) : null;\r\n\t\tconst stubElem = this.createMathMLElement(\"mo\", null);\r\n\r\n\t\tchildren.push(this.createMathMLElement(\"msubsup\", null, [stubElem, subElem, supElem]));\r\n\t\tchildren.push(...this.renderElements(grouped[DomType.MmlBase].children));\r\n\r\n\t\treturn this.createMathMLElement(\"mrow\", null, children);\r\n\t}\r\n\r\n\trenderMmlGroupChar(elem: OpenXmlElement) {\r\n\t\tconst tagName = elem.props.verticalJustification === \"bot\" ? \"mover\" : \"munder\";\r\n\t\tconst result = this.renderContainerNS(elem, ns.mathML, tagName);\r\n\r\n\t\tif (elem.props.char) {\r\n\t\t\tresult.appendChild(this.createMathMLElement(\"mo\", null, [elem.props.char]));\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\trenderMmlBar(elem: OpenXmlElement) {\r\n\t\tconst style = {} as any;\r\n\r\n\t\tswitch(elem.props.position) {\r\n\t\t\tcase \"top\": style.textDecoration = \"overline\"; break\r\n\t\t\tcase \"bottom\": style.textDecoration = \"underline\"; break\r\n\t\t}\r\n\r\n\t\treturn this.renderContainerNS(elem, ns.mathML, \"mrow\", { style }) as MathMLElement;\r\n\t}\r\n\r\n\trenderMmlRun(elem: OpenXmlElement) {\r\n\t\treturn this.toHTML(elem, ns.mathML, \"ms\");\r\n\t}\r\n\r\n\trenderMllList(elem: OpenXmlElement) {\r\n\t\tconst children = this.renderElements(elem.children).map(x => this.createMathMLElement(\"mtr\", null, [\r\n\t\t\tthis.createMathMLElement(\"mtd\", null, [x])\r\n\t\t]));\r\n\r\n\t\treturn this.toHTML(elem, ns.mathML, \"mtable\", children);\r\n\t}\r\n\r\n\ttoH(elem: OpenXmlElement, ns: ns, tagName: string, children: Node[] = null) {\r\n\t\tconst { \"$lang\": lang, ...style } = elem.cssStyle ?? {};\r\n\t\tconst className = cx(elem.className, elem.styleName && this.processStyleName(elem.styleName));\r\n\t\treturn { ns, tagName, className, lang, style, children: children ?? this.renderElements(elem.children) } as any;\r\n\t}\r\n\r\n\ttoHTML(elem: OpenXmlElement, ns: ns, tagName: string, children: Node[] = null) {\r\n\t\treturn this.h(this.toH(elem, ns, tagName, children)) as any;\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<string, string>, 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\tsetTimeout(() => {\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\tcreateElementNS(ns: any, tagName: string, props?: Partial<Record<any, any>>, children?: any[]) {\r\n\t\treturn this.h({ ns, tagName, children, ...props }) as any;\r\n\t}\r\n\r\n\tcreateElement<T extends keyof HTMLElementTagNameMap>(tagName: T, props?: Partial<Record<keyof HTMLElementTagNameMap[T], any>>, children?: any[]): HTMLElementTagNameMap[T] {\r\n\t\treturn this.createElementNS(ns.html, tagName, props, children);\r\n\t}\r\n\r\n\tcreateMathMLElement<T extends keyof MathMLElementTagNameMap>(tagName: T, props?: Partial<Record<keyof MathMLElementTagNameMap[T], any>>, children?: any[]): MathMLElementTagNameMap[T] {\r\n\t\treturn this.createElementNS(ns.mathML, tagName, props, children);\r\n\t}\r\n\r\n\tcreateSvgElement<T extends keyof SVGElementTagNameMap>(tagName: T, props?: Partial<Record<keyof SVGElementTagNameMap[T], any>>, children?: any[]): SVGElementTagNameMap[T] {\r\n\t\treturn this.createElementNS(ns.svg, tagName, props, children);\r\n\t}\r\n\r\n\tlater(func: Function) { \r\n\t\tthis.postRenderTasks.push(func);\r\n\t}\r\n}\r\n\r\nfunction findParent<T extends OpenXmlElement>(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 <T>parent;\r\n}\r\n\r\n","/*\n * Reflow pagination.\n *\n * The renderer only splits pages at explicit breaks (breakPages option);\n * content that Word would flow across multiple physical pages ends up in a\n * single overgrown <section>. This module is a post-render DOM pass (opt-in\n * via the `paginate` option) that re-packs each section's article children\n * into page-sized sections, splitting tables by row and paragraphs by line.\n *\n * It runs after the rendered nodes are attached to a container, so all\n * measurements (offsetHeight, Range rects) reflect real layout. Callers must\n * ensure webfonts are settled first (document.fonts.ready), otherwise split\n * points are computed against fallback-font metrics.\n */\n\nconst FIT_EPSILON = 1; // px of slack for sub-pixel rounding\nconst MAX_PAGES_PER_SECTION = 1000; // runaway-loop backstop\n\nexport function paginateWrapper(container: HTMLElement, className: string): number {\n\tconst sections = Array.from(container.querySelectorAll(`section.${className}`)) as HTMLElement[];\n\tlet pageCount = 0;\n\n\tfor (const section of sections) {\n\t\tpageCount += paginateSection(section, className);\n\t}\n\n\tif (pageCount > 0) {\n\t\t// Continuation fragments produced by splitting a paragraph must not\n\t\t// repeat its first-line indent or its list number.\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.textContent =\n\t\t\t`.${className} .${className}-continuation { text-indent: 0 !important; }` +\n\t\t\t`.${className} .${className}-continuation::before { content: none !important; }`;\n\t\tcontainer.prepend(style);\n\n\t\t// Pages created by splitting share the original page's header/footer,\n\t\t// whose PAGE/NUMPAGES fields were resolved before the split — renumber\n\t\t// across the final page list.\n\t\tconst pages = container.querySelectorAll(`section.${className}`);\n\t\tconst total = `${pages.length}`;\n\t\tpages.forEach((page, i) => {\n\t\t\tfor (const el of Array.from(page.querySelectorAll(`.${className}-field-page`)))\n\t\t\t\tel.textContent = `${i + 1}`;\n\t\t\tfor (const el of Array.from(page.querySelectorAll(`.${className}-field-numpages`)))\n\t\t\t\tel.textContent = total;\n\t\t});\n\t}\n\n\treturn pageCount;\n}\n\nfunction paginateSection(section: HTMLElement, className: string): number {\n\tconst article = section.querySelector(\":scope > article\") as HTMLElement;\n\tif (!article) return 0;\n\n\tconst sectionStyle = getComputedStyle(section);\n\tconst pageHeight = parseFloat(sectionStyle.minHeight);\n\tif (!pageHeight || Number.isNaN(pageHeight)) return 0; // no fixed page height to paginate against\n\n\tconst columns = getComputedStyle(article).columnCount;\n\tif (columns !== \"auto\" && columns !== \"1\") return 0; // multi-column layouts can't be split reliably\n\n\tconst contentLimit = pageHeight - parseFloat(sectionStyle.paddingTop) - parseFloat(sectionStyle.paddingBottom);\n\tif (!(contentLimit > 0) || article.scrollHeight <= contentLimit + FIT_EPSILON) return 0;\n\n\tconst header = section.querySelector(\":scope > header\");\n\tconst footer = section.querySelector(\":scope > footer\");\n\t// Footnote/endnote lists belong to the section; keep them on the last page.\n\tconst notes = Array.from(section.querySelectorAll(\":scope > ol\"));\n\n\tconst pages: HTMLElement[] = [section]; // the original section becomes page 1\n\tlet currentArticle = article;\n\tlet lastPage = section;\n\n\tfunction newPage(): void {\n\t\tconst shell = section.cloneNode(false) as HTMLElement;\n\t\tif (header) shell.appendChild(header.cloneNode(true));\n\t\tconst pageArticle = article.cloneNode(false) as HTMLElement;\n\t\tshell.appendChild(pageArticle);\n\t\tif (footer) shell.appendChild(footer.cloneNode(true));\n\t\t// Attach immediately: packing the page requires live layout\n\t\t// (scrollHeight/Range rects are all zero on detached nodes).\n\t\tlastPage.after(shell);\n\t\tlastPage = shell;\n\t\tpages.push(shell);\n\t\tcurrentArticle = pageArticle;\n\t}\n\n\tconst fits = () => currentArticle.scrollHeight <= contentLimit + FIT_EPSILON;\n\tconst bottomLimit = () => currentArticle.getBoundingClientRect().top + contentLimit;\n\n\tconst blocks = Array.from(article.children) as HTMLElement[];\n\tfor (const b of blocks) b.remove();\n\n\tfor (let i = 0; i < blocks.length && pages.length < MAX_PAGES_PER_SECTION; i++) {\n\t\tconst block = blocks[i];\n\t\tcurrentArticle.appendChild(block);\n\t\tif (fits()) continue;\n\n\t\t// Overflow: try to split the block at the page boundary.\n\t\tconst tail = splitBlock(block, bottomLimit(), className);\n\t\tif (tail === \"allfit\") continue; // benign box overshoot — keep it here\n\t\tif (tail) {\n\t\t\tblocks.splice(i + 1, 0, tail);\n\t\t\tnewPage();\n\t\t\tcontinue;\n\t\t}\n\t\tif (tail) {\n\t\t\tblocks.splice(i + 1, 0, tail);\n\t\t\tnewPage();\n\t\t\tcontinue;\n\t\t}\n\n\t\tblock.remove();\n\t\tif (currentArticle.childElementCount === 0) {\n\t\t\t// A single block taller than a whole page: place it and let it\n\t\t\t// overflow rather than loop forever.\n\t\t\tcurrentArticle.appendChild(block);\n\t\t\tcontinue;\n\t\t}\n\n\t\tnewPage();\n\t\ti--; // retry the block on a fresh page\n\t}\n\n\t// Attach section-level notes to the last page (before its footer).\n\tif (notes.length > 0 && pages.length > 1) {\n\t\tconst lastFooter = lastPage.querySelector(\":scope > footer\");\n\t\tfor (const ol of notes) lastPage.insertBefore(ol, lastFooter);\n\t}\n\n\tif (pages.length <= 1) return 0;\n\n\treturn pages.length;\n}\n\n/**\n * Splits `block` (already appended to a page and known to overflow) so its\n * head fits above `bottomLimit` (viewport coordinate). Returns the detached\n * tail fragment, \"allfit\" when the block's content doesn't actually\n * overflow (keep it on the current page), or null when the block can't\n * usefully be split here.\n */\nfunction splitBlock(block: HTMLElement, bottomLimit: number, className: string): HTMLElement | \"allfit\" | null {\n\tif (block.tagName === \"TABLE\") {\n\t\treturn splitTable(block as HTMLTableElement, bottomLimit);\n\t}\n\n\tconst pos = findTextSplitOffset(block, bottomLimit);\n\tif (pos === \"allfit\") return \"allfit\";\n\tif (pos === null) return null;\n\n\tconst tail = splitAt(block, pos.node, pos.offset);\n\ttail.classList.add(`${className}-continuation`);\n\treturn tail;\n}\n\nfunction splitTable(table: HTMLTableElement, bottomLimit: number): HTMLElement | null {\n\tconst bodyRows: HTMLTableRowElement[] = [];\n\tfor (const tbody of Array.from(table.tBodies)) {\n\t\tbodyRows.push(...Array.from(tbody.rows));\n\t}\n\tif (bodyRows.length < 2) return null;\n\n\tconst splitIndex = bodyRows.findIndex(r => r.getBoundingClientRect().bottom > bottomLimit);\n\tif (splitIndex <= 0) return null; // no row fits in the remaining space\n\n\tconst tail = table.cloneNode(false) as HTMLTableElement;\n\t// Keep column widths and header rows on the continuation table.\n\tconst colgroup = table.querySelector(\":scope > colgroup\");\n\tif (colgroup) tail.appendChild(colgroup.cloneNode(true));\n\tif (table.tHead) tail.appendChild(table.tHead.cloneNode(true));\n\n\tfor (let i = splitIndex; i < bodyRows.length; i++) {\n\t\ttail.appendChild(bodyRows[i]);\n\t}\n\n\treturn tail as unknown as HTMLElement;\n}\n\n/**\n * Finds the latest text position inside `el` that still renders above\n * `bottomLimit`, by walking text nodes in order and binary-searching each\n * one with Range rects. Returns:\n * - { node, offset } — split here;\n * - \"allfit\" — every text node fits; the overflow comes from the block's\n * own box (min-height overshoot), not its content, so it should stay;\n * - null — even the first character overflows (or there is no text).\n */\nfunction findTextSplitOffset(el: HTMLElement, bottomLimit: number): { node: Text, offset: number } | \"allfit\" | null {\n\tconst doc = el.ownerDocument;\n\tconst walker = doc.createTreeWalker(el, NodeFilter.SHOW_TEXT);\n\tconst range = doc.createRange();\n\tlet hasFittingContent = false;\n\tlet sawText = false;\n\n\tfor (let node = walker.nextNode() as Text; node; node = walker.nextNode() as Text) {\n\t\tif (node.length === 0) continue;\n\t\tsawText = true;\n\n\t\tlet lo = 0, hi = node.length, fit = 0;\n\t\twhile (lo <= hi) {\n\t\t\tconst mid = (lo + hi) >> 1;\n\t\t\trange.setStart(node, 0);\n\t\t\trange.setEnd(node, mid);\n\t\t\tconst rects = range.getClientRects();\n\t\t\tconst last = rects[rects.length - 1];\n\t\t\tif (last && last.bottom <= bottomLimit) {\n\t\t\t\tfit = mid;\n\t\t\t\tlo = mid + 1;\n\t\t\t} else {\n\t\t\t\thi = mid - 1;\n\t\t\t}\n\t\t}\n\n\t\tif (fit === 0) {\n\t\t\t// Nothing of this node fits. Splitting before it only makes sense\n\t\t\t// when earlier content already filled the page.\n\t\t\treturn hasFittingContent ? { node, offset: 0 } : null;\n\t\t}\n\n\t\tif (fit < node.length) {\n\t\t\t// Prefer breaking after whitespace so Latin words aren't cut in\n\t\t\t// half (CJK text may break anywhere, so this is best-effort).\n\t\t\tlet back = fit;\n\t\t\tconst floor = Math.max(0, fit - 30);\n\t\t\twhile (back > floor && !/\\s/.test(node.data[back - 1])) back--;\n\t\t\treturn { node, offset: back > floor ? back : fit };\n\t\t}\n\n\t\thasFittingContent = true;\n\t}\n\n\treturn sawText ? \"allfit\" : null;\n}\n\n/**\n * Splits `el` at (textNode, offset): `el` keeps everything before the point,\n * and the returned element (a shallow clone of `el` with cloned inline\n * ancestors) gets everything from the point on.\n */\nfunction splitAt(el: HTMLElement, textNode: Text, offset: number): HTMLElement {\n\tconst tail = el.cloneNode(false) as HTMLElement;\n\tconst secondHalf = textNode.splitText(offset);\n\tmoveTail(secondHalf, el, tail);\n\treturn tail;\n}\n\n/** Moves the split point's following content into a parallel clone\n * hierarchy under `tailRoot`: `node` and its following siblings go into a\n * clone of their parent, and each ancestor up to `root` contributes a clone\n * plus its following siblings. The ORIGINAL ancestors stay in the head —\n * moving them would rip the head's split-span text out (and reverse the\n * order of the two text halves in the tail). */\nfunction moveTail(node: Node, root: HTMLElement, tailRoot: HTMLElement): void {\n\tlet child = node;\n\tlet container = tailRoot;\n\n\twhile (child.parentNode && child.parentNode !== root) {\n\t\tconst parent = child.parentNode as HTMLElement;\n\t\tconst parentClone = parent.cloneNode(false) as HTMLElement;\n\t\tcontainer.appendChild(parentClone);\n\t\tparentClone.appendChild(child);\n\t\twhile (child.nextSibling) parentClone.appendChild(child.nextSibling);\n\t\tchild = parent;\n\t\tcontainer = parentClone;\n\t}\n\n\t// `child` is now a direct child of root. If the loop never ran, `node`\n\t// itself was that direct child and still needs moving; otherwise its\n\t// clone is already in place and only following siblings move over.\n\tif (child === node) tailRoot.appendChild(child);\n\twhile (child.nextSibling) tailRoot.appendChild(child.nextSibling);\n}\n","import { WordDocument } from './word-document';\r\nimport { DocumentParser } from './document-parser';\r\nimport { HtmlRenderer } from './html-renderer';\r\nimport { h } from './html';\r\nimport { paginateWrapper } from './pagination';\r\n\r\nexport interface FontDefinition {\r\n /** font-family name as used in the document, e.g. \"SimSun\" / \"宋体\" */\r\n name: string;\r\n /** stylesheet src value, e.g. 'url(fonts/simsun.woff2) format(\"woff2\")' */\r\n src: string;\r\n weight?: string | number;\r\n style?: string;\r\n}\r\n\r\nexport interface Options {\r\n inWrapper: boolean;\r\n hideWrapperOnPrint: boolean;\r\n ignoreWidth: boolean;\r\n ignoreHeight: boolean;\r\n ignoreFonts: boolean;\r\n breakPages: boolean;\r\n /** re-flow content into page-sized sections after render (needs DOM layout) */\r\n paginate: boolean;\r\n /** external webfonts injected as @font-face before rendering */\r\n fonts?: FontDefinition[];\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\trenderChanges: boolean;\r\n renderComments: boolean;\r\n renderAltChunks: boolean;\r\n h: typeof h;\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 paginate: false,\r\n debug: false,\r\n experimental: false,\r\n className: \"docx\",\r\n inWrapper: true,\r\n hideWrapperOnPrint: false,\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\trenderChanges: false,\r\n renderComments: false,\r\n renderAltChunks: true,\r\n h: h\r\n};\r\n\r\nexport function parseAsync(data: Blob | any, userOptions?: Partial<Options>): Promise<any> {\r\n const ops = { ...defaultOptions, ...userOptions };\r\n return WordDocument.load(data, new DocumentParser(ops), ops);\r\n}\r\n\r\nexport async function renderDocument(document: any, userOptions?: Partial<Options>): Promise<any> {\r\n const ops = { ...defaultOptions, ...userOptions };\r\n const renderer = new HtmlRenderer();\r\n return await renderer.render(document, ops);\r\n}\r\n\r\nfunction renderFontFaces(fonts: FontDefinition[]): HTMLElement {\r\n const css = fonts.map(f => {\r\n const family = f.name.replace(/[\"\\\\\\r\\n]/g, '');\r\n const props = [`font-family: \"${family}\"`, `src: ${f.src}`];\r\n if (f.weight != null) props.push(`font-weight: ${f.weight}`);\r\n if (f.style != null) props.push(`font-style: ${f.style}`);\r\n return `@font-face { ${props.join('; ')}; }`;\r\n }).join('\\n');\r\n\r\n const el = document.createElement(\"style\");\r\n el.textContent = css;\r\n return el;\r\n}\r\n\r\nexport async function renderAsync(data: Blob | any, bodyContainer: HTMLElement, styleContainer?: HTMLElement, userOptions?: Partial<Options>): Promise<any> {\r\n\tconst doc = await parseAsync(data, userOptions);\r\n\tconst nodes = await renderDocument(doc, userOptions);\r\n const ops = { ...defaultOptions, ...userOptions };\r\n\r\n styleContainer ??= bodyContainer;\r\n styleContainer.innerHTML = \"\";\r\n bodyContainer.innerHTML = \"\";\r\n\r\n if (ops.fonts?.length) {\r\n nodes.unshift(renderFontFaces(ops.fonts));\r\n }\r\n\r\n for (let n of nodes) {\r\n const c = n.nodeName === \"STYLE\" ? styleContainer : bodyContainer;\r\n c.appendChild(n);\r\n }\r\n\r\n // Make sure webfonts are actually loaded before the content is measured\r\n // (pagination) or painted, otherwise fallback-font metrics leak in.\r\n const fontSet = typeof document !== \"undefined\" ? (document as any).fonts : null;\r\n if (ops.fonts?.length && fontSet?.load) {\r\n try {\r\n await Promise.all(ops.fonts.map(f =>\r\n fontSet.load(`${f.style ?? 'normal'} ${f.weight ?? 'normal'} 12px \"${f.name.replace(/[\"\\\\\\r\\n]/g, '')}\"`)));\r\n } catch { /* a missing webfont must not break rendering */ }\r\n }\r\n\r\n if (ops.paginate) {\r\n if (fontSet?.ready) {\r\n try { await fontSet.ready; } catch { /* ignore */ }\r\n }\r\n paginateWrapper(bodyContainer, ops.className);\r\n }\r\n\r\n return doc;\r\n}"],"mappings":"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"}