@w100n/documents 0.15.0 → 0.16.0
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.
- package/dist/Compare-M57FG4R3.js +96 -0
- package/dist/Compare-M57FG4R3.js.map +1 -0
- package/dist/{SheetView-72KXS4DM.js → SheetView-EFBSMY7K.js} +6 -4
- package/dist/{SheetView-72KXS4DM.js.map → SheetView-EFBSMY7K.js.map} +1 -1
- package/dist/{TextEditor-NSICFE6U.js → TextEditor-MGCSGGGA.js} +128 -43
- package/dist/TextEditor-MGCSGGGA.js.map +1 -0
- package/dist/{chunk-Z7UNJ4ND.js → chunk-2L3TK7UF.js} +87 -411
- package/dist/chunk-2L3TK7UF.js.map +1 -0
- package/dist/{chunk-OXC4PUOC.js → chunk-3OLRFIHQ.js} +2 -2
- package/dist/chunk-EQLBYW42.js +458 -0
- package/dist/chunk-EQLBYW42.js.map +1 -0
- package/dist/chunk-RKV3N6OS.js +1011 -0
- package/dist/chunk-RKV3N6OS.js.map +1 -0
- package/dist/{chunk-M4OQG3EN.js → chunk-ZAVXCH7V.js} +55 -1034
- package/dist/chunk-ZAVXCH7V.js.map +1 -0
- package/dist/collab.cjs +350 -202
- package/dist/collab.cjs.map +1 -1
- package/dist/collab.js +4 -2
- package/dist/index.cjs +935 -602
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +135 -0
- package/dist/index.css.map +1 -1
- package/dist/index.js +19 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/TextEditor-NSICFE6U.js.map +0 -1
- package/dist/chunk-M4OQG3EN.js.map +0 -1
- package/dist/chunk-Z7UNJ4ND.js.map +0 -1
- /package/dist/{chunk-OXC4PUOC.js.map → chunk-3OLRFIHQ.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/editor/math.ts","../src/docx/diff.ts","../src/docx/xml.ts","../src/docx/zip.ts","../src/docx/pkg.ts","../src/docx/read.ts","../src/docx/write.ts","../src/docx/index.ts"],"sourcesContent":["type Atom =\n | { t: 'tok'; v: string; kind: 'mi' | 'mn' | 'mo' | 'mtext' }\n | { t: 'row'; kids: Atom[] }\n | { t: 'frac'; num: Atom; den: Atom }\n | { t: 'sqrt'; body: Atom; deg: Atom | null }\n | { t: 'script'; base: Atom; sub: Atom | null; sup: Atom | null };\n\nconst words: Record<string, string> = {\n alpha: 'α', beta: 'β', gamma: 'γ', delta: 'δ', epsilon: 'ε', zeta: 'ζ', eta: 'η', theta: 'θ', iota: 'ι', kappa: 'κ', lambda: 'λ', mu: 'μ', nu: 'ν', xi: 'ξ',\n pi: 'π', rho: 'ρ', sigma: 'σ', tau: 'τ', upsilon: 'υ', phi: 'φ', chi: 'χ', psi: 'ψ', omega: 'ω', Gamma: 'Γ', Delta: 'Δ', Theta: 'Θ', Lambda: 'Λ', Xi: 'Ξ',\n Pi: 'Π', Sigma: 'Σ', Phi: 'Φ', Psi: 'Ψ', Omega: 'Ω', infty: '∞', partial: '∂', nabla: '∇',\n};\nconst ops: Record<string, string> = {\n cdot: '·', times: '×', div: '÷', pm: '±', mp: '∓', le: '≤', leq: '≤', ge: '≥', geq: '≥', ne: '≠', neq: '≠', approx: '≈', equiv: '≡', to: '→', rightarrow: '→',\n leftarrow: '←', Rightarrow: '⇒', in: '∈', notin: '∉', subset: '⊂', cup: '∪', cap: '∩', forall: '∀', exists: '∃', sum: '∑', prod: '∏', int: '∫', oint: '∮', degree: '°',\n};\nconst big = new Set(['∑', '∏', '∫', '∮']);\nconst glyph: Record<string, string> = {};\nfor (const [k, v] of [...Object.entries(words), ...Object.entries(ops)]) glyph[v] ??= k;\n\nexport function parse(src: string): Atom {\n let i = 0;\n const group = (): Atom => {\n if (src[i] === '{') {\n i++;\n const kids = row('}');\n i++;\n return kids.length === 1 ? kids[0] : { t: 'row', kids };\n }\n return one() ?? { t: 'row', kids: [] };\n };\n const one = (): Atom | null => {\n while (src[i] === ' ') i++;\n if (i >= src.length) return null;\n const c = src[i];\n if (c === '{') return group();\n if (c === '\\\\') {\n const m = /^\\\\([a-zA-Z]+|.)/.exec(src.slice(i));\n if (!m) {\n i++;\n return { t: 'tok', v: '\\\\', kind: 'mo' };\n }\n i += m[0].length;\n const name = m[1];\n if (name === 'frac') return { t: 'frac', num: group(), den: group() };\n if (name === 'sqrt') {\n let deg: Atom | null = null;\n if (src[i] === '[') {\n const end = src.indexOf(']', i);\n deg = parse(src.slice(i + 1, end < 0 ? src.length : end));\n i = end < 0 ? src.length : end + 1;\n }\n return { t: 'sqrt', body: group(), deg };\n }\n if (name === 'text' || name === 'mathrm') {\n const g = src[i] === '{' ? src.indexOf('}', i) : -1;\n const v = g < 0 ? '' : src.slice(i + 1, g);\n i = g < 0 ? i : g + 1;\n return { t: 'tok', v, kind: 'mtext' };\n }\n if (name === 'left' || name === 'right') return one();\n if (words[name]) return { t: 'tok', v: words[name], kind: 'mi' };\n if (ops[name]) return { t: 'tok', v: ops[name], kind: 'mo' };\n return { t: 'tok', v: name.length === 1 ? name : `\\\\${name}`, kind: name.length === 1 ? 'mo' : 'mi' };\n }\n if (/[0-9.]/.test(c)) {\n const m = /^[0-9]*\\.?[0-9]+|^[0-9]+/.exec(src.slice(i))!;\n i += m[0].length;\n return { t: 'tok', v: m[0], kind: 'mn' };\n }\n i++;\n if (/[\\p{L}]/u.test(c)) return { t: 'tok', v: c, kind: big.has(c) ? 'mo' : 'mi' };\n return { t: 'tok', v: c, kind: 'mo' };\n };\n const row = (stop: string): Atom[] => {\n const kids: Atom[] = [];\n while (i < src.length && src[i] !== stop) {\n while (src[i] === ' ') i++;\n if (i >= src.length || src[i] === stop) break;\n if (src[i] === '^' || src[i] === '_') {\n const base = kids.pop() ?? { t: 'row', kids: [] };\n const s = base.t === 'script' && !base.sub !== !base.sup ? base : { t: 'script' as const, base, sub: null, sup: null };\n const which = src[i++] === '^' ? 'sup' : 'sub';\n s[which] = group();\n kids.push(s);\n continue;\n }\n if (src[i] === '}') { i++; continue; }\n const a = one();\n if (a) kids.push(a);\n }\n return kids;\n };\n const kids = row('\\u0000');\n return kids.length === 1 ? kids[0] : { t: 'row', kids };\n}\n\nconst esc = (v: string) => v.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n\nfunction ml(a: Atom): string {\n switch (a.t) {\n case 'tok': return `<${a.kind}>${esc(a.v)}</${a.kind}>`;\n case 'row': return `<mrow>${a.kids.map(ml).join('')}</mrow>`;\n case 'frac': return `<mfrac>${ml(a.num)}${ml(a.den)}</mfrac>`;\n case 'sqrt': return a.deg ? `<mroot>${ml(a.body)}${ml(a.deg)}</mroot>` : `<msqrt>${ml(a.body)}</msqrt>`;\n case 'script': {\n const over = a.base.t === 'tok' && big.has(a.base.v);\n if (a.sub && a.sup) return `<${over ? 'munderover' : 'msubsup'}>${ml(a.base)}${ml(a.sub)}${ml(a.sup)}</${over ? 'munderover' : 'msubsup'}>`;\n if (a.sub) return `<${over ? 'munder' : 'msub'}>${ml(a.base)}${ml(a.sub)}</${over ? 'munder' : 'msub'}>`;\n return `<${over ? 'mover' : 'msup'}>${ml(a.base)}${ml(a.sup!)}</${over ? 'mover' : 'msup'}>`;\n }\n }\n}\n\nexport const mathml = (latex: string) => `<math xmlns=\"http://www.w3.org/1998/Math/MathML\">${ml(parse(latex))}</math>`;\n\nconst run = (v: string, plain = false) => `<m:r>${plain ? '<m:rPr><m:sty m:val=\"p\"/></m:rPr>' : ''}<m:t xml:space=\"preserve\">${esc(v)}</m:t></m:r>`;\n\nfunction om(a: Atom): string {\n switch (a.t) {\n case 'tok': return run(a.v, a.kind === 'mtext' || a.kind === 'mo' && !big.has(a.v));\n case 'row': return a.kids.map(om).join('');\n case 'frac': return `<m:f><m:num>${om(a.num)}</m:num><m:den>${om(a.den)}</m:den></m:f>`;\n case 'sqrt': return a.deg ? `<m:rad><m:deg>${om(a.deg)}</m:deg><m:e>${om(a.body)}</m:e></m:rad>` : `<m:rad><m:radPr><m:degHide m:val=\"1\"/></m:radPr><m:deg/><m:e>${om(a.body)}</m:e></m:rad>`;\n case 'script': {\n if (a.base.t === 'tok' && big.has(a.base.v)) return `<m:nary><m:naryPr><m:chr m:val=\"${a.base.v}\"/>${a.sub ? '' : '<m:subHide m:val=\"1\"/>'}${a.sup ? '' : '<m:supHide m:val=\"1\"/>'}</m:naryPr><m:sub>${a.sub ? om(a.sub) : ''}</m:sub><m:sup>${a.sup ? om(a.sup) : ''}</m:sup><m:e/></m:nary>`;\n if (a.sub && a.sup) return `<m:sSubSup><m:e>${om(a.base)}</m:e><m:sub>${om(a.sub)}</m:sub><m:sup>${om(a.sup)}</m:sup></m:sSubSup>`;\n if (a.sub) return `<m:sSub><m:e>${om(a.base)}</m:e><m:sub>${om(a.sub)}</m:sub></m:sSub>`;\n return `<m:sSup><m:e>${om(a.base)}</m:e><m:sup>${om(a.sup!)}</m:sup></m:sSup>`;\n }\n }\n}\n\nexport const omml = (latex: string) => `<m:oMath xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\">${om(parse(latex))}</m:oMath>`;\n\ntype Node = { name: string; kids: Node[]; text: string; attrs: Record<string, string> };\n\nfunction tree(xml: string): Node {\n const root: Node = { name: '', kids: [], text: '', attrs: {} };\n const stack = [root];\n for (const m of xml.matchAll(/<(\\/?)([\\w:]+)([^>]*?)(\\/?)>|([^<]+)/g)) {\n const top = stack[stack.length - 1];\n if (m[5] !== undefined) { top.text += m[5]; continue; }\n if (m[1]) { stack.pop(); continue; }\n const attrs = Object.fromEntries([...m[3].matchAll(/([\\w:]+)=\"([^\"]*)\"/g)].map(a => [a[1], a[2]]));\n const node: Node = { name: m[2], kids: [], text: '', attrs };\n top.kids.push(node);\n if (!m[4]) stack.push(node);\n }\n return root;\n}\n\nconst unesc = (v: string) => v.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').replace(/&/g, '&');\nconst brace = (v: string) => v.length === 1 ? v : `{${v}}`;\n\nfunction tex(n: Node): string {\n const part = (name: string) => n.kids.find(k => k.name === name);\n const all = (k?: Node) => k ? k.kids.map(tex).join('') : '';\n switch (n.name) {\n case 'm:t': return [...unesc(n.text)].map(ch => glyph[ch] ? `\\\\${glyph[ch]} ` : ch).join('');\n case 'm:f': return `\\\\frac{${all(part('m:num'))}}{${all(part('m:den'))}}`;\n case 'm:sSup': return `${brace(all(part('m:e')))}^${brace(all(part('m:sup')))}`;\n case 'm:sSub': return `${brace(all(part('m:e')))}_${brace(all(part('m:sub')))}`;\n case 'm:sSubSup': return `${brace(all(part('m:e')))}_${brace(all(part('m:sub')))}^${brace(all(part('m:sup')))}`;\n case 'm:rad': {\n const deg = all(part('m:deg'));\n return `\\\\sqrt${deg ? `[${deg}]` : ''}{${all(part('m:e'))}}`;\n }\n case 'm:nary': {\n const chr = part('m:naryPr')?.kids.find(k => k.name === 'm:chr')?.attrs['m:val'] ?? '∫';\n const sub = all(part('m:sub')), sup = all(part('m:sup'));\n return `${glyph[chr] ? `\\\\${glyph[chr]}` : chr}${sub ? `_${brace(sub)}` : ''}${sup ? `^${brace(sup)}` : ''} ${all(part('m:e'))}`.trim();\n }\n case 'm:d': {\n const pr = part('m:dPr')?.kids ?? [];\n const beg = pr.find(k => k.name === 'm:begChr')?.attrs['m:val'] ?? '(';\n const end = pr.find(k => k.name === 'm:endChr')?.attrs['m:val'] ?? ')';\n return `${beg}${n.kids.filter(k => k.name === 'm:e').map(all).join(',')}${end}`;\n }\n case 'm:rPr': case 'm:ctrlPr': case 'w:rPr': case 'm:naryPr': case 'm:dPr': case 'm:radPr': case 'm:fPr': case 'm:sSupPr': case 'm:sSubPr': case 'm:sSubSupPr': return '';\n default: return n.kids.map(tex).join('');\n }\n}\n\nexport const latexOf = (xml: string) => tex(tree(xml)).replace(/\\s+/g, ' ').trim();\n","export function diff(a: string[], b: string[]): Int32Array {\n const map = new Int32Array(b.length).fill(-1);\n let p = 0;\n while (p < a.length && p < b.length && a[p] === b[p]) map[p] = p++;\n let q = 0;\n while (q < a.length - p && q < b.length - p && a[a.length - 1 - q] === b[b.length - 1 - q]) {\n map[b.length - 1 - q] = a.length - 1 - q;\n q++;\n }\n const n = a.length - p - q;\n const m = b.length - p - q;\n if (!n || !m) return map;\n const max = Math.min(n + m, 1200);\n const off = max + 1;\n const v = new Int32Array(2 * max + 3);\n const trace: Int32Array[] = [];\n for (let d = 0; d <= max; d++) {\n trace.push(v.slice(off - d - 1, off + d + 2));\n for (let k = -d; k <= d; k += 2) {\n let x = k === -d || (k !== d && v[off + k - 1] < v[off + k + 1]) ? v[off + k + 1] : v[off + k - 1] + 1;\n let y = x - k;\n while (x < n && y < m && a[p + x] === b[p + y]) {\n x++;\n y++;\n }\n v[off + k] = x;\n if (x >= n && y >= m) {\n for (let e = d; e > 0; e--) {\n const t = trace[e];\n const at = (j: number) => t[j + e + 1];\n const down = k === -e || (k !== e && at(k - 1) < at(k + 1));\n const pk = down ? k + 1 : k - 1;\n const px = at(pk);\n const py = px - pk;\n while (x > px && y > py) map[p + --y] = p + --x;\n x = px;\n y = py;\n k = pk;\n }\n while (x > 0 && y > 0) map[p + --y] = p + --x;\n return map;\n }\n }\n }\n return map;\n}\n","export type El = { name: string; start: number; open: number; close: number; end: number; kids: El[] };\n\nexport function parse(s: string): El {\n const root: El = { name: '', start: 0, open: 0, close: s.length, end: s.length, kids: [] };\n const stack = [root];\n const n = s.length;\n let i = s.indexOf('<');\n while (i !== -1 && i < n) {\n const c = s.charCodeAt(i + 1);\n let next: number;\n if (c === 63) next = s.indexOf('?>', i) + 2;\n else if (c === 33) {\n if (s.startsWith('<!--', i)) next = s.indexOf('-->', i) + 3;\n else if (s.startsWith('<![CDATA[', i)) next = s.indexOf(']]>', i) + 3;\n else next = s.indexOf('>', i) + 1;\n } else if (c === 47) {\n next = s.indexOf('>', i) + 1;\n if (stack.length > 1) {\n const top = stack.pop()!;\n top.close = i;\n top.end = next;\n }\n } else {\n let j = i + 1;\n while (j < n) {\n const d = s.charCodeAt(j);\n if (d === 32 || d === 62 || d === 47 || d === 9 || d === 10 || d === 13) break;\n j++;\n }\n let k = j;\n for (; k < n; k++) {\n const d = s.charCodeAt(k);\n if (d === 34 || d === 39) {\n k = s.indexOf(d === 34 ? '\"' : \"'\", k + 1);\n if (k === -1) k = n;\n } else if (d === 62) break;\n }\n const self = s.charCodeAt(k - 1) === 47;\n const el: El = { name: s.slice(i + 1, j), start: i, open: k + 1, close: k + 1, end: k + 1, kids: [] };\n stack[stack.length - 1].kids.push(el);\n if (!self) stack.push(el);\n next = k + 1;\n }\n if (next <= i) break;\n i = s.indexOf('<', next);\n }\n return root;\n}\n\nexport function attr(s: string, el: El, name: string): string | null {\n const tag = s.slice(el.start, el.open);\n const key = name + '=';\n let i = tag.indexOf(key);\n while (i > 0) {\n const before = tag.charCodeAt(i - 1);\n if (before === 32 || before === 9 || before === 10 || before === 13) {\n const q = tag[i + key.length];\n return unescape(tag.slice(i + key.length + 1, tag.indexOf(q, i + key.length + 1)));\n }\n i = tag.indexOf(key, i + 1);\n }\n return null;\n}\n\nexport function attrs(tag: string): [string, string][] {\n const out: [string, string][] = [];\n const re = /([\\w:.-]+)\\s*=\\s*(\"([^\"]*)\"|'([^']*)')/g;\n const body = tag.slice(tag.search(/[\\s/>]/));\n for (let m = re.exec(body); m; m = re.exec(body)) out.push([m[1], unescape(m[3] ?? m[4])]);\n return out;\n}\n\nexport function kid(el: El, name: string): El | undefined {\n for (const k of el.kids) if (k.name === name) return k;\n return undefined;\n}\n\nexport function find(el: El, name: string): El | undefined {\n for (const k of el.kids) {\n if (k.name === name) return k;\n const deep = find(k, name);\n if (deep) return deep;\n }\n return undefined;\n}\n\nexport function inner(s: string, el: El): string {\n return unescape(s.slice(el.open, el.close));\n}\n\nexport function on(s: string, el: El | undefined, name = 'w:val'): boolean {\n if (!el) return false;\n const v = attr(s, el, name);\n return v === null || !/^(0|false|off|none)$/.test(v);\n}\n\nconst named: Record<string, string> = { lt: '<', gt: '>', amp: '&', quot: '\"', apos: \"'\" };\n\nexport function unescape(s: string): string {\n if (s.indexOf('&') === -1) return s;\n return s.replace(/&(#x[0-9a-fA-F]+|#\\d+|\\w+);/g, (m, e: string) => {\n if (e[0] !== '#') return named[e] ?? m;\n const code = e[1] === 'x' ? parseInt(e.slice(2), 16) : parseInt(e.slice(1), 10);\n return String.fromCodePoint(code);\n });\n}\n\nexport function escape(s: string): string {\n return s\n .replace(/[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\uFFFE\\uFFFF]/g, '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"');\n}\n\nexport function opened(s: string, el: El): string {\n const tag = s.slice(el.start, el.open);\n return el.end === el.open ? tag.replace(/\\s*\\/>$/, '>') : tag;\n}\n\nexport function rebuild(pr: string, tag: string, order: string[], set: Record<string, string | null>): string {\n const root = parse(pr).kids[0];\n const parts: { name: string; xml: string }[] = root ? root.kids.map(k => ({ name: k.name, xml: pr.slice(k.start, k.end) })) : [];\n const seen = new Set<string>();\n const out: { name: string; xml: string }[] = [];\n for (const p of parts) {\n if (!(p.name in set)) out.push(p);\n else if (!seen.has(p.name)) {\n seen.add(p.name);\n if (set[p.name] !== null) out.push({ name: p.name, xml: set[p.name]! });\n }\n }\n for (const name in set) if (!seen.has(name) && set[name] !== null) out.push({ name, xml: set[name]! });\n if (!out.length) return '';\n const rank = (name: string) => {\n const i = order.indexOf(name);\n return i === -1 ? order.length : i;\n };\n const sorted = out.map((p, i) => ({ p, i })).sort((a, b) => rank(a.p.name) - rank(b.p.name) || a.i - b.i);\n const open = root ? opened(pr, root) : `<${tag}>`;\n return open + sorted.map(x => x.p.xml).join('') + `</${tag}>`;\n}\n","import { deflateSync, inflateSync } from 'fflate';\n\nexport type Entry = {\n name: string;\n path: Uint8Array;\n method: number;\n flags: number;\n time: number;\n date: number;\n crc: number;\n size: number;\n version: number;\n made: number;\n inner: number;\n outer: number;\n raw: Uint8Array;\n};\n\nexport function unzip(buf: Uint8Array): Entry[] {\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n let eocd = buf.length - 22;\n while (eocd >= 0 && view.getUint32(eocd, true) !== 0x06054b50) eocd--;\n if (eocd < 0) throw new Error('Not a DOCX file');\n const count = view.getUint16(eocd + 10, true);\n let at = view.getUint32(eocd + 16, true);\n if (count === 0xffff || at === 0xffffffff) throw new Error('ZIP64 DOCX files are not supported');\n const names = new TextDecoder();\n const out: Entry[] = [];\n for (let n = 0; n < count; n++) {\n if (view.getUint32(at, true) !== 0x02014b50) throw new Error('Broken DOCX file');\n const length = view.getUint16(at + 28, true);\n const extra = view.getUint16(at + 30, true);\n const note = view.getUint16(at + 32, true);\n const local = view.getUint32(at + 42, true);\n const csize = view.getUint32(at + 20, true);\n const path = buf.subarray(at + 46, at + 46 + length);\n const begin = local + 30 + view.getUint16(local + 26, true) + view.getUint16(local + 28, true);\n out.push({\n name: names.decode(path),\n path,\n made: view.getUint16(at + 4, true),\n version: view.getUint16(at + 6, true),\n flags: view.getUint16(at + 8, true),\n method: view.getUint16(at + 10, true),\n time: view.getUint16(at + 12, true),\n date: view.getUint16(at + 14, true),\n crc: view.getUint32(at + 16, true),\n size: view.getUint32(at + 24, true),\n inner: view.getUint16(at + 36, true),\n outer: view.getUint32(at + 38, true),\n raw: buf.subarray(begin, begin + csize),\n });\n at += 46 + length + extra + note;\n }\n return out;\n}\n\nexport function inflate(e: Entry): Uint8Array {\n if (e.method === 0) return e.raw;\n if (e.method !== 8) throw new Error(`Unsupported compression in ${e.name}`);\n return inflateSync(e.raw, { out: new Uint8Array(e.size) });\n}\n\nconst table = (() => {\n const t = new Int32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n t[n] = c;\n }\n return t;\n})();\n\nfunction crc32(bytes: Uint8Array): number {\n let c = -1;\n for (let i = 0; i < bytes.length; i++) c = table[(c ^ bytes[i]) & 0xff] ^ (c >>> 8);\n return (c ^ -1) >>> 0;\n}\n\nexport function entry(name: string, bytes: Uint8Array, like: Entry): Entry {\n const path = new TextEncoder().encode(name);\n return { ...like, name, path, method: 8, version: Math.max(like.version, 20), flags: like.flags & ~8, crc: crc32(bytes), size: bytes.length, raw: deflateSync(bytes, { level: 6 }) };\n}\n\nexport function zip(entries: Entry[]): Uint8Array {\n let total = 22;\n for (const e of entries) total += 30 + 46 + e.path.length * 2 + e.raw.length;\n const buf = new Uint8Array(total);\n const view = new DataView(buf.buffer);\n const offsets: number[] = [];\n let at = 0;\n for (const e of entries) {\n offsets.push(at);\n view.setUint32(at, 0x04034b50, true);\n view.setUint16(at + 4, e.version, true);\n view.setUint16(at + 6, e.flags & ~8, true);\n view.setUint16(at + 8, e.method, true);\n view.setUint16(at + 10, e.time, true);\n view.setUint16(at + 12, e.date, true);\n view.setUint32(at + 14, e.crc, true);\n view.setUint32(at + 18, e.raw.length, true);\n view.setUint32(at + 22, e.size, true);\n view.setUint16(at + 26, e.path.length, true);\n view.setUint16(at + 28, 0, true);\n buf.set(e.path, at + 30);\n buf.set(e.raw, at + 30 + e.path.length);\n at += 30 + e.path.length + e.raw.length;\n }\n const start = at;\n entries.forEach((e, n) => {\n view.setUint32(at, 0x02014b50, true);\n view.setUint16(at + 4, e.made, true);\n view.setUint16(at + 6, e.version, true);\n view.setUint16(at + 8, e.flags & ~8, true);\n view.setUint16(at + 10, e.method, true);\n view.setUint16(at + 12, e.time, true);\n view.setUint16(at + 14, e.date, true);\n view.setUint32(at + 16, e.crc, true);\n view.setUint32(at + 20, e.raw.length, true);\n view.setUint32(at + 24, e.size, true);\n view.setUint16(at + 28, e.path.length, true);\n view.setUint16(at + 36, e.inner, true);\n view.setUint32(at + 38, e.outer, true);\n view.setUint32(at + 42, offsets[n], true);\n buf.set(e.path, at + 46);\n at += 46 + e.path.length;\n });\n view.setUint32(at, 0x06054b50, true);\n view.setUint16(at + 8, entries.length, true);\n view.setUint16(at + 10, entries.length, true);\n view.setUint32(at + 12, at - start, true);\n view.setUint32(at + 16, start, true);\n return buf.subarray(0, at + 22);\n}\n","import { attr, find, kid, on, parse, type El } from './xml';\nimport { inflate, unzip, type Entry } from './zip';\n\nexport type Fmt = { b: boolean; i: boolean; u: boolean; s: boolean; code: boolean; link: string | null; hl: string | null; color: string | null; size: string | null; font: string | null; rev: string | null; va: 'sup' | 'sub' | null };\ntype Mark = { type: string; attrs?: Record<string, unknown> };\ntype Rel = { id: string; type: string; target: string; external: boolean };\n\nexport const plain: Fmt = { b: false, i: false, u: false, s: false, code: false, link: null, hl: null, color: null, size: null, font: null, rev: null, va: null };\n\nexport const highlights: Record<string, string> = {\n yellow: 'ffff00', green: '00ff00', cyan: '00ffff', magenta: 'ff00ff', blue: '0000ff', red: 'ff0000', darkBlue: '000080', darkCyan: '008080',\n darkGreen: '008000', darkMagenta: '800080', darkRed: '800000', darkYellow: '808000', darkGray: '808080', lightGray: 'c0c0c0', black: '000000', white: 'ffffff',\n};\n\nconst linkStyle = /^(hyperlink|followedhyperlink|internet link|visited internet link)$/i;\nconst headingName = /^(heading|заголовок|überschrift|titre|título|titolo|nagłówek|kop|rubrik|overskrift|otsikko|nadpis|başlık|címsor|naslov|заглавие|見出し|제목|标题|標題)\\s*(\\d)$/i;\n\nexport function color(v: unknown): string | null {\n if (typeof v !== 'string') return null;\n const t = v.trim().toLowerCase();\n let m = /^#?([0-9a-f]{6})$/.exec(t);\n if (m) return '#' + m[1];\n m = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(t);\n if (m) return '#' + m[1] + m[1] + m[2] + m[2] + m[3] + m[3];\n m = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/.exec(t);\n if (m) return '#' + [m[1], m[2], m[3]].map(x => Math.min(255, +x).toString(16).padStart(2, '0')).join('');\n return highlights[v.trim()] ? '#' + highlights[v.trim()] : null;\n}\n\nexport function size(v: unknown): string | null {\n const m = /^\\s*([\\d.]+)\\s*(pt|px)?\\s*$/.exec(String(v ?? ''));\n if (!m || !+m[1]) return null;\n const pt = m[2] === 'px' ? +m[1] * 0.75 : +m[1];\n return `${Math.round(pt * 2) / 2}pt`;\n}\n\nexport function family(v: unknown): string | null {\n if (typeof v !== 'string') return null;\n const first = v.split(',')[0].trim().replace(/^[\"']|[\"']$/g, '');\n return first || null;\n}\n\nexport function fmtOf(marks: Mark[] | undefined): Fmt {\n const f = { ...plain };\n for (const m of marks ?? []) {\n const a = m.attrs ?? {};\n if (m.type === 'bold') f.b = true;\n else if (m.type === 'italic') f.i = true;\n else if (m.type === 'underline') f.u = true;\n else if (m.type === 'strike') f.s = true;\n else if (m.type === 'code') f.code = true;\n else if (m.type === 'superscript') f.va = 'sup';\n else if (m.type === 'subscript') f.va = 'sub';\n else if (m.type === 'link' && typeof a.href === 'string' && a.href) f.link = a.href;\n else if (m.type === 'highlight') f.hl = color(a.color) ?? '#ffff00';\n else if (m.type === 'textStyle') {\n f.color = color(a.color);\n f.size = size(a.fontSize);\n f.font = family(a.fontFamily);\n } else if (m.type === 'insertion' || m.type === 'deletion') f.rev = JSON.stringify([m.type === 'insertion' ? 'ins' : 'del', String(a.id ?? ''), String(a.author ?? ''), String(a.date ?? '')]);\n }\n if (f.code) f.font = null;\n return f;\n}\n\nexport function marksOf(f: Fmt): Mark[] | undefined {\n const out: Mark[] = [];\n if (f.b) out.push({ type: 'bold' });\n if (f.i) out.push({ type: 'italic' });\n if (f.u) out.push({ type: 'underline' });\n if (f.s) out.push({ type: 'strike' });\n if (f.code) out.push({ type: 'code' });\n if (f.va) out.push({ type: f.va === 'sup' ? 'superscript' : 'subscript' });\n if (f.link) out.push({ type: 'link', attrs: { href: f.link } });\n if (f.hl) out.push({ type: 'highlight', attrs: { color: f.hl } });\n if (f.color || f.size || f.font) out.push({ type: 'textStyle', attrs: { color: f.color, fontSize: f.size, fontFamily: f.font } });\n if (f.rev) {\n const [kind, id, author, date] = JSON.parse(f.rev) as string[];\n out.push({ type: kind === 'ins' ? 'insertion' : 'deletion', attrs: { id, author, date } });\n }\n return out.length ? out : undefined;\n}\n\nexport function keyOf(f: Fmt): string {\n return `${+f.b}${+f.i}${+f.u}${+f.s}${+f.code}|${f.link ?? ''}|${f.hl ?? ''}|${f.color ?? ''}|${f.size ?? ''}|${f.font ?? ''}|${f.rev ?? ''}|${f.va ?? ''}`;\n}\n\ntype Props = Partial<Fmt> & { hidden?: boolean; style?: string };\n\nexport class Styles {\n byId = new Map<string, El>();\n paragraph: string | null = null;\n private memo = new Map<string, unknown>();\n constructor(readonly s: string, readonly fonts: { major: string | null; minor: string | null }) {\n const root = find(parse(s), 'w:styles');\n for (const el of root?.kids ?? []) {\n if (el.name !== 'w:style') continue;\n const id = attr(s, el, 'w:styleId');\n if (id === null) continue;\n this.byId.set(id, el);\n if (attr(s, el, 'w:type') === 'paragraph' && on(s, el, 'w:default') && attr(s, el, 'w:default') !== null) this.paragraph = id;\n }\n }\n\n private cached<T>(key: string, make: () => T): T {\n if (!this.memo.has(key)) this.memo.set(key, make());\n return this.memo.get(key) as T;\n }\n\n type(id: string): string | null {\n const el = this.byId.get(id);\n return el ? attr(this.s, el, 'w:type') : null;\n }\n\n name(id: string): string {\n const el = this.byId.get(id);\n const n = el && kid(el, 'w:name');\n return n ? attr(this.s, n, 'w:val') ?? id : id;\n }\n\n private chain(id: string | null): El[] {\n const out: El[] = [];\n const seen = new Set<string>();\n while (id && !seen.has(id)) {\n seen.add(id);\n const el = this.byId.get(id);\n if (!el) break;\n out.push(el);\n const base = kid(el, 'w:basedOn');\n id = base ? attr(this.s, base, 'w:val') : null;\n }\n return out;\n }\n\n private pPr<T>(id: string | null, pick: (pPr: El) => T | undefined): T | undefined {\n for (const el of this.chain(id ?? this.paragraph)) {\n const pPr = kid(el, 'w:pPr');\n const v = pPr && pick(pPr);\n if (v !== undefined) return v;\n }\n return undefined;\n }\n\n heading(id: string | null): number | null {\n if (!id) return null;\n return this.cached('h' + id, () => {\n for (const el of this.chain(id)) {\n const n = kid(el, 'w:name');\n const name = n ? attr(this.s, n, 'w:val') ?? '' : '';\n const m = headingName.exec(name.trim());\n if (m) return +m[2] >= 1 ? Math.min(6, +m[2]) : null;\n if (/^title$/i.test(name.trim())) return 1;\n const lvl = kid(el, 'w:pPr') && kid(kid(el, 'w:pPr')!, 'w:outlineLvl');\n if (lvl) return outline(attr(this.s, lvl, 'w:val'));\n }\n return null;\n });\n }\n\n numPr(id: string | null): { num: number; lvl: number } | null {\n return this.cached('n' + id, () => {\n const pr = this.pPr(id, p => kid(p, 'w:numPr'));\n if (!pr) return null;\n const num = kid(pr, 'w:numId');\n const lvl = kid(pr, 'w:ilvl');\n return { num: num ? +(attr(this.s, num, 'w:val') ?? 0) : 0, lvl: lvl ? +(attr(this.s, lvl, 'w:val') ?? 0) : 0 };\n });\n }\n\n jc(id: string | null): string | null {\n return this.cached('j' + id, () => this.pPr(id, p => kid(p, 'w:jc') && attr(this.s, kid(p, 'w:jc')!, 'w:val')) ?? null);\n }\n\n left(id: string | null): number {\n return this.cached('l' + id, () => this.pPr(id, p => {\n const ind = kid(p, 'w:ind');\n const v = ind && (attr(this.s, ind, 'w:left') ?? attr(this.s, ind, 'w:start'));\n return v === null || v === undefined ? undefined : +v;\n }) ?? 0);\n }\n\n char(id: string): Props {\n return this.cached('c' + id, () => {\n const name = this.name(id);\n if (linkStyle.test(name) || linkStyle.test(id)) return {};\n const out: Props = {};\n for (const el of this.chain(id).reverse()) Object.assign(out, props(this.s, kid(el, 'w:rPr'), this.fonts));\n return out;\n });\n }\n\n isLink(id: string | null): boolean {\n return !!id && (linkStyle.test(this.name(id)) || linkStyle.test(id));\n }\n\n find(test: (name: string, id: string) => boolean, type = 'paragraph'): string | null {\n for (const [id, el] of this.byId) if (attr(this.s, el, 'w:type') === type && test(this.name(id), id)) return id;\n return null;\n }\n\n headingId(level: number): string | null {\n return this.find(name => headingName.test(name.trim()) && +headingName.exec(name.trim())![2] === level)\n ?? this.find((_, id) => this.heading(id) === level && !/^title$/i.test(this.name(id)));\n }\n\n list(): { name: string; id: string; heading: number | null }[] {\n const out = [];\n for (const [id, el] of this.byId) if (attr(this.s, el, 'w:type') === 'paragraph') out.push({ name: this.name(id), id, heading: this.heading(id) });\n return out;\n }\n}\n\nexport function outline(v: string | null): number | null {\n const n = Number(v);\n return v !== null && n >= 0 && n < 9 ? Math.min(6, n + 1) : null;\n}\n\nexport function props(s: string, rPr: El | undefined, fonts: { major: string | null; minor: string | null }): Props {\n const out: Props = {};\n if (!rPr) return out;\n for (const k of rPr.kids) {\n switch (k.name) {\n case 'w:rStyle': out.style = attr(s, k, 'w:val') ?? undefined; break;\n case 'w:b': out.b = on(s, k); break;\n case 'w:i': out.i = on(s, k); break;\n case 'w:u': out.u = on(s, k); break;\n case 'w:strike': case 'w:dstrike': out.s = on(s, k) || !!out.s; break;\n case 'w:vanish': out.hidden = on(s, k); break;\n case 'w:color': {\n const v = attr(s, k, 'w:val');\n out.color = v && v !== 'auto' ? color(v) : null;\n break;\n }\n case 'w:sz': out.size = size(+(attr(s, k, 'w:val') ?? 0) / 2); break;\n case 'w:vertAlign': {\n const v = attr(s, k, 'w:val');\n out.va = v === 'superscript' ? 'sup' : v === 'subscript' ? 'sub' : null;\n break;\n }\n case 'w:highlight': {\n const v = attr(s, k, 'w:val') ?? 'none';\n out.hl = highlights[v] ? '#' + highlights[v] : null;\n break;\n }\n case 'w:shd': {\n const v = attr(s, k, 'w:fill');\n if (v && v !== 'auto' && out.hl === undefined) out.hl = color(v);\n break;\n }\n case 'w:rFonts': {\n const theme = attr(s, k, 'w:asciiTheme') ?? attr(s, k, 'w:hAnsiTheme');\n const font = attr(s, k, 'w:ascii') ?? attr(s, k, 'w:hAnsi') ?? (theme ? (theme.startsWith('major') ? fonts.major : fonts.minor) : null);\n if (font) out.font = font;\n break;\n }\n }\n }\n return out;\n}\n\nexport class Numbering {\n nums = new Map<number, { abs: number; starts: Map<number, number> }>();\n abs = new Map<number, Map<number, { fmt: string; start: number; left: number | null }>>();\n maxNum = 0;\n maxAbs = -1;\n constructor(readonly s: string, styles: Styles) {\n const root = find(parse(s), 'w:numbering');\n const links = new Map<number, string>();\n for (const el of root?.kids ?? []) {\n if (el.name === 'w:abstractNum') {\n const id = +(attr(s, el, 'w:abstractNumId') ?? -1);\n this.maxAbs = Math.max(this.maxAbs, id);\n const lvls = new Map<number, { fmt: string; start: number; left: number | null }>();\n for (const l of el.kids) {\n if (l.name !== 'w:lvl') continue;\n const fmt = kid(l, 'w:numFmt');\n const start = kid(l, 'w:start');\n const ind = kid(l, 'w:pPr') && kid(kid(l, 'w:pPr')!, 'w:ind');\n const left = ind && (attr(s, ind, 'w:left') ?? attr(s, ind, 'w:start'));\n lvls.set(+(attr(s, l, 'w:ilvl') ?? 0), { fmt: fmt ? attr(s, fmt, 'w:val') ?? 'decimal' : 'decimal', start: start ? +(attr(s, start, 'w:val') ?? 1) : 1, left: left ? +left : null });\n }\n this.abs.set(id, lvls);\n const link = kid(el, 'w:numStyleLink');\n if (link) links.set(id, attr(s, link, 'w:val') ?? '');\n } else if (el.name === 'w:num') {\n const id = +(attr(s, el, 'w:numId') ?? 0);\n this.maxNum = Math.max(this.maxNum, id);\n const a = kid(el, 'w:abstractNumId');\n const starts = new Map<number, number>();\n for (const o of el.kids) {\n const so = o.name === 'w:lvlOverride' ? kid(o, 'w:startOverride') : undefined;\n if (so) starts.set(+(attr(s, o, 'w:ilvl') ?? 0), +(attr(s, so, 'w:val') ?? 1));\n }\n this.nums.set(id, { abs: a ? +(attr(s, a, 'w:val') ?? -1) : -1, starts });\n }\n }\n for (const [id, style] of links) {\n const pr = styles.numPr(style);\n const target = pr && this.nums.get(pr.num);\n if (target && this.abs.has(target.abs)) this.abs.set(id, this.abs.get(target.abs)!);\n }\n }\n\n level(num: number, lvl: number) {\n const n = this.nums.get(num);\n return n ? this.abs.get(n.abs)?.get(lvl) : undefined;\n }\n\n kind(num: number, lvl: number): 'bulletList' | 'orderedList' | null {\n const l = this.level(num, lvl);\n if (!l || l.fmt === 'none') return null;\n return l.fmt === 'bullet' ? 'bulletList' : 'orderedList';\n }\n\n start(num: number, lvl: number): number {\n return this.nums.get(num)?.starts.get(lvl) ?? this.level(num, lvl)?.start ?? 1;\n }\n}\n\nexport class Pkg {\n entries: Entry[];\n files = new Map<string, Entry>();\n main: string;\n doc: string;\n fp: string;\n rels = new Map<string, Rel>();\n styles: Styles;\n nums: Numbering;\n private texts = new Map<string, string | null>();\n\n constructor(readonly bytes: Uint8Array) {\n this.entries = unzip(bytes);\n for (const e of this.entries) this.files.set(e.name, e);\n const root = this.relsOf('');\n const office = [...root.values()].find(r => r.type.endsWith('/officeDocument'));\n this.main = office ? office.target : 'word/document.xml';\n const doc = this.text(this.main);\n if (doc === null) throw new Error('DOCX file has no document part');\n this.doc = doc;\n if (!/xmlns:w=\"http:\\/\\/schemas\\.openxmlformats\\.org\\/wordprocessingml\\/2006\\/main\"/.test(doc.slice(0, doc.indexOf('>', doc.indexOf('<w:document')) + 1))) throw new Error('DOCX document does not use the w: prefix');\n this.fp = this.files.get(this.main)!.crc.toString(36);\n this.rels = this.relsOf(this.main);\n const theme = this.byType('/theme');\n const t = theme ? this.text(theme.target) ?? '' : '';\n const fonts = { major: /<a:majorFont>\\s*<a:latin typeface=\"([^\"]*)\"/.exec(t)?.[1] ?? null, minor: /<a:minorFont>\\s*<a:latin typeface=\"([^\"]*)\"/.exec(t)?.[1] ?? null };\n const styles = this.byType('/styles');\n this.styles = new Styles((styles && this.text(styles.target)) ?? '', fonts);\n const nums = this.byType('/numbering');\n this.nums = new Numbering((nums && this.text(nums.target)) ?? '', this.styles);\n }\n\n part(name: string): Uint8Array {\n return inflate(this.files.get(name)!);\n }\n\n text(name: string): string | null {\n if (!this.texts.has(name)) {\n const e = this.files.get(name);\n this.texts.set(name, e ? new TextDecoder('utf-8', { ignoreBOM: true }).decode(inflate(e)) : null);\n }\n return this.texts.get(name)!;\n }\n\n byType(suffix: string): Rel | undefined {\n for (const r of this.rels.values()) if (r.type.endsWith(suffix) && !r.external) return r;\n return undefined;\n }\n\n relsPath(part: string): string {\n const slash = part.lastIndexOf('/');\n return `${part.slice(0, slash + 1)}_rels/${part.slice(slash + 1)}.rels`;\n }\n\n private relsOf(part: string): Map<string, Rel> {\n const out = new Map<string, Rel>();\n const s = this.text(this.relsPath(part));\n if (!s) return out;\n const dir = part.slice(0, part.lastIndexOf('/') + 1);\n for (const el of find(parse(s), 'Relationships')?.kids ?? []) {\n const id = attr(s, el, 'Id');\n const target = attr(s, el, 'Target') ?? '';\n const external = attr(s, el, 'TargetMode') === 'External';\n if (id) out.set(id, { id, type: attr(s, el, 'Type') ?? '', target: external ? target : resolve(dir, target), external });\n }\n return out;\n }\n}\n\nfunction resolve(dir: string, target: string): string {\n const parts = (target.startsWith('/') ? target.slice(1) : dir + target).split('/');\n const out: string[] = [];\n for (const p of parts) {\n if (p === '..') out.pop();\n else if (p !== '.') out.push(p);\n }\n return out.join('/');\n}\n","import type { JSONContent } from '@tiptap/core';\nimport { keyOf, marksOf, outline, plain, props, type Fmt, type Pkg, type Styles } from './pkg';\nimport { attr, attrs, find, inner, kid, on, opened, parse, unescape, type El } from './xml';\nimport { latexOf } from '../editor/math';\n\nexport type { JSONContent };\n\nexport type Run = { open: string; rPr: string; fmt: Fmt; el: El | null; parent: El | null };\nexport type Wrap = { open: string; close: string; link: string | null; ins: boolean; rev?: string };\nexport type Span = { xml: string; link: string | null };\nexport type Pic = { embed: string; cx: number; cy: number };\nexport type Piece = { text: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; span: Span | null; box?: boolean; brk?: 'page' | 'hr'; pic?: Pic; img?: Record<string, unknown>; fld?: string; instr?: string; math?: string; note?: { id: string; text: string } };\nexport type ListCtx = { type: string; depth: number };\n\nexport type Block = {\n ref: string;\n kind: 'p' | 'tbl' | 'lock' | 'pb' | 'hr' | 'toc';\n el: El;\n start: number;\n end: number;\n lead: string;\n node: JSONContent;\n pieces: Piece[];\n list: { num: number; lvl: number; type: string; start: number } | null;\n ctx: ListCtx | null;\n task: boolean | null;\n quote: boolean;\n level: number | null;\n rows: Row[];\n cols: number;\n};\nexport type Row = { ref: string; el: El; lead: string; head: string; cells: Cell[]; node: JSONContent };\nexport type Cell = { ref: string; el: El; lead: string; col: number; span: number; vm: 'restart' | 'continue' | null; blocks: Block[]; tail: string; node: JSONContent | null };\n\nconst blank = () => ({ align: null, indent: 0, line: null, after: null, ref: null });\nconst mimes: Record<string, string> = { png: 'image/png', jpg: 'image/jpeg', jpeg: 'image/jpeg', gif: 'image/gif', bmp: 'image/bmp', webp: 'image/webp', svg: 'image/svg+xml' };\n\nexport function align(v: string | null | undefined): string | null {\n if (v === 'center') return 'center';\n if (v === 'right' || v === 'end') return 'right';\n if (v === 'both' || v === 'distribute' || (v && /Kashida|thaiDistribute/.test(v))) return 'justify';\n return null;\n}\n\nfunction base64(bytes: Uint8Array): string {\n let bin = '';\n for (let i = 0; i < bytes.length; i += 0x8000) bin += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n return btoa(bin);\n}\n\nexport class Reader {\n s: string;\n n = 0;\n refs = new Map<string, Block | Row | Cell>();\n private footnotes: Map<string, string> | null = null;\n private counters = new Map<number, number[]>();\n private fmts = new Map<string, Fmt & { hidden?: boolean; style?: string }>();\n private media = new Map<string, string | null>();\n\n constructor(readonly pkg: Pkg) {\n this.s = pkg.doc;\n }\n\n ref(): string {\n return `${this.pkg.fp}.${(this.n++).toString(36)}`;\n }\n\n body() {\n const body = find(parse(this.s), 'w:body');\n if (!body) throw new Error('DOCX document has no body');\n const { list, tail } = this.blocks(body);\n return { body, list, tail, sect: kid(body, 'w:sectPr') };\n }\n\n fmt(rPr: El | undefined): Fmt & { hidden?: boolean; style?: string } {\n const key = rPr ? this.s.slice(rPr.start, rPr.end) : '';\n let f = this.fmts.get(key);\n if (!f) {\n const direct = props(this.s, rPr, this.pkg.styles.fonts);\n const style = direct.style ? this.pkg.styles.char(direct.style) : {};\n f = { ...plain, ...style, ...direct };\n this.fmts.set(key, f);\n }\n return f;\n }\n\n blocks(parent: El): { list: Block[]; tail: number } {\n const s = this.s;\n const list: Block[] = [];\n let prev = parent.open;\n let group: Block | null = null;\n let depth = 0;\n for (const k of parent.kids) {\n if (k.name === 'w:tcPr') {\n prev = k.end;\n continue;\n }\n if (k.name === 'w:sectPr') break;\n if (group) {\n group.end = k.end;\n depth += net(s.slice(k.start, k.end));\n if (depth <= 0) {\n if (/<w:instrText\\b[^>]*>\\s*TOC\\b/.test(s.slice(group.start, group.el.end))) {\n const toc = this.toc(group.el, group.end);\n toc.lead = group.lead;\n list[list.length - 1] = toc;\n }\n group = null;\n }\n prev = k.end;\n continue;\n }\n let b: Block | null = null;\n if (k.name === 'w:p') b = this.paragraph(k);\n else if (k.name === 'w:tbl') b = this.table(k);\n else if (k.name === 'w:sdt' && sdtLabel(s, k) === 'Table of contents') b = this.toc(k);\n else if (k.name === 'w:sdt' || k.name === 'w:customXml' || k.name === 'w:altChunk') b = this.lock(k, sdtLabel(s, k));\n if (!b) continue;\n b.lead = s.slice(prev, k.start);\n prev = k.end;\n list.push(b);\n if (b.kind === 'lock' && k.name === 'w:p') {\n depth = net(s.slice(k.start, k.end));\n if (depth > 0) group = b;\n }\n }\n return { list, tail: prev };\n }\n\n private block(kind: Block['kind'], el: El, node: JSONContent, ref: string): Block {\n const b: Block = { ref, kind, el, start: el.start, end: el.end, lead: '', node, pieces: [], list: null, ctx: null, task: null, quote: false, level: null, rows: [], cols: 0 };\n this.refs.set(ref, b);\n return b;\n }\n\n toc(el: El, end = el.end): Block {\n const ref = this.ref();\n const { entries, title } = contents(this.s.slice(el.start, end), this.pkg.styles);\n const b = this.block('toc', el, { type: 'toc', attrs: { entries: JSON.stringify(entries), title, align: null, indent: 0, ref } }, ref);\n b.end = end;\n return b;\n }\n\n lock(el: El, label: string, ref = 'lock:' + this.ref()): Block {\n return this.block('lock', el, { type: 'paragraph', attrs: { align: null, indent: 0, ref }, content: [{ type: 'text', text: `[${label}]` }] }, ref);\n }\n\n paragraph(el: El): Block {\n const s = this.s;\n const st = { lock: null as string | null, task: null as boolean | null, box: false, open: false };\n const pieces: Piece[] = [];\n this.walk(el.kids, [], el, pieces, st);\n const fields = this.fields(pieces, st);\n if (st.lock || st.open || !fields) {\n const label = st.lock ?? (/\\bTOC\\b/.test(pieces.map(p => p.instr ?? '').join('')) ? 'Table of contents' : 'Field');\n const text = st.open ? '' : pieces.map(p => p.text ?? '').join('');\n const b = this.lock(el, label);\n if (text.trim()) b.node.content![0].text += ' ' + text.trim();\n return b;\n }\n const final = fields;\n for (const p of final) {\n const src = p.pic && this.src(p.pic.embed);\n if (!src) continue;\n const meta = Object.fromEntries(attrs(/<wp:docPr\\b[^>]*>/.exec(p.raw!)?.[0] ?? '<x>'));\n p.img = { src, alt: meta.descr ?? null, title: meta.title ?? null, width: Math.round(p.pic!.cx / 9525), height: Math.round(p.pic!.cy / 9525),\n wrap: /<wp:anchor\\b/.test(p.raw!) ? /<wp:positionH\\b[^>]*>\\s*<wp:align>right</.test(p.raw!) ? 'right' : 'left' : null };\n }\n const pPr = kid(el, 'w:pPr');\n const styles = this.pkg.styles;\n const sEl = pPr && kid(pPr, 'w:pStyle');\n const style = sEl ? attr(s, sEl, 'w:val') : null;\n const jc = pPr && kid(pPr, 'w:jc');\n const visible = final.some(p => p.text !== null || p.img);\n if (!visible && final.some(p => p.pic)) return this.lock(el, 'Picture');\n const ref = this.ref();\n if (!visible && final.some(p => p.brk === 'page')) return this.block('pb', el, { type: 'pageBreak', attrs: { align: null, indent: 0, ref } }, ref);\n const bdr = pPr && kid(pPr, 'w:pBdr');\n if (!visible && (final.some(p => p.brk === 'hr') || (bdr && kid(bdr, 'w:bottom') && !kid(bdr, 'w:top')))) return this.block('hr', el, { type: 'horizontalRule', attrs: { align: null, indent: 0, ref } }, ref);\n\n const ol = pPr && kid(pPr, 'w:outlineLvl');\n const level = ol ? outline(attr(s, ol, 'w:val')) : styles.heading(style);\n const np = pPr && kid(pPr, 'w:numPr');\n let num: { num: number; lvl: number } | null = null;\n if (np) {\n const id = kid(np, 'w:numId');\n const lv = kid(np, 'w:ilvl');\n const fromStyle = styles.numPr(style);\n num = { num: id ? +(attr(s, id, 'w:val') ?? 0) : fromStyle?.num ?? 0, lvl: lv ? +(attr(s, lv, 'w:val') ?? 0) : fromStyle?.lvl ?? 0 };\n } else num = styles.numPr(style);\n const type = num && num.num ? this.pkg.nums.kind(num.num, num.lvl) : null;\n const isList = !!type && st.task === null && level === null;\n const ind = pPr && kid(pPr, 'w:ind');\n const left = ind && (attr(s, ind, 'w:left') ?? attr(s, ind, 'w:start'));\n const indent = isList ? 0 : Math.max(0, Math.round((left !== null && left !== undefined ? +left : styles.left(style)) / 720));\n const sp = pPr && kid(pPr, 'w:spacing');\n const lineAt = sp && attr(s, sp, 'w:line');\n const afterAt = sp && attr(s, sp, 'w:after');\n const auto = !sp || !attr(s, sp, 'w:lineRule') || attr(s, sp, 'w:lineRule') === 'auto';\n const base = { align: align(jc ? attr(s, jc, 'w:val') : styles.jc(style)), indent, line: lineAt && auto ? Math.round(+lineAt / 2.4) / 100 : null, after: afterAt ? +afterAt / 20 : null, ref };\n const node: JSONContent = level ? { type: 'heading', attrs: { level, ...base } } : { type: 'paragraph', attrs: base };\n const content = inline(final);\n if (content.length) node.content = content;\n const b = this.block('p', el, node, ref);\n b.pieces = final;\n b.level = level;\n b.task = level === null ? st.task : null;\n b.quote = !isList && b.task === null && level === null && !!style && /quote|block text|цитата/i.test(styles.name(style));\n if (isList) {\n const counts = this.counters.get(num!.num) ?? [];\n counts[num!.lvl] = counts[num!.lvl] === undefined ? this.pkg.nums.start(num!.num, num!.lvl) : counts[num!.lvl] + 1;\n counts.length = num!.lvl + 1;\n this.counters.set(num!.num, counts);\n b.list = { num: num!.num, lvl: num!.lvl, type: type!, start: counts[num!.lvl] };\n }\n return b;\n }\n\n private notes(): Map<string, string> {\n if (!this.footnotes) {\n const rel = this.pkg.byType('/footnotes');\n const xml = rel ? this.pkg.text(rel.target) ?? '' : '';\n this.footnotes = new Map([...xml.matchAll(/<w:footnote\\b[^>]*\\bw:id=\"(-?\\d+)\"[^>]*>([\\s\\S]*?)<\\/w:footnote>/g)].map(m => [m[1], noteText(m[2])]));\n }\n return this.footnotes;\n }\n\n private src(embed: string): string | null {\n if (!this.media.has(embed)) {\n const rel = this.pkg.rels.get(embed);\n const ext = rel && !rel.external ? rel.target.split('.').pop()!.toLowerCase() : '';\n const e = rel && this.pkg.files.get(rel.target);\n this.media.set(embed, e && mimes[ext] ? `data:${mimes[ext]};base64,${base64(this.pkg.part(rel!.target))}` : null);\n }\n return this.media.get(embed)!;\n }\n\n private walk(kids: El[], ctx: Wrap[], parent: El, out: Piece[], st: { lock: string | null; task: boolean | null; box: boolean }) {\n const s = this.s;\n for (const k of kids) {\n const name = k.name;\n if (name === 'w:pPr') continue;\n if (name === 'w:r') this.run(k, ctx, parent, out, st);\n else if (name === 'w:hyperlink' && k.end !== k.open) {\n const id = attr(s, k, 'r:id');\n const anchor = attr(s, k, 'w:anchor');\n const rel = id ? this.pkg.rels.get(id) : undefined;\n const href = (rel ? rel.target : '') + (anchor ? '#' + anchor : '') || null;\n this.walk(k.kids, [...ctx, { open: s.slice(k.start, k.open), close: '</w:hyperlink>', link: href, ins: false }], k, out, st);\n } else if ((name === 'w:ins' || name === 'w:moveTo' || name === 'w:del' || name === 'w:moveFrom') && k.end !== k.open) {\n const rev = JSON.stringify([name === 'w:ins' || name === 'w:moveTo' ? 'ins' : 'del', attr(s, k, 'w:id') ?? '', attr(s, k, 'w:author') ?? '', attr(s, k, 'w:date') ?? '']);\n this.walk(k.kids, [...ctx, { open: s.slice(k.start, k.open), close: `</${name}>`, link: null, ins: true, rev }], k, out, st);\n } else if ((name === 'w:smartTag' || name === 'w:customXml' || name === 'w:dir' || name === 'w:bdo') && k.end !== k.open) {\n const pr = k.kids[0] && /Pr$/.test(k.kids[0].name) ? k.kids[0] : null;\n this.walk(pr ? k.kids.slice(1) : k.kids, [...ctx, { open: s.slice(k.start, pr ? pr.end : k.open), close: `</${name}>`, link: null, ins: false }], k, out, st);\n } else if (name === 'w:sdt') {\n const pr = kid(k, 'w:sdtPr');\n const box = pr && find(pr, 'w14:checkbox');\n if (box && st.task === null && !out.some(p => p.text !== null)) {\n const c = find(box, 'w14:checked');\n st.task = !!c && on(s, c, 'w14:val');\n st.box = true;\n out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null, box: true });\n } else {\n const content = kid(k, 'w:sdtContent');\n const inside: Piece[] = [];\n if (content) this.walk(content.kids, ctx, content, inside, { lock: null, task: false, box: false });\n this.span(s.slice(k.start, k.end), inside, out, ctx, null);\n }\n } else if (name === 'w:fldSimple') {\n const inside: Piece[] = [];\n this.walk(k.kids, ctx, k, inside, { lock: null, task: false, box: false });\n this.span(s.slice(k.start, k.end), inside, out, ctx, hyperlink(attr(s, k, 'w:instr') ?? ''));\n } else if (name === 'm:oMath') out.push({ text: '\\uE000', raw: s.slice(k.start, k.end), run: null, ctx, span: null, math: latexOf(s.slice(k.start, k.end)) }); else if (name === 'm:oMathPara') st.lock = 'Equation';\n else out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null });\n }\n }\n\n private span(xml: string, inside: Piece[], out: Piece[], ctx: Wrap[], link: string | null) {\n const shown = inside.filter(p => p.text !== null);\n if (!shown.length) {\n out.push({ text: null, raw: xml, run: null, ctx, span: null });\n return;\n }\n const span: Span = { xml, link };\n for (const p of shown) out.push({ ...p, span });\n }\n\n private run(k: El, ctx: Wrap[], parent: El, out: Piece[], st: { lock: string | null; task: boolean | null; box: boolean }) {\n const s = this.s;\n const rPrEl = kid(k, 'w:rPr');\n const f = this.fmt(rPrEl);\n if (f.hidden || k.end === k.open) {\n out.push({ text: null, raw: s.slice(k.start, k.end), run: null, ctx, span: null });\n return;\n }\n const run: Run = { open: opened(s, k), rPr: rPrEl ? s.slice(rPrEl.start, rPrEl.end) : '', fmt: f, el: k, parent };\n const push = (text: string | null, raw: string | null, extra?: Partial<Piece>) => {\n if (text !== null && st.box) {\n st.box = false;\n if (text.startsWith(' ') && raw === null) {\n out.push({ text: null, raw: '<w:t xml:space=\"preserve\"> </w:t>', run, ctx, span: null, box: true });\n text = text.slice(1);\n if (!text) return;\n }\n }\n out.push({ text, raw, run, ctx, span: null, ...extra });\n };\n for (const c of k.kids) {\n const raw = s.slice(c.start, c.end);\n switch (c.name) {\n case 'w:rPr': break;\n case 'w:t': case 'w:delText': {\n const text = inner(s, c).replace(/[\\r\\n]/g, ' ');\n if (text) push(text, null);\n break;\n }\n case 'w:tab': case 'w:ptab': push('\\t', raw); break;\n case 'w:cr': push('\\n', raw); break;\n case 'w:noBreakHyphen': push('\\u2011', raw); break;\n case 'w:softHyphen': push('\\u00AD', raw); break;\n case 'w:br': {\n const type = attr(s, c, 'w:type');\n if (type === 'page') push(null, raw, { brk: 'page' });\n else if (type === 'column') push(null, raw);\n else push('\\n', raw);\n break;\n }\n case 'w:footnoteReference': {\n const id = attr(s, c, 'w:id') ?? '';\n push('\\uE001', raw, { note: { id, text: this.notes().get(id) ?? '' } });\n break;\n }\n case 'w:fldChar': push(null, raw, { fld: attr(s, c, 'w:fldCharType') ?? '' }); break;\n case 'w:instrText': push(null, raw, { instr: inner(s, c) }); break;\n case 'w:drawing': {\n const pic = picture(raw);\n if (pic) push(null, raw, { pic });\n else st.lock = shape(raw);\n break;\n }\n case 'w:pict': {\n const pic = /textbox/.test(raw) ? null : vml(raw);\n if (/o:hr=\"t\"/.test(raw)) push(null, raw, { brk: 'hr' });\n else if (pic) push(null, raw, { pic });\n else st.lock = /textbox/.test(raw) ? 'Text box' : 'Shape';\n break;\n }\n case 'mc:AlternateContent': st.lock = shape(raw); break;\n case 'w:object': st.lock = 'Object'; break;\n default: push(null, raw);\n }\n }\n }\n\n private fields(pieces: Piece[], st: { open: boolean }): Piece[] | null {\n if (!pieces.some(p => p.fld)) return pieces;\n const out: Piece[] = [];\n let depth = 0;\n let begin = -1;\n for (let i = 0; i < pieces.length; i++) {\n const p = pieces[i];\n if (p.fld === 'begin') {\n if (depth++ === 0) begin = i;\n } else if (p.fld === 'end' && depth > 0 && --depth === 0) {\n const a = pieces[begin].run!;\n const z = p.run!;\n if (a.parent !== z.parent) return null;\n let first = begin;\n while (first > 0 && pieces[first - 1].run === a) first--;\n let last = i;\n while (last + 1 < pieces.length && pieces[last + 1].run === z) last++;\n out.length -= begin - first;\n const shown: Piece[] = [];\n const code: boolean[] = [];\n let hidden = 0;\n let instr = '';\n for (let j = first; j <= last; j++) {\n const q = pieces[j];\n if (q.fld === 'begin') {\n code.push(true);\n hidden++;\n } else if (q.fld === 'separate' && code[code.length - 1]) {\n code[code.length - 1] = false;\n hidden--;\n } else if (q.fld === 'end') {\n if (code.pop()) hidden--;\n } else if (q.instr && code.length === 1) instr += q.instr;\n else if (q.text !== null && hidden === 0) shown.push(q);\n }\n this.span(this.s.slice(a.el!.start, z.el!.end), shown, out, pieces[first].ctx, hyperlink(instr));\n i = last;\n } else if (depth === 0) out.push(p);\n }\n if (depth > 0) st.open = true;\n return out;\n }\n\n table(el: El): Block {\n const s = this.s;\n if (el.kids.some(k => k.name === 'w:sdt' || k.name === 'w:customXml' || (k.name === 'w:tr' && k.kids.some(c => c.name === 'w:sdt' || c.name === 'w:customXml')))) return this.lock(el, 'Table');\n const ref = this.ref();\n const pr = kid(el, 'w:tblPr');\n const jc = pr && kid(pr, 'w:jc');\n const bd = pr && kid(pr, 'w:tblBorders');\n const bare = !!bd && bd.kids.length > 0 && bd.kids.every(k => /^(none|nil)$/.test(attr(s, k, 'w:val') ?? ''));\n const node: JSONContent = { type: 'table', attrs: { align: align(jc ? attr(s, jc, 'w:val') : null), indent: 0, borders: bare ? 'none' : null, ref }, content: [] };\n const b = this.block('tbl', el, node, ref);\n const grid = kid(el, 'w:tblGrid');\n b.cols = grid ? grid.kids.filter(k => k.name === 'w:gridCol').length : 0;\n const widths = grid ? grid.kids.filter(k => k.name === 'w:gridCol').map(k => Math.floor(+(attr(s, k, 'w:w') ?? 0) / 15)) : [];\n const open: (JSONContent | null)[] = [];\n let prev = grid ? grid.end : pr ? pr.end : el.open;\n for (const tr of el.kids) {\n if (tr.name !== 'w:tr') continue;\n const rref = this.ref();\n const row: Row = { ref: rref, el: tr, lead: s.slice(prev, tr.start), head: '', cells: [], node: { type: 'tableRow', attrs: { align: null, indent: 0, ref: rref }, content: [] } };\n this.refs.set(rref, row);\n prev = tr.end;\n const trPr = kid(tr, 'w:trPr');\n const header = !!trPr && on(s, kid(trPr, 'w:tblHeader'));\n const before = trPr && kid(trPr, 'w:gridBefore');\n let col = before ? +(attr(s, before, 'w:val') ?? 0) : 0;\n let last = tr.open;\n for (const c of tr.kids) {\n if (c.name === 'w:tc') break;\n if (c.name === 'w:trPr' || c.name === 'w:tblPrEx') last = c.end;\n }\n row.head = s.slice(tr.open, last);\n for (const tc of tr.kids) {\n if (tc.name !== 'w:tc') continue;\n const tcPr = kid(tc, 'w:tcPr');\n const gs = tcPr && kid(tcPr, 'w:gridSpan');\n const vmEl = tcPr && kid(tcPr, 'w:vMerge');\n const vmVal = vmEl ? attr(s, vmEl, 'w:val') : null;\n const span = gs ? Math.max(1, +(attr(s, gs, 'w:val') ?? 1)) : 1;\n let vm: Cell['vm'] = vmEl ? (vmVal === 'restart' ? 'restart' : 'continue') : null;\n if (vm === 'continue' && !open[col]) vm = null;\n const cref = this.ref();\n const inside = this.blocks(tc);\n const cell: Cell = { ref: cref, el: tc, lead: s.slice(last, tc.start), col, span, vm, blocks: inside.list, tail: s.slice(inside.tail, tc.close), node: null };\n last = tc.end;\n this.refs.set(cref, cell);\n if (vm === 'continue') open[col]!.attrs!.rowspan++;\n else {\n const content = assemble(inside.list);\n const own = widths.slice(col, col + span);\n const shd = tcPr && kid(tcPr, 'w:shd');\n const fill = shd ? attr(s, shd, 'w:fill') : null;\n cell.node = { type: header ? 'tableHeader' : 'tableCell', attrs: { colspan: span, rowspan: 1, colwidth: own.length === span && own.every(w => w > 0) ? own : null, background: fill && /^[0-9a-f]{6}$/i.test(fill) ? `#${fill.toLowerCase()}` : null, align: null, indent: 0, ref: cref }, content: content.length ? content : [{ type: 'paragraph', attrs: blank() }] };\n row.node.content!.push(cell.node);\n for (let c = col; c < col + span; c++) open[c] = null;\n if (vm === 'restart') open[col] = cell.node;\n }\n col += span;\n row.cells.push(cell);\n }\n b.rows.push(row);\n node.content!.push(row.node);\n }\n return b;\n }\n}\n\nfunction net(xml: string): number {\n let n = 0;\n if (xml.indexOf('w:fldCharType') === -1) return 0;\n for (const m of xml.matchAll(/w:fldCharType=\"(begin|end)\"/g)) n += m[1] === 'begin' ? 1 : -1;\n return n;\n}\n\nfunction hyperlink(instr: string): string | null {\n const m = /^\\s*HYPERLINK\\s+(?:\"([^\"]*)\")?(?:.*?\\\\l\\s+\"([^\"]*)\")?/.exec(instr);\n if (!m || (!m[1] && !m[2])) return null;\n return (m[1] ?? '') + (m[2] ? '#' + m[2] : '');\n}\n\nfunction contents(xml: string, styles: Styles): { entries: [number, string][]; title: string | null } {\n const entries: [number, string][] = [];\n let title: string | null = null;\n let begun = false;\n for (const p of xml.match(/<w:p\\b(?:[^>]*\\/>|[\\s\\S]*?<\\/w:p>)/g) ?? []) {\n const id = /<w:pStyle w:val=\"([^\"]*)\"/.exec(p)?.[1] ?? '';\n const level = Number(/^toc ?(\\d)$/i.exec(styles.name(id).trim())?.[1] ?? /^TOC(\\d)$/i.exec(id)?.[1] ?? 0);\n begun ||= level > 0 || /w:fldCharType=\"begin\"/.test(p);\n const text = (p.replace(/<w:instrText\\b[\\s\\S]*?<\\/w:instrText>/g, '').match(/<w:t(?:\\s[^>]*)?>[^<]*<\\/w:t>|<w:tab\\/>/g) ?? [])\n .map(m => m === '<w:tab/>' ? '\\t' : unescape(m.replace(/<[^>]*>/g, ''))).join('');\n const shown = (text.includes('\\t') ? text.slice(0, text.lastIndexOf('\\t')) : text).trim();\n if (!shown) continue;\n if (begun) entries.push([level || 1, shown]);\n else title ??= shown;\n }\n return { entries, title };\n}\n\nfunction sdtLabel(s: string, el: El): string {\n if (el.name === 'w:altChunk') return 'Imported content';\n const xml = s.slice(el.start, Math.min(el.end, el.start + 4000));\n if (/w:docPartGallery w:val=\"Table of Contents\"/.test(xml) || /TOC \\\\/.test(s.slice(el.start, el.end))) return 'Table of contents';\n const alias = /<w:alias w:val=\"([^\"]*)\"/.exec(xml);\n return alias ? alias[1] : 'Content control';\n}\n\nfunction picture(raw: string): Pic | null {\n if (!/drawingml\\/2006\\/picture\"/.test(raw) || /wps:|wpg:|wpc:|c:chart|dgm:|txbxContent/.test(raw)) return null;\n const embed = /<a:blip\\b[^>]*\\br:embed=\"([^\"]*)\"/.exec(raw);\n const ext = /<wp:extent\\b[^>]*\\bcx=\"(\\d+)\"[^>]*\\bcy=\"(\\d+)\"/.exec(raw);\n return embed && ext ? { embed: embed[1], cx: +ext[1], cy: +ext[2] } : null;\n}\n\nfunction vml(raw: string): Pic | null {\n const embed = /<v:imagedata\\b[^>]*\\br:id=\"([^\"]*)\"/.exec(raw);\n const style = /<v:shape\\b[^>]*\\bstyle=\"([^\"]*)\"/.exec(raw)?.[1] ?? '';\n const emu = (key: string) => {\n const m = new RegExp(`(?:^|;)\\\\s*${key}:\\\\s*([\\\\d.]+)(pt|px|in|cm|mm)?`).exec(style);\n return m ? Math.round(+m[1] * (({ px: 9525, in: 914400, cm: 360000, mm: 36000 } as Record<string, number>)[m[2]] ?? 12700)) : 0;\n };\n return embed ? { embed: embed[1], cx: emu('width'), cy: emu('height') } : null;\n}\n\nfunction shape(raw: string): string {\n if (/txbxContent|v:textbox/.test(raw)) return 'Text box';\n if (/c:chart/.test(raw)) return 'Chart';\n if (/dgm:/.test(raw)) return 'Diagram';\n if (/m:oMath/.test(raw)) return 'Equation';\n return /drawingml\\/2006\\/picture\"/.test(raw) ? 'Picture' : 'Shape';\n}\n\nexport function fmtAt(p: Piece): Fmt {\n const f = p.run ? p.run.fmt : plain;\n let link: string | null = null;\n let rev: string | null = null;\n for (const w of p.ctx) {\n if (w.link) link = w.link;\n if (w.rev) rev = w.rev;\n }\n link ??= p.span?.link ?? null;\n return link === f.link && rev === f.rev ? f : { ...f, link, rev };\n}\n\nexport const noteText = (xml: string) => [...xml.matchAll(/<w:t(?:\\s[^>]*)?>([^<]*)<\\/w:t>/g)].map(m => m[1]).join('').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"').replace(/&/g, '&').trim();\n\nexport function inline(pieces: Piece[]): JSONContent[] {\n const out: JSONContent[] = [];\n let key = '';\n for (const p of pieces) {\n if (p.math !== undefined || p.note) {\n out.push(p.note ? { type: 'footnote', attrs: { id: p.note.id, text: p.note.text } } : { type: 'math', attrs: { latex: p.math } });\n key = '';\n continue;\n }\n if (p.img) {\n out.push({ type: 'image', attrs: { ...p.img } });\n key = '';\n continue;\n }\n if (p.text === null) continue;\n if (p.text === '\\n') {\n out.push({ type: 'hardBreak' });\n key = '';\n continue;\n }\n const f = fmtAt(p);\n const k = keyOf(f);\n const last = out[out.length - 1];\n if (last && last.type === 'text' && k === key) last.text += p.text;\n else {\n const node: JSONContent = { type: 'text', text: p.text };\n const marks = marksOf(f);\n if (marks) node.marks = marks;\n out.push(node);\n key = k;\n }\n }\n return out;\n}\n\nexport function assemble(list: Block[]): JSONContent[] {\n const out: JSONContent[] = [];\n for (let i = 0; i < list.length; ) {\n const b = list[i];\n let j = i + 1;\n if (b.list) {\n while (j < list.length && list[j].list && !(list[j].list!.num !== b.list.num && list[j].list!.lvl <= b.list.lvl)) j++;\n out.push(nest(list.slice(i, j)));\n } else if (b.task !== null) {\n while (j < list.length && list[j].task !== null) j++;\n out.push({ type: 'taskList', attrs: blank(), content: list.slice(i, j).map(t => ({ type: 'taskItem', attrs: { checked: t.task, ...blank() }, content: [t.node] })) });\n } else if (b.quote) {\n while (j < list.length && list[j].quote) j++;\n out.push({ type: 'blockquote', attrs: blank(), content: list.slice(i, j).map(q => q.node) });\n } else out.push(b.node);\n i = j;\n }\n return out;\n}\n\nfunction nest(list: Block[]): JSONContent {\n const make = (b: Block): JSONContent => ({ type: b.list!.type, attrs: b.list!.type === 'orderedList' ? { start: b.list!.start, ...blank() } : blank(), content: [] });\n const root = make(list[0]);\n const stack = [{ list: root, lvl: list[0].list!.lvl }];\n for (const b of list) {\n let top = stack[stack.length - 1];\n while (b.list!.lvl < top.lvl && stack.length > 1) {\n stack.pop();\n top = stack[stack.length - 1];\n }\n if (b.list!.lvl > top.lvl && top.list.content!.length) {\n const sub = make(b);\n top.list.content![top.list.content!.length - 1].content!.push(sub);\n stack.push({ list: sub, lvl: b.list!.lvl });\n top = stack[stack.length - 1];\n }\n b.ctx = { type: top.list.type!, depth: stack.length - 1 };\n top.list.content!.push({ type: 'listItem', attrs: blank(), content: [b.node] });\n }\n return root;\n}\n","import { diff } from './diff';\nimport { color, fmtOf, highlights, keyOf, plain, Pkg, type Fmt } from './pkg';\nimport { align, assemble, fmtAt, noteText, Reader, type Block, type Cell, type JSONContent, type Row, type Run, type Span, type Wrap } from './read';\nimport { attr, attrs, escape, kid, opened, parse, rebuild } from './xml';\nimport { entry, zip, type Entry } from './zip';\nimport { omml } from '../editor/math';\n\nconst P = ['w:pStyle', 'w:keepNext', 'w:keepLines', 'w:pageBreakBefore', 'w:framePr', 'w:widowControl', 'w:numPr', 'w:suppressLineNumbers', 'w:pBdr', 'w:shd', 'w:tabs', 'w:suppressAutoHyphens', 'w:kinsoku', 'w:wordWrap', 'w:overflowPunct', 'w:topLinePunct', 'w:autoSpaceDE', 'w:autoSpaceDN', 'w:bidi', 'w:adjustRightInd', 'w:snapToGrid', 'w:spacing', 'w:ind', 'w:contextualSpacing', 'w:mirrorIndents', 'w:suppressOverlap', 'w:jc', 'w:textDirection', 'w:textAlignment', 'w:textboxTightWrap', 'w:outlineLvl', 'w:divId', 'w:cnfStyle', 'w:rPr', 'w:sectPr', 'w:pPrChange'];\nconst R = ['w:rStyle', 'w:rFonts', 'w:b', 'w:bCs', 'w:i', 'w:iCs', 'w:caps', 'w:smallCaps', 'w:strike', 'w:dstrike', 'w:outline', 'w:shadow', 'w:emboss', 'w:imprint', 'w:noProof', 'w:snapToGrid', 'w:vanish', 'w:webHidden', 'w:color', 'w:spacing', 'w:w', 'w:kern', 'w:position', 'w:sz', 'w:szCs', 'w:highlight', 'w:u', 'w:effect', 'w:bdr', 'w:shd', 'w:fitText', 'w:vertAlign', 'w:rtl', 'w:cs', 'w:em', 'w:lang', 'w:eastAsianLayout', 'w:specVanish', 'w:oMath'];\nconst TC = ['w:cnfStyle', 'w:tcW', 'w:gridSpan', 'w:hMerge', 'w:vMerge', 'w:tcBorders', 'w:shd', 'w:noWrap', 'w:tcMar', 'w:textDirection', 'w:tcFitText', 'w:vAlign', 'w:hideMark', 'w:headers', 'w:cellIns', 'w:cellDel', 'w:cellMerge', 'w:tcPrChange'];\nconst REL = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\nconst special: Record<string, string> = { '\\t': '<w:tab/>', '\\n': '<w:br/>', '\\u2011': '<w:noBreakHyphen/>', '\\u00AD': '<w:softHyphen/>' };\n\ntype Out = { kind: 'p' | 'pb' | 'hr' | 'tbl' | 'code' | 'toc'; node: JSONContent; list: { type: string; depth: number; group: number; start: number } | null; task: boolean | null; quote: boolean; cont: { depth: number; group: number } | null };\ntype Unit = { ch: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; span: Span | null; idx: number; fmt: Fmt; base: Fmt; box?: boolean; img?: Record<string, unknown>; math?: string; note?: { id: string; text: string } };\ntype Glyph = { ch: string | null; raw: string | null; run: Run | null; ctx: Wrap[]; u: Unit | null; fmt: Fmt; xml?: string };\nexport type Img = { bytes: Uint8Array; mime: string };\nexport type Setup = { page?: { width: number; height: number; margins: [number, number, number, number] }; header?: string; footer?: string; numbers?: boolean };\n\nconst keys: Record<string, [string, unknown][]> = {\n paragraph: [['align', null], ['indent', 0], ['line', null], ['after', null]],\n heading: [['level', 1], ['align', null], ['indent', 0], ['line', null], ['after', null]],\n table: [['align', null], ['borders', null]],\n tableCell: [['colspan', 1], ['rowspan', 1], ['colwidth', null], ['background', null]],\n tableHeader: [['colspan', 1], ['rowspan', 1], ['colwidth', null], ['background', null]],\n orderedList: [['start', 1]],\n taskItem: [['checked', false]],\n codeBlock: [['language', null]],\n toc: [['entries', '[]'], ['title', null]],\n image: [['src', null], ['alt', null], ['title', null], ['width', null], ['height', null], ['wrap', null]],\n};\n\nfunction value(key: string, v: unknown): unknown {\n if (v === undefined || v === '' || v === null) return null;\n if (key === 'align') return v === 'left' ? null : v;\n if (key === 'width' || key === 'height') return Math.round(Number(v)) || null;\n if (key === 'line' || key === 'after') return Number.isFinite(Number(v)) ? Number(v) : null;\n if (key === 'colwidth') return Array.isArray(v) && v.length && v.every(w => Number(w) > 0) ? v.map(w => Math.round(Number(w))) : null;\n if (key === 'indent' || key === 'level' || key === 'colspan' || key === 'rowspan' || key === 'start') return Number(v) || 0;\n if (key === 'checked') return !!v;\n return v;\n}\n\nfunction sig(n: JSONContent): string {\n if (n.type === 'text' || n.type === 'hardBreak') return inlineSig([n]);\n const a = n.attrs ?? {};\n let out = `${n.type}(${(keys[n.type ?? ''] ?? []).map(([k, d]) => { const v = value(k, a[k]); return v === value(k, d) ? '' : `${k}=${JSON.stringify(v)}`; }).join(',')}${a.ref ? '#' + a.ref : ''})`;\n const kids = n.content ?? [];\n if (kids.length && (kids[0].type === 'text' || kids[0].type === 'hardBreak' || kids.some(k => k.type === 'text'))) return out + inlineSig(kids);\n out += '[' + kids.map(sig).join(',') + ']';\n return out;\n}\n\nfunction inlineSig(kids: JSONContent[]): string {\n let out = '';\n let key: string | null = null;\n for (const k of kids) {\n if (k.type === 'text') {\n if (!k.text) continue;\n const next = keyOf(fmtOf(k.marks as never));\n out += (next === key ? '' : `\\u0001${next}\\u0002`) + k.text;\n key = next;\n } else {\n out += `\\u0003${k.type}${k.type === 'image' ? picture(k.attrs ?? {}) : k.type === 'math' ? k.attrs?.latex : k.type === 'footnote' ? `${k.attrs?.id}:${k.attrs?.text}` : ''}\\u0004`;\n key = null;\n }\n }\n return out;\n}\n\nfunction picture(a: Record<string, unknown>): string {\n return JSON.stringify([a.src ?? null, a.alt || null, a.title || null, Math.round(Number(a.width)) || null, Math.round(Number(a.height)) || null, a.wrap || null]);\n}\n\nlet groups = 0;\n\nfunction flatten(content: JSONContent[], out: Out[] = [], quote = false): Out[] {\n for (const node of content) {\n const t = node.type;\n const add = (kind: Out['kind'], extra: Partial<Out> = {}) => out.push({ kind, node, list: null, task: null, quote, cont: null, ...extra });\n if (t === 'paragraph' || t === 'heading') add('p');\n else if (t === 'bulletList' || t === 'orderedList') listed(node, 0, ++groups, out, quote);\n else if (t === 'taskList') {\n for (const li of node.content ?? []) {\n (li.content ?? []).forEach((c, i) => {\n if (i === 0 && (c.type === 'paragraph' || c.type === 'heading')) out.push({ kind: 'p', node: c, list: null, task: !!li.attrs?.checked, quote, cont: null });\n else flatten([c], out, quote);\n });\n }\n } else if (t === 'blockquote') flatten(node.content ?? [], out, true);\n else if (t === 'table') add('tbl');\n else if (t === 'image') out.push({ kind: 'p', node: { type: 'paragraph', attrs: { align: null, indent: 0, ref: null }, content: [node] }, list: null, task: null, quote, cont: null });\n else if (t === 'pageBreak') add('pb');\n else if (t === 'toc') add('toc');\n else if (t === 'horizontalRule') add('hr');\n else if (t === 'codeBlock') add('code');\n else if (node.content) flatten(node.content, out, quote);\n }\n return out;\n}\n\nfunction listed(list: JSONContent, depth: number, group: number, out: Out[], quote: boolean) {\n for (const li of list.content ?? []) {\n (li.content ?? []).forEach((c, i) => {\n if (i === 0 && (c.type === 'paragraph' || c.type === 'heading')) out.push({ kind: 'p', node: c, list: { type: list.type!, depth, group, start: Number(list.attrs?.start ?? 1) || 1 }, task: null, quote, cont: null });\n else if (c.type === 'bulletList' || c.type === 'orderedList') listed(c, depth + 1, group, out, quote);\n else if (c.type === 'paragraph' || c.type === 'heading') out.push({ kind: 'p', node: c, list: null, task: null, quote, cont: { depth, group } });\n else flatten([c], out, quote);\n });\n }\n}\n\ntype Slot = { col: number; span: number; cell: JSONContent | null; from: JSONContent | null };\n\nfunction grid(rows: JSONContent[]): Slot[][] {\n const taken: number[] = [];\n const from: JSONContent[] = [];\n const span = (c: JSONContent) => Math.max(1, Number(c.attrs?.colspan ?? 1) || 1);\n return rows.map(row => {\n const cells = row.content ?? [];\n const slots: Slot[] = [];\n let col = 0;\n let i = 0;\n while (i < cells.length || taken.some((t, k) => k >= col && t > 0)) {\n if ((taken[col] ?? 0) > 0) {\n const f = from[col];\n const n = span(f);\n for (let k = col; k < col + n; k++) taken[k]--;\n slots.push({ col, span: n, cell: null, from: f });\n col += n;\n continue;\n }\n if (i >= cells.length) {\n col++;\n continue;\n }\n const c = cells[i++];\n const n = span(c);\n const rs = Math.max(1, Number(c.attrs?.rowspan ?? 1) || 1);\n slots.push({ col, span: n, cell: c, from: null });\n if (rs > 1) for (let k = col; k < col + n; k++) {\n taken[k] = rs - 1;\n from[k] = c;\n }\n col += n;\n }\n return slots;\n });\n}\n\nfunction dims(bytes: Uint8Array): [number, number] | null {\n const v = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n if (bytes[0] === 0x89 && bytes[1] === 0x50) return [v.getUint32(16), v.getUint32(20)];\n if (bytes[0] === 0x47 && bytes[1] === 0x49) return [v.getUint16(6, true), v.getUint16(8, true)];\n if (bytes[0] === 0xff && bytes[1] === 0xd8) {\n for (let i = 2; i + 9 < bytes.length; ) {\n if (bytes[i] !== 0xff) return null;\n const m = bytes[i + 1];\n if (m >= 0xc0 && m <= 0xcf && m !== 0xc4 && m !== 0xc8 && m !== 0xcc) return [v.getUint16(i + 7), v.getUint16(i + 5)];\n i += 2 + v.getUint16(i + 2);\n }\n }\n return null;\n}\n\nfunction meta(tag: string, img: Record<string, unknown>): string {\n const extra = `${img.alt ? ` descr=\"${escape(String(img.alt))}\"` : ''}${img.title ? ` title=\"${escape(String(img.title))}\"` : ''}`;\n return tag.replace(/\\s(descr|title)=\"[^\"]*\"/g, '').replace(/\\s*\\/?>$/, end => extra + end);\n}\n\nfunction checked(xml: string, on: boolean): string {\n const yes = /w14:checkedState\\b[^>]*w14:val=\"([0-9A-Fa-f]+)\"/.exec(xml)?.[1] ?? '2612';\n const no = /w14:uncheckedState\\b[^>]*w14:val=\"([0-9A-Fa-f]+)\"/.exec(xml)?.[1] ?? '2610';\n const [from, to] = on ? [no, yes] : [yes, no];\n let out = /<w14:checked\\b/.test(xml) ? xml.replace(/(<w14:checked\\b[^>]*w14:val=\")[^\"]*\"/, `$1${on ? 1 : 0}\"`) : xml.replace(/(<w14:checkbox\\b[^>]*>)/, `$1<w14:checked w14:val=\"${on ? 1 : 0}\"/>`);\n const at = out.indexOf('<w:sdtContent');\n if (at === -1) return out;\n const tail = out.slice(at).replace(new RegExp(`w:char=\"${from}\"`, 'i'), `w:char=\"${to}\"`).replace(`>${String.fromCharCode(parseInt(from, 16))}<`, `>${String.fromCharCode(parseInt(to, 16))}<`);\n out = out.slice(0, at) + tail;\n return out;\n}\n\nexport class Writer {\n s: string;\n r: Reader;\n claimed = new Map<JSONContent, Block | Row | Cell>();\n used = new Set<Block | Row | Cell>();\n carry = new Map<Block, string>();\n left = new Map<Cell, string>();\n rels: string[] = [];\n private relIds = new Set<string>();\n private links = new Map<string, string>();\n private media: { name: string; bytes: Uint8Array }[] = [];\n private types = new Set<string>();\n private numbering: { abs: string[]; nums: string[] } = { abs: [], nums: [] };\n private kinds = new Map<number, string>();\n private nextNum: number;\n private nextAbs: number;\n private styleXml: string[] = [];\n private groupNum = new Map<number, { num: number; base: number }>();\n private extra = new Map<string, number>();\n private docPr: number;\n private body!: ReturnType<Reader['body']>;\n private last: Out['kind'] | null = null;\n private wraps = new Map<string, Wrap>();\n private srcs: Map<string, string> | null = null;\n private tocs = false;\n private revs = new Map<string, Wrap>();\n private nextRev: number;\n private lastNote: number | null = null;\n\n constructor(readonly pkg: Pkg, private images: Map<string, Img>) {\n this.r = new Reader(pkg);\n this.s = pkg.doc;\n for (const id of pkg.rels.keys()) this.relIds.add(id);\n this.nextNum = pkg.nums.maxNum + 1;\n this.nextAbs = pkg.nums.maxAbs + 1;\n let max = 0;\n for (const m of this.s.matchAll(/<wp:docPr\\b[^>]*\\bid=\"(\\d+)\"/g)) max = Math.max(max, +m[1]);\n this.docPr = max + 1;\n this.nextRev = Math.max(0, ...[...this.s.matchAll(/\\bw:id=\"(\\d+)\"/g)].map(m => +m[1])) + 1;\n }\n\n run(doc: JSONContent, setup?: Setup): Uint8Array | null {\n const s = this.s;\n this.body = this.r.body();\n const { list, tail, body } = this.body;\n assemble(list);\n this.claim(doc.content ?? []);\n let rest = '';\n this.carryOver(list, x => (rest = x));\n let xml = this.container(flatten(doc.content ?? []), list, null);\n if (this.last === 'tbl' && list[list.length - 1]?.kind !== 'tbl') xml += '<w:p/>';\n const changed = new Map<string, string | Uint8Array>();\n const text = this.marginal(s.slice(0, body.open) + xml + rest + s.slice(tail), setup, changed);\n this.footnotes(doc, changed);\n if (text !== s) changed.set(this.pkg.main, text);\n if (this.rels.length) {\n const path = this.pkg.relsPath(this.pkg.main);\n const old = this.pkg.text(path) ?? `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"></Relationships>`;\n changed.set(path, old.replace(/<\\/Relationships>\\s*$/, this.rels.join('') + '</Relationships>'));\n }\n if (this.numbering.abs.length || this.numbering.nums.length) {\n const rel = this.pkg.byType('/numbering');\n let n = rel ? this.pkg.text(rel.target) : null;\n const path = rel ? rel.target : 'word/numbering.xml';\n if (n === null) {\n n = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<w:numbering xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"></w:numbering>`;\n this.types.add(`<Override PartName=\"/${path}\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\"/>`);\n }\n const at = n.search(/<w:num\\b[\\s>]/);\n const abs = this.numbering.abs.join('');\n n = at === -1 ? n.replace(/(<w:numIdMacAtCleanup\\b|<\\/w:numbering>)/, abs + '$1') : n.slice(0, at) + abs + n.slice(at);\n n = n.replace(/(<w:numIdMacAtCleanup\\b|<\\/w:numbering>)/, this.numbering.nums.join('') + '$1');\n changed.set(path, n);\n if (!rel) {\n const id = this.relId();\n const path2 = this.pkg.relsPath(this.pkg.main);\n const old = (changed.get(path2) as string | undefined) ?? this.pkg.text(path2)!;\n changed.set(path2, old.replace(/<\\/Relationships>\\s*$/, `<Relationship Id=\"${id}\" Type=\"${REL}/numbering\" Target=\"numbering.xml\"/></Relationships>`));\n }\n }\n const settings = this.tocs && this.pkg.byType('/settings');\n const listed = settings && this.pkg.text(settings.target);\n if (settings && listed && !/<w:updateFields\\b/.test(listed)) {\n const at = listed.search(/<(?:w:hdrShapeDefaults|w:footnotePr|w:endnotePr|w:compat|w:docVars|w:rsids|m:mathPr|w:attachedSchema|w:themeFontLang|w:clrSchemeMapping|w:doNotIncludeSubdocsInStats|w:doNotAutoCompressPictures|w:forceUpgrade|w:captions|w:readModeInkLockDown|w:smartTagType|sl:schemaLibrary|w:shapeDefaults|w:doNotEmbedSmartTags|w:decimalSymbol|w:listSeparator)\\b|<\\/w:settings>/);\n changed.set(settings.target, listed.slice(0, at) + '<w:updateFields w:val=\"true\"/>' + listed.slice(at));\n }\n if (this.styleXml.length) {\n const rel = this.pkg.byType('/styles');\n if (rel) changed.set(rel.target, this.pkg.text(rel.target)!.replace(/<\\/w:styles>\\s*$/, this.styleXml.join('') + '</w:styles>'));\n }\n for (const m of this.media) {\n changed.set(m.name, m.bytes);\n const ext = m.name.split('.').pop()!.toLowerCase();\n const ct = this.pkg.text('[Content_Types].xml') ?? '';\n if (!new RegExp(`<Default\\\\b[^>]*Extension=\"${ext}\"`, 'i').test(ct)) this.types.add(`<Default Extension=\"${ext}\" ContentType=\"${({ jpg: 'image/jpeg', svg: 'image/svg+xml' } as Record<string, string>)[ext] ?? 'image/' + ext}\"/>`);\n }\n if (this.types.size) changed.set('[Content_Types].xml', (this.pkg.text('[Content_Types].xml') ?? '').replace(/<\\/Types>\\s*$/, [...this.types].join('') + '</Types>'));\n if (!changed.size) return null;\n const enc = new TextEncoder();\n const main = this.pkg.files.get(this.pkg.main)!;\n const out: Entry[] = this.pkg.entries.map(e => {\n const v = changed.get(e.name);\n if (v === undefined) return e;\n changed.delete(e.name);\n return entry(e.name, typeof v === 'string' ? enc.encode(v) : v, e);\n });\n for (const [name, v] of changed) out.push(entry(name, typeof v === 'string' ? enc.encode(v) : v, main));\n return zip(out);\n }\n\n private claim(nodes: JSONContent[]) {\n for (const n of nodes) {\n const ref = n.attrs?.ref;\n const o = typeof ref === 'string' ? this.r.refs.get(ref) : undefined;\n if (o && !this.used.has(o) && this.fits(n, o)) {\n this.used.add(o);\n this.claimed.set(n, o);\n }\n if (n.content) this.claim(n.content);\n }\n }\n\n private fits(n: JSONContent, o: Block | Row | Cell): boolean {\n if ('cells' in o) return n.type === 'tableRow';\n if ('col' in o) return (n.type === 'tableCell' || n.type === 'tableHeader') && o.node !== null;\n if (o.kind === 'p') return n.type === 'paragraph' || n.type === 'heading';\n if (o.kind === 'lock') return n.type === 'paragraph';\n if (o.kind === 'toc') return n.type === 'toc';\n return ({ pb: 'pageBreak', hr: 'horizontalRule', tbl: 'table' } as Record<string, string>)[o.kind] === n.type;\n }\n\n private carryOver(list: Block[], end: (x: string) => void) {\n let pending = '';\n for (const b of list) {\n if (this.used.has(b)) {\n if (pending) this.carry.set(b, pending);\n pending = '';\n } else {\n if (b.lead.trim()) pending += b.lead;\n const pPr = b.el.name === 'w:p' && kid(b.el, 'w:pPr');\n if (pPr && kid(pPr, 'w:sectPr')) pending += `<w:p>${this.s.slice(pPr.start, pPr.end)}</w:p>`;\n }\n for (const row of b.rows) for (const c of row.cells) this.carryOver(c.blocks, x => this.left.set(c, x));\n }\n if (pending) end(pending);\n }\n\n private container(outs: Out[], list: Block[], fallback: Block | null): string {\n const pairs = outs.map(o => ({ o, b: (this.claimed.get(o.node) ?? null) as Block | null }));\n const lists = new Map<number, { o: Out; b: Block | null }[]>();\n for (const p of pairs) if (p.o.list) lists.get(p.o.list.group)?.push(p) ?? lists.set(p.o.list.group, [p]);\n for (const [group, mine] of lists) this.decide(group, mine);\n let xml = '';\n this.last = null;\n pairs.forEach(({ o, b }, i) => {\n const near = (test: (b: Block) => boolean): Block | null => {\n for (let d = 1; d < pairs.length; d++) {\n const x = pairs[i - d]?.b;\n if (x && test(x)) return x;\n const y = pairs[i + d]?.b;\n if (y && test(y)) return y;\n }\n for (const x of list) if (test(x)) return x;\n return fallback && test(fallback) ? fallback : null;\n };\n const prefix = b ? (this.carry.get(b) ?? '') + b.lead : '';\n xml += prefix + this.emit(o, b, near, fallback);\n this.last = o.kind;\n });\n return xml;\n }\n\n private emit(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null, fallback: Block | null): string {\n const s = this.s;\n if (b && b.kind === 'lock') return s.slice(b.start, b.end);\n if (o.kind === 'p') return this.para(o, b, near, fallback);\n if (o.kind === 'pb') return b ? s.slice(b.start, b.end) : '<w:p><w:r><w:br w:type=\"page\"/></w:r></w:p>';\n if (o.kind === 'hr') return b ? s.slice(b.start, b.end) : '<w:p><w:pPr><w:pBdr><w:bottom w:val=\"single\" w:sz=\"6\" w:space=\"1\" w:color=\"auto\"/></w:pBdr></w:pPr></w:p>';\n if (o.kind === 'tbl') return this.table(o, b, near);\n if (o.kind === 'toc') return b && sig(o.node) === sig(b.node) ? s.slice(b.start, b.end) : this.toc(o.node);\n return this.code(o);\n }\n\n private noteId(): number {\n const rel = this.pkg.byType('/footnotes');\n const xml = rel ? this.pkg.text(rel.target) ?? '' : '';\n this.lastNote ??= Math.max(0, ...[...xml.matchAll(/<w:footnote\\b[^>]*\\bw:id=\"(-?\\d+)\"/g)].map(m => +m[1]));\n return ++this.lastNote;\n }\n\n private footnotes(doc: JSONContent, changed: Map<string, string | Uint8Array>) {\n const notes: { id: string; text: string }[] = [];\n const walk = (n: JSONContent) => {\n if (n.type === 'footnote' && n.attrs?.id) notes.push({ id: String(n.attrs.id), text: String(n.attrs.text ?? '') });\n n.content?.forEach(walk);\n };\n walk(doc);\n const rel = this.pkg.byType('/footnotes');\n const old = rel ? this.pkg.text(rel.target) : null;\n if (!notes.length) return;\n const path = rel ? rel.target : 'word/footnotes.xml';\n let xml = old ?? `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<w:footnotes xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:r=\"${REL}\"><w:footnote w:type=\"separator\" w:id=\"-1\"><w:p><w:pPr><w:spacing w:after=\"0\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:r><w:separator/></w:r></w:p></w:footnote><w:footnote w:type=\"continuationSeparator\" w:id=\"0\"><w:p><w:pPr><w:spacing w:after=\"0\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:r><w:continuationSeparator/></w:r></w:p></w:footnote></w:footnotes>`;\n const fresh = (id: string, words: string) => `<w:footnote w:id=\"${id}\"><w:p><w:pPr><w:spacing w:after=\"0\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:r><w:rPr><w:vertAlign w:val=\"superscript\"/></w:rPr><w:footnoteRef/></w:r><w:r><w:rPr><w:sz w:val=\"20\"/></w:rPr><w:t xml:space=\"preserve\"> ${escape(words)}</w:t></w:r></w:p></w:footnote>`;\n for (const n of notes) {\n const found = new RegExp(`<w:footnote\\\\b[^>]*\\\\bw:id=\"${n.id}\"[^>]*>([\\\\s\\\\S]*?)</w:footnote>`).exec(xml);\n if (found && noteText(found[1]) === n.text) continue;\n xml = found ? xml.replace(found[0], fresh(n.id, n.text)) : xml.replace(/<\\/w:footnotes>\\s*$/, fresh(n.id, n.text) + '</w:footnotes>');\n }\n if (xml === old) return;\n changed.set(path, xml);\n if (rel) return;\n this.rels.push(`<Relationship Id=\"${this.relId()}\" Type=\"${REL}/footnotes\" Target=\"footnotes.xml\"/>`);\n this.types.add(`<Override PartName=\"/word/footnotes.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\"/>`);\n }\n\n private marginal(text: string, setup: Setup | undefined, changed: Map<string, string | Uint8Array>): string {\n if (!setup || (!setup.page && setup.header === undefined && setup.footer === undefined && setup.numbers === undefined)) return text;\n const end = text.lastIndexOf('</w:body>');\n const opens = (i: number) => /^<w:sectPr[\\s>/]/.test(text.slice(i, i + 11));\n let start = -1;\n let close = text.lastIndexOf('</w:sectPr>', end);\n if (close >= 0 && !text.slice(close + 11, end).trim()) {\n let depth = 1;\n let i = close;\n while (depth > 0 && i > 0) {\n let o = text.lastIndexOf('<w:sectPr', i - 1);\n while (o >= 0 && !opens(o)) o = text.lastIndexOf('<w:sectPr', o - 1);\n const c = text.lastIndexOf('</w:sectPr>', i - 1);\n if (c > o) { depth++; i = c; } else if (o < 0) break; else { if (text[text.indexOf('>', o) - 1] !== '/') depth--; i = o; }\n }\n start = i;\n close += 11;\n } else {\n start = close = end;\n }\n let sec = start === end ? '<w:sectPr></w:sectPr>' : text.slice(start, close);\n if (sec.endsWith('/>') && !sec.includes('</w:sectPr>')) sec = sec.slice(0, -2) + '></w:sectPr>';\n const after = ['w:pgMar', 'w:paperSrc', 'w:pgBorders', 'w:lnNumType', 'w:pgNumType', 'w:cols', 'w:formProt', 'w:vAlign', 'w:noEndnote', 'w:titlePg', 'w:textDirection', 'w:bidi', 'w:rtlGutter', 'w:docGrid', 'w:printerSettings', 'w:sectPrChange'];\n const put = (name: string, xml: string, before: string[]) => {\n const re = new RegExp(`<${name}\\\\b[^>]*?(?:/>|>[\\\\s\\\\S]*?</${name}>)`);\n if (re.test(sec)) { sec = sec.replace(re, xml); return; }\n const at = before.map(b => sec.search(new RegExp(`<${b}[\\\\s>/]`))).filter(i => i >= 0);\n const i = at.length ? Math.min(...at) : sec.lastIndexOf('</w:sectPr>');\n sec = sec.slice(0, i) + xml + sec.slice(i);\n };\n const tw = (px: number) => Math.round(px * 15);\n if (setup.page) {\n const { width, height, margins: [top, right, bottom, left] } = setup.page;\n put('w:pgSz', `<w:pgSz w:w=\"${tw(width)}\" w:h=\"${tw(height)}\"${width > height ? ' w:orient=\"landscape\"' : ''}/>`, after);\n const was = /<w:pgMar\\b[^>]*\\/>/.exec(sec)?.[0] ?? '';\n const keep = attrs(was.replace(/^<w:pgMar|\\/>$/g, '')).filter(([k]) => !['w:top', 'w:right', 'w:bottom', 'w:left'].includes(k));\n if (!keep.some(([k]) => k === 'w:header')) keep.push(['w:header', '708'], ['w:footer', '708'], ['w:gutter', '0']);\n put('w:pgMar', `<w:pgMar w:top=\"${tw(top)}\" w:right=\"${tw(right)}\" w:bottom=\"${tw(bottom)}\" w:left=\"${tw(left)}\" ${keep.map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>`, after.slice(1));\n }\n const part = (kind: 'header' | 'footer', body: string) => {\n sec = sec.replace(new RegExp(`<w:${kind}Reference\\\\b[^>]*\\\\bw:type=\"default\"[^>]*/>`), '');\n if (!body) return;\n let n = 1;\n while (this.pkg.files.has(`word/${kind}${n}.xml`) || changed.has(`word/${kind}${n}.xml`)) n++;\n const id = this.relId();\n const tag = kind === 'header' ? 'w:hdr' : 'w:ftr';\n changed.set(`word/${kind}${n}.xml`, `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<${tag} xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:r=\"${REL}\">${body}</${tag}>`);\n this.rels.push(`<Relationship Id=\"${id}\" Type=\"${REL}/${kind}\" Target=\"${kind}${n}.xml\"/>`);\n this.types.add(`<Override PartName=\"/word/${kind}${n}.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.${kind}+xml\"/>`);\n const open = sec.indexOf('>') + 1;\n sec = sec.slice(0, open) + `<w:${kind}Reference w:type=\"default\" r:id=\"${id}\"/>` + sec.slice(open);\n };\n const line = (words: string, page: boolean) => {\n const field = '<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r><w:r><w:instrText xml:space=\"preserve\"> PAGE </w:instrText></w:r><w:r><w:fldChar w:fldCharType=\"separate\"/></w:r><w:r><w:t>1</w:t></w:r><w:r><w:fldChar w:fldCharType=\"end\"/></w:r>';\n const run = words ? `<w:r><w:t xml:space=\"preserve\">${escape(words)}</w:t></w:r>` : '';\n if (!words && !page) return '';\n return `<w:p><w:pPr>${page && words ? `<w:tabs><w:tab w:val=\"right\" w:pos=\"${this.textWidth()}\"/></w:tabs>` : page ? '<w:jc w:val=\"right\"/>' : ''}</w:pPr>${run}${page && words ? '<w:r><w:tab/></w:r>' : ''}${page ? field : ''}</w:p>`;\n };\n if (setup.header !== undefined) part('header', line(setup.header, false));\n if (setup.footer !== undefined || setup.numbers !== undefined) part('footer', line(setup.footer ?? '', !!setup.numbers));\n return text.slice(0, start) + sec + text.slice(close);\n }\n\n private toc(node: JSONContent): string {\n this.tocs = true;\n const styles = this.pkg.styles;\n const sect = this.body.sect;\n const twips = (el: ReturnType<typeof kid>, name: string, fallback: number) => Number((el && attr(this.s, el, name)) ?? fallback);\n const size = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n const width = twips(size, 'w:w', 12240) - twips(mar, 'w:left', 1440) - twips(mar, 'w:right', 1440);\n const list = JSON.parse(String(node.attrs?.entries ?? '[]')) as [number, string][];\n const begin = '<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r><w:r><w:instrText xml:space=\"preserve\"> TOC \\\\o \"1-3\" \\\\h \\\\z \\\\u </w:instrText></w:r><w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>';\n const end = '<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>';\n const style = (test: RegExp, fallback: string) => escape(styles.find(name => test.test(name.trim())) ?? fallback);\n const title = node.attrs?.title ? `<w:p><w:pPr><w:pStyle w:val=\"${style(/^toc heading$/i, 'TOCHeading')}\"/></w:pPr><w:r><w:t xml:space=\"preserve\">${escape(String(node.attrs.title))}</w:t></w:r></w:p>` : '';\n const rows = list.length\n ? list.map(([level, text], i) => `<w:p><w:pPr><w:pStyle w:val=\"${style(new RegExp(`^toc ${level}$`, 'i'), `TOC${level}`)}\"/><w:tabs><w:tab w:val=\"right\" w:leader=\"dot\" w:pos=\"${width}\"/></w:tabs></w:pPr>${i ? '' : begin}<w:r><w:t xml:space=\"preserve\">${escape(text)}</w:t></w:r>${i === list.length - 1 ? end : ''}</w:p>`).join('')\n : `<w:p>${begin}<w:r><w:t>No table of contents entries found.</w:t></w:r>${end}</w:p>`;\n return `<w:sdt><w:sdtPr><w:docPartObj><w:docPartGallery w:val=\"Table of Contents\"/><w:docPartUnique/></w:docPartObj></w:sdtPr><w:sdtContent>${title}${rows}</w:sdtContent></w:sdt>`;\n }\n\n private decide(group: number, mine: { o: Out; b: Block | null }[]) {\n const top = mine.find(p => p.o.list!.depth === 0) ?? mine[0];\n const type = top.o.list!.type;\n const hit = mine.find(p => p.b?.list && p.b.ctx?.type === p.o.list!.type && p.o.list!.depth === 0 && this.kindOf(p.b.list.num, p.b.list.lvl) === type)\n ?? mine.find(p => p.b?.list && p.b.ctx?.type === p.o.list!.type);\n if (hit) this.groupNum.set(group, { num: hit.b!.list!.num, base: Math.max(0, hit.b!.list!.lvl - hit.o.list!.depth) });\n else this.groupNum.set(group, { num: this.newNum(type, top.o.list!.start), base: 0 });\n }\n\n private kindOf(num: number, lvl: number): string | null {\n return this.kinds.get(num) ?? this.pkg.nums.kind(num, lvl);\n }\n\n private newNum(type: string, start: number): number {\n let abs = -1;\n for (const b of this.r.refs.values()) if ('kind' in b && b.list && b.list.lvl === 0 && b.list.type === type) {\n abs = this.pkg.nums.nums.get(b.list.num)?.abs ?? -1;\n break;\n }\n if (abs === -1) for (const [id, lvls] of this.pkg.nums.abs) if ((lvls.get(0)?.fmt === 'bullet') === (type === 'bulletList') && lvls.get(0)?.fmt !== 'none') {\n abs = id;\n break;\n }\n if (abs === -1) {\n abs = this.nextAbs++;\n const fmts = type === 'bulletList' ? ['bullet'] : ['decimal', 'lowerLetter', 'lowerRoman'];\n const lvls = Array.from({ length: 9 }, (_, l) => {\n const fmt = fmts[l % fmts.length];\n const text = fmt === 'bullet' ? ['•', '◦', '▪'][l % 3] : `%${l + 1}.`;\n return `<w:lvl w:ilvl=\"${l}\"><w:start w:val=\"1\"/><w:numFmt w:val=\"${fmt}\"/><w:lvlText w:val=\"${text}\"/><w:lvlJc w:val=\"left\"/><w:pPr><w:ind w:left=\"${720 * (l + 1)}\" w:hanging=\"360\"/></w:pPr></w:lvl>`;\n }).join('');\n this.numbering.abs.push(`<w:abstractNum w:abstractNumId=\"${abs}\"><w:multiLevelType w:val=\"hybridMultilevel\"/>${lvls}</w:abstractNum>`);\n }\n const num = this.nextNum++;\n this.kinds.set(num, type);\n this.numbering.nums.push(`<w:num w:numId=\"${num}\"><w:abstractNumId w:val=\"${abs}\"/>${type === 'orderedList' ? `<w:lvlOverride w:ilvl=\"0\"><w:startOverride w:val=\"${start}\"/></w:lvlOverride>` : ''}</w:num>`);\n return num;\n }\n\n private listPr(o: Out, b: Block | null): { num: number; lvl: number } | null {\n if (!o.list) return null;\n const g = this.groupNum.get(o.list.group)!;\n if (b?.list && b.ctx && b.ctx.type === o.list.type && b.ctx.depth === o.list.depth && (o.list.depth > 0 || b.list.num === g.num)) return b.list;\n const lvl = Math.min(8, g.base + o.list.depth);\n if (this.kindOf(g.num, lvl) === o.list.type) return { num: g.num, lvl };\n const key = `${o.list.group}:${o.list.type}`;\n if (!this.extra.has(key)) this.extra.set(key, this.newNum(o.list.type, o.list.start));\n return { num: this.extra.get(key)!, lvl };\n }\n\n private kindTest(o: Out): (b: Block) => boolean {\n const level = o.node.type === 'heading' ? Number(o.node.attrs?.level ?? 1) : null;\n if (o.task !== null) return b => b.kind === 'p' && b.task !== null;\n if (level) return b => b.kind === 'p' && b.level === level;\n if (o.list) return b => b.kind === 'p' && !!b.list && b.ctx?.type === o.list!.type;\n if (o.quote) return b => b.kind === 'p' && b.quote;\n return b => b.kind === 'p' && !b.list && b.task === null && !b.level && !b.quote;\n }\n\n private para(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null, fallback: Block | null): string {\n const pr = this.listPr(o, b);\n const same = b && o.cont === null && o.quote === b.quote && (o.task ?? null) === b.task && (pr ? !!b.list && pr.num === b.list.num && pr.lvl === b.list.lvl : !b.list);\n if (b && same && sig(o.node) === sig(b.node)) return this.s.slice(b.start, b.end);\n const src = b ?? near(this.kindTest(o)) ?? (fallback?.kind === 'p' ? fallback : null);\n return (b ? opened(this.s, b.el) : '<w:p>') + this.pPr(o, b, src, pr) + this.inline(o, b, src, near) + '</w:p>';\n }\n\n private pPr(o: Out, b: Block | null, src: Block | null, pr: { num: number; lvl: number } | null): string {\n const s = this.s;\n const styles = this.pkg.styles;\n const el = src && kid(src.el, 'w:pPr');\n let xml = el ? s.slice(el.start, el.end) : '';\n const set: Record<string, string | null> = {};\n if (!b && xml) {\n const rPr = kid(el!, 'w:rPr');\n xml = rebuild(xml, 'w:pPr', P, { 'w:sectPr': null, 'w:pPrChange': null, 'w:rPr': rPr ? rebuild(s.slice(rPr.start, rPr.end), 'w:rPr', R, { 'w:ins': null, 'w:del': null, 'w:moveFrom': null, 'w:moveTo': null, 'w:rPrChange': null }) || null : null });\n }\n const root = xml ? parse(xml).kids[0] : undefined;\n const get = (name: string) => root && kid(root, name);\n const styleEl = get('w:pStyle');\n const was = { style: styleEl ? attr(xml, styleEl, 'w:val') : null, level: src?.level ?? null, quote: src?.quote ?? false, list: src?.list ?? null };\n let style = was.style;\n const level = o.node.type === 'heading' ? Math.min(6, Math.max(1, Number(o.node.attrs?.level ?? 1))) : null;\n if (level !== was.level) {\n set['w:outlineLvl'] = null;\n if (level) style = this.headingStyle(level);\n else if (styles.heading(style)) style = null;\n }\n if (!level && o.quote !== was.quote) style = o.quote ? this.quoteStyle() : null;\n if (pr) {\n if (!(was.list && was.list.num === pr.num && was.list.lvl === pr.lvl)) set['w:numPr'] = `<w:numPr><w:ilvl w:val=\"${pr.lvl}\"/><w:numId w:val=\"${pr.num}\"/></w:numPr>`;\n if (!was.list) {\n set['w:ind'] = null;\n if (!src) style = styles.find(name => /^list paragraph$/i.test(name));\n }\n } else if (was.list || get('w:numPr')) {\n set['w:numPr'] = null;\n if (styles.numPr(style)) style = null;\n }\n if (style !== was.style) set['w:pStyle'] = style ? `<w:pStyle w:val=\"${escape(style)}\"/>` : null;\n const jcEl = 'w:jc' in set ? undefined : get('w:jc');\n const direct = jcEl ? attr(xml, jcEl, 'w:val') : null;\n const want = value('align', o.node.attrs?.align) as string | null;\n if (align(direct ?? styles.jc(style)) !== want) {\n set['w:jc'] = align(styles.jc(style)) === want ? null : `<w:jc w:val=\"${({ center: 'center', right: 'right', justify: 'both' } as Record<string, string>)[want ?? ''] ?? 'left'}\"/>`;\n }\n const spEl = get('w:spacing');\n const spacing = spEl ? attrs(xml.slice(spEl.start, spEl.open)) : [];\n const had = (name: string) => spacing.find(([k]) => k === name)?.[1] ?? null;\n const line = value('line', o.node.attrs?.line) as number | null;\n const after = value('after', o.node.attrs?.after) as number | null;\n const auto = !had('w:lineRule') || had('w:lineRule') === 'auto';\n const drift = (had('w:line') && auto ? Math.round(+had('w:line')! / 2.4) / 100 : null) !== line || (had('w:after') ? +had('w:after')! / 20 : null) !== after;\n if ((b || line !== null || after !== null) && drift) {\n const kept = spacing.filter(([k]) => k !== 'w:line' && k !== 'w:lineRule' && k !== 'w:after' && !(k === 'w:afterAutospacing' && after !== null));\n if (line !== null) kept.push(['w:line', String(Math.round(line * 240))], ['w:lineRule', 'auto']);\n else if (had('w:line') && !auto) kept.push(['w:line', had('w:line')!], ['w:lineRule', had('w:lineRule')!]);\n if (after !== null) kept.push(['w:after', String(Math.round(after * 20))]);\n set['w:spacing'] = kept.length ? `<w:spacing ${kept.map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : null;\n }\n if (!pr) {\n const indEl = 'w:ind' in set ? undefined : get('w:ind');\n const list = indEl ? attrs(xml.slice(indEl.start, indEl.open)).filter(([k]) => k !== 'w:left' && k !== 'w:start') : [];\n const left = indEl ? attr(xml, indEl, 'w:left') ?? attr(xml, indEl, 'w:start') : null;\n const target = o.cont !== null ? this.contLeft(o) : 720 * (Number(o.node.attrs?.indent ?? 0) || 0);\n const now = left !== null ? +left : styles.left(style);\n if (o.cont !== null ? now !== target : Math.max(0, Math.round(now / 720)) !== Math.round(target / 720)) {\n if (target !== styles.left(style)) list.unshift(['w:left', String(target)]);\n set['w:ind'] = list.length ? `<w:ind ${list.map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : null;\n }\n }\n return Object.keys(set).length ? rebuild(xml, 'w:pPr', P, set) : xml;\n }\n\n private contLeft(o: Out): number {\n const g = this.groupNum.get(o.cont!.group);\n const left = g ? this.pkg.nums.level(g.num, g.base + o.cont!.depth)?.left : null;\n return left ?? 720 * (o.cont!.depth + 1);\n }\n\n private headingStyle(level: number): string {\n const found = this.pkg.styles.headingId(level);\n if (found) return found;\n const id = this.pkg.styles.byId.has(`Heading${level}`) ? `Heading${level}W` : `Heading${level}`;\n if (!this.styleXml.some(x => x.includes(`w:styleId=\"${id}\"`))) {\n const base = this.pkg.styles.paragraph;\n const size = [32, 28, 26, 24, 22, 22][level - 1];\n this.styleXml.push(`<w:style w:type=\"paragraph\" w:styleId=\"${id}\"><w:name w:val=\"heading ${level}\"/>${base ? `<w:basedOn w:val=\"${escape(base)}\"/><w:next w:val=\"${escape(base)}\"/>` : ''}<w:uiPriority w:val=\"9\"/><w:qFormat/><w:pPr><w:keepNext/><w:keepLines/><w:spacing w:before=\"240\" w:after=\"80\"/><w:outlineLvl w:val=\"${level - 1}\"/></w:pPr><w:rPr><w:b/><w:bCs/><w:sz w:val=\"${size}\"/><w:szCs w:val=\"${size}\"/></w:rPr></w:style>`);\n }\n return id;\n }\n\n private quoteStyle(): string {\n const found = this.pkg.styles.find(name => /^quote$/i.test(name)) ?? this.pkg.styles.find(name => /quote/i.test(name));\n if (found) return found;\n const id = this.pkg.styles.byId.has('Quote') ? 'QuoteW' : 'Quote';\n if (!this.styleXml.some(x => x.includes(`w:styleId=\"${id}\"`))) {\n const base = this.pkg.styles.paragraph;\n this.styleXml.push(`<w:style w:type=\"paragraph\" w:styleId=\"${id}\"><w:name w:val=\"Quote\"/>${base ? `<w:basedOn w:val=\"${escape(base)}\"/><w:next w:val=\"${escape(base)}\"/>` : ''}<w:uiPriority w:val=\"29\"/><w:qFormat/><w:pPr><w:spacing w:before=\"200\" w:after=\"160\"/><w:ind w:left=\"864\" w:right=\"864\"/></w:pPr><w:rPr><w:i/><w:iCs/><w:color w:val=\"404040\"/></w:rPr></w:style>`);\n }\n return id;\n }\n\n private markRun(b: Block): { run: Run; fmt: Fmt } {\n const pPr = kid(b.el, 'w:pPr');\n const rPr = pPr && kid(pPr, 'w:rPr');\n if (!rPr) return { run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, fmt: plain };\n const xml = rebuild(this.s.slice(rPr.start, rPr.end), 'w:rPr', R, { 'w:ins': null, 'w:del': null, 'w:moveFrom': null, 'w:moveTo': null, 'w:rPrChange': null });\n const fmt = this.r.fmt(rPr);\n return { run: { open: '<w:r>', rPr: xml, fmt, el: null, parent: null }, fmt };\n }\n\n private inline(o: Out, b: Block | null, src: Block | null, near: (test: (b: Block) => boolean) => Block | null): string {\n const units: Unit[] = [];\n const counts = new Map<Run, number>();\n for (const p of b ? b.pieces : []) {\n let n = p.run ? counts.get(p.run) ?? 0 : 0;\n const fmt = fmtAt(p);\n const base = p.span ? fmtAt({ ...p, span: null }) : fmt;\n if (p.img) units.push({ ch: '\\uFFFC', raw: p.raw, run: p.run, ctx: p.ctx, span: null, idx: n++, fmt, base, img: p.img });\n else if (p.text === null) units.push({ ch: null, raw: p.raw, run: p.run, ctx: p.ctx, span: null, idx: n++, fmt, base, box: p.box });\n else if (p.raw !== null) units.push({ ch: p.text, raw: p.raw, run: p.run, ctx: p.ctx, span: p.span, idx: n++, fmt, base, math: p.math, note: p.note });\n else for (const ch of p.text) units.push({ ch, raw: null, run: p.run, ctx: p.ctx, span: p.span, idx: n++, fmt, base });\n if (p.run) counts.set(p.run, n);\n }\n const A = units.filter(u => u.ch !== null);\n const B: { ch: string; fmt: Fmt; key: string; img?: Record<string, unknown>; math?: string; note?: Record<string, unknown> }[] = [];\n let lastFmt = plain;\n for (const n of o.node.content ?? []) {\n if (n.type === 'text') {\n const f = fmtOf(n.marks as never);\n const k = keyOf(f);\n lastFmt = f;\n for (const ch of n.text ?? '') B.push({ ch: ch === '\\r' ? '\\n' : ch, fmt: f, key: k });\n } else if (n.type === 'hardBreak') B.push({ ch: '\\n', fmt: lastFmt, key: keyOf(lastFmt) });\n else if (n.type === 'image') B.push({ ch: '\\uFFFC', fmt: lastFmt, key: keyOf(lastFmt), img: n.attrs ?? {} });\n else if (n.type === 'math') B.push({ ch: '\\uE000', fmt: lastFmt, key: keyOf(lastFmt), math: String(n.attrs?.latex ?? '') });\n else if (n.type === 'footnote') B.push({ ch: '\\uE001', fmt: lastFmt, key: keyOf(lastFmt), note: (n.attrs ??= {}) });\n }\n const boxes = units.filter(u => u.box);\n let box: string | null = null;\n if (o.task !== null && !boxes.some(u => !u.run)) {\n const tpl = near(x => x.task !== null) ?? [...this.r.refs.values()].find((x): x is Block => 'kind' in x && x.task !== null) ?? null;\n const sdt = tpl?.pieces.find(p => p.box && !p.run)?.raw;\n box = checked(sdt ?? '<w:sdt><w:sdtPr><w14:checkbox xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\"><w14:checked w14:val=\"0\"/><w14:checkedState w14:val=\"2612\" w14:font=\"MS Gothic\"/><w14:uncheckedState w14:val=\"2610\" w14:font=\"MS Gothic\"/></w14:checkbox></w:sdtPr><w:sdtContent><w:r><w:rPr><w:rFonts w:ascii=\"MS Gothic\" w:eastAsia=\"MS Gothic\" w:hAnsi=\"MS Gothic\" w:hint=\"eastAsia\"/></w:rPr><w:t>☐</w:t></w:r></w:sdtContent></w:sdt>', o.task);\n B.unshift({ ch: ' ', fmt: B[0]?.fmt ?? plain, key: B[0]?.key ?? keyOf(plain) });\n }\n const map = diff(A.map(u => u.ch!), B.map(x => x.ch));\n const back = new Int32Array(A.length).fill(-1);\n map.forEach((i, j) => { if (i >= 0) back[i] = j; });\n const intact = new Set<Span>();\n const spans = new Map<Span, number[]>();\n A.forEach((u, i) => { if (u.span) spans.get(u.span)?.push(i) ?? spans.set(u.span, [i]); });\n for (const [sp, idx] of spans) {\n const j0 = back[idx[0]];\n if (idx.every((i, k) => back[i] === j0 + k && j0 >= 0 && B[back[i]].key === keyOf(A[i].fmt))) intact.add(sp);\n }\n const slot = new Int32Array(A.length + 1);\n for (let k = 1; k <= A.length; k++) slot[k] = back[k - 1] >= 0 ? back[k - 1] + 1 : slot[k - 1];\n const at: Unit[][] = Array.from({ length: B.length + 1 }, () => []);\n let chars = 0;\n for (const u of units) {\n if (u.ch !== null) chars++;\n else if (!u.box || o.task !== null) at[slot[chars]].push(u);\n }\n const paraBase = b ? this.markRun(b) : this.firstRun(src);\n const out: Glyph[] = [];\n if (box) out.push({ ch: null, raw: box, run: null, ctx: [], u: null, fmt: plain });\n this.wraps.clear();\n for (const u of units) for (const w of u.ctx) if (w.link && !this.wraps.has(w.link)) this.wraps.set(w.link, w);\n const lastChar = () => { for (let k = out.length - 1; k >= 0; k--) if (out[k].ch !== null) return out[k]; return null; };\n const next = new Int32Array(B.length + 1).fill(-1);\n for (let k = B.length - 1; k >= 0; k--) next[k] = map[k] >= 0 ? map[k] : next[k + 1];\n for (let j = 0; j <= B.length; j++) {\n for (const u of at[j]) out.push({ ch: null, raw: u.box && !u.run && b && b.task !== o.task ? checked(u.raw!, !!o.task) : u.raw, run: u.run, ctx: u.ctx, u, fmt: u.fmt });\n if (j === B.length) break;\n const i = map[j];\n const want = B[j];\n if (want.img) {\n const u = i >= 0 ? A[i] : null;\n if (u?.img) {\n const kept = picture(u.img) === picture(want.img);\n out.push({ ch: u.ch, raw: kept ? u.raw : this.patch(u.raw!, u.img, want.img), run: u.run, ctx: u.ctx, u: kept ? u : null, fmt: u.fmt });\n } else out.push({ ch: want.ch, raw: this.drawing(want.img), run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, ctx: [], u: null, fmt: plain });\n continue;\n }\n if (want.math !== undefined) {\n const u = i >= 0 ? A[i] : null;\n out.push(u?.math === want.math ? { ch: u.ch, raw: u.raw, run: null, ctx: u.ctx, u, fmt: u.fmt } : { ch: want.ch, raw: omml(want.math), run: null, ctx: u?.ctx ?? [], u: null, fmt: plain });\n continue;\n }\n if (want.note) {\n const u = i >= 0 ? A[i] : null;\n if (u?.note && (u.note.id === want.note.id || !want.note.id)) {\n want.note.id = u.note.id;\n out.push({ ch: u.ch, raw: u.raw, run: u.run, ctx: u.ctx, u, fmt: u.fmt });\n }\n else {\n want.note.id = typeof want.note.id === 'string' && want.note.id ? want.note.id : String(this.noteId());\n out.push({ ch: want.ch, raw: `<w:footnoteReference w:id=\"${want.note.id}\"/>`, run: { open: '<w:r>', rPr: '<w:rPr><w:vertAlign w:val=\"superscript\"/></w:rPr>', fmt: plain, el: null, parent: null }, ctx: [], u: null, fmt: plain });\n }\n continue;\n }\n if (i >= 0) {\n const u = A[i];\n if (u.span && intact.has(u.span)) {\n if (i === 0 || A[i - 1].span !== u.span) out.push({ ch: null, raw: null, run: null, ctx: u.ctx, u: null, fmt: u.fmt, xml: u.span.xml });\n continue;\n }\n const from = u.span ? u.base : u.fmt;\n const keep = u.ch === '\\n' || keyOf(from) === want.key;\n const fmt = keep ? from : want.fmt;\n const run = keep && u.run ? u.run : this.derive(u.run ?? paraBase.run, from, want.fmt);\n out.push({ ch: u.ch, raw: u.raw, run, ctx: this.revised(this.linked(u.ctx, fmt.link, lastChar()), fmt.rev), u: keep && u.run ? u : null, fmt });\n } else {\n const left = lastChar();\n const right = next[j + 1] >= 0 ? A[next[j + 1]] : null;\n const base = left ? { run: left.run!, fmt: left.fmt } : right ? { run: right.run ?? paraBase.run, fmt: right.span ? right.base : right.fmt } : paraBase;\n const run = keyOf(base.fmt) === want.key ? base.run : this.derive(base.run, base.fmt, want.fmt);\n const shared: Wrap[] = [];\n if (left && right) for (let k = 0; k < left.ctx.length && left.ctx[k] === right.ctx[k]; k++) if (!left.ctx[k].link) shared.push(left.ctx[k]);\n out.push({ ch: want.ch, raw: null, run, ctx: this.revised(this.linked(shared, want.fmt.link, left), want.fmt.rev), u: null, fmt: want.fmt });\n }\n }\n let xml = '';\n let stack: Wrap[] = [];\n let cur: { run: Run; glyphs: Glyph[] } | null = null;\n const flush = () => {\n if (cur) xml += this.runXml(cur.run, cur.glyphs, counts);\n cur = null;\n };\n const sync = (ctx: Wrap[]) => {\n let k = 0;\n while (k < stack.length && k < ctx.length && stack[k] === ctx[k]) k++;\n if (k === stack.length && k === ctx.length) return;\n flush();\n for (let x = stack.length - 1; x >= k; x--) xml += stack[x].close;\n for (let x = k; x < ctx.length; x++) xml += ctx[x].open;\n stack = ctx;\n };\n for (const g of out) {\n sync(g.ctx);\n if (g.xml || !g.run) {\n flush();\n xml += g.xml ?? g.raw ?? '';\n continue;\n }\n if (!cur || cur.run !== g.run) {\n flush();\n cur = { run: g.run, glyphs: [] };\n }\n cur.glyphs.push(g);\n }\n flush();\n sync([]);\n return xml;\n }\n\n private firstRun(src: Block | null): { run: Run; fmt: Fmt } {\n const p = src?.pieces.find(x => x.text !== null && x.run && !x.span);\n if (p) return { run: { ...p.run!, open: '<w:r>', el: null }, fmt: p.run!.fmt };\n return src ? this.markRun(src) : { run: { open: '<w:r>', rPr: '', fmt: plain, el: null, parent: null }, fmt: plain };\n }\n\n private linked(ctx: Wrap[], link: string | null, left: Glyph | null): Wrap[] {\n let cur: string | null = null;\n for (const w of ctx) if (w.link) cur = w.link;\n if (cur === link) return ctx;\n const out = ctx.filter(w => !w.link);\n if (!link) return out;\n let wrap = left?.ctx.find(w => w.link === link) ?? this.wraps.get(link);\n if (!wrap) {\n const tag = link.startsWith('#') ? `<w:hyperlink w:anchor=\"${escape(link.slice(1))}\" w:history=\"1\">` : `<w:hyperlink r:id=\"${this.link(link)}\" w:history=\"1\">`;\n wrap = { open: tag, close: '</w:hyperlink>', link, ins: false };\n this.wraps.set(link, wrap);\n }\n const at = out.findIndex(w => w.ins);\n return at === -1 ? [...out, wrap] : [...out.slice(0, at), wrap, ...out.slice(at)];\n }\n\n private revised(ctx: Wrap[], rev: string | null): Wrap[] {\n const out = ctx.filter(w => !w.rev || w.rev === rev);\n if (!rev || out.some(w => w.rev === rev)) return out;\n let wrap = this.revs.get(rev);\n if (!wrap) {\n const [kind, , author, date] = JSON.parse(rev) as string[];\n const tag = kind === 'ins' ? 'w:ins' : 'w:del';\n wrap = { open: `<${tag} w:id=\"${this.nextRev++}\" w:author=\"${escape(author || 'Documents')}\" w:date=\"${escape(date || new Date().toISOString().replace(/\\.\\d+Z$/, 'Z'))}\">`, close: `</${tag}>`, link: null, ins: true, rev };\n this.revs.set(rev, wrap);\n }\n return [...out, wrap];\n }\n\n private link(href: string): string {\n for (const r of this.pkg.rels.values()) if (r.external && r.target === href && r.type.endsWith('/hyperlink')) return r.id;\n if (!this.links.has(href)) {\n const id = this.relId();\n this.rels.push(`<Relationship Id=\"${id}\" Type=\"${REL}/hyperlink\" Target=\"${escape(href)}\" TargetMode=\"External\"/>`);\n this.links.set(href, id);\n }\n return this.links.get(href)!;\n }\n\n private relId(): string {\n let n = this.relIds.size + 1;\n while (this.relIds.has(`rId${n}`)) n++;\n this.relIds.add(`rId${n}`);\n return `rId${n}`;\n }\n\n private derive(run: Run, from: Fmt, to: Fmt): Run {\n const cache = ((run as Run & { derived?: Map<string, Run> }).derived ??= new Map());\n const key = keyOf(from) + '>' + keyOf(to);\n if (!cache.has(key)) cache.set(key, { open: run.open, rPr: this.delta(run.rPr, from, to), fmt: to, el: null, parent: null });\n return cache.get(key)!;\n }\n\n private delta(rPr: string, from: Fmt, to: Fmt): string {\n const root = rPr ? parse(rPr).kids[0] : undefined;\n const get = (name: string) => root && kid(root, name);\n const styleEl = get('w:rStyle');\n const style = styleEl ? attr(rPr, styleEl, 'w:val') : null;\n const sf = style ? this.pkg.styles.char(style) : {};\n const set: Record<string, string | null> = {};\n const toggle = (on: boolean, was: boolean, name: string, cs: string, given: boolean | undefined) => {\n if (on === was) return;\n set[name] = on ? `<${name}/>` : given ? `<${name} w:val=\"0\"/>` : null;\n if (!on) set[cs] = null;\n };\n toggle(to.b, from.b, 'w:b', 'w:bCs', sf.b);\n toggle(to.i, from.i, 'w:i', 'w:iCs', sf.i);\n if (to.u !== from.u) set['w:u'] = to.u ? '<w:u w:val=\"single\"/>' : sf.u ? '<w:u w:val=\"none\"/>' : null;\n if (to.s !== from.s) {\n set['w:strike'] = to.s ? '<w:strike/>' : sf.s ? '<w:strike w:val=\"0\"/>' : null;\n if (!to.s) set['w:dstrike'] = null;\n }\n if (to.va !== from.va) set['w:vertAlign'] = to.va ? `<w:vertAlign w:val=\"${to.va === 'sup' ? 'superscript' : 'subscript'}\"/>` : sf.va ? '<w:vertAlign w:val=\"baseline\"/>' : null;\n if (to.color !== from.color) set['w:color'] = to.color ? `<w:color w:val=\"${to.color.slice(1).toUpperCase()}\"/>` : sf.color ? '<w:color w:val=\"auto\"/>' : null;\n if (to.size !== from.size) {\n const hp = to.size ? Math.round(parseFloat(to.size) * 2) : 0;\n set['w:sz'] = hp ? `<w:sz w:val=\"${hp}\"/>` : null;\n set['w:szCs'] = hp ? `<w:szCs w:val=\"${hp}\"/>` : null;\n }\n if (to.hl !== from.hl) {\n const name = to.hl ? Object.keys(highlights).find(k => '#' + highlights[k] === to.hl) : undefined;\n set['w:highlight'] = name ? `<w:highlight w:val=\"${name}\"/>` : null;\n const shd = get('w:shd');\n if (to.hl && !name) set['w:shd'] = `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"${to.hl.slice(1).toUpperCase()}\"/>`;\n else if (shd && color(attr(rPr, shd, 'w:fill'))) set['w:shd'] = null;\n }\n if (to.font !== from.font || to.code !== from.code) {\n const want = to.code ? 'Courier New' : to.font;\n const fonts = get('w:rFonts');\n const kept = fonts ? attrs(rPr.slice(fonts.start, fonts.open)).filter(([k]) => !/^w:(ascii|hAnsi|cs|asciiTheme|hAnsiTheme|cstheme)$/.test(k)) : [];\n if (want) kept.unshift(['w:ascii', want], ['w:hAnsi', want], ['w:cs', want]);\n set['w:rFonts'] = kept.length ? `<w:rFonts ${kept.map(([k, v]) => `${k}=\"${escape(v)}\"`).join(' ')}/>` : null;\n }\n if (to.link && !from.link && !style) {\n const id = this.pkg.styles.find((name, id) => /^hyperlink$/i.test(name) || id === 'Hyperlink', 'character');\n if (id) set['w:rStyle'] = `<w:rStyle w:val=\"${escape(id)}\"/>`;\n } else if (!to.link && from.link && this.pkg.styles.isLink(style)) set['w:rStyle'] = null;\n return Object.keys(set).length ? rebuild(rPr, 'w:rPr', R, set) : rPr;\n }\n\n private runXml(run: Run, glyphs: Glyph[], counts: Map<Run, number>): string {\n if (run.el && glyphs.length === counts.get(run) && glyphs.every((g, n) => g.u && g.u.run === run && g.u.idx === n)) return this.s.slice(run.el.start, run.el.end);\n let body = '';\n let text = '';\n const tag = glyphs[0]?.ctx.some(w => w.rev?.startsWith('[\"del\"')) ? 'w:delText' : 'w:t';\n const flush = () => {\n if (text) body += `<${tag}${/^\\s|\\s$/.test(text) ? ' xml:space=\"preserve\"' : ''}>${escape(text)}</${tag}>`;\n text = '';\n };\n for (const g of glyphs) {\n if (g.ch === null || g.raw !== null || special[g.ch]) {\n flush();\n body += g.raw ?? special[g.ch!];\n } else text += g.ch;\n }\n flush();\n return run.open + run.rPr + body + '</w:r>';\n }\n\n private embed(src: string): { id: string; size: [number, number] | null } {\n if (!this.srcs) {\n this.srcs = new Map();\n for (const b of this.r.refs.values()) if ('pieces' in b) for (const p of b.pieces) if (p.img && p.pic) this.srcs.set(String(p.img.src), p.pic.embed);\n }\n const id = this.srcs.get(src);\n if (id) return { id, size: null };\n const added = this.addMedia(src);\n if (!added) throw new Error('Image could not be read');\n this.srcs.set(src, added.id);\n return added;\n }\n\n private wrapped(raw: string, side: unknown): string {\n const anchor = /<wp:anchor\\b/.test(raw);\n if (!side && !anchor) return raw;\n const ns = (tag: string) => attrs((/<wp:(?:inline|anchor)\\b([^>]*)>/.exec(tag)?.[1] ?? '')).filter(([k]) => k.startsWith('xmlns')).map(([k, v]) => ` ${k}=\"${v}\"`).join('');\n const part = (name: string) => new RegExp(`<${name}\\\\b[^>]*?(?:/>|>[\\\\s\\\\S]*?</${name}>)`).exec(raw)?.[0] ?? '';\n const body = part('wp:extent') + part('wp:effectExtent');\n const rest = part('wp:docPr') + part('wp:cNvGraphicFramePr') + part('a:graphic');\n if (!side) return raw.replace(/<wp:anchor\\b[\\s\\S]*<\\/wp:anchor>/, `<wp:inline distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\"${ns(raw)}>${body}${rest}</wp:inline>`);\n const head = `<wp:anchor distT=\"0\" distB=\"0\" distL=\"114300\" distR=\"114300\" simplePos=\"0\" relativeHeight=\"251658240\" behindDoc=\"0\" locked=\"0\" layoutInCell=\"1\" allowOverlap=\"1\"${ns(raw)}>`\n + `<wp:simplePos x=\"0\" y=\"0\"/><wp:positionH relativeFrom=\"column\"><wp:align>${side === 'right' ? 'right' : 'left'}</wp:align></wp:positionH><wp:positionV relativeFrom=\"paragraph\"><wp:posOffset>0</wp:posOffset></wp:positionV>`;\n return raw.replace(anchor ? /<wp:anchor\\b[\\s\\S]*<\\/wp:anchor>/ : /<wp:inline\\b[\\s\\S]*<\\/wp:inline>/, `${head}${body}<wp:wrapSquare wrapText=\"bothSides\"/>${rest}</wp:anchor>`);\n }\n\n private drawing(img: Record<string, unknown>): string {\n const media = this.embed(String(img.src ?? ''));\n const max = Math.round(this.textWidth() / 15);\n let w = Math.round(Number(img.width)) || 0;\n let h = Math.round(Number(img.height)) || 0;\n const [nw, nh] = media.size ?? [w || 300, h || 200];\n if (!w && !h) [w, h] = nw > max ? [max, Math.round((nh * max) / nw)] : [nw, nh];\n else if (!h) h = Math.round((w * nh) / nw);\n else if (!w) w = Math.round((h * nw) / nh);\n const id = this.docPr++;\n const ext = `cx=\"${Math.round(w * 9525)}\" cy=\"${Math.round(h * 9525)}\"`;\n const xml = `<w:drawing><wp:inline distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\"><wp:extent ${ext}/><wp:effectExtent l=\"0\" t=\"0\" r=\"0\" b=\"0\"/>${meta(`<wp:docPr id=\"${id}\" name=\"Picture ${id}\"/>`, img)}<wp:cNvGraphicFramePr><a:graphicFrameLocks xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" noChangeAspect=\"1\"/></wp:cNvGraphicFramePr><a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:nvPicPr><pic:cNvPr id=\"${id}\" name=\"Picture ${id}\"/><pic:cNvPicPr/></pic:nvPicPr><pic:blipFill><a:blip r:embed=\"${media.id}\"/><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext ${ext}/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing>`;\n return img.wrap ? this.wrapped(xml, img.wrap) : xml;\n }\n\n private patch(raw: string, old: Record<string, unknown>, img: Record<string, unknown>): string {\n let xml = raw;\n const w = Math.round(Number(img.width)) || Number(old.width);\n const h = Math.round(Number(img.height)) || Number(old.height);\n if (w !== old.width || h !== old.height) {\n const ext = `cx=\"${Math.round(w * 9525)}\" cy=\"${Math.round(h * 9525)}\"`;\n xml = xml.replace(/<wp:extent\\b[^>]*\\/>/, `<wp:extent ${ext}/>`).replace(/(<a:xfrm\\b[^>]*>[\\s\\S]*?<a:ext)\\b[^>]*\\/>/, `$1 ${ext}/>`);\n }\n if ((img.alt || null) !== (old.alt || null) || (img.title || null) !== (old.title || null)) xml = xml.replace(/<wp:docPr\\b[^>]*>/, tag => meta(tag, img));\n if (img.src !== old.src) xml = xml.replace(/(<a:blip\\b[^>]*\\br:embed=\")[^\"]*\"/, `$1${this.embed(String(img.src ?? '')).id}\"`);\n if ((img.wrap || null) !== (old.wrap || null)) xml = this.wrapped(xml, img.wrap);\n return xml;\n }\n\n private textWidth(): number {\n const sect = this.body.sect;\n const s = this.s;\n const sz = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n return (sz ? +(attr(s, sz, 'w:w') ?? 12240) : 12240) - (mar ? +(attr(s, mar, 'w:left') ?? 1440) + +(attr(s, mar, 'w:right') ?? 1440) : 2880);\n }\n\n private addMedia(src: string): { id: string; name: string; size: [number, number] | null } | null {\n const m = /^data:([^;,]+)(;base64)?,(.*)$/s.exec(src);\n let img = this.images.get(src);\n if (m) {\n const raw = m[2] ? atob(m[3]) : decodeURIComponent(m[3]);\n const bytes = new Uint8Array(raw.length);\n for (let i = 0; i < raw.length; i++) bytes[i] = raw.charCodeAt(i);\n img = { bytes, mime: m[1] };\n }\n if (!img) return null;\n const ext = ({ 'image/jpeg': 'jpeg', 'image/svg+xml': 'svg' } as Record<string, string>)[img.mime] ?? img.mime.split('/')[1] ?? 'png';\n let n = this.media.length + 1;\n while (this.pkg.files.has(`word/media/w100n-${n}.${ext}`)) n++;\n const name = `w100n-${n}.${ext}`;\n const dir = this.pkg.main.slice(0, this.pkg.main.lastIndexOf('/') + 1);\n this.media.push({ name: `${dir}media/${name}`, bytes: img.bytes });\n const id = this.relId();\n this.rels.push(`<Relationship Id=\"${id}\" Type=\"${REL}/image\" Target=\"media/${name}\"/>`);\n return { id, name, size: dims(img.bytes) };\n }\n\n private code(o: Out): string {\n const style = this.pkg.styles.find(name => /^(source code|html preformatted|code|plain text)$/i.test(name));\n const text = (o.node.content ?? []).map(n => n.text ?? '').join('');\n const pPr = style ? `<w:pPr><w:pStyle w:val=\"${escape(style)}\"/></w:pPr>` : '<w:pPr><w:spacing w:after=\"0\"/></w:pPr>';\n const rPr = style ? '' : '<w:rPr><w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:cs=\"Courier New\"/></w:rPr>';\n return text.split('\\n').map(line => `<w:p>${pPr}${line ? `<w:r>${rPr}<w:t xml:space=\"preserve\">${escape(line).replace(/\\t/g, '</w:t><w:tab/><w:t xml:space=\"preserve\">')}</w:t></w:r>` : ''}</w:p>`).join('');\n }\n\n private table(o: Out, b: Block | null, near: (test: (b: Block) => boolean) => Block | null): string {\n const s = this.s;\n if (b && sig(o.node) === sig(b.node)) return s.slice(b.start, b.end);\n const rows = o.node.content ?? [];\n const layout = grid(rows);\n const cols = Math.max(1, ...layout.map(r => r.reduce((m, sl) => Math.max(m, sl.col + sl.span), 0)));\n let head: string;\n let tail = '';\n if (b) {\n const first = b.rows[0];\n const last = b.rows[b.rows.length - 1];\n head = opened(s, b.el) + s.slice(b.el.open, first ? first.el.start - first.lead.length : b.el.close);\n if (last) tail = s.slice(last.el.end, b.el.close);\n if (b.cols && cols !== b.cols) {\n head = head.replace(/(<w:tblGrid\\b[^>]*>)([\\s\\S]*?)(<\\/w:tblGrid>)/, (_, open: string, inside: string, close: string) => {\n const list: string[] = [...(inside.match(/<w:gridCol\\b[^>]*\\/>/g) ?? [])];\n while (list.length < cols) list.push(list[list.length - 1] ?? '<w:gridCol/>');\n return open + list.slice(0, cols).join('') + close;\n });\n }\n } else {\n const tpl = near(x => x.kind === 'tbl');\n const pr = tpl && kid(tpl.el, 'w:tblPr');\n const style = this.pkg.styles.find(name => /^(table grid|сітка таблиці|сетка таблицы)$/i.test(name), 'table');\n const line = (side: string) => `<w:${side} w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>`;\n const tblPr = pr ? s.slice(pr.start, pr.end) : `<w:tblPr>${style ? `<w:tblStyle w:val=\"${escape(style)}\"/>` : ''}<w:tblW w:w=\"0\" w:type=\"auto\"/>${style ? '' : `<w:tblBorders>${['top', 'left', 'bottom', 'right', 'insideH', 'insideV'].map(line).join('')}</w:tblBorders>`}<w:tblLook w:val=\"04A0\" w:firstRow=\"1\" w:lastRow=\"0\" w:firstColumn=\"1\" w:lastColumn=\"0\" w:noHBand=\"0\" w:noVBand=\"1\"/></w:tblPr>`;\n head = `<w:tbl>${tblPr}<w:tblGrid>${`<w:gridCol w:w=\"${Math.floor(this.textWidth() / cols)}\"/>`.repeat(cols)}</w:tblGrid>`;\n }\n const width = Math.floor(this.textWidth() / cols);\n const sized: number[] = [];\n for (const r of layout) for (const sl of r) {\n const own = sl.cell && value('colwidth', sl.cell.attrs?.colwidth) as number[] | null;\n if (own && own.length === sl.span) own.forEach((w, k) => (sized[sl.col + k] ??= w));\n }\n const known = sized.length === cols && sized.every(Boolean);\n const had = [...head.matchAll(/<w:gridCol\\b[^>]*\\bw:w=\"(\\d+)\"/g)].map(m => Math.floor(+m[1] / 15));\n if (known && had.join() !== sized.join()) {\n const list = sized.map(w => `<w:gridCol w:w=\"${Math.round(w * 15)}\"/>`).join('');\n head = head.replace(/(<w:tblGrid\\b[^>]*>)[\\s\\S]*?(<\\/w:tblGrid>)/, `$1${list}$2`);\n }\n const own = (col: number, span: number) => known ? sized.slice(col, col + span) : null;\n const borders = value('borders', o.node.attrs?.borders);\n if (borders !== value('borders', b?.node.attrs?.borders)) {\n const line = (side: string) => `<w:${side} w:val=\"${borders === 'none' ? 'none' : 'single'}\" w:sz=\"4\" w:space=\"0\" w:color=\"${borders === 'none' ? 'auto' : '94A3B8'}\"/>`;\n const all = `<w:tblBorders>${['top', 'left', 'bottom', 'right', 'insideH', 'insideV'].map(line).join('')}</w:tblBorders>`;\n head = /<w:tblBorders\\b/.test(head) ? head.replace(/<w:tblBorders\\b[\\s\\S]*?<\\/w:tblBorders>|<w:tblBorders\\/>/, all)\n : head.replace(/(<w:tblPr\\b[^>]*>(?:(?!<\\/w:tblPr>)[\\s\\S])*?)(<w:shd\\b|<w:tblLayout\\b|<w:tblCellMar\\b|<w:tblLook\\b|<w:tblCaption\\b|<w:tblDescription\\b|<w:tblPrChange\\b|<\\/w:tblPr>)/, `$1${all}$2`);\n }\n let xml = head;\n let above: (Cell | null)[] = [];\n let aboveRow: Row | null = null;\n const cover = new Map<JSONContent, Cell | null>();\n const firstRow = rows.map(r => this.claimed.get(r) as Row | undefined).find(Boolean) ?? null;\n rows.forEach((node, r) => {\n const R = (this.claimed.get(node) as Row | undefined) ?? null;\n const slots = layout[r];\n const shape = (sl: Slot) => (sl.cell ? `${(this.claimed.get(sl.cell) as Cell | undefined)?.ref ?? '-'}@${sl.col}` : `c${sl.col}`);\n const now: (Cell | null)[] = [];\n if (R && sig(node) === sig(R.node) && R.cells.map(c => (c.vm === 'continue' ? `c${c.col}` : `${c.ref}@${c.col}`)).join() === slots.map(shape).join()) {\n xml += R.lead + s.slice(R.el.start, R.el.end);\n for (const c of R.cells) for (let k = c.col; k < c.col + c.span; k++) now[k] = c;\n for (const sl of slots) if (sl.cell && Number(sl.cell.attrs?.rowspan ?? 1) > 1) cover.set(sl.cell, (this.claimed.get(sl.cell) as Cell | undefined) ?? null);\n above = now;\n aboveRow = R;\n return;\n }\n const srcRow = R ?? aboveRow ?? firstRow;\n const header = (node.content ?? []).length > 0 && (node.content ?? []).every(c => c.type === 'tableHeader');\n let rowHead = R ? R.head : srcRow ? srcRow.head.replace(/<w:(ins|del)\\b[^>]*\\/>|<w:trPrChange\\b[\\s\\S]*?<\\/w:trPrChange>/g, '') : '';\n if (!R) {\n if (!header) rowHead = rowHead.replace(/<w:tblHeader\\b[^>]*\\/>/g, '').replace(/<w:trPr><\\/w:trPr>|<w:trPr\\/>/, '');\n else if (!/<w:tblHeader\\b/.test(rowHead)) rowHead = /<w:trPr>/.test(rowHead) ? rowHead.replace('<w:trPr>', '<w:trPr><w:tblHeader/>') : rowHead + '<w:trPr><w:tblHeader/></w:trPr>';\n }\n xml += (R ? R.lead + opened(s, R.el) : '<w:tr>') + rowHead;\n for (const sl of slots) {\n if (!sl.cell) {\n const cont = R?.cells.find(c => c.vm === 'continue' && c.col === sl.col);\n if (cont) xml += cont.lead + s.slice(cont.el.start, cont.el.end);\n else xml += `<w:tc>${this.tcPr(cover.get(sl.from!) ?? above[sl.col] ?? null, sl.span, 'continue', width, true, own(sl.col, sl.span))}<w:p/></w:tc>`;\n now[sl.col] = cover.get(sl.from!) ?? null;\n continue;\n }\n const C = (this.claimed.get(sl.cell) as Cell | undefined) ?? null;\n const vm = Number(sl.cell.attrs?.rowspan ?? 1) > 1 ? 'restart' : null;\n const srcCell = C ?? above[sl.col] ?? (srcRow?.cells.find(c => c.col === sl.col) ?? null);\n if (vm) cover.set(sl.cell, srcCell);\n for (let k = sl.col; k < sl.col + sl.span; k++) now[k] = srcCell;\n if (C && sig(sl.cell) === sig(C.node!) && C.span === sl.span && C.vm === vm) {\n xml += C.lead + s.slice(C.el.start, C.el.end);\n continue;\n }\n const fallback = srcCell?.blocks.find(x => x.kind === 'p') ?? null;\n let inside = this.container(flatten(sl.cell.content ?? []), C ? C.blocks : [], fallback) + (C ? this.left.get(C) ?? '' : '');\n if (!this.last || this.last === 'tbl') inside += '<w:p/>';\n xml += (C ? C.lead + opened(s, C.el) : '<w:tc>') + this.tcPr(srcCell, sl.span, vm, width, !C, own(sl.col, sl.span), value('background', sl.cell.attrs?.background) as string | null) + inside + (C ? C.tail : '') + '</w:tc>';\n }\n const lastCell = R?.cells[R.cells.length - 1];\n xml += (R && lastCell ? s.slice(lastCell.el.end, R.el.close) : '') + '</w:tr>';\n above = now;\n aboveRow = srcRow;\n });\n return xml + tail + '</w:tbl>';\n }\n\n private tcPr(src: Cell | null, span: number, vm: 'restart' | 'continue' | null, width: number, clone = true, own: number[] | null = null, fill?: string | null): string {\n const s = this.s;\n const el = src && kid(src.el, 'w:tcPr');\n const xml = el ? s.slice(el.start, el.end) : '';\n const tcW = el && kid(el, 'w:tcW');\n const sized = own ? Math.round(own.reduce((a, w) => a + w, 0) * 15) : null;\n const resized = sized !== null && !(tcW && attr(s, tcW, 'w:type') === 'dxa' && Math.abs(+(attr(s, tcW, 'w:w') ?? 0) - sized) < 15);\n const was = src?.node ? value('background', src.node.attrs?.background) : null;\n const painted = fill !== undefined && fill !== was;\n if (!clone && src && src.span === span && src.vm === vm && !resized && !painted) return xml;\n const set: Record<string, string | null> = { 'w:gridSpan': span > 1 ? `<w:gridSpan w:val=\"${span}\"/>` : null, 'w:vMerge': vm === 'restart' ? '<w:vMerge w:val=\"restart\"/>' : vm ? '<w:vMerge/>' : null, 'w:hMerge': null };\n if (clone) Object.assign(set, { 'w:cellIns': null, 'w:cellDel': null, 'w:cellMerge': null, 'w:tcPrChange': null });\n if (painted) set['w:shd'] = fill ? `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"${fill.slice(1).toUpperCase()}\"/>` : null;\n if (resized) set['w:tcW'] = `<w:tcW w:w=\"${sized}\" w:type=\"dxa\"/>`;\n else if (!tcW && !src) set['w:tcW'] = `<w:tcW w:w=\"${width * span}\" w:type=\"dxa\"/>`;\n else if (tcW && src && src.span !== span && attr(xml, tcW, 'w:type') === 'dxa') set['w:tcW'] = `<w:tcW w:w=\"${Math.round((+(attr(xml, tcW, 'w:w') ?? 0) * span) / src.span)}\" w:type=\"dxa\"/>`;\n return rebuild(xml, 'w:tcPr', TC, set);\n }\n}\n\nexport async function fetched(src: string): Promise<Img> {\n const res = await fetch(src);\n if (!res.ok) throw new Error(`Image could not be read: ${src}`);\n return { bytes: new Uint8Array(await res.arrayBuffer()), mime: res.headers.get('content-type')?.split(';')[0] || 'image/png' };\n}\n\nexport async function images(doc: JSONContent, load: (src: string) => Promise<Img>): Promise<Map<string, Img>> {\n const out = new Map<string, Img>();\n const walk = async (n: JSONContent) => {\n if (n.type === 'image' && typeof n.attrs?.src === 'string' && !out.has(n.attrs.src)) {\n const src: string = n.attrs.src;\n if (src && !src.startsWith('data:')) out.set(src, await load(src));\n }\n for (const k of n.content ?? []) await walk(k);\n };\n await walk(doc);\n return out;\n}\n","import { Pkg } from './pkg';\nimport { assemble, Reader, type JSONContent } from './read';\nimport { fetched, images, Writer, type Img, type Setup } from './write';\nimport { attr, kid } from './xml';\n\nexport type { JSONContent } from './read';\nexport type { Img, Setup } from './write';\n\nexport type DocxModel = { marginal: { header: string; footer: string; numbers: boolean }; doc: JSONContent; styles: { name: string; id: string; heading: number | null }[]; page: { width: number; height: number; margins: [number, number, number, number] } };\n\nexport async function readDocx(bytes: ArrayBuffer): Promise<DocxModel> {\n const pkg = new Pkg(new Uint8Array(bytes));\n const { list, sect } = new Reader(pkg).body();\n const content = assemble(list);\n const s = pkg.doc;\n const size = sect && kid(sect, 'w:pgSz');\n const mar = sect && kid(sect, 'w:pgMar');\n const px = (el: typeof size, name: string, fallback: number) => Math.round((Math.abs(+((el && attr(s, el, name)) ?? fallback)) / 15) * 100) / 100;\n const words = (kind: string) => {\n const ref = sect?.kids.find(k => k.name === `w:${kind}Reference` && attr(s, k, 'w:type') === 'default');\n const part = ref && pkg.rels.get(attr(s, ref, 'r:id') ?? '');\n const xml = part ? pkg.text(part.target) ?? '' : '';\n return { text: [...xml.matchAll(/<w:t(?:\\s[^>]*)?>([^<]*)<\\/w:t>/g)].map(m => m[1]).join('').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').trim(), page: /\\bPAGE\\b/.test(xml) };\n };\n const head = words('header');\n const foot = words('footer');\n return {\n marginal: { header: head.text, footer: foot.page ? foot.text.replace(/\\s*\\d+$/, '') : foot.text, numbers: foot.page },\n doc: { type: 'doc', content: content.length ? content : [{ type: 'paragraph', attrs: { align: null, indent: 0, ref: null } }] },\n styles: pkg.styles.list(),\n page: { width: px(size, 'w:w', 12240), height: px(size, 'w:h', 15840), margins: [px(mar, 'w:top', 1440), px(mar, 'w:right', 1440), px(mar, 'w:bottom', 1440), px(mar, 'w:left', 1440)] },\n };\n}\n\nexport async function writeDocx(original: ArrayBuffer, doc: JSONContent, load: (src: string) => Promise<Img> = fetched, setup?: Setup): Promise<ArrayBuffer> {\n const pkg = new Pkg(new Uint8Array(original));\n const out = new Writer(pkg, await images(doc, load)).run(doc, setup);\n return out ? out.slice().buffer : original.slice(0);\n}\n"],"mappings":"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","names":["kids","plain","attrs","parse","parse","parse","b","meta","run","grid","picture","n","on","images","listed","words","i","run","size","parse","id","own","R","shape","size","words"]}
|