@gilav21/shadcn-angular-rte 0.2.0 → 0.2.1
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/fesm2022/{gilav21-shadcn-angular-rte-docx-parser-CdxuIlVT.mjs → gilav21-shadcn-angular-rte-docx-parser-DiBPweI4.mjs} +63 -38
- package/fesm2022/gilav21-shadcn-angular-rte-docx-parser-DiBPweI4.mjs.map +1 -0
- package/fesm2022/{gilav21-shadcn-angular-rte-docx-to-editor-html-Cl9eIhkC.mjs → gilav21-shadcn-angular-rte-docx-to-editor-html-BreagmS_.mjs} +43 -33
- package/fesm2022/gilav21-shadcn-angular-rte-docx-to-editor-html-BreagmS_.mjs.map +1 -0
- package/fesm2022/{gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-BFcfCqW4.mjs → gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-BnEAQOuU.mjs} +3492 -1899
- package/fesm2022/gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-BnEAQOuU.mjs.map +1 -0
- package/fesm2022/gilav21-shadcn-angular-rte-markup-safety-qJk8EoPk.mjs +69 -0
- package/fesm2022/gilav21-shadcn-angular-rte-markup-safety-qJk8EoPk.mjs.map +1 -0
- package/fesm2022/{gilav21-shadcn-angular-rte-pdf-readable-DmE-CIxv.mjs → gilav21-shadcn-angular-rte-pdf-readable-JvCpuNQH.mjs} +445 -124
- package/fesm2022/gilav21-shadcn-angular-rte-pdf-readable-JvCpuNQH.mjs.map +1 -0
- package/fesm2022/gilav21-shadcn-angular-rte.mjs +1 -1
- package/package.json +1 -1
- package/styles.css +1 -1
- package/types/gilav21-shadcn-angular-rte.d.ts +359 -113
- package/types/gilav21-shadcn-angular-rte.d.ts.map +1 -1
- package/fesm2022/gilav21-shadcn-angular-rte-docx-parser-CdxuIlVT.mjs.map +0 -1
- package/fesm2022/gilav21-shadcn-angular-rte-docx-to-editor-html-Cl9eIhkC.mjs.map +0 -1
- package/fesm2022/gilav21-shadcn-angular-rte-gilav21-shadcn-angular-rte-BFcfCqW4.mjs.map +0 -1
- package/fesm2022/gilav21-shadcn-angular-rte-pdf-readable-DmE-CIxv.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gilav21-shadcn-angular-rte-pdf-readable-JvCpuNQH.mjs","sources":["../../../packages/rte-package/src/lib/parsers/limits.ts","../../../packages/rte-package/src/lib/parsers/pdf-parser.ts","../../../packages/rte-package/src/lib/parsers/ttf-parser.ts","../../../packages/rte-package/src/lib/parsers/ttf-builder.ts","../../../packages/rte-package/src/lib/parsers/pdf-pixel-perfect.ts","../../../packages/rte-package/src/lib/parsers/pdf-readable/readable-styles.ts","../../../packages/rte-package/src/lib/parsers/pdf-readable/readable-classify.ts","../../../packages/rte-package/src/lib/parsers/pdf-readable/readable-words.ts","../../../packages/rte-package/src/lib/parsers/pdf-readable/readable-tables.ts","../../../packages/rte-package/src/lib/parsers/pdf-readable/readable-blocks.ts","../../../packages/rte-package/src/lib/parsers/pdf-readable/readable-emit.ts","../../../packages/rte-package/src/lib/parsers/pdf-readable/readable-extract.ts","../../../packages/rte-package/src/lib/parsers/pdf-readable/readable-lines.ts","../../../packages/rte-package/src/lib/parsers/pdf-readable/readable-repeats.ts","../../../packages/rte-package/src/lib/parsers/pdf-readable/pdf-readable.ts"],"sourcesContent":["/**\n * Resource limits shared by every document parser in `lib/parsers/`.\n *\n * A document is untrusted input: its header can claim any dimension, count or\n * size, and its object graph can reference itself. Every allocation and loop\n * bound derived from file data is clamped either to what the remaining bytes\n * can encode or to one of the caps below, and every walk over file-defined\n * references tracks what it has visited — so a parse costs time and memory\n * proportional to the file it was given. A structure past a cap is skipped or\n * truncated, exactly as a malformed section already is.\n *\n * Internal: parsers take a trailing `limits` argument defaulting to\n * {@link DEFAULT_PARSER_LIMITS}; tests inject tiny caps. It is not part of the\n * public API and is not re-exported from `ui/index.ts`.\n */\nexport interface ParserLimits {\n /**\n * Largest image (width × height) decoded into pixels. 50 MP holds a 600-dpi\n * scan of an A4/Letter page (≈ 35 MP) or a 300-dpi scan of an A2 sheet\n * (≈ 35 MP); a 600-dpi A3 scan (≈ 70 MP) is over it and is skipped. Past\n * the cap, the decoded rows, PNG and base64 copies of one image head\n * toward gigabytes.\n */\n readonly maxImagePixels: number;\n /**\n * Total bytes all stream decodes in one parse may produce. Each stream is\n * already capped at 64 MB; this bounds a file that references the same\n * stream thousands of times. 1 GiB is about what a 300-page scanned PDF\n * of ~3 MB page images decodes to, so real documents stay whole. Decoding\n * it is a few seconds of work, and it is transient: decoded streams are\n * not retained once a page is rendered.\n */\n readonly maxDecodedBytesTotal: number;\n /** Deepest nesting followed: PDF arrays and form XObjects, PPTX group shapes, DOC art containers. */\n readonly maxNestingDepth: number;\n /** Form XObject draws per page — bounds a form graph that shares sub-forms k times per level. */\n readonly maxFormDrawsPerPage: number;\n /** Most pages a PDF page tree yields. */\n readonly maxPages: number;\n /** Largest single stream read out of an OLE2 (.doc/.xls/.ppt) container. */\n readonly maxOle2StreamBytes: number;\n}\n\nexport const DEFAULT_PARSER_LIMITS: Readonly<ParserLimits> = Object.freeze({\n maxImagePixels: 50_000_000,\n maxDecodedBytesTotal: 1024 * 1024 * 1024,\n maxNestingDepth: 32,\n maxFormDrawsPerPage: 10_000,\n maxPages: 10_000,\n maxOle2StreamBytes: 256 * 1024 * 1024,\n});\n\n/**\n * Marks `node` visited. Returns false when it already was, so a walk over a\n * shared or cyclic reference graph visits each node once.\n */\nexport function visitOnce<T>(seen: Set<T>, node: T): boolean {\n if (seen.has(node)) return false;\n seen.add(node);\n return true;\n}\n\n/**\n * Guards recursive drawing of shared content (form XObjects): a node is\n * skipped when it is already on the current draw path (a cycle), when the path\n * is at the depth cap, or when the draw budget is spent. A node that is merely\n * shared — drawn again from a different path — is drawn every time, because the\n * path is a recursion stack, not an \"ever drawn\" set.\n */\nexport class DrawPath<T> {\n private readonly path = new Set<T>();\n private draws = 0;\n\n constructor(private readonly maxDepth: number, private readonly maxDraws: number) {}\n\n /** Runs `draw` inside `node` unless a guard trips; returns whether it ran. */\n enter(node: T, draw: () => void): boolean {\n if (this.path.has(node) || this.path.size >= this.maxDepth || this.draws >= this.maxDraws) {\n return false;\n }\n this.draws++;\n this.path.add(node);\n try {\n draw();\n } finally {\n this.path.delete(node);\n }\n return true;\n }\n}\n\n/** A byte budget shared by every stream decode in one parse. */\nexport class DecodeBudget {\n private remaining: number;\n\n constructor(total: number) {\n this.remaining = total;\n }\n\n /** Charges `bytes`; returns false (charging nothing) when they do not fit. */\n take(bytes: number): boolean {\n if (bytes > this.remaining) return false;\n this.remaining -= bytes;\n return true;\n }\n\n /** True once nothing is left, so a caller can refuse work before doing it. */\n get spent(): boolean {\n return this.remaining <= 0;\n }\n\n /**\n * Gives up what is left. A charge that did not fit means the work it paid\n * for was already done; spending the rest stops every later decode of the\n * same size from doing that work again just to be refused.\n */\n spendRemainder(): void {\n this.remaining = 0;\n }\n}\n","import { ByteSink } from './byte-sink';\nimport { zlibInflate } from './inflate';\nimport { DEFAULT_PARSER_LIMITS, DecodeBudget, DrawPath, visitOnce, type ParserLimits } from './limits';\nimport { cssFontFamily, escapeAttribute, safeLinkHref } from './markup-safety';\n\n/**\n * Ceiling for a single decoded PDF stream. A stream's filter chain can expand\n * without bound, and a malformed or hostile document can exploit that to\n * exhaust memory, so the decoder bounds what it will materialise. 64 MB is\n * still far above any legitimate single stream in a real document, and -- now\n * that every decoder accumulates into a one-byte-per-byte {@link ByteSink} --\n * it is also what the guard actually costs, where the earlier 256 MB on a\n * `number[]` let a bomb take over a gigabyte before it tripped.\n */\nexport const MAX_DECODED_STREAM_BYTES = 64 * 1024 * 1024;\n\n// ── Stream filter decoders ──────────────────────────────────────────────\n\nfunction decodeASCIIHex(data: Uint8Array): Uint8Array {\n const text = new TextDecoder('latin1').decode(data);\n let hex = '';\n for (const ch of text) {\n if (ch === '>') break;\n if (!' \\t\\r\\n\\0\\f'.includes(ch)) hex += ch;\n }\n if (hex.length % 2 !== 0) hex += '0';\n const result = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n result[i / 2] = Number.parseInt(hex.substring(i, i + 2), 16);\n }\n return result;\n}\n\nfunction ascii85IsEndMarker(text: string, i: number): boolean {\n return text[i] === '~' && i + 1 < text.length && text[i + 1] === '>';\n}\n\nfunction ascii85CollectGroup(text: string, startIndex: number): { group: number[]; nextIndex: number } {\n const group: number[] = [];\n let i = startIndex;\n while (group.length < 5 && i < text.length) {\n if (text[i] === '~') break;\n if (!' \\t\\r\\n\\0\\f'.includes(text[i])) {\n group.push((text.codePointAt(i) ?? 0) - 33);\n }\n i++;\n }\n return { group, nextIndex: i };\n}\n\nfunction ascii85DecodeGroup(group: number[]): number[] {\n while (group.length < 5) group.push(84);\n\n let value = 0;\n for (const g of group) value = value * 85 + g;\n\n const bytes = [\n (value >>> 24) & 0xFF,\n (value >>> 16) & 0xFF,\n (value >>> 8) & 0xFF,\n value & 0xFF,\n ];\n const numBytes = group.length === 5 ? 4 : group.length - 1;\n return bytes.slice(0, numBytes);\n}\n\nfunction decodeASCII85(data: Uint8Array): Uint8Array {\n const text = new TextDecoder('latin1').decode(data);\n const output = new ByteSink(MAX_DECODED_STREAM_BYTES);\n let i = 0;\n\n while (i < text.length) {\n if (ascii85IsEndMarker(text, i)) break;\n if (' \\t\\r\\n\\0\\f'.includes(text[i])) { i++; continue; }\n\n if (text[i] === 'z') {\n output.pushSlice([0, 0, 0, 0]);\n i++;\n continue;\n }\n\n const { group, nextIndex } = ascii85CollectGroup(text, i);\n i = nextIndex;\n\n if (group.length < 2) break;\n output.pushSlice(ascii85DecodeGroup(group));\n }\n\n return output.toUint8Array();\n}\n\ninterface LZWState {\n bitPos: number;\n codeSize: number;\n nextCode: number;\n table: Uint8Array[];\n}\n\nfunction lzwInitTable(state: LZWState): void {\n state.table = [];\n for (let i = 0; i < 256; i++) state.table[i] = new Uint8Array([i]);\n state.table[256] = new Uint8Array(0);\n state.table[257] = new Uint8Array(0);\n state.nextCode = 258;\n state.codeSize = 9;\n}\n\nfunction lzwReadCode(data: Uint8Array, state: LZWState): number {\n let code = 0;\n for (let i = 0; i < state.codeSize; i++) {\n const byteIdx = (state.bitPos + i) >>> 3;\n const bitIdx = 7 - ((state.bitPos + i) & 7);\n if (byteIdx < data.length) {\n code |= ((data[byteIdx] >>> bitIdx) & 1) << (state.codeSize - 1 - i);\n }\n }\n state.bitPos += state.codeSize;\n return code;\n}\n\nfunction lzwResolveEntry(code: number, state: LZWState, prevEntry: Uint8Array | null): Uint8Array | null {\n if (code < state.nextCode && state.table[code]) return state.table[code];\n if (code === state.nextCode && prevEntry) {\n const entry = new Uint8Array(prevEntry.length + 1);\n entry.set(prevEntry);\n entry[prevEntry.length] = prevEntry[0];\n return entry;\n }\n return null;\n}\n\n/**\n * Append the next dictionary entry — the previous run plus the first byte of the\n * current one — and widen the code size when the table fills.\n */\nfunction lzwExtendTable(state: LZWState, prevEntry: Uint8Array, nextByte: number, earlyChange: number): void {\n const newEntry = new Uint8Array(prevEntry.length + 1);\n newEntry.set(prevEntry);\n newEntry[prevEntry.length] = nextByte;\n state.table[state.nextCode] = newEntry;\n state.nextCode++;\n if (state.nextCode >= (1 << state.codeSize) - earlyChange && state.codeSize < 12) {\n state.codeSize++;\n }\n}\n\n/**\n * LZWDecode, bounded by {@link MAX_DECODED_STREAM_BYTES}.\n *\n * LZW's dictionary rechains, so each successive code can emit a longer run than\n * the last and a small stream can expand without limit — the same\n * decompression-bomb shape the Flate path already guards against. The sink\n * THROWS at the ceiling, exactly as Flate does, so the stream is refused\n * through `decodeStreamData`'s catch rather than silently truncated and handed\n * on as if it were complete.\n */\nfunction decodeLZW(data: Uint8Array, earlyChange: number): Uint8Array {\n const output = new ByteSink(MAX_DECODED_STREAM_BYTES);\n const state: LZWState = { bitPos: 0, codeSize: 9, nextCode: 258, table: [] };\n lzwInitTable(state);\n let prevEntry: Uint8Array | null = null;\n\n while (state.bitPos + state.codeSize <= data.length * 8) {\n const code = lzwReadCode(data, state);\n if (code === 257) break;\n\n if (code === 256) {\n lzwInitTable(state);\n prevEntry = null;\n continue;\n }\n\n const entry = lzwResolveEntry(code, state, prevEntry);\n if (!entry) break;\n\n output.pushSlice(entry);\n\n if (prevEntry) lzwExtendTable(state, prevEntry, entry[0], earlyChange);\n prevEntry = entry;\n }\n\n return output.toUint8Array();\n}\n\nfunction rleCopyLiteral(data: Uint8Array, output: ByteSink, start: number, count: number): number {\n let i = start;\n for (let j = 0; j <= count && i < data.length; j++) {\n output.push(data[i++]);\n }\n return i;\n}\n\nfunction rleRepeatByte(data: Uint8Array, output: ByteSink, pos: number, len: number): number {\n if (pos >= data.length) return pos;\n const byte = data[pos];\n const repeatCount = 257 - len;\n for (let j = 0; j < repeatCount; j++) output.push(byte);\n return pos + 1;\n}\n\nfunction decodeRunLength(data: Uint8Array): Uint8Array {\n const output = new ByteSink(MAX_DECODED_STREAM_BYTES);\n let i = 0;\n while (i < data.length) {\n const len = data[i];\n i++;\n if (len === 128) break;\n if (len < 128) {\n i = rleCopyLiteral(data, output, i, len);\n } else {\n i = rleRepeatByte(data, output, i, len);\n }\n }\n return output.toUint8Array();\n}\n\n// ── CCITT Fax decoder (Group 3 1D / Group 4 2D) ────────────────────────\n\ninterface CCITTCode { readonly runLen: number; readonly bits: number; readonly code: number }\n\nconst WHITE_TERM_CODES: CCITTCode[] = [\n {runLen:0,bits:8,code:0x35},{runLen:1,bits:6,code:0x07},{runLen:2,bits:4,code:0x07},{runLen:3,bits:4,code:0x08},\n {runLen:4,bits:4,code:0x0B},{runLen:5,bits:4,code:0x0C},{runLen:6,bits:4,code:0x0E},{runLen:7,bits:4,code:0x0F},\n {runLen:8,bits:5,code:0x13},{runLen:9,bits:5,code:0x14},{runLen:10,bits:5,code:0x07},{runLen:11,bits:5,code:0x08},\n {runLen:12,bits:6,code:0x08},{runLen:13,bits:6,code:0x03},{runLen:14,bits:6,code:0x34},{runLen:15,bits:6,code:0x35},\n {runLen:16,bits:6,code:0x2A},{runLen:17,bits:6,code:0x2B},{runLen:18,bits:7,code:0x27},{runLen:19,bits:7,code:0x0C},\n {runLen:20,bits:7,code:0x08},{runLen:21,bits:7,code:0x17},{runLen:22,bits:7,code:0x03},{runLen:23,bits:7,code:0x04},\n {runLen:24,bits:7,code:0x28},{runLen:25,bits:7,code:0x2B},{runLen:26,bits:7,code:0x13},{runLen:27,bits:7,code:0x24},\n {runLen:28,bits:7,code:0x18},{runLen:29,bits:8,code:0x02},{runLen:30,bits:8,code:0x03},{runLen:31,bits:8,code:0x1A},\n {runLen:32,bits:8,code:0x1B},{runLen:33,bits:8,code:0x12},{runLen:34,bits:8,code:0x13},{runLen:35,bits:8,code:0x14},\n {runLen:36,bits:8,code:0x15},{runLen:37,bits:8,code:0x16},{runLen:38,bits:8,code:0x17},{runLen:39,bits:8,code:0x28},\n {runLen:40,bits:8,code:0x29},{runLen:41,bits:8,code:0x2A},{runLen:42,bits:8,code:0x2B},{runLen:43,bits:8,code:0x2C},\n {runLen:44,bits:8,code:0x2D},{runLen:45,bits:8,code:0x04},{runLen:46,bits:8,code:0x05},{runLen:47,bits:8,code:0x0A},\n {runLen:48,bits:8,code:0x0B},{runLen:49,bits:8,code:0x52},{runLen:50,bits:8,code:0x53},{runLen:51,bits:8,code:0x54},\n {runLen:52,bits:8,code:0x55},{runLen:53,bits:8,code:0x24},{runLen:54,bits:8,code:0x25},{runLen:55,bits:8,code:0x58},\n {runLen:56,bits:8,code:0x59},{runLen:57,bits:8,code:0x5A},{runLen:58,bits:8,code:0x5B},{runLen:59,bits:8,code:0x4A},\n {runLen:60,bits:8,code:0x4B},{runLen:61,bits:8,code:0x32},{runLen:62,bits:8,code:0x33},{runLen:63,bits:8,code:0x34},\n];\n\nconst WHITE_MAKEUP_CODES: CCITTCode[] = [\n {runLen:64,bits:5,code:0x1B},{runLen:128,bits:5,code:0x12},{runLen:192,bits:6,code:0x17},{runLen:256,bits:7,code:0x37},\n {runLen:320,bits:8,code:0x36},{runLen:384,bits:8,code:0x37},{runLen:448,bits:8,code:0x64},{runLen:512,bits:8,code:0x65},\n {runLen:576,bits:8,code:0x68},{runLen:640,bits:8,code:0x67},{runLen:704,bits:9,code:0xCC},{runLen:768,bits:9,code:0xCD},\n {runLen:832,bits:9,code:0xD2},{runLen:896,bits:9,code:0xD3},{runLen:960,bits:9,code:0xD4},{runLen:1024,bits:9,code:0xD5},\n {runLen:1088,bits:9,code:0xD6},{runLen:1152,bits:9,code:0xD7},{runLen:1216,bits:9,code:0xD8},{runLen:1280,bits:9,code:0xD9},\n {runLen:1344,bits:9,code:0xDA},{runLen:1408,bits:9,code:0xDB},{runLen:1472,bits:9,code:0x98},{runLen:1536,bits:9,code:0x99},\n {runLen:1600,bits:9,code:0x9A},{runLen:1664,bits:6,code:0x18},{runLen:1728,bits:9,code:0x9B},\n];\n\nconst BLACK_TERM_CODES: CCITTCode[] = [\n {runLen:0,bits:10,code:0x37},{runLen:1,bits:3,code:0x02},{runLen:2,bits:2,code:0x03},{runLen:3,bits:2,code:0x02},\n {runLen:4,bits:3,code:0x03},{runLen:5,bits:4,code:0x03},{runLen:6,bits:4,code:0x02},{runLen:7,bits:5,code:0x03},\n {runLen:8,bits:6,code:0x05},{runLen:9,bits:6,code:0x04},{runLen:10,bits:7,code:0x04},{runLen:11,bits:7,code:0x05},\n {runLen:12,bits:7,code:0x07},{runLen:13,bits:8,code:0x04},{runLen:14,bits:8,code:0x07},{runLen:15,bits:9,code:0x18},\n {runLen:16,bits:10,code:0x17},{runLen:17,bits:10,code:0x18},{runLen:18,bits:10,code:0x08},{runLen:19,bits:11,code:0x67},\n {runLen:20,bits:11,code:0x68},{runLen:21,bits:11,code:0x6C},{runLen:22,bits:11,code:0x37},{runLen:23,bits:11,code:0x28},\n {runLen:24,bits:11,code:0x17},{runLen:25,bits:11,code:0x18},{runLen:26,bits:12,code:0xCA},{runLen:27,bits:12,code:0xCB},\n {runLen:28,bits:12,code:0xCC},{runLen:29,bits:12,code:0xCD},{runLen:30,bits:12,code:0x68},{runLen:31,bits:12,code:0x69},\n {runLen:32,bits:12,code:0x6A},{runLen:33,bits:12,code:0x6B},{runLen:34,bits:12,code:0xD2},{runLen:35,bits:12,code:0xD3},\n {runLen:36,bits:12,code:0xD4},{runLen:37,bits:12,code:0xD5},{runLen:38,bits:12,code:0xD6},{runLen:39,bits:12,code:0xD7},\n {runLen:40,bits:12,code:0x6C},{runLen:41,bits:12,code:0x6D},{runLen:42,bits:12,code:0xDA},{runLen:43,bits:12,code:0xDB},\n {runLen:44,bits:12,code:0x54},{runLen:45,bits:12,code:0x55},{runLen:46,bits:12,code:0x56},{runLen:47,bits:12,code:0x57},\n {runLen:48,bits:12,code:0x64},{runLen:49,bits:12,code:0x65},{runLen:50,bits:12,code:0x52},{runLen:51,bits:12,code:0x53},\n {runLen:52,bits:12,code:0x24},{runLen:53,bits:12,code:0x37},{runLen:54,bits:12,code:0x38},{runLen:55,bits:12,code:0x27},\n {runLen:56,bits:12,code:0x28},{runLen:57,bits:12,code:0x58},{runLen:58,bits:12,code:0x59},{runLen:59,bits:12,code:0x2B},\n {runLen:60,bits:12,code:0x2C},{runLen:61,bits:12,code:0x5A},{runLen:62,bits:12,code:0x66},{runLen:63,bits:12,code:0x67},\n];\n\nconst BLACK_MAKEUP_CODES: CCITTCode[] = [\n {runLen:64,bits:10,code:0x0F},{runLen:128,bits:12,code:0xC8},{runLen:192,bits:12,code:0xC9},{runLen:256,bits:12,code:0x5B},\n {runLen:320,bits:12,code:0x33},{runLen:384,bits:12,code:0x34},{runLen:448,bits:12,code:0x35},{runLen:512,bits:13,code:0x6C},\n {runLen:576,bits:13,code:0x6D},{runLen:640,bits:13,code:0x4A},{runLen:704,bits:13,code:0x4B},{runLen:768,bits:13,code:0x4C},\n {runLen:832,bits:13,code:0x4D},{runLen:896,bits:13,code:0x72},{runLen:960,bits:13,code:0x73},{runLen:1024,bits:13,code:0x74},\n {runLen:1088,bits:13,code:0x75},{runLen:1152,bits:13,code:0x76},{runLen:1216,bits:13,code:0x77},{runLen:1280,bits:13,code:0x52},\n {runLen:1344,bits:13,code:0x53},{runLen:1408,bits:13,code:0x54},{runLen:1472,bits:13,code:0x55},{runLen:1536,bits:13,code:0x5A},\n {runLen:1600,bits:13,code:0x5B},{runLen:1664,bits:13,code:0x64},{runLen:1728,bits:13,code:0x65},\n];\n\nconst COMMON_MAKEUP_CODES: CCITTCode[] = [\n {runLen:1792,bits:11,code:0x08},{runLen:1856,bits:11,code:0x0C},{runLen:1920,bits:11,code:0x0D},\n {runLen:1984,bits:12,code:0x12},{runLen:2048,bits:12,code:0x13},{runLen:2112,bits:12,code:0x14},\n {runLen:2176,bits:12,code:0x15},{runLen:2240,bits:12,code:0x16},{runLen:2304,bits:12,code:0x17},\n {runLen:2368,bits:12,code:0x1C},{runLen:2432,bits:12,code:0x1D},{runLen:2496,bits:12,code:0x1E},\n {runLen:2560,bits:12,code:0x1F},\n];\n\ntype CCITTTreeNode = { readonly '0'?: CCITTTreeNode; readonly '1'?: CCITTTreeNode; readonly runLen?: number };\n\nfunction buildCCITTTree(codes: ReadonlyArray<CCITTCode>): CCITTTreeNode {\n const root: Record<string, unknown> = {};\n for (const c of codes) {\n let node = root;\n for (let i = c.bits - 1; i >= 0; i--) {\n const bit = (c.code >> i) & 1 ? '1' : '0';\n node[bit] ??= {};\n node = node[bit] as Record<string, unknown>;\n }\n node['runLen'] = c.runLen;\n }\n return root;\n}\n\nconst whiteTree = buildCCITTTree([...WHITE_TERM_CODES, ...WHITE_MAKEUP_CODES, ...COMMON_MAKEUP_CODES]);\nconst blackTree = buildCCITTTree([...BLACK_TERM_CODES, ...BLACK_MAKEUP_CODES, ...COMMON_MAKEUP_CODES]);\n\nclass CCITTBitReader {\n private pos = 0;\n private bitPos = 0;\n constructor(private readonly data: Uint8Array) {}\n\n readBit(): number {\n if (this.pos >= this.data.length) return 0;\n const bit = (this.data[this.pos] >> (7 - this.bitPos)) & 1;\n this.bitPos++;\n if (this.bitPos >= 8) { this.bitPos = 0; this.pos++; }\n return bit;\n }\n\n skipToByteAlign(): void {\n if (this.bitPos > 0) { this.bitPos = 0; this.pos++; }\n }\n\n get exhausted(): boolean { return this.pos >= this.data.length; }\n}\n\nfunction ccittDecodeRun(reader: CCITTBitReader, tree: CCITTTreeNode): number {\n let total = 0;\n let makeup = true;\n while (makeup) {\n let node: CCITTTreeNode | undefined = tree;\n while (node && node.runLen === undefined) {\n const bit = reader.readBit();\n node = bit ? node['1'] : node['0'];\n }\n if (node?.runLen === undefined) return total;\n total += node.runLen;\n makeup = node.runLen >= 64;\n }\n return total;\n}\n\nfunction ccittDecodeGroup4Rows(\n bitReader: CCITTBitReader, columns: number, maxRows: number, blackIs1: boolean, output: Uint8Array[],\n): void {\n let refLine: Uint8Array<ArrayBufferLike> = new Uint8Array(columns);\n for (let row = 0; row < maxRows; row++) {\n if (bitReader.exhausted) break;\n const curLine = decodeCCITTGroup4Row(bitReader, refLine, columns);\n if (!curLine) break;\n output.push(ccittRowToBytes(curLine, columns, blackIs1));\n refLine = curLine;\n }\n}\n\nfunction ccittDecodeGroup3Rows(\n bitReader: CCITTBitReader, columns: number, maxRows: number, blackIs1: boolean,\n encodedByteAlign: boolean, output: Uint8Array[],\n): void {\n for (let row = 0; row < maxRows; row++) {\n if (bitReader.exhausted) break;\n if (encodedByteAlign) bitReader.skipToByteAlign();\n const curLine = decodeCCITTGroup3Row(bitReader, columns);\n if (!curLine) break;\n output.push(ccittRowToBytes(curLine, columns, blackIs1));\n }\n}\n\nfunction ccittDecodeMixedRows(\n bitReader: CCITTBitReader, columns: number, maxRows: number, blackIs1: boolean,\n encodedByteAlign: boolean, output: Uint8Array[],\n): void {\n let refLine: Uint8Array<ArrayBufferLike> = new Uint8Array(columns);\n for (let row = 0; row < maxRows; row++) {\n if (bitReader.exhausted) break;\n if (encodedByteAlign) bitReader.skipToByteAlign();\n const tag = bitReader.readBit();\n const curLine = tag === 1\n ? decodeCCITTGroup3Row(bitReader, columns)\n : decodeCCITTGroup4Row(bitReader, refLine, columns);\n if (!curLine) break;\n output.push(ccittRowToBytes(curLine, columns, blackIs1));\n refLine = curLine;\n }\n}\n\nfunction ccittAssembleOutput(output: Uint8Array[], rowBytes: number, fallback: Uint8Array): Uint8Array {\n if (output.length === 0) return fallback;\n const result = new Uint8Array(output.length * rowBytes);\n for (let i = 0; i < output.length; i++) {\n result.set(output[i], i * rowBytes);\n }\n return result;\n}\n\nfunction decodeCCITTFax(data: Uint8Array, parms: Record<string, PdfObject>, reader: PdfReader): Uint8Array {\n const k = reader.getNumber(parms['K']);\n const columns = reader.getNumber(parms['Columns']) || 1728;\n const rows = reader.getNumber(parms['Rows']) || 0;\n const encodedByteAlign = !!parms['EncodedByteAlign'];\n const blackIs1 = !!parms['BlackIs1'];\n\n // Columns and Rows are the file's claim, not the image's size: a row that\n // alone exceeds the pixel cap is refused, and rows stop where the cap does.\n if (columns <= 0 || columns > reader.limits.maxImagePixels) return new Uint8Array(0);\n const rowBytes = Math.ceil(columns / 8);\n const maxRows = Math.min(rows > 0 ? rows : 10000, Math.floor(reader.limits.maxImagePixels / columns));\n const output: Uint8Array[] = [];\n const bitReader = new CCITTBitReader(data);\n\n if (k < 0) {\n ccittDecodeGroup4Rows(bitReader, columns, maxRows, blackIs1, output);\n } else if (k === 0) {\n ccittDecodeGroup3Rows(bitReader, columns, maxRows, blackIs1, encodedByteAlign, output);\n } else {\n ccittDecodeMixedRows(bitReader, columns, maxRows, blackIs1, encodedByteAlign, output);\n }\n\n return ccittAssembleOutput(output, rowBytes, data);\n}\n\nfunction ccittRowToBytes(line: Uint8Array, columns: number, blackIs1: boolean): Uint8Array {\n const rowBytes = Math.ceil(columns / 8);\n const out = new Uint8Array(rowBytes);\n for (let i = 0; i < columns; i++) {\n const rawPixel = line[i];\n const pixel = blackIs1 ? rawPixel : (1 - rawPixel);\n if (pixel) out[i >> 3] |= 0x80 >> (i & 7);\n }\n return out;\n}\n\nfunction decodeCCITTGroup3Row(reader: CCITTBitReader, columns: number): Uint8Array | null {\n const line = new Uint8Array(columns);\n let col = 0;\n let isWhite = true;\n // Past the end of the data every bit reads 0, which is no code at all, so a\n // row cut short would otherwise alternate zero-length runs forever.\n while (col < columns && !reader.exhausted) {\n const tree = isWhite ? whiteTree : blackTree;\n const runLen = ccittDecodeRun(reader, tree);\n const fill = isWhite ? 0 : 1;\n const end = Math.min(col + runLen, columns);\n for (let i = col; i < end; i++) line[i] = fill;\n col = end;\n isWhite = !isWhite;\n }\n return line;\n}\n\ninterface Group4State {\n a0: number;\n isWhite: boolean;\n done: boolean;\n}\n\nfunction g4FillRun(line: Uint8Array, start: number, end: number, fill: number): void {\n for (let i = start; i < end; i++) line[i] = fill;\n}\n\nfunction g4FindB1(refLine: Uint8Array, a0pos: number, white: boolean, columns: number): number {\n let pos = a0pos;\n const refColor = white ? 0 : 1;\n if (pos < columns && refLine[pos] === refColor) {\n while (pos < columns && refLine[pos] === refColor) pos++;\n }\n while (pos < columns && refLine[pos] !== refColor) pos++;\n while (pos < columns && refLine[pos] === refColor) pos++;\n return pos;\n}\n\nfunction g4FindB2(refLine: Uint8Array, b1: number, columns: number): number {\n const b1Color = b1 < columns ? refLine[b1] : 0;\n let pos = b1;\n while (pos < columns && refLine[pos] === b1Color) pos++;\n return pos;\n}\n\nfunction g4ApplyVerticalDelta(\n line: Uint8Array, state: Group4State, b1: number, delta: number, columns: number,\n): void {\n const a1 = Math.max(0, Math.min(b1 + delta, columns));\n const fill = state.isWhite ? 0 : 1;\n g4FillRun(line, state.a0, a1, fill);\n state.a0 = a1;\n state.isWhite = !state.isWhite;\n}\n\nfunction g4HandleBit1Set(\n reader: CCITTBitReader, refLine: Uint8Array, line: Uint8Array, state: Group4State, columns: number,\n): void {\n const bit2 = reader.readBit();\n const bit3 = reader.readBit();\n if (bit2 === 0 && bit3 === 0) {\n state.done = true;\n return;\n }\n const b1 = g4FindB1(refLine, state.a0, state.isWhite, columns);\n if (bit2 === 0 && bit3 === 1) {\n g4FillRun(line, state.a0, Math.min(b1, columns), state.isWhite ? 0 : 1);\n state.a0 = Math.min(b1, columns);\n state.isWhite = !state.isWhite;\n return;\n }\n if (bit2 === 1 && bit3 === 0) {\n const b2 = g4FindB2(refLine, b1, columns);\n g4FillRun(line, state.a0, Math.min(b2, columns), state.isWhite ? 0 : 1);\n state.a0 = Math.min(b2, columns);\n return;\n }\n const d = reader.readBit();\n const delta = d === 0 ? -3 : 3;\n g4ApplyVerticalDelta(line, state, b1, delta, columns);\n}\n\nfunction g4HandleSmallDelta(\n reader: CCITTBitReader, refLine: Uint8Array, line: Uint8Array, state: Group4State, columns: number,\n): void {\n const bit3 = reader.readBit();\n const b1 = g4FindB1(refLine, state.a0, state.isWhite, columns);\n let delta: number;\n if (bit3 === 0) {\n delta = reader.readBit() === 0 ? -2 : 2;\n } else {\n delta = reader.readBit() === 0 ? -1 : 1;\n }\n g4ApplyVerticalDelta(line, state, b1, delta, columns);\n}\n\nfunction g4HandleHorizontal(\n reader: CCITTBitReader, line: Uint8Array, state: Group4State, columns: number,\n): void {\n const tree = state.isWhite ? whiteTree : blackTree;\n const runLen = ccittDecodeRun(reader, tree);\n const fill = state.isWhite ? 0 : 1;\n const end = Math.min(state.a0 + runLen, columns);\n g4FillRun(line, state.a0, end, fill);\n state.a0 = end;\n state.isWhite = !state.isWhite;\n\n const tree2 = state.isWhite ? whiteTree : blackTree;\n const runLen2 = ccittDecodeRun(reader, tree2);\n const fill2 = state.isWhite ? 0 : 1;\n const end2 = Math.min(state.a0 + runLen2, columns);\n g4FillRun(line, state.a0, end2, fill2);\n state.a0 = end2;\n state.isWhite = !state.isWhite;\n}\n\nfunction decodeCCITTGroup4Row(reader: CCITTBitReader, refLine: Uint8Array, columns: number): Uint8Array | null {\n const line = new Uint8Array(columns);\n const state: Group4State = { a0: 0, isWhite: true, done: false };\n\n let safetyCounter = 0;\n while (state.a0 < columns) {\n if (safetyCounter++ > columns * 2) return line;\n const bit1 = reader.readBit();\n if (bit1 === 1) {\n g4HandleBit1Set(reader, refLine, line, state, columns);\n if (state.done) return line;\n } else if (reader.readBit() === 0) {\n g4HandleSmallDelta(reader, refLine, line, state, columns);\n } else {\n g4HandleHorizontal(reader, line, state, columns);\n }\n }\n return line;\n}\n\n// ── End CCITT Fax decoder ───────────────────────────────────────────────\n\nfunction applyPngPredictor(\n data: Uint8Array, columns: number, colors: number, bpc: number,\n): Uint8Array {\n const bytesPerPixel = Math.max(1, Math.ceil((colors * bpc) / 8));\n const rowBytes = Math.ceil((columns * colors * bpc) / 8);\n const rowStride = 1 + rowBytes;\n\n if (data.length < rowStride) return data;\n\n const numRows = Math.floor(data.length / rowStride);\n const output = new Uint8Array(numRows * rowBytes);\n const prevRow = new Uint8Array(rowBytes);\n\n for (let row = 0; row < numRows; row++) {\n const srcOffset = row * rowStride;\n const predictor = data[srcOffset];\n const dstOffset = row * rowBytes;\n\n for (let col = 0; col < rowBytes; col++) {\n const raw = data[srcOffset + 1 + col] ?? 0;\n const a = col >= bytesPerPixel ? output[dstOffset + col - bytesPerPixel] : 0;\n const b = prevRow[col];\n const c = col >= bytesPerPixel ? prevRow[col - bytesPerPixel] : 0;\n\n let val: number;\n switch (predictor) {\n case 0: val = raw; break;\n case 1: val = (raw + a) & 0xFF; break;\n case 2: val = (raw + b) & 0xFF; break;\n case 3: val = (raw + Math.floor((a + b) / 2)) & 0xFF; break;\n case 4: val = (raw + paethPredictor(a, b, c)) & 0xFF; break;\n default: val = raw; break;\n }\n output[dstOffset + col] = val;\n }\n\n prevRow.set(output.subarray(dstOffset, dstOffset + rowBytes));\n }\n\n return output;\n}\n\nfunction paethPredictor(a: number, b: number, c: number): number {\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n if (pa <= pb && pa <= pc) return a;\n if (pb <= pc) return b;\n return c;\n}\n\nexport interface PdfParseResult {\n html: string;\n text: string;\n imageOnly: boolean;\n}\n\nexport interface TextItem {\n text: string;\n fontSize: number;\n x: number;\n y: number;\n endX: number;\n page: number;\n color: string;\n bold: boolean;\n italic: boolean;\n fontFamily: string;\n fontName: string;\n mcid: number;\n charSpacing: number;\n wordSpacing: number;\n textRise: number;\n horizontalScaling: number;\n textRenderMode: number;\n strokeColor: string;\n transformMatrix: readonly [number, number, number, number];\n isSpaceOffset: boolean;\n}\n\nexport interface FontInfo {\n isTwoByte: boolean;\n widths: Map<number, number>;\n defaultWidth: number;\n toUnicode: Map<number, string>;\n isBold: boolean;\n isItalic: boolean;\n familyName: string;\n}\n\nexport interface ImageItem {\n dataUrl: string;\n width: number;\n height: number;\n renderWidth: number;\n renderHeight: number;\n x: number;\n y: number;\n page: number;\n /** For SVG vector items only: the stroke colour of an unfilled outline\n * (e.g. a button border), or '' when the shape is not a plain outline.\n * Undefined for raster images. */\n svgStrokeColor?: string;\n /** For SVG vector items only: stroke width in pt. */\n svgStrokeWidth?: number;\n}\n\nexport interface PathRect {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n readonly page: number;\n readonly stroked: boolean;\n readonly filled: boolean;\n readonly strokeColor: string;\n readonly fillColor: string;\n readonly lineWidth: number;\n}\n\nexport interface PdfAnnotation {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n readonly page: number;\n readonly uri: string;\n}\n\ninterface TableGrid {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n readonly page: number;\n readonly rows: number[];\n readonly cols: number[];\n}\n\nexport interface PdfObject {\n type: 'dict' | 'array' | 'number' | 'string' | 'name' | 'boolean' | 'null' | 'ref' | 'stream';\n value: unknown;\n stream?: Uint8Array;\n}\n\n// ── PDF structure parser ────────────────────────────────────────────────\n\nexport class PdfReader {\n private data: Uint8Array;\n private text: string;\n private readonly objects: Map<string, { offset: number; gen: number }> = new Map();\n private readonly parsedObjects: Map<string, PdfObject> = new Map();\n private readonly compressedObjects: Map<string, { streamObjNum: number; index: number }> = new Map();\n private trailer: Record<string, PdfObject> | null = null;\n /** References being parsed right now: an object whose /Length leads back to itself must not recurse. */\n private readonly resolving = new Set<string>();\n /** Arrays and dictionaries open right now in the value being parsed. */\n private nesting = 0;\n /** What every filtered stream this parse decodes may produce in total. */\n private readonly decodeBudget: DecodeBudget;\n\n /**\n * `limits` holds the caps the reader and its renderers apply to what the\n * file declares — image size, nesting, page count, form draws and total\n * decoded bytes.\n */\n constructor(buffer: ArrayBuffer, readonly limits: ParserLimits = DEFAULT_PARSER_LIMITS) {\n this.data = new Uint8Array(buffer);\n this.text = new TextDecoder('latin1').decode(this.data);\n this.decodeBudget = new DecodeBudget(limits.maxDecodedBytesTotal);\n }\n\n parse(): void {\n this.findXRef();\n }\n\n private findLastStartxref(chunk: string): RegExpExecArray | null {\n const re = /startxref\\s+(\\d+)/g;\n let last: RegExpExecArray | null = null;\n let m: RegExpExecArray | null;\n while ((m = re.exec(chunk)) !== null) {\n last = m;\n }\n return last;\n }\n\n private findXRef(): void {\n try {\n this.followStartxref();\n } catch (error) {\n this.reconstructXRef();\n if (this.objects.size === 0 && this.compressedObjects.size === 0) throw error;\n return;\n }\n if (this.objects.size === 0 && this.compressedObjects.size === 0) {\n this.reconstructXRef();\n }\n }\n\n private followStartxref(): void {\n let match = this.findLastStartxref(this.text.slice(-1024));\n match ??= this.findLastStartxref(this.text.slice(-8192));\n if (!match) throw new Error('Could not find startxref in PDF');\n this.walkXRefChain(Number.parseInt(match[1], 10));\n }\n\n /**\n * Reads the newest xref section, then each /Prev behind it. A section\n * already read ends the walk, so a /Prev that points back at itself or at a\n * later section cannot loop, and the walk needs no call stack however long\n * the chain of incremental updates is.\n */\n private walkXRefChain(newest: number): void {\n const seen = new Set<number>();\n let offset: number | null = newest;\n while (offset !== null && visitOnce(seen, offset)) {\n offset = this.text.substring(offset, offset + 4) === 'xref'\n ? this.parseTraditionalXRef(offset)\n : this.parseXRefStream(offset);\n }\n }\n\n /**\n * Repair path for PDFs whose startxref offset or xref chain is broken\n * (common in incremental saves): scan the raw file for `N G obj` headers\n * and rebuild the object table directly. Later occurrences win, matching\n * incremental-update semantics. The trailer is recovered from the last\n * parsable `trailer` dict, or synthesized from a scanned /Type /Catalog.\n */\n private reconstructXRef(): void {\n const re = /(\\d{1,10})[ \\t\\r\\n]{1,4}(\\d{1,5})[ \\t\\r\\n]{1,4}obj\\b/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(this.text)) !== null) {\n const gen = Number.parseInt(m[2], 10);\n this.objects.set(`${m[1]} ${gen}`, { offset: m.index, gen });\n }\n this.recoverTrailer();\n this.indexScannedObjectStreams();\n }\n\n private recoverTrailer(): void {\n if (this.trailer?.['Root']) return;\n let tPos = this.text.lastIndexOf('trailer');\n while (tPos !== -1) {\n if (this.tryAdoptTrailerAt(tPos)) return;\n tPos = this.text.lastIndexOf('trailer', tPos - 1);\n }\n this.recoverRootFromCatalogScan();\n }\n\n private tryAdoptTrailerAt(tPos: number): boolean {\n const dictStart = this.text.indexOf('<<', tPos);\n if (dictStart === -1) return false;\n try {\n const result = this.parseObjectAt(dictStart);\n const dict = result.obj.value as Record<string, PdfObject>;\n if (result.obj.type === 'dict' && dict['Root']) {\n this.trailer = dict;\n return true;\n }\n } catch { /* try an earlier trailer */ }\n return false;\n }\n\n private recoverRootFromCatalogScan(): void {\n for (const [key, entry] of this.objects) {\n const slice = this.text.substring(entry.offset, entry.offset + 256);\n if (!slice.includes('/Type') || !slice.includes('/Catalog')) continue;\n const num = Number.parseInt(key.split(' ')[0], 10);\n this.trailer = {\n Root: { type: 'ref', value: `${num} ${entry.gen}` },\n };\n return;\n }\n }\n\n private indexScannedObjectStreams(): void {\n for (const [key] of this.objects) {\n try {\n const obj = this.resolveRef({ type: 'ref', value: key });\n if (obj.type !== 'stream') continue;\n const dict = obj.value as Record<string, PdfObject>;\n const typeName = dict['Type']?.type === 'name' ? dict['Type'].value : '';\n if (typeName !== 'ObjStm') continue;\n const num = Number.parseInt(key.split(' ')[0], 10);\n this.indexObjectStreamContents(num, obj);\n } catch { /* skip unreadable candidates */ }\n }\n }\n\n private indexObjectStreamContents(streamObjNum: number, obj: PdfObject): void {\n const dict = obj.value as Record<string, PdfObject>;\n const count = dict['N']?.type === 'number' ? dict['N'].value as number : 0;\n const decoded = this.getStreamData(obj);\n if (count <= 0 || decoded.length === 0) return;\n const header = new TextDecoder('latin1').decode(decoded.subarray(0, 10240));\n const numbers = header.split(/\\s+/, count * 2).map(n => Number.parseInt(n, 10));\n for (let i = 0; i < count; i++) {\n const objNum = numbers[i * 2];\n if (!Number.isFinite(objNum)) break;\n const key = `${objNum} 0`;\n if (!this.objects.has(key) && !this.compressedObjects.has(key)) {\n this.compressedObjects.set(key, { streamObjNum, index: i });\n }\n }\n }\n\n private parseXRefEntry(entryStr: string, startObj: number, index: number): void {\n const entryMatch = /(\\d{10})\\s+(\\d{5})\\s+([fn])/.exec(entryStr);\n if (!entryMatch) return;\n const entryOffset = Number.parseInt(entryMatch[1], 10);\n const gen = Number.parseInt(entryMatch[2], 10);\n if (entryMatch[3] === 'f') return;\n const key = `${startObj + index} ${gen}`;\n if (!this.objects.has(key)) {\n this.objects.set(key, { offset: entryOffset, gen });\n }\n }\n\n /** Adopts the section's trailer; returns the /Prev offset it names, if any. */\n private parseTrailerDict(offset: number): number | null {\n const trailerPos = this.text.indexOf('trailer', offset);\n if (trailerPos === -1) return null;\n const dictStart = this.text.indexOf('<<', trailerPos);\n if (dictStart === -1) return null;\n const result = this.parseObjectAt(dictStart);\n if (result.obj.type !== 'dict') return null;\n const dict = result.obj.value as Record<string, PdfObject>;\n this.trailer ??= dict;\n return this.prevOffset(dict);\n }\n\n private prevOffset(dict: Record<string, PdfObject>): number | null {\n const prev = dict['Prev'];\n return prev?.type === 'number' ? prev.value as number : null;\n }\n\n /** Smallest an entry can be: 10 + 1 + 5 + 1 + 1 characters, with no terminator. */\n private static readonly MIN_XREF_ENTRY_CHARS = 18;\n\n private parseTraditionalXRef(offset: number): number | null {\n let pos = offset + 4;\n pos = this.skipWhitespace(pos);\n\n while (pos < this.text.length) {\n if (this.text.substring(pos, pos + 7) === 'trailer') break;\n\n const headerMatch = /^(\\d+)\\s+(\\d+)/.exec(this.text.substring(pos));\n if (!headerMatch) break;\n const startObj = Number.parseInt(headerMatch[1], 10);\n const count = Number.parseInt(headerMatch[2], 10);\n pos += headerMatch[0].length;\n pos = this.skipWhitespace(pos);\n\n // The count is the file's claim; the bytes left bound what it can hold.\n const holdable = Math.ceil((this.text.length - pos) / PdfReader.MIN_XREF_ENTRY_CHARS);\n for (let i = 0; i < Math.min(count, holdable); i++) {\n if (this.text.startsWith('trailer', pos)) break;\n this.parseXRefEntry(this.text.substring(pos, pos + 20), startObj, i);\n pos += 20;\n while (pos < this.text.length && (this.text[pos] === '\\r' || this.text[pos] === '\\n' || this.text[pos] === ' ')) pos++;\n }\n }\n\n return this.parseTrailerDict(offset);\n }\n\n private readXRefField(decoded: Uint8Array, bytePos: number, fieldOffset: number, fieldWidth: number): number {\n let value = 0;\n for (let b = 0; b < fieldWidth; b++) {\n value = (value << 8) | decoded[bytePos + fieldOffset + b];\n }\n return value;\n }\n\n private getXRefIndexArray(dict: Record<string, PdfObject>): number[] {\n const indexObj = dict['Index'];\n if (indexObj?.type === 'array') {\n return (indexObj.value as PdfObject[]).map(o => o.value as number);\n }\n const sizeObj = dict['Size'];\n return [0, sizeObj ? sizeObj.value as number : 0];\n }\n\n private storeXRefEntry(fieldType: number, objKey: string, field2: number, field3: number): void {\n if (fieldType === 1) {\n if (!this.objects.has(objKey)) {\n this.objects.set(objKey, { offset: field2, gen: field3 });\n }\n } else if (fieldType === 2) {\n if (!this.compressedObjects.has(objKey)) {\n this.compressedObjects.set(objKey, { streamObjNum: field2, index: field3 });\n }\n }\n }\n\n private processXRefStreamEntries(decoded: Uint8Array, w: number[], indexArr: number[]): void {\n const entrySize = w[0] + w[1] + w[2];\n let bytePos = 0;\n\n for (let s = 0; s < indexArr.length; s += 2) {\n const startObj = indexArr[s];\n const count = indexArr[s + 1];\n for (let i = 0; i < count; i++) {\n if (bytePos + entrySize > decoded.length) break;\n const fieldType = w[0] > 0 ? this.readXRefField(decoded, bytePos, 0, w[0]) : 1;\n const field2 = this.readXRefField(decoded, bytePos, w[0], w[1]);\n const field3 = this.readXRefField(decoded, bytePos, w[0] + w[1], w[2]);\n bytePos += entrySize;\n\n const gen = fieldType === 1 ? field3 : 0;\n const key = `${startObj + i} ${gen}`;\n this.storeXRefEntry(fieldType, key, field2, field3);\n }\n }\n }\n\n /** An xref stream entry is three fields of 0-8 bytes; all-zero widths would consume no input. */\n private static isValidXRefWidths(w: number[]): boolean {\n return w.length >= 3\n && w.every(width => Number.isInteger(width) && width >= 0 && width <= 8)\n && w[0] + w[1] + w[2] > 0;\n }\n\n /** Adopts the section's entries and trailer; returns the /Prev offset it names, if any. */\n private parseXRefStream(offset: number): number | null {\n const result = this.parseObjectAt(offset);\n const obj = result.obj;\n if (obj.type !== 'stream' || !obj.stream) throw new Error('Expected xref stream');\n const dict = obj.value as Record<string, PdfObject>;\n const streamData = obj.stream;\n\n this.trailer ??= dict;\n\n const wArr = dict['W'];\n if (wArr?.type !== 'array') throw new Error('Missing /W in xref stream');\n const w = (wArr.value as PdfObject[]).map(o => o.value as number);\n if (!PdfReader.isValidXRefWidths(w)) throw new Error('Invalid /W in xref stream');\n\n const indexArr = this.getXRefIndexArray(dict);\n const decoded = this.decodeStreamData(dict, streamData);\n this.processXRefStreamEntries(decoded, w, indexArr);\n return this.prevOffset(dict);\n }\n\n private skipWhitespace(pos: number): number {\n while (pos < this.text.length && ' \\t\\r\\n\\0\\f'.includes(this.text[pos])) pos++;\n return pos;\n }\n\n private resolveStreamLength(dict: Record<string, PdfObject>): number {\n const lengthObj = dict['Length'];\n if (!lengthObj) return 0;\n const length = lengthObj.type === 'ref' ? this.resolveRef(lengthObj) : lengthObj;\n return typeof length.value === 'number' ? length.value : 0;\n }\n\n private parseObjectAt(offset: number): { obj: PdfObject; endPos: number } {\n let pos = offset;\n pos = this.skipWhitespace(pos);\n\n const objHeaderMatch = /^(\\d+)\\s+(\\d+)\\s+obj\\s*/.exec(this.text.substring(pos));\n if (objHeaderMatch) {\n pos += objHeaderMatch[0].length;\n }\n\n const result = this.parseValue(pos);\n pos = result.endPos;\n pos = this.skipWhitespace(pos);\n\n if (this.text.substring(pos, pos + 6) !== 'stream') {\n return result;\n }\n\n pos += 6;\n if (this.text[pos] === '\\r') pos++;\n if (this.text[pos] === '\\n') pos++;\n\n const dict = result.obj.value as Record<string, PdfObject>;\n let streamLength = this.resolveStreamLength(dict);\n\n if (streamLength <= 0 || pos + streamLength > this.data.length) {\n const endIdx = this.text.indexOf('endstream', pos);\n streamLength = endIdx === -1 ? 0 : endIdx - pos;\n }\n\n const streamData = this.data.slice(pos, pos + streamLength);\n pos += streamLength;\n\n return {\n obj: { type: 'stream', value: dict, stream: streamData },\n endPos: pos,\n };\n }\n\n private parseValue(pos: number): { obj: PdfObject; endPos: number } {\n pos = this.skipWhitespace(pos);\n if (pos >= this.text.length) return { obj: { type: 'null', value: null }, endPos: pos };\n\n const ch = this.text[pos];\n const ch2 = pos + 1 < this.text.length ? this.text[pos + 1] : '';\n\n if (ch === '<' && ch2 === '<') {\n return this.parseNested(pos, () => this.parseDict(pos));\n }\n if (ch === '<') {\n return this.parseHexString(pos);\n }\n if (ch === '(') {\n return this.parseLiteralString(pos);\n }\n if (ch === '/') {\n return this.parseName(pos);\n }\n if (ch === '[') {\n return this.parseNested(pos, () => this.parseArray(pos));\n }\n if (ch === 't' && this.text.substring(pos, pos + 4) === 'true') {\n return { obj: { type: 'boolean', value: true }, endPos: pos + 4 };\n }\n if (ch === 'f' && this.text.substring(pos, pos + 5) === 'false') {\n return { obj: { type: 'boolean', value: false }, endPos: pos + 5 };\n }\n if (ch === 'n' && this.text.substring(pos, pos + 4) === 'null') {\n return { obj: { type: 'null', value: null }, endPos: pos + 4 };\n }\n\n return this.parseNumberOrRef(pos);\n }\n\n private parseNumberOrRef(pos: number): { obj: PdfObject; endPos: number } {\n const numMatch = /^([+-]?\\d+\\.?\\d*|[+-]?\\.\\d+)/.exec(this.text.substring(pos));\n if (!numMatch) {\n return { obj: { type: 'null', value: null }, endPos: pos + 1 };\n }\n const num = Number.parseFloat(numMatch[1]);\n const afterNum = pos + numMatch[0].length;\n const refMatch = /^\\s+(\\d+)\\s+R/.exec(this.text.substring(afterNum));\n if (refMatch) {\n const gen = Number.parseInt(refMatch[1], 10);\n return {\n obj: { type: 'ref', value: `${Math.floor(num)} ${gen}` },\n endPos: afterNum + refMatch[0].length,\n };\n }\n return { obj: { type: 'number', value: num }, endPos: afterNum };\n }\n\n /**\n * Parses the container at `pos` unless it would open past the nesting cap.\n * One that would is skipped whole and read as null: following it down costs\n * a stack frame per level, and a file can nest to its own length.\n */\n private parseNested(pos: number, parse: () => { obj: PdfObject; endPos: number }): { obj: PdfObject; endPos: number } {\n if (this.nesting >= this.limits.maxNestingDepth) {\n return { obj: { type: 'null', value: null }, endPos: this.skipContainer(pos) };\n }\n this.nesting++;\n try {\n return parse();\n } finally {\n this.nesting--;\n }\n }\n\n /** The end of the dictionary or array opening at `pos`, found without recursion. */\n private skipContainer(pos: number): number {\n let depth = 0;\n let i = pos;\n while (i < this.text.length) {\n const ch = this.text[i];\n const pair = ch + this.text.charAt(i + 1);\n if (ch === '(') {\n i = this.parseLiteralString(i).endPos;\n } else if (pair === '<<' || pair === '>>') {\n depth += pair === '<<' ? 1 : -1;\n i += 2;\n } else if (ch === '<') {\n // Not parseHexString: malformed hex is skipped, not decoded.\n const close = this.text.indexOf('>', i);\n i = close === -1 ? this.text.length : close + 1;\n } else {\n depth += PdfReader.bracketDelta(ch);\n i++;\n }\n if (depth <= 0) return i;\n }\n return i;\n }\n\n private static bracketDelta(ch: string): number {\n if (ch === '[') return 1;\n return ch === ']' ? -1 : 0;\n }\n\n private parseDict(pos: number): { obj: PdfObject; endPos: number } {\n pos += 2;\n const dict: Record<string, PdfObject> = {};\n while (pos < this.text.length) {\n pos = this.skipWhitespace(pos);\n if (this.text[pos] === '>' && this.text[pos + 1] === '>') {\n return { obj: { type: 'dict', value: dict }, endPos: pos + 2 };\n }\n if (this.text[pos] !== '/') {\n pos++;\n continue;\n }\n const nameResult = this.parseName(pos);\n const key = nameResult.obj.value as string;\n pos = nameResult.endPos;\n const valResult = this.parseValue(pos);\n dict[key] = valResult.obj;\n pos = valResult.endPos;\n }\n return { obj: { type: 'dict', value: dict }, endPos: pos };\n }\n\n private parseArray(pos: number): { obj: PdfObject; endPos: number } {\n pos += 1;\n const arr: PdfObject[] = [];\n while (pos < this.text.length) {\n pos = this.skipWhitespace(pos);\n if (this.text[pos] === ']') {\n return { obj: { type: 'array', value: arr }, endPos: pos + 1 };\n }\n const result = this.parseValue(pos);\n arr.push(result.obj);\n pos = result.endPos;\n }\n return { obj: { type: 'array', value: arr }, endPos: pos };\n }\n\n private parseName(pos: number): { obj: PdfObject; endPos: number } {\n pos += 1;\n let name = '';\n while (pos < this.text.length) {\n const c = this.text[pos];\n if (' \\t\\r\\n\\0\\f/<>[](){}%'.includes(c)) break;\n if (c === '#' && pos + 2 < this.text.length) {\n name += String.fromCodePoint(Number.parseInt(this.text.substring(pos + 1, pos + 3), 16));\n pos += 3;\n } else {\n name += c;\n pos++;\n }\n }\n return { obj: { type: 'name', value: name }, endPos: pos };\n }\n\n private parseOctalEscape(pos: number): { char: string; endPos: number } {\n let octal = this.text[pos];\n if (pos + 1 < this.text.length && this.text[pos + 1] >= '0' && this.text[pos + 1] <= '7') {\n pos++;\n octal += this.text[pos];\n if (pos + 1 < this.text.length && this.text[pos + 1] >= '0' && this.text[pos + 1] <= '7') {\n pos++;\n octal += this.text[pos];\n }\n }\n return { char: String.fromCodePoint(Number.parseInt(octal, 8)), endPos: pos };\n }\n\n private processEscapeChar(pos: number, escapeMap: Record<string, string>): { char: string; endPos: number } {\n pos++;\n const esc = this.text[pos];\n const mapped = escapeMap[esc];\n if (mapped) {\n return { char: mapped, endPos: pos + 1 };\n }\n if (esc >= '0' && esc <= '7') {\n const octalResult = this.parseOctalEscape(pos);\n return { char: octalResult.char, endPos: octalResult.endPos + 1 };\n }\n return { char: esc, endPos: pos + 1 };\n }\n\n private parseLiteralString(pos: number): { obj: PdfObject; endPos: number } {\n pos += 1;\n let str = '';\n let depth = 1;\n const escapeMap: Record<string, string> = {\n 'n': '\\n', 'r': '\\r', 't': '\\t', 'b': '\\b', 'f': '\\f',\n '(': '(', ')': ')', '\\\\': '\\\\',\n };\n while (pos < this.text.length && depth > 0) {\n const c = this.text[pos];\n if (c === '\\\\' && pos + 1 < this.text.length) {\n const result = this.processEscapeChar(pos, escapeMap);\n str += result.char;\n pos = result.endPos;\n } else if (c === '(') {\n depth++;\n str += c;\n pos++;\n } else if (c === ')') {\n depth--;\n if (depth > 0) { str += c; }\n pos++;\n } else {\n str += c;\n pos++;\n }\n }\n return { obj: { type: 'string', value: str }, endPos: pos };\n }\n\n private parseHexString(pos: number): { obj: PdfObject; endPos: number } {\n pos += 1;\n let hex = '';\n while (pos < this.text.length && this.text[pos] !== '>') {\n const c = this.text[pos];\n if (!' \\t\\r\\n\\0\\f'.includes(c)) hex += c;\n pos++;\n }\n if (this.text[pos] === '>') pos++;\n if (hex.length % 2 !== 0) hex += '0';\n let str = '';\n for (let i = 0; i < hex.length; i += 2) {\n str += String.fromCodePoint(Number.parseInt(hex.substring(i, i + 2), 16));\n }\n return { obj: { type: 'string', value: str }, endPos: pos };\n }\n\n private parseObjectStream(streamObjNum: number): void {\n const streamKey = `${streamObjNum} 0`;\n const streamEntry = this.objects.get(streamKey);\n if (!streamEntry) return;\n\n const streamResult = this.parseObjectAt(streamEntry.offset);\n const streamObj = streamResult.obj;\n if (streamObj.type !== 'stream' || !streamObj.stream) return;\n\n const dict = streamObj.value as Record<string, PdfObject>;\n const n = this.getNumber(dict['N']);\n const first = this.getNumber(dict['First']);\n if (n <= 0 || first <= 0) return;\n\n const decoded = this.decodeStreamData(dict, streamObj.stream);\n const decodedText = new TextDecoder('latin1').decode(decoded);\n const headerParts = decodedText.substring(0, first).trim().split(/\\s+/);\n\n const savedText = this.text;\n const savedData = this.data;\n this.text = decodedText;\n this.data = decoded;\n\n try {\n for (let i = 0; i + 1 < headerParts.length && i / 2 < n; i += 2) {\n const objNum = Number.parseInt(headerParts[i], 10);\n const byteOffset = Number.parseInt(headerParts[i + 1], 10);\n const key = `${objNum} 0`;\n\n if (this.parsedObjects.has(key)) continue;\n\n const result = this.parseValue(first + byteOffset);\n this.parsedObjects.set(key, result.obj);\n }\n } finally {\n this.text = savedText;\n this.data = savedData;\n }\n }\n\n resolveRef(obj: PdfObject): PdfObject {\n if (obj.type !== 'ref') return obj;\n const key = obj.value as string;\n const cached = this.parsedObjects.get(key);\n if (cached) return cached;\n\n const entry = this.objects.get(key);\n if (!entry) {\n const compressed = this.compressedObjects.get(key);\n if (!compressed) return { type: 'null', value: null };\n this.parseObjectStream(compressed.streamObjNum);\n return this.parsedObjects.get(key) ?? { type: 'null', value: null };\n }\n\n if (this.resolving.has(key)) return { type: 'null', value: null };\n this.resolving.add(key);\n try {\n const result = this.parseObjectAt(entry.offset);\n this.parsedObjects.set(key, result.obj);\n return result.obj;\n } finally {\n this.resolving.delete(key);\n }\n }\n\n /**\n * Follow a chain of indirect references to the object it ends at.\n *\n * A document is untrusted input, and a malformed or hostile one can point\n * object A at B and B back at A. Following blindly recursed until the stack\n * gave out, so each reference is visited at most once and a cycle resolves\n * to null rather than spinning.\n */\n resolveDeep(obj: PdfObject): PdfObject {\n let current = obj;\n const seen = new Set<string>();\n while (current.type === 'ref') {\n const key = current.value as string;\n if (seen.has(key)) return { type: 'null', value: null };\n seen.add(key);\n current = this.resolveRef(current);\n }\n return current;\n }\n\n getDict(obj: PdfObject): Record<string, PdfObject> {\n const resolved = this.resolveDeep(obj);\n if (resolved.type === 'dict' || resolved.type === 'stream') {\n return resolved.value as Record<string, PdfObject>;\n }\n return {};\n }\n\n getArray(obj: PdfObject): PdfObject[] {\n const resolved = this.resolveDeep(obj);\n if (resolved.type === 'array') return resolved.value as PdfObject[];\n return [];\n }\n\n getNumber(obj: PdfObject | undefined): number {\n if (!obj) return 0;\n const resolved = this.resolveDeep(obj);\n return resolved.type === 'number' ? resolved.value as number : 0;\n }\n\n getString(obj: PdfObject | undefined): string {\n if (!obj) return '';\n const resolved = this.resolveDeep(obj);\n if (resolved.type === 'string' || resolved.type === 'name') return resolved.value as string;\n return '';\n }\n\n private getDecodeParmsArray(dict: Record<string, PdfObject>, filterCount: number): Array<Record<string, PdfObject>> {\n const dpObj = dict['DecodeParms'] ?? dict['DP'];\n if (!dpObj) return new Array<Record<string, PdfObject>>(filterCount).fill({});\n const resolved = this.resolveDeep(dpObj);\n if (resolved.type === 'dict') {\n const d = resolved.value as Record<string, PdfObject>;\n return new Array<Record<string, PdfObject>>(filterCount).fill(d);\n }\n if (resolved.type === 'array') {\n return (resolved.value as PdfObject[]).map(item => {\n const r = this.resolveDeep(item);\n if (r.type === 'dict') return r.value as Record<string, PdfObject>;\n return {};\n });\n }\n return new Array<Record<string, PdfObject>>(filterCount).fill({});\n }\n\n private applyFlatePredictor(data: Uint8Array, parms: Record<string, PdfObject>): Uint8Array {\n const predictor = this.getNumber(parms['Predictor']);\n if (predictor <= 1) return data;\n const columns = this.getNumber(parms['Columns']) || 1;\n const colors = this.getNumber(parms['Colors']) || 1;\n const bpc = this.getNumber(parms['BitsPerComponent']) || 8;\n\n if (predictor >= 10) {\n return applyPngPredictor(data, columns, colors, bpc);\n }\n return data;\n }\n\n private resolveFilterNames(filterObj: PdfObject): string[] {\n const resolved = this.resolveDeep(filterObj);\n if (resolved.type === 'name') return [resolved.value as string];\n if (resolved.type === 'array') {\n const names: string[] = [];\n for (const f of resolved.value as PdfObject[]) {\n const rf = this.resolveDeep(f);\n if (rf.type === 'name') names.push(rf.value as string);\n }\n return names;\n }\n return [];\n }\n\n private applyFilter(data: Uint8Array, filter: string, parms: Record<string, PdfObject>): Uint8Array | null {\n if (filter === 'FlateDecode' || filter === 'Fl') {\n return this.applyFlatePredictor(\n zlibInflate(data, { maxOutputBytes: MAX_DECODED_STREAM_BYTES }),\n parms,\n );\n }\n if (filter === 'ASCIIHexDecode' || filter === 'AHx') return decodeASCIIHex(data);\n if (filter === 'ASCII85Decode' || filter === 'A85') return decodeASCII85(data);\n if (filter === 'LZWDecode' || filter === 'LZW') {\n const earlyChange = this.getNumber(parms['EarlyChange']);\n return this.applyFlatePredictor(decodeLZW(data, earlyChange === 0 ? 0 : 1), parms);\n }\n if (filter === 'RunLengthDecode' || filter === 'RL') return decodeRunLength(data);\n if (filter === 'CCITTFaxDecode' || filter === 'CCF') return decodeCCITTFax(data, parms, this);\n if (filter === 'JBIG2Decode') return null;\n return data;\n }\n\n decodeStreamData(dict: Record<string, PdfObject>, rawStream: Uint8Array): Uint8Array {\n const filterObj = dict['Filter'];\n if (!filterObj) return rawStream;\n\n if (this.decodeBudget.spent) return new Uint8Array(0);\n const filters = this.resolveFilterNames(filterObj);\n const decodeParms = this.getDecodeParmsArray(dict, filters.length);\n let result = rawStream;\n\n for (let fi = 0; fi < filters.length; fi++) {\n try {\n const decoded = this.applyFilter(result, filters[fi], decodeParms[fi] ?? {});\n if (decoded === null) return rawStream;\n result = decoded;\n } catch {\n return rawStream;\n }\n }\n // A stream referenced from many places is decoded again at each one; the\n // budget is what keeps those repeats from adding up to gigabytes. Past\n // it the stream reads as empty, and the budget is spent so the next\n // reference is refused before it decodes anything.\n if (this.decodeBudget.take(result.length)) return result;\n this.decodeBudget.spendRemainder();\n return new Uint8Array(0);\n }\n\n getStreamData(obj: PdfObject): Uint8Array {\n const resolved = this.resolveDeep(obj);\n if (resolved.type === 'stream' && resolved.stream) {\n const dict = resolved.value as Record<string, PdfObject>;\n return this.decodeStreamData(dict, resolved.stream);\n }\n return new Uint8Array(0);\n }\n\n getTrailer(): Record<string, PdfObject> {\n return this.trailer ?? {};\n }\n\n private isCatalogDict(obj: PdfObject): Record<string, PdfObject> | null {\n if (obj.type !== 'dict' && obj.type !== 'stream') return null;\n const dict = obj.value as Record<string, PdfObject>;\n const typeStr = dict['Type'] ? this.getString(dict['Type']) : '';\n return typeStr === 'Catalog' ? dict : null;\n }\n\n getRoot(): Record<string, PdfObject> {\n const trailer = this.getTrailer();\n const rootRef = trailer['Root'];\n if (rootRef) return this.getDict(rootRef);\n\n for (const [, obj] of this.parsedObjects) {\n const catalog = this.isCatalogDict(obj);\n if (catalog) return catalog;\n }\n for (const [key] of this.objects) {\n const obj = this.resolveRef({ type: 'ref', value: key });\n const catalog = this.isCatalogDict(obj);\n if (catalog) return catalog;\n }\n\n return {};\n }\n\n getPages(): PdfObject[] {\n const root = this.getRoot();\n const pagesRef = root['Pages'];\n if (!pagesRef) return [];\n return this.collectPages(pagesRef);\n }\n\n private static readonly INHERITABLE_PAGE_KEYS = ['Resources', 'MediaBox', 'CropBox', 'Rotate'] as const;\n\n /**\n * Walks the page tree depth-first, in page order. Each node is visited once,\n * so a /Kids that lists an ancestor, or the same child many times, yields\n * every distinct page once; the walk keeps its own stack, so a tree of any\n * depth costs no call stack.\n */\n private collectPages(root: PdfObject): PdfObject[] {\n const pages: PdfObject[] = [];\n const seen = new Set<PdfObject>();\n const pending: Array<{ node: PdfObject; inherited: Record<string, PdfObject> }> = [{ node: root, inherited: {} }];\n for (let next = pending.pop(); next && pages.length < this.limits.maxPages; next = pending.pop()) {\n const resolved = this.resolveDeep(next.node);\n if (!visitOnce(seen, resolved)) continue;\n const dict = this.getDict(resolved);\n const kids = dict['Kids'];\n\n if (this.getString(dict['Type']) === 'Page' || (!kids && dict['Contents'])) {\n this.applyInheritedPageKeys(dict, next.inherited);\n pages.push(resolved);\n } else if (kids) {\n const inherited = this.mergeInheritablePageKeys(dict, next.inherited);\n // Pushed last-first, so the first kid is popped first.\n for (const kid of this.getArray(kids).reverse()) pending.push({ node: kid, inherited });\n }\n }\n return pages;\n }\n\n private applyInheritedPageKeys(dict: Record<string, PdfObject>, inherited: Record<string, PdfObject>): void {\n for (const key of PdfReader.INHERITABLE_PAGE_KEYS) {\n if (!dict[key] && inherited[key]) dict[key] = inherited[key];\n }\n }\n\n private mergeInheritablePageKeys(\n dict: Record<string, PdfObject>,\n inherited: Record<string, PdfObject>,\n ): Record<string, PdfObject> {\n const merged = { ...inherited };\n for (const key of PdfReader.INHERITABLE_PAGE_KEYS) {\n if (dict[key]) merged[key] = dict[key];\n }\n return merged;\n }\n\n isEncrypted(): boolean {\n const trailer = this.getTrailer();\n return !!trailer['Encrypt'];\n }\n}\n\n// ── Content stream parser ───────────────────────────────────────────────\n\nconst PDF_DOC_ENCODING: Record<number, string> = {\n 0x80: '\\u2022', 0x81: '\\u2020', 0x82: '\\u2021', 0x83: '\\u2026',\n 0x84: '\\u2014', 0x85: '\\u2013', 0x86: '\\u0192', 0x87: '\\u2044',\n 0x88: '\\u2039', 0x89: '\\u203A', 0x8A: '\\u2212', 0x8B: '\\u2030',\n 0x8C: '\\u201E', 0x8D: '\\u201C', 0x8E: '\\u201D', 0x8F: '\\u2018',\n 0x90: '\\u2019', 0x91: '\\u201A', 0x92: '\\u2122', 0x93: '\\uFB01',\n 0x94: '\\uFB02', 0x95: '\\u0141', 0x96: '\\u0152', 0x97: '\\u0160',\n 0x98: '\\u0178', 0x99: '\\u017D', 0x9A: '\\u0131', 0x9B: '\\u0142',\n 0x9C: '\\u0153', 0x9D: '\\u0161', 0x9E: '\\u017E', 0xA0: '\\u20AC',\n 0xAD: '\\u02C7',\n};\n\nfunction decodeTwoByteChar(code: number, toUnicode: Map<number, string>): string {\n const mapped = toUnicode.get(code);\n if (mapped !== undefined) {\n return mapped;\n }\n\n const lo = code & 0xFF;\n const loMapped = toUnicode.get(lo);\n if (loMapped !== undefined) {\n return loMapped;\n }\n\n if (code >= 0x20 && code < 0xFFFE) {\n const ch = String.fromCodePoint(code);\n if (isValidDecodedChar(code)) {\n return ch;\n }\n }\n\n if (lo >= 0x20 && lo < 0x7F) {\n return String.fromCodePoint(lo);\n }\n\n return '';\n}\n\nconst VALID_DECODED_CHAR_RANGES: ReadonlyArray<[number, number]> = [\n [0x0020, 0x007E], [0x00A0, 0x024F], [0x0370, 0x03FF], [0x0400, 0x04FF],\n [0x0500, 0x05FF], [0x0600, 0x06FF], [0x0900, 0x097F], [0x2000, 0x206F],\n [0x2010, 0x2027], [0x20A0, 0x20CF], [0xFB1D, 0xFB4F], [0xFB50, 0xFDFF],\n [0xFE70, 0xFEFF],\n];\n\nfunction isValidDecodedChar(code: number): boolean {\n return VALID_DECODED_CHAR_RANGES.some(([lo, hi]) => code >= lo && code <= hi);\n}\n\nfunction decodeTwoByteString(raw: string, fontInfo: FontInfo): { result: string; charCodes: number[] } {\n let result = '';\n const charCodes: number[] = [];\n for (let i = 0; i + 1 < raw.length; i += 2) {\n const code = ((raw.codePointAt(i) ?? 0) << 8) | (raw.codePointAt(i + 1) ?? 0);\n charCodes.push(code);\n result += decodeTwoByteChar(code, fontInfo.toUnicode);\n }\n if (raw.length % 2 === 1) {\n const code = raw.codePointAt(raw.length - 1) ?? 0;\n charCodes.push(code);\n result += decodeTwoByteChar(code, fontInfo.toUnicode);\n }\n return { result, charCodes };\n}\n\nfunction decodeSingleByteString(raw: string, toUnicode?: Map<number, string>): { result: string; charCodes: number[] } {\n let result = '';\n const charCodes: number[] = [];\n for (let i = 0; i < raw.length; i++) {\n const code = raw.codePointAt(i) ?? 0;\n charCodes.push(code);\n const unicodeMapped = toUnicode?.get(code);\n if (unicodeMapped !== undefined) {\n result += unicodeMapped;\n } else if (PDF_DOC_ENCODING[code]) {\n result += PDF_DOC_ENCODING[code];\n } else {\n result += raw[i];\n }\n }\n return { result, charCodes };\n}\n\nfunction pdfStringToUnicode(\n raw: string,\n fontInfo?: FontInfo,\n): { text: string; charCodes: number[] } {\n if (fontInfo?.isTwoByte) {\n const { result, charCodes } = decodeTwoByteString(raw, fontInfo);\n return { text: result, charCodes };\n }\n const { result, charCodes } = decodeSingleByteString(raw, fontInfo?.toUnicode);\n return { text: result, charCodes };\n}\n\nconst WHITESPACE = /\\s/;\n\n/**\n * The text between each `begin` marker (plus the one whitespace character that\n * must follow it) and the next `end`, in order. Found with indexOf: a lazy\n * regex retries from every unterminated `begin` and rescans to the end of the\n * text each time, which is quadratic. Once no `end` is left, no later section\n * can close either, so the scan stops.\n */\nfunction* markedSections(text: string, begin: string, end: string): Generator<string> {\n let from = 0;\n for (let start = text.indexOf(begin, from); start !== -1; start = text.indexOf(begin, from)) {\n const bodyStart = start + begin.length + 1;\n if (!WHITESPACE.test(text.charAt(bodyStart - 1))) {\n from = start + 1;\n continue;\n }\n const close = text.indexOf(end, bodyStart);\n if (close === -1) return;\n yield text.slice(bodyStart, close);\n from = close + end.length;\n }\n}\n\nfunction parseBfCharEntries(text: string, map: Map<number, string>): void {\n for (const section of markedSections(text, 'beginbfchar', 'endbfchar')) {\n for (const entry of section.trim().split('\\n')) {\n const parts = /<([0-9a-fA-F]+)>\\s*<([0-9a-fA-F]+)>/.exec(entry.trim());\n if (!parts) continue;\n const srcCode = Number.parseInt(parts[1], 16);\n map.set(srcCode, hexToUnicodeStr(parts[2]));\n }\n }\n}\n\nfunction hexToUnicodeStr(hex: string): string {\n let result = '';\n for (let i = 0; i < hex.length; i += 4) {\n result += String.fromCodePoint(Number.parseInt(hex.substring(i, i + 4), 16));\n }\n return result;\n}\n\nfunction parseBfRangeArrayEntry(arrayParts: RegExpExecArray, map: Map<number, string>): void {\n const start = Number.parseInt(arrayParts[1], 16);\n const end = Number.parseInt(arrayParts[2], 16);\n const values = [...arrayParts[3].matchAll(/<([0-9a-fA-F]+)>/g)];\n const count = Math.min(values.length, end - start + 1);\n for (let i = 0; i < count; i++) {\n map.set(start + i, hexToUnicodeStr(values[i][1]));\n }\n}\n\nfunction parseBfRangeSimpleEntry(parts: RegExpExecArray, map: Map<number, string>): void {\n const start = Number.parseInt(parts[1], 16);\n const end = Number.parseInt(parts[2], 16);\n if (end - start > 10000) return;\n let dstStart = Number.parseInt(parts[3], 16);\n for (let code = start; code <= end; code++) {\n map.set(code, String.fromCodePoint(dstStart++));\n }\n}\n\nfunction parseBfRangeEntry(trimmed: string, map: Map<number, string>): void {\n const arrayParts = /<([0-9a-fA-F]+)>\\s*<([0-9a-fA-F]+)>\\s*\\[\\s*((?:<[\\dA-Fa-f]+>\\s*)+)\\]/.exec(trimmed);\n if (arrayParts) {\n parseBfRangeArrayEntry(arrayParts, map);\n return;\n }\n const parts = /<([0-9a-fA-F]+)>\\s*<([0-9a-fA-F]+)>\\s*<([0-9a-fA-F]+)>/.exec(trimmed);\n if (parts) {\n parseBfRangeSimpleEntry(parts, map);\n }\n}\n\nfunction parseBfRangeEntries(text: string, map: Map<number, string>): void {\n for (const section of markedSections(text, 'beginbfrange', 'endbfrange')) {\n for (const entry of section.trim().split('\\n')) {\n parseBfRangeEntry(entry.trim(), map);\n }\n }\n}\n\nfunction canInterpolateGap(\n prevGlyph: number, nextGlyph: number, prevUnicode: string, nextUnicode: string,\n): { prevCode: number; glyphGap: number } | null {\n const glyphGap = nextGlyph - prevGlyph;\n if (glyphGap <= 1 || glyphGap > 32) return null;\n if (prevGlyph < 0x20 || nextGlyph < 0x20) return null;\n if (prevUnicode.length !== 1 || nextUnicode.length !== 1) return null;\n const prevCode = prevUnicode.codePointAt(0) ?? 0;\n const nextCode = nextUnicode.codePointAt(0) ?? 0;\n if (prevCode < 0x20 || nextCode < 0x20) return null;\n if (nextCode - prevCode !== glyphGap) return null;\n return { prevCode, glyphGap };\n}\n\nfunction fillToUnicodeGaps(map: Map<number, string>): void {\n const entries = [...map.entries()].sort((a, b) => a[0] - b[0]);\n for (let i = 1; i < entries.length; i++) {\n const [prevGlyph, prevUnicode] = entries[i - 1];\n const [nextGlyph, nextUnicode] = entries[i];\n const gap = canInterpolateGap(prevGlyph, nextGlyph, prevUnicode, nextUnicode);\n if (!gap) continue;\n for (let g = prevGlyph + 1; g < nextGlyph; g++) {\n if (!map.has(g)) {\n map.set(g, String.fromCodePoint(gap.prevCode + (g - prevGlyph)));\n }\n }\n }\n}\n\nfunction parseToUnicodeMap(data: Uint8Array): Map<number, string> {\n const map = new Map<number, string>();\n const text = new TextDecoder('latin1').decode(data);\n parseBfCharEntries(text, map);\n parseBfRangeEntries(text, map);\n fillToUnicodeGaps(map);\n return map;\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n const toHex = (v: number): string => Math.round(Math.min(1, Math.max(0, v)) * 255).toString(16).padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\nfunction cmykToRgbHex(c: number, m: number, y: number, k: number): string {\n const r = (1 - c) * (1 - k);\n const g = (1 - m) * (1 - k);\n const b = (1 - y) * (1 - k);\n return rgbToHex(r, g, b);\n}\n\nfunction grayToHex(g: number): string {\n return rgbToHex(g, g, g);\n}\n\nfunction isDefaultColor(color: string): boolean {\n return !color || color === '#000000' || color === '#000' || color === '';\n}\n\nfunction isNeutralColor(color: string): boolean {\n if (!color || isDefaultColor(color)) return true;\n const hex = color.replace('#', '');\n if (hex.length !== 6) return isDefaultColor(color);\n const r = Number.parseInt(hex.substring(0, 2), 16);\n const g = Number.parseInt(hex.substring(2, 4), 16);\n const b = Number.parseInt(hex.substring(4, 6), 16);\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n return (max - min) < 30 && max < 100;\n}\n\nfunction isRTLChar(code: number): boolean {\n return (code >= 0x0590 && code <= 0x05FF) ||\n (code >= 0xFB1D && code <= 0xFB4F) ||\n (code >= 0x0600 && code <= 0x06FF) ||\n (code >= 0x0750 && code <= 0x077F) ||\n (code >= 0xFB50 && code <= 0xFDFF) ||\n (code >= 0xFE70 && code <= 0xFEFF);\n}\n\nfunction hasRTLText(text: string): boolean {\n for (let i = 0; i < text.length; i++) {\n if (isRTLChar(text.codePointAt(i) ?? 0)) return true;\n }\n return false;\n}\n\nfunction isLTRCode(code: number): boolean {\n return (code >= 0x41 && code <= 0x5A) || (code >= 0x61 && code <= 0x7A)\n || (code >= 0x30 && code <= 0x39)\n || code === 0x26 || code === 0x2E; // & and . for compound LTR words like Auto&Play, Autorun.inf\n}\n\nfunction flushLtrRun(ltrRun: string): string {\n return ltrRun.trimEnd().split(' ')\n .map(w => w.split('').reverse().join(''))\n .reverse().join(' ');\n}\n\nfunction fixRTLWordChars(word: string): string {\n const chars = [...word].reverse();\n let result = '';\n let ltrRun = '';\n for (const ch of chars) {\n const code = ch.codePointAt(0) ?? 0;\n if (isLTRCode(code)) {\n ltrRun += ch;\n } else {\n if (ltrRun) {\n result += flushLtrRun(ltrRun);\n ltrRun = '';\n }\n result += ch;\n }\n }\n if (ltrRun) {\n result += flushLtrRun(ltrRun);\n }\n return result;\n}\n\nfunction fixVisualOrderRTL(text: string): string {\n if (!hasRTLText(text)) return text;\n return text.split(/(\\s+)/).map(token => hasRTLText(token) ? fixRTLWordChars(token) : token).join('');\n}\n\nfunction joinSplitHebrewFragments(text: string): string {\n return text\n .replaceAll(/\"([\\u0590-\\u05FF]+)\\s+([\\u0590-\\u05FF])(?=\\s|[^\"\\u0590-\\u05FF]|$)/g,\n (_m, p1: string, p2: string) => p1 + '\"' + p2)\n .replaceAll(/(?<![\\u0590-\\u05FF])([\\u0590-\\u05FF])\\s+([\\u0590-\\u05FF]+)\"(?=\\s|[^\"\\u0590-\\u05FF]|$)/g,\n (_m, p1: string, p2: string) => p1 + p2 + '\"');\n}\n\nfunction fixBracketsAroundLtrWords(text: string): string {\n // fixRTLWordChars inverts brackets around LTR words (e.g. \"(Default)-ה\" → \"ה-)Default(\").\n // Fix: )(LTR_word)( → (LTR_word).\n return text.replaceAll(/\\)([A-Za-z\\d][^()\\s]*)\\(/g, '($1)');\n}\n\nfunction fixSplitRoundBrackets(text: string): string {\n // PDF splits \"(word)\" into a standalone \")\" and \"word(\" (with bracket merged in visual order).\n // After word-order reversal: \") word(\". After mirrorBracketsAdjacentToRtl the trailing \"(\"\n // (adjacent to RTL) becomes \")\" giving \") word)\". Match both forms and rejoin as \"(word)\".\n return text.replaceAll(/\\) +([\\u0590-\\u05FF][^\\s()]*)[()]/g, '($1)');\n}\n\nfunction hasLatinChar(word: string): boolean {\n for (let i = 0; i < word.length; i++) {\n const c = word.codePointAt(i) ?? 0;\n if ((c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A)) return true;\n }\n return false;\n}\n\nfunction joinLtrGroup(group: string[], groupSpaces: string[]): string {\n let grouped = group[0];\n for (let j = 1; j < group.length; j++) {\n grouped += groupSpaces[j - 1] + group[j];\n }\n return grouped;\n}\n\nfunction flushLtrGroup(units: string[], ltrGroup: string[], ltrSpaces: string[]): void {\n if (ltrGroup.length > 0) {\n units.push(joinLtrGroup(ltrGroup, ltrSpaces));\n ltrGroup.length = 0;\n ltrSpaces.length = 0;\n }\n}\n\nfunction collectRTLUnits(words: string[], spaces: string[]): string[] {\n const units: string[] = [];\n const ltrGroup: string[] = [];\n const ltrSpaces: string[] = [];\n\n for (let i = 0; i < words.length; i++) {\n const firstCode = words[i].codePointAt(0) ?? 0;\n const isLtrWord = hasLatinChar(words[i]) && !isRTLChar(firstCode);\n if (isLtrWord) {\n if (ltrGroup.length > 0) {\n ltrSpaces.push(i > 0 ? spaces[i - 1] : ' ');\n }\n ltrGroup.push(words[i]);\n } else {\n flushLtrGroup(units, ltrGroup, ltrSpaces);\n units.push(words[i]);\n }\n }\n flushLtrGroup(units, ltrGroup, ltrSpaces);\n return units;\n}\n\nfunction findLtrStart(text: string): number {\n for (let i = 0; i < text.length; i++) {\n if (isLTRCode(text.codePointAt(i) ?? 0)) return i;\n }\n return -1;\n}\n\nfunction tryReattachPrefix(\n unit: string, next: string, ltrStart: number, result: string[],\n): boolean {\n const charBeforeLtr = unit.codePointAt(ltrStart - 1) ?? 0;\n if (charBeforeLtr === 0x22) {\n const hebrewPrefix = unit.substring(0, ltrStart - 1);\n const ltrSuffix = unit.substring(ltrStart) + '\"';\n result.push(hebrewPrefix + next, ltrSuffix);\n return true;\n }\n if (isRTLChar(charBeforeLtr)) {\n result.push(unit.substring(0, ltrStart) + next, unit.substring(ltrStart));\n return true;\n }\n return false;\n}\n\nfunction reattachHebrewPrefixes(units: string[]): string[] {\n const result: string[] = [];\n for (let i = 0; i < units.length; i++) {\n const unit = units[i];\n const next = i + 1 < units.length ? units[i + 1] : null;\n if (next !== null && hasLatinChar(unit) && hasRTLText(unit) && !hasRTLText(next)) {\n const ltrStart = findLtrStart(unit);\n if (ltrStart > 0 && tryReattachPrefix(unit, next, ltrStart, result)) {\n i++;\n continue;\n }\n }\n result.push(unit);\n }\n return result;\n}\n\nfunction fixLeadingPunctuation(units: string[]): string[] {\n return units.map(unit => {\n if (unit.length < 2 || hasRTLText(unit)) return unit;\n let end = 0;\n while (end < unit.length) {\n const code = unit.codePointAt(end) ?? 0;\n if (code === 0x2E || code === 0x21 || code === 0x3F || code === 0x2C || code === 0x3A) end++;\n else break;\n }\n if (end > 0 && end < unit.length) return unit.slice(end) + unit.slice(0, end);\n return unit;\n });\n}\n\nfunction mirrorBracketCode(code: number): number {\n if (code === 0x28) return 0x29;\n if (code === 0x29) return 0x28;\n if (code === 0x5B) return 0x5D;\n if (code === 0x5D) return 0x5B;\n return code;\n}\n\nfunction isBracketCode(code: number): boolean {\n return code === 0x28 || code === 0x29 || code === 0x5B || code === 0x5D;\n}\n\nfunction isSquareBracketCode(code: number): boolean {\n return code === 0x5B || code === 0x5D;\n}\n\nfunction hasMatchingCloseBracket(text: string, openCode: number): boolean {\n const closeCode = mirrorBracketCode(openCode);\n for (const ch of text.slice(1)) {\n if ((ch.codePointAt(0) ?? 0) === closeCode) return true;\n }\n return false;\n}\n\nfunction fixSquareBracketUnit(unit: string, firstCode: number): string {\n const lastCode = unit.codePointAt(unit.length - 1) ?? 0;\n const mirroredFirst = mirrorBracketCode(firstCode);\n if (isBracketCode(lastCode) && mirroredFirst === lastCode) {\n const mirroredLast = mirrorBracketCode(lastCode);\n return String.fromCodePoint(mirroredFirst) + unit.slice(1, -1) + String.fromCodePoint(mirroredLast);\n }\n return String.fromCodePoint(mirroredFirst) + unit.slice(1);\n}\n\nfunction fixRoundBracketUnit(unit: string, firstCode: number): string {\n const rest = unit.slice(1);\n const mirrored = String.fromCodePoint(mirrorBracketCode(firstCode));\n let insertPos = rest.length;\n while (insertPos > 0) {\n const code = rest.codePointAt(insertPos - 1) ?? 0;\n if (code === 0x2E || code === 0x21 || code === 0x3F) insertPos--;\n else break;\n }\n return rest.slice(0, insertPos) + mirrored + rest.slice(insertPos);\n}\n\nfunction fixLeadingBracketInUnit(unit: string): string {\n if (unit.length < 2 || hasRTLText(unit)) return unit;\n const firstCode = unit.codePointAt(0) ?? 0;\n if (!isBracketCode(firstCode)) return unit;\n if (isSquareBracketCode(firstCode)) return fixSquareBracketUnit(unit, firstCode);\n if (hasMatchingCloseBracket(unit, firstCode)) return unit;\n return fixRoundBracketUnit(unit, firstCode);\n}\n\nfunction fixLeadingBracketsInLtrTokens(units: string[]): string[] {\n return units.map(fixLeadingBracketInUnit);\n}\n\nfunction reverseRTLWordOrder(text: string): string {\n const tokens = text.split(/(\\s+)/);\n const words: string[] = [];\n const spaces: string[] = [];\n for (let i = 0; i < tokens.length; i++) {\n if (i % 2 === 0) words.push(tokens[i]);\n else spaces.push(tokens[i]);\n }\n\n const units = collectRTLUnits(words, spaces);\n units.reverse();\n const afterPunct = fixLeadingPunctuation(reattachHebrewPrefixes(units));\n return fixLeadingBracketsInLtrTokens(afterPunct).join(' ');\n}\n\nfunction isLineRTL(line: TextLine): boolean {\n let rtl = 0;\n let total = 0;\n for (const item of line.items) {\n for (let i = 0; i < item.text.length; i++) {\n const code = item.text.codePointAt(i) ?? 0;\n if (code > 0x20) total++;\n if (isRTLChar(code)) rtl++;\n }\n }\n return total > 0 && rtl > total * 0.3;\n}\n\nexport interface GraphicsState {\n ctm: number[];\n fontSize: number;\n fontName: string;\n fillColor: string;\n strokeColor: string;\n lineWidth: number;\n textMatrix: number[];\n lineMatrix: number[];\n leading: number;\n charSpacing: number;\n wordSpacing: number;\n textRise: number;\n horizontalScaling: number;\n textRenderMode: number;\n fillColorSpace: string;\n strokeColorSpace: string;\n strokeOpacity: number;\n fillOpacity: number;\n dashArray: number[];\n dashPhase: number;\n lineCap: number;\n lineJoin: number;\n}\n\nfunction identityMatrix(): number[] {\n return [1, 0, 0, 1, 0, 0];\n}\n\nfunction multiplyMatrix(a: number[], b: number[]): number[] {\n return [\n a[0] * b[0] + a[1] * b[2],\n a[0] * b[1] + a[1] * b[3],\n a[2] * b[0] + a[3] * b[2],\n a[2] * b[1] + a[3] * b[3],\n a[4] * b[0] + a[5] * b[2] + b[4],\n a[4] * b[1] + a[5] * b[3] + b[5],\n ];\n}\n\nconst CONTENT_ESCAPE_MAP: Record<string, string> = {\n 'n': '\\n', 'r': '\\r', 't': '\\t', 'b': '\\b', 'f': '\\f',\n '(': '(', ')': ')', '\\\\': '\\\\',\n};\n\nfunction tokenizeEscapeSequence(text: string, pos: number): { char: string; endPos: number } {\n const esc = text[pos];\n const mapped = CONTENT_ESCAPE_MAP[esc];\n if (mapped) {\n return { char: mapped, endPos: pos + 1 };\n }\n if (esc >= '0' && esc <= '7') {\n let oct = esc;\n if (pos + 1 < text.length && text[pos + 1] >= '0' && text[pos + 1] <= '7') {\n pos++; oct += text[pos];\n if (pos + 1 < text.length && text[pos + 1] >= '0' && text[pos + 1] <= '7') {\n pos++; oct += text[pos];\n }\n }\n return { char: String.fromCodePoint(Number.parseInt(oct, 8)), endPos: pos + 1 };\n }\n if (esc === '\\r' || esc === '\\n') {\n const endPos = (esc === '\\r' && pos + 1 < text.length && text[pos + 1] === '\\n')\n ? pos + 2\n : pos + 1;\n return { char: '', endPos };\n }\n return { char: esc, endPos: pos + 1 };\n}\n\nfunction tokenizeLiteralString(text: string, startPos: number): { token: string; endPos: number } {\n let pos = startPos + 1;\n let str = '';\n let depth = 1;\n while (pos < text.length && depth > 0) {\n if (text[pos] === '\\\\') {\n pos++;\n if (pos >= text.length) break;\n const result = tokenizeEscapeSequence(text, pos);\n str += result.char;\n pos = result.endPos;\n } else if (text[pos] === '(') {\n depth++; str += text[pos++];\n } else if (text[pos] === ')') {\n depth--;\n if (depth > 0) { str += text[pos]; }\n pos++;\n } else {\n str += text[pos++];\n }\n }\n return { token: '(' + str + ')', endPos: pos };\n}\n\nfunction tokenizeHexString(text: string, startPos: number): { token: string; endPos: number } {\n let pos = startPos + 1;\n let hex = '';\n while (pos < text.length && text[pos] !== '>') {\n if (!' \\t\\r\\n\\0\\f'.includes(text[pos])) hex += text[pos];\n pos++;\n }\n if (pos < text.length) pos++;\n if (hex.length % 2 !== 0) hex += '0';\n let str = '';\n for (let i = 0; i < hex.length; i += 2) {\n str += String.fromCodePoint(Number.parseInt(hex.substring(i, i + 2), 16));\n }\n return { token: '(' + str + ')', endPos: pos };\n}\n\nfunction skipComment(text: string, pos: number): number {\n while (pos < text.length && text[pos] !== '\\n' && text[pos] !== '\\r') pos++;\n return pos;\n}\n\nfunction tokenizeAngleBracket(text: string, pos: number, tokens: string[]): number {\n if (pos + 1 < text.length && text[pos + 1] === '<') {\n tokens.push('<<');\n return pos + 2;\n }\n const result = tokenizeHexString(text, pos);\n tokens.push(result.token);\n return result.endPos;\n}\n\nfunction tokenizeClosingAngle(text: string, pos: number, tokens: string[]): number {\n if (pos + 1 < text.length && text[pos + 1] === '>') {\n tokens.push('>>');\n return pos + 2;\n }\n return pos + 1;\n}\n\nfunction tokenizeName(text: string, pos: number, tokens: string[]): number {\n let name = '/';\n pos++;\n while (pos < text.length && !' \\t\\r\\n\\0\\f/<>[]()%'.includes(text[pos])) {\n name += text[pos++];\n }\n tokens.push(name);\n return pos;\n}\n\nfunction tokenizeGenericToken(text: string, pos: number, tokens: string[]): number {\n let token = '';\n while (pos < text.length && !' \\t\\r\\n\\0\\f/<>[]()%'.includes(text[pos])) {\n token += text[pos++];\n }\n if (token) tokens.push(token);\n return pos;\n}\n\nfunction tokenizeNextElement(text: string, pos: number, tokens: string[]): number {\n const c = text[pos];\n if (c === '(') {\n const result = tokenizeLiteralString(text, pos);\n tokens.push(result.token);\n return result.endPos;\n }\n if (c === '<') return tokenizeAngleBracket(text, pos, tokens);\n if (c === '>') return tokenizeClosingAngle(text, pos, tokens);\n if (c === '[') { tokens.push('['); return pos + 1; }\n if (c === ']') { tokens.push(']'); return pos + 1; }\n if (c === '/') return tokenizeName(text, pos, tokens);\n return tokenizeGenericToken(text, pos, tokens);\n}\n\nfunction tokenizeContentStream(data: Uint8Array): string[] {\n const text = new TextDecoder('latin1').decode(data);\n const tokens: string[] = [];\n let pos = 0;\n\n while (pos < text.length) {\n while (pos < text.length && ' \\t\\r\\n\\0\\f'.includes(text[pos])) pos++;\n if (pos >= text.length) break;\n\n if (text[pos] === '%') {\n pos = skipComment(text, pos);\n continue;\n }\n\n pos = tokenizeNextElement(text, pos, tokens);\n }\n\n return tokens;\n}\n\nfunction setCIDWidthsFromArray(widths: Map<number, number>, reader: PdfReader, first: number, wList: PdfObject[]): void {\n for (let j = 0; j < wList.length; j++) {\n widths.set(first + j, reader.getNumber(wList[j]));\n }\n}\n\nfunction setCIDWidthsFromRange(widths: Map<number, number>, first: number, last: number, w: number): void {\n for (let cid = first; cid <= last; cid++) {\n widths.set(cid, w);\n }\n}\n\nfunction parseCIDWidths(reader: PdfReader, wArray: PdfObject): Map<number, number> {\n const widths = new Map<number, number>();\n const arr = reader.getArray(wArray);\n let i = 0;\n while (i < arr.length) {\n const first = reader.getNumber(arr[i]);\n i++;\n if (i >= arr.length) break;\n const next = reader.resolveDeep(arr[i]);\n if (next.type === 'array') {\n setCIDWidthsFromArray(widths, reader, first, next.value as PdfObject[]);\n i++;\n } else if (next.type === 'number') {\n i++;\n if (i >= arr.length) break;\n setCIDWidthsFromRange(widths, first, next.value as number, reader.getNumber(arr[i]));\n i++;\n } else {\n i++;\n }\n }\n return widths;\n}\n\nfunction buildType0FontWidths(reader: PdfReader, fontObjDict: Record<string, PdfObject>): { widths: Map<number, number>; defaultWidth: number } {\n const descendantsRef = fontObjDict['DescendantFonts'];\n if (!descendantsRef) return { widths: new Map(), defaultWidth: 1000 };\n const descendants = reader.getArray(descendantsRef);\n if (descendants.length === 0) return { widths: new Map(), defaultWidth: 1000 };\n const cidFontDict = reader.getDict(descendants[0]);\n const dw = cidFontDict['DW'];\n const defaultWidth = dw ? reader.getNumber(dw) : 1000;\n const wArray = cidFontDict['W'];\n const widths = wArray ? parseCIDWidths(reader, wArray) : new Map<number, number>();\n return { widths, defaultWidth };\n}\n\nfunction buildStandardFontWidths(reader: PdfReader, fontObjDict: Record<string, PdfObject>): { widths: Map<number, number>; defaultWidth: number } {\n const firstChar = reader.getNumber(fontObjDict['FirstChar']);\n const widthsArr = fontObjDict['Widths'] ? reader.getArray(fontObjDict['Widths']) : [];\n const widths = new Map<number, number>();\n for (let ci = 0; ci < widthsArr.length; ci++) {\n widths.set(firstChar + ci, reader.getNumber(widthsArr[ci]));\n }\n let defaultWidth = 600;\n if (widthsArr.length === 0) {\n const fontDescRef = fontObjDict['FontDescriptor'];\n if (fontDescRef) {\n const fontDesc = reader.getDict(fontDescRef);\n const mw = fontDesc['MissingWidth'];\n if (mw) defaultWidth = reader.getNumber(mw);\n if (defaultWidth === 600 || defaultWidth === 0) {\n defaultWidth = extractCffDefaultWidth(reader, fontDesc) ?? 600;\n }\n }\n }\n return { widths, defaultWidth };\n}\n\nfunction glyphNameToUnicode(name: string): string | null {\n const uniMatch = /^uni([0-9A-Fa-f]{4,6})$/.exec(name);\n if (uniMatch) return String.fromCodePoint(Number.parseInt(uniMatch[1], 16));\n\n const uMatch = /^u([0-9A-Fa-f]{4,6})$/.exec(name);\n if (uMatch) return String.fromCodePoint(Number.parseInt(uMatch[1], 16));\n\n return GLYPH_NAME_MAP[name] ?? null;\n}\n\nconst GLYPH_NAME_MAP: Record<string, string> = {\n space: ' ', exclam: '!', quotedbl: '\"', numbersign: '#', dollar: '$',\n percent: '%', ampersand: '&', quotesingle: \"'\", quoteright: '\\u2019',\n parenleft: '(', parenright: ')', asterisk: '*', plus: '+', comma: ',',\n hyphen: '-', period: '.', slash: '/', colon: ':', semicolon: ';',\n less: '<', equal: '=', greater: '>', question: '?', at: '@',\n bracketleft: '[', backslash: '\\\\', bracketright: ']', underscore: '_',\n braceleft: '{', bar: '|', braceright: '}', bullet: '\\u2022',\n endash: '\\u2013', emdash: '\\u2014', quoteleft: '\\u2018',\n quotedblleft: '\\u201C', quotedblright: '\\u201D', quotesinglbase: '\\u201A',\n quotedblbase: '\\u201E', ellipsis: '\\u2026', trademark: '\\u2122',\n fi: '\\uFB01', fl: '\\uFB02', minus: '\\u2212', fraction: '\\u2044',\n Euro: '\\u20AC', afii57636: '\\u05D0', afii57637: '\\u05D1',\n afii57638: '\\u05D2', afii57639: '\\u05D3', afii57640: '\\u05D4',\n afii57641: '\\u05D5', afii57642: '\\u05D6', afii57643: '\\u05D7',\n afii57644: '\\u05D8', afii57645: '\\u05D9', afii57646: '\\u05DA',\n afii57647: '\\u05DB', afii57648: '\\u05DC', afii57649: '\\u05DD',\n afii57650: '\\u05DE', afii57651: '\\u05DF', afii57652: '\\u05E0',\n afii57653: '\\u05E1', afii57654: '\\u05E2', afii57655: '\\u05E3',\n afii57656: '\\u05E4', afii57657: '\\u05E5', afii57658: '\\u05E6',\n afii57659: '\\u05E7', afii57660: '\\u05E8', afii57661: '\\u05E9',\n afii57662: '\\u05EA', afii57664: '\\u05B0', afii57665: '\\u05B1',\n afii57666: '\\u05B2', afii57667: '\\u05B3', afii57668: '\\u05B4',\n afii57669: '\\u05B5', afii57670: '\\u05B6', afii57671: '\\u05B7',\n afii57672: '\\u05B8', afii57673: '\\u05B9', afii57674: '\\u05BB',\n afii57675: '\\u05BC', afii57676: '\\u05BD', afii57677: '\\u05BE',\n afii57678: '\\u05BF', afii57679: '\\u05C0', afii57680: '\\u05C1',\n afii57681: '\\u05C2', afii57682: '\\u05C3', afii57683: '\\u05F0',\n afii57684: '\\u05F1', afii57685: '\\u05F2', afii57686: '\\u05F3',\n afii57687: '\\u05F4', afii57388: '\\u060C', afii57403: '\\u061B',\n afii57407: '\\u061F', afii57409: '\\u0621', afii57410: '\\u0622',\n afii57411: '\\u0623', afii57412: '\\u0624', afii57413: '\\u0625',\n afii57414: '\\u0626', afii57415: '\\u0627', afii57416: '\\u0628',\n afii57417: '\\u0629', afii57418: '\\u062A', afii57419: '\\u062B',\n afii57420: '\\u062C', afii57421: '\\u062D', afii57422: '\\u062E',\n afii57423: '\\u062F', afii57424: '\\u0630', afii57425: '\\u0631',\n afii57426: '\\u0632', afii57427: '\\u0633', afii57428: '\\u0634',\n afii57429: '\\u0635', afii57430: '\\u0636', afii57431: '\\u0637',\n afii57432: '\\u0638', afii57433: '\\u0639', afii57434: '\\u063A',\n afii57440: '\\u0640', afii57441: '\\u0641', afii57442: '\\u0642',\n afii57443: '\\u0643', afii57444: '\\u0644', afii57445: '\\u0645',\n afii57446: '\\u0646', afii57448: '\\u0648', afii57449: '\\u0649',\n afii57450: '\\u064A', afii57451: '\\u064B', afii57452: '\\u064C',\n afii57453: '\\u064D', afii57454: '\\u064E', afii57455: '\\u064F',\n afii57456: '\\u0650', afii57457: '\\u0651', afii57458: '\\u0652',\n afii57470: '\\u0647', afii57505: '\\u06A4', afii57506: '\\u067E',\n afii57507: '\\u0686', afii57508: '\\u0698', afii57509: '\\u06AF',\n geresh: '\\u05F3', gershayim: '\\u05F4', maqaf: '\\u05BE',\n sheqel: '\\u20AA', afii57534: '\\u20AA',\n};\n\nfunction mapGlyphToUnicode(code: number, glyphName: string, toUnicode: Map<number, string>): void {\n if (!toUnicode.has(code) && glyphName !== '.notdef') {\n const unicode = glyphNameToUnicode(glyphName);\n if (unicode) toUnicode.set(code, unicode);\n }\n}\n\nfunction parseEncodingDifferences(reader: PdfReader, encodingObj: PdfObject, toUnicode: Map<number, string>): void {\n const resolved = reader.resolveDeep(encodingObj);\n if (resolved.type !== 'dict') return;\n\n const dict = resolved.value as Record<string, PdfObject>;\n const diffsObj = dict['Differences'];\n if (!diffsObj) return;\n\n const diffs = reader.getArray(diffsObj);\n let code = 0;\n\n for (const entry of diffs) {\n const entryResolved = reader.resolveDeep(entry);\n if (entryResolved.type === 'number') {\n code = entryResolved.value as number;\n } else if (entryResolved.type === 'name') {\n mapGlyphToUnicode(code, entryResolved.value as string, toUnicode);\n code++;\n }\n }\n}\n\nconst FONT_FAMILY_NORMALIZATION: Record<string, string> = {\n 'timesnewroman': 'Times New Roman',\n 'timesnewromanps': 'Times New Roman',\n 'times': 'Times New Roman',\n 'arial': 'Arial',\n 'arialmt': 'Arial',\n 'helvetica': 'Helvetica',\n 'helveticaneue': 'Helvetica Neue',\n 'courier': 'Courier',\n 'couriernew': 'Courier New',\n 'georgia': 'Georgia',\n 'verdana': 'Verdana',\n 'tahoma': 'Tahoma',\n 'trebuchetms': 'Trebuchet MS',\n 'palatino': 'Palatino',\n 'palatinolinotype': 'Palatino Linotype',\n 'garamond': 'Garamond',\n 'bookmanoldstyle': 'Bookman Old Style',\n 'comicsansms': 'Comic Sans MS',\n 'impact': 'Impact',\n 'lucidaconsole': 'Lucida Console',\n 'lucidasansunicode': 'Lucida Sans Unicode',\n 'symbol': 'Symbol',\n 'cambria': 'Cambria',\n 'calibri': 'Calibri',\n 'candara': 'Candara',\n 'consolas': 'Consolas',\n 'constantia': 'Constantia',\n 'corbel': 'Corbel',\n 'frankruehl': 'FrankRuehl',\n 'miriam': 'Miriam',\n 'david': 'David',\n 'narkisim': 'Narkisim',\n 'rod': 'Rod',\n 'opensans': 'Open Sans',\n 'roboto': 'Roboto',\n 'lato': 'Lato',\n 'montserrat': 'Montserrat',\n 'sourcesanspro': 'Source Sans Pro',\n 'notosans': 'Noto Sans',\n 'notoserif': 'Noto Serif',\n};\n\nfunction normalizeFontFamily(baseFontName: string): string {\n if (!baseFontName) return '';\n let name = baseFontName;\n if (name.startsWith('/')) name = name.slice(1);\n const plusIdx = name.indexOf('+');\n if (plusIdx >= 0 && plusIdx <= 6) name = name.slice(plusIdx + 1);\n name = name.replaceAll(',', '-');\n const dashIdx = name.indexOf('-');\n const base = dashIdx >= 0 ? name.slice(0, dashIdx) : name;\n const lookup = base.toLowerCase().replaceAll(/[\\s_]/g, '');\n const mapped = FONT_FAMILY_NORMALIZATION[lookup];\n if (mapped) return mapped;\n return base.replaceAll(/([a-z])([A-Z])/g, '$1 $2');\n}\n\nfunction applyFontDescriptorFlags(\n reader: PdfReader, descRef: PdfObject, style: { isBold: boolean; isItalic: boolean },\n): void {\n const desc = reader.getDict(descRef);\n const flags = reader.getNumber(desc['Flags']);\n if (flags & (1 << 6)) style.isItalic = true;\n if (flags & (1 << 18)) style.isBold = true;\n const weight = reader.getNumber(desc['FontWeight']);\n if (weight >= 700) style.isBold = true;\n const italicAngle = reader.getNumber(desc['ItalicAngle']);\n if (italicAngle !== 0 && !style.isItalic) style.isItalic = true;\n}\n\nfunction detectFontStyle(reader: PdfReader, fontObjDict: Record<string, PdfObject>): {\n isBold: boolean; isItalic: boolean; familyName: string;\n} {\n const baseFontName = reader.getString(fontObjDict['BaseFont']) || '';\n const nameLower = baseFontName.toLowerCase();\n\n const style = {\n isBold: /bold|heavy|black/.test(nameLower) && !/demi|semi|light/.test(nameLower),\n isItalic: /italic|oblique/.test(nameLower),\n };\n\n const descriptorRef = fontObjDict['FontDescriptor'];\n if (descriptorRef) {\n applyFontDescriptorFlags(reader, descriptorRef, style);\n }\n\n const descendantsRef = fontObjDict['DescendantFonts'];\n if (descendantsRef) {\n const descendants = reader.getArray(descendantsRef);\n if (descendants.length > 0) {\n const cidFontDict = reader.getDict(descendants[0]);\n const cidDescRef = cidFontDict['FontDescriptor'];\n if (cidDescRef) {\n applyFontDescriptorFlags(reader, cidDescRef, style);\n }\n }\n }\n\n const familyName = normalizeFontFamily(baseFontName);\n return { isBold: style.isBold, isItalic: style.isItalic, familyName };\n}\n\nfunction searchCffWidthInData(data: Uint8Array): number | null {\n if (data.length < 10) return null;\n if (data[0] !== 1 || data[3] < 1 || data[3] > 4) return null;\n const nameOffset = data[2];\n if (nameOffset >= data.length) return null;\n for (let i = nameOffset; i < Math.min(data.length - 4, nameOffset + 500); i++) {\n if (data[i] === 0x14) {\n return data[i - 1] >= 32 ? (data[i - 1] - 139) * 100 + 600 : 600;\n }\n }\n return null;\n}\n\nfunction extractCffDefaultWidth(reader: PdfReader, fontDesc: Record<string, PdfObject>): number | null {\n for (const key of ['FontFile3', 'FontFile2', 'FontFile']) {\n const ref = fontDesc[key];\n if (!ref) continue;\n try {\n const data = reader.getStreamData(ref);\n const result = searchCffWidthInData(data);\n if (result !== null) return result;\n } catch { /* skip */ }\n }\n return null;\n}\n\nexport function buildFontInfo(reader: PdfReader, fontRef: PdfObject): FontInfo {\n const fontObjDict = reader.getDict(fontRef);\n const subtype = reader.getString(fontObjDict['Subtype']);\n const encodingObj = fontObjDict['Encoding'];\n const encoding = encodingObj ? reader.getString(encodingObj) : '';\n const { isBold, isItalic, familyName } = detectFontStyle(reader, fontObjDict);\n\n let toUnicode = new Map<number, string>();\n const toUnicodeRef = fontObjDict['ToUnicode'];\n if (toUnicodeRef) {\n const cmapData = reader.getStreamData(toUnicodeRef);\n if (cmapData.length > 0) {\n toUnicode = parseToUnicodeMap(cmapData);\n }\n }\n\n if (encodingObj) {\n parseEncodingDifferences(reader, encodingObj, toUnicode);\n }\n\n if (subtype === 'Type3') {\n const { widths, defaultWidth } = buildStandardFontWidths(reader, fontObjDict);\n return { isTwoByte: false, widths, defaultWidth, toUnicode, isBold, isItalic, familyName: familyName || 'serif' };\n }\n\n if (subtype === 'Type0') {\n const { widths, defaultWidth } = buildType0FontWidths(reader, fontObjDict);\n return { isTwoByte: true, widths, defaultWidth, toUnicode, isBold, isItalic, familyName };\n }\n\n if (encoding === 'Identity-H' || encoding === 'Identity-V') {\n return { isTwoByte: true, widths: new Map(), defaultWidth: 1000, toUnicode, isBold, isItalic, familyName };\n }\n\n const { widths, defaultWidth } = buildStandardFontWidths(reader, fontObjDict);\n return { isTwoByte: false, widths, defaultWidth, toUnicode, isBold, isItalic, familyName };\n}\n\nfunction resolveContentData(reader: PdfReader, contentsObj: PdfObject): Uint8Array {\n const resolved = reader.resolveDeep(contentsObj);\n if (resolved.type !== 'array') {\n return reader.getStreamData(contentsObj);\n }\n const parts: Uint8Array[] = [];\n for (const item of resolved.value as PdfObject[]) {\n parts.push(reader.getStreamData(item));\n }\n const totalLength = parts.reduce((sum, p) => sum + p.length, 0);\n const contentData = new Uint8Array(totalLength);\n let offset = 0;\n for (const part of parts) {\n contentData.set(part, offset);\n offset += part.length;\n }\n return contentData;\n}\n\nfunction getEffectiveFontSize(gs: GraphicsState): number {\n const combined = multiplyMatrix(gs.textMatrix, gs.ctm);\n return Math.abs(gs.fontSize * combined[3]) || gs.fontSize;\n}\n\nfunction calcTextAdvance(charCodes: number[], fontInfo: FontInfo | undefined, gs: GraphicsState): number {\n let totalWidth = 0;\n for (const code of charCodes) {\n const w = fontInfo ? (fontInfo.widths.get(code) ?? fontInfo.defaultWidth) : 600;\n totalWidth += w;\n }\n const glyphSpan = (totalWidth / 1000) * gs.fontSize;\n const spaceCount = fontInfo?.isTwoByte ? 0 : charCodes.filter(c => c === 32).length;\n const spacing = charCodes.length * gs.charSpacing + spaceCount * gs.wordSpacing;\n return (glyphSpan + spacing) * (gs.horizontalScaling / 100);\n}\n\nfunction isInvisibleTextMode(mode: number): boolean {\n return mode === 3 || mode === 7;\n}\n\nfunction processTextShow(\n raw: string, gs: GraphicsState, fontInfoMap: Map<string, FontInfo>,\n textItems: TextItem[], pageIndex: number, currentMcid: number,\n): void {\n const fontInfo = fontInfoMap.get(gs.fontName);\n const { text: rawDecoded, charCodes } = pdfStringToUnicode(raw, fontInfo);\n const advance = calcTextAdvance(charCodes, fontInfo, gs);\n if (isInvisibleTextMode(gs.textRenderMode) || gs.fillOpacity < 0.01) {\n gs.textMatrix[4] += advance;\n return;\n }\n if (!rawDecoded.trim()) {\n gs.textMatrix[4] += advance;\n return;\n }\n const riseMatrix: number[] = [1, 0, 0, 1, 0, gs.textRise];\n const combined = multiplyMatrix(multiplyMatrix(riseMatrix, gs.textMatrix), gs.ctm);\n const effectiveFontSize = getEffectiveFontSize(gs);\n const scaleX = Math.hypot(combined[0], combined[1]);\n const scaleY = Math.hypot(combined[2], combined[3]);\n const normA = scaleX > 0 ? combined[0] / scaleX : 1;\n const normB = scaleX > 0 ? combined[1] / scaleX : 0;\n const normC = scaleY > 0 ? combined[2] / scaleY : 0;\n const normD = scaleY > 0 ? combined[3] / scaleY : 1;\n\n textItems.push({\n text: rawDecoded,\n fontSize: effectiveFontSize,\n x: combined[4],\n y: combined[5],\n endX: combined[4] + advance * scaleX,\n page: pageIndex,\n color: gs.fillColor,\n bold: fontInfo?.isBold ?? false,\n italic: fontInfo?.isItalic ?? false,\n fontFamily: fontInfo?.familyName ?? '',\n fontName: gs.fontName,\n mcid: currentMcid,\n charSpacing: gs.charSpacing,\n wordSpacing: gs.wordSpacing,\n textRise: gs.textRise,\n horizontalScaling: gs.horizontalScaling,\n textRenderMode: gs.textRenderMode,\n strokeColor: gs.strokeColor,\n transformMatrix: [normA, normB, normC, normD],\n isSpaceOffset: false,\n });\n gs.textMatrix[4] += advance;\n}\n\ninterface PerCharContext {\n readonly baseCombined: number[];\n readonly effectiveFontSize: number;\n readonly tm: readonly [number, number, number, number];\n readonly fontInfo: FontInfo | undefined;\n readonly gs: GraphicsState;\n readonly pageIndex: number;\n readonly currentMcid: number;\n}\n\nfunction buildPerCharItem(\n text: string, charX: number, charEndX: number,\n isSpaceOffset: boolean, ctx: PerCharContext,\n): TextItem {\n return {\n text,\n fontSize: ctx.effectiveFontSize,\n x: charX,\n y: ctx.baseCombined[5],\n endX: charEndX,\n page: ctx.pageIndex,\n color: ctx.gs.fillColor,\n bold: ctx.fontInfo?.isBold ?? false,\n italic: ctx.fontInfo?.isItalic ?? false,\n fontFamily: ctx.fontInfo?.familyName ?? '',\n fontName: ctx.gs.fontName,\n mcid: ctx.currentMcid,\n charSpacing: ctx.gs.charSpacing,\n wordSpacing: ctx.gs.wordSpacing,\n textRise: ctx.gs.textRise,\n horizontalScaling: ctx.gs.horizontalScaling,\n textRenderMode: ctx.gs.textRenderMode,\n strokeColor: ctx.gs.strokeColor,\n transformMatrix: ctx.tm,\n isSpaceOffset,\n };\n}\n\ninterface ProcessOneCharOptions {\n readonly code: number;\n readonly ch: string;\n readonly fontInfo: FontInfo | undefined;\n readonly dw: number;\n readonly gs: GraphicsState;\n readonly isSingleByte: boolean;\n readonly charX: number;\n readonly ctx: PerCharContext;\n}\n\nfunction processOneChar(opts: ProcessOneCharOptions): { readonly item: TextItem; readonly totalAdvance: number } {\n const { code, ch, fontInfo, dw, gs, isSingleByte, charX, ctx } = opts;\n const w = fontInfo ? (fontInfo.widths.get(code) ?? dw) : 600;\n const charAdvance = (w / 1000) * gs.fontSize * (gs.horizontalScaling / 100);\n const spacing = gs.charSpacing + (code === 32 ? gs.wordSpacing : 0);\n const charEndX = charX + charAdvance;\n const isSpace = isSingleByte && (code === 32);\n const item = buildPerCharItem(isSpace ? '' : ch, charX, charEndX, isSpace, ctx);\n return { item, totalAdvance: charAdvance + spacing };\n}\n\nfunction processTextShowPerChar(\n raw: string, gs: GraphicsState, fontInfoMap: Map<string, FontInfo>,\n textItems: TextItem[], pageIndex: number, currentMcid: number,\n): void {\n const fontInfo = fontInfoMap.get(gs.fontName);\n const { text: rawDecoded, charCodes } = pdfStringToUnicode(raw, fontInfo);\n const fullAdvance = calcTextAdvance(charCodes, fontInfo, gs);\n\n if (isInvisibleTextMode(gs.textRenderMode) || gs.fillOpacity < 0.01) {\n gs.textMatrix[4] += fullAdvance;\n return;\n }\n if (!rawDecoded.trim()) {\n gs.textMatrix[4] += fullAdvance;\n return;\n }\n\n const riseMatrix: number[] = [1, 0, 0, 1, 0, gs.textRise];\n const baseCombined = multiplyMatrix(multiplyMatrix(riseMatrix, gs.textMatrix), gs.ctm);\n const scaleX = Math.hypot(baseCombined[0], baseCombined[1]);\n const scaleY = Math.hypot(baseCombined[2], baseCombined[3]);\n const ctx: PerCharContext = {\n baseCombined,\n effectiveFontSize: getEffectiveFontSize(gs),\n tm: [\n scaleX > 0 ? baseCombined[0] / scaleX : 1,\n scaleX > 0 ? baseCombined[1] / scaleX : 0,\n scaleY > 0 ? baseCombined[2] / scaleY : 0,\n scaleY > 0 ? baseCombined[3] / scaleY : 1,\n ],\n fontInfo, gs, pageIndex, currentMcid,\n };\n\n const dw = fontInfo ? fontInfo.defaultWidth : 600;\n const isSingleByte = !(fontInfo?.isTwoByte);\n let xAccum = 0;\n\n const limit = Math.min(charCodes.length, rawDecoded.length);\n for (let i = 0; i < limit; i++) {\n const ch = rawDecoded[i];\n const result = processOneChar({ code: charCodes[i], ch, fontInfo, dw, gs, isSingleByte, charX: baseCombined[4] + xAccum, ctx });\n textItems.push(result.item);\n xAccum += result.totalAdvance;\n }\n\n gs.textMatrix[4] += fullAdvance;\n}\n\nfunction processTJOperatorPerChar(\n operandStack: string[], gs: GraphicsState, fontInfoMap: Map<string, FontInfo>,\n textItems: TextItem[], pageIndex: number, currentMcid: number,\n): void {\n const arrTokens = drainOperandStack(operandStack);\n let pendingDisplacement = 0;\n\n for (const t of arrTokens) {\n if (t === '[' || t === ']') continue;\n if (t.startsWith('(')) {\n if (pendingDisplacement !== 0) {\n gs.textMatrix[4] -= (pendingDisplacement / 1000) * gs.fontSize * (gs.horizontalScaling / 100);\n pendingDisplacement = 0;\n }\n const rawStr = t.slice(1, -1);\n processTextShowPerChar(rawStr, gs, fontInfoMap, textItems, pageIndex, currentMcid);\n } else {\n const kern = Number.parseFloat(t);\n if (!Number.isNaN(kern)) {\n pendingDisplacement += kern;\n }\n }\n }\n if (pendingDisplacement !== 0) {\n gs.textMatrix[4] -= (pendingDisplacement / 1000) * gs.fontSize * (gs.horizontalScaling / 100);\n }\n}\n\nfunction drainOperandStack(operandStack: string[]): string[] {\n const tokens: string[] = [];\n while (operandStack.length > 0) {\n tokens.unshift(operandStack.pop() ?? '');\n }\n return tokens;\n}\n\nfunction processTJTokens(\n arrTokens: string[], dw: number, gs: GraphicsState, fontInfo: FontInfo | undefined,\n): { combinedText: string; pendingDisplacement: number } {\n let combinedText = '';\n let pendingDisplacement = 0;\n for (const t of arrTokens) {\n if (t === '[' || t === ']') continue;\n if (t.startsWith('(')) {\n combinedText = applyTJStringFragment(t, pendingDisplacement, dw, combinedText, gs, fontInfo);\n pendingDisplacement = 0;\n } else {\n const kern = Number.parseFloat(t);\n if (!Number.isNaN(kern)) {\n pendingDisplacement += kern;\n }\n }\n }\n return { combinedText, pendingDisplacement };\n}\n\nfunction emitTJTextItem(\n combinedText: string, startTm: number[], gs: GraphicsState,\n fontInfo: FontInfo | undefined, textItems: TextItem[],\n pageIndex: number, currentMcid: number,\n): void {\n const riseMatrix: number[] = [1, 0, 0, 1, 0, gs.textRise];\n const combined = multiplyMatrix(multiplyMatrix(riseMatrix, startTm), gs.ctm);\n const endCombined = multiplyMatrix(gs.textMatrix, gs.ctm);\n const tjScaleX = Math.hypot(combined[0], combined[1]);\n const tjScaleY = Math.hypot(combined[2], combined[3]);\n\n textItems.push({\n text: combinedText,\n fontSize: getEffectiveFontSize(gs),\n x: combined[4],\n y: combined[5],\n endX: endCombined[4],\n page: pageIndex,\n color: gs.fillColor,\n bold: fontInfo?.isBold ?? false,\n italic: fontInfo?.isItalic ?? false,\n fontFamily: fontInfo?.familyName ?? '',\n fontName: gs.fontName,\n mcid: currentMcid,\n charSpacing: gs.charSpacing,\n wordSpacing: gs.wordSpacing,\n textRise: gs.textRise,\n horizontalScaling: gs.horizontalScaling,\n textRenderMode: gs.textRenderMode,\n strokeColor: gs.strokeColor,\n transformMatrix: [\n tjScaleX > 0 ? combined[0] / tjScaleX : 1,\n tjScaleX > 0 ? combined[1] / tjScaleX : 0,\n tjScaleY > 0 ? combined[2] / tjScaleY : 0,\n tjScaleY > 0 ? combined[3] / tjScaleY : 1,\n ],\n isSpaceOffset: false,\n });\n}\n\nfunction processTJOperator(\n operandStack: string[], gs: GraphicsState, fontInfoMap: Map<string, FontInfo>,\n textItems: TextItem[], pageIndex: number, currentMcid: number,\n): void {\n const arrTokens = drainOperandStack(operandStack);\n const fontInfo = fontInfoMap.get(gs.fontName);\n const dw = fontInfo ? fontInfo.defaultWidth : 600;\n const startTm = gs.textMatrix.slice();\n\n const { combinedText, pendingDisplacement } = processTJTokens(arrTokens, dw, gs, fontInfo);\n if (pendingDisplacement !== 0) {\n gs.textMatrix[4] -= (pendingDisplacement / 1000) * gs.fontSize * (gs.horizontalScaling / 100);\n }\n\n if (isInvisibleTextMode(gs.textRenderMode) || gs.fillOpacity < 0.01) return;\n if (!combinedText.trim()) return;\n emitTJTextItem(combinedText, startTm, gs, fontInfo, textItems, pageIndex, currentMcid);\n}\n\nfunction applyTJStringFragment(\n t: string, pendingDisplacement: number, dw: number, combinedText: string,\n gs: GraphicsState, fontInfo: FontInfo | undefined,\n): string {\n const rawStr = t.slice(1, -1);\n if (pendingDisplacement !== 0) {\n gs.textMatrix[4] -= (pendingDisplacement / 1000) * gs.fontSize * (gs.horizontalScaling / 100);\n if (-pendingDisplacement > dw * 0.3 && combinedText.length > 0) {\n combinedText += ' ';\n }\n }\n const { text: decoded, charCodes: fragCodes } = pdfStringToUnicode(rawStr, fontInfo);\n combinedText += decoded;\n gs.textMatrix[4] += calcTextAdvance(fragCodes, fontInfo, gs);\n return combinedText;\n}\n\nfunction resolveComponentsColor(values: number[], components: number): string | null {\n if (components === 4 && values.length >= 4) {\n return cmykToRgbHex(values[0], values[1], values[2], values[3]);\n }\n if (components === 3 && values.length >= 3) {\n return rgbToHex(values[0], values[1], values[2]);\n }\n if (components === 1 && values.length >= 1) {\n return grayToHex(values[0]);\n }\n return null;\n}\n\nfunction resolveIndexedColorFromLut(lut: Uint8Array, bc: number, idx: number): string | null {\n const off = idx * bc;\n if (bc === 3) {\n return rgbToHex((lut[off] ?? 0) / 255, (lut[off + 1] ?? 0) / 255, (lut[off + 2] ?? 0) / 255);\n }\n if (bc === 4) {\n return cmykToRgbHex(\n (lut[off] ?? 0) / 255, (lut[off + 1] ?? 0) / 255,\n (lut[off + 2] ?? 0) / 255, (lut[off + 3] ?? 0) / 255,\n );\n }\n if (bc === 1) return grayToHex((lut[off] ?? 0) / 255);\n return null;\n}\n\nfunction resolveScnIndexedColor(ctx: ContentExtractionContext, cs: string, values: number[]): string | null {\n const csResDict = ctx.resources['ColorSpace']\n ? ctx.reader.getDict(ctx.resources['ColorSpace'])\n : {};\n const csRef = csResDict[cs];\n if (!csRef) return null;\n const resolved = ctx.reader.resolveDeep(csRef);\n if (resolved.type !== 'array') return null;\n const csArr = resolved.value as PdfObject[];\n const colorInfo = resolveColorInfoFromArray(ctx.reader, csArr);\n if (colorInfo.indexed && colorInfo.lookupTable && values.length >= 1) {\n const idx = Math.round(values[0]);\n return resolveIndexedColorFromLut(colorInfo.lookupTable, colorInfo.baseChannels, idx);\n }\n return null;\n}\n\nfunction resolveScnFillColor(ctx: ContentExtractionContext, values: number[]): string | null {\n const cs = ctx.gs.fillColorSpace;\n if (cs === 'DeviceCMYK' && values.length >= 4) {\n return cmykToRgbHex(values[0], values[1], values[2], values[3]);\n }\n if (cs === 'DeviceRGB' && values.length >= 3) {\n return rgbToHex(values[0], values[1], values[2]);\n }\n if (cs === 'DeviceGray' && values.length >= 1) {\n return grayToHex(values[0]);\n }\n\n const indexedColor = resolveScnIndexedColor(ctx, cs, values);\n if (indexedColor !== null) return indexedColor;\n\n const components = resolveColorSpaceComponents(ctx, cs);\n const componentColor = resolveComponentsColor(values, components);\n if (componentColor !== null) return componentColor;\n\n if (values.length >= 3) return rgbToHex(values[0], values[1], values[2]);\n if (values.length === 1) return grayToHex(values[0]);\n return null;\n}\n\nfunction processColorOperator(\n token: string, ctx: ContentExtractionContext,\n popNumber: () => number,\n): boolean {\n const { operandStack, gs } = ctx;\n switch (token) {\n case 'rg': {\n const b = popNumber();\n const g = popNumber();\n const r = popNumber();\n gs.fillColor = rgbToHex(r, g, b);\n return true;\n }\n case 'g':\n gs.fillColor = grayToHex(popNumber());\n return true;\n case 'k': {\n const kk = popNumber();\n const y = popNumber();\n const m = popNumber();\n const c = popNumber();\n gs.fillColor = cmykToRgbHex(c, m, y, kk);\n return true;\n }\n case 'scn':\n case 'sc': {\n const values: number[] = [];\n let patternName = '';\n while (operandStack.length > 0) {\n const v = operandStack.pop() ?? '';\n if (v.startsWith('/')) { patternName = v.slice(1); continue; }\n const num = Number.parseFloat(v);\n if (!Number.isNaN(num)) values.unshift(num);\n }\n if (gs.fillColorSpace === 'Pattern' && patternName) {\n ctx.patternFillImage = extractPatternImage(ctx.reader, patternName, ctx.resources);\n return true;\n }\n const color = resolveScnFillColor(ctx, values);\n if (color) gs.fillColor = color;\n return true;\n }\n default:\n return false;\n }\n}\n\nfunction processDoOperator(ctx: ContentExtractionContext): void {\n const rawName = ctx.operandStack.pop() ?? '';\n const name = rawName.startsWith('/') ? rawName.slice(1) : rawName;\n const xObjRef = ctx.xObjectDict[name];\n if (!xObjRef) return;\n const xObj = ctx.reader.resolveDeep(xObjRef);\n if (xObj.type !== 'stream') return;\n const xDict = xObj.value as Record<string, PdfObject>;\n const subtype = ctx.reader.getString(xDict['Subtype']);\n\n if (subtype === 'Image') {\n const imgResult = extractXObjectImage(ctx.reader, xObj, ctx.gs.ctm, ctx.pageIndex);\n if (imgResult) {\n ctx.imageItems.push(imgResult);\n }\n } else if (subtype === 'Form') {\n processFormXObject(ctx, xObj);\n }\n}\n\nfunction buildFormFontInfoMap(\n ctx: ContentExtractionContext, fontDict: Record<string, PdfObject>,\n): Map<string, FontInfo> {\n const fontInfoMap = new Map(ctx.fontInfoMap);\n for (const [fontName, fontRef] of Object.entries(fontDict)) {\n fontInfoMap.set(fontName, buildFontInfo(ctx.reader, fontRef));\n }\n return fontInfoMap;\n}\n\nfunction buildFormCtm(ctx: ContentExtractionContext, dict: Record<string, PdfObject>): number[] {\n const matrixObj = dict['Matrix'];\n if (!matrixObj) return ctx.gs.ctm.slice();\n const matrixArr = ctx.reader.getArray(matrixObj);\n if (matrixArr.length !== 6) return ctx.gs.ctm.slice();\n const m = matrixArr.map(o => ctx.reader.getNumber(o));\n return multiplyMatrix(m, ctx.gs.ctm);\n}\n\n/**\n * Draws a form XObject unless it is already being drawn higher up (a cycle),\n * the path is at the nesting cap, or the page's draw budget is spent. A form\n * shared between sibling draws is drawn every time.\n */\nfunction processFormXObject(parentCtx: ContentExtractionContext, formObj: PdfObject): void {\n parentCtx.formDraws.enter(formObj, () => drawFormXObject(parentCtx, formObj));\n}\n\nfunction drawFormXObject(parentCtx: ContentExtractionContext, formObj: PdfObject): void {\n const dict = formObj.value as Record<string, PdfObject>;\n if (!formObj.stream) return;\n const decoded = parentCtx.reader.decodeStreamData(dict, formObj.stream);\n if (decoded.length === 0) return;\n\n const resources = dict['Resources'] ? parentCtx.reader.getDict(dict['Resources']) : {};\n const fontDict = resources['Font'] ? parentCtx.reader.getDict(resources['Font']) : {};\n const xObjectDict = resources['XObject'] ? parentCtx.reader.getDict(resources['XObject']) : {};\n\n const mergedXObjectDict = { ...parentCtx.xObjectDict, ...xObjectDict };\n const mergedResources = { ...parentCtx.resources, ...resources };\n const fontInfoMap = buildFormFontInfoMap(parentCtx, fontDict);\n const formCtm = buildFormCtm(parentCtx, dict);\n\n const tokens = tokenizeContentStream(decoded);\n const ctx = buildFormContext(parentCtx, fontInfoMap, mergedXObjectDict, mergedResources, formCtm);\n runExtractionTokens(ctx, tokens);\n}\n\nfunction buildFormContext(\n parentCtx: ContentExtractionContext,\n fontInfoMap: Map<string, FontInfo>,\n xObjectDict: Record<string, PdfObject>,\n resources: Record<string, PdfObject>,\n formCtm: number[],\n): ContentExtractionContext {\n return {\n reader: parentCtx.reader, fontInfoMap, xObjectDict, resources,\n textItems: parentCtx.textItems, imageItems: parentCtx.imageItems, pathRects: parentCtx.pathRects,\n currentPath: [], stateStack: [],\n gs: {\n ctm: formCtm, fontSize: parentCtx.gs.fontSize, fontName: parentCtx.gs.fontName,\n fillColor: parentCtx.gs.fillColor, strokeColor: parentCtx.gs.strokeColor, lineWidth: parentCtx.gs.lineWidth,\n textMatrix: identityMatrix(), lineMatrix: identityMatrix(),\n leading: 0, charSpacing: 0, wordSpacing: 0, textRise: 0, horizontalScaling: 100,\n textRenderMode: 0, fillColorSpace: parentCtx.gs.fillColorSpace, strokeColorSpace: parentCtx.gs.strokeColorSpace,\n strokeOpacity: parentCtx.gs.strokeOpacity, fillOpacity: parentCtx.gs.fillOpacity,\n dashArray: [...parentCtx.gs.dashArray], dashPhase: parentCtx.gs.dashPhase,\n lineCap: parentCtx.gs.lineCap, lineJoin: parentCtx.gs.lineJoin,\n },\n operandStack: [], pageIndex: parentCtx.pageIndex,\n formDraws: parentCtx.formDraws, compatibilityMode: 0,\n mcidStack: [], ocgOffSet: parentCtx.ocgOffSet ?? new Set<string>(),\n ocgHiddenDepth: 0, perFragment: parentCtx.perFragment,\n patternFillImage: null,\n };\n}\n\nconst IGNORED_OPERATORS = new Set([\n 'ri',\n 'M', 'i',\n 'EI',\n 'MP', 'DP',\n]);\n\nfunction processStrokeColorOperator(\n token: string, operandStack: string[], gs: GraphicsState,\n popNum: () => number,\n): boolean {\n switch (token) {\n case 'RG': {\n const b = popNum();\n const g = popNum();\n const r = popNum();\n gs.strokeColor = rgbToHex(r, g, b);\n return true;\n }\n case 'G':\n gs.strokeColor = grayToHex(popNum());\n return true;\n case 'K': {\n const kk = popNum();\n const y = popNum();\n const m = popNum();\n const c = popNum();\n gs.strokeColor = cmykToRgbHex(c, m, y, kk);\n return true;\n }\n default:\n return false;\n }\n}\n\nfunction processPathBuildOperator(\n token: string, ctx: ContentExtractionContext, popNum: () => number,\n): boolean {\n const basic = processBasicPathOp(token, ctx, popNum);\n if (basic !== null) return basic;\n return processPathCurveOp(token, ctx, popNum);\n}\n\nfunction processBasicPathOp(token: string, ctx: ContentExtractionContext, popNum: () => number): boolean | null {\n switch (token) {\n case 'm': { const y = popNum(); const x = popNum(); ctx.currentPath.push({ op: 'm', args: [x, y] }); return true; }\n case 'l': { const y = popNum(); const x = popNum(); ctx.currentPath.push({ op: 'l', args: [x, y] }); return true; }\n case 're': {\n const h = popNum(); const w = popNum(); const y = popNum(); const x = popNum();\n ctx.currentPath.push({ op: 're', args: [x, y, w, h] }); return true;\n }\n case 'h': ctx.currentPath.push({ op: 'h', args: [] }); return true;\n case 'w': ctx.gs.lineWidth = popNum(); return true;\n default: return null;\n }\n}\n\nfunction processPathCurveOp(token: string, ctx: ContentExtractionContext, popNum: () => number): boolean {\n switch (token) {\n case 'c': {\n const y3 = popNum(); const x3 = popNum(); const y2 = popNum(); const x2 = popNum();\n const y1 = popNum(); const x1 = popNum();\n ctx.currentPath.push({ op: 'c', args: [x1, y1, x2, y2, x3, y3] }); return true;\n }\n case 'v': {\n const y3 = popNum(); const x3 = popNum(); const y2 = popNum(); const x2 = popNum();\n ctx.currentPath.push({ op: 'v', args: [x2, y2, x3, y3] }); return true;\n }\n case 'y': {\n const y3 = popNum(); const x3 = popNum(); const y1 = popNum(); const x1 = popNum();\n ctx.currentPath.push({ op: 'y', args: [x1, y1, x3, y3] }); return true;\n }\n default: return false;\n }\n}\n\nfunction transformPoint(x: number, y: number, ctm: number[]): { tx: number; ty: number } {\n return {\n tx: x * ctm[0] + y * ctm[2] + ctm[4],\n ty: x * ctm[1] + y * ctm[3] + ctm[5],\n };\n}\n\nfunction emitRectFromReOp(op: PathOp, ctx: ContentExtractionContext, stroked: boolean, filled: boolean): void {\n const [rx, ry, rw, rh] = op.args;\n const p1 = transformPoint(rx, ry, ctx.gs.ctm);\n const p2 = transformPoint(rx + rw, ry + rh, ctx.gs.ctm);\n const x = Math.min(p1.tx, p2.tx);\n const y = Math.min(p1.ty, p2.ty);\n const width = Math.abs(p2.tx - p1.tx);\n const height = Math.abs(p2.ty - p1.ty);\n ctx.pathRects.push({\n x, y, width, height,\n page: ctx.pageIndex, stroked, filled,\n strokeColor: ctx.gs.strokeColor,\n fillColor: ctx.gs.fillColor,\n lineWidth: ctx.gs.lineWidth,\n });\n}\n\nfunction emitRectFromLine(\n x1: number, y1: number, x2: number, y2: number,\n ctx: ContentExtractionContext, stroked: boolean, filled: boolean,\n): void {\n const p1 = transformPoint(x1, y1, ctx.gs.ctm);\n const p2 = transformPoint(x2, y2, ctx.gs.ctm);\n const lw = Math.max(ctx.gs.lineWidth, 0.5);\n const isHorizontal = Math.abs(p1.ty - p2.ty) < 2;\n const isVertical = Math.abs(p1.tx - p2.tx) < 2;\n if (!isHorizontal && !isVertical) return;\n\n if (isHorizontal) {\n const x = Math.min(p1.tx, p2.tx);\n const width = Math.abs(p2.tx - p1.tx);\n if (width < 5) return;\n ctx.pathRects.push({\n x, y: p1.ty - lw / 2, width, height: lw,\n page: ctx.pageIndex, stroked, filled,\n strokeColor: ctx.gs.strokeColor,\n fillColor: ctx.gs.fillColor,\n lineWidth: lw,\n });\n } else {\n const y = Math.min(p1.ty, p2.ty);\n const height = Math.abs(p2.ty - p1.ty);\n if (height < 5) return;\n ctx.pathRects.push({\n x: p1.tx - lw / 2, y, width: lw, height,\n page: ctx.pageIndex, stroked, filled,\n strokeColor: ctx.gs.strokeColor,\n fillColor: ctx.gs.fillColor,\n lineWidth: lw,\n });\n }\n}\n\ninterface SvgBounds {\n minX: number; minY: number; maxX: number; maxY: number; d: string;\n}\n\nfunction expandBoundsX(bounds: SvgBounds, ...xs: number[]): void {\n for (const x of xs) { bounds.minX = Math.min(bounds.minX, x); bounds.maxX = Math.max(bounds.maxX, x); }\n}\n\nfunction expandBoundsY(bounds: SvgBounds, ...ys: number[]): void {\n for (const y of ys) { bounds.minY = Math.min(bounds.minY, y); bounds.maxY = Math.max(bounds.maxY, y); }\n}\n\nfunction accumulateSvgOp(op: PathOp, ctm: number[], bounds: SvgBounds): void {\n const a = op.args;\n if (op.op === 'm' || op.op === 'l') {\n const { tx: x, ty: y } = transformPoint(a[0], a[1], ctm);\n bounds.d += op.op === 'm' ? `M${x.toFixed(1)},${y.toFixed(1)}` : `L${x.toFixed(1)},${y.toFixed(1)}`;\n expandBoundsX(bounds, x); expandBoundsY(bounds, y);\n return;\n }\n if (op.op === 'c') {\n const { tx: x1, ty: y1 } = transformPoint(a[0], a[1], ctm);\n const { tx: x2, ty: y2 } = transformPoint(a[2], a[3], ctm);\n const { tx: x3, ty: y3 } = transformPoint(a[4], a[5], ctm);\n bounds.d += `C${x1.toFixed(1)},${y1.toFixed(1)},${x2.toFixed(1)},${y2.toFixed(1)},${x3.toFixed(1)},${y3.toFixed(1)}`;\n expandBoundsX(bounds, x1, x2, x3); expandBoundsY(bounds, y1, y2, y3);\n return;\n }\n if (op.op === 'v') {\n const { tx: x2, ty: y2 } = transformPoint(a[0], a[1], ctm);\n const { tx: x3, ty: y3 } = transformPoint(a[2], a[3], ctm);\n bounds.d += `S${x2.toFixed(1)},${y2.toFixed(1)},${x3.toFixed(1)},${y3.toFixed(1)}`;\n expandBoundsX(bounds, x2, x3); expandBoundsY(bounds, y2, y3);\n return;\n }\n if (op.op === 'y') {\n const { tx: x1, ty: y1 } = transformPoint(a[0], a[1], ctm);\n const { tx: x3, ty: y3 } = transformPoint(a[2], a[3], ctm);\n bounds.d += `Q${x1.toFixed(1)},${y1.toFixed(1)},${x3.toFixed(1)},${y3.toFixed(1)}`;\n expandBoundsX(bounds, x1, x3); expandBoundsY(bounds, y1, y3);\n return;\n }\n if (op.op === 'h') {\n bounds.d += 'Z';\n return;\n }\n if (op.op === 're') {\n const { tx: rx, ty: ry } = transformPoint(a[0], a[1], ctm);\n const w = a[2] * Math.abs(ctm[0]);\n const h = a[3] * Math.abs(ctm[3]);\n bounds.d += `M${rx.toFixed(1)},${ry.toFixed(1)}h${w.toFixed(1)}v${h.toFixed(1)}h${(-w).toFixed(1)}Z`;\n expandBoundsX(bounds, rx, rx + w); expandBoundsY(bounds, ry, ry + h);\n }\n}\n\nfunction pathOpsToSvg(ops: ReadonlyArray<PathOp>, ctx: ContentExtractionContext, stroked: boolean, filled: boolean): void {\n const hasCurves = ops.some(op => op.op === 'c' || op.op === 'v' || op.op === 'y');\n if (!hasCurves) return;\n\n const bounds: SvgBounds = { minX: Infinity, minY: Infinity, maxX: -Infinity, maxY: -Infinity, d: '' };\n for (const op of ops) {\n accumulateSvgOp(op, ctx.gs.ctm, bounds);\n }\n\n const { minX, minY, maxX, maxY, d } = bounds;\n if (!d || minX === Infinity) return;\n\n const width = Math.ceil(maxX - minX + 2);\n const height = Math.ceil(maxY - minY + 2);\n if (width < 2 || height < 2 || width > 5000 || height > 5000) return;\n\n const fillAttr = filled ? `fill=\"${ctx.gs.fillColor}\"` : 'fill=\"none\"';\n const strokeAttr = stroked ? `stroke=\"${ctx.gs.strokeColor}\" stroke-width=\"${Math.max(ctx.gs.lineWidth, 0.5)}\"` : '';\n const opacityAttr = ctx.gs.fillOpacity < 1 ? ` opacity=\"${ctx.gs.fillOpacity}\"` : '';\n\n const svgHtml = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\" viewBox=\"${(minX - 1).toFixed(1)} ${(minY - 1).toFixed(1)} ${width} ${height}\" style=\"max-width:100%;height:auto\"><path d=\"${d}\" ${fillAttr} ${strokeAttr}${opacityAttr}/></svg>`;\n\n const strokeWidth = Math.max(ctx.gs.lineWidth, 0.5);\n const avgY = (minY + maxY) / 2;\n ctx.imageItems.push({\n dataUrl: `data:image/svg+xml;base64,${btoa(svgHtml)}`,\n width,\n height,\n renderWidth: width,\n renderHeight: height,\n x: minX,\n y: avgY,\n page: ctx.pageIndex,\n svgStrokeColor: stroked && !filled ? ctx.gs.strokeColor : '',\n svgStrokeWidth: stroked ? strokeWidth : 0,\n });\n}\n\nfunction extractPathOpPoints(\n op: PathOp, curX: number, curY: number,\n): { points: Array<{ x: number; y: number }>; newX: number; newY: number } {\n switch (op.op) {\n case 'm':\n case 'l':\n return { points: [{ x: op.args[0], y: op.args[1] }], newX: op.args[0], newY: op.args[1] };\n case 'c':\n return {\n points: [\n { x: op.args[0], y: op.args[1] },\n { x: op.args[2], y: op.args[3] },\n { x: op.args[4], y: op.args[5] },\n ],\n newX: op.args[4], newY: op.args[5],\n };\n case 'v':\n return {\n points: [\n { x: curX, y: curY },\n { x: op.args[0], y: op.args[1] },\n { x: op.args[2], y: op.args[3] },\n ],\n newX: op.args[2], newY: op.args[3],\n };\n case 'y':\n return {\n points: [\n { x: op.args[0], y: op.args[1] },\n { x: op.args[2], y: op.args[3] },\n ],\n newX: op.args[2], newY: op.args[3],\n };\n case 're': {\n const [x, y, w, h] = op.args;\n return {\n points: [{ x, y }, { x: x + w, y }, { x: x + w, y: y + h }, { x, y: y + h }],\n newX: x, newY: y,\n };\n }\n default:\n return { points: [], newX: curX, newY: curY };\n }\n}\n\nfunction computePathBounds(\n ops: ReadonlyArray<PathOp>, ctm: number[],\n): { minX: number; minY: number; maxX: number; maxY: number; hasPoints: boolean } {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n let curX = 0;\n let curY = 0;\n let hasPoints = false;\n\n for (const op of ops) {\n const { points, newX, newY } = extractPathOpPoints(op, curX, curY);\n curX = newX;\n curY = newY;\n for (const p of points) {\n const { tx, ty } = transformPoint(p.x, p.y, ctm);\n if (tx < minX) minX = tx;\n if (ty < minY) minY = ty;\n if (tx > maxX) maxX = tx;\n if (ty > maxY) maxY = ty;\n hasPoints = true;\n }\n }\n return { minX, minY, maxX, maxY, hasPoints };\n}\n\nfunction emitBoundingBoxRect(\n ops: ReadonlyArray<PathOp>, ctx: ContentExtractionContext,\n stroked: boolean, filled: boolean,\n): void {\n const { minX, minY, maxX, maxY, hasPoints } = computePathBounds(ops, ctx.gs.ctm);\n if (!hasPoints) return;\n const width = maxX - minX;\n const height = maxY - minY;\n if (width < 5 || height < 5) return;\n\n ctx.pathRects.push({\n x: minX, y: minY, width, height,\n page: ctx.pageIndex, stroked, filled,\n strokeColor: ctx.gs.strokeColor,\n fillColor: ctx.gs.fillColor,\n lineWidth: ctx.gs.lineWidth,\n });\n}\n\nfunction emitPathRects(ctx: ContentExtractionContext, stroked: boolean, filled: boolean): void {\n let lastMoveX = 0;\n let lastMoveY = 0;\n\n for (const op of ctx.currentPath) {\n if (op.op === 're') {\n emitRectFromReOp(op, ctx, stroked, filled);\n } else if (op.op === 'm') {\n lastMoveX = op.args[0];\n lastMoveY = op.args[1];\n } else if (op.op === 'l') {\n emitRectFromLine(lastMoveX, lastMoveY, op.args[0], op.args[1], ctx, stroked, filled);\n lastMoveX = op.args[0];\n lastMoveY = op.args[1];\n }\n }\n\n // Emit bounding-box rect for paths containing curves (rounded rects, button borders)\n if (ctx.currentPath.some(op => op.op === 'c' || op.op === 'v' || op.op === 'y')) {\n const nonReOps = ctx.currentPath.filter(op => op.op !== 're');\n emitBoundingBoxRect(nonReOps, ctx, stroked, filled);\n }\n}\n\n/**\n * Extracts the single Image XObject drawn by a Type-1 tiling pattern, as a data\n * URL, or null when the pattern is not an image-backed tiling pattern. Mirrors\n * the pixel-perfect renderer's pattern handling so logos painted via a\n * `/Pattern cs` + `scn` fill (e.g. a letterhead logo) are recovered in the\n * readable path too. No tiling repetition or general pattern rendering — only\n * the one embedded image is emitted, positioned at the filled path's bounds.\n */\nfunction extractPatternImage(\n reader: PdfReader,\n patternName: string,\n resources: Record<string, PdfObject>,\n): string | null {\n const patterns = resources['Pattern'] ? reader.getDict(resources['Pattern']) : {};\n const patRef = patterns[patternName];\n if (!patRef) return null;\n const patDict = reader.getDict(patRef);\n if (reader.getNumber(patDict['PatternType']) !== 1) return null;\n const patRes = patDict['Resources'] ? reader.getDict(patDict['Resources']) : {};\n const patXObj = patRes['XObject'] ? reader.getDict(patRes['XObject']) : {};\n for (const imgRef of Object.values(patXObj)) {\n const imgDict = reader.getDict(imgRef);\n if (reader.getString(imgDict['Subtype']) !== 'Image') continue;\n const w = reader.getNumber(imgDict['Width']);\n const h = reader.getNumber(imgDict['Height']);\n if (w <= 0 || h <= 0) continue;\n const filterName = resolveImageFilterName(reader, imgDict);\n const dataUrl = buildImageDataUrl(filterName, reader.resolveDeep(imgRef), reader, w, h, imgDict);\n if (dataUrl) return dataUrl;\n }\n return null;\n}\n\n/** Emits a pending pattern-fill image at the current path's device bounds. */\nfunction emitPatternFillImage(ctx: ContentExtractionContext): boolean {\n const dataUrl = ctx.patternFillImage;\n ctx.patternFillImage = null;\n if (!dataUrl) return false;\n const { minX, minY, maxX, maxY, hasPoints } = computePathBounds(ctx.currentPath, ctx.gs.ctm);\n if (!hasPoints) return false;\n const width = maxX - minX;\n const height = maxY - minY;\n if (width <= 1 || height <= 1) return false;\n const x = Math.round(minX * 100) / 100;\n const y = Math.round(minY * 100) / 100;\n // A logo is often over-painted (repeated fills at the same spot for opacity);\n // absolute rendering overlaps them into one, so the flowing path must too.\n const isDuplicate = ctx.imageItems.some(item =>\n item.dataUrl === dataUrl && Math.abs(item.x - x) < 1 && Math.abs(item.y - y) < 1);\n if (isDuplicate) return true;\n ctx.imageItems.push({\n dataUrl,\n width: Math.round(width),\n height: Math.round(height),\n renderWidth: width,\n renderHeight: height,\n x,\n y,\n page: ctx.pageIndex,\n });\n return true;\n}\n\nfunction processPathPaintOperator(token: string, ctx: ContentExtractionContext): boolean {\n switch (token) {\n case 'S':\n case 's':\n pathOpsToSvg(ctx.currentPath, ctx, true, false);\n emitPathRects(ctx, true, false);\n ctx.currentPath = [];\n return true;\n case 'f':\n case 'F':\n case 'f*':\n if (emitPatternFillImage(ctx)) { ctx.currentPath = []; return true; }\n pathOpsToSvg(ctx.currentPath, ctx, false, true);\n emitPathRects(ctx, false, true);\n ctx.currentPath = [];\n return true;\n case 'B':\n case 'B*':\n case 'b':\n case 'b*':\n if (emitPatternFillImage(ctx)) { ctx.currentPath = []; return true; }\n pathOpsToSvg(ctx.currentPath, ctx, true, true);\n emitPathRects(ctx, true, true);\n ctx.currentPath = [];\n return true;\n case 'n':\n ctx.currentPath = [];\n return true;\n default:\n return false;\n }\n}\n\nfunction processTextStateOperator(\n token: string, gs: GraphicsState, operandStack: string[],\n popNumber: () => number,\n): boolean {\n switch (token) {\n case 'TL': gs.leading = popNumber(); return true;\n case 'Tc': gs.charSpacing = popNumber(); return true;\n case 'Tw': gs.wordSpacing = popNumber(); return true;\n case 'Tz': gs.horizontalScaling = popNumber(); return true;\n case 'Ts': gs.textRise = popNumber(); return true;\n case 'Tr': gs.textRenderMode = popNumber(); return true;\n case 'Tf': {\n gs.fontSize = popNumber();\n const fontNameToken = operandStack.pop() ?? '';\n gs.fontName = fontNameToken.startsWith('/') ? fontNameToken.slice(1) : fontNameToken;\n return true;\n }\n default: return false;\n }\n}\n\nfunction processMatrixOperator(\n token: string, gs: GraphicsState, popNumber: () => number,\n): boolean {\n switch (token) {\n case 'cm': {\n const f = popNumber(); const e = popNumber();\n const d = popNumber(); const c = popNumber();\n const b = popNumber(); const a = popNumber();\n gs.ctm = multiplyMatrix([a, b, c, d, e, f], gs.ctm);\n return true;\n }\n case 'Tm': {\n const f = popNumber(); const e = popNumber();\n const d = popNumber(); const c = popNumber();\n const b = popNumber(); const a = popNumber();\n gs.textMatrix = [a, b, c, d, e, f];\n gs.lineMatrix = [a, b, c, d, e, f];\n return true;\n }\n case 'Td': {\n const ty = popNumber(); const tx = popNumber();\n gs.textMatrix = multiplyMatrix([1, 0, 0, 1, tx, ty], gs.lineMatrix);\n gs.lineMatrix = gs.textMatrix.slice();\n return true;\n }\n case 'TD': {\n const ty = popNumber(); const tx = popNumber();\n gs.leading = -ty;\n gs.textMatrix = multiplyMatrix([1, 0, 0, 1, tx, ty], gs.lineMatrix);\n gs.lineMatrix = gs.textMatrix.slice();\n return true;\n }\n case 'T*':\n gs.textMatrix = multiplyMatrix([1, 0, 0, 1, 0, -gs.leading], gs.lineMatrix);\n gs.lineMatrix = gs.textMatrix.slice();\n return true;\n default:\n return false;\n }\n}\n\ninterface PathOp {\n readonly op: string;\n readonly args: number[];\n}\n\ninterface ContentExtractionContext {\n reader: PdfReader;\n fontInfoMap: Map<string, FontInfo>;\n xObjectDict: Record<string, PdfObject>;\n resources: Record<string, PdfObject>;\n textItems: TextItem[];\n imageItems: ImageItem[];\n pathRects: PathRect[];\n currentPath: PathOp[];\n stateStack: GraphicsState[];\n gs: GraphicsState;\n operandStack: string[];\n pageIndex: number;\n /** Form XObjects being drawn right now on this page, and how many have been. */\n formDraws: DrawPath<PdfObject>;\n compatibilityMode: number;\n mcidStack: number[];\n ocgOffSet: Set<string>;\n ocgHiddenDepth: number;\n perFragment: boolean;\n /** Data URL of the image a tiling-pattern fill will paint, set at `scn`,\n * consumed by the next path-paint. Null when no pattern fill is pending. */\n patternFillImage: string | null;\n}\n\nfunction popNumber(ctx: ContentExtractionContext): number {\n const val = ctx.operandStack.pop();\n return val === undefined ? 0 : Number.parseFloat(val);\n}\n\nfunction popString(ctx: ContentExtractionContext): string {\n const val = ctx.operandStack.pop();\n if (!val) return '';\n return val.startsWith('(') && val.endsWith(')') ? val.slice(1, -1) : val;\n}\n\nfunction processDashOperator(ctx: ContentExtractionContext): void {\n const phase = popNumber(ctx);\n const arrTokens: string[] = [];\n while (ctx.operandStack.length > 0) arrTokens.unshift(ctx.operandStack.pop() ?? '');\n const nums: number[] = [];\n for (const t of arrTokens) {\n if (t === '[' || t === ']') continue;\n const n = Number.parseFloat(t);\n if (!Number.isNaN(n)) nums.push(n);\n }\n ctx.gs.dashArray = nums;\n ctx.gs.dashPhase = phase;\n}\n\nfunction processStateToken(token: string, ctx: ContentExtractionContext): boolean {\n if (token === 'q') { ctx.stateStack.push(structuredClone(ctx.gs)); return true; }\n if (token === 'Q') {\n if (ctx.stateStack.length > 0) {\n const prevState = ctx.stateStack.pop();\n if (prevState) { ctx.gs = prevState; }\n }\n return true;\n }\n if (token === 'BT') { ctx.gs.textMatrix = identityMatrix(); ctx.gs.lineMatrix = identityMatrix(); return true; }\n if (token === 'ET') return true;\n if (token === 'J') { ctx.gs.lineCap = popNumber(ctx); return true; }\n if (token === 'j') { ctx.gs.lineJoin = popNumber(ctx); return true; }\n if (token === 'W' || token === 'W*') { return true; }\n if (token === 'd') { processDashOperator(ctx); return true; }\n return false;\n}\n\nfunction currentMcid(ctx: ContentExtractionContext): number {\n for (let i = ctx.mcidStack.length - 1; i >= 0; i--) {\n if (ctx.mcidStack[i] >= 0) return ctx.mcidStack[i];\n }\n return -1;\n}\n\nfunction processTextShowToken(token: string, ctx: ContentExtractionContext): boolean {\n const mcid = currentMcid(ctx);\n const showFn = ctx.perFragment ? processTextShowPerChar : processTextShow;\n\n if (token === 'Tj') {\n showFn(popString(ctx), ctx.gs, ctx.fontInfoMap, ctx.textItems, ctx.pageIndex, mcid);\n return true;\n }\n if (token === \"'\") {\n ctx.gs.textMatrix = multiplyMatrix([1, 0, 0, 1, 0, -ctx.gs.leading], ctx.gs.lineMatrix);\n ctx.gs.lineMatrix = ctx.gs.textMatrix.slice();\n showFn(popString(ctx), ctx.gs, ctx.fontInfoMap, ctx.textItems, ctx.pageIndex, mcid);\n return true;\n }\n if (token === '\"') {\n const raw = popString(ctx);\n ctx.gs.charSpacing = popNumber(ctx); ctx.gs.wordSpacing = popNumber(ctx);\n ctx.gs.textMatrix = multiplyMatrix([1, 0, 0, 1, 0, -ctx.gs.leading], ctx.gs.lineMatrix);\n ctx.gs.lineMatrix = ctx.gs.textMatrix.slice();\n showFn(raw, ctx.gs, ctx.fontInfoMap, ctx.textItems, ctx.pageIndex, mcid);\n return true;\n }\n if (token === 'TJ') {\n if (ctx.perFragment) {\n processTJOperatorPerChar(ctx.operandStack, ctx.gs, ctx.fontInfoMap, ctx.textItems, ctx.pageIndex, mcid);\n } else {\n processTJOperator(ctx.operandStack, ctx.gs, ctx.fontInfoMap, ctx.textItems, ctx.pageIndex, mcid);\n }\n return true;\n }\n return false;\n}\n\nfunction processResourceToken(token: string, ctx: ContentExtractionContext, tokens: string[], tokenIndex: number): number {\n if (token === 'Do') {\n processDoOperator(ctx);\n return tokenIndex;\n }\n if (token === 'BI') {\n const inlineImgResult = parseInlineImage(tokens, tokenIndex - 1, ctx.gs.ctm, ctx.pageIndex);\n if (inlineImgResult) {\n if (inlineImgResult.imageItem?.dataUrl) ctx.imageItems.push(inlineImgResult.imageItem);\n return inlineImgResult.newIndex + 1;\n }\n return tokenIndex;\n }\n return -1;\n}\n\nfunction applyGsFontFromArr(ctx: ContentExtractionContext, fontArr: PdfObject): void {\n const arr = ctx.reader.getArray(fontArr);\n if (arr.length < 2) return;\n const fontRef = arr[0];\n const fontSize = ctx.reader.getNumber(arr[1]);\n if (fontSize > 0) ctx.gs.fontSize = fontSize;\n const fontDict = ctx.reader.getDict(fontRef);\n const baseFontObj = fontDict['BaseFont'];\n if (baseFontObj) {\n const baseFontName = ctx.reader.getString(baseFontObj);\n if (baseFontName) ctx.gs.fontName = baseFontName;\n }\n}\n\nfunction processGsOperator(ctx: ContentExtractionContext): void {\n const rawName = ctx.operandStack.pop() ?? '';\n const name = rawName.startsWith('/') ? rawName.slice(1) : rawName;\n const extGStateDict = ctx.resources['ExtGState']\n ? ctx.reader.getDict(ctx.resources['ExtGState'])\n : {};\n const gsRef = extGStateDict[name];\n if (!gsRef) return;\n const gsDict = ctx.reader.getDict(gsRef);\n\n const fontArr = gsDict['Font'];\n if (fontArr) { applyGsFontFromArr(ctx, fontArr); }\n\n const lwObj = gsDict['LW'];\n if (lwObj) {\n const lw = ctx.reader.getNumber(lwObj);\n if (lw > 0) ctx.gs.lineWidth = lw;\n }\n\n const caObj = gsDict['CA'];\n if (caObj) ctx.gs.strokeOpacity = ctx.reader.getNumber(caObj);\n\n const caLowerObj = gsDict['ca'];\n if (caLowerObj) ctx.gs.fillOpacity = ctx.reader.getNumber(caLowerObj);\n}\n\nfunction resolveIccBasedComponents(reader: PdfReader, csArr: PdfObject[]): number {\n if (csArr.length < 2) return -1;\n const iccDict = reader.getDict(csArr[1]);\n const n = reader.getNumber(iccDict['N']);\n return (n === 1 || n === 3 || n === 4) ? n : 3;\n}\n\nfunction resolveIndexedComponents(reader: PdfReader, csArr: PdfObject[]): number {\n if (csArr.length < 2) return 3;\n const baseCs = reader.getString(csArr[1]);\n if (baseCs === 'DeviceRGB' || baseCs === 'CalRGB') return 3;\n if (baseCs === 'DeviceCMYK') return 4;\n return 3;\n}\n\nfunction resolveColorSpaceTypeComponents(reader: PdfReader, csType: string, csArr: PdfObject[]): number {\n if (csType === 'ICCBased') return resolveIccBasedComponents(reader, csArr);\n if (csType === 'CalRGB') return 3;\n if (csType === 'CalGray') return 1;\n if (csType === 'Indexed') return resolveIndexedComponents(reader, csArr);\n if (csType === 'Separation' || csType === 'DeviceN') return 1;\n if (csType === 'Pattern') return 0;\n return -1;\n}\n\nfunction resolveColorSpaceComponents(ctx: ContentExtractionContext, csName: string): number {\n if (csName === 'DeviceRGB' || csName === 'CalRGB') return 3;\n if (csName === 'DeviceGray' || csName === 'CalGray') return 1;\n if (csName === 'DeviceCMYK') return 4;\n\n const csResDict = ctx.resources['ColorSpace']\n ? ctx.reader.getDict(ctx.resources['ColorSpace'])\n : {};\n const csRef = csResDict[csName];\n if (!csRef) return -1;\n\n const csArr = ctx.reader.getArray(csRef);\n if (csArr.length === 0) return -1;\n\n const csType = ctx.reader.getString(csArr[0]);\n return resolveColorSpaceTypeComponents(ctx.reader, csType, csArr);\n}\n\nfunction processColorSpaceOperator(token: string, ctx: ContentExtractionContext): boolean {\n if (token === 'cs') {\n const rawName = ctx.operandStack.pop() ?? '';\n ctx.gs.fillColorSpace = rawName.startsWith('/') ? rawName.slice(1) : rawName;\n return true;\n }\n if (token === 'CS') {\n const rawName = ctx.operandStack.pop() ?? '';\n ctx.gs.strokeColorSpace = rawName.startsWith('/') ? rawName.slice(1) : rawName;\n return true;\n }\n return false;\n}\n\nfunction processStrokeColorSpaceOperator(token: string, ctx: ContentExtractionContext): boolean {\n if (token !== 'SC' && token !== 'SCN') return false;\n\n const values: number[] = [];\n while (ctx.operandStack.length > 0) {\n const v = ctx.operandStack.pop() ?? '';\n if (v.startsWith('/')) continue;\n const num = Number.parseFloat(v);\n if (!Number.isNaN(num)) values.unshift(num);\n }\n\n const cs = ctx.gs.strokeColorSpace;\n const components = resolveColorSpaceComponents(ctx, cs);\n if (components === 3 && values.length >= 3) {\n ctx.gs.strokeColor = rgbToHex(values[0], values[1], values[2]);\n } else if (components === 1 && values.length >= 1) {\n ctx.gs.strokeColor = grayToHex(values[0]);\n } else if (components === 4 && values.length >= 4) {\n ctx.gs.strokeColor = cmykToRgbHex(values[0], values[1], values[2], values[3]);\n }\n return true;\n}\n\nfunction findMcidInDictSlice(stack: string[], start: number): number {\n for (let j = start + 1; j < stack.length - 1; j++) {\n if (stack[j] === '/MCID') {\n const val = Number.parseInt(stack[j + 1], 10);\n if (!Number.isNaN(val)) return val;\n }\n if (stack[j] === '>>') break;\n }\n return -1;\n}\n\nfunction extractMcidFromOperands(ctx: ContentExtractionContext): number {\n const stack = ctx.operandStack;\n for (let i = stack.length - 1; i >= 0; i--) {\n if (stack[i] === '/MCID' && i + 1 < stack.length) {\n const val = Number.parseInt(stack[i + 1], 10);\n if (!Number.isNaN(val)) return val;\n }\n }\n for (let i = 0; i < stack.length; i++) {\n if (stack[i] === '<<') {\n const val = findMcidInDictSlice(stack, i);\n if (val >= 0) return val;\n }\n }\n return -1;\n}\n\nfunction processMarkedContentToken(token: string, ctx: ContentExtractionContext): boolean {\n if (token === 'BMC') {\n ctx.operandStack.length = 0;\n ctx.mcidStack.push(-1);\n return true;\n }\n if (token === 'BDC') {\n const mcid = extractMcidFromOperands(ctx);\n ctx.operandStack.length = 0;\n ctx.mcidStack.push(mcid);\n return true;\n }\n if (token === 'EMC') {\n if (ctx.mcidStack.length > 0) ctx.mcidStack.pop();\n return true;\n }\n return false;\n}\n\nfunction dispatchContentOperator(token: string, ctx: ContentExtractionContext): boolean {\n if (processMarkedContentToken(token, ctx)) return true;\n if (processStateToken(token, ctx)) return true;\n if (processMatrixOperator(token, ctx.gs, () => popNumber(ctx))) return true;\n if (processTextStateOperator(token, ctx.gs, ctx.operandStack, () => popNumber(ctx))) return true;\n if (processTextShowToken(token, ctx)) return true;\n if (processColorSpaceOperator(token, ctx)) return true;\n if (processColorOperator(token, ctx, () => popNumber(ctx))) return true;\n if (processStrokeColorOperator(token, ctx.operandStack, ctx.gs, () => popNumber(ctx))) return true;\n if (processStrokeColorSpaceOperator(token, ctx)) return true;\n if (processPathBuildOperator(token, ctx, () => popNumber(ctx))) return true;\n if (processPathPaintOperator(token, ctx)) return true;\n return false;\n}\n\nfunction processContentToken(token: string, ctx: ContentExtractionContext, tokens: string[], tokenIndex: number): number {\n if (token === 'BX') { ctx.compatibilityMode++; ctx.operandStack.length = 0; return tokenIndex; }\n if (token === 'EX') { if (ctx.compatibilityMode > 0) { ctx.compatibilityMode--; } ctx.operandStack.length = 0; return tokenIndex; }\n if (token === 'gs') { processGsOperator(ctx); ctx.operandStack.length = 0; return tokenIndex; }\n\n if (dispatchContentOperator(token, ctx)) return tokenIndex;\n\n const resourceResult = processResourceToken(token, ctx, tokens, tokenIndex);\n if (resourceResult >= 0) return resourceResult;\n\n if (token === 'sh' || IGNORED_OPERATORS.has(token) || ctx.compatibilityMode > 0) {\n ctx.operandStack.length = 0;\n return tokenIndex;\n }\n\n ctx.operandStack.push(token);\n return tokenIndex;\n}\n\nexport function getPageMediaBox(reader: PdfReader, pageDict: Record<string, PdfObject>): number[] {\n const mbObj = pageDict['CropBox'] ?? pageDict['MediaBox'];\n if (!mbObj) return [0, 0, 612, 792];\n const arr = reader.getArray(mbObj);\n if (arr.length < 4) return [0, 0, 612, 792];\n return arr.map(o => reader.getNumber(o));\n}\n\nfunction buildRotationCtm(rotate: number, mediaBox: number[]): number[] {\n const width = mediaBox[2] - mediaBox[0];\n const height = mediaBox[3] - mediaBox[1];\n const normalizedRotate = ((rotate % 360) + 360) % 360;\n\n switch (normalizedRotate) {\n case 90:\n return [0, -1, 1, 0, 0, width];\n case 180:\n return [-1, 0, 0, -1, width, height];\n case 270:\n return [0, 1, -1, 0, height, 0];\n default:\n return identityMatrix();\n }\n}\n\nfunction tryExtractLinkAnnotation(reader: PdfReader, annotRef: PdfObject, pageIndex: number): PdfAnnotation | null {\n const annot = reader.getDict(annotRef);\n const subtype = reader.getString(annot['Subtype'] ?? { type: 'null', value: null });\n if (subtype !== 'Link') return null;\n const aObj = annot['A'];\n if (!aObj) return null;\n const action = reader.getDict(aObj);\n const sType = reader.getString(action['S'] ?? { type: 'null', value: null });\n if (sType !== 'URI') return null;\n const uriObj = action['URI'];\n if (!uriObj) return null;\n const uri = reader.getString(uriObj);\n if (!uri) return null;\n const rectObj = annot['Rect'];\n if (!rectObj) return null;\n const rect = reader.getArray(rectObj).map(o => reader.getNumber(o));\n if (rect.length < 4) return null;\n return {\n x: Math.min(rect[0], rect[2]),\n y: Math.min(rect[1], rect[3]),\n width: Math.abs(rect[2] - rect[0]),\n height: Math.abs(rect[3] - rect[1]),\n page: pageIndex,\n uri,\n };\n}\n\nfunction tryPushAnnotation(reader: PdfReader, annotRef: PdfObject, pageIndex: number, annotations: PdfAnnotation[]): void {\n try {\n const annotation = tryExtractLinkAnnotation(reader, annotRef, pageIndex);\n if (annotation) annotations.push(annotation);\n } catch { /* skip malformed annotation */ }\n}\n\nfunction extractAnnotations(reader: PdfReader, pageDict: Record<string, PdfObject>, pageIndex: number): PdfAnnotation[] {\n const annotsObj = pageDict['Annots'];\n if (!annotsObj) return [];\n const annotations: PdfAnnotation[] = [];\n try {\n const annots = reader.getArray(annotsObj);\n for (const annotRef of annots) {\n tryPushAnnotation(reader, annotRef, pageIndex, annotations);\n }\n } catch { /* skip if annots can't be parsed */ }\n return annotations;\n}\n\nexport interface ExtractPageOptions {\n readonly perFragment?: boolean;\n}\n\nfunction buildExtractionContext(\n reader: PdfReader,\n resources: Record<string, PdfObject>,\n fontDict: Record<string, PdfObject>,\n xObjectDict: Record<string, PdfObject>,\n initialCtm: number[],\n pageIndex: number,\n options?: ExtractPageOptions,\n): ContentExtractionContext {\n const fontInfoMap = new Map<string, FontInfo>();\n for (const [fontName, fontRef] of Object.entries(fontDict)) {\n fontInfoMap.set(fontName, buildFontInfo(reader, fontRef));\n }\n return {\n reader, fontInfoMap, xObjectDict, resources,\n textItems: [], imageItems: [], pathRects: [],\n currentPath: [], stateStack: [],\n gs: {\n ctm: initialCtm, fontSize: 12, fontName: '', fillColor: '#000000',\n strokeColor: '#000000', lineWidth: 1,\n textMatrix: identityMatrix(), lineMatrix: identityMatrix(),\n leading: 0, charSpacing: 0, wordSpacing: 0, textRise: 0, horizontalScaling: 100,\n textRenderMode: 0, fillColorSpace: 'DeviceRGB', strokeColorSpace: 'DeviceRGB',\n strokeOpacity: 1, fillOpacity: 1,\n dashArray: [], dashPhase: 0, lineCap: 0, lineJoin: 0,\n },\n operandStack: [], pageIndex,\n formDraws: new DrawPath(reader.limits.maxNestingDepth, reader.limits.maxFormDrawsPerPage), compatibilityMode: 0,\n mcidStack: [], ocgOffSet: new Set<string>(),\n ocgHiddenDepth: 0, perFragment: options?.perFragment ?? false,\n patternFillImage: null,\n };\n}\n\nfunction runExtractionTokens(ctx: ContentExtractionContext, tokens: string[]): void {\n let i = 0;\n while (i < tokens.length) {\n const token = tokens[i];\n i++;\n i = processContentToken(token, ctx, tokens, i);\n }\n}\n\nexport function extractPageContent(\n reader: PdfReader,\n pageObj: PdfObject,\n pageIndex: number,\n options?: ExtractPageOptions,\n): { textItems: TextItem[]; imageItems: ImageItem[]; pathRects: PathRect[]; pageWidth: number; pageHeight: number; annotations: PdfAnnotation[] } {\n const pageDict = reader.getDict(pageObj);\n const mediaBox = getPageMediaBox(reader, pageDict);\n const rotate = reader.getNumber(pageDict['Rotate']);\n const normalizedRotate = ((rotate % 360) + 360) % 360;\n const rawWidth = mediaBox[2] - mediaBox[0];\n const rawHeight = mediaBox[3] - mediaBox[1];\n const isRotated = normalizedRotate === 90 || normalizedRotate === 270;\n const pageWidth = isRotated ? rawHeight : rawWidth;\n const pageHeight = isRotated ? rawWidth : rawHeight;\n\n const annotations = extractAnnotations(reader, pageDict, pageIndex);\n\n const contentsObj = pageDict['Contents'];\n if (!contentsObj) return { textItems: [], imageItems: [], pathRects: [], pageWidth, pageHeight, annotations };\n\n const contentData = resolveContentData(reader, contentsObj);\n if (contentData.length === 0) return { textItems: [], imageItems: [], pathRects: [], pageWidth, pageHeight, annotations };\n\n const resources = pageDict['Resources'] ? reader.getDict(pageDict['Resources']) : {};\n const fontDict = resources['Font'] ? reader.getDict(resources['Font']) : {};\n const xObjectDict = resources['XObject'] ? reader.getDict(resources['XObject']) : {};\n\n const initialCtm = buildRotationCtm(rotate, mediaBox);\n\n const tokens = tokenizeContentStream(contentData);\n const ctx = buildExtractionContext(reader, resources, fontDict, xObjectDict, initialCtm, pageIndex, options);\n runExtractionTokens(ctx, tokens);\n return { textItems: ctx.textItems, imageItems: ctx.imageItems, pathRects: ctx.pathRects, pageWidth, pageHeight, annotations };\n}\n\nexport function resolveImageFilterName(reader: PdfReader, dict: Record<string, PdfObject>): string {\n const filterObj = dict['Filter'];\n if (!filterObj) return '';\n const filterResolved = reader.resolveDeep(filterObj);\n if (filterResolved.type === 'name') return filterResolved.value as string;\n if (filterResolved.type !== 'array') return '';\n const arr = filterResolved.value as PdfObject[];\n const lastEntry = arr.at(-1);\n if (!lastEntry) return '';\n const last = reader.resolveDeep(lastEntry);\n return last.type === 'name' ? last.value as string : '';\n}\n\nconst ALLOWED_BITS_PER_COMPONENT: ReadonlySet<number> = new Set([1, 2, 4, 8, 16]);\n\n/**\n * Whether the declared raster is one we will expand into pixel rows, PNG and\n * base64 (roughly 24 bytes per source byte). The size is the file's claim, so it\n * is checked before anything is allocated for it.\n */\nfunction isDecodableRaster(reader: PdfReader, width: number, height: number, dict: Record<string, PdfObject>): boolean {\n const bpc = reader.getNumber(dict['BitsPerComponent']) || 8;\n return ALLOWED_BITS_PER_COMPONENT.has(bpc) && width * height <= reader.limits.maxImagePixels;\n}\n\nexport function buildImageDataUrl(\n filterName: string, xObj: PdfObject, reader: PdfReader,\n width: number, height: number, dict: Record<string, PdfObject>,\n): string | null {\n if (filterName === 'DCTDecode') {\n if (!xObj.stream) return null;\n return `data:image/jpeg;base64,${uint8ArrayToBase64(xObj.stream)}`;\n }\n if (filterName === 'JPXDecode') {\n if (!xObj.stream) return null;\n return `data:image/jp2;base64,${uint8ArrayToBase64(xObj.stream)}`;\n }\n if (!isDecodableRaster(reader, width, height, dict)) return null;\n const decoded = reader.getStreamData(xObj);\n if (decoded.length === 0) return null;\n const pngData = rawPixelsToPng(decoded, width, height, dict, reader);\n if (!pngData) return null;\n return `data:image/png;base64,${uint8ArrayToBase64(pngData)}`;\n}\n\nfunction extractXObjectImage(\n reader: PdfReader,\n xObj: PdfObject,\n ctm: number[],\n pageIndex: number,\n): ImageItem | null {\n const dict = xObj.value as Record<string, PdfObject>;\n const width = reader.getNumber(dict['Width']);\n const height = reader.getNumber(dict['Height']);\n if (width <= 0 || height <= 0) return null;\n\n const filterName = resolveImageFilterName(reader, dict);\n const dataUrl = buildImageDataUrl(filterName, xObj, reader, width, height, dict);\n if (!dataUrl) return null;\n\n return {\n dataUrl, width, height,\n renderWidth: Math.abs(ctm[0]),\n renderHeight: Math.abs(ctm[3]),\n x: Math.round(ctm[4] * 100) / 100,\n y: Math.round(ctm[5] * 100) / 100,\n page: pageIndex,\n };\n}\n\nconst INLINE_IMAGE_ABBREVS: Record<string, string> = {\n 'W': 'Width', 'H': 'Height', 'BPC': 'BitsPerComponent',\n 'CS': 'ColorSpace', 'F': 'Filter', 'D': 'Decode', 'DP': 'DecodeParms',\n 'IM': 'ImageMask', 'I': 'Interpolate',\n};\n\nconst INLINE_CS_ABBREVS: Record<string, string> = {\n 'G': 'DeviceGray', 'RGB': 'DeviceRGB', 'CMYK': 'DeviceCMYK',\n};\n\nconst INLINE_FILTER_ABBREVS: Record<string, string> = {\n 'AHx': 'ASCIIHexDecode', 'A85': 'ASCII85Decode',\n 'LZW': 'LZWDecode', 'Fl': 'FlateDecode',\n 'RL': 'RunLengthDecode', 'CCF': 'CCITTFaxDecode',\n 'DCT': 'DCTDecode',\n};\n\nfunction parseInlineImageDict(tokens: string[], startIdx: number): { dict: Record<string, string>; idIndex: number } {\n const dict: Record<string, string> = {};\n let i = startIdx;\n while (i < tokens.length && tokens[i] !== 'ID' && tokens[i] !== 'EI') {\n let key = tokens[i];\n if (key.startsWith('/')) key = key.slice(1);\n key = INLINE_IMAGE_ABBREVS[key] ?? key;\n i++;\n if (i >= tokens.length || tokens[i] === 'ID' || tokens[i] === 'EI') break;\n let val = tokens[i];\n if (val.startsWith('/')) val = val.slice(1);\n if (key === 'ColorSpace') val = INLINE_CS_ABBREVS[val] ?? val;\n if (key === 'Filter') val = INLINE_FILTER_ABBREVS[val] ?? val;\n dict[key] = val;\n i++;\n }\n return { dict, idIndex: i };\n}\n\nfunction parseInlineImage(\n tokens: string[],\n biIndex: number,\n ctm: number[],\n pageIndex: number,\n): { imageItem: ImageItem | null; newIndex: number } | null {\n const { dict, idIndex } = parseInlineImageDict(tokens, biIndex + 1);\n let i = idIndex;\n if (i < tokens.length && tokens[i] === 'ID') i++;\n while (i < tokens.length && tokens[i] !== 'EI') i++;\n\n const width = Number.parseInt(dict['Width'] ?? '0', 10);\n const height = Number.parseInt(dict['Height'] ?? '0', 10);\n if (width <= 0 || height <= 0) return { imageItem: null, newIndex: i };\n\n const filter = dict['Filter'] ?? '';\n if (filter === 'DCTDecode') {\n return { imageItem: null, newIndex: i };\n }\n\n return {\n imageItem: {\n dataUrl: '',\n width, height,\n renderWidth: Math.abs(ctm[0]),\n renderHeight: Math.abs(ctm[3]),\n x: Math.round(ctm[4] * 100) / 100,\n y: Math.round(ctm[5] * 100) / 100,\n page: pageIndex,\n },\n newIndex: i,\n };\n}\n\nfunction resolveIndexedLookup(reader: PdfReader, csArr: PdfObject[]): Uint8Array | null {\n if (csArr.length < 4) return null;\n const lookupObj = reader.resolveDeep(csArr[3]);\n if (lookupObj.type === 'stream' && lookupObj.stream) {\n return reader.decodeStreamData(lookupObj.value as Record<string, PdfObject>, lookupObj.stream);\n }\n if (lookupObj.type === 'string') {\n const str = lookupObj.value as string;\n const bytes = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) bytes[i] = str.codePointAt(i) ?? 0;\n return bytes;\n }\n return null;\n}\n\ntype ColorInfo = { channels: number; indexed: boolean; lookupTable: Uint8Array | null; baseChannels: number };\n\nconst DEFAULT_COLOR_INFO: ColorInfo = { channels: 3, indexed: false, lookupTable: null, baseChannels: 3 };\n\nfunction channelsFromName(name: string): number {\n if (name === 'DeviceRGB' || name === 'RGB' || name === 'CalRGB') return 3;\n if (name === 'DeviceCMYK' || name === 'CMYK') return 4;\n if (name === 'DeviceGray' || name === 'Gray' || name === 'G' || name === 'CalGray') return 1;\n return 3;\n}\n\nfunction resolveBaseChannels(reader: PdfReader, baseObj: PdfObject): number {\n const resolved = reader.resolveDeep(baseObj);\n if (resolved.type === 'name') return channelsFromName(resolved.value as string);\n if (resolved.type === 'array') {\n const arr = resolved.value as PdfObject[];\n const type = reader.getString(arr[0]);\n if (type === 'ICCBased' && arr.length >= 2) {\n return reader.getNumber(reader.getDict(arr[1])['N']) || 3;\n }\n }\n return 3;\n}\n\nfunction resolveColorInfoFromArray(reader: PdfReader, arr: PdfObject[]): ColorInfo {\n if (arr.length === 0) return DEFAULT_COLOR_INFO;\n const csType = reader.getString(arr[0]);\n\n if (csType === 'ICCBased' && arr.length >= 2) {\n const n = reader.getNumber(reader.getDict(arr[1])['N']);\n const ch = (n === 1 || n === 3 || n === 4) ? n : 3;\n return { channels: ch, indexed: false, lookupTable: null, baseChannels: ch };\n }\n\n if (csType === 'Indexed' && arr.length >= 4) {\n const baseChannels = resolveBaseChannels(reader, arr[1]);\n const lookup = resolveIndexedLookup(reader, arr);\n return { channels: 1, indexed: true, lookupTable: lookup, baseChannels };\n }\n\n if (csType === 'Separation' || csType === 'DeviceN') {\n return { channels: 1, indexed: false, lookupTable: null, baseChannels: 1 };\n }\n\n const ch = channelsFromName(csType);\n return { channels: ch, indexed: false, lookupTable: null, baseChannels: ch };\n}\n\nfunction resolveImageColorInfo(dict: Record<string, PdfObject>, reader: PdfReader): ColorInfo {\n const csObj = dict['ColorSpace'];\n if (!csObj) return DEFAULT_COLOR_INFO;\n\n const resolved = reader.resolveDeep(csObj);\n if (resolved.type === 'name') {\n const ch = channelsFromName(resolved.value as string);\n return { channels: ch, indexed: false, lookupTable: null, baseChannels: ch };\n }\n\n if (resolved.type === 'array') {\n return resolveColorInfoFromArray(reader, resolved.value as PdfObject[]);\n }\n\n return { channels: 3, indexed: false, lookupTable: null, baseChannels: 3 };\n}\n\nfunction channelsToRgb(data: Uint8Array, offset: number, ch: number): [number, number, number] {\n if (ch === 3) return [data[offset] ?? 0, data[offset + 1] ?? 0, data[offset + 2] ?? 0];\n if (ch === 1) { const g = data[offset] ?? 0; return [g, g, g]; }\n if (ch === 4) {\n const c = (data[offset] ?? 0) / 255, m = (data[offset + 1] ?? 0) / 255;\n const y = (data[offset + 2] ?? 0) / 255, k = (data[offset + 3] ?? 0) / 255;\n return [Math.round((1-c)*(1-k)*255), Math.round((1-m)*(1-k)*255), Math.round((1-y)*(1-k)*255)];\n }\n return [0, 0, 0];\n}\n\nfunction pixelToRgb(\n decoded: Uint8Array, srcIdx: number, channels: number,\n indexed: boolean, lookupTable: Uint8Array | null, baseChannels: number,\n): [number, number, number] {\n if (indexed && lookupTable) {\n const index = decoded[srcIdx] ?? 0;\n return channelsToRgb(lookupTable, index * baseChannels, baseChannels);\n }\n return channelsToRgb(decoded, srcIdx, channels);\n}\n\nfunction decodeSMask(dict: Record<string, PdfObject>, reader: PdfReader, width: number, height: number): Uint8Array | null {\n const smaskRef = dict['SMask'];\n if (!smaskRef) return null;\n try {\n const smaskDict = reader.getDict(smaskRef);\n const smaskW = reader.getNumber(smaskDict['Width']);\n const smaskH = reader.getNumber(smaskDict['Height']);\n if (smaskW !== width || smaskH !== height) return null;\n const maskData = reader.getStreamData(smaskRef);\n if (maskData.length < width * height) return null;\n return maskData;\n } catch {\n return null;\n }\n}\n\ninterface BitPackedPixelOptions {\n readonly decoded: Uint8Array;\n readonly col: number;\n readonly rowStart: number;\n readonly srcChannels: number;\n readonly bpc: number;\n readonly indexed: boolean;\n readonly lookupTable: Uint8Array | null;\n readonly baseChannels: number;\n}\n\ninterface PngRowOptions {\n readonly decoded: Uint8Array;\n readonly row: number;\n readonly width: number;\n readonly rowBytes: number;\n readonly srcChannels: number;\n readonly bpc: number;\n readonly channels: number;\n readonly indexed: boolean;\n readonly lookupTable: Uint8Array | null;\n readonly baseChannels: number;\n readonly smask: Uint8Array | null;\n readonly pixelBytes: number;\n}\n\nfunction decodeBitPackedPixel(opts: BitPackedPixelOptions): [number, number, number] {\n const { decoded, col, rowStart, srcChannels, bpc, indexed, lookupTable, baseChannels } = opts;\n const bitOffset = col * srcChannels * bpc;\n const byteIdx = rowStart + (bitOffset >> 3);\n const bitShift = 8 - bpc - (bitOffset & 7);\n const mask = (1 << bpc) - 1;\n const sample = (decoded[byteIdx] >> bitShift) & mask;\n const normalized = Math.round(sample * 255 / mask);\n if (indexed && lookupTable) {\n const lutOffset = sample * baseChannels;\n const r = lookupTable[lutOffset] ?? 0;\n const g = baseChannels >= 3 ? (lookupTable[lutOffset + 1] ?? 0) : r;\n const b = baseChannels >= 3 ? (lookupTable[lutOffset + 2] ?? 0) : r;\n return [r, g, b];\n }\n return [normalized, normalized, normalized];\n}\n\nfunction buildPngRow(opts: PngRowOptions): Uint8Array {\n const { decoded, row, width, rowBytes, srcChannels, bpc, channels, indexed, lookupTable, baseChannels, smask, pixelBytes } = opts;\n const rowStart = row * rowBytes;\n const pixelRow = new Uint8Array(width * pixelBytes);\n const isBitPacked = bpc < 8;\n for (let col = 0; col < width; col++) {\n let r: number, g: number, b: number;\n if (isBitPacked) {\n [r, g, b] = decodeBitPackedPixel({ decoded, col, rowStart, srcChannels, bpc, indexed, lookupTable, baseChannels });\n } else {\n const srcIdx = rowStart + col * srcChannels;\n [r, g, b] = pixelToRgb(decoded, srcIdx, channels, indexed, lookupTable, baseChannels);\n }\n const outIdx = col * pixelBytes;\n pixelRow[outIdx] = r;\n pixelRow[outIdx + 1] = g;\n pixelRow[outIdx + 2] = b;\n if (smask !== null) {\n pixelRow[outIdx + 3] = smask[row * width + col];\n }\n }\n const filterRow = new Uint8Array(1 + width * pixelBytes);\n filterRow[0] = 0;\n filterRow.set(pixelRow, 1);\n return filterRow;\n}\n\nfunction rawPixelsToPng(\n decoded: Uint8Array,\n width: number,\n height: number,\n dict: Record<string, PdfObject>,\n reader: PdfReader,\n): Uint8Array | null {\n const { channels, indexed, lookupTable, baseChannels } = resolveImageColorInfo(dict, reader);\n const bpc = reader.getNumber(dict['BitsPerComponent']) || 8;\n\n const srcChannels = indexed ? 1 : channels;\n const expectedBytes = Math.ceil(width * height * srcChannels * bpc / 8);\n if (decoded.length < expectedBytes * 0.8) return null;\n\n const smask = decodeSMask(dict, reader, width, height);\n const hasAlpha = smask !== null;\n const pixelBytes = hasAlpha ? 4 : 3;\n const rowBytes = Math.ceil(width * srcChannels * bpc / 8);\n\n const pngRows: Uint8Array[] = [];\n for (let row = 0; row < height; row++) {\n pngRows.push(buildPngRow({ decoded, row, width, rowBytes, srcChannels, bpc, channels, indexed, lookupTable, baseChannels, smask, pixelBytes }));\n }\n\n return buildPng(width, height, pngRows, hasAlpha);\n}\n\nfunction buildIhdrData(width: number, height: number, hasAlpha: boolean): Uint8Array {\n const d = new Uint8Array(13);\n const v = new DataView(d.buffer);\n v.setUint32(0, width);\n v.setUint32(4, height);\n d[8] = 8;\n d[9] = hasAlpha ? 6 : 2;\n return d;\n}\n\nfunction deflateRawData(rawData: Uint8Array): Uint8Array {\n const deflatedChunks: Uint8Array[] = [];\n let remaining = rawData.length;\n let pos = 0;\n while (remaining > 0) {\n const blockSize = Math.min(remaining, 65535);\n const isLast = remaining - blockSize === 0;\n const block = new Uint8Array(5 + blockSize);\n block[0] = isLast ? 1 : 0;\n block[1] = blockSize & 0xff; block[2] = (blockSize >> 8) & 0xff;\n block[3] = (~blockSize) & 0xff; block[4] = ((~blockSize) >> 8) & 0xff;\n block.set(rawData.subarray(pos, pos + blockSize), 5);\n deflatedChunks.push(block);\n pos += blockSize; remaining -= blockSize;\n }\n const deflatedSize = deflatedChunks.reduce((sum, c) => sum + c.length, 0);\n const zlibData = new Uint8Array(2 + deflatedSize + 4);\n zlibData[0] = 0x78; zlibData[1] = 0x01;\n let zlibPos = 2;\n for (const chunk of deflatedChunks) { zlibData.set(chunk, zlibPos); zlibPos += chunk.length; }\n const adler = adler32(rawData);\n zlibData[zlibPos] = (adler >> 24) & 0xff; zlibData[zlibPos + 1] = (adler >> 16) & 0xff;\n zlibData[zlibPos + 2] = (adler >> 8) & 0xff; zlibData[zlibPos + 3] = adler & 0xff;\n return zlibData;\n}\n\nfunction buildPng(width: number, height: number, rows: Uint8Array[], hasAlpha = false): Uint8Array {\n const rawDataSize = rows.reduce((sum, r) => sum + r.length, 0);\n const rawData = new Uint8Array(rawDataSize);\n let offset = 0;\n for (const row of rows) { rawData.set(row, offset); offset += row.length; }\n\n const zlibData = deflateRawData(rawData);\n const signature = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n const ihdr = createPngChunk('IHDR', buildIhdrData(width, height, hasAlpha));\n const idat = createPngChunk('IDAT', zlibData);\n const iend = createPngChunk('IEND', new Uint8Array(0));\n\n const png = new Uint8Array(signature.length + ihdr.length + idat.length + iend.length);\n let pngPos = 0;\n png.set(signature, pngPos); pngPos += signature.length;\n png.set(ihdr, pngPos); pngPos += ihdr.length;\n png.set(idat, pngPos); pngPos += idat.length;\n png.set(iend, pngPos);\n return png;\n}\n\nfunction createPngChunk(type: string, data: Uint8Array): Uint8Array {\n const chunk = new Uint8Array(12 + data.length);\n const view = new DataView(chunk.buffer);\n view.setUint32(0, data.length);\n for (let i = 0; i < 4; i++) chunk[4 + i] = type.codePointAt(i) ?? 0;\n chunk.set(data, 8);\n const crcData = chunk.subarray(4, 8 + data.length);\n view.setUint32(8 + data.length, pngCrc32(crcData));\n return chunk;\n}\n\nconst PNG_CRC_TABLE = (() => {\n const table = new Uint32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) {\n c = (c & 1) ? (0xedb88320 ^ (c >>> 1)) : (c >>> 1);\n }\n table[n] = c;\n }\n return table;\n})();\n\nfunction pngCrc32(data: Uint8Array): number {\n let crc = 0xffffffff;\n for (const byte of data) {\n crc = PNG_CRC_TABLE[(crc ^ byte) & 0xff] ^ (crc >>> 8);\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction adler32(data: Uint8Array): number {\n let a = 1;\n let b = 0;\n for (const byte of data) {\n a = (a + byte) % 65521;\n b = (b + a) % 65521;\n }\n return ((b << 16) | a) >>> 0;\n}\n\nfunction uint8ArrayToBase64(data: Uint8Array): string {\n let binary = '';\n const chunkSize = 8192;\n for (let i = 0; i < data.length; i += chunkSize) {\n const slice = data.subarray(i, Math.min(i + chunkSize, data.length));\n for (const byte of slice) {\n binary += String.fromCodePoint(byte);\n }\n }\n return btoa(binary);\n}\n\n// ── Text-to-HTML conversion ─────────────────────────────────────────────\n\nexport interface TextLine {\n items: TextItem[];\n y: number;\n minX: number;\n}\n\nfunction escapeHtml(str: string): string {\n return str\n .replaceAll('&', '&')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('\"', '"');\n}\n\nexport function deduplicateTextItems(items: TextItem[]): TextItem[] {\n if (items.length <= 1) return items;\n const sorted = [...items].sort((a, b) => {\n if (a.page !== b.page) return a.page - b.page;\n if (Math.abs(a.y - b.y) > 0.5) return a.y - b.y;\n if (Math.abs(a.x - b.x) > 0.5) return a.x - b.x;\n return 0;\n });\n const result: TextItem[] = [sorted[0]];\n for (let i = 1; i < sorted.length; i++) {\n const prev = sorted[i - 1];\n const curr = sorted[i];\n if (\n curr.page === prev.page &&\n Math.abs(curr.x - prev.x) < 1.5 &&\n Math.abs(curr.y - prev.y) < 1.5 &&\n curr.text === prev.text\n ) {\n continue;\n }\n result.push(curr);\n }\n return removeOverlappingCharDuplicates(result);\n}\n\nfunction buildPageWordIndex(wordItems: TextItem[]): Map<number, TextItem[]> {\n const pageMap = new Map<number, TextItem[]>();\n for (const item of wordItems) {\n const list = pageMap.get(item.page) ?? [];\n list.push(item);\n pageMap.set(item.page, list);\n }\n return pageMap;\n}\n\nfunction isCharCoveredByWord(charItem: TextItem, wordItem: TextItem): boolean {\n if (charItem.page !== wordItem.page) return false;\n const yDiff = Math.abs(charItem.y - wordItem.y);\n if (yDiff > wordItem.fontSize * 0.5) return false;\n const margin = wordItem.fontSize * 0.3;\n const positionOverlaps = charItem.x >= wordItem.x - margin && charItem.endX <= wordItem.endX + margin;\n if (!positionOverlaps) return false;\n // Only remove if the word actually contains the char (true duplicate, not adjacent punctuation)\n const charText = charItem.text.trim();\n return charText.length > 0 && wordItem.text.includes(charText);\n}\n\nfunction removeOverlappingCharDuplicates(items: TextItem[]): TextItem[] {\n const wordItems = items.filter(it => it.text.trim().length > 2);\n if (wordItems.length === 0) return items;\n\n const charItems = items.filter(it => it.text.trim().length <= 2);\n if (charItems.length === 0) return items;\n\n const wordsByPage = buildPageWordIndex(wordItems);\n\n const keptChars: TextItem[] = [];\n for (const charItem of charItems) {\n const pageWords = wordsByPage.get(charItem.page);\n if (!pageWords) {\n keptChars.push(charItem);\n continue;\n }\n\n let covered = false;\n for (const word of pageWords) {\n if (isCharCoveredByWord(charItem, word)) {\n covered = true;\n break;\n }\n }\n if (!covered) {\n keptChars.push(charItem);\n }\n }\n\n return [...wordItems, ...keptChars];\n}\n\nfunction computeLineYTolerance(items: TextItem[]): number {\n if (items.length === 0) return 2;\n const sizes: number[] = [];\n for (const item of items) {\n if (item.fontSize > 0) sizes.push(item.fontSize);\n }\n if (sizes.length === 0) return 2;\n sizes.sort((a, b) => a - b);\n const medianSize = sizes[Math.floor(sizes.length / 2)];\n return Math.max(2, medianSize * 0.35);\n}\n\nfunction sortByReadingOrder(items: TextItem[], yTolerance: number): TextItem[] {\n return [...items].sort((a, b) => {\n if (a.page !== b.page) return a.page - b.page;\n if (Math.abs(a.y - b.y) > yTolerance) return b.y - a.y;\n return a.x - b.x;\n });\n}\n\nfunction computePerCharThreshold(sorted: TextItem[], yTolerance: number): Map<number, number> {\n const pageGaps = new Map<number, number[]>();\n for (let i = 1; i < sorted.length; i++) {\n const prev = sorted[i - 1];\n const next = sorted[i];\n if (prev.page !== next.page || Math.abs(prev.y - next.y) > yTolerance) continue;\n if (prev.text.trim().length > 2 || next.text.trim().length > 2) continue;\n const gap = next.x - prev.endX;\n if (gap > 0 && gap < prev.fontSize * 5) {\n const gaps = pageGaps.get(prev.page) ?? [];\n gaps.push(gap);\n pageGaps.set(prev.page, gaps);\n }\n }\n const result = new Map<number, number>();\n for (const [page, gaps] of pageGaps) {\n if (gaps.length < 5) continue;\n gaps.sort((a, b) => a - b);\n const median = gaps[Math.floor(gaps.length / 2)];\n result.set(page, median * 2.5);\n }\n return result;\n}\n\nfunction detectCharByCharPages(items: TextItem[]): Set<number> {\n const pageCounts = new Map<number, { total: number; singleChar: number }>();\n for (const item of items) {\n const counts = pageCounts.get(item.page) ?? { total: 0, singleChar: 0 };\n counts.total++;\n if (item.text.trim().length <= 2) counts.singleChar++;\n pageCounts.set(item.page, counts);\n }\n const result = new Set<number>();\n for (const [page, counts] of pageCounts) {\n if (counts.total >= 10 && counts.singleChar / counts.total > 0.6) {\n result.add(page);\n }\n }\n return result;\n}\n\nfunction computePageGapThreshold(gaps: number[]): number {\n gaps.sort((a, b) => a - b);\n const median = gaps[Math.floor(gaps.length / 2)];\n let maxJump = 0;\n let jumpIndex = -1;\n for (let i = 0; i < gaps.length - 1; i++) {\n const jump = gaps[i + 1] - gaps[i];\n if (jump > maxJump) {\n maxJump = jump;\n jumpIndex = i;\n }\n }\n if (jumpIndex >= 0 && maxJump > median * 0.3) {\n return (gaps[jumpIndex] + gaps[jumpIndex + 1]) / 2;\n }\n return median * 1.5;\n}\n\nfunction collectPageGaps(sorted: TextItem[], yTolerance: number, charPages: Set<number>): Map<number, number[]> {\n const pageGaps = new Map<number, number[]>();\n for (let i = 1; i < sorted.length; i++) {\n const prev = sorted[i - 1];\n const next = sorted[i];\n if (!charPages.has(next.page)) continue;\n if (prev.page !== next.page) continue;\n if (Math.abs(prev.y - next.y) > yTolerance) continue;\n if (prev.text.trim().length > 2 || next.text.trim().length > 2) continue;\n const gap = next.x - prev.endX;\n if (gap > 0 && gap < prev.fontSize * 5) {\n const gaps = pageGaps.get(next.page) ?? [];\n gaps.push(gap);\n pageGaps.set(next.page, gaps);\n }\n }\n return pageGaps;\n}\n\nfunction computeWordGapThreshold(\n sorted: TextItem[],\n yTolerance: number,\n charPages: Set<number>,\n): Map<number, number> {\n if (charPages.size === 0) return new Map();\n\n const pageGaps = collectPageGaps(sorted, yTolerance, charPages);\n const result = new Map<number, number>();\n for (const [page, gaps] of pageGaps) {\n if (gaps.length < 5) continue;\n result.set(page, computePageGapThreshold(gaps));\n }\n return result;\n}\n\nfunction hasScriptBoundary(prevText: string, nextText: string): boolean {\n if (!prevText || !nextText) return false;\n const lastChar = prevText.codePointAt(prevText.length - 1) ?? 0;\n const firstChar = nextText.codePointAt(0) ?? 0;\n const lastIsRTL = isRTLChar(lastChar);\n const firstIsRTL = isRTLChar(firstChar);\n const lastIsLTR = isLTRCode(lastChar);\n const firstIsLTR = isLTRCode(firstChar);\n return (lastIsRTL && firstIsLTR) || (lastIsLTR && firstIsRTL);\n}\n\nfunction mergeTextItems(current: TextItem, next: TextItem, gap: number, wordGapThresholds: Map<number, number>): TextItem {\n const fontSize = Math.max(current.fontSize, next.fontSize);\n const wordGap = wordGapThresholds.get(next.page);\n const fallbackGap = fontSize * 0.15;\n const scriptChange = hasScriptBoundary(current.text, next.text);\n const needsSpace = scriptChange || (wordGap === undefined ? gap > fallbackGap : gap > wordGap);\n const separator = needsSpace ? ' ' : '';\n const text = current.text + separator + next.text;\n return {\n text,\n fontSize,\n x: Math.min(current.x, next.x),\n y: current.y,\n endX: Math.max(current.endX, next.endX),\n page: current.page,\n color: current.color,\n bold: current.bold || next.bold,\n italic: current.italic || next.italic,\n fontFamily: current.fontFamily || next.fontFamily,\n fontName: current.fontName || next.fontName,\n mcid: current.mcid >= 0 ? current.mcid : next.mcid,\n charSpacing: current.charSpacing,\n wordSpacing: current.wordSpacing,\n textRise: current.textRise,\n horizontalScaling: current.horizontalScaling,\n textRenderMode: current.textRenderMode,\n strokeColor: current.strokeColor,\n transformMatrix: current.transformMatrix,\n isSpaceOffset: false,\n };\n}\n\nfunction mergeAdjacentChars(items: TextItem[]): TextItem[] {\n if (items.length <= 1) return items;\n\n const yTolerance = computeLineYTolerance(items);\n const sorted = sortByReadingOrder(items, yTolerance);\n\n const perCharThresholds = computePerCharThreshold(sorted, yTolerance);\n const charPages = detectCharByCharPages(items);\n const wordGapThresholds = computeWordGapThreshold(sorted, yTolerance, charPages);\n const merged: TextItem[] = [];\n let current = { ...sorted[0] };\n\n for (let i = 1; i < sorted.length; i++) {\n const next = sorted[i];\n const sameLine = next.page === current.page && Math.abs(next.y - current.y) <= yTolerance;\n const gap = next.x - current.endX;\n const fontSize = Math.max(current.fontSize, next.fontSize);\n const charWidth = fontSize * 0.6;\n const isNearby = gap >= -charWidth * 0.3 && gap < charWidth * 1.2;\n const pageThreshold = perCharThresholds.get(next.page);\n const wideMerge = pageThreshold !== undefined\n && next.text.trim().length <= 2\n && gap >= 0 && gap < pageThreshold;\n const isAdjacent = isNearby || wideMerge;\n\n if (sameLine && isAdjacent) {\n current = mergeTextItems(current, next, gap, wordGapThresholds);\n } else {\n merged.push(current);\n current = { ...next };\n }\n }\n merged.push(current);\n return merged;\n}\n\nfunction groupIntoLines(items: TextItem[]): TextLine[] {\n if (items.length === 0) return [];\n\n const yTolerance = computeLineYTolerance(items);\n const sorted = sortByReadingOrder(items, yTolerance);\n\n const lines: TextLine[] = [];\n let currentLine: TextItem[] = [sorted[0]];\n let currentY = sorted[0].y;\n\n for (let i = 1; i < sorted.length; i++) {\n const item = sorted[i];\n if (Math.abs(item.y - currentY) <= yTolerance && item.page === sorted[i - 1].page) {\n currentLine.push(item);\n } else {\n lines.push({\n items: currentLine,\n y: currentY,\n minX: Math.min(...currentLine.map(it => it.x)),\n });\n currentLine = [item];\n currentY = item.y;\n }\n }\n lines.push({\n items: currentLine,\n y: currentY,\n minX: Math.min(...currentLine.map(it => it.x)),\n });\n\n return lines;\n}\n\nfunction detectBodyFontSize(items: TextItem[]): number {\n if (items.length === 0) return 12;\n const sizeCount = new Map<number, number>();\n for (const item of items) {\n const rounded = Math.round(item.fontSize * 2) / 2;\n sizeCount.set(rounded, (sizeCount.get(rounded) ?? 0) + item.text.length);\n }\n let maxCount = 0;\n let bodySize = 12;\n for (const [size, count] of sizeCount) {\n if (count > maxCount) {\n maxCount = count;\n bodySize = size;\n }\n }\n return bodySize;\n}\n\nfunction detectBodyFont(items: TextItem[]): string {\n if (items.length === 0) return '';\n const fontCount = new Map<string, number>();\n for (const item of items) {\n if (item.fontFamily) {\n fontCount.set(item.fontFamily, (fontCount.get(item.fontFamily) ?? 0) + item.text.length);\n }\n }\n let maxCount = 0;\n let bodyFont = '';\n for (const [font, count] of fontCount) {\n if (count > maxCount) {\n maxCount = count;\n bodyFont = font;\n }\n }\n return bodyFont;\n}\n\nfunction getHeadingLevel(fontSize: number, bodySize: number): number {\n if (bodySize <= 0) return 0;\n const ratio = fontSize / bodySize;\n if (ratio >= 1.6) return 1;\n if (ratio >= 1.3) return 2;\n if (ratio >= 1.1) return 3;\n return 0;\n}\n\nfunction findLargeGapIndex(line: TextLine): number {\n if (line.items.length < 2) return -1;\n const sorted = [...line.items].sort((a, b) => a.x - b.x);\n let maxGap = 0;\n let splitIdx = -1;\n for (let i = 1; i < sorted.length; i++) {\n const gap = sorted[i].x - sorted[i - 1].endX;\n if (gap > maxGap) {\n maxGap = gap;\n splitIdx = i;\n }\n }\n const fontSize = sorted[0]?.fontSize ?? 12;\n if (maxGap <= fontSize * 2.5) return -1;\n\n const leftText = sorted.slice(0, splitIdx).map(it => it.text).join('').trim();\n const rightText = sorted.slice(splitIdx).map(it => it.text).join('').trim();\n if (leftText.length < 3 || rightText.length < 3) return -1;\n\n return splitIdx;\n}\n\nfunction lineToTableRowHtml(line: TextLine, splitIndex: number, bodySize: number, bodyFont: string): string {\n const sorted = [...line.items].sort((a, b) => a.x - b.x);\n const leftItems = sorted.slice(0, splitIndex);\n const rightItems = sorted.slice(splitIndex);\n\n const leftLine: TextLine = { items: leftItems, y: line.y, minX: leftItems[0]?.x ?? 0 };\n const rightLine: TextLine = { items: rightItems, y: line.y, minX: rightItems[0]?.x ?? 0 };\n\n const leftFontSize = leftItems.reduce((max, it) => Math.max(max, it.fontSize), 0);\n const rightFontSize = rightItems.reduce((max, it) => Math.max(max, it.fontSize), 0);\n\n const leftHeading = getHeadingLevel(leftFontSize, bodySize);\n const rightHeading = getHeadingLevel(rightFontSize, bodySize);\n\n let leftHtml = lineToHtmlContent(leftLine, bodyFont, bodySize);\n let rightHtml = lineToHtmlContent(rightLine, bodyFont, bodySize);\n\n if (leftHeading > 0) {\n leftHtml = `<h${leftHeading} style=\"margin: 0;\">${leftHtml}</h${leftHeading}>`;\n }\n if (rightHeading > 0) {\n rightHtml = `<h${rightHeading} style=\"margin: 0;\">${rightHtml}</h${rightHeading}>`;\n }\n\n const tableDir = isLineRTL(line) ? ' dir=\"rtl\"' : '';\n return `<table${tableDir} style=\"width: 100%; border-collapse: collapse;\"><tr><td style=\"border: none; padding: 0;\">${leftHtml}</td><td style=\"border: none; padding: 0; text-align: right;\">${rightHtml}</td></tr></table>`;\n}\n\nfunction lineToText(line: TextLine): string {\n const sorted = [...line.items].sort((a, b) => a.x - b.x);\n let result = '';\n for (let i = 0; i < sorted.length; i++) {\n if (i > 0) {\n const gap = sorted[i].x - sorted[i - 1].endX;\n if (gap > sorted[i - 1].fontSize * 0.12\n && !isSingleBracket(sorted[i - 1].text)\n && !isSingleBracket(sorted[i].text)) {\n result += ' ';\n }\n }\n result += sorted[i].text;\n }\n return result.trim();\n}\n\nfunction findAnnotationForItem(item: TextItem, annotations: ReadonlyArray<PdfAnnotation>): string | null {\n for (const ann of annotations) {\n if (ann.page !== item.page) continue;\n const itemCenterX = (item.x + item.endX) / 2;\n const itemY = item.y;\n if (itemCenterX >= ann.x && itemCenterX <= ann.x + ann.width &&\n itemY >= ann.y && itemY <= ann.y + ann.height) {\n return ann.uri;\n }\n }\n return null;\n}\n\nfunction buildItemStyles(item: TextItem, bodyFont: string, bodySize: number): string[] {\n const styles: string[] = [];\n if (!isDefaultColor(item.color)) styles.push(`color: ${item.color}`);\n if (item.fontFamily && item.fontFamily !== bodyFont) styles.push(`font-family: ${cssFontFamily(item.fontFamily)}`);\n const sizeRatio = bodySize > 0 ? item.fontSize / bodySize : 1;\n if (sizeRatio < 0.85 || sizeRatio > 1.15) {\n const editorSize = Math.round(sizeRatio * 12);\n styles.push(`font-size: ${editorSize}pt`);\n }\n if (Math.abs(item.charSpacing) > 0.1) {\n styles.push(`letter-spacing: ${(item.charSpacing * 0.75).toFixed(1)}px`);\n }\n if (Math.abs(item.wordSpacing) > 0.5) {\n styles.push(`word-spacing: ${(item.wordSpacing * 0.75).toFixed(1)}px`);\n }\n if (item.horizontalScaling !== 100 && Math.abs(item.horizontalScaling - 100) > 1) {\n styles.push(`display:inline-block;transform:scaleX(${(item.horizontalScaling / 100).toFixed(2)})`);\n }\n applyTextRenderModeStyles(item, styles);\n return styles;\n}\n\nfunction wrapItemHtml(item: TextItem, text: string, bodyFont: string, bodySize: number, linkUri?: string | null): string {\n let fragment = text;\n const styles = buildItemStyles(item, bodyFont, bodySize);\n if (styles.length > 0) {\n fragment = `<span style=\"${escapeAttribute(styles.join('; '))}\">${fragment}</span>`;\n }\n if (item.textRise > 1) {\n fragment = `<sup>${fragment}</sup>`;\n } else if (item.textRise < -1) {\n fragment = `<sub>${fragment}</sub>`;\n }\n if (item.italic) fragment = `<em>${fragment}</em>`;\n if (item.bold) fragment = `<strong>${fragment}</strong>`;\n const safeUri = linkUri ? safeLinkHref(linkUri) : undefined;\n if (safeUri !== undefined) {\n const linkColor = isDefaultColor(item.color) ? '#1a0dab' : item.color;\n fragment = `<a href=\"${escapeAttribute(safeUri)}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"color:${linkColor};text-decoration:underline\">${fragment}</a>`;\n }\n return fragment;\n}\n\nfunction applyTextRenderModeStyles(item: TextItem, styles: string[]): void {\n if (item.textRenderMode === 1) {\n styles.push(`-webkit-text-stroke: 1px ${item.color}; color: transparent`);\n } else if (item.textRenderMode === 2) {\n styles.push(`-webkit-text-stroke: 1px ${item.color}`);\n }\n}\n\nfunction isSingleBracket(text: string): boolean {\n const t = text.trim();\n return t === '(' || t === ')' || t === '[' || t === ']';\n}\n\nfunction lineToHtmlContent(line: TextLine, bodyFont?: string, bodySize?: number, annotations?: ReadonlyArray<PdfAnnotation>): string {\n const sorted = [...line.items].sort((a, b) => a.x - b.x);\n let result = '';\n const bf = bodyFont ?? '';\n const bs = bodySize ?? 12;\n for (let i = 0; i < sorted.length; i++) {\n if (i > 0) {\n const gap = sorted[i].x - sorted[i - 1].endX;\n if (gap > sorted[i - 1].fontSize * 0.12\n && !isSingleBracket(sorted[i - 1].text)\n && !isSingleBracket(sorted[i].text)) {\n result += ' ';\n }\n }\n const text = escapeHtml(sorted[i].text);\n const uri = annotations ? findAnnotationForItem(sorted[i], annotations) : null;\n result += wrapItemHtml(sorted[i], text, bf, bs, uri);\n }\n return result.trim();\n}\n\nfunction findBestColumnGap(startXs: number[]): { bestGap: number; splitX: number } {\n let bestGap = 0;\n let splitX = 0;\n for (let i = 1; i < startXs.length; i++) {\n const gap = startXs[i] - startXs[i - 1];\n if (gap > bestGap) {\n bestGap = gap;\n splitX = (startXs[i - 1] + startXs[i]) / 2;\n }\n }\n return { bestGap, splitX };\n}\n\nfunction classifyLinesByColumn(pageLines: TextLine[], splitX: number): TextLine[] {\n const spanningLines: TextLine[] = [];\n const leftLines: TextLine[] = [];\n const rightLines: TextLine[] = [];\n\n for (const line of pageLines) {\n const hasLeft = line.items.some(it => it.x < splitX);\n const hasRight = line.items.some(it => it.x >= splitX);\n\n if (hasLeft && hasRight) {\n spanningLines.push(line);\n } else if (hasRight) {\n rightLines.push(line);\n } else {\n leftLines.push(line);\n }\n }\n\n return [...spanningLines, ...leftLines, ...rightLines];\n}\n\nfunction detectColumns(lines: TextLine[]): { lines: TextLine[]; hasColumns: boolean } {\n if (lines.length < 4) return { lines, hasColumns: false };\n\n const pages = new Set(lines.map(l => l.items[0]?.page ?? 0));\n const result: TextLine[] = [];\n let hasColumns = false;\n\n for (const page of pages) {\n const pageLines = lines.filter(l => (l.items[0]?.page ?? 0) === page);\n if (pageLines.length < 4) {\n result.push(...pageLines);\n continue;\n }\n\n const pageText = pageLines.map(l => l.items.map(it => it.text).join('')).join('');\n if (hasRTLText(pageText)) {\n result.push(...pageLines);\n continue;\n }\n\n const startXs = pageLines.map(l => l.minX).sort((a, b) => a - b);\n const { bestGap, splitX } = findBestColumnGap(startXs);\n\n const pageWidth = Math.max(...pageLines.map(l =>\n Math.max(...l.items.map(it => it.endX))\n )) - Math.min(...startXs);\n\n if (bestGap < pageWidth * 0.15 || bestGap < 50) {\n result.push(...pageLines);\n continue;\n }\n\n hasColumns = true;\n result.push(...classifyLinesByColumn(pageLines, splitX));\n }\n\n return { lines: result, hasColumns };\n}\n\nconst BULLET_PATTERN = /^[\\u2022\\u2023\\u25E6\\u2043\\u2219\\u25CF\\u25CB\\u25AA\\u25AB\\u2013\\u2014\\-*]\\s*/;\nconst BULLET_CHARS = /^[\\u2022\\u2023\\u25E6\\u2043\\u2219\\u25CF\\u25CB\\u25AA\\u25AB\\u2013\\u2014\\-*]+$/;\nconst NUMBERED_PATTERN = /^(\\d{1,3})[.)]\\s+/;\nconst RTL_NUMBER_TAIL = /[.)]\\d{1,3}$/;\n\n/**\n * Where a trailing right-to-left list number starts — whitespace, then \".12\"\n * or \")12\" at the end of the text — or -1. Matched from the number backwards:\n * a `\\s+` regex retried from every space of a long run is quadratic.\n */\nfunction rtlNumberTailStart(text: string): number {\n const tail = RTL_NUMBER_TAIL.exec(text);\n if (!tail) return -1;\n let start = tail.index;\n while (start > 0 && WHITESPACE.test(text.charAt(start - 1))) start--;\n return start === tail.index ? -1 : start;\n}\n\nfunction stripBulletItems(line: TextLine): TextLine {\n const filtered = line.items.filter(item => {\n const t = item.text.trim();\n if (BULLET_CHARS.test(t)) return false;\n if (t.length <= 2 && /symbol/i.test(item.fontFamily)) return false;\n if (t.length === 1 && (t.codePointAt(0) ?? 0) >= 0xF000) return false;\n return true;\n });\n if (filtered.length === 0) return line;\n const first = filtered[0];\n return {\n items: filtered.map(item => {\n const trimmed = item.text.replace(BULLET_PATTERN, '');\n if (trimmed !== item.text) return { ...item, text: trimmed };\n return item;\n }),\n y: line.y,\n minX: first.x,\n };\n}\n\nfunction stripNumberedPrefix(line: TextLine): TextLine {\n const filtered = line.items.filter(item => {\n const t = item.text.trim();\n return !(/^\\d{1,3}[.)]$/.test(t));\n });\n if (filtered.length === 0) return line;\n const first = filtered[0];\n return {\n items: filtered.map(item => {\n const trimmed = item.text.replace(NUMBERED_PATTERN, '');\n if (trimmed !== item.text) return { ...item, text: trimmed };\n const rtlStart = rtlNumberTailStart(item.text);\n if (rtlStart >= 0) return { ...item, text: item.text.slice(0, rtlStart) };\n return item;\n }),\n y: line.y,\n minX: first.x,\n };\n}\n\ninterface HtmlBuilderState {\n html: string[];\n inBulletList: boolean;\n inNumberedList: boolean;\n inColumnLayout: boolean;\n currentParagraph: string[];\n currentParagraphRTL: boolean;\n currentParagraphAlign: string;\n currentParagraphSpacingPx: number;\n pendingMarginTopPt: number;\n currentParagraphIndent: number;\n currentParagraphLineXs: number[];\n currentParagraphLineSpacings: number[];\n currentParagraphBodySize: number;\n lastY: number | null;\n lastPage: number;\n lastLineSpacing: number;\n imageIdx: number;\n readonly annotations: ReadonlyArray<PdfAnnotation>;\n readonly pageWidth: number;\n readonly leftMargin: number;\n readonly rightMargin: number;\n}\n\nfunction buildParagraphStyles(state: HtmlBuilderState, useFlowingText: boolean): string[] {\n const styles: string[] = [];\n if (state.currentParagraphAlign) {\n styles.push(`text-align:${state.currentParagraphAlign}`);\n } else if (useFlowingText) {\n styles.push('text-align:justify');\n }\n if (state.pendingMarginTopPt > 0) {\n styles.push(`margin-top:${Math.round(state.pendingMarginTopPt * 100) / 100}pt`);\n state.pendingMarginTopPt = 0;\n }\n if (state.currentParagraphSpacingPx > 0) {\n styles.push(`margin-bottom:${Math.round(state.currentParagraphSpacingPx * 100) / 100}pt`);\n }\n if (state.currentParagraphLineSpacings.length > 0 && state.currentParagraphBodySize > 0) {\n const sorted = [...state.currentParagraphLineSpacings].sort((a, b) => a - b);\n const medianSpacing = sorted[Math.floor(sorted.length / 2)];\n const lineHeightRatio = medianSpacing / state.currentParagraphBodySize;\n if (lineHeightRatio > 0.5 && lineHeightRatio < 5) {\n styles.push(`line-height:${Math.round(lineHeightRatio * 100) / 100}`);\n }\n }\n if (state.currentParagraphIndent > 5) {\n styles.push(`text-indent:${Math.round(state.currentParagraphIndent * 0.75)}px`);\n }\n return styles;\n}\n\nfunction resetParagraphState(state: HtmlBuilderState): void {\n state.currentParagraph = [];\n state.currentParagraphRTL = false;\n state.currentParagraphAlign = '';\n state.currentParagraphSpacingPx = 0;\n state.currentParagraphIndent = 0;\n state.currentParagraphLineXs = [];\n state.currentParagraphLineSpacings = [];\n state.currentParagraphBodySize = 0;\n}\n\nfunction flushParagraph(state: HtmlBuilderState): void {\n if (state.currentParagraph.length === 0) {\n if (state.currentParagraphSpacingPx > 0) {\n state.pendingMarginTopPt = state.currentParagraphSpacingPx;\n state.currentParagraphSpacingPx = 0;\n }\n return;\n }\n const isMultiLine = state.currentParagraph.length > 1;\n const isCenteredOrAligned = state.currentParagraphAlign === 'center' || state.currentParagraphAlign === 'right';\n const useFlowingText = isMultiLine && !isCenteredOrAligned;\n const text = useFlowingText\n ? state.currentParagraph.join(' ')\n : state.currentParagraph.join('<br>');\n const styles = buildParagraphStyles(state, useFlowingText);\n const styleAttr = styles.length > 0 ? ` style=\"${styles.join(';')}\"` : '';\n const dirAttr = state.currentParagraphRTL ? ' dir=\"rtl\"' : '';\n state.html.push(`<p${dirAttr}${styleAttr}>${text}</p>`);\n resetParagraphState(state);\n}\n\nfunction detectParagraphIndent(state: HtmlBuilderState): void {\n if (state.currentParagraphRTL) return;\n const xs = state.currentParagraphLineXs;\n if (xs.length < 2) return;\n const firstX = xs[0];\n const restXs = xs.slice(1);\n const avgRestX = restXs.reduce((s, x) => s + x, 0) / restXs.length;\n const indent = firstX - avgRestX;\n if (indent > 5 && restXs.every(x => Math.abs(x - avgRestX) < 5)) {\n state.currentParagraphIndent = indent;\n }\n}\n\nfunction closeList(state: HtmlBuilderState): void {\n if (state.inBulletList) { state.html.push('</ul>'); state.inBulletList = false; }\n if (state.inNumberedList) { state.html.push('</ol>'); state.inNumberedList = false; }\n}\n\nfunction insertImagesBeforeY(state: HtmlBuilderState, sortedImages: ImageItem[], page: number, y: number): void {\n while (state.imageIdx < sortedImages.length) {\n const img = sortedImages[state.imageIdx];\n if (img.page > page || (img.page === page && img.y < y)) break;\n flushParagraph(state);\n closeList(state);\n const styles = [`width:${Math.round(img.renderWidth * 100) / 100}pt`, 'max-width:100%', 'height:auto'];\n if (state.lastY !== null && img.page === state.lastPage) {\n const imgTop = img.y + img.renderHeight;\n const gap = state.lastY - imgTop;\n if (gap > 0) styles.push(`margin-top:${Math.round(gap * 100) / 100}pt`);\n }\n state.html.push(`<img src=\"${img.dataUrl}\" alt=\"Embedded image\" style=\"${styles.join(';')}\" />`);\n state.lastY = img.y;\n state.lastPage = img.page;\n state.imageIdx++;\n }\n}\n\nfunction renderLineAsHeading(\n state: HtmlBuilderState, line: TextLine, headingLevel: number, bodyFont: string, bodySize: number,\n _lineSpacing = 0,\n): void {\n flushParagraph(state);\n closeList(state);\n const content = lineToHtmlContent(line, bodyFont, bodySize, state.annotations);\n const rtl = isLineRTL(line);\n const dirAttr = rtl ? ' dir=\"rtl\"' : '';\n const align = state.pageWidth > 0\n ? detectTextAlignment(line, state.pageWidth, state.leftMargin, state.rightMargin) : '';\n const hStyles: string[] = [];\n const effectiveAlign = align || (rtl ? 'right' : '');\n if (effectiveAlign) hStyles.push(`text-align:${effectiveAlign}`);\n const marginTop = Math.max(state.currentParagraphSpacingPx, state.pendingMarginTopPt);\n if (marginTop > 0) {\n hStyles.push(`margin-top:${Math.round(marginTop * 100) / 100}pt`);\n state.currentParagraphSpacingPx = 0;\n state.pendingMarginTopPt = 0;\n }\n const styleAttr = hStyles.length > 0 ? ` style=\"${hStyles.join(';')}\"` : '';\n state.html.push(`<h${headingLevel}${dirAttr}${styleAttr}>${content}</h${headingLevel}>`);\n state.lastLineSpacing = 0;\n}\n\nfunction renderLineAsBullet(\n state: HtmlBuilderState, line: TextLine, lineText: string, bodyFont: string, bodySize: number,\n): void {\n flushParagraph(state);\n if (state.inNumberedList) { state.html.push('</ol>'); state.inNumberedList = false; }\n const rtl = isLineRTL(line);\n if (!state.inBulletList) {\n const listDir = rtl ? ' dir=\"rtl\"' : '';\n state.html.push(`<ul${listDir}>`);\n state.inBulletList = true;\n }\n const filteredLine = stripBulletItems(line);\n const content = lineToHtmlContent(filteredLine, bodyFont, bodySize, state.annotations);\n const dirAttr = rtl ? ' dir=\"rtl\"' : '';\n state.html.push(`<li${dirAttr}>${content}</li>`);\n}\n\nfunction renderLineAsNumbered(\n state: HtmlBuilderState, line: TextLine, lineText: string, bodyFont: string, bodySize: number,\n): void {\n flushParagraph(state);\n const rtl = isLineRTL(line);\n if (state.inBulletList) { state.html.push('</ul>'); state.inBulletList = false; }\n if (!state.inNumberedList) {\n const listDir = rtl ? ' dir=\"rtl\"' : '';\n state.html.push(`<ol${listDir}>`);\n state.inNumberedList = true;\n }\n const filteredLine = stripNumberedPrefix(line);\n const content = lineToHtmlContent(filteredLine, bodyFont, bodySize, state.annotations);\n const dirAttr = rtl ? ' dir=\"rtl\"' : '';\n state.html.push(`<li${dirAttr}>${content}</li>`);\n}\n\ninterface HtmlLineOptions {\n readonly isParagraphBreak: boolean;\n readonly isPageBreak: boolean;\n readonly structureMap: StructureMap;\n readonly lineSpacing: number;\n readonly bodySize: number;\n}\n\nfunction appendToParagraph(\n line: TextLine, bodySize: number, bodyFont: string,\n state: HtmlBuilderState, options: HtmlLineOptions,\n rtl: boolean,\n): void {\n const { isParagraphBreak, isPageBreak } = options;\n closeList(state);\n if (isParagraphBreak || isPageBreak) {\n flushParagraph(state);\n }\n if (rtl) state.currentParagraphRTL = true;\n state.currentParagraphLineXs.push(line.minX);\n if (!isParagraphBreak && !isPageBreak && options.lineSpacing > 0) {\n state.currentParagraphLineSpacings.push(options.lineSpacing);\n if (state.currentParagraphBodySize === 0) state.currentParagraphBodySize = bodySize;\n }\n state.currentParagraph.push(lineToHtmlContent(line, bodyFont, bodySize, state.annotations));\n detectParagraphIndent(state);\n}\n\nfunction isNumberedLine(lineText: string, rtl: boolean): boolean {\n return NUMBERED_PATTERN.test(lineText) || (rtl && rtlNumberTailStart(lineText) >= 0);\n}\n\nfunction processHtmlLine(\n line: TextLine, lineText: string, bodySize: number, bodyFont: string,\n state: HtmlBuilderState, options: HtmlLineOptions,\n): void {\n const { structureMap } = options;\n const largeGapIdx = findLargeGapIndex(line);\n const rtl = isLineRTL(line);\n\n if (largeGapIdx > 0) {\n flushParagraph(state);\n closeList(state);\n state.html.push(lineToTableRowHtml(line, largeGapIdx, bodySize, bodyFont));\n return;\n }\n\n const structType = getStructureTypeForLine(line, structureMap);\n const structHeading = structType ? structureTypeToHeadingLevel(structType) : 0;\n const primaryFontSize = line.items.reduce((max, item) => Math.max(max, item.fontSize), 0);\n const headingLevel = structHeading > 0 ? structHeading : getHeadingLevel(primaryFontSize, bodySize);\n if (headingLevel > 0) {\n renderLineAsHeading(state, line, headingLevel, bodyFont, bodySize, options.lineSpacing);\n return;\n }\n\n const isStructList = structType !== null && isStructureListItem(structType);\n if (isStructList || BULLET_PATTERN.test(lineText)) {\n renderLineAsBullet(state, line, lineText, bodyFont, bodySize);\n return;\n }\n if (isNumberedLine(lineText, rtl)) {\n renderLineAsNumbered(state, line, lineText, bodyFont, bodySize);\n return;\n }\n\n appendToParagraph(line, bodySize, bodyFont, state, options, rtl);\n}\n\ninterface HtmlLineWithUnderlinesOptions extends HtmlLineOptions {\n readonly underlinedItems: Set<TextItem>;\n}\n\nfunction renderUnderlinedHeading(\n state: HtmlBuilderState, headingLevel: number, content: string, rtl: boolean,\n): void {\n flushParagraph(state);\n closeList(state);\n const dirAttr = rtl ? ' dir=\"rtl\"' : '';\n const hStyles: string[] = [];\n if (rtl) hStyles.push('text-align:right');\n const marginTop = Math.max(state.currentParagraphSpacingPx, state.pendingMarginTopPt);\n if (marginTop > 0) {\n hStyles.push(`margin-top:${Math.round(marginTop * 100) / 100}pt`);\n state.currentParagraphSpacingPx = 0;\n state.pendingMarginTopPt = 0;\n }\n const styleAttr = hStyles.length > 0 ? ` style=\"${hStyles.join(';')}\"` : '';\n state.html.push(`<h${headingLevel}${dirAttr}${styleAttr}>${content}</h${headingLevel}>`);\n state.lastLineSpacing = 0;\n}\n\nfunction processHtmlLineWithUnderlines(\n line: TextLine, lineText: string, bodySize: number, bodyFont: string,\n state: HtmlBuilderState, options: HtmlLineWithUnderlinesOptions,\n): void {\n const { isParagraphBreak, isPageBreak, underlinedItems, structureMap, lineSpacing, bodySize: bs } = options;\n const baseOptions: HtmlLineOptions = { isParagraphBreak, isPageBreak, structureMap, lineSpacing, bodySize: bs };\n\n if (underlinedItems.size === 0 || !line.items.some(it => underlinedItems.has(it))) {\n processHtmlLine(line, lineText, bodySize, bodyFont, state, baseOptions);\n return;\n }\n\n const structType = getStructureTypeForLine(line, structureMap);\n const structHeading = structType ? structureTypeToHeadingLevel(structType) : 0;\n const primaryFontSize = line.items.reduce((max, item) => Math.max(max, item.fontSize), 0);\n const headingLevel = structHeading > 0 ? structHeading : getHeadingLevel(primaryFontSize, bodySize);\n const content = lineToHtmlContentWithUnderlines(line, underlinedItems, bodyFont, bodySize, state.annotations);\n const rtl = isLineRTL(line);\n\n if (headingLevel > 0) {\n renderUnderlinedHeading(state, headingLevel, content, rtl);\n return;\n }\n\n closeList(state);\n if (isParagraphBreak || isPageBreak) {\n flushParagraph(state);\n }\n if (rtl) state.currentParagraphRTL = true;\n state.currentParagraphLineXs.push(line.minX);\n if (!isParagraphBreak && !isPageBreak && lineSpacing > 0) {\n state.currentParagraphLineSpacings.push(lineSpacing);\n if (state.currentParagraphBodySize === 0) state.currentParagraphBodySize = bs;\n }\n state.currentParagraph.push(content);\n detectParagraphIndent(state);\n}\n\n// ── Path-based detection (underlines, tables, borders) ──────────────────\n\nfunction clusterValues(values: number[], tolerance: number): number[] {\n if (values.length === 0) return [];\n const sorted = [...values].sort((a, b) => a - b);\n const clusters: number[][] = [[sorted[0]]];\n for (let i = 1; i < sorted.length; i++) {\n const lastCluster = clusters.at(-1);\n if (!lastCluster) continue;\n const lastVal = lastCluster.at(-1) ?? sorted[i];\n if (sorted[i] - lastVal <= tolerance) {\n lastCluster.push(sorted[i]);\n } else {\n clusters.push([sorted[i]]);\n }\n }\n return clusters.map(c => c.reduce((sum, v) => sum + v, 0) / c.length);\n}\n\nfunction isHorizontalLine(r: PathRect): boolean {\n return r.height <= 3 && r.width > 5;\n}\n\nfunction isVerticalLine(r: PathRect): boolean {\n return r.width <= 3 && r.height > 5;\n}\n\nfunction isThinHorizontalForUnderline(r: PathRect): boolean {\n return Math.abs(r.height) < 2 && r.width > 5;\n}\n\nfunction detectUnderlines(rects: PathRect[], textItems: TextItem[]): { underlinedItems: Set<TextItem>; usedRects: Set<PathRect> } {\n const underlinedItems = new Set<TextItem>();\n const usedRects = new Set<PathRect>();\n const thinHorizontals = rects.filter(r => isThinHorizontalForUnderline(r));\n\n for (const rect of thinHorizontals) {\n let matched = false;\n for (const item of textItems) {\n if (item.page !== rect.page) continue;\n const xOverlap = rect.x < item.endX && rect.x + rect.width > item.x;\n if (!xOverlap) continue;\n const baselineY = item.y - item.fontSize * 0.15;\n if (Math.abs(rect.y - baselineY) < item.fontSize * 0.4) {\n underlinedItems.add(item);\n matched = true;\n }\n }\n if (matched) usedRects.add(rect);\n }\n\n return { underlinedItems, usedRects };\n}\n\ninterface LineSegment {\n readonly x1: number;\n readonly x2: number;\n readonly y1: number;\n readonly y2: number;\n readonly horizontal: boolean;\n}\n\nfunction collectLineSegments(rects: PathRect[], page: number): LineSegment[] {\n const segments: LineSegment[] = [];\n for (const r of rects) {\n if (r.page !== page) continue;\n if (isHorizontalLine(r)) {\n segments.push({ x1: r.x, x2: r.x + r.width, y1: r.y + r.height / 2, y2: r.y + r.height / 2, horizontal: true });\n } else if (isVerticalLine(r)) {\n segments.push({ x1: r.x + r.width / 2, x2: r.x + r.width / 2, y1: r.y, y2: r.y + r.height, horizontal: false });\n }\n }\n return segments;\n}\n\nfunction segmentsIntersectOrTouch(a: LineSegment, b: LineSegment, tolerance: number): boolean {\n if (a.horizontal === b.horizontal) {\n if (a.horizontal) {\n if (Math.abs(a.y1 - b.y1) > tolerance) return false;\n return a.x2 >= b.x1 - tolerance && b.x2 >= a.x1 - tolerance;\n }\n if (Math.abs(a.x1 - b.x1) > tolerance) return false;\n return a.y2 >= b.y1 - tolerance && b.y2 >= a.y1 - tolerance;\n }\n\n const h = a.horizontal ? a : b;\n const v = a.horizontal ? b : a;\n\n const xHit = v.x1 >= h.x1 - tolerance && v.x1 <= h.x2 + tolerance;\n const yHit = h.y1 >= v.y1 - tolerance && h.y1 <= v.y2 + tolerance;\n return xHit && yHit;\n}\n\nfunction expandGroup(segments: LineSegment[], visited: boolean[], queue: number[], group: LineSegment[], tolerance: number): void {\n while (queue.length > 0) {\n const cur = queue.pop() ?? 0;\n for (let j = 0; j < segments.length; j++) {\n if (visited[j]) continue;\n if (segmentsIntersectOrTouch(segments[cur], segments[j], tolerance)) {\n visited[j] = true;\n group.push(segments[j]);\n queue.push(j);\n }\n }\n }\n}\n\nfunction groupSegmentsSpatially(segments: LineSegment[], tolerance: number): LineSegment[][] {\n const visited = new Array<boolean>(segments.length).fill(false);\n const groups: LineSegment[][] = [];\n\n for (let i = 0; i < segments.length; i++) {\n if (visited[i]) continue;\n visited[i] = true;\n const group: LineSegment[] = [segments[i]];\n const queue = [i];\n expandGroup(segments, visited, queue, group, tolerance);\n groups.push(group);\n }\n return groups;\n}\n\nfunction tryBuildTableGrid(group: LineSegment[], page: number): TableGrid | null {\n const hSegs = group.filter(s => s.horizontal);\n const vSegs = group.filter(s => !s.horizontal);\n\n if (hSegs.length < 3 || vSegs.length < 3) return null;\n\n const rowClusters = clusterValues(hSegs.map(s => s.y1), 3);\n const colClusters = clusterValues(vSegs.map(s => s.x1), 3);\n\n if (rowClusters.length < 3 || colClusters.length < 3) return null;\n if (colClusters.length > 20 || rowClusters.length > 50) return null;\n\n const gridMinX = Math.min(...colClusters);\n const gridMaxX = Math.max(...colClusters);\n const gridWidth = gridMaxX - gridMinX;\n const gridMinY = Math.min(...rowClusters);\n const gridMaxY = Math.max(...rowClusters);\n const gridHeight = gridMaxY - gridMinY;\n\n if (gridWidth < 50 || gridHeight < 20) return null;\n\n const wideH = hSegs.filter(s => (s.x2 - s.x1) > gridWidth * 0.3);\n if (wideH.length < 2) return null;\n\n const tallV = vSegs.filter(s => (s.y2 - s.y1) > gridHeight * 0.3);\n if (tallV.length < 2) return null;\n\n return {\n x: gridMinX, y: gridMinY,\n width: gridWidth, height: gridHeight,\n page, rows: rowClusters, cols: colClusters,\n };\n}\n\nfunction detectTableGrids(rects: PathRect[], page: number): TableGrid[] {\n const segments = collectLineSegments(rects, page);\n if (segments.length < 6) return [];\n\n const groups = groupSegmentsSpatially(segments, 5);\n\n const grids: TableGrid[] = [];\n for (const group of groups) {\n const grid = tryBuildTableGrid(group, page);\n if (grid) grids.push(grid);\n }\n return grids;\n}\n\nfunction detectBorderBoxes(rects: PathRect[], tableGrids: TableGrid[], page: number): PathRect[] {\n const pageRects = rects.filter(r =>\n r.page === page && (r.stroked || r.filled) && r.width > 50 && r.height > 8\n && !isHorizontalLine(r) && !isVerticalLine(r)\n );\n return pageRects.filter(r => {\n for (const grid of tableGrids) {\n if (grid.page !== page) continue;\n const overlapX = r.x < grid.x + grid.width && r.x + r.width > grid.x;\n const overlapY = r.y < grid.y + grid.height && r.y + r.height > grid.y;\n if (overlapX && overlapY) return false;\n }\n return true;\n });\n}\n\nfunction mergeAdjacentBorderBoxes(boxes: PathRect[]): PathRect[] {\n if (boxes.length <= 1) return boxes;\n const sorted = [...boxes].sort((a, b) => b.y - a.y);\n const merged: PathRect[] = [{ ...sorted[0] }];\n for (let i = 1; i < sorted.length; i++) {\n const prev = merged.at(-1);\n if (!prev) continue;\n const curr = sorted[i];\n const sameX = Math.abs(prev.x - curr.x) < 5 && Math.abs(prev.width - curr.width) < 10;\n const prevTop = prev.y + prev.height;\n const currTop = curr.y + curr.height;\n const adjacent = Math.abs(prev.y - currTop) < 5\n || Math.abs(curr.y - prevTop) < 5\n || (curr.y < prevTop && currTop > prev.y);\n if (sameX && adjacent) {\n const newY = Math.min(prev.y, curr.y);\n const newTop = Math.max(prevTop, currTop);\n const newX = Math.min(prev.x, curr.x);\n const newWidth = Math.max(prev.x + prev.width, curr.x + curr.width) - newX;\n merged[merged.length - 1] = {\n ...prev, x: newX, y: newY, width: newWidth, height: newTop - newY,\n };\n } else {\n merged.push({ ...curr });\n }\n }\n return merged;\n}\n\nfunction isItemInBounds(item: TextItem, x: number, y: number, w: number, h: number): boolean {\n const cx = (item.x + item.endX) / 2;\n const cy = item.y;\n return cx >= x && cx <= x + w && cy >= y && cy <= y + h;\n}\n\nfunction renderTableGrid(\n grid: TableGrid, textItems: TextItem[], underlinedItems: Set<TextItem>, bodySize: number, bodyFont: string,\n): string {\n const { rows, cols } = grid;\n const sortedRows = [...rows].sort((a, b) => b - a);\n const sortedCols = [...cols].sort((a, b) => a - b);\n\n if (sortedRows.length < 2 || sortedCols.length < 2) return '';\n\n const pageItems = textItems.filter(it => it.page === grid.page);\n let html = '<table style=\"width: 100%; border-collapse: collapse;\">';\n\n for (let ri = 0; ri < sortedRows.length - 1; ri++) {\n html += '<tr>';\n const cellTopY = sortedRows[ri + 1];\n const cellH = sortedRows[ri] - sortedRows[ri + 1];\n\n for (let ci = 0; ci < sortedCols.length - 1; ci++) {\n const cellX = sortedCols[ci];\n const cellW = sortedCols[ci + 1] - sortedCols[ci];\n const cellItems = pageItems.filter(it => isItemInBounds(it, cellX, cellTopY, cellW, cellH));\n const cellRtl = cellItems.length > 0 && hasRTLText(cellItems.map(it => it.text).join(''));\n cellItems.sort((a, b) => {\n if (Math.abs(a.y - b.y) > 2) return b.y - a.y;\n return a.x - b.x;\n });\n\n const cellContent = buildCellContent(cellItems, underlinedItems, bodySize, bodyFont);\n const dirAttr = cellRtl ? ' dir=\"rtl\"' : '';\n\n html += `<td style=\"border: 1px solid #000; padding: 4px;\"${dirAttr}>${cellContent}</td>`;\n }\n html += '</tr>';\n }\n\n html += '</table>';\n return html;\n}\n\nfunction buildCellContent(\n items: TextItem[], underlinedItems: Set<TextItem>, bodySize: number, bodyFont = '',\n): string {\n if (items.length === 0) return '';\n let result = '';\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n let text = escapeHtml(item.text);\n if (underlinedItems.has(item)) text = `<u>${text}</u>`;\n const fragment = wrapItemHtml(item, text, bodyFont, bodySize);\n if (i > 0) {\n const prev = items[i - 1];\n const gap = item.x - prev.endX;\n if (gap > prev.fontSize * 0.15) {\n result += ' ';\n }\n }\n result += fragment;\n }\n return result;\n}\n\nfunction lineToHtmlContentWithUnderlines(\n line: TextLine, underlinedItems: Set<TextItem>, bodyFont?: string, bodySize?: number,\n annotations?: ReadonlyArray<PdfAnnotation>,\n): string {\n const sorted = [...line.items].sort((a, b) => a.x - b.x);\n const bf = bodyFont ?? '';\n const bs = bodySize ?? 12;\n let result = '';\n for (let i = 0; i < sorted.length; i++) {\n if (i > 0) {\n const gap = sorted[i].x - sorted[i - 1].endX;\n if (gap > sorted[i - 1].fontSize * 0.12\n && !isSingleBracket(sorted[i - 1].text)\n && !isSingleBracket(sorted[i].text)) {\n result += ' ';\n }\n }\n let text = escapeHtml(sorted[i].text);\n if (underlinedItems.has(sorted[i])) {\n text = `<u>${text}</u>`;\n }\n const uri = annotations ? findAnnotationForItem(sorted[i], annotations) : null;\n result += wrapItemHtml(sorted[i], text, bf, bs, uri);\n }\n return result.trim();\n}\n\nfunction isLineInsideGrid(line: TextLine, grids: TableGrid[]): boolean {\n for (const grid of grids) {\n if (line.items[0]?.page !== grid.page) continue;\n for (const item of line.items) {\n if (isItemInBounds(item, grid.x - 5, grid.y - 5, grid.width + 10, grid.height + 10)) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction isLineInsideBorderBox(line: TextLine, boxes: PathRect[]): PathRect | undefined {\n for (const box of boxes) {\n if (line.items[0]?.page !== box.page) continue;\n const allInside = line.items.every(item =>\n isItemInBounds(item, box.x - 3, box.y - 3, box.width + 6, box.height + 6)\n );\n if (allInside) return box;\n }\n return undefined;\n}\n\nfunction isLineNearBorderBox(line: PathRect, boxes: PathRect[]): boolean {\n for (const box of boxes) {\n if (box.page !== line.page) continue;\n const xOverlap = line.x >= box.x - 10 && line.x + line.width <= box.x + box.width + 10;\n const nearTop = Math.abs(line.y - box.y) < 8;\n const nearBottom = Math.abs(line.y - (box.y + box.height)) < 8;\n if (xOverlap && (nearTop || nearBottom)) return true;\n }\n return false;\n}\n\nfunction groupFooterLinesByY(lines: TextLine[]): TextLine[][] {\n if (lines.length === 0) return [];\n const sorted = [...lines].sort((a, b) => b.y - a.y);\n const groups: TextLine[][] = [[sorted[0]]];\n for (let i = 1; i < sorted.length; i++) {\n const lastGroup = groups.at(-1);\n if (!lastGroup) continue;\n const lastY = lastGroup[0].y;\n if (Math.abs(sorted[i].y - lastY) < 3) {\n lastGroup.push(sorted[i]);\n } else {\n groups.push([sorted[i]]);\n }\n }\n return groups;\n}\n\nfunction detectTextAlignment(line: TextLine, pageWidth: number, leftMargin: number, rightMargin: number): string {\n if (pageWidth <= 0) return '';\n const lineLeft = Math.min(...line.items.map(it => it.x));\n const lineRight = Math.max(...line.items.map(it => it.endX));\n const contentWidth = rightMargin - leftMargin;\n if (contentWidth <= 0) return '';\n\n const leftDist = lineLeft - leftMargin;\n const rightDist = rightMargin - lineRight;\n\n if (leftDist > contentWidth * 0.15 && rightDist > contentWidth * 0.15) {\n if (isLineRTL(line)) {\n const balance = Math.min(leftDist, rightDist) / Math.max(leftDist, rightDist);\n if (balance > 0.5) return 'center';\n } else {\n return 'center';\n }\n }\n if (leftDist > contentWidth * 0.2 && rightDist < contentWidth * 0.05) {\n return 'right';\n }\n return '';\n}\n\nfunction computeContentBounds(textItems: ReadonlyArray<TextItem>): { left: number; right: number; top: number; bottom: number } {\n let left = Infinity;\n let right = -Infinity;\n let top = -Infinity;\n let bottom = Infinity;\n for (const item of textItems) {\n if (item.x < left) left = item.x;\n if (item.endX > right) right = item.endX;\n if (item.y > top) top = item.y;\n if (item.y - item.fontSize < bottom) bottom = item.y - item.fontSize;\n }\n return { left, right, top, bottom };\n}\n\nfunction buildTableGridRects(allTableGrids: TableGrid[], remainingRects: PathRect[], allBorderBoxes: PathRect[]): Set<PathRect> {\n const tableGridRects = new Set<PathRect>();\n for (const grid of allTableGrids) {\n for (const rect of remainingRects) {\n if (rect.x >= grid.x - 2 && rect.x + rect.width <= grid.x + grid.width + 2 &&\n rect.y >= grid.y - 2 && rect.y + rect.height <= grid.y + grid.height + 2) {\n tableGridRects.add(rect);\n }\n }\n }\n for (const box of allBorderBoxes) {\n tableGridRects.add(box);\n }\n return tableGridRects;\n}\n\nfunction insertHrBeforeLine(\n state: HtmlBuilderState, decorativeLines: PathRect[], hrIdx: number, linePageIdx: number, lineY: number,\n): number {\n while (hrIdx < decorativeLines.length) {\n const hr = decorativeLines[hrIdx];\n if (hr.page > linePageIdx || (hr.page === linePageIdx && hr.y < lineY)) break;\n flushParagraph(state);\n closeList(state);\n const color = hr.stroked ? hr.strokeColor : hr.fillColor;\n const weight = hr.stroked\n ? Math.max(2, Math.round(hr.lineWidth))\n : Math.max(2, Math.round(Math.abs(hr.height)));\n let marginTop = '0';\n if (state.lastY !== null && hr.page === state.lastPage) {\n const gap = state.lastY - hr.y;\n if (gap > 0) marginTop = `${Math.round(gap * 100) / 100}pt`;\n }\n state.html.push(`<hr style=\"border:none;border-top:${weight}px solid ${color};margin:${marginTop} 0 0 0\" />`);\n state.lastY = hr.y;\n state.lastPage = hr.page;\n hrIdx++;\n }\n return hrIdx;\n}\n\nfunction renderBorderBoxToHtml(\n borderBox: PathRect, lines: TextLine[], underlinedItems: Set<TextItem>, bodyFont: string, bodySize: number,\n annotations: ReadonlyArray<PdfAnnotation>,\n): string {\n const boxLines = lines.filter(l => isLineInsideBorderBox(l, [borderBox]));\n const boxContent = boxLines\n .map(l => {\n const content = lineToHtmlContentWithUnderlines(l, underlinedItems, bodyFont, bodySize, annotations);\n if (!content.length) return '';\n const lineDir = isLineRTL(l) ? ' dir=\"rtl\"' : '';\n return `<div${lineDir}>${content}</div>`;\n })\n .filter(c => c.length > 0)\n .join('');\n const boxStyles: string[] = [];\n if (borderBox.filled && borderBox.fillColor !== '#ffffff' && borderBox.fillColor !== '#fff') {\n boxStyles.push(`background-color:${borderBox.fillColor}`);\n }\n if (borderBox.stroked) {\n const bw = Math.max(1, Math.round(borderBox.lineWidth));\n boxStyles.push(`border:${bw}px solid ${borderBox.strokeColor}`);\n } else {\n boxStyles.push('border:1px solid #000');\n }\n boxStyles.push('padding:8px 12px', 'margin:8px 0', 'font-family:monospace', 'font-size:0.85em', 'overflow-x:auto', 'white-space:pre-wrap', 'width:100%', 'box-sizing:border-box');\n return `<div style=\"${boxStyles.join(';')}\">${boxContent}</div>`;\n}\n\nfunction renderFooterLines(\n state: HtmlBuilderState, footerLines: TextLine[], underlinedItems: Set<TextItem>, bodyFont: string, bodySize: number,\n): void {\n state.html.push('<hr style=\"border:none;border-top:1px solid #ccc;margin:1.5em 0 0.5em 0\" />');\n const yGroups = groupFooterLinesByY(footerLines);\n state.html.push('<footer style=\"font-size:0.75em;color:#666\">');\n for (const group of yGroups) {\n if (group.length === 1) {\n const content = lineToHtmlContentWithUnderlines(group[0], underlinedItems, bodyFont, bodySize, state.annotations);\n const rtl = isLineRTL(group[0]);\n const dirAttr = rtl ? ' dir=\"rtl\"' : '';\n state.html.push(`<p${dirAttr} style=\"margin:0.15em 0;text-align:center\">${content}</p>`);\n } else {\n const sorted = [...group].sort((a, b) => a.minX - b.minX);\n const parts = sorted.map(l =>\n lineToHtmlContentWithUnderlines(l, underlinedItems, bodyFont, bodySize, state.annotations));\n state.html.push(`<div style=\"display:flex;justify-content:space-between;margin:0.15em 0\">`);\n for (const part of parts) {\n state.html.push(`<span>${part}</span>`);\n }\n state.html.push('</div>');\n }\n }\n state.html.push('</footer>');\n}\n\ninterface HtmlBuilderContext {\n readonly lines: TextLine[];\n readonly mergedItems: TextItem[];\n readonly underlinedItems: Set<TextItem>;\n readonly structureMap: StructureMap;\n readonly allTableGrids: TableGrid[];\n readonly allBorderBoxes: PathRect[];\n readonly sortedImages: ImageItem[];\n readonly decorativeLines: PathRect[];\n readonly bodySize: number;\n readonly bodyFont: string;\n readonly pageWidth: number;\n readonly leftMargin: number;\n readonly rightMargin: number;\n readonly footerThreshold: number;\n readonly isRtlDoc: boolean;\n}\n\nfunction renderGridForLine(\n line: TextLine, state: HtmlBuilderState, ctx: HtmlBuilderContext,\n renderedGrids: Set<TableGrid>,\n): void {\n const { allTableGrids, mergedItems, underlinedItems, bodySize, bodyFont } = ctx;\n const grid = allTableGrids.find(g => {\n if (line.items[0]?.page !== g.page) return false;\n return line.items.some(it => isItemInBounds(it, g.x - 5, g.y - 5, g.width + 10, g.height + 10));\n });\n if (grid && !renderedGrids.has(grid)) {\n flushParagraph(state);\n closeList(state);\n state.html.push(renderTableGrid(grid, mergedItems, underlinedItems, bodySize, bodyFont));\n renderedGrids.add(grid);\n }\n}\n\nfunction applyParagraphSpacing(state: HtmlBuilderState, lineSpacing: number, bodySize: number): void {\n if (lineSpacing <= 0) return;\n const baselineSpacing = state.lastLineSpacing > 0 ? state.lastLineSpacing : bodySize;\n const extraSpacing = lineSpacing - baselineSpacing;\n if (extraSpacing > 0) {\n const px = Math.min(extraSpacing, bodySize * 5);\n state.currentParagraphSpacingPx = Math.max(state.currentParagraphSpacingPx, px);\n }\n}\n\nfunction handleBorderBoxLine(\n line: TextLine, ctx: HtmlBuilderContext, state: HtmlBuilderState,\n renderedBorderBoxes: Set<PathRect>, borderBox: PathRect,\n): void {\n if (!renderedBorderBoxes.has(borderBox)) {\n flushParagraph(state);\n closeList(state);\n const { lines, underlinedItems, bodyFont, bodySize } = ctx;\n state.html.push(renderBorderBoxToHtml(borderBox, lines, underlinedItems, bodyFont, bodySize, state.annotations));\n renderedBorderBoxes.add(borderBox);\n }\n}\n\nfunction detectParagraphBreak(line: TextLine, state: HtmlBuilderState, bodySize: number, lineSpacing: number): boolean {\n return state.lastY !== null &&\n line.items[0].page === state.lastPage &&\n (\n (state.lastLineSpacing > 0 &&\n lineSpacing > Math.min(state.lastLineSpacing, bodySize * 1.5) * 1.3) ||\n lineSpacing > bodySize * 1.5\n );\n}\n\nfunction applyInitialGapSpacing(state: HtmlBuilderState, lineSpacing: number, bodySize: number): void {\n if (state.lastLineSpacing === 0 && lineSpacing > 0 && state.lastY !== null) {\n const gap = lineSpacing - bodySize;\n if (gap > 0) {\n state.pendingMarginTopPt = Math.max(state.pendingMarginTopPt, gap);\n }\n }\n}\n\nfunction processRegularLine(\n line: TextLine, lineText: string, ctx: HtmlBuilderContext, state: HtmlBuilderState,\n renderedBorderBoxes: Set<PathRect>,\n): void {\n const { underlinedItems, structureMap, allBorderBoxes, bodySize, bodyFont, pageWidth, leftMargin, rightMargin } = ctx;\n const borderBox = isLineInsideBorderBox(line, allBorderBoxes);\n if (borderBox) {\n handleBorderBoxLine(line, ctx, state, renderedBorderBoxes, borderBox);\n return;\n }\n\n const lineSpacing = state.lastY !== null && line.items[0].page === state.lastPage\n ? Math.abs(state.lastY - line.y) : 0;\n const isParagraphBreak = detectParagraphBreak(line, state, bodySize, lineSpacing);\n const isPageBreak = state.lastPage !== -1 && line.items[0].page !== state.lastPage;\n\n if (isParagraphBreak) {\n applyParagraphSpacing(state, lineSpacing, bodySize);\n } else {\n applyInitialGapSpacing(state, lineSpacing, bodySize);\n }\n\n const align = pageWidth > 0 ? detectTextAlignment(line, pageWidth, leftMargin, rightMargin) : '';\n if (align && state.currentParagraph.length === 0) {\n state.currentParagraphAlign = align;\n }\n\n processHtmlLineWithUnderlines(line, lineText, bodySize, bodyFont, state, { isParagraphBreak, isPageBreak, underlinedItems, structureMap, lineSpacing, bodySize });\n\n if (ctx.isRtlDoc && !state.currentParagraphRTL && hasRTLText(lineText)) {\n state.currentParagraphRTL = true;\n }\n\n if (lineSpacing > 0 && state.lastLineSpacing !== 0) state.lastLineSpacing = lineSpacing;\n}\n\nfunction processLinesToHtml(ctx: HtmlBuilderContext, state: HtmlBuilderState): TextLine[] {\n const { lines, allTableGrids, sortedImages, decorativeLines, footerThreshold } = ctx;\n const renderedGrids = new Set<TableGrid>();\n const renderedBorderBoxes = new Set<PathRect>();\n const footerLines: TextLine[] = [];\n let hrIdx = 0;\n\n for (const line of lines) {\n const lineText = lineToText(line);\n if (!lineText) continue;\n\n if (footerThreshold > 0 && line.items.every(it => it.y < footerThreshold)) {\n footerLines.push(line);\n continue;\n }\n\n insertImagesBeforeY(state, sortedImages, line.items[0].page, line.y);\n hrIdx = insertHrBeforeLine(state, decorativeLines, hrIdx, line.items[0].page, line.y);\n\n if (isLineInsideGrid(line, allTableGrids)) {\n renderGridForLine(line, state, ctx, renderedGrids);\n state.lastY = line.y;\n state.lastPage = line.items[0].page;\n continue;\n }\n\n processRegularLine(line, lineText, ctx, state, renderedBorderBoxes);\n state.lastY = line.y;\n state.lastPage = line.items[0].page;\n }\n\n return footerLines;\n}\n\nfunction isNearRTL(text: string, pos: number, dir: -1 | 1): boolean {\n const c1 = pos + dir >= 0 && pos + dir < text.length ? (text.codePointAt(pos + dir) ?? 0) : 0;\n if (isRTLChar(c1)) return true;\n if (c1 === 0x27 || c1 === 0x22) {\n const c2 = pos + dir * 2 >= 0 && pos + dir * 2 < text.length ? (text.codePointAt(pos + dir * 2) ?? 0) : 0;\n return isRTLChar(c2);\n }\n return false;\n}\n\nfunction mirrorBracketsAdjacentToRtl(text: string): string {\n let result = '';\n for (let i = 0; i < text.length; i++) {\n const ch = text[i];\n if (ch === '(' || ch === ')') {\n if (isNearRTL(text, i, -1) || isNearRTL(text, i, 1)) {\n result += ch === '(' ? ')' : '(';\n continue;\n }\n }\n result += ch;\n }\n return result;\n}\n\nfunction fixLtrLineItemInRtlDoc(item: TextItem): void {\n if (hasRTLText(item.text)) {\n item.text = fixVisualOrderRTL(item.text);\n item.text = fixBracketsAroundLtrWords(item.text);\n if (item.text.includes(' ')) {\n item.text = reverseRTLWordOrder(item.text);\n item.text = joinSplitHebrewFragments(item.text);\n item.text = fixSplitRoundBrackets(item.text);\n }\n } else if ((item.text.codePointAt(0) ?? 0) === 0x5D) {\n item.text = fixLeadingBracketsInLtrTokens([item.text])[0];\n }\n}\n\nfunction fixRtlLineItem(item: TextItem): void {\n if (!hasRTLText(item.text)) return;\n item.text = fixVisualOrderRTL(item.text);\n item.text = fixBracketsAroundLtrWords(item.text);\n if (item.text.includes(' ')) {\n item.text = reverseRTLWordOrder(item.text);\n item.text = joinSplitHebrewFragments(item.text);\n }\n item.text = mirrorBracketsAdjacentToRtl(item.text);\n item.text = fixSplitRoundBrackets(item.text);\n}\n\nexport function applyRtlWordFixes(rawLines: TextLine[]): void {\n const isRtlDoc = rawLines.some(line => isLineRTL(line));\n for (const line of rawLines) {\n if (!isLineRTL(line)) { applyLtrLineFixesIfRtlDoc(line, isRtlDoc); continue; }\n for (const item of line.items) fixRtlLineItem(item);\n }\n}\n\nfunction applyLtrLineFixesIfRtlDoc(line: TextLine, isRtlDoc: boolean): void {\n if (isRtlDoc) {\n for (const item of line.items) fixLtrLineItemInRtlDoc(item);\n }\n}\n\nfunction buildLayoutRects(\n pathRects: PathRect[], mergedItems: TextItem[],\n): { underlinedItems: Set<TextItem>; allTableGrids: TableGrid[]; allBorderBoxes: PathRect[]; decorativeLines: PathRect[] } {\n const { underlinedItems, usedRects } = detectUnderlines(pathRects, mergedItems);\n const remainingRects = pathRects.filter(r => !usedRects.has(r));\n\n const pages = new Set(mergedItems.map(it => it.page));\n const allTableGrids: TableGrid[] = [];\n const allBorderBoxes: PathRect[] = [];\n for (const page of pages) {\n const grids = detectTableGrids(remainingRects, page);\n allTableGrids.push(...grids);\n const boxes = detectBorderBoxes(remainingRects, grids, page);\n allBorderBoxes.push(...mergeAdjacentBorderBoxes(boxes));\n }\n\n const tableGridRects = buildTableGridRects(allTableGrids, remainingRects, allBorderBoxes);\n const decorativeLines = remainingRects\n .filter(r => !tableGridRects.has(r) && r.height <= 3 && r.width > 50 && (r.stroked || r.filled)\n && !isLineNearBorderBox(r, allBorderBoxes)\n && isNeutralColor(r.stroked ? r.strokeColor : r.fillColor))\n .sort((a, b) => a.page === b.page ? b.y - a.y : a.page - b.page);\n\n return { underlinedItems, allTableGrids, allBorderBoxes, decorativeLines };\n}\n\nfunction appendRemainingImages(state: HtmlBuilderState, sortedImages: ImageItem[]): void {\n while (state.imageIdx < sortedImages.length) {\n const img = sortedImages[state.imageIdx];\n const styles = [`width:${Math.round(img.renderWidth * 100) / 100}pt`, 'max-width:100%', 'height:auto'];\n if (state.lastY !== null && img.page === state.lastPage) {\n const imgTop = img.y + img.renderHeight;\n const gap = state.lastY - imgTop;\n if (gap > 0) styles.push(`margin-top:${Math.round(gap * 100) / 100}pt`);\n }\n state.html.push(`<img src=\"${img.dataUrl}\" alt=\"Embedded image\" style=\"${styles.join(';')}\" />`);\n state.lastY = img.y;\n state.lastPage = img.page;\n state.imageIdx++;\n }\n}\n\nfunction textItemsToHtml(\n textItems: TextItem[],\n imageItems: ImageItem[],\n structureMap: StructureMap,\n pathRects: PathRect[] = [],\n pageWidth = 0,\n pageHeight = 0,\n annotations: PdfAnnotation[] = [],\n): string {\n const mergedItems = mergeAdjacentChars(textItems);\n const rawLines = groupIntoLines(mergedItems);\n if (rawLines.length === 0) return '';\n\n applyRtlWordFixes(rawLines);\n\n const { lines, hasColumns } = detectColumns(rawLines);\n const bodySize = detectBodyFontSize(mergedItems);\n const bodyFont = detectBodyFont(mergedItems);\n\n const contentBounds = computeContentBounds(mergedItems);\n const leftMargin = pageWidth > 0 ? contentBounds.left : 0;\n const rightMargin = pageWidth > 0 ? contentBounds.right : pageWidth;\n\n const { underlinedItems, allTableGrids, allBorderBoxes, decorativeLines } = buildLayoutRects(pathRects, mergedItems);\n\n const sortedImages = [...imageItems].sort((a, b) =>\n a.page === b.page ? b.y - a.y : a.page - b.page\n );\n\n const state: HtmlBuilderState = {\n html: [], inBulletList: false, inNumberedList: false, inColumnLayout: false,\n currentParagraph: [], currentParagraphRTL: false,\n currentParagraphAlign: '', currentParagraphSpacingPx: 0, pendingMarginTopPt: 0,\n currentParagraphIndent: 0, currentParagraphLineXs: [], currentParagraphLineSpacings: [], currentParagraphBodySize: 0,\n lastY: null, lastPage: -1, lastLineSpacing: 0, imageIdx: 0,\n annotations, pageWidth, leftMargin, rightMargin,\n };\n\n const htmlCtx: HtmlBuilderContext = {\n lines, mergedItems, underlinedItems, structureMap, allTableGrids, allBorderBoxes,\n sortedImages, decorativeLines, bodySize, bodyFont, pageWidth, leftMargin, rightMargin,\n footerThreshold: pageHeight > 0 ? pageHeight * 0.1 : 0,\n isRtlDoc: lines.some(l => isLineRTL(l)),\n };\n\n const footerLines = processLinesToHtml(htmlCtx, state);\n\n flushParagraph(state);\n closeList(state);\n appendRemainingImages(state, sortedImages);\n\n if (footerLines.length > 0) {\n renderFooterLines(state, footerLines, underlinedItems, bodyFont, bodySize);\n }\n\n let result = state.html.join('\\n');\n if (hasColumns) {\n result = `<div style=\"column-count:2;column-gap:2em\">${result}</div>`;\n }\n return result;\n}\n\n// ── Structure tree parsing (tagged PDF) ─────────────────────────────────\n\ninterface StructureMcidEntry {\n readonly mcid: number;\n readonly page: number;\n}\n\ninterface StructureNode {\n readonly type: string;\n readonly mcids: StructureMcidEntry[];\n readonly children: StructureNode[];\n}\n\nexport interface StructureMap {\n readonly mcidToType: Map<string, string>;\n readonly hasStructure: boolean;\n}\n\nfunction findPageIndexByDict(reader: PdfReader, dict: Record<string, PdfObject>, pages: PdfObject[]): number {\n for (let i = 0; i < pages.length; i++) {\n if (reader.getDict(pages[i]) === dict) return i;\n }\n return -1;\n}\n\nfunction resolvePageIndex(reader: PdfReader, pageRef: PdfObject | undefined, pages: PdfObject[]): number {\n if (!pageRef) return -1;\n const resolved = reader.resolveDeep(pageRef);\n if (resolved.type !== 'dict') return -1;\n const dict = resolved.value as Record<string, PdfObject>;\n if (reader.getString(dict['Type']) !== 'Page') return -1;\n return findPageIndexByDict(reader, dict, pages);\n}\n\n/** One walk of the structure tree: `seen` holds the elements already visited. */\ninterface StructWalk {\n readonly reader: PdfReader;\n readonly pages: PdfObject[];\n readonly seen: Set<PdfObject>;\n}\n\ninterface StructKDictOptions {\n readonly walk: StructWalk;\n readonly kDict: Record<string, PdfObject>;\n readonly effectivePage: number;\n readonly depth: number;\n readonly mcids: StructureMcidEntry[];\n readonly children: StructureNode[];\n readonly elemRef: PdfObject;\n}\n\nfunction processStructKDict(opts: StructKDictOptions): void {\n const { walk, kDict, effectivePage, depth, mcids, children, elemRef } = opts;\n const mcidObj = kDict['MCID'];\n if (mcidObj) {\n const mcidVal = walk.reader.getNumber(mcidObj);\n const mcidPageRef = kDict['Pg'];\n const mcidPage = mcidPageRef ? resolvePageIndex(walk.reader, mcidPageRef, walk.pages) : effectivePage;\n mcids.push({ mcid: mcidVal, page: mcidPage >= 0 ? mcidPage : effectivePage });\n } else {\n const child = parseStructureElement(walk, elemRef, effectivePage, depth + 1);\n if (child) children.push(child);\n }\n}\n\nfunction processStructKArrayItem(\n walk: StructWalk, item: PdfObject, effectivePage: number, depth: number,\n mcids: StructureMcidEntry[], children: StructureNode[],\n): void {\n const itemResolved = walk.reader.resolveDeep(item);\n if (itemResolved.type === 'number') {\n mcids.push({ mcid: itemResolved.value as number, page: effectivePage });\n } else if (itemResolved.type === 'dict') {\n const itemDict = itemResolved.value as Record<string, PdfObject>;\n processStructKDict({ walk, kDict: itemDict, effectivePage, depth, mcids, children, elemRef: item });\n }\n}\n\nfunction parseStructureElement(\n walk: StructWalk, elemObj: PdfObject, parentPageIdx: number, depth: number,\n): StructureNode | null {\n if (depth > 50) return null;\n const { reader, pages } = walk;\n const resolved = reader.resolveDeep(elemObj);\n if (resolved.type === 'number') {\n return { type: 'MCID', mcids: [{ mcid: resolved.value as number, page: parentPageIdx }], children: [] };\n }\n if (resolved.type !== 'dict') return null;\n // An element has one parent; a second reference to it is a shared or cyclic\n // node, and expanding it again costs a copy of its whole subtree each time.\n if (!visitOnce(walk.seen, resolved)) return null;\n const dict = resolved.value as Record<string, PdfObject>;\n const typeStr = reader.getString(dict['Type']);\n if (typeStr && typeStr !== 'StructElem') return null;\n\n const sType: string = reader.getString(dict['S']) || 'Span';\n const pageRef = dict['Pg'];\n const pageIdx = pageRef ? resolvePageIndex(reader, pageRef, pages) : parentPageIdx;\n const effectivePage = pageIdx >= 0 ? pageIdx : parentPageIdx;\n\n const kObj = dict['K'];\n const mcids: StructureMcidEntry[] = [];\n const children: StructureNode[] = [];\n\n if (!kObj) return { type: sType, mcids, children };\n\n const kResolved = reader.resolveDeep(kObj);\n\n if (kResolved.type === 'number') {\n mcids.push({ mcid: kResolved.value as number, page: effectivePage });\n } else if (kResolved.type === 'dict') {\n const kDict = kResolved.value as Record<string, PdfObject>;\n processStructKDict({ walk, kDict, effectivePage, depth, mcids, children, elemRef: kResolved });\n } else if (kResolved.type === 'array') {\n for (const item of kResolved.value as PdfObject[]) {\n processStructKArrayItem(walk, item, effectivePage, depth, mcids, children);\n }\n }\n\n return { type: sType, mcids, children };\n}\n\nfunction collectMcidTypes(node: StructureNode, result: Map<string, string>): void {\n for (const entry of node.mcids) {\n const key = `${entry.page}:${entry.mcid}`;\n if (!result.has(key)) {\n result.set(key, node.type);\n }\n }\n for (const child of node.children) {\n collectMcidTypes(child, result);\n }\n}\n\nfunction collectMcidTypesFromElement(walk: StructWalk, item: PdfObject, mcidToType: Map<string, string>): void {\n const node = parseStructureElement(walk, item, 0, 0);\n if (node) collectMcidTypes(node, mcidToType);\n}\n\nexport function parseStructureTree(reader: PdfReader, pages: PdfObject[]): StructureMap {\n const emptyResult: StructureMap = { mcidToType: new Map(), hasStructure: false };\n try {\n const catalog = reader.getRoot();\n const structTreeRef = catalog['StructTreeRoot'];\n if (!structTreeRef) return emptyResult;\n\n const structTreeDict = reader.getDict(structTreeRef);\n const kObj = structTreeDict['K'];\n if (!kObj) return emptyResult;\n\n const mcidToType = new Map<string, string>();\n const walk: StructWalk = { reader, pages, seen: new Set<PdfObject>() };\n\n const kResolved = reader.resolveDeep(kObj);\n if (kResolved.type === 'array') {\n for (const item of kResolved.value as PdfObject[]) {\n collectMcidTypesFromElement(walk, item, mcidToType);\n }\n } else {\n collectMcidTypesFromElement(walk, kObj, mcidToType);\n }\n\n return { mcidToType, hasStructure: mcidToType.size > 0 };\n } catch {\n return emptyResult;\n }\n}\n\nfunction getStructureTypeForLine(line: TextLine, structureMap: StructureMap): string | null {\n if (!structureMap.hasStructure) return null;\n for (const item of line.items) {\n if (item.mcid < 0) continue;\n const key = `${item.page}:${item.mcid}`;\n const type = structureMap.mcidToType.get(key);\n if (type) return type;\n }\n return null;\n}\n\nfunction structureTypeToHeadingLevel(type: string): number {\n switch (type) {\n case 'H1': return 1;\n case 'H2': return 2;\n case 'H3': return 3;\n case 'H4': return 4;\n case 'H5': return 5;\n case 'H6': return 6;\n case 'H': return 1;\n default: return 0;\n }\n}\n\nfunction isStructureListItem(type: string): boolean {\n return type === 'LI' || type === 'LBody' || type === 'Lbl';\n}\n\n// ── Main export ─────────────────────────────────────────────────────────\n\n/**\n * Parses a PDF into flowing HTML and plain text.\n * Input is untrusted; structures exceeding internal limits are skipped.\n */\nexport async function parsePdf(buffer: ArrayBuffer, limits: ParserLimits = DEFAULT_PARSER_LIMITS): Promise<PdfParseResult> {\n const header = new Uint8Array(buffer, 0, Math.min(5, buffer.byteLength));\n if (header.length < 5 ||\n header[0] !== 0x25 ||\n header[1] !== 0x50 ||\n header[2] !== 0x44 ||\n header[3] !== 0x46 ||\n header[4] !== 0x2D\n ) {\n throw new Error('Not a valid PDF file.');\n }\n\n const reader = new PdfReader(buffer, limits);\n\n try {\n reader.parse();\n } catch {\n throw new Error('Unable to read this PDF. It may be corrupted or use an unsupported format.');\n }\n\n if (reader.isEncrypted()) {\n throw new Error('Encrypted PDFs are not supported.');\n }\n\n const pages = reader.getPages();\n if (pages.length === 0) {\n throw new Error('PDF contains no pages.');\n }\n\n const structureMap = parseStructureTree(reader, pages);\n\n const allTextItems: TextItem[] = [];\n const allImageItems: ImageItem[] = [];\n const allPathRects: PathRect[] = [];\n\n for (let i = 0; i < pages.length; i++) {\n try {\n const { textItems, imageItems, pathRects } = extractPageContent(reader, pages[i], i);\n allTextItems.push(...textItems);\n allImageItems.push(...imageItems);\n allPathRects.push(...pathRects);\n } catch {\n continue;\n }\n }\n\n const dedupedItems = deduplicateTextItems(allTextItems);\n return buildParsePdfResult(dedupedItems, allImageItems, allPathRects, structureMap);\n}\n\nfunction buildParsePdfResult(\n dedupedItems: TextItem[],\n allImageItems: ImageItem[],\n allPathRects: PathRect[],\n structureMap: StructureMap,\n): PdfParseResult {\n if (dedupedItems.length === 0 && allImageItems.length > 0) {\n allImageItems.sort((a, b) => a.page === b.page ? b.y - a.y : a.page - b.page);\n const imgTags = allImageItems\n .map(img => `<img src=\"${img.dataUrl}\" alt=\"Page image\" style=\"width:${Math.round(img.renderWidth * 100) / 100}pt;max-width:100%;height:auto\" />`)\n .join('\\n');\n return { html: imgTags, text: '', imageOnly: true };\n }\n if (dedupedItems.length === 0) throw new Error('No readable content found in PDF.');\n const html = textItemsToHtml(dedupedItems, allImageItems, structureMap, allPathRects);\n dedupedItems.sort((a, b) => {\n if (a.page !== b.page) return a.page - b.page;\n if (Math.abs(a.y - b.y) > 2) return b.y - a.y;\n return a.x - b.x;\n });\n const plainText = dedupedItems.map(item => item.text).join(' ').replaceAll(/\\s+/g, ' ').trim();\n return { html, text: plainText, imageOnly: false };\n}\n\n// ── Paged PDF parsing ───────────────────────────────────────────────────\n\nexport interface PdfPageResult {\n readonly html: string;\n readonly text: string;\n readonly imageOnly: boolean;\n readonly pageIndex: number;\n readonly pageWidth: number;\n readonly pageHeight: number;\n readonly bodyFontSize: number;\n readonly contentLeft: number;\n readonly contentRight: number;\n}\n\nexport interface PdfOutlineItem {\n readonly title: string;\n readonly pageIndex: number;\n readonly children: ReadonlyArray<PdfOutlineItem>;\n}\n\nexport interface PdfParseResultPaged {\n readonly pages: ReadonlyArray<PdfPageResult>;\n readonly totalPages: number;\n readonly html: string;\n readonly text: string;\n readonly imageOnly: boolean;\n readonly outline: ReadonlyArray<PdfOutlineItem>;\n}\n\ninterface BuildPageResultOptions {\n readonly pageIndex: number;\n readonly structureMap: StructureMap;\n readonly pageWidth: number;\n readonly pageHeight: number;\n readonly annotations?: PdfAnnotation[];\n}\n\nfunction buildPageResult(\n pageTextItems: TextItem[], pageImageItems: ImageItem[], pagePathRects: PathRect[],\n options: BuildPageResultOptions,\n): PdfPageResult {\n const { pageIndex, structureMap, pageWidth, pageHeight, annotations = [] } = options;\n const deduped = deduplicateTextItems(pageTextItems);\n\n if (deduped.length === 0 && pageImageItems.length > 0) {\n const sortedImages = [...pageImageItems].sort((a, b) => b.y - a.y);\n const imgTags = sortedImages\n .map(img => {\n return `<img src=\"${img.dataUrl}\" alt=\"Page image\" style=\"width:${Math.round(img.renderWidth * 100) / 100}pt;max-width:100%;height:auto\" />`;\n })\n .join('\\n');\n return { html: imgTags, text: '', imageOnly: true, pageIndex, pageWidth, pageHeight, bodyFontSize: 12, contentLeft: 0, contentRight: pageWidth };\n }\n\n if (deduped.length === 0) {\n return { html: '', text: '', imageOnly: false, pageIndex, pageWidth, pageHeight, bodyFontSize: 12, contentLeft: 0, contentRight: pageWidth };\n }\n\n const bodyFontSize = detectBodyFontSize(deduped);\n const bounds = computeContentBounds(deduped);\n const html = textItemsToHtml(deduped, pageImageItems, structureMap, pagePathRects, pageWidth, pageHeight, annotations);\n const sorted = [...deduped].sort((a, b) => {\n if (Math.abs(a.y - b.y) > 2) return b.y - a.y;\n return a.x - b.x;\n });\n const text = sorted.map(item => item.text).join(' ').replaceAll(/\\s+/g, ' ').trim();\n\n return { html, text, imageOnly: false, pageIndex, pageWidth, pageHeight, bodyFontSize, contentLeft: bounds.left, contentRight: bounds.right };\n}\n\nfunction extractAllPages(\n reader: PdfReader, pdfPages: PdfObject[], structureMap: StructureMap,\n): { pages: PdfPageResult[]; allTextParts: string[]; allHtmlParts: string[]; allImageOnly: boolean } {\n const pages: PdfPageResult[] = [];\n const allTextParts: string[] = [];\n const allHtmlParts: string[] = [];\n let allImageOnly = true;\n\n for (let i = 0; i < pdfPages.length; i++) {\n try {\n const { textItems, imageItems, pathRects, pageWidth, pageHeight, annotations } = extractPageContent(reader, pdfPages[i], i);\n const pageResult = buildPageResult(textItems, imageItems, pathRects, { pageIndex: i, structureMap, pageWidth, pageHeight, annotations });\n pages.push(pageResult);\n if (pageResult.html) allHtmlParts.push(pageResult.html);\n if (pageResult.text) allTextParts.push(pageResult.text);\n if (!pageResult.imageOnly || pageResult.text) allImageOnly = false;\n } catch {\n pages.push({ html: '', text: '', imageOnly: false, pageIndex: i, pageWidth: 612, pageHeight: 792, bodyFontSize: 12, contentLeft: 0, contentRight: 612 });\n }\n }\n return { pages, allTextParts, allHtmlParts, allImageOnly };\n}\n\n/**\n * Parses a PDF into one HTML fragment per page, plus the outline.\n * Input is untrusted; structures exceeding internal limits are skipped.\n */\nexport async function parsePdfPaged(buffer: ArrayBuffer, limits: ParserLimits = DEFAULT_PARSER_LIMITS): Promise<PdfParseResultPaged> {\n const header = new Uint8Array(buffer, 0, Math.min(5, buffer.byteLength));\n if (header.length < 5 ||\n header[0] !== 0x25 || header[1] !== 0x50 || header[2] !== 0x44 ||\n header[3] !== 0x46 || header[4] !== 0x2D\n ) {\n throw new Error('Not a valid PDF file.');\n }\n\n const reader = new PdfReader(buffer, limits);\n try {\n reader.parse();\n } catch {\n throw new Error('Unable to read this PDF. It may be corrupted or use an unsupported format.');\n }\n\n if (reader.isEncrypted()) {\n throw new Error('Encrypted PDFs are not supported.');\n }\n\n const pdfPages = reader.getPages();\n if (pdfPages.length === 0) {\n throw new Error('PDF contains no pages.');\n }\n\n const structureMap = parseStructureTree(reader, pdfPages);\n\n const { pages, allTextParts, allHtmlParts, allImageOnly } = extractAllPages(reader, pdfPages, structureMap);\n const outline = parseOutline(reader, pdfPages);\n\n return {\n pages,\n totalPages: pages.length,\n html: allHtmlParts.join('\\n'),\n text: allTextParts.join(' '),\n imageOnly: allImageOnly && pages.length > 0,\n outline,\n };\n}\n\nfunction parseOutline(reader: PdfReader, pdfPages: PdfObject[]): PdfOutlineItem[] {\n try {\n const root = reader.getRoot();\n const outlinesRef = root['Outlines'];\n if (!outlinesRef) return [];\n const outlinesDict = reader.getDict(outlinesRef);\n const firstRef = outlinesDict['First'];\n if (!firstRef) return [];\n const pageMap = buildPageObjNumMap(reader, pdfPages);\n return parseOutlineItems(reader, firstRef, pageMap, 0, new Set<string>());\n } catch {\n return [];\n }\n}\n\nfunction buildPageObjNumMap(reader: PdfReader, pdfPages: PdfObject[]): Map<string, number> {\n const map = new Map<string, number>();\n for (let i = 0; i < pdfPages.length; i++) {\n const page = pdfPages[i];\n if (page.type === 'ref') {\n map.set(page.value as string, i);\n }\n }\n return map;\n}\n\nfunction resolveRefArrayPageIndex(reader: PdfReader, destObj: PdfObject, pageMap: Map<string, number>): number {\n const resolved = reader.resolveDeep(destObj);\n if (resolved.type === 'array') {\n const arr = resolved.value as PdfObject[];\n if (arr.length > 0 && arr[0].type === 'ref') {\n return pageMap.get(arr[0].value as string) ?? -1;\n }\n }\n return -1;\n}\n\nfunction resolveOutlinePageIndex(reader: PdfReader, item: Record<string, PdfObject>, pageMap: Map<string, number>): number {\n const dest = item['Dest'];\n if (dest) {\n const resolved = reader.resolveDeep(dest);\n if (resolved.type === 'string') return -1;\n const idx = resolveRefArrayPageIndex(reader, dest, pageMap);\n if (idx >= 0) return idx;\n }\n const aObj = item['A'];\n if (!aObj) return -1;\n try {\n const action = reader.getDict(aObj);\n const s = reader.getString(action['S'] ?? { type: 'null', value: null });\n if (s !== 'GoTo') return -1;\n const d = action['D'];\n return d ? resolveRefArrayPageIndex(reader, d, pageMap) : -1;\n } catch { return -1; }\n}\n\n/**\n * `visited` spans the whole outline tree, not one sibling list: two items\n * pointing at the same child list would otherwise each expand it in full.\n */\nfunction parseOutlineItems(\n reader: PdfReader, firstRef: PdfObject, pageMap: Map<string, number>, depth: number, visited: Set<string>,\n): PdfOutlineItem[] {\n if (depth > 10) return [];\n const items: PdfOutlineItem[] = [];\n let currentRef: PdfObject | null = firstRef;\n\n while (currentRef) {\n const key = currentRef.type === 'ref' ? currentRef.value as string : '';\n if (key && visited.has(key)) break;\n if (key) visited.add(key);\n\n try {\n const itemDict = reader.getDict(currentRef);\n const title = reader.getString(itemDict['Title'] ?? { type: 'string', value: '' });\n const pageIndex = resolveOutlinePageIndex(reader, itemDict, pageMap);\n\n let children: PdfOutlineItem[] = [];\n const childFirst = itemDict['First'];\n if (childFirst) {\n children = parseOutlineItems(reader, childFirst, pageMap, depth + 1, visited);\n }\n\n items.push({ title, pageIndex, children });\n\n const nextRef = itemDict['Next'];\n currentRef = nextRef ?? null;\n } catch {\n break;\n }\n }\n return items;\n}\n","/**\n * Minimal TrueType font parser.\n * Replaces opentype.js for reading TTF/OTF font metrics, cmap lookups,\n * and raw glyph data extraction + scaling.\n */\n\n// ── Binary helpers (big-endian — TTF standard) ──────────────────────────\n\nfunction readU8(d: DataView, o: number): number {\n return d.getUint8(o);\n}\n\nfunction readU16(d: DataView, o: number): number {\n return d.getUint16(o, false);\n}\n\nfunction readI16(d: DataView, o: number): number {\n return d.getInt16(o, false);\n}\n\nfunction readU32(d: DataView, o: number): number {\n return d.getUint32(o, false);\n}\n\nfunction writeI16(d: DataView, o: number, v: number): void {\n d.setInt16(o, v, false);\n}\n\n// ── Glyph metrics returned by lookup methods ────────────────────────────\n\nexport interface TtfGlyphMetrics {\n readonly advanceWidth: number;\n readonly index: number;\n}\n\n// ── Table directory entry ───────────────────────────────────────────────\n\ninterface TableRecord {\n readonly offset: number;\n readonly length: number;\n}\n\n// ── cmap Format 4 helper: resolve a single glyph ID ────────────────────\n\nfunction resolveFormat4GlyphId(\n data: DataView, cp: number, startCode: number, delta: number,\n rangeOffset: number, rangeOff: number, segIndex: number,\n): number {\n if (rangeOffset === 0) {\n return (cp + delta) & 0xFFFF;\n }\n const glyphIdOff = rangeOff + segIndex * 2 + rangeOffset + (cp - startCode) * 2;\n const gid = readU16(data, glyphIdOff);\n if (gid === 0) return 0;\n return (gid + delta) & 0xFFFF;\n}\n\n// ── cmap Format 4 parser ────────────────────────────────────────────────\n\nfunction parseCmapFormat4(data: DataView, offset: number): Map<number, number> {\n const map = new Map<number, number>();\n const segCount = readU16(data, offset + 6) >> 1;\n const endCodesOff = offset + 14;\n const startCodesOff = endCodesOff + segCount * 2 + 2; // +2 for reservedPad\n const deltaOff = startCodesOff + segCount * 2;\n const rangeOff = deltaOff + segCount * 2;\n\n for (let i = 0; i < segCount; i++) {\n const endCode = readU16(data, endCodesOff + i * 2);\n const startCode = readU16(data, startCodesOff + i * 2);\n const delta = readI16(data, deltaOff + i * 2);\n const rangeOffset = readU16(data, rangeOff + i * 2);\n\n if (startCode === 0xFFFF) break;\n\n for (let cp = startCode; cp <= endCode; cp++) {\n const gid = resolveFormat4GlyphId(data, cp, startCode, delta, rangeOffset, rangeOff, i);\n if (gid !== 0) {\n map.set(cp, gid);\n }\n }\n }\n return map;\n}\n\n// ── cmap Format 12 parser ───────────────────────────────────────────────\n\nfunction parseCmapFormat12(data: DataView, offset: number): Map<number, number> {\n const map = new Map<number, number>();\n const nGroups = readU32(data, offset + 12);\n let pos = offset + 16;\n\n for (let i = 0; i < nGroups; i++) {\n const startCharCode = readU32(data, pos);\n const endCharCode = readU32(data, pos + 4);\n let startGlyphID = readU32(data, pos + 8);\n pos += 12;\n\n for (let cp = startCharCode; cp <= endCharCode; cp++) {\n map.set(cp, startGlyphID++);\n }\n }\n return map;\n}\n\n// ── Score a cmap subtable for Unicode preference ────────────────────────\n\nfunction scoreCmapSubtable(platformID: number, encodingID: number, format: number): number {\n if (format === 12) {\n if ((platformID === 3 && encodingID === 10) ||\n (platformID === 0 && encodingID >= 4)) {\n return 12;\n }\n }\n if (format === 4) {\n if ((platformID === 3 && encodingID === 1) ||\n (platformID === 0 && (encodingID === 3 || encodingID <= 4))) {\n return 4;\n }\n }\n return 0;\n}\n\n// ── Best Unicode cmap subtable selector ─────────────────────────────────\n\nfunction parseCmapTable(data: DataView, tableOffset: number, tableLength: number): Map<number, number> {\n const numSubtables = readU16(data, tableOffset + 2);\n let bestOffset = -1;\n let bestFormat = -1;\n\n for (let i = 0; i < numSubtables; i++) {\n const recOff = tableOffset + 4 + i * 8;\n const platformID = readU16(data, recOff);\n const encodingID = readU16(data, recOff + 2);\n const subtableOffset = tableOffset + readU32(data, recOff + 4);\n\n if (subtableOffset < tableOffset || subtableOffset >= tableOffset + tableLength) continue;\n\n const format = readU16(data, subtableOffset);\n const score = scoreCmapSubtable(platformID, encodingID, format);\n\n if (score > bestFormat) {\n bestOffset = subtableOffset;\n bestFormat = score;\n }\n }\n\n if (bestFormat === 12 && bestOffset >= 0) return parseCmapFormat12(data, bestOffset);\n if (bestFormat === 4 && bestOffset >= 0) return parseCmapFormat4(data, bestOffset);\n return new Map();\n}\n\n// ── Simple glyph flag constants ─────────────────────────────────────────\n\nconst X_SHORT_VECTOR = 0x02;\nconst Y_SHORT_VECTOR = 0x04;\nconst REPEAT_FLAG = 0x08;\nconst X_IS_SAME_OR_POSITIVE = 0x10;\nconst Y_IS_SAME_OR_POSITIVE = 0x20;\n\n// ── Compound glyph flag constants ───────────────────────────────────────\n\nconst ARG_1_AND_2_ARE_WORDS = 0x0001;\nconst ARGS_ARE_XY_VALUES = 0x0002;\nconst WE_HAVE_A_SCALE = 0x0008;\nconst MORE_COMPONENTS = 0x0020;\nconst WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;\nconst WE_HAVE_A_TWO_BY_TWO = 0x0080;\n\n// ── Parse glyph flags (simple glyphs) ───────────────────────────────────\n\nfunction parseSimpleGlyphFlags(data: DataView, offset: number, numPoints: number): { flags: Uint8Array; bytesRead: number } {\n const flags = new Uint8Array(numPoints);\n let pos = offset;\n let i = 0;\n while (i < numPoints) {\n const flag = readU8(data, pos++);\n flags[i++] = flag;\n if ((flag & REPEAT_FLAG) !== 0 && i < numPoints) {\n const repeatCount = readU8(data, pos++);\n for (let r = 0; r < repeatCount && i < numPoints; r++) {\n flags[i++] = flag;\n }\n }\n }\n return { flags, bytesRead: pos - offset };\n}\n\n// ── Options for scaleSimpleGlyphAxis ────────────────────────────────────\n\ninterface ScaleAxisOptions {\n readonly data: Uint8Array;\n readonly view: DataView;\n readonly offset: number;\n readonly flags: Uint8Array;\n readonly numPoints: number;\n readonly shortBit: number;\n readonly sameBit: number;\n readonly scale: number;\n}\n\n// ── Scale a 1-byte coordinate and update flag ───────────────────────────\n\nfunction scaleShortCoordinate(opts: ScaleAxisOptions, pos: number, i: number): void {\n const val = readU8(opts.view, pos);\n const signed = (opts.flags[i] & opts.sameBit) === 0 ? -val : val;\n const scaled = Math.round(signed * opts.scale);\n const absScaled = Math.abs(scaled);\n opts.data[pos] = Math.min(absScaled, 255);\n if (scaled >= 0) {\n opts.flags[i] |= opts.sameBit;\n } else {\n opts.flags[i] &= ~opts.sameBit;\n }\n}\n\n// ── Scale a 2-byte signed coordinate ────────────────────────────────────\n\nfunction scaleLongCoordinate(view: DataView, pos: number, scale: number): void {\n const val = readI16(view, pos);\n const scaled = Math.round(val * scale);\n const clamped = Math.max(-32768, Math.min(32767, scaled));\n writeI16(view, pos, clamped);\n}\n\n// ── Scale coordinates in a simple glyph ─────────────────────────────────\n\nfunction scaleSimpleGlyphAxis(opts: ScaleAxisOptions): number {\n let pos = opts.offset;\n for (let i = 0; i < opts.numPoints; i++) {\n const flag = opts.flags[i];\n if ((flag & opts.shortBit) !== 0) {\n scaleShortCoordinate(opts, pos, i);\n pos += 1;\n } else if ((flag & opts.sameBit) === 0) {\n scaleLongCoordinate(opts.view, pos, opts.scale);\n pos += 2;\n }\n // else: 0-byte delta (same as previous) — no bytes to modify\n }\n return pos;\n}\n\n// ── Scale a simple glyph's raw bytes ────────────────────────────────────\n\nfunction scaleSimpleGlyph(srcData: Uint8Array, scaleX: number, scaleY: number): Uint8Array {\n if (srcData.length < 12) return srcData;\n\n const result = new Uint8Array(srcData);\n const view = new DataView(result.buffer, result.byteOffset, result.byteLength);\n\n const numberOfContours = readI16(view, 0);\n if (numberOfContours <= 0) return result;\n\n // Update bounding box\n const xMin = Math.round(readI16(view, 2) * scaleX);\n const yMin = Math.round(readI16(view, 4) * scaleY);\n const xMax = Math.round(readI16(view, 6) * scaleX);\n const yMax = Math.round(readI16(view, 8) * scaleY);\n writeI16(view, 2, Math.max(-32768, Math.min(32767, xMin)));\n writeI16(view, 4, Math.max(-32768, Math.min(32767, yMin)));\n writeI16(view, 6, Math.max(-32768, Math.min(32767, xMax)));\n writeI16(view, 8, Math.max(-32768, Math.min(32767, yMax)));\n\n // Read endPtsOfContours to find total number of points\n const lastContourEnd = readU16(view, 10 + (numberOfContours - 1) * 2);\n const numPoints = lastContourEnd + 1;\n\n // Skip endPtsOfContours + instructionLength + instructions\n const instructionLengthOff = 10 + numberOfContours * 2;\n const instructionLength = readU16(view, instructionLengthOff);\n const flagsOff = instructionLengthOff + 2 + instructionLength;\n\n // Parse flags\n const { flags, bytesRead: flagsSize } = parseSimpleGlyphFlags(view, flagsOff, numPoints);\n\n // Scale x-coordinates\n const xDataOff = flagsOff + flagsSize;\n let afterX: number;\n if (Math.abs(scaleX - 1) > 1e-6) {\n afterX = scaleSimpleGlyphAxis({\n data: result, view, offset: xDataOff, flags, numPoints,\n shortBit: X_SHORT_VECTOR, sameBit: X_IS_SAME_OR_POSITIVE, scale: scaleX,\n });\n } else {\n afterX = skipCoordinates(view, xDataOff, flags, numPoints, X_SHORT_VECTOR, X_IS_SAME_OR_POSITIVE);\n }\n\n // Scale y-coordinates\n if (Math.abs(scaleY - 1) > 1e-6) {\n scaleSimpleGlyphAxis({\n data: result, view, offset: afterX, flags, numPoints,\n shortBit: Y_SHORT_VECTOR, sameBit: Y_IS_SAME_OR_POSITIVE, scale: scaleY,\n });\n }\n\n return result;\n}\n\n// ── Skip coordinates without modifying (to find offset of next axis) ────\n\nfunction skipCoordinates(\n view: DataView, offset: number, flags: Uint8Array, numPoints: number,\n shortBit: number, sameBit: number,\n): number {\n let pos = offset;\n for (let i = 0; i < numPoints; i++) {\n const flag = flags[i];\n if ((flag & shortBit) !== 0) {\n pos += 1;\n } else if ((flag & sameBit) === 0) {\n pos += 2;\n }\n // else: 0 bytes (same as previous)\n }\n return pos;\n}\n\n// ── Scale a compound glyph's raw bytes ──────────────────────────────────\n\nfunction scaleCompoundGlyph(srcData: Uint8Array, scaleX: number, scaleY: number): Uint8Array {\n if (srcData.length < 12) return srcData;\n\n const result = new Uint8Array(srcData);\n const view = new DataView(result.buffer, result.byteOffset, result.byteLength);\n\n // Update bounding box (compound glyphs also have a bbox at bytes 2-9)\n const xMin = Math.round(readI16(view, 2) * scaleX);\n const yMin = Math.round(readI16(view, 4) * scaleY);\n const xMax = Math.round(readI16(view, 6) * scaleX);\n const yMax = Math.round(readI16(view, 8) * scaleY);\n writeI16(view, 2, Math.max(-32768, Math.min(32767, xMin)));\n writeI16(view, 4, Math.max(-32768, Math.min(32767, yMin)));\n writeI16(view, 6, Math.max(-32768, Math.min(32767, xMax)));\n writeI16(view, 8, Math.max(-32768, Math.min(32767, yMax)));\n\n let pos = 10; // past numberOfContours(-1) + bbox\n let hasMore = true;\n\n while (hasMore && pos + 4 <= result.length) {\n const flags = readU16(view, pos);\n pos += 2;\n // Skip glyphIndex\n pos += 2;\n\n hasMore = (flags & MORE_COMPONENTS) !== 0;\n\n if ((flags & ARGS_ARE_XY_VALUES) !== 0) {\n scaleCompoundArgs(view, pos, flags, scaleX, scaleY);\n }\n\n // Advance past arguments\n pos += (flags & ARG_1_AND_2_ARE_WORDS) === 0 ? 2 : 4;\n\n // Advance past transformation\n if ((flags & WE_HAVE_A_TWO_BY_TWO) !== 0) {\n pos += 8; // 4 × F2Dot14\n } else if ((flags & WE_HAVE_AN_X_AND_Y_SCALE) !== 0) {\n pos += 4; // 2 × F2Dot14\n } else if ((flags & WE_HAVE_A_SCALE) !== 0) {\n pos += 2; // 1 × F2Dot14\n }\n }\n\n return result;\n}\n\n// ── Scale compound glyph argument offsets ───────────────────────────────\n\nfunction scaleCompoundArgs(view: DataView, pos: number, flags: number, scaleX: number, scaleY: number): void {\n if ((flags & ARG_1_AND_2_ARE_WORDS) === 0) {\n // Two int8 values: xOffset, yOffset\n const xOff = (view.getInt8(pos));\n const yOff = (view.getInt8(pos + 1));\n view.setInt8(pos, Math.max(-128, Math.min(127, Math.round(xOff * scaleX))));\n view.setInt8(pos + 1, Math.max(-128, Math.min(127, Math.round(yOff * scaleY))));\n } else {\n // Two int16 values: xOffset, yOffset\n const xOff = readI16(view, pos);\n const yOff = readI16(view, pos + 2);\n writeI16(view, pos, Math.max(-32768, Math.min(32767, Math.round(xOff * scaleX))));\n writeI16(view, pos + 2, Math.max(-32768, Math.min(32767, Math.round(yOff * scaleY))));\n }\n}\n\n// ── TtfFont: Main exported class ────────────────────────────────────────\n\nexport class TtfFont {\n readonly unitsPerEm: number;\n readonly ascender: number;\n readonly descender: number;\n readonly numGlyphs: number;\n\n private readonly data: DataView;\n private readonly tables: Map<string, TableRecord>;\n private readonly advanceWidths: Map<number, number>;\n private readonly unicodeToGid: Map<number, number>;\n private readonly glyphOffsets: readonly number[];\n private readonly glyfOffset: number;\n private readonly glyfLength: number;\n\n constructor(buffer: ArrayBuffer | ArrayBufferLike) {\n this.data = new DataView(buffer as ArrayBuffer);\n this.tables = this.parseTableDirectory();\n\n // Parse required tables\n const head = this.getTableData('head');\n if (!head) throw new Error('TtfFont: missing head table');\n this.unitsPerEm = readU16(this.data, head.offset + 18);\n const indexToLocFormat = readI16(this.data, head.offset + 50);\n\n const hhea = this.getTableData('hhea');\n if (!hhea) throw new Error('TtfFont: missing hhea table');\n this.ascender = readI16(this.data, hhea.offset + 4);\n this.descender = readI16(this.data, hhea.offset + 6);\n const numberOfHMetrics = readU16(this.data, hhea.offset + 34);\n\n const maxp = this.getTableData('maxp');\n if (!maxp) throw new Error('TtfFont: missing maxp table');\n this.numGlyphs = readU16(this.data, maxp.offset + 4);\n\n // Parse hmtx → advance widths\n this.advanceWidths = this.parseHmtx(numberOfHMetrics);\n\n // Parse cmap → unicode to GID mapping\n const cmapRec = this.getTableData('cmap');\n this.unicodeToGid = cmapRec\n ? parseCmapTable(this.data, cmapRec.offset, cmapRec.length)\n : new Map();\n\n // Parse loca → glyph offsets\n const locaRec = this.getTableData('loca');\n const glyfRec = this.getTableData('glyf');\n this.glyfOffset = glyfRec?.offset ?? 0;\n this.glyfLength = glyfRec?.length ?? 0;\n this.glyphOffsets = locaRec && glyfRec\n ? this.parseLoca(locaRec, indexToLocFormat)\n : [];\n }\n\n /** Get advance width for a glyph by its GID. Returns 0 if not found. */\n getAdvanceWidth(gid: number): number {\n return this.advanceWidths.get(gid) ?? 0;\n }\n\n /** Map a Unicode codepoint to a GID. Returns 0 (.notdef) if unmapped. */\n charToGlyphIndex(codepoint: number): number {\n return this.unicodeToGid.get(codepoint) ?? 0;\n }\n\n /** Get metrics for a glyph by GID. */\n getGlyphMetrics(gid: number): TtfGlyphMetrics {\n return {\n advanceWidth: this.advanceWidths.get(gid) ?? 0,\n index: gid,\n };\n }\n\n /** Get metrics by Unicode codepoint (convenience). */\n charToGlyphMetrics(codepoint: number): TtfGlyphMetrics {\n const gid = this.charToGlyphIndex(codepoint);\n return this.getGlyphMetrics(gid);\n }\n\n /** Get raw glyf table bytes for a glyph. Returns null for empty/missing glyphs. */\n getRawGlyph(gid: number): Uint8Array | null {\n if (gid < 0 || gid >= this.glyphOffsets.length - 1) return null;\n const start = this.glyphOffsets[gid];\n const end = this.glyphOffsets[gid + 1];\n if (start >= end) return null; // empty glyph\n\n const absStart = this.glyfOffset + start;\n const len = end - start;\n if (absStart + len > this.data.byteLength) return null;\n\n return new Uint8Array(this.data.buffer, this.data.byteOffset + absStart, len);\n }\n\n /** Scale x-coordinates in raw glyf data by a horizontal factor. Returns new byte array. */\n scaleRawGlyphX(glyphData: Uint8Array, scaleX: number): Uint8Array {\n if (Math.abs(scaleX - 1) < 1e-6) return glyphData;\n return this.scaleRawGlyph(glyphData, scaleX, 1);\n }\n\n /** Scale raw glyf data uniformly or with separate X/Y factors. Returns new byte array. */\n scaleRawGlyph(glyphData: Uint8Array, scaleXOrUniform: number, scaleY?: number): Uint8Array {\n if (glyphData.length < 2) return glyphData;\n\n const sx = scaleXOrUniform;\n const sy = scaleY ?? scaleXOrUniform;\n\n const view = new DataView(glyphData.buffer, glyphData.byteOffset, glyphData.byteLength);\n const numberOfContours = readI16(view, 0);\n\n if (numberOfContours >= 0) {\n return scaleSimpleGlyph(glyphData, sx, sy);\n }\n if (numberOfContours === -1) {\n return scaleCompoundGlyph(glyphData, sx, sy);\n }\n\n // Unknown glyph type — return as-is\n return glyphData;\n }\n\n // ── Private parsing methods ─────────────────────────────────────────\n\n private parseTableDirectory(): Map<string, TableRecord> {\n const tables = new Map<string, TableRecord>();\n\n // Validate minimum header size\n if (this.data.byteLength < 12) return tables;\n\n const numTables = readU16(this.data, 4);\n let pos = 12;\n\n for (let i = 0; i < numTables; i++) {\n if (pos + 16 > this.data.byteLength) break;\n\n const tag = String.fromCodePoint(\n readU8(this.data, pos),\n readU8(this.data, pos + 1),\n readU8(this.data, pos + 2),\n readU8(this.data, pos + 3),\n );\n const offset = readU32(this.data, pos + 8);\n const length = readU32(this.data, pos + 12);\n tables.set(tag, { offset, length });\n pos += 16;\n }\n\n return tables;\n }\n\n private getTableData(tag: string): TableRecord | undefined {\n return this.tables.get(tag);\n }\n\n private parseHmtx(numberOfHMetrics: number): Map<number, number> {\n const hmtxRec = this.getTableData('hmtx');\n if (!hmtxRec) return new Map();\n\n const widths = new Map<number, number>();\n const off = hmtxRec.offset;\n let lastWidth = 0;\n\n // First numberOfHMetrics entries: advanceWidth (u16) + lsb (i16)\n for (let i = 0; i < numberOfHMetrics; i++) {\n const w = readU16(this.data, off + i * 4);\n widths.set(i, w);\n lastWidth = w;\n }\n\n // Remaining glyphs reuse the last advanceWidth\n for (let i = numberOfHMetrics; i < this.numGlyphs; i++) {\n widths.set(i, lastWidth);\n }\n\n return widths;\n }\n\n private parseLoca(locaRec: TableRecord, indexToLocFormat: number): number[] {\n const offsets: number[] = [];\n const off = locaRec.offset;\n\n if (indexToLocFormat === 0) {\n // Short format: uint16 offsets, actual offset = value * 2\n const count = Math.min(this.numGlyphs + 1, Math.floor(locaRec.length / 2));\n for (let i = 0; i < count; i++) {\n offsets.push(readU16(this.data, off + i * 2) * 2);\n }\n } else {\n // Long format: uint32 offsets\n const count = Math.min(this.numGlyphs + 1, Math.floor(locaRec.length / 4));\n for (let i = 0; i < count; i++) {\n offsets.push(readU32(this.data, off + i * 4));\n }\n }\n\n return offsets;\n }\n}\n","/**\n * Minimal TrueType font builder.\n * Creates valid TTF binaries from raw glyph data + metrics.\n * Replaces opentype.js Font/Glyph/Path constructors + toArrayBuffer().\n */\n\n// ── Public interfaces ───────────────────────────────────────────────────\n\nexport interface TtfBuilderGlyph {\n readonly unicode: number;\n readonly advanceWidth: number;\n readonly glyphData: Uint8Array;\n}\n\nexport interface TtfBuilderOptions {\n readonly familyName: string;\n readonly styleName: string;\n readonly unitsPerEm: number;\n readonly ascender: number;\n readonly descender: number;\n readonly glyphs: readonly TtfBuilderGlyph[];\n}\n\n// ── Binary write helpers (big-endian) ───────────────────────────────────\n\nfunction writeU8(buf: DataView, off: number, v: number): void {\n buf.setUint8(off, v);\n}\n\nfunction writeU16(buf: DataView, off: number, v: number): void {\n buf.setUint16(off, v, false);\n}\n\nfunction writeI16(buf: DataView, off: number, v: number): void {\n buf.setInt16(off, v, false);\n}\n\nfunction writeU32(buf: DataView, off: number, v: number): void {\n buf.setUint32(off, v, false);\n}\n\nfunction writeI32(buf: DataView, off: number, v: number): void {\n buf.setInt32(off, v, false);\n}\n\nfunction writeTag(buf: DataView, off: number, tag: string): void {\n for (let i = 0; i < 4; i++) {\n writeU8(buf, off + i, tag.codePointAt(i) ?? 0);\n }\n}\n\n// ── Checksum computation ────────────────────────────────────────────────\n\nfunction computeChecksum(data: Uint8Array): number {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n let sum = 0;\n const len = Math.ceil(data.length / 4) * 4;\n for (let i = 0; i < len; i += 4) {\n if (i + 4 <= data.length) {\n sum = (sum + view.getUint32(i, false)) >>> 0;\n } else {\n // Pad with zeros for the last partial word\n let word = 0;\n for (let j = 0; j < 4; j++) {\n word = (word << 8) | (i + j < data.length ? data[i + j] : 0);\n }\n sum = (sum + word) >>> 0;\n }\n }\n return sum;\n}\n\n// ── Pad to 4-byte boundary ──────────────────────────────────────────────\n\nfunction pad4(data: Uint8Array): Uint8Array {\n const rem = data.length % 4;\n if (rem === 0) return data;\n const padded = new Uint8Array(data.length + (4 - rem));\n padded.set(data);\n return padded;\n}\n\n// ── Table builders ──────────────────────────────────────────────────────\n\nfunction buildHeadTable(unitsPerEm: number, locaFormat: number): Uint8Array {\n const buf = new Uint8Array(54);\n const v = new DataView(buf.buffer);\n\n writeU32(v, 0, 0x00010000); // version 1.0\n writeU32(v, 4, 0x00005000); // fontRevision 0.5\n writeU32(v, 8, 0x00000000); // checksumAdjust (filled later)\n writeU32(v, 12, 0x5F0F3CF5); // magicNumber\n writeU16(v, 16, 0x000B); // flags: baseline at y=0 + lsb at x=0 + force ppem to int\n writeU16(v, 18, unitsPerEm);\n // created/modified timestamps: 0 (epoch)\n writeI16(v, 36, -1000); // xMin (placeholder)\n writeI16(v, 38, -500); // yMin (placeholder)\n writeI16(v, 40, 3000); // xMax (placeholder)\n writeI16(v, 42, 2000); // yMax (placeholder)\n writeU16(v, 44, 0); // macStyle\n writeU16(v, 46, 8); // lowestRecPPEM\n writeI16(v, 48, 2); // fontDirectionHint: mixed\n writeI16(v, 50, locaFormat); // indexToLocFormat\n writeI16(v, 52, 0); // glyphDataFormat\n\n return buf;\n}\n\nfunction buildHheaTable(ascender: number, descender: number, numGlyphs: number): Uint8Array {\n const buf = new Uint8Array(36);\n const v = new DataView(buf.buffer);\n\n writeU32(v, 0, 0x00010000); // version 1.0\n writeI16(v, 4, ascender);\n writeI16(v, 6, descender);\n writeI16(v, 8, 0); // lineGap\n writeU16(v, 10, 0x7FFF); // advanceWidthMax (placeholder)\n writeI16(v, 12, 0); // minLeftSideBearing\n writeI16(v, 14, 0); // minRightSideBearing\n writeI16(v, 16, 0x7FFF); // xMaxExtent (placeholder)\n writeI16(v, 18, 1); // caretSlopeRise\n writeI16(v, 20, 0); // caretSlopeRun\n // 5 reserved int16s = 0 (bytes 22-31)\n writeI16(v, 32, 0); // metricDataFormat\n writeU16(v, 34, numGlyphs); // numberOfHMetrics\n\n return buf;\n}\n\nfunction buildHmtxTable(glyphs: readonly TtfBuilderGlyph[]): Uint8Array {\n const buf = new Uint8Array(glyphs.length * 4);\n const v = new DataView(buf.buffer);\n\n for (let i = 0; i < glyphs.length; i++) {\n writeU16(v, i * 4, Math.max(0, Math.round(glyphs[i].advanceWidth)));\n writeI16(v, i * 4 + 2, 0); // leftSideBearing\n }\n\n return buf;\n}\n\nfunction buildMaxpTable(numGlyphs: number): Uint8Array {\n const buf = new Uint8Array(32);\n const v = new DataView(buf.buffer);\n\n writeU32(v, 0, 0x00010000); // version 1.0\n writeU16(v, 4, numGlyphs);\n writeU16(v, 6, 0); // maxPoints (placeholder)\n writeU16(v, 8, 0); // maxContours\n writeU16(v, 10, 0); // maxCompositePoints\n writeU16(v, 12, 0); // maxCompositeContours\n writeU16(v, 14, 1); // maxZones\n writeU16(v, 16, 0); // maxTwilightPoints\n writeU16(v, 18, 0); // maxStorage\n writeU16(v, 20, 0); // maxFunctionDefs\n writeU16(v, 22, 0); // maxInstructionDefs\n writeU16(v, 24, 0); // maxStackElements\n writeU16(v, 26, 0); // maxSizeOfInstructions\n writeU16(v, 28, 0); // maxComponentElements\n writeU16(v, 30, 0); // maxComponentDepth\n\n return buf;\n}\n\n// ── cmap Format 4 builder ───────────────────────────────────────────────\n\ninterface CmapSegment {\n readonly startCode: number;\n readonly endCode: number;\n readonly delta: number;\n}\n\nfunction buildCmapSegments(glyphs: readonly TtfBuilderGlyph[]): readonly CmapSegment[] {\n // Build sorted unicode → GID pairs (GID = index in glyphs array)\n const pairs: Array<{ unicode: number; gid: number }> = [];\n for (let i = 0; i < glyphs.length; i++) {\n if (glyphs[i].unicode > 0 && glyphs[i].unicode <= 0xFFFF) {\n pairs.push({ unicode: glyphs[i].unicode, gid: i });\n }\n }\n pairs.sort((a, b) => a.unicode - b.unicode);\n\n if (pairs.length === 0) {\n return [{ startCode: 0xFFFF, endCode: 0xFFFF, delta: 1 }];\n }\n\n // Group into contiguous segments with constant delta\n const segments: CmapSegment[] = [];\n let segStart = pairs[0].unicode;\n let segDelta = pairs[0].gid - pairs[0].unicode;\n let prevUnicode = pairs[0].unicode;\n\n for (let i = 1; i < pairs.length; i++) {\n const { unicode, gid } = pairs[i];\n const delta = gid - unicode;\n if (unicode === prevUnicode + 1 && delta === segDelta) {\n prevUnicode = unicode;\n } else {\n segments.push({ startCode: segStart, endCode: prevUnicode, delta: segDelta });\n segStart = unicode;\n segDelta = delta;\n prevUnicode = unicode;\n }\n }\n segments.push(\n { startCode: segStart, endCode: prevUnicode, delta: segDelta },\n { startCode: 0xFFFF, endCode: 0xFFFF, delta: 1 },\n );\n return segments;\n}\n\nfunction buildCmapTable(glyphs: readonly TtfBuilderGlyph[]): Uint8Array {\n const segments = buildCmapSegments(glyphs);\n const segCount = segments.length;\n\n // Format 4 subtable size\n const subtableSize = 16 + segCount * 8; // 14 header + 2 reservedPad + 4 arrays of segCount * 2\n const tableSize = 4 + 8 + subtableSize; // cmap header (4) + encoding record (8) + subtable\n\n const buf = new Uint8Array(tableSize);\n const v = new DataView(buf.buffer);\n\n // cmap header\n writeU16(v, 0, 0); // version\n writeU16(v, 2, 1); // numTables\n\n // Encoding record: platform 3 (Windows), encoding 1 (Unicode BMP)\n writeU16(v, 4, 3); // platformID\n writeU16(v, 6, 1); // encodingID\n writeU32(v, 8, 12); // offset to subtable\n\n // Format 4 subtable\n const s = 12; // subtable start\n writeU16(v, s, 4); // format\n writeU16(v, s + 2, subtableSize); // length\n writeU16(v, s + 4, 0); // language\n\n const segCountX2 = segCount * 2;\n const searchRange = 2 * Math.pow(2, Math.floor(Math.log2(segCount)));\n const entrySelector = Math.floor(Math.log2(segCount));\n const rangeShift = segCountX2 - searchRange;\n\n writeU16(v, s + 6, segCountX2);\n writeU16(v, s + 8, searchRange);\n writeU16(v, s + 10, entrySelector);\n writeU16(v, s + 12, rangeShift);\n\n const endCodeOff = s + 14;\n const reservedPadOff = endCodeOff + segCount * 2;\n const startCodeOff = reservedPadOff + 2;\n const deltaOff = startCodeOff + segCount * 2;\n const rangeOff = deltaOff + segCount * 2;\n\n writeU16(v, reservedPadOff, 0); // reservedPad\n\n for (let i = 0; i < segCount; i++) {\n const seg = segments[i];\n writeU16(v, endCodeOff + i * 2, seg.endCode);\n writeU16(v, startCodeOff + i * 2, seg.startCode);\n writeI16(v, deltaOff + i * 2, seg.delta & 0xFFFF);\n writeU16(v, rangeOff + i * 2, 0); // idRangeOffset = 0 (all delta-based)\n }\n\n return buf;\n}\n\n// ── loca + glyf builder ─────────────────────────────────────────────────\n\ninterface LocaGlyfResult {\n readonly loca: Uint8Array;\n readonly glyf: Uint8Array;\n readonly locaFormat: number; // 0=short, 1=long\n}\n\nfunction buildLocaGlyf(glyphs: readonly TtfBuilderGlyph[]): LocaGlyfResult {\n // Calculate total glyf size (each glyph padded to 2-byte boundary for short loca)\n let totalSize = 0;\n const paddedSizes: number[] = [];\n for (const g of glyphs) {\n const padded = g.glyphData.length % 2 === 0 ? g.glyphData.length : g.glyphData.length + 1;\n paddedSizes.push(padded);\n totalSize += padded;\n }\n\n // Build glyf table\n const glyf = new Uint8Array(totalSize);\n const offsets: number[] = [];\n let pos = 0;\n for (let i = 0; i < glyphs.length; i++) {\n offsets.push(pos);\n if (glyphs[i].glyphData.length > 0) {\n glyf.set(glyphs[i].glyphData, pos);\n }\n pos += paddedSizes[i];\n }\n offsets.push(pos); // final offset (end of last glyph)\n\n // Decide loca format\n const useShort = totalSize < 131070; // max for short format (0xFFFF * 2)\n const locaFormat = useShort ? 0 : 1;\n\n // Build loca table\n const locaSize = useShort ? offsets.length * 2 : offsets.length * 4;\n const loca = new Uint8Array(locaSize);\n const locaView = new DataView(loca.buffer);\n\n for (let i = 0; i < offsets.length; i++) {\n if (useShort) {\n writeU16(locaView, i * 2, offsets[i] >> 1);\n } else {\n writeU32(locaView, i * 4, offsets[i]);\n }\n }\n\n return { loca, glyf, locaFormat };\n}\n\n// ── name table builder ──────────────────────────────────────────────────\n\nfunction buildNameTable(familyName: string, styleName: string): Uint8Array {\n // We write 6 name records (IDs 0-5) all with platform 3 encoding 1 (Windows Unicode BMP)\n const names = [\n familyName, // 0: copyright (reuse family)\n familyName, // 1: fontFamily\n styleName, // 2: fontSubfamily\n `${familyName}-${styleName}`, // 3: uniqueID\n `${familyName} ${styleName}`, // 4: fullName\n 'Version 1.0', // 5: version\n ];\n\n // Encode strings as UTF-16BE\n const encodedStrings: Uint8Array[] = [];\n let totalStringBytes = 0;\n for (const name of names) {\n const encoded = new Uint8Array(name.length * 2);\n const ev = new DataView(encoded.buffer);\n for (let i = 0; i < name.length; i++) {\n writeU16(ev, i * 2, name.codePointAt(i) ?? 0);\n }\n encodedStrings.push(encoded);\n totalStringBytes += encoded.length;\n }\n\n const numRecords = names.length;\n const headerSize = 6;\n const recordSize = 12 * numRecords;\n const storageOffset = headerSize + recordSize;\n const tableSize = storageOffset + totalStringBytes;\n\n const buf = new Uint8Array(tableSize);\n const v = new DataView(buf.buffer);\n\n // Header\n writeU16(v, 0, 0); // format\n writeU16(v, 2, numRecords); // count\n writeU16(v, 4, storageOffset); // stringOffset\n\n // Records\n let stringPos = 0;\n for (let i = 0; i < numRecords; i++) {\n const recOff = headerSize + i * 12;\n writeU16(v, recOff, 3); // platformID: Windows\n writeU16(v, recOff + 2, 1); // encodingID: Unicode BMP\n writeU16(v, recOff + 4, 0x0409); // languageID: English US\n writeU16(v, recOff + 6, i); // nameID\n writeU16(v, recOff + 8, encodedStrings[i].length); // length\n writeU16(v, recOff + 10, stringPos); // offset\n stringPos += encodedStrings[i].length;\n }\n\n // String data\n let strOff = storageOffset;\n for (const encoded of encodedStrings) {\n buf.set(encoded, strOff);\n strOff += encoded.length;\n }\n\n return buf;\n}\n\n// ── OS/2 table builder ──────────────────────────────────────────────────\n\nfunction buildOs2Table(ascender: number, descender: number, unitsPerEm: number): Uint8Array {\n const buf = new Uint8Array(78);\n const v = new DataView(buf.buffer);\n\n writeU16(v, 0, 0x0004); // version 4\n writeI16(v, 2, Math.round(unitsPerEm * 0.5)); // xAvgCharWidth\n writeU16(v, 4, 400); // usWeightClass: Normal\n writeU16(v, 6, 5); // usWidthClass: Medium\n writeU16(v, 8, 0); // fsType: installable embedding\n writeI16(v, 10, Math.round(unitsPerEm * 0.6)); // ySubscriptXSize\n writeI16(v, 12, Math.round(unitsPerEm * 0.7)); // ySubscriptYSize\n writeI16(v, 14, 0); // ySubscriptXOffset\n writeI16(v, 16, Math.round(unitsPerEm * 0.14)); // ySubscriptYOffset\n writeI16(v, 18, Math.round(unitsPerEm * 0.6)); // ySuperscriptXSize\n writeI16(v, 20, Math.round(unitsPerEm * 0.7)); // ySuperscriptYSize\n writeI16(v, 22, 0); // ySuperscriptXOffset\n writeI16(v, 24, Math.round(unitsPerEm * 0.48)); // ySuperscriptYOffset\n writeI16(v, 26, Math.round(unitsPerEm * 0.05)); // yStrikeoutSize\n writeI16(v, 28, Math.round(unitsPerEm * 0.3)); // yStrikeoutPosition\n writeI16(v, 30, 0); // sFamilyClass\n // panose: 10 bytes at offset 32 (all zeros = any)\n // ulUnicodeRange: 16 bytes at offset 42 (all zeros)\n // achVendID: 4 bytes at offset 58 (all zeros)\n writeU16(v, 62, 0x0040); // fsSelection: REGULAR\n writeU16(v, 64, 0x0020); // usFirstCharIndex: space\n writeU16(v, 66, 0xFFFF); // usLastCharIndex\n writeI16(v, 68, ascender); // sTypoAscender\n writeI16(v, 70, descender); // sTypoDescender\n writeI16(v, 72, 0); // sTypoLineGap\n writeU16(v, 74, Math.max(0, ascender)); // usWinAscent\n writeU16(v, 76, Math.max(0, -descender)); // usWinDescent\n\n return buf;\n}\n\n// ── post table builder ──────────────────────────────────────────────────\n\nfunction buildPostTable(): Uint8Array {\n const buf = new Uint8Array(32);\n const v = new DataView(buf.buffer);\n\n writeU32(v, 0, 0x00030000); // version 3.0 (no glyph names)\n writeI32(v, 4, 0); // italicAngle\n writeI16(v, 8, -100); // underlinePosition\n writeI16(v, 10, 50); // underlineThickness\n writeU32(v, 12, 0); // isFixedPitch\n // minMemType42/maxMemType42/minMemType1/maxMemType1: 0\n\n return buf;\n}\n\n// ── Font assembly ───────────────────────────────────────────────────────\n\ninterface TableEntry {\n readonly tag: string;\n readonly data: Uint8Array;\n}\n\nfunction assembleFont(tables: readonly TableEntry[]): Uint8Array {\n const numTables = tables.length;\n const searchRange = Math.pow(2, Math.floor(Math.log2(numTables))) * 16;\n const entrySelector = Math.floor(Math.log2(numTables));\n const rangeShift = numTables * 16 - searchRange;\n\n const headerSize = 12;\n const directorySize = numTables * 16;\n let dataOffset = headerSize + directorySize;\n\n // Pad data offset to 4-byte boundary\n dataOffset = (dataOffset + 3) & ~3;\n\n // Calculate total size\n let totalSize = dataOffset;\n const paddedTables: Uint8Array[] = [];\n for (const table of tables) {\n const padded = pad4(table.data);\n paddedTables.push(padded);\n totalSize += padded.length;\n }\n\n const result = new Uint8Array(totalSize);\n const view = new DataView(result.buffer);\n\n // Offset table\n writeU32(view, 0, 0x00010000); // sfVersion: TrueType\n writeU16(view, 4, numTables);\n writeU16(view, 6, searchRange);\n writeU16(view, 8, entrySelector);\n writeU16(view, 10, rangeShift);\n\n // Sort tables by tag for the directory\n const sorted = tables.map((t, i) => ({ tag: t.tag, index: i }));\n sorted.sort((a, b) => a.tag.localeCompare(b.tag));\n\n // Build table directory and copy data\n let currentOffset = dataOffset;\n const offsets: number[] = new Array(tables.length);\n for (const entry of sorted) {\n offsets[entry.index] = currentOffset;\n currentOffset += paddedTables[entry.index].length;\n }\n\n // Write directory entries in sorted order\n for (let i = 0; i < sorted.length; i++) {\n const dirOff = headerSize + i * 16;\n const entry = sorted[i];\n const tableData = tables[entry.index].data;\n const checksum = computeChecksum(pad4(tableData));\n\n writeTag(view, dirOff, entry.tag);\n writeU32(view, dirOff + 4, checksum);\n writeU32(view, dirOff + 8, offsets[entry.index]);\n writeU32(view, dirOff + 12, tableData.length);\n }\n\n // Copy table data\n for (const entry of sorted) {\n result.set(paddedTables[entry.index], offsets[entry.index]);\n }\n\n // Fix head.checksumAdjust\n fixHeadChecksum(result, view, tables, offsets);\n\n return result;\n}\n\nfunction fixHeadChecksum(\n result: Uint8Array, view: DataView,\n tables: readonly TableEntry[], offsets: readonly number[],\n): void {\n // Find head table offset\n let headOffset = -1;\n for (let i = 0; i < tables.length; i++) {\n if (tables[i].tag === 'head') {\n headOffset = offsets[i];\n break;\n }\n }\n if (headOffset < 0) return;\n\n // Clear checksumAdjust field first\n writeU32(view, headOffset + 8, 0);\n\n // Compute whole-file checksum\n const wholeChecksum = computeChecksum(result);\n const checksumAdjust = (0xB1B0AFBA - wholeChecksum) >>> 0;\n writeU32(view, headOffset + 8, checksumAdjust);\n}\n\n// ── Main export ─────────────────────────────────────────────────────────\n\nexport function buildTtf(options: TtfBuilderOptions): Uint8Array {\n const { familyName, styleName, unitsPerEm, ascender, descender, glyphs } = options;\n\n const { loca, glyf, locaFormat } = buildLocaGlyf(glyphs);\n\n const tables: TableEntry[] = [\n { tag: 'head', data: buildHeadTable(unitsPerEm, locaFormat) },\n { tag: 'hhea', data: buildHheaTable(ascender, descender, glyphs.length) },\n { tag: 'hmtx', data: buildHmtxTable(glyphs) },\n { tag: 'maxp', data: buildMaxpTable(glyphs.length) },\n { tag: 'cmap', data: buildCmapTable(glyphs) },\n { tag: 'loca', data: loca },\n { tag: 'glyf', data: glyf },\n { tag: 'name', data: buildNameTable(familyName, styleName) },\n { tag: 'OS/2', data: buildOs2Table(ascender, descender, unitsPerEm) },\n { tag: 'post', data: buildPostTable() },\n ];\n\n return assembleFont(tables);\n}\n","import type { PdfObject, FontInfo } from './pdf-parser';\nimport { PdfReader, buildFontInfo, getPageMediaBox, buildImageDataUrl, resolveImageFilterName } from './pdf-parser';\nimport { TtfFont } from './ttf-parser';\nimport { buildTtf } from './ttf-builder';\nimport type { TtfBuilderGlyph } from './ttf-builder';\nimport { DEFAULT_PARSER_LIMITS, DrawPath, type ParserLimits } from './limits';\n\n// Fallback font for glyphs missing from embedded PDF fonts.\n// Loaded lazily from bundled NotoSans-Regular.ttf in Node.js environments.\nlet fallbackFont: TtfFont | null | undefined;\nlet fallbackFontData: ArrayBuffer | null = null;\n\nexport function setFallbackFontData(data: ArrayBuffer): void {\n fallbackFontData = data;\n fallbackFont = undefined; // reset cache\n}\n\nfunction getFallbackFont(): TtfFont | null {\n if (fallbackFont !== undefined) return fallbackFont;\n fallbackFont = null;\n\n // If data was provided explicitly (e.g., from browser fetch), use it\n if (fallbackFontData) {\n try {\n fallbackFont = new TtfFont(fallbackFontData);\n return fallbackFont;\n } catch { /* skip */ }\n }\n\n // Try Node.js file system\n try {\n \n const nodeRequire = resolveNodeRequire();\n if (!nodeRequire) return null;\n\n const fs = nodeRequire('fs') as { readFileSync: (p: string) => Buffer };\n const path = nodeRequire('path') as { resolve: (...p: string[]) => string; dirname: (p: string) => string };\n\n const candidates = [\n path.resolve(path.dirname(__filename), 'fonts', 'NotoSans-Regular.ttf'),\n path.resolve(process.cwd(), 'packages', 'components', 'lib', 'parsers', 'fonts', 'NotoSans-Regular.ttf'),\n ];\n for (const p of candidates) {\n try {\n const data = fs.readFileSync(p);\n const buf = data instanceof Uint8Array ? data : new Uint8Array(data);\n fallbackFont = new TtfFont(buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength));\n return fallbackFont;\n } catch { /* try next */ }\n }\n } catch { /* no Node.js fs available */ }\n return null;\n}\n\ndeclare const __non_webpack_require__: ((m: string) => unknown) | undefined;\ndeclare const __filename: string;\ndeclare const module: { require?: (m: string) => unknown };\ndeclare const process: { cwd: () => string };\ndeclare type Buffer = ArrayBufferLike;\n\nfunction resolveNodeRequire(): ((m: string) => unknown) | undefined {\n \n if (__non_webpack_require__ !== undefined) return __non_webpack_require__;\n if (typeof module !== 'undefined' && typeof module.require === 'function') return module.require.bind(module);\n return undefined;\n}\n\n// ── Options & Output Interfaces ───────────────────────────────────────\n\nexport interface PixelPerfectOptions {\n readonly zoom?: number;\n}\n\nconst DEFAULT_ZOOM = 1.3;\n\nexport interface PixelPerfectPage {\n readonly html: string;\n readonly text: string;\n readonly pageIndex: number;\n readonly pageWidth: number;\n readonly pageHeight: number;\n}\n\nexport interface PixelPerfectPagedResult {\n readonly pages: ReadonlyArray<PixelPerfectPage>;\n readonly totalPages: number;\n readonly globalCss: string;\n}\n\n// ── Internal Types ────────────────────────────────────────────────────\n\ninterface PathRect {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n readonly stroked: boolean;\n readonly filled: boolean;\n readonly strokeColor: string;\n readonly fillColor: string;\n readonly lineWidth: number;\n readonly borderRadius: number;\n}\n\ninterface ImageItem {\n readonly dataUrl: string;\n readonly width: number;\n readonly height: number;\n readonly renderWidth: number;\n readonly renderHeight: number;\n readonly x: number;\n readonly y: number;\n}\n\ninterface PdfAnnotation {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n readonly uri: string;\n}\n\n// ── CSS Class Deduplication Engine ────────────────────────────────────\n\nexport class NumericStateManager {\n private readonly entries: { value: number; id: number }[] = [];\n private readonly eps: number;\n\n constructor(eps: number) {\n this.eps = eps;\n }\n\n install(value: number): number {\n for (const entry of this.entries) {\n if (Math.abs(entry.value - value) <= this.eps) return entry.id;\n }\n const id = this.entries.length;\n this.entries.push({ value, id });\n return id;\n }\n\n // C++ StateManager::install(new_value, &actual_value) — returns ID and\n // writes back the snapped value. Needed for letter_space/word_space in\n // optimize_normal where the INSTALLED value feeds single_space_offset().\n installAndSnap(value: number): { id: number; snapped: number } {\n for (const entry of this.entries) {\n if (Math.abs(entry.value - value) <= this.eps) {\n return { id: entry.id, snapped: entry.value };\n }\n }\n const id = this.entries.length;\n this.entries.push({ value, id });\n return { id, snapped: value };\n }\n\n dumpCss(prefix: string, formatter: (value: number) => string): string {\n const parts: string[] = [];\n for (const { value, id } of this.entries) {\n parts.push(`.${prefix}${id.toString(16)}{${formatter(value)}}`);\n }\n return parts.join('\\n');\n }\n}\n\nexport class ColorStateManager {\n private readonly colorMap = new Map<string, number>();\n\n install(color: string): number {\n const existing = this.colorMap.get(color);\n if (existing !== undefined) return existing;\n const id = this.colorMap.size;\n this.colorMap.set(color, id);\n return id;\n }\n\n dumpFillCss(prefix: string): string {\n const parts: string[] = [];\n for (const [color, id] of this.colorMap) {\n parts.push(`.${prefix}${id.toString(16)}{color:${color};}`);\n }\n return parts.join('\\n');\n }\n\n dumpStrokeCss(prefix: string): string {\n const parts: string[] = [];\n for (const [color, id] of this.colorMap) {\n parts.push(`.${prefix}${id.toString(16)}{text-shadow:` +\n `-0.015em 0 ${color},0 0.015em ${color},` +\n `0.015em 0 ${color},0 -0.015em ${color};}`);\n }\n return parts.join('\\n');\n }\n}\n\nexport class TransformMatrixManager {\n private readonly entries: { m: readonly [number, number, number, number]; id: number }[] = [];\n private readonly eps = 0.001;\n\n install(m: readonly [number, number, number, number]): number {\n for (const entry of this.entries) {\n if (Math.abs(entry.m[0] - m[0]) <= this.eps &&\n Math.abs(entry.m[1] - m[1]) <= this.eps &&\n Math.abs(entry.m[2] - m[2]) <= this.eps &&\n Math.abs(entry.m[3] - m[3]) <= this.eps) {\n return entry.id;\n }\n }\n const id = this.entries.length;\n this.entries.push({ m, id });\n return id;\n }\n\n dumpCss(prefix: string): string {\n const parts: string[] = [];\n for (const { m, id } of this.entries) {\n const isIdentity = Math.abs(m[0] - 1) <= this.eps &&\n Math.abs(m[1]) <= this.eps &&\n Math.abs(m[2]) <= this.eps &&\n Math.abs(m[3] - 1) <= this.eps;\n if (isIdentity) {\n parts.push(`.${prefix}${id.toString(16)}{transform:none;}`);\n } else {\n const r = (v: number): number => Math.round(v * 1000000) / 1000000;\n const val = `matrix(${r(m[0])},${r(-m[1])},${r(-m[2])},${r(m[3])},0,0)`;\n parts.push(`.${prefix}${id.toString(16)}{transform:${val};}`);\n }\n }\n return parts.join('\\n');\n }\n}\n\nexport class AllStateManager {\n readonly transformMatrix = new TransformMatrixManager();\n readonly fillColor = new ColorStateManager();\n readonly strokeColor = new ColorStateManager();\n readonly fontSize = new NumericStateManager(0.001);\n readonly letterSpace = new NumericStateManager(0.001);\n readonly wordSpace = new NumericStateManager(0.001);\n readonly whitespace = new NumericStateManager(1);\n readonly bottom = new NumericStateManager(0.001);\n readonly height = new NumericStateManager(0.001);\n readonly left = new NumericStateManager(1);\n readonly verticalAlign = new NumericStateManager(0.001);\n\n dumpAllCss(): string {\n const sections: string[] = [];\n const addIfNonEmpty = (css: string): void => { if (css) sections.push(css); };\n\n addIfNonEmpty(this.transformMatrix.dumpCss('m'));\n addIfNonEmpty(this.fillColor.dumpFillCss('fc'));\n addIfNonEmpty(this.strokeColor.dumpStrokeCss('sc'));\n addIfNonEmpty(this.fontSize.dumpCss('fs', v => `font-size:${round(v)}px;`));\n addIfNonEmpty(this.letterSpace.dumpCss('ls', v => `letter-spacing:${round(v)}px;`));\n addIfNonEmpty(this.wordSpace.dumpCss('ws', v => `word-spacing:${round(v)}px;`));\n addIfNonEmpty(this.whitespace.dumpCss('_', v =>\n v >= 0 ? `width:${round(v)}px;` : `margin-left:${round(v)}px;`));\n addIfNonEmpty(this.bottom.dumpCss('y', v => `bottom:${round(v)}px;`));\n addIfNonEmpty(this.height.dumpCss('h', v => `height:${round(v)}px;`));\n addIfNonEmpty(this.left.dumpCss('x', v => `left:${round(v)}px;`));\n addIfNonEmpty(this.verticalAlign.dumpCss('v', v => `vertical-align:${round(v)}px;`));\n\n return sections.join('\\n');\n }\n}\n\n// ── Utility Functions ─────────────────────────────────────────────────\n\nfunction round(v: number): string {\n const r = Math.round(v * 10000) / 10000;\n return r.toString();\n}\n\nfunction escapeHtml(str: string): string {\n return str.replaceAll('&', '&')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('\"', '"');\n}\n\n/**\n * A font name taken from the PDF as a quoted CSS string. The CSS is emitted inside\n * a `<style>` element, so quotes and backslashes are escaped, control characters\n * dropped and `<` hex-escaped: nothing in the name can end the string, the rule or\n * the style element.\n */\nfunction cssQuotedFontName(name: string): string {\n let quoted = '';\n for (const ch of name) {\n const code = ch.codePointAt(0) ?? 0;\n if (code < 0x20 || code === 0x7f) continue;\n if (ch === '\\\\' || ch === \"'\") quoted += `\\\\${ch}`;\n else if (ch === '<') quoted += String.raw`\\3c `;\n else quoted += ch;\n }\n return `'${quoted}'`;\n}\n\nconst SAFE_LINK_PROTOCOLS: ReadonlySet<string> = new Set(['http:', 'https:', 'mailto:']);\n\n/**\n * The link annotation's URI as the browser will parse it when it is an absolute\n * http, https or mailto URL; `undefined` for any other scheme or a relative URI.\n */\nfunction safeLinkUri(uri: string): string | undefined {\n try {\n const url = new URL(uri);\n return SAFE_LINK_PROTOCOLS.has(url.protocol) ? url.href : undefined;\n } catch {\n // Not an absolute URL; a relative URI has no page to resolve against here.\n return undefined;\n }\n}\n\n// ── Font Extraction & Registry ────────────────────────────────────────\n\ntype FontFormat = 'truetype' | 'cff' | 'opentype' | 'type1';\n\ninterface ExtractedFont {\n readonly data: Uint8Array;\n readonly format: FontFormat;\n}\n\nfunction resolveFontDescriptor(reader: PdfReader, fontObjDict: Record<string, PdfObject>): PdfObject | undefined {\n const direct = fontObjDict['FontDescriptor'];\n if (direct) return direct;\n const descendantsRef = fontObjDict['DescendantFonts'];\n if (!descendantsRef) return undefined;\n const descendants = reader.getArray(descendantsRef);\n if (descendants.length === 0) return undefined;\n const cidFontDict = reader.getDict(descendants[0]);\n return cidFontDict['FontDescriptor'];\n}\n\nfunction tryReadStream(reader: PdfReader, ref: PdfObject | undefined): Uint8Array | null {\n if (!ref) return null;\n try {\n const data = reader.getStreamData(ref);\n return data.length > 0 ? data : null;\n } catch { return null; }\n}\n\nfunction extractFontProgram(reader: PdfReader, fontObjDict: Record<string, PdfObject>): ExtractedFont | null {\n const descriptorRef = resolveFontDescriptor(reader, fontObjDict);\n if (!descriptorRef) return null;\n\n const descriptor = reader.getDict(descriptorRef);\n\n const ff2Data = tryReadStream(reader, descriptor['FontFile2']);\n if (ff2Data) return { data: ff2Data, format: 'truetype' };\n\n const ff3Data = tryReadStream(reader, descriptor['FontFile3']);\n if (ff3Data) {\n const ffDict = reader.getDict(descriptor['FontFile3']);\n const subtype = reader.getString(ffDict['Subtype']);\n return { data: ff3Data, format: subtype === 'OpenType' ? 'opentype' : 'cff' };\n }\n\n const ff1Data = tryReadStream(reader, descriptor['FontFile']);\n if (ff1Data) return { data: ff1Data, format: 'type1' };\n\n return null;\n}\n\nfunction uint8ToBase64(data: Uint8Array): string {\n const chunkSize = 8192;\n let binary = '';\n for (let i = 0; i < data.length; i += chunkSize) {\n const slice = data.subarray(i, Math.min(i + chunkSize, data.length));\n for (const byte of slice) {\n binary += String.fromCodePoint(byte);\n }\n }\n return btoa(binary);\n}\n\nfunction fontFormatToMime(format: FontFormat): { mime: string; cssFormat: string } | null {\n if (format === 'truetype') return { mime: 'font/ttf', cssFormat: 'truetype' };\n if (format === 'opentype') return { mime: 'font/otf', cssFormat: 'opentype' };\n if (format === 'cff') return { mime: 'font/otf', cssFormat: 'opentype' };\n return null;\n}\n\n// Unicode mirrored bracket pairs\nconst MIRROR_PAIRS: ReadonlyMap<number, number> = new Map([\n [0x0028, 0x0029], [0x0029, 0x0028], // ( ↔ )\n [0x005B, 0x005D], [0x005D, 0x005B], // [ ↔ ]\n [0x007B, 0x007D], [0x007D, 0x007B], // { ↔ }\n [0x003C, 0x003E], [0x003E, 0x003C], // < ↔ >\n [0x00AB, 0x00BB], [0x00BB, 0x00AB], // « ↔ »\n]);\n\ninterface FontRegistryEntry {\n readonly id: number;\n readonly fontData: ExtractedFont | null;\n readonly familyName: string;\n readonly baseFontName: string;\n readonly ascent: number;\n readonly descent: number;\n readonly glyphAdvances: Map<number, number> | null;\n readonly unitsPerEm: number;\n readonly reEncodedData: Uint8Array | null;\n readonly unicodeFallbackWidths: Map<number, number> | null;\n readonly glyphFixupMap: Map<number, number> | null;\n}\n\nfunction fontNeedsReencoding(srcFont: TtfFont, fontInfo: FontInfo): boolean {\n if (!fontInfo.isTwoByte || fontInfo.toUnicode.size === 0) return false;\n\n let totalMapped = 0;\n let coveredMapped = 0;\n let puaMapped = 0;\n\n for (const unicodeStr of fontInfo.toUnicode.values()) {\n let cp = unicodeStr.codePointAt(0) ?? 0;\n if (cp >= 0xF000 && cp <= 0xF0FF) {\n puaMapped++;\n cp = SYMBOL_PUA_MAP[cp] ?? (cp & 0x00FF);\n }\n if (cp <= 0 || cp > 0xFFFF) continue;\n totalMapped++;\n const metrics = srcFont.charToGlyphMetrics(cp);\n if (metrics.advanceWidth > 0 && metrics.index > 0) {\n coveredMapped++;\n }\n }\n\n if (puaMapped > 0) return true;\n if (totalMapped === 0) return false;\n return (coveredMapped / totalMapped) < 0.95;\n}\n\nfunction fixCidToUnicodeWidths(\n font: TtfFont, fontInfo: FontInfo, glyphAdvances: Map<number, number>,\n): void {\n for (const [code, unicodeStr] of fontInfo.toUnicode) {\n const existingAdv = glyphAdvances.get(code);\n if (existingAdv !== undefined && existingAdv > 0) continue;\n const cp = unicodeStr.codePointAt(0) ?? 0;\n if (cp <= 0 || cp > 0xFFFF) continue;\n const metrics = font.charToGlyphMetrics(cp);\n if (metrics.advanceWidth > 0) {\n glyphAdvances.set(code, metrics.advanceWidth);\n }\n }\n}\n\nfunction fixAsciiFallbackWidths(\n font: TtfFont, fb: TtfFont | null, unitsPerEm: number, glyphAdvances: Map<number, number>,\n): void {\n for (let lo = 0x20; lo <= 0x7E; lo++) {\n const existingLoAdv = glyphAdvances.get(lo);\n if (existingLoAdv !== undefined && existingLoAdv > 0) continue;\n const metrics = font.charToGlyphMetrics(lo);\n if (metrics.advanceWidth > 0 && metrics.index > 0) {\n glyphAdvances.set(lo, metrics.advanceWidth);\n continue;\n }\n if (!fb) continue;\n const fbMetrics = fb.charToGlyphMetrics(lo);\n if (fbMetrics.advanceWidth > 0 && fbMetrics.index > 0) {\n const scaled = Math.round(fbMetrics.advanceWidth * unitsPerEm / fb.unitsPerEm);\n glyphAdvances.set(lo, scaled);\n }\n }\n}\n\nfunction buildGlyphFixupMap(font: TtfFont, fontInfo: FontInfo): Map<number, number> | null {\n const fixes = new Map<number, number>();\n for (const [code, unicodeStr] of fontInfo.toUnicode) {\n const cp = unicodeStr.codePointAt(0) ?? 0;\n const mirrorCp = MIRROR_PAIRS.get(cp);\n if (!mirrorCp) continue;\n const glyphAtCode = font.getGlyphMetrics(code);\n if (glyphAtCode.advanceWidth <= 0) continue;\n const glyphForChar = font.charToGlyphMetrics(cp);\n const glyphForMirror = font.charToGlyphMetrics(mirrorCp);\n if (glyphAtCode.index !== glyphForChar.index && glyphAtCode.index === glyphForMirror.index) {\n fixes.set(code, mirrorCp);\n }\n }\n return fixes.size > 0 ? fixes : null;\n}\n\nfunction processEmbeddedFont(\n fontData: ExtractedFont,\n fontInfo: FontInfo,\n): { glyphAdvances: Map<number, number>; unitsPerEm: number; reEncodedData: Uint8Array | null; glyphFixupMap: Map<number, number> | null } {\n if (fontData.format !== 'truetype' && fontData.format !== 'opentype') {\n return { glyphAdvances: new Map(), unitsPerEm: 1000, reEncodedData: null, glyphFixupMap: null };\n }\n\n try {\n const font = new TtfFont(fontData.data.buffer.slice(\n fontData.data.byteOffset,\n fontData.data.byteOffset + fontData.data.byteLength,\n ));\n\n const glyphAdvances = new Map<number, number>();\n const unitsPerEm = font.unitsPerEm;\n\n for (let gid = 0; gid < font.numGlyphs; gid++) {\n const w = font.getAdvanceWidth(gid);\n if (w > 0) glyphAdvances.set(gid, w);\n }\n\n if (fontInfo.isTwoByte) {\n fixCidToUnicodeWidths(font, fontInfo, glyphAdvances);\n fixAsciiFallbackWidths(font, getFallbackFont(), unitsPerEm, glyphAdvances);\n }\n\n let reEncodedData: Uint8Array | null = null;\n if (fontNeedsReencoding(font, fontInfo)) {\n try { reEncodedData = reEncodeFont(font, fontInfo, unitsPerEm); } catch { /* fall back */ }\n }\n\n const glyphFixupMap = fontInfo.isTwoByte && !reEncodedData\n ? buildGlyphFixupMap(font, fontInfo)\n : null;\n\n return { glyphAdvances, unitsPerEm, reEncodedData, glyphFixupMap };\n } catch {\n return { glyphAdvances: new Map(), unitsPerEm: 1000, reEncodedData: null, glyphFixupMap: null };\n }\n}\n\nfunction computeTargetAdvance(widths: ReadonlyMap<number, number>, code: number, unitsPerEm: number): number {\n const pdfWidth = widths.get(code);\n return pdfWidth === undefined ? 0 : Math.round(pdfWidth * unitsPerEm / 1000);\n}\n\nfunction collectToUnicodeGlyphs(\n srcFont: TtfFont, fontInfo: FontInfo, unitsPerEm: number,\n fb: TtfFont | null, glyphs: TtfBuilderGlyph[], usedUnicodes: Set<number>,\n): void {\n for (const [code, unicodeStr] of fontInfo.toUnicode) {\n const resolved = resolveUnicode(unicodeStr);\n if (resolved <= 0 || resolved > 0xFFFF || usedUnicodes.has(resolved)) continue;\n\n const targetAdvance = computeTargetAdvance(fontInfo.widths, code, unitsPerEm);\n const srcGlyphResult = findSourceGlyph(srcFont, resolved, code);\n if (srcGlyphResult) {\n usedUnicodes.add(resolved);\n glyphs.push(buildReEncodedGlyph(srcFont, srcGlyphResult, resolved, targetAdvance));\n } else if (fb) {\n const fbGlyph = buildFallbackGlyph(fb, resolved, targetAdvance, unitsPerEm);\n if (fbGlyph) { usedUnicodes.add(resolved); glyphs.push(fbGlyph); }\n }\n }\n}\n\nfunction collectAsciiFallbackGlyphs(\n fb: TtfFont, fontInfo: FontInfo, unitsPerEm: number,\n glyphs: TtfBuilderGlyph[], usedUnicodes: Set<number>,\n): void {\n for (let cp = 0x20; cp <= 0x7E; cp++) {\n if (usedUnicodes.has(cp)) continue;\n const targetAdvance = computeTargetAdvance(fontInfo.widths, cp, unitsPerEm);\n const fbGlyph = buildFallbackGlyph(fb, cp, targetAdvance, unitsPerEm);\n if (fbGlyph) { usedUnicodes.add(cp); glyphs.push(fbGlyph); }\n }\n}\n\nfunction reEncodeFont(\n srcFont: TtfFont,\n fontInfo: FontInfo,\n unitsPerEm: number,\n): Uint8Array | null {\n const glyphs: TtfBuilderGlyph[] = [{\n unicode: 0,\n advanceWidth: Math.round(unitsPerEm * 0.5),\n glyphData: new Uint8Array(0),\n }];\n const usedUnicodes = new Set<number>();\n const fb = getFallbackFont();\n\n collectToUnicodeGlyphs(srcFont, fontInfo, unitsPerEm, fb, glyphs, usedUnicodes);\n if (fb) collectAsciiFallbackGlyphs(fb, fontInfo, unitsPerEm, glyphs, usedUnicodes);\n\n if (glyphs.length <= 1) return null;\n\n return buildTtf({\n familyName: fontInfo.familyName || 'ReEncoded',\n styleName: 'Regular',\n unitsPerEm,\n ascender: srcFont.ascender || Math.round(unitsPerEm * 0.8),\n descender: srcFont.descender || Math.round(unitsPerEm * -0.2),\n glyphs,\n });\n}\n\nfunction resolveUnicode(unicodeStr: string): number {\n let cp = unicodeStr.codePointAt(0) ?? 0;\n if (cp >= 0xF000 && cp <= 0xF0FF) {\n cp = SYMBOL_PUA_MAP[cp] ?? (cp & 0x00FF);\n }\n return cp;\n}\n\nfunction findSourceGlyph(\n srcFont: TtfFont, unicode: number, code: number,\n): { gid: number; advanceWidth: number } | null {\n // Prefer the source font's Unicode cmap when available.\n const byUnicode = srcFont.charToGlyphMetrics(unicode);\n if (byUnicode.advanceWidth > 0 && byUnicode.index > 0) {\n return { gid: byUnicode.index, advanceWidth: byUnicode.advanceWidth };\n }\n // Fall back to the raw CID glyph\n const byCode = srcFont.getGlyphMetrics(code);\n if (byCode.advanceWidth > 0) {\n return { gid: code, advanceWidth: byCode.advanceWidth };\n }\n return null;\n}\n\nfunction buildReEncodedGlyph(\n srcFont: TtfFont,\n src: { gid: number; advanceWidth: number },\n unicode: number,\n targetAdvance: number,\n): TtfBuilderGlyph {\n const finalAdvance = targetAdvance > 0 ? targetAdvance : src.advanceWidth;\n let glyphData = srcFont.getRawGlyph(src.gid) ?? new Uint8Array(0);\n\n // Scale glyph horizontally if width changed (C++ stretch/squeeze)\n if (targetAdvance > 0 && Math.abs(src.advanceWidth - targetAdvance) > 1 && glyphData.length > 0) {\n const sx = targetAdvance / src.advanceWidth;\n glyphData = srcFont.scaleRawGlyphX(glyphData, sx);\n }\n\n return { unicode, advanceWidth: finalAdvance, glyphData };\n}\n\nfunction buildFallbackGlyph(\n fb: TtfFont, unicode: number, targetAdvance: number, unitsPerEm: number,\n): TtfBuilderGlyph | null {\n const fbMetrics = fb.charToGlyphMetrics(unicode);\n if (fbMetrics.advanceWidth <= 0 || fbMetrics.index <= 0) return null;\n\n const scale = unitsPerEm / fb.unitsPerEm;\n const fbAdvance = Math.round(fbMetrics.advanceWidth * scale);\n const finalAdvance = targetAdvance > 0 ? targetAdvance : fbAdvance;\n\n let glyphData = fb.getRawGlyph(fbMetrics.index) ?? new Uint8Array(0);\n if (glyphData.length > 0) {\n // Uniform scale first, then horizontal adjustment\n glyphData = fb.scaleRawGlyph(glyphData, scale);\n if (targetAdvance > 0 && fbAdvance > 0 && Math.abs(targetAdvance - fbAdvance) > 1) {\n const sx = targetAdvance / fbAdvance;\n glyphData = fb.scaleRawGlyphX(glyphData, sx);\n }\n }\n\n return { unicode, advanceWidth: finalAdvance, glyphData };\n}\n\n// Serif font family keywords for generic fallback detection\nconst SERIF_KEYWORDS = ['times', 'georgia', 'cambria', 'garamond', 'palatino', 'bodoni', 'baskerville', 'bookman', 'century'];\nconst MONO_KEYWORDS = ['courier', 'mono', 'consolas', 'menlo', 'lucidaconsole', 'inconsolata'];\n\nconst STYLE_SUFFIX = /(?:Bold|Italic|Regular|Medium|Light|Condensed|Black|Heavy|Oblique|Book|Demi|Semi|Ultra|Thin|Extra|PS)$/i;\n\n/**\n * Drops one trailing style word and the whitespace before it (\"Arial Bold\" →\n * \"Arial\"). Found from the word backwards: a `\\s+` regex retried from every\n * space of a long run of spaces is quadratic.\n */\nfunction stripStyleSuffix(name: string): string {\n const word = STYLE_SUFFIX.exec(name);\n if (!word) return name;\n let end = word.index;\n while (end > 0 && /\\s/.test(name.charAt(end - 1))) end--;\n return end === word.index ? name : name.slice(0, end);\n}\n\n/**\n * Dynamically extract a CSS font-family from any PDF BaseFontName.\n * No static map needed — works for any font by parsing the name.\n *\n * Examples:\n * \"ABCDEF+Arial\" → \"'Arial', sans-serif\"\n * \"MZPIBW+Arial Narrow Bold\" → \"'Arial Narrow', sans-serif\"\n * \"TimesNewRomanPS-BoldMT\" → \"'Times New Roman', serif\"\n * \"AKOBGE+arialuni\" → \"'Arialuni', sans-serif\"\n * \"CourierNew-Regular\" → \"'Courier New', monospace\"\n */\nfunction getSystemFontFamily(baseFontName: string): string {\n let name = baseFontName;\n // Strip subset prefix (e.g. \"ABCDEF+\")\n const plusIdx = name.indexOf('+');\n if (plusIdx >= 0 && plusIdx <= 6) name = name.slice(plusIdx + 1);\n\n // Strip trailing technical suffixes before CamelCase split\n name = name.replaceAll(/-?(PS)?MT$/gi, '');\n\n // Insert spaces before uppercase runs for CamelCase: \"TimesNewRoman\" → \"Times New Roman\"\n name = name.replaceAll(/([a-z])([A-Z])/g, '$1 $2');\n\n // Clean up dashes/underscores/commas to spaces\n name = name.replaceAll(/[-_,]+/g, ' ').trim();\n\n // Remove style/weight suffixes (run twice to catch consecutive: \"PS Bold\" → \"\")\n name = stripStyleSuffix(name).trim();\n name = stripStyleSuffix(name).trim();\n\n // Title-case all-lowercase names: \"arialuni\" → \"Arialuni\"\n if (name === name.toLowerCase() && name.length > 0) {\n name = name[0].toUpperCase() + name.slice(1);\n }\n\n // Determine generic fallback from lowercase name\n const lower = name.toLowerCase().replaceAll(/\\s/g, '');\n let generic = 'sans-serif';\n if (SERIF_KEYWORDS.some(k => lower.includes(k))) generic = 'serif';\n else if (MONO_KEYWORDS.some(k => lower.includes(k))) generic = 'monospace';\n\n return `${cssQuotedFontName(name)}, ${generic}`;\n}\n\nfunction usesSystemFallback(entry: FontRegistryEntry): boolean {\n return !entry.reEncodedData;\n}\n\nfunction processEmbeddedFontData(\n fontData: ExtractedFont | null, info: FontInfo,\n): {\n glyphAdvances: Map<number, number> | null;\n unitsPerEm: number;\n reEncodedData: Uint8Array | null;\n glyphFixupMap: Map<number, number> | null;\n} {\n if (!fontData) {\n return { glyphAdvances: null, unitsPerEm: 1000, reEncodedData: null, glyphFixupMap: null };\n }\n const processed = processEmbeddedFont(fontData, info);\n return {\n glyphAdvances: processed.glyphAdvances.size > 0 ? processed.glyphAdvances : null,\n unitsPerEm: processed.unitsPerEm,\n reEncodedData: processed.reEncodedData,\n glyphFixupMap: processed.glyphFixupMap,\n };\n}\n\nfunction buildUnicodeFallbackWidths(\n glyphAdvances: Map<number, number> | null,\n unitsPerEm: number,\n info: FontInfo,\n): Map<number, number> | null {\n if (!glyphAdvances || info.toUnicode.size === 0) return null;\n\n const uniMap = new Map<number, number>();\n fillUniMapFromGlyphAdvances(uniMap, info.toUnicode, glyphAdvances, unitsPerEm);\n fillUniMapFromPdfWidths(uniMap, info.toUnicode, info.widths, info.defaultWidth);\n return uniMap.size > 0 ? uniMap : null;\n}\n\nfunction fillUniMapFromGlyphAdvances(\n uniMap: Map<number, number>, toUnicode: Map<number, string>,\n glyphAdvances: Map<number, number>, unitsPerEm: number,\n): void {\n for (const [code, unicodeStr] of toUnicode) {\n const cp = unicodeStr.codePointAt(0) ?? 0;\n if (cp <= 0) continue;\n const otAdv = glyphAdvances.get(code);\n if (otAdv && otAdv > 0 && !uniMap.has(cp)) {\n uniMap.set(cp, Math.round(otAdv * 1000 / unitsPerEm));\n }\n }\n}\n\nfunction fillUniMapFromPdfWidths(\n uniMap: Map<number, number>, toUnicode: Map<number, string>,\n widths: Map<number, number>, defaultWidth: number,\n): void {\n for (const [code, unicodeStr] of toUnicode) {\n const cp = unicodeStr.codePointAt(0) ?? 0;\n if (cp <= 0 || uniMap.has(cp)) continue;\n const pdfW = widths.get(code);\n if (pdfW !== undefined && pdfW !== defaultWidth) uniMap.set(cp, pdfW);\n }\n}\n\nfunction buildFontBaseProps(entry: FontRegistryEntry): string {\n const lineHeight = Math.abs(entry.ascent - entry.descent) > 0.01\n ? `line-height:${(entry.ascent - entry.descent).toFixed(6).replace(/0{1,8}$/, '').replace(/\\.$/, '')};` : '';\n const isBold = entry.baseFontName.toLowerCase().includes('bold');\n const isItalic = entry.baseFontName.toLowerCase().includes('italic') ||\n entry.baseFontName.toLowerCase().includes('oblique');\n const fontWeight = isBold ? 'bold' : 'normal';\n const fontStyle = isItalic ? 'italic' : 'normal';\n return `${lineHeight}font-style:${fontStyle};font-weight:${fontWeight};font-synthesis:none;` +\n `-webkit-font-smoothing:antialiased;text-rendering:geometricPrecision;`;\n}\n\nconst FAMILY_SERIF_HINT = /times|serif|georgia|garamond|book|roman|minion|caslon|palatino|cambria/i;\nconst FAMILY_MONO_HINT = /courier|mono|consolas|menlo/i;\n\n/** Per-glyph fallback chain behind the embedded font: a subsetted font whose\n * cmap does not cover the emitted Unicode text (Chromium-printed PDFs)\n * otherwise renders those glyphs as nothing at all. */\nfunction fallbackChainFor(entry: FontRegistryEntry): string {\n const name = entry.familyName || entry.baseFontName || '';\n let generic = 'sans-serif';\n if (FAMILY_MONO_HINT.test(name)) generic = 'monospace';\n else if (FAMILY_SERIF_HINT.test(name)) generic = 'serif';\n const original = entry.familyName ? `${cssQuotedFontName(entry.familyName)},` : '';\n return `${original}${generic}`;\n}\n\nfunction resolveFontFamily(entry: FontRegistryEntry, isSymbolFont: boolean, familyPrefix = ''): string {\n if (isSymbolFont) return 'sans-serif';\n const embeddedId = `'${familyPrefix}f${entry.id.toString(16)}'`;\n if (entry.reEncodedData && entry.fontData && fontFormatToMime(entry.fontData.format)) {\n return `${embeddedId},${fallbackChainFor(entry)}`;\n }\n const systemFamily = getSystemFontFamily(entry.baseFontName);\n if (systemFamily && !entry.reEncodedData) return systemFamily;\n if (entry.fontData && fontFormatToMime(entry.fontData.format)) {\n return `${embeddedId},${fallbackChainFor(entry)}`;\n }\n return entry.familyName ? cssQuotedFontName(entry.familyName) : 'serif';\n}\n\nexport class FontRegistry {\n private readonly entriesByResourceName = new Map<string, FontRegistryEntry>();\n private readonly entriesByBaseFont = new Map<string, FontRegistryEntry>();\n private nextId = 0;\n\n constructor(private readonly familyPrefix = '') {}\n\n /**\n * CSS font-family name and embeddability for a registered font resource.\n * `embedded` mirrors the conditions under which {@link dumpFontFaceCss}\n * emits an `@font-face` rule for the entry.\n */\n cssFamilyFor(fontName: string): { family: string; embedded: boolean } | undefined {\n const entry = this.getEntry(fontName);\n if (!entry) return undefined;\n return { family: this.familyNameFor(entry), embedded: this.fontFaceRuleFor(entry) !== null };\n }\n\n private familyNameFor(entry: FontRegistryEntry): string {\n return `${this.familyPrefix}f${entry.id.toString(16)}`;\n }\n\n registerFont(reader: PdfReader, fontName: string, fontRef: PdfObject): FontRegistryEntry {\n const existingByResource = this.entriesByResourceName.get(fontName);\n if (existingByResource) {\n return existingByResource;\n }\n\n const fontObjDict = reader.getDict(fontRef);\n const baseFontName = reader.getString(fontObjDict['BaseFont']) || fontName;\n\n const fontData = extractFontProgram(reader, fontObjDict);\n const info = buildFontInfo(reader, fontRef);\n const { ascent, descent } = extractFontMetrics(reader, fontObjDict);\n\n const { glyphAdvances, unitsPerEm, reEncodedData, glyphFixupMap } =\n processEmbeddedFontData(fontData, info);\n\n const unicodeFallbackWidths = buildUnicodeFallbackWidths(\n glyphAdvances, unitsPerEm, info,\n );\n\n const entry: FontRegistryEntry = {\n id: this.nextId++,\n fontData,\n familyName: info.familyName,\n baseFontName,\n ascent,\n descent,\n glyphAdvances,\n unitsPerEm,\n reEncodedData,\n unicodeFallbackWidths,\n glyphFixupMap,\n };\n this.entriesByResourceName.set(fontName, entry);\n if (!this.entriesByBaseFont.has(baseFontName)) {\n this.entriesByBaseFont.set(baseFontName, entry);\n }\n return entry;\n }\n\n getEntry(fontName: string): FontRegistryEntry | undefined {\n return this.entriesByResourceName.get(fontName) ?? this.entriesByBaseFont.get(fontName);\n }\n\n getGlyphAdvance(fontName: string, code: number, unicode?: string): number | null {\n const entry = this.getEntry(fontName);\n if (!entry?.glyphAdvances) return null;\n const advance = entry.glyphAdvances.get(code);\n if (advance !== undefined && advance > 0) {\n return Math.round(advance * 1000 / entry.unitsPerEm);\n }\n // Glyph missing — look up by Unicode from another CID with valid width\n if (unicode && entry.unicodeFallbackWidths) {\n const cp = unicode.codePointAt(0) ?? 0;\n if (cp > 0) {\n const fallback = entry.unicodeFallbackWidths.get(cp);\n if (fallback !== undefined) return fallback;\n }\n }\n return null;\n }\n\n getGlyphFixup(fontName: string, code: number): number | undefined {\n const entry = this.getEntry(fontName);\n return entry?.glyphFixupMap?.get(code);\n }\n\n /**\n * Advance for a Unicode code point in thousandths of an em, preferring the\n * PDF-declared `/Widths` (the spec-authoritative positioning metric, ISO\n * 32000 §9.2.4) that {@link buildUnicodeFallbackWidths} records, or null\n * when the font declares none. Unlike {@link getGlyphAdvance} this never\n * returns the embedded program's design advance, which can disagree with\n * the width the generator actually laid text out with (e.g. an inflated\n * space glyph).\n */\n getDeclaredAdvance(fontName: string, unicode: string): number | null {\n const entry = this.getEntry(fontName);\n const cp = unicode.codePointAt(0) ?? 0;\n if (!entry?.unicodeFallbackWidths || cp <= 0) return null;\n return entry.unicodeFallbackWidths.get(cp) ?? null;\n }\n\n private allUniqueEntries(): FontRegistryEntry[] {\n const seen = new Set<number>();\n const result: FontRegistryEntry[] = [];\n for (const entry of this.entriesByResourceName.values()) {\n if (!seen.has(entry.id)) {\n seen.add(entry.id);\n result.push(entry);\n }\n }\n return result;\n }\n\n /**\n * `@font-face` rules for re-encoded fonts only. Entries without\n * re-encoded data are filtered by {@link usesSystemFallback}, so only the\n * re-encoded branch of `fontFaceRuleFor` is reachable here — identical to\n * the historical behavior where the raw-data branch was dead code.\n */\n dumpFontFaceCss(): string {\n const rules: string[] = [];\n for (const entry of this.allUniqueEntries()) {\n if (usesSystemFallback(entry)) continue;\n const rule = this.fontFaceRuleFor(entry);\n if (rule) rules.push(rule);\n }\n return rules.join('\\n');\n }\n\n /**\n * `@font-face` rules for every embeddable font, including raw embedded\n * TrueType/OpenType programs that {@link dumpFontFaceCss} skips (it only\n * emits re-encoded fonts because the pixel-perfect renderer positions\n * glyphs with system-font metrics otherwise).\n */\n dumpAllFontFaceCss(): string {\n const rules: string[] = [];\n for (const entry of this.allUniqueEntries()) {\n const rule = this.fontFaceRuleFor(entry);\n if (rule) rules.push(rule);\n }\n return rules.join('\\n');\n }\n\n private fontFaceRuleFor(entry: FontRegistryEntry): string | null {\n // Prefer the PDF's own font program: browsers rasterize it faithfully\n // and per-glyph fallback covers whatever its cmap misses. The rebuilt\n // program is a last resort — Chrome declines to paint some of its\n // glyphs while still claiming them, which renders text invisibly.\n if (this.rawIsLoadable(entry)) return this.rawFontFaceRule(entry);\n if (entry.reEncodedData) {\n const b64 = uint8ToBase64(entry.reEncodedData);\n return `@font-face{font-family:'${this.familyNameFor(entry)}';` +\n `src:url('data:font/ttf;base64,${b64}') format('truetype');}`;\n }\n if (!entry.fontData) return null;\n if (entry.fontData.format !== 'truetype' && entry.fontData.format !== 'opentype') {\n return null;\n }\n const fmt = fontFormatToMime(entry.fontData.format);\n if (!fmt) return null;\n const b64 = uint8ToBase64(entry.fontData.data);\n return `@font-face{font-family:'${this.familyNameFor(entry)}';` +\n `src:url('data:${fmt.mime};base64,${b64}') format('${fmt.cssFormat}');}`;\n }\n\n private rawIsLoadable(entry: FontRegistryEntry): boolean {\n return !!entry.fontData &&\n (entry.fontData.format === 'truetype' || entry.fontData.format === 'opentype') &&\n fontFormatToMime(entry.fontData.format) !== null;\n }\n\n private rawFontFaceRule(entry: FontRegistryEntry): string | null {\n if (!entry.fontData) return null;\n const fmt = fontFormatToMime(entry.fontData.format);\n if (!fmt) return null;\n const b64 = uint8ToBase64(entry.fontData.data);\n return `@font-face{font-family:'${this.familyNameFor(entry)}';` +\n `src:url('data:${fmt.mime};base64,${b64}') format('${fmt.cssFormat}');}`;\n }\n\n dumpFontFamilyCss(): string {\n const SYMBOL_FONTS = ['symbol', 'zapfdingbats', 'wingdings'];\n const rules: string[] = [];\n for (const entry of this.allUniqueEntries()) {\n const isSymbolFont = SYMBOL_FONTS.some(\n s => entry.baseFontName.toLowerCase().includes(s),\n );\n const baseProps = buildFontBaseProps(entry);\n const family = resolveFontFamily(entry, isSymbolFont, this.familyPrefix);\n const hexId = entry.id.toString(16);\n rules.push(`.ff${hexId}{font-family:${family};${baseProps}}`);\n }\n return rules.join('\\n');\n }\n}\n\nfunction extractFontMetrics(\n reader: PdfReader,\n fontObjDict: Record<string, PdfObject>,\n): { ascent: number; descent: number } {\n let descriptorRef = fontObjDict['FontDescriptor'];\n if (!descriptorRef) {\n const descendantsRef = fontObjDict['DescendantFonts'];\n if (descendantsRef) {\n const descendants = reader.getArray(descendantsRef);\n if (descendants.length > 0) {\n const cidFontDict = reader.getDict(descendants[0]);\n descriptorRef = cidFontDict['FontDescriptor'];\n }\n }\n }\n if (!descriptorRef) return { ascent: 0.8, descent: -0.2 };\n\n const descriptor = reader.getDict(descriptorRef);\n const rawAscent = descriptor['Ascent'] ? reader.getNumber(descriptor['Ascent']) : 0;\n const rawDescent = descriptor['Descent'] ? reader.getNumber(descriptor['Descent']) : 0;\n\n const ascent = rawAscent === 0 ? 0.8 : rawAscent / 1000;\n const descent = rawDescent === 0 ? -0.2 : rawDescent / 1000;\n return { ascent, descent };\n}\n\n// ── Base CSS (equivalent of pdf2htmlEX base.css.in) ───────────────────\n\nconst BASE_CSS = `.pf{position:relative;background-color:white;overflow:hidden;margin:13px auto;box-shadow:1px 1px 3px 1px #333;border-collapse:separate}\n.pc{position:absolute;border:0;padding:0;margin:0;top:0;left:0;width:100%;height:100%;overflow:hidden;display:block;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0}\n.t{position:absolute;white-space:pre;font-size:1px;transform-origin:0% 100%;-ms-transform-origin:0% 100%;-webkit-transform-origin:0% 100%;unicode-bidi:bidi-override;-moz-font-feature-settings:\"liga\" 0}\n.t:after{content:''}\n.t:before{content:'';display:inline-block}\n.t span{position:relative;unicode-bidi:bidi-override}\n._{display:inline-block;color:transparent;z-index:-1}\n.c{position:absolute;border:0;padding:0;margin:0;overflow:hidden;display:block}\n.fwb{font-weight:bold}\n.fwn{font-weight:normal}\n.fsi{font-style:italic}\n.fsn{font-style:normal}\n::selection{background:rgba(127,255,255,0.4)}\n::-moz-selection{background:rgba(127,255,255,0.4)}\n@media print{.pf{margin:0;box-shadow:none;page-break-after:always;page-break-inside:avoid}}`;\n\n// ── Content Stream Utilities ─────────────────────────────────────────\n// (Copies of module-private functions from pdf-parser.ts needed for\n// the new content stream processor)\n\nconst PDF_DOC_ENCODING: Record<number, string> = {\n 0x80: '\\u2022', 0x81: '\\u2020', 0x82: '\\u2021', 0x83: '\\u2026',\n 0x84: '\\u2014', 0x85: '\\u2013', 0x86: '\\u0192', 0x87: '\\u2044',\n 0x88: '\\u2039', 0x89: '\\u203A', 0x8A: '\\u2212', 0x8B: '\\u2030',\n 0x8C: '\\u201E', 0x8D: '\\u201C', 0x8E: '\\u201D', 0x8F: '\\u2018',\n 0x90: '\\u2019', 0x91: '\\u201A', 0x92: '\\u2122', 0x93: '\\uFB01',\n 0x94: '\\uFB02', 0x95: '\\u0141', 0x96: '\\u0152', 0x97: '\\u0160',\n 0x98: '\\u0178', 0x99: '\\u017D', 0x9A: '\\u0131', 0x9B: '\\u0142',\n 0x9C: '\\u0153', 0x9D: '\\u0161', 0x9E: '\\u017E', 0xA0: '\\u20AC',\n 0xAD: '\\u02C7',\n};\n\nconst VALID_DECODED_CHAR_RANGES: ReadonlyArray<readonly [number, number]> = [\n [0x0020, 0x007E], [0x00A0, 0x024F], [0x0370, 0x03FF], [0x0400, 0x04FF],\n [0x0500, 0x05FF], [0x0600, 0x06FF], [0x0900, 0x097F], [0x2000, 0x206F],\n [0x2010, 0x2027], [0x20A0, 0x20CF], [0xFB1D, 0xFB4F], [0xFB50, 0xFDFF],\n [0xFE70, 0xFEFF],\n];\n\nfunction isValidDecodedChar(code: number): boolean {\n return VALID_DECODED_CHAR_RANGES.some(([lo, hi]) => code >= lo && code <= hi);\n}\n\n// Symbol font PUA (U+F000-U+F0FF) → standard Unicode mapping.\n// Symbol fonts use PUA code points that browsers can't render with normal fonts.\nconst SYMBOL_PUA_MAP: Record<number, number> = {\n 0xF020: 0x0020, 0xF021: 0x0021, 0xF022: 0x2200, 0xF023: 0x0023,\n 0xF025: 0x0025, 0xF026: 0x0026, 0xF028: 0x0028, 0xF029: 0x0029,\n 0xF02B: 0x002B, 0xF02C: 0x002C, 0xF02E: 0x002E, 0xF02F: 0x002F,\n 0xF030: 0x0030, 0xF031: 0x0031, 0xF032: 0x0032, 0xF033: 0x0033,\n 0xF034: 0x0034, 0xF035: 0x0035, 0xF036: 0x0036, 0xF037: 0x0037,\n 0xF038: 0x0038, 0xF039: 0x0039, 0xF03D: 0x003D,\n 0xF05B: 0x005B, 0xF05D: 0x005D,\n 0xF0A0: 0x20AC, 0xF0A5: 0x2030, 0xF0A7: 0x00A7, 0xF0A8: 0x2663,\n 0xF0AA: 0x2666, 0xF0AB: 0x2665, 0xF0AE: 0x25BA, 0xF0B0: 0x00B0,\n 0xF0B1: 0x00B1, 0xF0B2: 0x2033, 0xF0B3: 0x2265, 0xF0B4: 0x00D7,\n 0xF0B5: 0x221D, 0xF0B6: 0x2202, 0xF0B7: 0x2022, 0xF0B8: 0x00F7,\n 0xF0B9: 0x2260, 0xF0BA: 0x2261, 0xF0BB: 0x2248, 0xF0BC: 0x2026,\n 0xF0D8: 0x2191, 0xF0E0: 0x2660, 0xF0E1: 0x2663, 0xF0E2: 0x2665,\n 0xF0E3: 0x2666, 0xF0E8: 0x2190, 0xF0E9: 0x2191, 0xF0EA: 0x2192,\n 0xF0EB: 0x2193, 0xF0FC: 0x221A,\n};\n\nfunction mapSymbolPua(unicode: string): string {\n if (unicode.length === 0) return unicode;\n const cp = unicode.codePointAt(0) ?? 0;\n if (cp >= 0xF000 && cp <= 0xF0FF) {\n const mapped: number | undefined = SYMBOL_PUA_MAP[cp];\n if (mapped !== undefined) return String.fromCodePoint(mapped);\n // Fallback: strip F0 prefix → U+00XX\n return String.fromCodePoint(cp & 0x00FF);\n }\n return unicode;\n}\n\nfunction decodeTwoByteChar(code: number, toUnicode: Map<number, string>): string {\n const codeMapped = toUnicode.get(code);\n if (codeMapped !== undefined) return mapSymbolPua(codeMapped);\n const lo = code & 0xFF;\n const loMapped = toUnicode.get(lo);\n if (loMapped !== undefined) return loMapped;\n if (code >= 0x20 && code < 0xFFFE) {\n if (isValidDecodedChar(code)) return String.fromCodePoint(code);\n }\n if (lo >= 0x20 && lo < 0x7F) return String.fromCodePoint(lo);\n return '';\n}\n\nfunction pdfStringToCharacters(\n raw: string,\n fontInfo?: FontInfo,\n): { charCodes: number[]; unicodes: string[] } {\n const charCodes: number[] = [];\n const unicodes: string[] = [];\n if (fontInfo?.isTwoByte) {\n for (let i = 0; i + 1 < raw.length; i += 2) {\n const code = ((raw.codePointAt(i) ?? 0) << 8) | (raw.codePointAt(i + 1) ?? 0);\n charCodes.push(code);\n unicodes.push(decodeTwoByteChar(code, fontInfo.toUnicode));\n }\n if (raw.length % 2 === 1) {\n const code = raw.codePointAt(raw.length - 1) ?? 0;\n charCodes.push(code);\n unicodes.push(decodeTwoByteChar(code, fontInfo.toUnicode));\n }\n } else {\n const toUnicode = fontInfo?.toUnicode;\n for (let i = 0; i < raw.length; i++) {\n const code = raw.codePointAt(i) ?? 0;\n charCodes.push(code);\n const mapped = toUnicode?.get(code);\n if (mapped !== undefined) {\n unicodes.push(mapped);\n } else if (PDF_DOC_ENCODING[code]) {\n unicodes.push(PDF_DOC_ENCODING[code]);\n } else {\n unicodes.push(raw[i]);\n }\n }\n }\n return { charCodes, unicodes };\n}\n\n// ── Content Stream Tokenizer ─────────────────────────────────────────\n\nconst CONTENT_ESCAPE_MAP: Record<string, string> = {\n 'n': '\\n', 'r': '\\r', 't': '\\t', 'b': '\\b', 'f': '\\f',\n '(': '(', ')': ')', '\\\\': '\\\\',\n};\n\nfunction tokenizeEscapeSequence(text: string, pos: number): { char: string; endPos: number } {\n const esc = text[pos];\n const mapped = CONTENT_ESCAPE_MAP[esc];\n if (mapped) return { char: mapped, endPos: pos + 1 };\n if (esc >= '0' && esc <= '7') {\n let oct = esc;\n if (pos + 1 < text.length && text[pos + 1] >= '0' && text[pos + 1] <= '7') {\n pos++; oct += text[pos];\n if (pos + 1 < text.length && text[pos + 1] >= '0' && text[pos + 1] <= '7') {\n pos++; oct += text[pos];\n }\n }\n return { char: String.fromCodePoint(Number.parseInt(oct, 8)), endPos: pos + 1 };\n }\n if (esc === '\\r' || esc === '\\n') {\n const endPos = (esc === '\\r' && pos + 1 < text.length && text[pos + 1] === '\\n')\n ? pos + 2 : pos + 1;\n return { char: '', endPos };\n }\n return { char: esc, endPos: pos + 1 };\n}\n\nfunction tokenizeLiteralString(text: string, startPos: number): { token: string; endPos: number } {\n let pos = startPos + 1;\n let str = '';\n let depth = 1;\n while (pos < text.length && depth > 0) {\n if (text[pos] === '\\\\') {\n pos++;\n if (pos >= text.length) break;\n const result = tokenizeEscapeSequence(text, pos);\n str += result.char;\n pos = result.endPos;\n } else if (text[pos] === '(') {\n depth++; str += text[pos++];\n } else if (text[pos] === ')') {\n depth--;\n if (depth > 0) str += text[pos];\n pos++;\n } else {\n str += text[pos++];\n }\n }\n return { token: '(' + str + ')', endPos: pos };\n}\n\nfunction tokenizeHexString(text: string, startPos: number): { token: string; endPos: number } {\n let pos = startPos + 1;\n let hex = '';\n while (pos < text.length && text[pos] !== '>') {\n if (!' \\t\\r\\n\\0\\f'.includes(text[pos])) hex += text[pos];\n pos++;\n }\n if (pos < text.length) pos++;\n if (hex.length % 2 !== 0) hex += '0';\n let str = '';\n for (let i = 0; i < hex.length; i += 2) {\n str += String.fromCodePoint(Number.parseInt(hex.substring(i, i + 2), 16));\n }\n return { token: '(' + str + ')', endPos: pos };\n}\n\nfunction skipComment(text: string, pos: number): number {\n while (pos < text.length && text[pos] !== '\\n' && text[pos] !== '\\r') pos++;\n return pos;\n}\n\nfunction tokenizeAngleBracket(text: string, pos: number, tokens: string[]): number {\n if (pos + 1 < text.length && text[pos + 1] === '<') { tokens.push('<<'); return pos + 2; }\n const result = tokenizeHexString(text, pos);\n tokens.push(result.token);\n return result.endPos;\n}\n\nfunction tokenizeClosingAngle(text: string, pos: number, tokens: string[]): number {\n if (pos + 1 < text.length && text[pos + 1] === '>') { tokens.push('>>'); return pos + 2; }\n return pos + 1;\n}\n\nfunction tokenizeName(text: string, pos: number, tokens: string[]): number {\n let name = '/';\n pos++;\n while (pos < text.length && !' \\t\\r\\n\\0\\f/<>[]()%'.includes(text[pos])) {\n name += text[pos++];\n }\n tokens.push(name);\n return pos;\n}\n\nfunction tokenizeGenericToken(text: string, pos: number, tokens: string[]): number {\n let token = '';\n while (pos < text.length && !' \\t\\r\\n\\0\\f/<>[]()%'.includes(text[pos])) {\n token += text[pos++];\n }\n if (token) tokens.push(token);\n return pos;\n}\n\nfunction tokenizeNextElement(text: string, pos: number, tokens: string[]): number {\n const c = text[pos];\n if (c === '(') { const r = tokenizeLiteralString(text, pos); tokens.push(r.token); return r.endPos; }\n if (c === '<') return tokenizeAngleBracket(text, pos, tokens);\n if (c === '>') return tokenizeClosingAngle(text, pos, tokens);\n if (c === '[') { tokens.push('['); return pos + 1; }\n if (c === ']') { tokens.push(']'); return pos + 1; }\n if (c === '/') return tokenizeName(text, pos, tokens);\n return tokenizeGenericToken(text, pos, tokens);\n}\n\nfunction tokenizeContentStream(data: Uint8Array): string[] {\n const text = new TextDecoder('latin1').decode(data);\n const tokens: string[] = [];\n let pos = 0;\n while (pos < text.length) {\n while (pos < text.length && ' \\t\\r\\n\\0\\f'.includes(text[pos])) pos++;\n if (pos >= text.length) break;\n if (text[pos] === '%') { pos = skipComment(text, pos); continue; }\n pos = tokenizeNextElement(text, pos, tokens);\n }\n return tokens;\n}\n\n// ── Matrix & Transform Utilities ─────────────────────────────────────\n\n// Matrix multiplication matching C++ pdf2htmlEX tm_multiply (math.h:34-42).\n// PDF matrices use column-major layout: [a,b,c,d,e,f] represents\n// [[a,c,e],[b,d,f],[0,0,1]]. The translation formula differs from\n// row-major: result[4] = m1[0]*m2[4] + m1[2]*m2[5] + m1[4].\nfunction multiplyMatrix(a: readonly number[], b: readonly number[]): number[] {\n return [\n a[0] * b[0] + a[2] * b[1],\n a[1] * b[0] + a[3] * b[1],\n a[0] * b[2] + a[2] * b[3],\n a[1] * b[2] + a[3] * b[3],\n a[0] * b[4] + a[2] * b[5] + a[4],\n a[1] * b[4] + a[3] * b[5] + a[5],\n ];\n}\n\nfunction transformPoint(x: number, y: number, tm: readonly number[]): { tx: number; ty: number } {\n return {\n tx: x * tm[0] + y * tm[2] + tm[4],\n ty: x * tm[1] + y * tm[3] + tm[5],\n };\n}\n\nfunction tmEqual(a: readonly number[], b: readonly number[], count: number, eps: number): boolean {\n for (let i = 0; i < count; i++) {\n if (Math.abs(a[i] - b[i]) > eps) return false;\n }\n return true;\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n const clamp = (v: number): number => Math.max(0, Math.min(255, Math.round(v * 255)));\n const hex = (v: number): string => clamp(v).toString(16).padStart(2, '0');\n return `#${hex(r)}${hex(g)}${hex(b)}`;\n}\n\nfunction cmykToHex(c: number, m: number, y: number, k: number): string {\n return rgbToHex((1 - c) * (1 - k), (1 - m) * (1 - k), (1 - y) * (1 - k));\n}\n\nfunction grayToHex(g: number): string {\n return rgbToHex(g, g, g);\n}\n\n// ── TextLine Model (1:1 translation of pdf2htmlEX HTMLTextLine) ──────\n\n\nconst H_EPS = 1;\nconst SPACE_THRESHOLD = 0.125;\nconst EPS = 0.001;\n// C++ State::HASH_ID_COUNT — number of IDs compared in diff/hash (font through word_space)\nconst HASH_ID_COUNT = 6;\n\nconst h = (id: number): string => id.toString(16);\n\n/**\n * Mirrors pdf2htmlEX HTMLTextState.\n * Holds per-character style information extracted from TextItem.\n */\ninterface TextState {\n readonly fontName: string;\n readonly fontFamily: string;\n readonly fontSize: number;\n readonly fillColor: string;\n readonly strokeColor: string;\n letterSpace: number; // mutable: optimize_normal updates via installAndSnap\n wordSpace: number; // mutable: optimize_normal updates via installAndSnap\n readonly verticalAlign: number;\n readonly bold: boolean;\n readonly italic: boolean;\n readonly textRenderMode: number;\n readonly horizontalScaling: number;\n readonly spaceWidth: number; // font's space char width in 1000ths (for single_space_offset)\n readonly fontAscent: number;\n readonly fontDescent: number;\n}\n\n\n/**\n * Mirrors pdf2htmlEX HTMLTextLine::Offset.\n * Records a horizontal gap at a specific position in the text array.\n */\ninterface TextLineOffset {\n readonly startIdx: number;\n width: number;\n}\n\n/**\n * Mirrors pdf2htmlEX HTMLTextLine::State.\n * Records installed CSS class IDs for a style segment starting at a text position.\n */\ninterface LineStyleState {\n readonly startIdx: number;\n fontId: number;\n fontSizeId: number;\n fillColorId: number;\n strokeColorId: number;\n letterSpaceId: number;\n wordSpaceId: number;\n verticalAlignId: number;\n readonly bold: boolean;\n readonly italic: boolean;\n readonly embedded: boolean;\n readonly hasStroke: boolean;\n readonly horizontalScaling: number;\n verticalAlignIsZero: boolean;\n wordSpaceFree: boolean; // C++ hash_umask & word_space_umask — true if word_space can vary freely\n}\n\nfunction lineStylesEqual(a: LineStyleState | null, b: LineStyleState): boolean {\n if (!a) return false;\n return a.fontId === b.fontId &&\n a.fontSizeId === b.fontSizeId &&\n a.fillColorId === b.fillColorId &&\n a.strokeColorId === b.strokeColorId &&\n a.letterSpaceId === b.letterSpaceId &&\n (a.wordSpaceFree || b.wordSpaceFree || a.wordSpaceId === b.wordSpaceId) &&\n a.verticalAlignId === b.verticalAlignId;\n}\n\n/**\n * Compute diff classes between two LineStyleStates.\n * Mirrors HTMLTextLine::State::begin() which only emits classes that differ.\n */\nfunction lineStyleDiffClasses(prev: LineStyleState | null, cur: LineStyleState): string[] {\n const classes: string[] = [];\n addFontClasses(prev, cur, classes);\n addSpacingClasses(prev, cur, classes);\n return classes;\n}\n\nfunction addFontClasses(prev: LineStyleState | null, cur: LineStyleState, classes: string[]): void {\n if (prev?.fontId !== cur.fontId) classes.push(`ff${h(cur.fontId)}`);\n if (prev?.fontSizeId !== cur.fontSizeId) classes.push(`fs${h(cur.fontSizeId)}`);\n if (prev?.fillColorId !== cur.fillColorId) classes.push(`fc${h(cur.fillColorId)}`);\n if (!cur.embedded) handleBoldItalicDiff(prev, cur, classes);\n if (cur.hasStroke && prev?.strokeColorId !== cur.strokeColorId) classes.push(`sc${h(cur.strokeColorId)}`);\n}\n\nfunction addSpacingClasses(prev: LineStyleState | null, cur: LineStyleState, classes: string[]): void {\n if (prev?.letterSpaceId !== cur.letterSpaceId) classes.push(`ls${h(cur.letterSpaceId)}`);\n if (!cur.wordSpaceFree && (!prev || prev.wordSpaceFree || prev.wordSpaceId !== cur.wordSpaceId)) {\n classes.push(`ws${h(cur.wordSpaceId)}`);\n }\n if (prev && !cur.verticalAlignIsZero && prev.verticalAlignId !== cur.verticalAlignId) {\n classes.push(`v${h(cur.verticalAlignId)}`);\n }\n}\n\nfunction handleBoldItalicDiff(\n prev: LineStyleState | null, cur: LineStyleState, classes: string[],\n): void {\n if (prev?.bold !== cur.bold) {\n classes.push(cur.bold ? 'fwb' : 'fwn');\n }\n if (prev?.italic !== cur.italic) {\n classes.push(cur.italic ? 'fsi' : 'fsn');\n }\n}\n\nfunction fontIsEmbedded(fontName: string, fontFamily: string, fontRegistry: FontRegistry): boolean {\n const entry = fontRegistry.getEntry(fontName) ?? fontRegistry.getEntry(fontFamily);\n return !!entry?.fontData && !!fontFormatToMime(entry.fontData.format);\n}\n\nfunction getFontRegistryId(fontName: string, fontFamily: string, fontRegistry: FontRegistry): number {\n const entry = fontRegistry.getEntry(fontName) ?? fontRegistry.getEntry(fontFamily);\n return entry ? entry.id : -1;\n}\n\n\n/**\n * Direct translation of pdf2htmlEX HTMLTextLine.\n *\n * A line contains:\n * - text: number[] -- Unicode code points (>0 = char, 0 = padding)\n * - offsets: TextLineOffset[] -- horizontal gaps at specific text indices\n * - states: LineStyleState[] -- style changes at specific text indices\n */\nfunction addWidthsToHistogram(\n offsets: ReadonlyArray<TextLineOffset>, start: number, end: number, widthMap: Map<number, number>,\n): void {\n for (let oi = start; oi < end; oi++) {\n const target = offsets[oi].width;\n let found = false;\n for (const [w, c] of widthMap) {\n if (Math.abs(w - target) <= EPS) {\n widthMap.set(w, c + 1);\n found = true;\n break;\n }\n }\n if (!found) widthMap.set(target, 1);\n }\n}\n\nfunction findMostUsedWidth(widthMap: ReadonlyMap<number, number>): { width: number; count: number } {\n let width = 0;\n let count = 0;\n for (const [w, c] of widthMap) {\n if (c > count) { width = w; count = c; }\n }\n return { width, count };\n}\n\nfunction findMostFrequentAboveThreshold(\n widthMap: ReadonlyMap<number, number>, letterSpaceDiff: number, threshold: number,\n): { width: number; count: number } {\n let width = 0;\n let count = 0;\n for (const [w, c] of widthMap) {\n const fixedWidth = w + letterSpaceDiff;\n if (fixedWidth >= threshold - EPS && c > count) {\n count = c;\n width = fixedWidth;\n }\n }\n return { width, count };\n}\n\ninterface OptimizeSpaceOptions {\n readonly mgr: AllStateManager;\n readonly stateEntry: { textState: TextState; installed: LineStyleState | null };\n readonly textIdx1: number;\n readonly textIdx2: number;\n readonly widthMap: Map<number, number>;\n readonly z: number;\n}\n\ninterface EmitOffsetOptions {\n readonly mgr: AllStateManager;\n readonly ts: TextState;\n readonly installed: LineStyleState | null;\n readonly target: number;\n readonly curTextIdx: number;\n readonly hEps: number;\n readonly spaceThreshold: number;\n readonly z: number;\n}\n\nclass TextLine {\n readonly text: number[] = [];\n readonly decomposedText: number[][] = []; // C++ decomposed_text for ligatures\n offsets: TextLineOffset[] = [];\n readonly states: {\n textState: TextState;\n installed: LineStyleState | null;\n }[] = [];\n\n x = 0;\n y = 0;\n transformMatrix: readonly [number, number, number, number] = [1, 0, 0, 1];\n ascent = 0;\n descent = 0;\n lineWidth = 0; // C++ HTMLTextLine::width — total horizontal width\n\n // F1: append_unicodes (HTMLTextLine.cc:37-48)\n appendUnicodes(codePoints: number[], width: number): void {\n if (codePoints.length === 1) {\n this.text.push(codePoints[0]);\n } else if (codePoints.length > 1) {\n this.text.push(-this.decomposedText.length - 1);\n this.decomposedText.push([...codePoints]);\n }\n this.lineWidth += width;\n }\n\n // F2: append_offset (HTMLTextLine.cc:50-69) — merges at same position\n appendOffset(width: number): void {\n // Offset must follow last non-padding char (C++ lines 61-63)\n let offsetIdx = this.text.length;\n while (offsetIdx > 0 && this.text[offsetIdx - 1] === 0) {\n --offsetIdx;\n }\n const lastOffset = this.offsets.at(-1);\n if (lastOffset?.startIdx === offsetIdx) {\n lastOffset.width += width;\n } else {\n this.offsets.push({ startIdx: offsetIdx, width });\n }\n this.lineWidth += width;\n }\n\n // F3: append_state (HTMLTextLine.cc:71-84) — reuses last if same position\n appendState(textState: TextState): void {\n const lastState = this.states.at(-1);\n if (!lastState || lastState.installed?.startIdx !== this.text.length) {\n this.states.push({ textState, installed: null });\n } else {\n lastState.textState = textState;\n }\n }\n\n // F4: prepare (HTMLTextLine.cc:319-345)\n // Installs all style IDs via managers, computes ascent/descent.\n // Uses installAndSnap for letter_space/word_space so the INSTALLED\n // values are available for single_space_offset() in optimize/dump.\n prepare(mgr: AllStateManager, fontRegistry: FontRegistry, z: number): void {\n let accumVerticalAlign = 0;\n this.ascent = 0;\n this.descent = 0;\n\n for (const stateEntry of this.states) {\n const ts = stateEntry.textState;\n const scaledFontSize = ts.fontSize * z;\n\n const fontId = getFontRegistryId(ts.fontName, ts.fontFamily, fontRegistry);\n const embedded = fontIsEmbedded(ts.fontName, ts.fontFamily, fontRegistry);\n const hasStroke = ts.textRenderMode === 1 || ts.textRenderMode === 2;\n\n // C++ prepare lines 333-334: install letter/word space (one-arg form, no snap-back)\n const lsId = mgr.letterSpace.install(ts.letterSpace * z);\n const wsId = mgr.wordSpace.install(ts.wordSpace * z);\n\n const vaIsZero = Math.abs(ts.verticalAlign) < EPS;\n\n const installed: LineStyleState = {\n startIdx: stateEntry.installed?.startIdx ?? 0,\n fontId: fontId >= 0 ? fontId : mgr.fillColor.install('#000000'),\n fontSizeId: mgr.fontSize.install(scaledFontSize),\n fillColorId: mgr.fillColor.install(ts.fillColor),\n strokeColorId: hasStroke ? mgr.strokeColor.install(ts.strokeColor) : 0,\n letterSpaceId: lsId,\n wordSpaceId: wsId,\n verticalAlignId: vaIsZero ? 0 : mgr.verticalAlign.install(ts.verticalAlign * z),\n bold: ts.bold,\n italic: ts.italic,\n embedded,\n hasStroke,\n horizontalScaling: ts.horizontalScaling,\n verticalAlignIsZero: vaIsZero,\n wordSpaceFree: false, // C++ hash_umask starts at 0\n };\n stateEntry.installed = installed;\n\n // C++ lines 337-343: ascent/descent with accumulated vertical_align\n accumVerticalAlign += ts.verticalAlign;\n const curAscent = accumVerticalAlign + ts.fontAscent * scaledFontSize;\n if (curAscent > this.ascent) this.ascent = curAscent;\n const curDescent = accumVerticalAlign + ts.fontDescent * scaledFontSize;\n if (curDescent < this.descent) this.descent = curDescent;\n }\n }\n\n // F5: optimize_normal (HTMLTextLine.cc:363-540) — 1:1 C++ translation\n // Adjusts letter-space and word-space to reduce HTML element count.\n // Builds new_offsets list and swaps at end (C++ line 537).\n optimizeNormal(mgr: AllStateManager, hEps: number, spaceThreshold: number, z: number): void {\n // C++ line 366-367: remove useless states at end\n let lastSt = this.states.at(-1);\n while (lastSt && (lastSt.installed?.startIdx ?? 0) >= this.text.length) {\n this.states.pop();\n lastSt = this.states.at(-1);\n }\n if (this.states.length === 0) return;\n\n const widthMap = new Map<number, number>(); // width → count\n const newOffsets: TextLineOffset[] = [];\n\n // C++ line 383: offset iterator tracking current position in offsets array\n let offIter1 = 0;\n\n for (let si = 0; si < this.states.length; si++) {\n const stateEntry = this.states[si];\n if (!stateEntry.installed) continue;\n\n const textIdx1 = stateEntry.installed.startIdx;\n const textIdx2 = si + 1 < this.states.length\n ? (this.states[si + 1].installed?.startIdx ?? this.text.length)\n : this.text.length;\n\n while (offIter1 < this.offsets.length && this.offsets[offIter1].startIdx <= textIdx1) {\n newOffsets.push({ ...this.offsets[offIter1] });\n offIter1++;\n }\n let offIter2 = offIter1;\n while (offIter2 < this.offsets.length && this.offsets[offIter2].startIdx <= textIdx2) {\n offIter2++;\n }\n\n const spaceOpts: OptimizeSpaceOptions = { mgr, stateEntry, textIdx1, textIdx2, widthMap, z };\n const lsResult = this.optimizeLetterSpace(spaceOpts, offIter1, offIter2, newOffsets);\n this.optimizeWordSpace(spaceOpts, lsResult.offsetCount, lsResult.letterSpaceDiff, spaceThreshold);\n offIter1 = offIter2;\n }\n\n this.offsets = newOffsets;\n }\n\n private optimizeLetterSpace(\n opts: OptimizeSpaceOptions,\n offIter1: number, offIter2: number,\n newOffsets: TextLineOffset[],\n ): { offsetCount: number; letterSpaceDiff: number } {\n const { mgr, stateEntry, textIdx1, textIdx2, widthMap, z } = opts;\n const ts = stateEntry.textState;\n let offsetCount = offIter2 - offIter1;\n let letterSpaceDiff = 0;\n const textCount = textIdx2 - textIdx1;\n widthMap.clear();\n\n if (offsetCount === 0) return { offsetCount, letterSpaceDiff };\n\n if (textCount > offsetCount) widthMap.set(0, textCount - offsetCount);\n addWidthsToHistogram(this.offsets, offIter1, offIter2, widthMap);\n const { width: mostUsedWidth, count: maxCount } = findMostUsedWidth(widthMap);\n\n if (maxCount <= textCount / 2 || (ts.letterSpace * z + mostUsedWidth) <= EPS) {\n for (let oi = offIter1; oi < offIter2; oi++) {\n newOffsets.push({ ...this.offsets[oi] });\n }\n return { offsetCount, letterSpaceDiff };\n }\n\n if (!stateEntry.installed) return { offsetCount, letterSpaceDiff };\n const oldLs = ts.letterSpace * z;\n const lsResult = mgr.letterSpace.installAndSnap(oldLs + mostUsedWidth);\n stateEntry.installed.letterSpaceId = lsResult.id;\n ts.letterSpace = lsResult.snapped / z;\n letterSpaceDiff = oldLs - lsResult.snapped;\n\n let oi = offIter1;\n offsetCount = 0;\n for (let curIdx = textIdx1; curIdx < textIdx2; curIdx++) {\n const curWidth = (oi < offIter2 && this.offsets[oi].startIdx === curIdx + 1)\n ? this.offsets[oi++].width + letterSpaceDiff\n : letterSpaceDiff;\n if (Math.abs(curWidth) > EPS) {\n newOffsets.push({ startIdx: curIdx + 1, width: curWidth });\n offsetCount++;\n }\n }\n\n return { offsetCount, letterSpaceDiff };\n }\n\n private optimizeWordSpace(\n opts: OptimizeSpaceOptions,\n offsetCount: number, letterSpaceDiff: number,\n spaceThreshold: number,\n ): void {\n const { mgr, stateEntry, textIdx1, textIdx2, widthMap, z } = opts;\n if (this.text.slice(textIdx1, textIdx2).includes(0x20)) return;\n if (!stateEntry.installed) return;\n\n const ts = stateEntry.textState;\n if (offsetCount === 0) {\n stateEntry.installed.wordSpaceFree = true;\n return;\n }\n\n const emSize = ts.fontSize * z * (ts.fontAscent - ts.fontDescent);\n const threshold = emSize * spaceThreshold;\n const { width: mostUsedWidth, count: maxCount } = findMostFrequentAboveThreshold(\n widthMap, letterSpaceDiff, threshold,\n );\n\n if (maxCount === 0) {\n stateEntry.installed.wordSpaceFree = true;\n return;\n }\n\n ts.wordSpace = 0;\n const singleSpaceOff = ts.letterSpace * z + (ts.spaceWidth / 1000) * ts.fontSize * z;\n const wsResult = mgr.wordSpace.installAndSnap(mostUsedWidth - singleSpaceOff);\n stateEntry.installed.wordSpaceId = wsResult.id;\n ts.wordSpace = wsResult.snapped / z;\n stateEntry.installed.wordSpaceFree = false;\n }\n\n /**\n * Mirrors HTMLTextLine::dump_text().\n *\n * Produces HTML output matching pdf2htmlEX format:\n * <div class=\"t mN xN yN hN [style classes]\">\n * text<span class=\"_ _N\"> </span>text\n * <span class=\"[diff classes]\">styled text</span>\n * </div>\n */\n dumpText(mgr: AllStateManager, fontRegistry: FontRegistry, hEps: number, spaceThreshold: number, z: number): string {\n if (this.text.length === 0 && this.states.length === 0) return '';\n\n const mId = mgr.transformMatrix.install(this.transformMatrix);\n const xId = mgr.left.install(this.x * z);\n const yId = mgr.bottom.install(this.y * z);\n const hId = mgr.height.install(this.ascent);\n\n const parts: string[] = [];\n\n const divClasses = this.buildDivClasses(mId, xId, yId, hId);\n parts.push(`<div class=\"${divClasses}\">`);\n\n this.emitLineContent(parts, mgr, fontRegistry, hEps, spaceThreshold, z);\n\n parts.push('</div>');\n return parts.join('');\n }\n\n private buildDivClasses(mId: number, xId: number, yId: number, hId: number): string {\n const classes = [`t`, `m${h(mId)}`, `x${h(xId)}`, `y${h(yId)}`, `h${h(hId)}`];\n\n if (this.states.length > 0 && this.states[0].installed) {\n const first = this.states[0].installed;\n const initialClasses = lineStyleDiffClasses(null, first);\n for (const c of initialClasses) {\n classes.push(c);\n }\n }\n\n return classes.join(' ');\n }\n\n // F6: emitLineContent — 1:1 translation of C++ dump_text inner loop\n // (HTMLTextLine.cc:226-293). Interleaves offset and text output with\n // accumulated dx and single_space_offset matching.\n private emitLineContent(\n parts: string[],\n mgr: AllStateManager,\n fontRegistry: FontRegistry,\n hEps: number,\n spaceThreshold: number,\n z: number,\n ): void {\n const stateStack: LineStyleState[] = [];\n\n if (this.states.length > 0 && this.states[0].installed) {\n stateStack.push(this.states[0].installed);\n }\n\n const ctx = { dx: 0, lastTextPosWithNegativeOffset: 0, curTextIdx: 0, curOffsetIdx: 0 };\n\n for (let si = 0; si < this.states.length; si++) {\n const siInstalled = this.states[si].installed;\n if (si > 0 && siInstalled) {\n this.applyGreedyStateChange(\n parts, stateStack, siInstalled, ctx.lastTextPosWithNegativeOffset,\n );\n }\n\n const ts = this.states[si].textState;\n const textIdx2 = si + 1 < this.states.length\n ? (this.states[si + 1].installed?.startIdx ?? this.text.length)\n : this.text.length;\n\n this.emitInterleavedContent(\n parts, ctx,\n { ts, installed: this.states[si].installed, textIdx2 },\n { mgr, hEps, spaceThreshold, z },\n );\n }\n\n for (let i = stateStack.length - 1; i >= 1; i--) {\n parts.push('</span>');\n }\n }\n\n private emitInterleavedOffset(\n parts: string[],\n ctx: { dx: number; lastTextPosWithNegativeOffset: number; curTextIdx: number; curOffsetIdx: number },\n ts: TextState, installed: LineStyleState | null,\n emitCtx: { mgr: AllStateManager; hEps: number; spaceThreshold: number; z: number },\n ): void {\n const target = this.offsets[ctx.curOffsetIdx].width + ctx.dx;\n const result = this.emitOffset(parts, {\n mgr: emitCtx.mgr, ts, installed, target, curTextIdx: ctx.curTextIdx,\n hEps: emitCtx.hEps, spaceThreshold: emitCtx.spaceThreshold, z: emitCtx.z,\n });\n if (result.negativeOffset) ctx.lastTextPosWithNegativeOffset = ctx.curTextIdx;\n ctx.dx = target - result.actualOffset;\n ctx.curOffsetIdx++;\n }\n\n private emitInterleavedContent(\n parts: string[],\n ctx: { dx: number; lastTextPosWithNegativeOffset: number; curTextIdx: number; curOffsetIdx: number },\n stateInfo: { ts: TextState; installed: LineStyleState | null; textIdx2: number },\n emitCtx: { mgr: AllStateManager; hEps: number; spaceThreshold: number; z: number },\n ): void {\n const { ts, installed, textIdx2 } = stateInfo;\n for (;;) {\n const hasOffset = ctx.curOffsetIdx < this.offsets.length &&\n this.offsets[ctx.curOffsetIdx].startIdx <= ctx.curTextIdx;\n if (hasOffset) {\n if (this.offsets[ctx.curOffsetIdx].startIdx > textIdx2) break;\n this.emitInterleavedOffset(parts, ctx, ts, installed, emitCtx);\n } else {\n if (ctx.curTextIdx >= textIdx2) break;\n let nextTextIdx = textIdx2;\n if (ctx.curOffsetIdx < this.offsets.length &&\n this.offsets[ctx.curOffsetIdx].startIdx < nextTextIdx) {\n nextTextIdx = this.offsets[ctx.curOffsetIdx].startIdx;\n }\n this.dumpChars(parts, ctx.curTextIdx, nextTextIdx);\n ctx.curTextIdx = nextTextIdx;\n }\n }\n }\n\n private dumpChars(parts: string[], from: number, to: number): void {\n for (let i = from; i < to; i++) {\n const cp = this.text[i];\n if (cp > 0) {\n parts.push(escapeHtml(String.fromCodePoint(cp)));\n } else if (cp < 0) {\n const decomposed = this.decomposedText[-cp - 1];\n for (const u of decomposed) {\n parts.push(escapeHtml(String.fromCodePoint(u)));\n }\n }\n }\n }\n\n private findStateForIndex(charIdx: number, currentIdx: number): number {\n for (let si = currentIdx + 1; si < this.states.length; si++) {\n const stateStart = this.states[si].installed?.startIdx ?? 0;\n if (stateStart > charIdx) return currentIdx;\n if (stateStart === charIdx) return si;\n }\n return currentIdx;\n }\n\n private emitOffset(\n parts: string[], opts: EmitOffsetOptions,\n ): { actualOffset: number; negativeOffset: boolean } {\n const { mgr, ts, installed, target, hEps, spaceThreshold, z } = opts;\n if (Math.abs(target) <= hEps) return { actualOffset: 0, negativeOffset: false };\n\n if (installed && !installed.wordSpaceFree) {\n const sso = ts.wordSpace * z + ts.letterSpace * z\n + (ts.spaceWidth / 1000) * ts.fontSize * z;\n if (Math.abs(target - sso) <= hEps) {\n parts.push('<span class=\"_\"> </span>');\n return { actualOffset: sso, negativeOffset: false };\n }\n }\n\n const wsResult = mgr.whitespace.installAndSnap(target);\n let negativeOffset = false;\n if (Math.abs(wsResult.snapped) > EPS) {\n if (wsResult.snapped < -EPS) negativeOffset = true;\n const emSize = ts.fontSize * z * (ts.fontAscent - ts.fontDescent);\n const threshold = emSize * spaceThreshold;\n const spaceChar = target > (threshold - EPS) ? ' ' : '';\n parts.push(`<span class=\"_ _${h(wsResult.id)}\">${spaceChar}</span>`);\n }\n return { actualOffset: wsResult.snapped, negativeOffset };\n }\n\n /**\n * Greedy state stack optimization — 1:1 translation of C++ dump_text lines 185-221.\n * Walks stack from back to front, accumulates vertical_align, tracks negative offset guard.\n */\n private applyGreedyStateChange(\n parts: string[],\n stateStack: LineStyleState[],\n newState: LineStyleState,\n lastTextPosWithNegativeOffset: number,\n ): void {\n this.trimStateStack(parts, stateStack, newState, lastTextPosWithNegativeOffset);\n this.pushDiffSpan(parts, stateStack, newState);\n }\n\n private trimStateStack(\n parts: string[], stateStack: LineStyleState[],\n newState: LineStyleState, lastTextPosWithNegativeOffset: number,\n ): void {\n let verticalAlign = newState.verticalAlignIsZero ? 0 : 1;\n let bestCost = HASH_ID_COUNT + 1;\n\n for (let i = stateStack.length - 1; i >= 0; i--) {\n const existing = stateStack[i];\n let cost = this.stateDiffCount(existing, newState);\n if (verticalAlign !== 0) cost++;\n\n if (cost < bestCost) {\n this.popStackTo(parts, stateStack, i);\n bestCost = cost;\n if (bestCost === 0) break;\n }\n\n if (existing.startIdx <= lastTextPosWithNegativeOffset) break;\n if (!existing.verticalAlignIsZero) verticalAlign++;\n }\n }\n\n private popStackTo(parts: string[], stateStack: LineStyleState[], targetIdx: number): void {\n while (stateStack.length - 1 > targetIdx) {\n if (stateStack.length > 1) parts.push('</span>');\n stateStack.pop();\n }\n }\n\n private pushDiffSpan(parts: string[], stateStack: LineStyleState[], newState: LineStyleState): void {\n const prev = stateStack.at(-1) ?? null;\n if (lineStylesEqual(prev, newState)) return;\n const diffClasses = lineStyleDiffClasses(prev, newState);\n if (diffClasses.length > 0) {\n parts.push(`<span class=\"${diffClasses.join(' ')}\">`);\n stateStack.push(newState);\n }\n }\n\n /**\n * C++ State::diff (HTMLTextLine.cc:699-718) — counts DIFFERENCES for common-mask IDs.\n * Only compares IDs where BOTH states care (neither has the ID free/masked).\n */\n private stateDiffCount(a: LineStyleState, b: LineStyleState): number {\n let d = 0;\n if (a.fontId !== b.fontId) d++;\n if (a.fontSizeId !== b.fontSizeId) d++;\n if (a.fillColorId !== b.fillColorId) d++;\n if (a.strokeColorId !== b.strokeColorId) d++;\n if (a.letterSpaceId !== b.letterSpaceId) d++;\n // C++ common_mask: only count if BOTH care (neither free)\n if (!a.wordSpaceFree && !b.wordSpaceFree && a.wordSpaceId !== b.wordSpaceId) d++;\n return d;\n }\n\n private getEmSizeForState(stateIdx: number, z: number): number {\n if (stateIdx < this.states.length) {\n return this.states[stateIdx].textState.fontSize * z;\n }\n return 12 * z;\n }\n\n}\n\n\n// ── Content Stream Processor (mirrors pdf2htmlEX HTMLRenderer) ───────\n\ntype OperatorHandler = (\n op: string,\n operands: ReadonlyArray<string>,\n resources: Record<string, PdfObject>,\n pageWidth: number,\n pageHeight: number,\n) => void;\n\nconst PP_EPS = 1e-6;\n\nconst FILL_BY_RENDER_MODE: ReadonlyArray<boolean> = [true, false, true, false, true, false, true, false];\nconst STROKE_BY_RENDER_MODE: ReadonlyArray<boolean> = [false, true, true, false, false, true, true, false];\n\nconst enum NewLineState {\n NLS_NONE = 0,\n NLS_NEWSTATE = 1,\n NLS_NEWLINE = 2,\n NLS_NEWCLIP = 3,\n}\n\nfunction setLineState(current: NewLineState, target: NewLineState): NewLineState {\n return target > current ? target : current;\n}\n\ninterface ProcessedPage {\n readonly lines: TextLine[];\n readonly pathRects: PathRect[];\n readonly imageItems: ImageItem[];\n readonly annotations: PdfAnnotation[];\n readonly pageWidth: number;\n readonly pageHeight: number;\n readonly initialYScale: number;\n}\n\nconst FONT_SIZE_MULTIPLIER = 4; // pdf2htmlEX default (pdf2htmlEX.cc:185)\n\nclass PixelPerfectProcessor {\n private readonly reader: PdfReader;\n private readonly fontRegistry: FontRegistry;\n private readonly zoom: number;\n private pageHeight = 792;\n // text_scale_factor1/2 from general.cc:326-327\n private readonly textScaleFactor1: number;\n private readonly textScaleFactor2: number;\n\n // PDF graphics state\n private ctm: number[] = [1, 0, 0, 1, 0, 0];\n private textMatrix: number[] = [1, 0, 0, 1, 0, 0];\n private lineMatrix: number[] = [1, 0, 0, 1, 0, 0];\n private fontSize = 0;\n private fontName = '';\n private fillColor = '#000000';\n private strokeColor = '#000000';\n private patternFillImage: string | null = null; // data URL when fill uses a tiling pattern with image\n private fillColorSpaceIsPattern = false;\n private charSpace = 0;\n private wordSpace = 0;\n private horizScaling = 1;\n private rise = 0;\n private renderMode = 0;\n private leading = 0;\n private lineWidth = 1;\n\n // Derived state (mirrors C++ draw_* variables)\n private drawTextScale = 1;\n private drawTx = 0;\n private drawTy = 0;\n private curTx = 0;\n private curTy = 0;\n private curFontSize = 0;\n private curTextTm: number[] = [1, 0, 0, 1, 0, 0];\n\n // State from before current checkStateChange\n private prevDrawTextScale = 1;\n private prevTextTm: number[] = [1, 0, 0, 1, 0, 0];\n\n // HTML state (mirrors C++ cur_text_state / cur_line_state)\n private curTransformMatrix: readonly [number, number, number, number] = [1, 0, 0, 1];\n private prevTransformMatrix: readonly [number, number, number, number] = [1, 0, 0, 1];\n private curLetterSpace = 0;\n private curWordSpace = 0;\n private curFillColor = '#000000';\n private curStrokeColor = '#000000';\n private curVerticalAlign = 0;\n\n // Change flags\n private allChanged = true;\n private fontChanged = false;\n private ctmChanged = false;\n private textMatChanged = false;\n private horizScaleChanged = false;\n private riseChanged = false;\n private fillColorChanged = false;\n private strokeColorChanged = false;\n private letterSpaceChanged = false;\n private wordSpaceChanged = false;\n\n // State stack for q/Q\n private readonly stateStack: Array<{\n ctm: number[]; fillColor: string; strokeColor: string;\n lineWidth: number; fontSize: number; fontName: string;\n charSpace: number; wordSpace: number; horizScaling: number;\n rise: number; renderMode: number; leading: number;\n textMatrix: number[]; lineMatrix: number[];\n }> = [];\n\n // Font info cache per resource name\n private fontInfoMap = new Map<string, FontInfo>();\n\n // Line tracking\n private currentLine: TextLine | null = null;\n private readonly lines: TextLine[] = [];\n private currentFontInfo: FontInfo | undefined;\n\n // Graphics tracking\n private readonly pathRects: PathRect[] = [];\n private readonly imageItems: ImageItem[] = [];\n /** Form XObjects being drawn on the current page; a fresh one per page. */\n private formDraws: DrawPath<PdfObject>;\n private pathPoints: number[] = [];\n private readonly generalPathPoints: Array<{ tx: number; ty: number }> = [];\n\n constructor(reader: PdfReader, fontRegistry: FontRegistry, zoom: number) {\n this.reader = reader;\n this.fontRegistry = fontRegistry;\n this.zoom = zoom;\n this.formDraws = this.newFormDraws();\n // general.cc:326-327: text_scale_factor1 = max(zoom, font_size_multiplier)\n this.textScaleFactor1 = Math.max(zoom, FONT_SIZE_MULTIPLIER);\n this.textScaleFactor2 = zoom / this.textScaleFactor1;\n }\n\n private newFormDraws(): DrawPath<PdfObject> {\n const { maxNestingDepth, maxFormDrawsPerPage } = this.reader.limits;\n return new DrawPath(maxNestingDepth, maxFormDrawsPerPage);\n }\n\n processPage(pageObj: PdfObject, _pageIndex: number): ProcessedPage {\n this.resetState();\n this.formDraws = this.newFormDraws();\n this.lines.length = 0;\n this.pathRects.length = 0;\n this.imageItems.length = 0;\n\n const pageDict = this.reader.getDict(pageObj);\n const mediaBox = getPageMediaBox(this.reader, pageDict);\n let pageWidth = Math.abs(mediaBox[2] - mediaBox[0]);\n let pageHeight = Math.abs(mediaBox[3] - mediaBox[1]);\n this.pageHeight = pageHeight;\n this.initialYScale = 0;\n\n const rotation = pageDict['Rotate'] ? this.reader.getNumber(pageDict['Rotate']) : 0;\n if (rotation === 90 || rotation === 270) {\n [pageWidth, pageHeight] = [pageHeight, pageWidth];\n }\n\n // Build font info map from page resources\n const resources = this.resolveResources(pageDict);\n const fontDict = resources['Font'] ? this.reader.getDict(resources['Font']) : {};\n for (const [name, ref] of Object.entries(fontDict)) {\n this.fontRegistry.registerFont(this.reader, name, ref);\n this.fontInfoMap.set(name, buildFontInfo(this.reader, ref));\n }\n\n // Get and process content stream\n const contentData = this.resolveContentData(pageDict);\n if (contentData.length > 0) {\n const tokens = tokenizeContentStream(contentData);\n this.dispatchOperators(tokens, resources, pageWidth, pageHeight);\n }\n\n // Finalize last line\n if (this.currentLine && this.currentLine.text.length > 0) {\n this.lines.push(this.currentLine);\n }\n\n // Extract annotations\n const annotations = this.extractAnnotations(pageDict, pageHeight);\n\n return {\n lines: [...this.lines],\n pathRects: [...this.pathRects],\n imageItems: [...this.imageItems],\n annotations,\n pageWidth,\n pageHeight,\n initialYScale: this.initialYScale,\n };\n }\n\n private resetState(): void {\n this.ctm = [1, 0, 0, 1, 0, 0];\n this.textMatrix = [1, 0, 0, 1, 0, 0];\n this.lineMatrix = [1, 0, 0, 1, 0, 0];\n this.fontSize = 0;\n this.fontName = '';\n this.fillColor = '#000000';\n this.strokeColor = '#000000';\n this.charSpace = 0;\n this.wordSpace = 0;\n this.horizScaling = 1;\n this.rise = 0;\n this.renderMode = 0;\n this.leading = 0;\n this.lineWidth = 1;\n this.drawTextScale = 1;\n this.drawTx = 0;\n this.drawTy = 0;\n this.curTx = 0;\n this.curTy = 0;\n this.curFontSize = 0;\n this.curTextTm = [1, 0, 0, 1, 0, 0];\n this.prevTextTm = [1, 0, 0, 1, 0, 0];\n this.prevDrawTextScale = 1;\n this.curTransformMatrix = [1, 0, 0, 1];\n this.prevTransformMatrix = [1, 0, 0, 1];\n this.curLetterSpace = 0;\n this.curWordSpace = 0;\n this.curFillColor = '#000000';\n this.curStrokeColor = '#000000';\n this.curVerticalAlign = 0;\n this.allChanged = true;\n this.fontChanged = false;\n this.ctmChanged = false;\n this.textMatChanged = false;\n this.horizScaleChanged = false;\n this.riseChanged = false;\n this.fillColorChanged = false;\n this.strokeColorChanged = false;\n this.letterSpaceChanged = false;\n this.wordSpaceChanged = false;\n this.stateStack.length = 0;\n this.fontInfoMap = new Map();\n this.currentLine = null;\n this.currentFontInfo = undefined;\n this.pathPoints = [];\n }\n\n // ── check_state_change (state.cc:168-494) ────────────────────────\n\n private checkStateChange(): NewLineState {\n let nls = NewLineState.NLS_NONE;\n let needRescaleFont = false;\n let needRecheckPosition = false;\n let drawTextScaleChanged = false;\n\n // Save previous state for position merge\n const oldTm = [...this.curTextTm];\n const oldDrawTextScale = this.drawTextScale;\n this.prevTransformMatrix = this.curTransformMatrix;\n this.prevTextTm = oldTm;\n this.prevDrawTextScale = oldDrawTextScale;\n\n // Font change (state.cc:208-239)\n if (this.allChanged || this.fontChanged) {\n const newFontInfo = this.fontInfoMap.get(this.fontName);\n if (!this.currentFontInfo || newFontInfo !== this.currentFontInfo) {\n nls = setLineState(nls, NewLineState.NLS_NEWSTATE);\n }\n this.currentFontInfo = newFontInfo;\n needRescaleFont = true;\n this.fontChanged = false;\n }\n\n // Transform matrix change (state.cc:242-264)\n if (this.allChanged || this.ctmChanged || this.textMatChanged ||\n this.horizScaleChanged || this.riseChanged) {\n const scaleMat = [this.horizScaling, 0, 0, 1, 0, this.rise];\n const m2 = multiplyMatrix(this.ctm, this.textMatrix);\n const newTextTm = multiplyMatrix(m2, scaleMat);\n\n if (!tmEqual(newTextTm, this.curTextTm, 6, PP_EPS)) {\n needRecheckPosition = true;\n needRescaleFont = true;\n this.curTextTm = newTextTm;\n }\n this.ctmChanged = false;\n this.textMatChanged = false;\n this.horizScaleChanged = false;\n this.riseChanged = false;\n }\n\n if (needRescaleFont) {\n const rescaleResult = this.rescaleFont(nls);\n nls = rescaleResult.nls;\n drawTextScaleChanged = rescaleResult.drawTextScaleChanged;\n }\n\n // First text on page forces new line\n if (this.allChanged) {\n nls = setLineState(nls, NewLineState.NLS_NEWLINE);\n this.allChanged = false;\n }\n\n // Position merging (state.cc:327-411)\n if (needRecheckPosition && nls < NewLineState.NLS_NEWLINE) {\n nls = this.tryMergePosition(nls, oldTm, oldDrawTextScale);\n }\n\n nls = this.checkSpacingAndColorChanges(nls, drawTextScaleChanged);\n\n return nls;\n }\n\n private rescaleFont(nls: NewLineState): { nls: NewLineState; drawTextScaleChanged: boolean } {\n const newDrawTm = [...this.curTextTm];\n let newDrawTextScale = (1 / this.textScaleFactor2) *\n Math.hypot(newDrawTm[2], newDrawTm[3]);\n let newDrawFontSize = this.fontSize;\n let drawTextScaleChanged = false;\n\n if (newDrawTextScale > PP_EPS) {\n newDrawFontSize *= newDrawTextScale;\n for (let i = 0; i < 4; i++) newDrawTm[i] /= newDrawTextScale;\n } else {\n newDrawTextScale = 1;\n }\n\n if (newDrawFontSize < -PP_EPS) {\n newDrawFontSize *= -1;\n for (let i = 0; i < 4; i++) newDrawTm[i] *= -1;\n }\n\n if (Math.abs(newDrawTextScale - this.drawTextScale) > PP_EPS) {\n drawTextScaleChanged = true;\n this.drawTextScale = newDrawTextScale;\n }\n\n if (Math.abs(newDrawFontSize - this.curFontSize) > PP_EPS) {\n nls = setLineState(nls, NewLineState.NLS_NEWSTATE);\n this.curFontSize = newDrawFontSize;\n }\n\n const newTm: readonly [number, number, number, number] =\n [newDrawTm[0], newDrawTm[1], newDrawTm[2], newDrawTm[3]];\n if (!tmEqual(\n [newTm[0], newTm[1], newTm[2], newTm[3]],\n [this.curTransformMatrix[0], this.curTransformMatrix[1],\n this.curTransformMatrix[2], this.curTransformMatrix[3]],\n 4, PP_EPS,\n )) {\n nls = setLineState(nls, NewLineState.NLS_NEWLINE);\n this.curTransformMatrix = newTm;\n }\n\n return { nls, drawTextScaleChanged };\n }\n\n private checkSpacingAndColorChanges(nls: NewLineState, drawTextScaleChanged: boolean): NewLineState {\n if (this.allChanged || this.letterSpaceChanged || drawTextScaleChanged) {\n const newLs = this.charSpace * this.drawTextScale;\n if (Math.abs(newLs - this.curLetterSpace) > PP_EPS) {\n this.curLetterSpace = newLs;\n nls = setLineState(nls, NewLineState.NLS_NEWSTATE);\n }\n this.letterSpaceChanged = false;\n }\n\n if (this.allChanged || this.wordSpaceChanged || drawTextScaleChanged) {\n const newWs = this.wordSpace * this.drawTextScale;\n if (Math.abs(newWs - this.curWordSpace) > PP_EPS) {\n this.curWordSpace = newWs;\n nls = setLineState(nls, NewLineState.NLS_NEWSTATE);\n }\n this.wordSpaceChanged = false;\n }\n\n nls = this.checkColorChanges(nls);\n return nls;\n }\n\n private checkColorChanges(nls: NewLineState): NewLineState {\n if (this.fillColorChanged) {\n const newFill = FILL_BY_RENDER_MODE[this.renderMode] ? this.fillColor : 'transparent';\n if (newFill !== this.curFillColor) {\n this.curFillColor = newFill;\n nls = setLineState(nls, NewLineState.NLS_NEWSTATE);\n }\n this.fillColorChanged = false;\n }\n\n if (this.strokeColorChanged) {\n const newStroke = STROKE_BY_RENDER_MODE[this.renderMode] ? this.strokeColor : 'transparent';\n if (newStroke !== this.curStrokeColor) {\n this.curStrokeColor = newStroke;\n nls = setLineState(nls, NewLineState.NLS_NEWSTATE);\n }\n this.strokeColorChanged = false;\n }\n\n return nls;\n }\n\n // Position merge logic (state.cc:327-411)\n private tryMergePosition(\n nls: NewLineState, oldTm: readonly number[], oldDrawTextScale: number,\n ): NewLineState {\n if (!tmEqual(\n [this.prevTransformMatrix[0], this.prevTransformMatrix[1],\n this.prevTransformMatrix[2], this.prevTransformMatrix[3]],\n [this.curTransformMatrix[0], this.curTransformMatrix[1],\n this.curTransformMatrix[2], this.curTransformMatrix[3]],\n 4, PP_EPS,\n )) {\n return setLineState(nls, NewLineState.NLS_NEWLINE);\n }\n\n const det = oldTm[0] * oldTm[3] - oldTm[1] * oldTm[2];\n if (Math.abs(det) <= PP_EPS) {\n return setLineState(nls, NewLineState.NLS_NEWLINE);\n }\n\n const lhs1 = this.curTextTm[0] * this.curTx + this.curTextTm[2] * this.curTy + this.curTextTm[4]\n - oldTm[0] * this.drawTx - oldTm[2] * this.drawTy - oldTm[4];\n const lhs2 = this.curTextTm[1] * this.curTx + this.curTextTm[3] * this.curTy + this.curTextTm[5]\n - oldTm[1] * this.drawTx - oldTm[3] * this.drawTy - oldTm[5];\n\n const dx = (lhs1 * oldTm[3] - lhs2 * oldTm[2]) / det;\n const dy = (lhs2 * oldTm[0] - lhs1 * oldTm[1]) / det;\n\n\n const merged = Math.abs(dy) <= PP_EPS ||\n this.canMergeVertically(dx, dy, oldDrawTextScale);\n\n if (merged && Math.abs(this.horizScaling) > PP_EPS) {\n const offset = dx * oldDrawTextScale / this.horizScaling * this.zoom;\n if (this.currentLine && Math.abs(offset) > PP_EPS) {\n this.currentLine.appendOffset(offset);\n }\n if (Math.abs(dy) <= PP_EPS) {\n this.curVerticalAlign = 0;\n } else {\n this.curVerticalAlign = dy * oldDrawTextScale;\n nls = setLineState(nls, NewLineState.NLS_NEWSTATE);\n }\n this.drawTx = this.curTx;\n this.drawTy = this.curTy;\n return nls;\n }\n\n return setLineState(nls, NewLineState.NLS_NEWLINE);\n }\n\n private canMergeVertically(dx: number, dy: number, oldDrawTextScale: number): boolean {\n const entry = this.fontRegistry.getEntry(this.fontName);\n const descent = entry?.descent ?? -0.2;\n const ascent = entry?.ascent ?? 0.8;\n const emSize = this.curFontSize * (ascent - descent);\n if ((dx * oldDrawTextScale) < -SPACE_THRESHOLD * emSize - PP_EPS) return false;\n const oldAscent = ascent * this.curFontSize;\n const oldDescent = descent * this.curFontSize;\n const newAscent = dy * oldDrawTextScale + ascent * this.curFontSize;\n const newDescent = dy * oldDrawTextScale + descent * this.curFontSize;\n return newDescent <= oldAscent + PP_EPS && newAscent >= oldDescent - PP_EPS;\n }\n\n // ── prepare_text_line (state.cc:496-540) ─────────────────────────\n\n private prepareTextLine(nlState: NewLineState): void {\n if (!this.currentLine) {\n nlState = NewLineState.NLS_NEWCLIP;\n }\n\n if (nlState >= NewLineState.NLS_NEWLINE) {\n // Open new line\n const pos = transformPoint(this.curTx, this.curTy, this.curTextTm);\n if (this.currentLine && this.currentLine.text.length > 0) {\n this.lines.push(this.currentLine);\n }\n this.currentLine = new TextLine();\n this.currentLine.x = pos.tx;\n this.currentLine.y = pos.ty;\n this.currentLine.transformMatrix = this.curTransformMatrix;\n this.curVerticalAlign = 0;\n this.drawTx = this.curTx;\n this.drawTy = this.curTy;\n } else if (this.currentLine) {\n // Merge: append horizontal offset if needed\n const target = (this.curTx - this.drawTx) * this.drawTextScale * this.zoom;\n if (Math.abs(target) > PP_EPS) {\n this.currentLine.appendOffset(target);\n this.drawTx += target / (this.drawTextScale * this.zoom);\n }\n }\n\n // Append state if changed\n if (nlState !== NewLineState.NLS_NONE && this.currentLine) {\n const ts = this.buildTextState();\n this.currentLine.appendState(ts);\n this.updateLastStateStartIdx();\n }\n }\n\n // ── drawString (text.cc:26-187) ──────────────────────────────────\n\n private drawString(rawString: string): void {\n if (rawString.length === 0) return;\n\n const nlState = this.checkStateChange();\n this.prepareTextLine(nlState);\n\n if (!this.currentLine) return;\n\n const fi = this.currentFontInfo;\n const { charCodes, unicodes } = pdfStringToCharacters(rawString, fi);\n const isTwoByte = fi?.isTwoByte ?? false;\n\n let dx = 0;\n for (let i = 0; i < charCodes.length; i++) {\n dx += this.processDrawChar(charCodes[i], unicodes[i], fi, isTwoByte);\n }\n\n this.curTx += dx;\n this.drawTx += dx;\n }\n\n private processDrawChar(code: number, unicode: string, fi: FontInfo | undefined, isTwoByte: boolean): number {\n if (!this.currentLine) return 0;\n const w = fi ? (fi.widths.get(code) ?? fi.defaultWidth) : 1000;\n const ddx = (w / 1000) * this.fontSize + this.charSpace;\n const isSpace = !isTwoByte && code === 0x20;\n const charWidth = ddx * this.drawTextScale * this.zoom;\n\n let cp = unicode.codePointAt(0) ?? code;\n const fixup = this.fontRegistry.getGlyphFixup(this.fontName, code);\n if (fixup !== undefined) cp = fixup;\n this.currentLine.appendUnicodes([cp], charWidth);\n\n const isUnicodeSpace = cp === 0x20;\n const spaceCount = (isSpace ? 1 : 0) - (isUnicodeSpace ? 1 : 0);\n if (spaceCount !== 0) {\n this.currentLine.appendOffset(\n this.wordSpace * this.drawTextScale * this.zoom * spaceCount,\n );\n }\n\n let advance = ddx * this.horizScaling;\n if (isSpace) advance += this.wordSpace * this.horizScaling;\n return advance;\n }\n\n // ── Operator Dispatch ────────────────────────────────────────────\n\n private dispatchOperators(\n tokens: ReadonlyArray<string>,\n resources: Record<string, PdfObject>,\n pageWidth: number,\n pageHeight: number,\n ): void {\n const operandStack: string[] = [];\n\n for (const tok of tokens) {\n\n // Operand: push to stack (strings start with '(', names with '/', numbers, etc.)\n if (this.isOperand(tok)) {\n operandStack.push(tok);\n continue;\n }\n\n // Operator: dispatch\n this.executeOperator(tok, operandStack, resources, pageWidth, pageHeight);\n operandStack.length = 0;\n }\n }\n\n private isOperand(tok: string): boolean {\n if (tok.startsWith('(') || tok.startsWith('/') || tok === '[' || tok === ']' ||\n tok === '<<' || tok === '>>') return true;\n if (tok === 'true' || tok === 'false' || tok === 'null') return true;\n const c = tok.codePointAt(0) ?? 0;\n // Numbers: digit, sign, or decimal point\n return (c >= 0x30 && c <= 0x39) || c === 0x2D || c === 0x2B || c === 0x2E;\n }\n\n private operatorMap: Map<string, OperatorHandler> | null = null;\n\n private registerGraphicsStateOps(m: Map<string, OperatorHandler>, noop: OperatorHandler): void {\n m.set('q', () => this.saveState());\n m.set('Q', () => this.restoreState());\n m.set('cm', (_op, ops) => this.opCm(ops));\n m.set('w', (_op, ops) => { if (ops.length >= 1) this.lineWidth = Number.parseFloat(ops[0]); });\n m.set('g', (_op, ops) => { this.fillColor = grayToHex(Number.parseFloat(ops[0] ?? '0')); this.fillColorChanged = true; });\n m.set('G', (_op, ops) => { this.strokeColor = grayToHex(Number.parseFloat(ops[0] ?? '0')); this.strokeColorChanged = true; });\n m.set('rg', (_op, ops) => this.opRg(ops, true));\n m.set('RG', (_op, ops) => this.opRg(ops, false));\n m.set('k', (_op, ops) => this.opK(ops, true));\n m.set('K', (_op, ops) => this.opK(ops, false));\n m.set('cs', (_op, ops, res) => this.opCs(ops, res));\n m.set('CS', (_op, ops, res) => this.opCs(ops, res));\n m.set('sc', (op, ops, res) => this.opSc(ops, op === 'sc' || op === 'scn', res));\n m.set('SC', (op, ops, res) => this.opSc(ops, op === 'sc' || op === 'scn', res));\n m.set('scn', (op, ops, res) => this.opSc(ops, op === 'sc' || op === 'scn', res));\n m.set('SCN', (op, ops, res) => this.opSc(ops, op === 'sc' || op === 'scn', res));\n m.set('Do', (_op, ops, res, pw, ph) => this.opDo(ops, res, pw, ph));\n m.set('gs', (_op, ops, res) => this.opGs(ops, res));\n for (const name of ['BMC', 'BDC', 'EMC', 'MP', 'DP', 'BI']) m.set(name, noop);\n }\n\n private registerTextOps(m: Map<string, OperatorHandler>, noop: OperatorHandler): void {\n m.set('Tf', (_op, ops) => this.opTf(ops));\n m.set('Tc', (_op, ops) => { this.charSpace = Number.parseFloat(ops[0] ?? '0'); this.letterSpaceChanged = true; });\n m.set('Tw', (_op, ops) => { this.wordSpace = Number.parseFloat(ops[0] ?? '0'); this.wordSpaceChanged = true; });\n m.set('Tz', (_op, ops) => { this.horizScaling = Number.parseFloat(ops[0] ?? '100') / 100; this.horizScaleChanged = true; });\n m.set('TL', (_op, ops) => { this.leading = Number.parseFloat(ops[0] ?? '0'); });\n m.set('Tr', (_op, ops) => { this.renderMode = Number.parseInt(ops[0] ?? '0', 10); this.fillColorChanged = true; this.strokeColorChanged = true; });\n m.set('Ts', (_op, ops) => { this.rise = Number.parseFloat(ops[0] ?? '0'); this.riseChanged = true; });\n m.set('BT', () => this.opBT());\n m.set('ET', noop);\n m.set('Td', (_op, ops) => this.opTd(ops));\n m.set('TD', (_op, ops) => this.opTD(ops));\n m.set('Tm', (_op, ops) => this.opTm(ops));\n m.set('T*', () => this.opTStar());\n m.set('Tj', (_op, ops) => this.opTj(ops));\n m.set('TJ', (_op, ops) => this.opTJ(ops));\n m.set('\\'', (_op, ops) => { this.opTStar(); this.opTj(ops); });\n m.set('\"', (_op, ops) => this.opQuoteDbl(ops));\n }\n\n private registerPathOps(m: Map<string, OperatorHandler>, noop: OperatorHandler): void {\n m.set('re', (_op, ops) => this.opRe(ops));\n m.set('m', (_op, ops) => this.opPathMove(ops));\n m.set('l', (_op, ops) => this.opPathLine(ops));\n m.set('c', (_op, ops) => this.opPathCurve(ops));\n m.set('v', (_op, ops) => this.opPathCurve2Points(ops));\n m.set('y', (_op, ops) => this.opPathCurve2Points(ops));\n m.set('h', noop);\n m.set('S', () => this.paintPath(true, false));\n m.set('s', () => this.paintPath(true, false));\n m.set('f', () => this.paintPath(false, true));\n m.set('F', () => this.paintPath(false, true));\n m.set('f*', () => this.paintPath(false, true));\n m.set('B', () => this.paintPath(true, true));\n m.set('B*', () => this.paintPath(true, true));\n m.set('b', () => this.paintPath(true, true));\n m.set('b*', () => this.paintPath(true, true));\n m.set('n', () => { this.pathPoints = []; this.generalPathPoints.length = 0; });\n }\n\n private getOperatorMap(): Map<string, OperatorHandler> {\n if (this.operatorMap) return this.operatorMap;\n const noop: OperatorHandler = () => { /* no-op */ };\n const m = new Map<string, OperatorHandler>();\n this.registerGraphicsStateOps(m, noop);\n this.registerTextOps(m, noop);\n this.registerPathOps(m, noop);\n this.operatorMap = m;\n return m;\n }\n\n private executeOperator(\n op: string,\n operands: ReadonlyArray<string>,\n resources: Record<string, PdfObject>,\n pageWidth: number,\n pageHeight: number,\n ): void {\n const handler = this.getOperatorMap().get(op);\n if (handler) handler(op, operands, resources, pageWidth, pageHeight);\n }\n\n // ── Operator implementations ─────────────────────────────────────\n\n private saveState(): void {\n this.stateStack.push({\n ctm: [...this.ctm], fillColor: this.fillColor, strokeColor: this.strokeColor,\n lineWidth: this.lineWidth, fontSize: this.fontSize, fontName: this.fontName,\n charSpace: this.charSpace, wordSpace: this.wordSpace, horizScaling: this.horizScaling,\n rise: this.rise, renderMode: this.renderMode, leading: this.leading,\n textMatrix: [...this.textMatrix], lineMatrix: [...this.lineMatrix],\n });\n }\n\n private restoreState(): void {\n const saved = this.stateStack.pop();\n if (!saved) return;\n this.ctm = saved.ctm; this.ctmChanged = true;\n this.fillColor = saved.fillColor; this.fillColorChanged = true;\n this.strokeColor = saved.strokeColor; this.strokeColorChanged = true;\n this.lineWidth = saved.lineWidth;\n this.fontSize = saved.fontSize; this.fontName = saved.fontName; this.fontChanged = true;\n this.charSpace = saved.charSpace; this.letterSpaceChanged = true;\n this.wordSpace = saved.wordSpace; this.wordSpaceChanged = true;\n this.horizScaling = saved.horizScaling; this.horizScaleChanged = true;\n this.rise = saved.rise; this.riseChanged = true;\n this.renderMode = saved.renderMode;\n this.leading = saved.leading;\n this.textMatrix = saved.textMatrix; this.lineMatrix = saved.lineMatrix;\n this.textMatChanged = true;\n }\n\n private initialYScale = 0;\n\n private opCm(operands: ReadonlyArray<string>): void {\n if (operands.length < 6) return;\n const m = operands.map(Number.parseFloat);\n // Detect Y-flip on the FIRST cm that has negative d-component.\n // Store the absolute d value as the initial Y scale factor for\n // coordinate correction in assemblePageHtml.\n if (this.initialYScale === 0 && m[3] < 0 && m[1] === 0 && m[2] === 0) {\n this.initialYScale = Math.abs(m[3]);\n }\n this.ctm = multiplyMatrix(this.ctm, m);\n this.ctmChanged = true;\n }\n\n private opRg(operands: ReadonlyArray<string>, isFill: boolean): void {\n if (operands.length < 3) return;\n const hex = rgbToHex(\n Number.parseFloat(operands[0]),\n Number.parseFloat(operands[1]),\n Number.parseFloat(operands[2]),\n );\n if (isFill) { this.fillColor = hex; this.fillColorChanged = true; }\n else { this.strokeColor = hex; this.strokeColorChanged = true; }\n }\n\n private opK(operands: ReadonlyArray<string>, isFill: boolean): void {\n if (operands.length < 4) return;\n const hex = cmykToHex(\n Number.parseFloat(operands[0]), Number.parseFloat(operands[1]),\n Number.parseFloat(operands[2]), Number.parseFloat(operands[3]),\n );\n if (isFill) { this.fillColor = hex; this.fillColorChanged = true; }\n else { this.strokeColor = hex; this.strokeColorChanged = true; }\n }\n\n private opCs(operands: ReadonlyArray<string>, _resources: Record<string, PdfObject>): void {\n const name = operands[0]?.startsWith('/') ? operands[0].substring(1) : operands[0] ?? '';\n this.fillColorSpaceIsPattern = name === 'Pattern';\n if (!this.fillColorSpaceIsPattern) this.patternFillImage = null;\n }\n\n private extractPatternImage(patternName: string, resources: Record<string, PdfObject>): string | null {\n const patterns = resources['Pattern'] ? this.reader.getDict(resources['Pattern']) : {};\n const patRef = patterns[patternName];\n if (!patRef) return null;\n const patDict = this.reader.getDict(patRef);\n // Only handle tiling patterns with image XObjects\n const patType = patDict['PatternType'] ? this.reader.getNumber(patDict['PatternType']) : 0;\n if (patType !== 1) return null;\n const patRes = patDict['Resources'] ? this.reader.getDict(patDict['Resources']) : {};\n const patXObj = patRes['XObject'] ? this.reader.getDict(patRes['XObject']) : {};\n for (const [, imgRef] of Object.entries(patXObj)) {\n const imgDict = this.reader.getDict(imgRef);\n const subtype = this.reader.getString(imgDict['Subtype']);\n if (subtype !== 'Image') continue;\n const w = this.reader.getNumber(imgDict['Width']);\n const h = this.reader.getNumber(imgDict['Height']);\n if (w <= 0 || h <= 0) continue;\n const resolved = this.reader.resolveDeep(imgRef);\n const filterName = resolveImageFilterName(this.reader, imgDict);\n return buildImageDataUrl(filterName, resolved, this.reader, w, h, imgDict);\n }\n return null;\n }\n\n private applyFillColor(hex: string): void {\n this.fillColor = hex;\n this.fillColorChanged = true;\n }\n\n private applyStrokeColor(hex: string): void {\n this.strokeColor = hex;\n this.strokeColorChanged = true;\n }\n\n private tryApplyPatternFill(operands: ReadonlyArray<string>, resources: Record<string, PdfObject>): boolean {\n if (!this.fillColorSpaceIsPattern) return false;\n const name = operands[0].startsWith('/') ? operands[0].substring(1) : operands[0];\n const img = this.extractPatternImage(name, resources);\n if (!img) return false;\n this.patternFillImage = img;\n return true;\n }\n\n private opSc(operands: ReadonlyArray<string>, isFill: boolean, resources: Record<string, PdfObject>): void {\n if (operands.length >= 3) {\n const hex = rgbToHex(\n Number.parseFloat(operands[0]),\n Number.parseFloat(operands[1]),\n Number.parseFloat(operands[2]),\n );\n if (isFill) this.applyFillColor(hex); else this.applyStrokeColor(hex);\n return;\n }\n if (operands.length < 1) return;\n if (isFill && this.tryApplyPatternFill(operands, resources)) return;\n const hex = grayToHex(Number.parseFloat(operands[0]));\n if (isFill) this.applyFillColor(hex); else this.applyStrokeColor(hex);\n }\n\n private opTf(operands: ReadonlyArray<string>): void {\n if (operands.length < 2) return;\n const name = operands[0].startsWith('/') ? operands[0].substring(1) : operands[0];\n this.fontName = name;\n this.fontSize = Number.parseFloat(operands[1]);\n this.fontChanged = true;\n }\n\n private opBT(): void {\n // BT resets text matrix to identity (PDF spec 9.4.1).\n // Critical: sync drawTx/drawTy with the OUTPUT position of the previous text\n // so tryMergePosition computes correct small offsets between BT blocks,\n // not huge negatives from stale curTx/drawTx values.\n // The curTextTm * (curTx, curTy) gives the current output position;\n // after resetting textMatrix, curTx=0 maps through the new identity matrix.\n // We must set drawTx/drawTy so that oldTm * (drawTx, drawTy) + oldTm[4,5]\n // equals curTextTm * (curTx, curTy) + curTextTm[4,5] from before the reset.\n this.drawTx = this.curTx;\n this.drawTy = this.curTy;\n this.textMatrix = [1, 0, 0, 1, 0, 0];\n this.lineMatrix = [1, 0, 0, 1, 0, 0];\n this.curTx = 0;\n this.curTy = 0;\n this.textMatChanged = true;\n }\n\n private opTd(operands: ReadonlyArray<string>): void {\n if (operands.length < 2) return;\n const tx = Number.parseFloat(operands[0]);\n const ty = Number.parseFloat(operands[1]);\n this.lineMatrix = multiplyMatrix([1, 0, 0, 1, tx, ty], this.lineMatrix);\n this.textMatrix = [...this.lineMatrix];\n this.curTx = 0;\n this.curTy = 0;\n this.textMatChanged = true;\n }\n\n private opTD(operands: ReadonlyArray<string>): void {\n if (operands.length < 2) return;\n this.leading = -Number.parseFloat(operands[1]);\n this.opTd(operands);\n }\n\n private opTm(operands: ReadonlyArray<string>): void {\n if (operands.length < 6) return;\n const m = operands.map(Number.parseFloat);\n this.textMatrix = m;\n this.lineMatrix = [...m];\n this.curTx = 0;\n this.curTy = 0;\n this.textMatChanged = true;\n }\n\n private opTStar(): void {\n this.opTd(['0', (-this.leading).toString()]);\n }\n\n private opTj(operands: ReadonlyArray<string>): void {\n if (operands.length < 1) return;\n const raw = operands[0];\n if (raw.startsWith('(') && raw.endsWith(')')) {\n this.drawString(raw.substring(1, raw.length - 1));\n }\n }\n\n private opTJ(operands: ReadonlyArray<string>): void {\n // Parse TJ array from operand stack\n // Operands contain the tokens between [ and ]\n for (const tok of operands) {\n if (tok.startsWith('(') && tok.endsWith(')')) {\n this.drawString(tok.substring(1, tok.length - 1));\n } else if (tok !== '[' && tok !== ']') {\n const kern = Number.parseFloat(tok);\n if (!Number.isNaN(kern) && Math.abs(kern) > PP_EPS) {\n // TJ kern: subtract from text position (PDF spec 9.4.4)\n const displacement = (kern / 1000) * this.fontSize;\n this.textMatrix[4] -= displacement * this.horizScaling;\n this.textMatChanged = true;\n }\n }\n }\n }\n\n private opQuoteDbl(operands: ReadonlyArray<string>): void {\n if (operands.length < 3) return;\n this.wordSpace = Number.parseFloat(operands[0]);\n this.wordSpaceChanged = true;\n this.charSpace = Number.parseFloat(operands[1]);\n this.letterSpaceChanged = true;\n this.opTStar();\n this.opTj([operands[2]]);\n }\n\n private opRe(operands: ReadonlyArray<string>): void {\n if (operands.length < 4) return;\n this.pathPoints = operands.map(Number.parseFloat);\n }\n\n private opPathMove(operands: ReadonlyArray<string>): void {\n if (operands.length < 2) return;\n const x = Number.parseFloat(operands[0]);\n const y = Number.parseFloat(operands[1]);\n const p = transformPoint(x, y, this.ctm);\n this.generalPathPoints.push(p);\n }\n\n private opPathLine(operands: ReadonlyArray<string>): void {\n if (operands.length < 2) return;\n const p = transformPoint(Number.parseFloat(operands[0]), Number.parseFloat(operands[1]), this.ctm);\n this.generalPathPoints.push(p);\n }\n\n private opPathCurve(operands: ReadonlyArray<string>): void {\n if (operands.length < 6) return;\n this.generalPathPoints.push(\n transformPoint(Number.parseFloat(operands[0]), Number.parseFloat(operands[1]), this.ctm),\n transformPoint(Number.parseFloat(operands[2]), Number.parseFloat(operands[3]), this.ctm),\n transformPoint(Number.parseFloat(operands[4]), Number.parseFloat(operands[5]), this.ctm),\n );\n }\n\n private opPathCurve2Points(operands: ReadonlyArray<string>): void {\n if (operands.length < 4) return;\n this.generalPathPoints.push(\n transformPoint(Number.parseFloat(operands[0]), Number.parseFloat(operands[1]), this.ctm),\n transformPoint(Number.parseFloat(operands[2]), Number.parseFloat(operands[3]), this.ctm),\n );\n }\n\n private paintPath(stroked: boolean, filled: boolean): void {\n if (this.tryPaintPatternFill(filled)) return;\n\n const scaledLineWidth = this.lineWidth;\n this.emitReRect(stroked, filled, scaledLineWidth);\n this.emitGeneralPathRect(stroked, filled, scaledLineWidth);\n this.pathPoints = [];\n this.generalPathPoints.length = 0;\n }\n\n private tryPaintPatternFill(filled: boolean): boolean {\n if (!filled || !this.patternFillImage || this.generalPathPoints.length === 0) return false;\n\n const bbox = computePointsBBox(this.generalPathPoints);\n if (bbox.w > 1 && bbox.h > 1) {\n this.imageItems.push({\n dataUrl: this.patternFillImage,\n width: Math.round(bbox.w), height: Math.round(bbox.h),\n renderWidth: bbox.w, renderHeight: bbox.h,\n x: bbox.minX, y: bbox.minY,\n });\n }\n this.patternFillImage = null;\n this.pathPoints = [];\n this.generalPathPoints.length = 0;\n return true;\n }\n\n private emitReRect(stroked: boolean, filled: boolean, scaledLineWidth: number): void {\n if (this.pathPoints.length < 4) return;\n const [rx, ry, rw, rh] = this.pathPoints;\n const p1 = transformPoint(rx, ry, this.ctm);\n const p2 = transformPoint(rx + rw, ry + rh, this.ctm);\n this.pathRects.push({\n x: Math.min(p1.tx, p2.tx), y: Math.min(p1.ty, p2.ty),\n width: Math.abs(p2.tx - p1.tx), height: Math.abs(p2.ty - p1.ty),\n stroked, filled,\n strokeColor: this.strokeColor, fillColor: this.fillColor,\n lineWidth: scaledLineWidth, borderRadius: 0,\n });\n }\n\n private emitGeneralPathRect(stroked: boolean, filled: boolean, scaledLineWidth: number): void {\n if (this.generalPathPoints.length === 0) return;\n\n const bbox = computePointsBBox(this.generalPathPoints);\n let { w, h } = bbox;\n\n if (h < 2 && w >= 1) h = Math.max(h, scaledLineWidth);\n if (w < 2 && h >= 1) w = Math.max(w, scaledLineWidth);\n if (w < 1 && h < 1) return;\n\n const radius = estimateBorderRadius(this.generalPathPoints, bbox.minX, bbox.maxX, w, h);\n this.pathRects.push({\n x: bbox.minX, y: bbox.minY, width: w, height: h,\n stroked, filled,\n strokeColor: this.strokeColor, fillColor: this.fillColor,\n lineWidth: scaledLineWidth, borderRadius: radius,\n });\n }\n\n private opDo(\n operands: ReadonlyArray<string>,\n resources: Record<string, PdfObject>,\n pageWidth: number,\n pageHeight: number,\n ): void {\n if (operands.length < 1) return;\n const name = operands[0].startsWith('/') ? operands[0].substring(1) : operands[0];\n const xobjectDict = resources['XObject'] ? this.reader.getDict(resources['XObject']) : {};\n const ref = xobjectDict[name];\n if (!ref) return;\n\n const objDict = this.reader.getDict(ref);\n const subtype = this.reader.getString(objDict['Subtype']);\n\n if (subtype === 'Form') {\n this.formDraws.enter(this.reader.resolveDeep(ref), () => this.drawFormXObject(ref, resources, pageWidth, pageHeight));\n } else if (subtype === 'Image') {\n this.processImageXObject(ref, objDict);\n }\n }\n\n private drawFormXObject(\n ref: PdfObject,\n parentResources: Record<string, PdfObject>,\n pageWidth: number,\n pageHeight: number,\n ): void {\n const objDict = this.reader.getDict(ref);\n const formResources = objDict['Resources']\n ? this.reader.getDict(objDict['Resources'])\n : parentResources;\n\n // Register fonts from form resources\n const fontDict = formResources['Font'] ? this.reader.getDict(formResources['Font']) : {};\n for (const [fname, fref] of Object.entries(fontDict)) {\n if (!this.fontInfoMap.has(fname)) {\n this.fontRegistry.registerFont(this.reader, fname, fref);\n this.fontInfoMap.set(fname, buildFontInfo(this.reader, fref));\n }\n }\n\n // Apply form matrix\n const savedCtm = [...this.ctm];\n if (objDict['Matrix']) {\n const matrix = this.reader.getArray(objDict['Matrix']).map(o => this.reader.getNumber(o));\n if (matrix.length >= 6) {\n this.ctm = multiplyMatrix(this.ctm, matrix);\n this.ctmChanged = true;\n }\n }\n\n try {\n const data = this.reader.getStreamData(ref);\n if (data.length > 0) {\n const tokens = tokenizeContentStream(data);\n this.dispatchOperators(tokens, formResources, pageWidth, pageHeight);\n }\n } catch { /* skip malformed form XObjects */ }\n\n this.ctm = savedCtm;\n this.ctmChanged = true;\n }\n\n private processImageXObject(ref: PdfObject, objDict: Record<string, PdfObject>): void {\n try {\n const imgWidth = objDict['Width'] ? this.reader.getNumber(objDict['Width']) : 0;\n const imgHeight = objDict['Height'] ? this.reader.getNumber(objDict['Height']) : 0;\n if (imgWidth <= 0 || imgHeight <= 0) return;\n\n const data = this.reader.getStreamData(ref);\n if (data.length === 0) return;\n\n const filterName = resolveImageFilterName(this.reader, objDict);\n let dataUrl: string | null = null;\n\n if (filterName === 'DCTDecode') {\n dataUrl = `data:image/jpeg;base64,${uint8ToBase64(data)}`;\n } else if (filterName === 'JPXDecode') {\n dataUrl = `data:image/jp2;base64,${uint8ToBase64(data)}`;\n } else {\n // Raw pixel data — use pdf-parser's full decoder (color spaces, PNG encoding)\n dataUrl = buildImageDataUrl(filterName, ref, this.reader, imgWidth, imgHeight, objDict);\n }\n if (!dataUrl) return;\n\n // Image placement: CTM maps unit square to image position\n const p1 = transformPoint(0, 0, this.ctm);\n const p2 = transformPoint(1, 1, this.ctm);\n const x = Math.min(p1.tx, p2.tx);\n const y = Math.min(p1.ty, p2.ty);\n const renderWidth = Math.abs(p2.tx - p1.tx);\n const renderHeight = Math.abs(p2.ty - p1.ty);\n\n this.imageItems.push({\n dataUrl,\n width: imgWidth,\n height: imgHeight,\n renderWidth,\n renderHeight,\n x, y,\n });\n } catch { /* skip malformed images */ }\n }\n\n private opGs(operands: ReadonlyArray<string>, resources: Record<string, PdfObject>): void {\n if (operands.length < 1) return;\n const name = operands[0].startsWith('/') ? operands[0].substring(1) : operands[0];\n const extGState = resources['ExtGState'] ? this.reader.getDict(resources['ExtGState']) : {};\n const gsRef = extGState[name];\n if (!gsRef) return;\n\n const gsDict = this.reader.getDict(gsRef);\n if (gsDict['Font']) {\n const fontArr = this.reader.getArray(gsDict['Font']);\n if (fontArr.length >= 2) {\n const fontObjDict = this.reader.getDict(fontArr[0]);\n const baseFontName = this.reader.getString(fontObjDict['BaseFont']) || '';\n if (baseFontName) { this.fontName = baseFontName; this.fontChanged = true; }\n this.fontSize = this.reader.getNumber(fontArr[1]);\n }\n }\n }\n\n // ── Helper methods ───────────────────────────────────────────────\n\n private resolveSpaceCode(fi: FontInfo | null | undefined): number {\n if (!fi?.isTwoByte) return 0x20;\n for (const [cid, uni] of fi.toUnicode) {\n if ((uni.codePointAt(0) ?? 0) === 0x20) return cid;\n }\n return 0x20;\n }\n\n private buildTextState(): TextState {\n const fi = this.currentFontInfo;\n const entry = this.fontRegistry.getEntry(this.fontName);\n const spaceCode = this.resolveSpaceCode(fi);\n const spaceW = fi ? (fi.widths.get(spaceCode) ?? fi.defaultWidth) : 1000;\n return {\n fontName: this.fontName,\n fontFamily: fi?.familyName ?? entry?.familyName ?? '',\n fontSize: this.curFontSize,\n fillColor: this.curFillColor,\n strokeColor: this.curStrokeColor,\n letterSpace: this.curLetterSpace,\n wordSpace: this.curWordSpace,\n verticalAlign: this.curVerticalAlign,\n bold: fi?.isBold ?? false,\n italic: fi?.isItalic ?? false,\n textRenderMode: this.renderMode,\n horizontalScaling: this.horizScaling * 100,\n spaceWidth: spaceW,\n fontAscent: entry?.ascent ?? 0.8,\n fontDescent: entry?.descent ?? -0.2,\n };\n }\n\n private updateLastStateStartIdx(): void {\n if (!this.currentLine) return;\n const lastState = this.currentLine.states.at(-1);\n if (lastState && !lastState.installed) {\n (lastState as { installed: LineStyleState | null }).installed = {\n startIdx: this.currentLine.text.length,\n fontId: 0, fontSizeId: 0, fillColorId: 0, strokeColorId: 0,\n letterSpaceId: 0, wordSpaceId: 0, verticalAlignId: 0,\n bold: lastState.textState.bold,\n italic: lastState.textState.italic,\n embedded: false, hasStroke: false,\n horizontalScaling: lastState.textState.horizontalScaling,\n verticalAlignIsZero: true,\n wordSpaceFree: false,\n };\n }\n }\n\n private tryAppendStream(s: PdfObject, parts: Uint8Array[]): void {\n try {\n const data = this.reader.getStreamData(s);\n parts.push(data, new Uint8Array([0x20]));\n } catch { /* skip */ }\n }\n\n private resolveResources(pageDict: Record<string, PdfObject>): Record<string, PdfObject> {\n return pageDict['Resources'] ? this.reader.getDict(pageDict['Resources']) : {};\n }\n\n private resolveContentData(pageDict: Record<string, PdfObject>): Uint8Array {\n const contentsRef = pageDict['Contents'];\n if (!contentsRef) return new Uint8Array(0);\n\n try {\n // Contents can be a single stream or an array of streams\n const contentsObj = this.reader.resolveDeep(contentsRef);\n if (contentsObj.type === 'array') {\n const streams = this.reader.getArray(contentsRef);\n const parts: Uint8Array[] = [];\n for (const s of streams) {\n this.tryAppendStream(s, parts);\n }\n const totalLen = parts.reduce((sum, p) => sum + p.length, 0);\n const combined = new Uint8Array(totalLen);\n let offset = 0;\n for (const p of parts) {\n combined.set(p, offset);\n offset += p.length;\n }\n return combined;\n }\n return this.reader.getStreamData(contentsRef);\n } catch {\n return new Uint8Array(0);\n }\n }\n\n private extractAnnotations(\n pageDict: Record<string, PdfObject>,\n _pageHeight: number,\n ): PdfAnnotation[] {\n const annotsRef = pageDict['Annots'];\n if (!annotsRef) return [];\n\n const annotations: PdfAnnotation[] = [];\n try {\n const annots = this.reader.getArray(annotsRef);\n for (const annotRef of annots) {\n this.tryExtractLinkAnnotation(annotRef, annotations);\n }\n } catch { /* skip */ }\n return annotations;\n }\n\n private tryExtractLinkAnnotation(annotRef: PdfObject, annotations: PdfAnnotation[]): void {\n try {\n const annotDict = this.reader.getDict(annotRef);\n if (this.reader.getString(annotDict['Subtype']) !== 'Link') return;\n const aRef = annotDict['A'];\n \n const uri = aRef ? this.reader.getString(this.reader.getDict(aRef)['URI']) || '' : '';\n if (!uri) return;\n const rectArr = annotDict['Rect'] ? this.reader.getArray(annotDict['Rect']) : [];\n if (rectArr.length < 4) return;\n const nums = rectArr.map(o => this.reader.getNumber(o));\n const x = Math.min(nums[0], nums[2]), y = Math.min(nums[1], nums[3]);\n const w = Math.abs(nums[2] - nums[0]), h = Math.abs(nums[3] - nums[1]);\n annotations.push({ x, y, width: w, height: h, uri });\n } catch { /* skip malformed annotations */ }\n }\n}\n\n// ── Graphics Rendering ────────────────────────────────────────────────\n\nfunction computePointsBBox(points: ReadonlyArray<{ tx: number; ty: number }>): {\n minX: number; minY: number; maxX: number; maxY: number; w: number; h: number;\n} {\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const p of points) {\n if (p.tx < minX) minX = p.tx;\n if (p.ty < minY) minY = p.ty;\n if (p.tx > maxX) maxX = p.tx;\n if (p.ty > maxY) maxY = p.ty;\n }\n return { minX, minY, maxX, maxY, w: maxX - minX, h: maxY - minY };\n}\n\nfunction estimateBorderRadius(\n points: ReadonlyArray<{ tx: number; ty: number }>,\n minX: number, maxX: number, w: number, h: number,\n): number {\n if (w < 5 || h < 5) return 0;\n const edgeTol = 0.5;\n const quarterW = w * 0.3;\n let radius = 0;\n for (const p of points) {\n const xInset = Math.min(p.tx - minX, maxX - p.tx);\n if (xInset > edgeTol && xInset < quarterW && xInset > radius) {\n radius = xInset;\n }\n }\n return Math.min(radius, w / 2, h / 2);\n}\n\nfunction renderFilledRect(rect: PathRect, z: number): string {\n const left = round(rect.x * z);\n const bottom = round(rect.y * z);\n const w = round(rect.width * z);\n const h = round(rect.height * z);\n const br = rect.borderRadius > 0 ? `border-radius:${round(rect.borderRadius * z)}px;` : '';\n return `<div style=\"position:absolute;left:${left}px;bottom:${bottom}px;` +\n `width:${w}px;height:${h}px;background-color:${rect.fillColor};${br}\"></div>`;\n}\n\nfunction renderStrokedRect(rect: PathRect, z: number): string {\n const left = round(rect.x * z);\n const bottom = round(rect.y * z);\n const w = round(rect.width * z);\n const h = round(rect.height * z);\n // PDF points are 1/72 inch; CSS pixels are 1/96 inch.\n // Scale by 4/3 and round UP to ensure lines render at the intended\n // thickness (browsers round sub-pixel border widths DOWN).\n const PDF_TO_CSS_PX = 4 / 3;\n const lw = Math.max(Math.ceil(rect.lineWidth * z * PDF_TO_CSS_PX), 1);\n const isHorizontalLine = rect.height < 2;\n const isVerticalLine = rect.width < 2;\n\n if (isHorizontalLine) {\n return `<div style=\"position:absolute;left:${left}px;bottom:${bottom}px;` +\n `width:${w}px;border-top:${lw}px solid ${rect.strokeColor};\"></div>`;\n }\n if (isVerticalLine) {\n return `<div style=\"position:absolute;left:${left}px;bottom:${bottom}px;` +\n `height:${h}px;border-left:${lw}px solid ${rect.strokeColor};\"></div>`;\n }\n const br = rect.borderRadius > 0 ? `border-radius:${round(rect.borderRadius * z)}px;` : '';\n return `<div style=\"position:absolute;left:${left}px;bottom:${bottom}px;` +\n `width:${w}px;height:${h}px;border:${lw}px solid ${rect.strokeColor};box-sizing:border-box;${br}\"></div>`;\n}\n\nfunction renderImage(img: ImageItem, z: number): string {\n const left = round(img.x * z);\n const bottom = round(img.y * z);\n const w = round(img.renderWidth * z);\n const h = round(img.renderHeight * z);\n return `<img class=\"bi\" style=\"position:absolute;left:${left}px;bottom:${bottom}px;` +\n `width:${w}px;height:${h}px;\" src=\"${escapeHtml(img.dataUrl)}\"/>`;\n}\n\nfunction renderAnnotation(ann: PdfAnnotation, z: number): string {\n const href = safeLinkUri(ann.uri);\n if (!href) return '';\n const left = round(ann.x * z);\n const bottom = round(ann.y * z);\n const w = round(ann.width * z);\n const h = round(ann.height * z);\n return `<a class=\"l\" href=\"${escapeHtml(href)}\">` +\n `<div style=\"position:absolute;left:${left}px;bottom:${bottom}px;` +\n `width:${w}px;height:${h}px;background-color:rgba(255,255,255,0.000001);border-style:none;\"></div></a>`;\n}\n\n// ── Page Assembly ─────────────────────────────────────────────────────\n\nfunction extractLineText(line: TextLine, z: number): string {\n const offsetMap = new Map<number, number>();\n for (const off of line.offsets) {\n offsetMap.set(off.startIdx, off.width);\n }\n const emSize = (line.states.length > 0 ? line.states[0].textState.fontSize : 12) * z;\n const threshold = emSize * SPACE_THRESHOLD;\n let lineText = '';\n for (let ci = 0; ci < line.text.length; ci++) {\n const off = offsetMap.get(ci);\n if (off !== undefined && off >= threshold) lineText += ' ';\n const cp = line.text[ci];\n if (cp > 0) lineText += String.fromCodePoint(cp);\n }\n return lineText.trim();\n}\n\nfunction extractTextFromLines(lines: ReadonlyArray<TextLine>, z: number): string {\n const lineParts: string[] = [];\n for (const line of lines) {\n const text = extractLineText(line, z);\n if (text) lineParts.push(text);\n }\n return lineParts.join('\\n');\n}\n\nfunction fixYFlippedCoordinates(result: ProcessedPage): void {\n const { initialYScale, lines, imageItems } = result;\n if (initialYScale <= 0 || initialYScale >= 1) return;\n for (const line of lines) {\n if (line.y < 0) line.y = Math.abs(line.y) * initialYScale;\n }\n for (const img of imageItems) {\n if (img.y < 0) (img as { y: number }).y = Math.abs(img.y) * initialYScale;\n }\n}\n\nfunction buildPageContentHtml(\n result: ProcessedPage, pageIndex: number,\n mgr: AllStateManager, fontRegistry: FontRegistry, z: number,\n scaledWidth: number, scaledHeight: number,\n): string {\n const htmlParts: string[] = [];\n htmlParts.push(\n `<div id=\"pf${pageIndex + 1}\" class=\"pf\" style=\"width:${round(scaledWidth)}px;height:${round(scaledHeight)}px;\" data-page-no=\"${pageIndex + 1}\">`,\n `<div class=\"pc pc${pageIndex + 1}\">`,\n );\n\n for (const rect of result.pathRects) {\n if (rect.filled && rect.fillColor) htmlParts.push(renderFilledRect(rect, z));\n if (rect.stroked && rect.strokeColor) htmlParts.push(renderStrokedRect(rect, z));\n }\n for (const img of result.imageItems) htmlParts.push(renderImage(img, z));\n for (const line of result.lines) {\n const lineHtml = line.dumpText(mgr, fontRegistry, H_EPS, SPACE_THRESHOLD, z);\n if (lineHtml) htmlParts.push(lineHtml);\n }\n for (const ann of result.annotations) {\n if (ann.uri) htmlParts.push(renderAnnotation(ann, z));\n }\n\n htmlParts.push('</div>', '</div>');\n return htmlParts.join('\\n');\n}\n\nfunction assemblePageHtml(\n result: ProcessedPage,\n pageIndex: number,\n mgr: AllStateManager,\n fontRegistry: FontRegistry,\n z: number,\n): PixelPerfectPage {\n fixYFlippedCoordinates(result);\n\n const scaledWidth = result.pageWidth * z;\n const scaledHeight = result.pageHeight * z;\n\n const text = extractTextFromLines(result.lines, z);\n\n for (const line of result.lines) {\n line.prepare(mgr, fontRegistry, z);\n line.optimizeNormal(mgr, H_EPS, SPACE_THRESHOLD, z);\n }\n\n return {\n html: buildPageContentHtml(result, pageIndex, mgr, fontRegistry, z, scaledWidth, scaledHeight),\n text,\n pageIndex,\n pageWidth: scaledWidth,\n pageHeight: scaledHeight,\n };\n}\n\n// ── Main Entry Point ──────────────────────────────────────────────────\n\n/**\n * Renders a PDF page by page with absolutely positioned text, for pixel-faithful display.\n * Input is untrusted; structures exceeding internal limits are skipped.\n */\nexport async function renderPixelPerfectPaged(buffer: ArrayBuffer, options?: PixelPerfectOptions, limits: ParserLimits = DEFAULT_PARSER_LIMITS): Promise<PixelPerfectPagedResult> {\n const header = new Uint8Array(buffer, 0, Math.min(5, buffer.byteLength));\n if (header.length < 5 ||\n header[0] !== 0x25 || header[1] !== 0x50 || header[2] !== 0x44 ||\n header[3] !== 0x46 || header[4] !== 0x2D) {\n throw new Error('Not a valid PDF file.');\n }\n\n const reader = new PdfReader(buffer, limits);\n try {\n reader.parse();\n } catch {\n throw new Error('Unable to read this PDF. It may be corrupted or use an unsupported format.');\n }\n\n if (reader.isEncrypted()) {\n throw new Error('Encrypted PDFs are not supported.');\n }\n\n const pdfPages = reader.getPages();\n if (pdfPages.length === 0) {\n throw new Error('PDF contains no pages.');\n }\n\n const zoom = options?.zoom ?? DEFAULT_ZOOM;\n const mgr = new AllStateManager();\n const fontRegistry = new FontRegistry();\n const pages: PixelPerfectPage[] = [];\n const processor = new PixelPerfectProcessor(reader, fontRegistry, zoom);\n\n for (let i = 0; i < pdfPages.length; i++) {\n try {\n const result = processor.processPage(pdfPages[i], i);\n const page = assemblePageHtml(result, i, mgr, fontRegistry, zoom);\n pages.push(page);\n } catch {\n pages.push({\n html: `<div id=\"pf${i + 1}\" class=\"pf\" style=\"width:612px;height:792px;\" data-page-no=\"${i + 1}\"><div class=\"pc pc${i + 1}\"></div></div>`,\n text: '',\n pageIndex: i,\n pageWidth: 612,\n pageHeight: 792,\n });\n }\n }\n\n const fontFaceCss = fontRegistry.dumpFontFaceCss();\n const fontFamilyCss = fontRegistry.dumpFontFamilyCss();\n const globalCss = BASE_CSS + '\\n' + fontFaceCss + '\\n' + fontFamilyCss + '\\n' + mgr.dumpAllCss();\n\n return {\n pages,\n totalPages: pages.length,\n globalCss,\n };\n}\n\nexport function toStandaloneHtml(result: PixelPerfectPagedResult): string {\n const pageHtml = result.pages.map(p => p.html).join('\\n');\n return `<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta charset=\"utf-8\"/>\n<meta name=\"generator\" content=\"pdf-pixel-perfect-ts\"/>\n<style type=\"text/css\">\n${result.globalCss}\n</style>\n</head>\n<body>\n<div id=\"page-container\">\n${pageHtml}\n</div>\n</body>\n</html>`;\n}\n","import type {\n BlockAlign,\n BlockStyle,\n Line,\n PageModel,\n ParagraphBlock,\n TextDirection,\n} from './readable-types';\n\nconst EDGE_TOLERANCE = 1.5;\nconst CENTER_TOLERANCE = 3;\nconst MARGIN_FRACTION = 0.05;\nconst MAX_MARGIN_TOP = 24;\n\nexport interface ColumnBounds {\n readonly x0: number;\n readonly x1: number;\n}\n\n/** Resolves the visual style of a block of lines against its column bounds. */\nexport function resolveBlockStyle(\n lines: readonly Line[],\n bounds: ColumnBounds,\n previousBaseline: number | null,\n pageBounds: ColumnBounds = bounds,\n): BlockStyle {\n const dir = blockDirection(lines);\n const lineHeight = computeLineHeight(lines);\n const align = detectAlignment(lines, pageBounds, dir);\n return {\n align,\n indentStart: computeIndentStart(lines, pageBounds, dir, align),\n textIndent: computeTextIndent(lines, dir),\n lineHeight,\n marginTop: computeMarginTop(lines, previousBaseline, lineHeight),\n dir,\n background: '',\n border: '',\n };\n}\n\n/**\n * Preserves a block's real horizontal position: when it is not centered or\n * end-aligned, its offset from the page content start becomes a margin. This\n * is what keeps scattered fragments and indented regions where the PDF put\n * them instead of collapsing everything to the left edge.\n */\nfunction computeIndentStart(\n lines: readonly Line[],\n pageBounds: ColumnBounds,\n dir: TextDirection,\n align: BlockAlign,\n): number {\n if (lines.length === 0 || align === 'center' || align === 'right' || align === 'left') return 0;\n const offset = dir === 'rtl'\n ? pageBounds.x1 - Math.max(...lines.map(l => l.endX))\n : Math.min(...lines.map(l => l.x)) - pageBounds.x0;\n return offset > 4 ? Math.round(offset * 10) / 10 : 0;\n}\n\nexport function blockDirection(lines: readonly Line[]): TextDirection {\n let rtl = 0;\n for (const line of lines) {\n if (line.dir === 'rtl') rtl++;\n }\n return rtl * 2 > lines.length ? 'rtl' : 'ltr';\n}\n\n/**\n * Detects text alignment from edge variance relative to the column.\n * Returns '' when the block sits at the natural start edge for its direction.\n */\nexport function detectAlignment(\n lines: readonly Line[],\n bounds: ColumnBounds,\n dir: TextDirection,\n): BlockAlign {\n if (lines.length === 0) return '';\n const width = bounds.x1 - bounds.x0;\n if (width <= 0) return '';\n if (lines.length === 1) return singleLineAlignment(lines[0], bounds, dir);\n\n const leftTight = edgeSpread(lines.map(l => l.x)) <= EDGE_TOLERANCE;\n const rightTight = edgeSpread(lines.map(l => l.endX)) <= EDGE_TOLERANCE;\n if (leftTight && rightTight && lines.length >= 3) return 'justify';\n if (isCentered(lines, bounds)) return 'center';\n if (leftTight) return dir === 'rtl' ? 'left' : '';\n if (rightTight) return dir === 'rtl' ? '' : 'right';\n return '';\n}\n\nfunction singleLineAlignment(line: Line, bounds: ColumnBounds, dir: TextDirection): BlockAlign {\n const width = bounds.x1 - bounds.x0;\n if (line.endX - line.x < width * 0.25) return '';\n const left = line.x - bounds.x0;\n const right = bounds.x1 - line.endX;\n const margin = width * MARGIN_FRACTION;\n if (Math.abs(left - right) <= Math.max(CENTER_TOLERANCE, width * 0.02) &&\n left > margin && right > margin) {\n return 'center';\n }\n if (dir === 'rtl') return left > margin * 3 && right <= margin ? '' : alignFromEdges(left, right, margin, 'rtl');\n return right > margin * 3 && left <= margin ? '' : alignFromEdges(left, right, margin, 'ltr');\n}\n\nfunction alignFromEdges(\n left: number,\n right: number,\n margin: number,\n dir: TextDirection,\n): BlockAlign {\n if (dir === 'ltr' && left > margin * 3 && right <= margin) return 'right';\n if (dir === 'rtl' && right > margin * 3 && left <= margin) return 'left';\n return '';\n}\n\nfunction isCentered(lines: readonly Line[], bounds: ColumnBounds): boolean {\n const center = (bounds.x0 + bounds.x1) / 2;\n let deviation = 0;\n for (const line of lines) {\n deviation = Math.max(deviation, Math.abs((line.x + line.endX) / 2 - center));\n }\n const width = bounds.x1 - bounds.x0;\n const offCenterEdges = lines.every(l =>\n l.x - bounds.x0 > width * MARGIN_FRACTION && bounds.x1 - l.endX > width * MARGIN_FRACTION);\n return offCenterEdges && deviation <= Math.max(CENTER_TOLERANCE, width * 0.02);\n}\n\nfunction edgeSpread(values: readonly number[]): number {\n return Math.max(...values) - Math.min(...values);\n}\n\n/** First-line indent in pt; 0 when below the noise threshold. */\nexport function computeTextIndent(lines: readonly Line[], dir: TextDirection): number {\n if (lines.length < 2) return 0;\n const [first, ...rest] = lines;\n const indent = dir === 'rtl'\n ? Math.max(...rest.map(l => l.endX)) - first.endX\n : first.x - Math.min(...rest.map(l => l.x));\n return indent > 2 ? Math.round(indent * 10) / 10 : 0;\n}\n\n/** Modal baseline-gap to font-size ratio, quantized to 0.05; 0 when unknown. */\nexport function computeLineHeight(lines: readonly Line[]): number {\n if (lines.length < 2) return 0;\n const ratios: number[] = [];\n for (let i = 1; i < lines.length; i++) {\n const gap = lines[i - 1].y - lines[i].y;\n const size = Math.max(lines[i].fontSize, 1);\n if (gap > 0 && gap < size * 4) ratios.push(gap / size);\n }\n if (ratios.length === 0) return 0;\n ratios.sort((a, b) => a - b);\n const median = ratios[Math.floor(ratios.length / 2)];\n const quantized = Math.round(median * 20) / 20;\n return Math.min(3, Math.max(0.9, quantized));\n}\n\n/**\n * The whitespace the PDF left above a block, beyond one line's own leading,\n * in pt. Pass `0` for `lineHeight` to assume normal leading.\n */\nexport function computeMarginTop(\n lines: readonly Line[],\n previousBaseline: number | null,\n lineHeight: number,\n): number {\n if (previousBaseline === null || lines.length === 0) return 0;\n const leading = (lineHeight || 1.2) * lines[0].fontSize;\n const gap = previousBaseline - lines[0].y - leading;\n if (gap <= 1) return 0;\n return Math.min(MAX_MARGIN_TOP, Math.round(gap * 10) / 10);\n}\n\n/**\n * Joins a paragraph that continues across a page break: the trailing\n * paragraph of each page merges into the leading paragraph of the next when\n * both flow in the same style and the earlier one does not end a sentence.\n */\nexport function mergeCrossPageParagraphs(pages: readonly PageModel[]): void {\n for (let i = 1; i < pages.length; i++) {\n const previous = trailingParagraph(pages[i - 1]);\n const next = leadingParagraph(pages[i]);\n if (!previous || !next || !paragraphsContinue(previous, next)) continue;\n previous.lines.push(...next.lines);\n pages[i].blocks.splice(pages[i].blocks.indexOf(next), 1);\n }\n}\n\nfunction trailingParagraph(page: PageModel): ParagraphBlock | null {\n const block = page.blocks.at(-1);\n return block?.kind === 'paragraph' ? block : null;\n}\n\nfunction leadingParagraph(page: PageModel): ParagraphBlock | null {\n const block = page.blocks[0];\n return block?.kind === 'paragraph' ? block : null;\n}\n\nfunction paragraphsContinue(previous: ParagraphBlock, next: ParagraphBlock): boolean {\n const lastLine = previous.lines.at(-1);\n const firstNext = next.lines[0];\n if (!lastLine || !firstNext) return false;\n if (Math.abs(lastLine.fontSize - firstNext.fontSize) > 0.5) return false;\n if (lastLine.dir !== firstNext.dir) return false;\n if (next.style.textIndent > 0) return false;\n const text = lastLine.words.map(w => w.text).join(' ').trimEnd();\n if (/[.!?:;…]$/.test(text)) return false;\n return isLineFull(previous);\n}\n\nfunction isLineFull(block: ParagraphBlock): boolean {\n if (block.lines.length < 2) return true;\n const widths = block.lines.map(l => l.endX - l.x);\n const lastWidth = widths.at(-1) ?? 0;\n return lastWidth >= Math.max(...widths) * 0.85;\n}\n","import type { PathRect, StructureMap } from '../pdf-parser';\nimport { detectAlignment, type ColumnBounds } from './readable-styles';\nimport type {\n DocBlock,\n HeadingBlock,\n HeadingLevel,\n Line,\n ListItemModel,\n PageModel,\n Word,\n} from './readable-types';\n\nconst HEADING_SCORE_THRESHOLD = 1;\nconst MAX_HEADING_LINES = 2;\nconst STRUCTURE_COVERAGE = 0.8;\nconst BULLET_RE = /^[•◦▪‣·∙*–—-]$|^[•◦▪‣·∙]/u;\nconst ORDERED_MARKER_RE = /^(\\d{1,3}|[a-z]|[ivxlc]{1,5})[.)]$/i;\nconst NUMBERING_PATTERN = /^\\d+(\\.\\d+)*[.)]?\\s/;\n\nexport interface ClassifyContext {\n readonly bodyFontSize: number;\n readonly bodyLeading: number;\n readonly structure: StructureMap;\n /** Full-page content bounds — blockquote insets are measured against these. */\n readonly pageBounds: ColumnBounds;\n /** Page height in pt; footer-band detection is off when absent. */\n readonly pageHeight?: number;\n /** Thin horizontal rects still unclaimed — the rules under a form's field\n * slots, which are what tell two labels on one baseline apart. */\n readonly fieldRules?: readonly PathRect[];\n /** Marks a rule consumed by a field row so it does not also emit as an\n * `<hr>` separator. */\n readonly useRect?: (rect: PathRect) => void;\n}\n\nexport type GroupKind =\n | { kind: 'heading'; level: HeadingLevel }\n | { kind: 'list'; ordered: boolean; items: ListItemModel[] }\n | { kind: 'blockquote' }\n | { kind: 'paragraph' };\n\n/** Classifies one paragraph-group of lines within its column. */\nexport function classifyGroup(\n lines: readonly Line[],\n bounds: ColumnBounds,\n gapAbove: number | null,\n ctx: ClassifyContext,\n): GroupKind {\n const structural = structureKind(lines, ctx);\n if (structural) return structural;\n\n const list = detectList(lines, ctx);\n if (list) return list;\n\n const headingLevel = detectHeadingLevel(lines, bounds, gapAbove, ctx);\n if (headingLevel) return { kind: 'heading', level: headingLevel };\n\n if (isBlockquote(lines, ctx)) return { kind: 'blockquote' };\n return { kind: 'paragraph' };\n}\n\n// ── Structure tags ──────────────────────────────────────────────────────\n\nfunction structureKind(lines: readonly Line[], ctx: ClassifyContext): GroupKind | null {\n if (!ctx.structure.hasStructure) return null;\n const types = taggedTypes(lines, ctx.structure);\n if (types.coverage < STRUCTURE_COVERAGE) return null;\n\n const headingLevel = structureHeadingLevel(types.counts);\n if (headingLevel) return { kind: 'heading', level: headingLevel };\n if (isDominant(types.counts, ['LI', 'LBody', 'Lbl', 'L'])) {\n return detectList(lines, ctx) ?? { kind: 'list', ordered: false, items: lines.map(l => ({ level: 0, lines: [l] })) };\n }\n if (isDominant(types.counts, ['BlockQuote'])) return { kind: 'blockquote' };\n return null;\n}\n\nfunction taggedTypes(\n lines: readonly Line[],\n structure: StructureMap,\n): { counts: Map<string, number>; coverage: number } {\n const counts = new Map<string, number>();\n let tagged = 0;\n let total = 0;\n for (const line of lines) {\n for (const word of line.words) {\n total += word.text.length;\n if (word.mcid < 0) continue;\n const type = structure.mcidToType.get(`${line.page}:${word.mcid}`);\n if (!type) continue;\n tagged += word.text.length;\n counts.set(type, (counts.get(type) ?? 0) + word.text.length);\n }\n }\n return { counts, coverage: total === 0 ? 0 : tagged / total };\n}\n\nfunction structureHeadingLevel(counts: Map<string, number>): HeadingLevel | 0 {\n const levels: Array<[string, HeadingLevel]> = [\n ['H1', 1], ['H', 1], ['H2', 2], ['H3', 3], ['H4', 4], ['H5', 4], ['H6', 4],\n ];\n for (const [tag, level] of levels) {\n if (isDominant(counts, [tag])) return level;\n }\n return 0;\n}\n\nfunction isDominant(counts: Map<string, number>, tags: readonly string[]): boolean {\n let matched = 0;\n let total = 0;\n for (const [type, weight] of counts) {\n total += weight;\n if (tags.includes(type)) matched += weight;\n }\n return total > 0 && matched / total >= 0.5;\n}\n\n// ── Heading scoring ─────────────────────────────────────────────────────\n\nfunction detectHeadingLevel(\n lines: readonly Line[],\n bounds: ColumnBounds,\n gapAbove: number | null,\n ctx: ClassifyContext,\n): HeadingLevel | 0 {\n if (lines.length === 0 || lines.length > MAX_HEADING_LINES) return 0;\n const score = headingScore(lines, bounds, gapAbove, ctx);\n if (score < HEADING_SCORE_THRESHOLD) return 0;\n return headingLevelFromSize(lines[0].fontSize, allBold(lines), ctx.bodyFontSize);\n}\n\n/**\n * Multi-signal heading score: size ratio, boldness, spacing above,\n * numbering pattern, short width, all-caps, penalized by a trailing period.\n */\nexport function headingScore(\n lines: readonly Line[],\n bounds: ColumnBounds,\n gapAbove: number | null,\n ctx: ClassifyContext,\n): number {\n const text = groupText(lines);\n if (text.length === 0 || ctx.bodyFontSize <= 0) return 0;\n const size = lines[0].fontSize;\n const width = bounds.x1 - bounds.x0;\n const lineWidth = Math.max(...lines.map(l => l.endX - l.x));\n\n let score = 2 * (size / ctx.bodyFontSize - 1);\n if (allBold(lines)) score += 0.8;\n if (gapAbove !== null && gapAbove > ctx.bodyLeading * 1.5) score += 0.5;\n if (NUMBERING_PATTERN.test(text)) score += 0.6;\n if (width > 0 && lineWidth < width * 0.7) score += 0.3;\n if (isAllCaps(text)) score += 0.3;\n if (/[.:;]$/.test(text) && !NUMBERING_PATTERN.test(text)) score -= 0.5;\n return score;\n}\n\nfunction headingLevelFromSize(size: number, bold: boolean, bodySize: number): HeadingLevel {\n const ratio = bodySize > 0 ? size / bodySize : 1;\n if (ratio >= 1.6) return 1;\n if (ratio >= 1.3) return 2;\n if (ratio >= 1.1) return 3;\n return bold ? 3 : 4;\n}\n\n/**\n * Document-wide post-pass: re-ranks heading levels by clustering distinct\n * (size, bold) signatures — the largest signature becomes h1, the next h2,\n * and so on (capped at h4). Structure-tagged headings keep their level.\n */\nexport function assignHeadingLevels(pages: readonly PageModel[], structureTagged: boolean): void {\n if (structureTagged) return;\n const headings: HeadingBlock[] = [];\n for (const page of pages) {\n collectHeadings(page.blocks, headings);\n }\n if (headings.length === 0) return;\n\n const signatures = [...new Set(headings.map(signatureOf))]\n .sort((a, b) => signatureSize(b) - signatureSize(a) || a.localeCompare(b));\n for (const heading of headings) {\n const rank = signatures.indexOf(signatureOf(heading));\n heading.level = Math.min(rank + 1, 4) as HeadingLevel;\n }\n}\n\n/**\n * Gathers every heading, including those nested in a columns row — a document's\n * biggest heading is often its masthead title, which sits in a column cell\n * beside its kicker. Ranking without it demotes the whole document by a level.\n */\nfunction collectHeadings(blocks: readonly DocBlock[], into: HeadingBlock[]): void {\n for (const block of blocks) {\n if (block.kind === 'heading') into.push(block);\n else if (block.kind === 'columns') {\n for (const column of block.columns) collectHeadings(column.blocks, into);\n }\n }\n}\n\nfunction signatureOf(heading: HeadingBlock): string {\n const size = Math.round((heading.lines[0]?.fontSize ?? 12) * 2) / 2;\n return `${size}|${allBold(heading.lines) ? 'b' : 'r'}`;\n}\n\nfunction signatureSize(signature: string): number {\n return Number.parseFloat(signature.split('|')[0]);\n}\n\nfunction allBold(lines: readonly Line[]): boolean {\n let boldChars = 0;\n let total = 0;\n for (const line of lines) {\n for (const word of line.words) {\n total += word.text.length;\n if (word.style.bold) boldChars += word.text.length;\n }\n }\n return total > 0 && boldChars / total >= 0.8;\n}\n\nfunction isAllCaps(text: string): boolean {\n const letters = text.replaceAll(/[^A-Za-z]/g, '');\n return letters.length >= 3 && letters === letters.toUpperCase();\n}\n\nfunction groupText(lines: readonly Line[]): string {\n return lines.map(l => l.words.map(w => w.text).join(' ')).join(' ').trim();\n}\n\n// ── Lists ───────────────────────────────────────────────────────────────\n\ninterface MarkerInfo {\n readonly ordered: boolean;\n readonly markerX: number;\n}\n\nfunction detectList(lines: readonly Line[], ctx: ClassifyContext): GroupKind | null {\n const markers = lines.map(line => lineMarker(line));\n const markerCount = markers.filter(Boolean).length;\n if (markerCount < 2 || markerCount < Math.ceil(lines.length / 2)) return null;\n\n const items = buildListItems(lines, markers, ctx);\n if (items.length === 0) return null;\n const ordered = markers.some(m => m?.ordered === true);\n return { kind: 'list', ordered, items };\n}\n\nfunction lineMarker(line: Line): MarkerInfo | null {\n const first = line.words[0];\n if (!first) return null;\n const token = firstToken(first);\n if (BULLET_RE.test(token)) return { ordered: false, markerX: markerEdge(line) };\n if (ORDERED_MARKER_RE.test(token)) return { ordered: true, markerX: markerEdge(line) };\n return null;\n}\n\n/** Whether the line opens with a bullet or ordered list marker. */\nexport function hasListMarker(line: Line): boolean {\n return lineMarker(line) !== null;\n}\n\nfunction firstToken(word: Word): string {\n return word.text.split(' ')[0] ?? '';\n}\n\nfunction markerEdge(line: Line): number {\n return line.dir === 'rtl' ? -line.endX : line.x;\n}\n\nfunction buildListItems(\n lines: readonly Line[],\n markers: ReadonlyArray<MarkerInfo | null>,\n ctx: ClassifyContext,\n): ListItemModel[] {\n const levels = quantizeLevels(markers, ctx.bodyFontSize);\n const items: ListItemModel[] = [];\n for (let i = 0; i < lines.length; i++) {\n const marker = markers[i];\n if (marker) {\n items.push({ level: levels[i], lines: [stripMarker(lines[i])] });\n } else if (items.length > 0) {\n items.at(-1)?.lines.push(lines[i]);\n }\n }\n return items;\n}\n\nfunction quantizeLevels(\n markers: ReadonlyArray<MarkerInfo | null>,\n bodyFontSize: number,\n): number[] {\n const xs = markers.filter((m): m is MarkerInfo => m !== null).map(m => m.markerX);\n const distinct = [...new Set(xs.map(x => Math.round(x)))].sort((a, b) => a - b);\n const levelStarts: number[] = [];\n const tolerance = Math.max(4, bodyFontSize * 0.6);\n for (const x of distinct) {\n const last = levelStarts.at(-1);\n if (last === undefined || x - last > tolerance) levelStarts.push(x);\n }\n return markers.map(m => {\n if (!m) return 0;\n let idx = 0;\n for (let i = levelStarts.length - 1; i >= 0; i--) {\n if (m.markerX >= levelStarts[i] - tolerance / 2) {\n idx = i;\n break;\n }\n }\n return Math.min(idx, 2);\n });\n}\n\nfunction stripMarker(line: Line): Line {\n const first = line.words[0];\n if (!first) return line;\n const token = firstToken(first);\n if (!BULLET_RE.test(token) && !ORDERED_MARKER_RE.test(token)) return line;\n\n const remainder = first.text.slice(token.length).trimStart();\n const words = remainder.length > 0\n ? [{ ...first, text: remainder }, ...line.words.slice(1)]\n : line.words.slice(1);\n return { ...line, words };\n}\n\n// ── Blockquote ──────────────────────────────────────────────────────────\n\n/**\n * Both-side inset of at least 2 em against the page content bounds, not the\n * XY-cut region bounds (an isolated blockquote band's own bounds would hug\n * it). Centered blocks are excluded via alignment detection. A left-rule\n * signal is a possible future refinement.\n */\nfunction isBlockquote(lines: readonly Line[], ctx: ClassifyContext): boolean {\n if (lines.length < 2) return false;\n const indent = ctx.bodyFontSize * 2;\n const left = Math.min(...lines.map(l => l.x));\n const right = Math.max(...lines.map(l => l.endX));\n if (left - ctx.pageBounds.x0 < indent || ctx.pageBounds.x1 - right < indent) return false;\n const dir = lines.filter(l => l.dir === 'rtl').length * 2 > lines.length ? 'rtl' : 'ltr';\n return detectAlignment(lines, ctx.pageBounds, dir) !== 'center';\n}\n","import type { PdfAnnotation, TextItem } from '../pdf-parser';\nimport type { BaselineShift, RunStyle, TextDirection, Word } from './readable-types';\n\n/** Fraction of a space width a gap must reach to count as a word break. */\nconst SPACE_GAP_FACTOR = 0.45;\n/** Gaps larger than this multiple of the font size never merge into one word. */\nconst HARD_BREAK_EM = 1.5;\n/** Overlap tolerance: fonts with overestimated advances produce negative letter gaps. */\nconst NEGATIVE_GAP_EM = 0.45;\nconst DEFAULT_SPACE_EM = 0.25;\n/** Percentile of the sorted gaps taken as the letter-tier baseline. */\nconst LETTER_TIER_PERCENTILE = 0.2;\n/** Word-break offset above the letter-tier gap, in em. */\nconst WORD_MARGIN_EM = 0.15;\n/** Minimum gap, in em, between the letter tier and the breaking gaps above it. */\nconst MIN_VALLEY_EM = 0.08;\n/** Intra-word ceiling, in em, when a run shows no measured word-break valley. */\nconst TRACKING_GAP_LIMIT_EM = 0.35;\n/** Clear space, in em, below which a run counts as normally set, not tracked. */\nconst MIN_TRACKING_EM = 0.04;\n/** Gaps a run needs before its median is evidence of tracking rather than noise. */\nconst MIN_TRACKING_GAPS = 3;\nconst RTL_RE = /[\\u0590-\\u08FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFF]/u;\nconst STRONG_LTR_RE = /[A-Za-z\\u00C0-\\u024F]/u;\n/** A word with no letters and no digits \\u2014 punctuation/symbols only (a\n * standalone \":\" separator, brackets), whose bidi direction is resolved from\n * its neighbours rather than its own content. */\nconst NEUTRAL_WORD_RE = /^[^\\p{L}\\p{N}]+$/u;\n\nexport interface WordBuildContext {\n readonly annotations: readonly PdfAnnotation[];\n /** Space-glyph advance in thousandths of an em for a font, or null when unknown. */\n readonly spaceAdvance: (fontName: string) => number | null;\n}\n\n/**\n * Builds words from one baseline cluster's glyph fragments (visual x order),\n * merging adjacent fragments and inserting word breaks at space-sized gaps.\n */\nexport function buildWords(items: readonly TextItem[], ctx: WordBuildContext): Word[] {\n const words: Word[] = [];\n const metrics = segmentMetrics(items);\n let pendingSpace = false;\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (isSpaceMarker(item)) {\n pendingSpace = true;\n continue;\n }\n pendingSpace = appendItem(words, item, ctx, pendingSpace, metrics[i], items[i + 1]);\n }\n return words;\n}\n\n/** What one hard-break-delimited run's own gaps say about how it was set. */\ninterface RunMetrics {\n /** Word-break threshold in em, or null when the gaps show no valley. */\n readonly threshold: number | null;\n /** Tracking the run was drawn with, in em (0 when set normally). */\n readonly trackingEm: number;\n}\n\nconst NO_METRICS: RunMetrics = { threshold: null, trackingEm: 0 };\n\n/** Gap statistics per item, measured within its own run: two unrelated runs\n * sharing a baseline would otherwise pool their gaps into one statistic. */\nfunction segmentMetrics(items: readonly TextItem[]): RunMetrics[] {\n const metrics = new Array<RunMetrics>(items.length).fill(NO_METRICS);\n let start = 0;\n for (let i = 1; i <= items.length; i++) {\n if (i < items.length && !breaksRun(items[i - 1], items[i])) continue;\n const run = items.slice(start, i);\n const threshold = bimodalGapThreshold(run);\n metrics.fill({ threshold, trackingEm: measureTracking(run, threshold) }, start, i);\n start = i;\n }\n return metrics;\n}\n\n/** Tracking a run was drawn with, in em, from the median clear space between\n * its glyphs — recovers letterspacing applied by positioning, not by `Tc`. */\nfunction measureTracking(items: readonly TextItem[], threshold: number | null): number {\n const limit = threshold ?? TRACKING_GAP_LIMIT_EM;\n const gaps: number[] = [];\n for (let i = 1; i < items.length; i++) {\n const gap = gapEm(items[i - 1], items[i]);\n if (gap < limit) gaps.push(gap);\n }\n if (gaps.length < MIN_TRACKING_GAPS) return 0;\n gaps.sort((a, b) => a - b);\n const median = gaps[gaps.length >> 1];\n return median >= MIN_TRACKING_EM ? median : 0;\n}\n\n/** A gap too wide to be word spacing — the boundary between two runs. */\nfunction breaksRun(previous: TextItem, item: TextItem): boolean {\n return gapEm(previous, item) > HARD_BREAK_EM;\n}\n\n/**\n * Word-break gap threshold for one baseline cluster, or null when the gaps are\n * too uniform to separate letters from words. Letters cluster at the line's\n * lowest gap tier; a word break sits a margin above it. The baseline is a low\n * percentile rather than the median so a line dominated by word gaps — a table\n * row of short labels, where word gaps outnumber letter gaps — still anchors on\n * the letter tier instead of drifting up into the word tier and merging every\n * word. Works whether that tier is ~0 (normal fonts) or negative (per-glyph\n * PDFs whose advances overshoot). Hard-break-sized gaps are excluded so a\n * column jump cannot move the baseline. Gaps straddling a script-direction\n * boundary (RTL against Latin/digits) are excluded too: such a gap is a break\n * boundary, not a word or letter gap, so an embedded number beside RTL text\n * cannot inflate the valley and merge the genuine word gaps around it. The\n * threshold is returned only when a real valley of at least `MIN_VALLEY_EM`\n * separates the letter tier from the breaking gaps above it.\n */\nexport function bimodalGapThreshold(items: readonly TextItem[]): number | null {\n const gaps: number[] = [];\n for (let i = 1; i < items.length; i++) {\n if (directionFlips(items[i - 1].text, items[i].text)) continue;\n const gap = gapEm(items[i - 1], items[i]);\n if (gap <= HARD_BREAK_EM) gaps.push(gap);\n }\n if (gaps.length < 4) return null;\n gaps.sort((a, b) => a - b);\n const baseline = gaps[Math.floor(gaps.length * LETTER_TIER_PERCENTILE)];\n const threshold = baseline + WORD_MARGIN_EM;\n return hasValleyAt(gaps, threshold) ? threshold : null;\n}\n\n/** A gap as a fraction of the type it separates, so one threshold serves a\n * line that mixes font sizes. */\nfunction gapEm(previous: TextItem, item: TextItem): number {\n return (item.x - previous.endX) / Math.max(previous.fontSize, item.fontSize, 1);\n}\n\n/** True when some gaps fall below `threshold` and the rest sit a clear valley above it. */\nfunction hasValleyAt(sortedGaps: readonly number[], threshold: number): boolean {\n let maxBelow = -Infinity;\n let minAbove = Infinity;\n for (const gap of sortedGaps) {\n if (gap < threshold) maxBelow = Math.max(maxBelow, gap);\n else minAbove = Math.min(minAbove, gap);\n }\n if (maxBelow === -Infinity || minAbove === Infinity) return false;\n return minAbove - maxBelow >= MIN_VALLEY_EM;\n}\n\nfunction appendItem(\n words: Word[],\n item: TextItem,\n ctx: WordBuildContext,\n pendingSpace: boolean,\n metrics: RunMetrics,\n nextItem?: TextItem,\n): boolean {\n const style = itemRunStyle(item, findLinkUri(item, ctx.annotations), metrics.trackingEm);\n const previous = words.at(-1);\n const gap = previous ? item.x - previous.endX : 0;\n const decision = previous\n ? classifyGap(gap, previous, item, ctx, metrics.threshold, nextItem)\n : 'break';\n\n if (previous && decision !== 'break' && sameStyle(previous.style, style)) {\n const separator = decision === 'space' || pendingSpace ? ' ' : '';\n if (mergesRightToLeft(previous.text, item.text)) {\n previous.text = item.text + separator + previous.text;\n } else {\n previous.text += separator + item.text;\n }\n previous.endX = Math.max(previous.endX, item.endX);\n return false;\n }\n words.push({\n text: item.text,\n x: item.x,\n endX: item.endX,\n y: item.y,\n fontSize: item.fontSize,\n style,\n mcid: item.mcid,\n spaceBefore: pendingSpace || decision !== 'merge',\n hardBreak: previous !== undefined &&\n gap > Math.max(previous.fontSize, item.fontSize) * HARD_BREAK_EM,\n });\n return false;\n}\n\ntype GapDecision = 'merge' | 'space' | 'break';\n\nfunction classifyGap(\n gap: number,\n previous: Word,\n item: TextItem,\n ctx: WordBuildContext,\n bimodal: number | null,\n nextItem?: TextItem,\n): GapDecision {\n const fontSize = Math.max(previous.fontSize, item.fontSize);\n if (gap > fontSize * HARD_BREAK_EM) return 'break';\n if (gap < -fontSize * NEGATIVE_GAP_EM) return 'break';\n if (directionFlips(previous.text, item.text)) return 'break';\n if (neutralBelongsToRtl(previous, item, nextItem)) return 'break';\n if (bimodal !== null) return gap / fontSize >= bimodal ? 'space' : 'merge';\n const known = knownSpaceWidth(item, ctx);\n if (known !== null) {\n const spaceWidth = known + Math.max(0, item.wordSpacing) + Math.max(0, item.charSpacing);\n return gap >= spaceWidth * SPACE_GAP_FACTOR ? 'space' : 'merge';\n }\n const spaceWidth = estimateSpaceWidth(item, ctx) +\n Math.max(0, item.wordSpacing) + Math.max(0, item.charSpacing);\n return gap >= spaceWidth * SPACE_GAP_FACTOR ? 'space' : 'merge';\n}\n\n/**\n * A neutral fragment (a field colon) wedged between an LTR value and an RTL\n * label takes the RTL side per the UBA (a neutral between opposite-direction\n * runs resolves to the paragraph direction). Merging it into the LTR value\n * would strand the colon at the visual line end (\"19011466 :\"); breaking here\n * lets it start a word that the following RTL label absorbs (\"מספר חשבונית :\").\n */\nfunction neutralBelongsToRtl(previous: Word, item: TextItem, nextItem?: TextItem): boolean {\n if (!NEUTRAL_WORD_RE.test(item.text.trim() || ' ')) return false;\n return isLtrRun(previous.text) && nextItem !== undefined && isRtlRun(nextItem.text);\n}\n\n/**\n * True when the two runs are of opposite strong direction — Hebrew/Arabic\n * against Latin or digits. Such a boundary must not merge into one word even\n * at a hairline gap: keeping them separate lets {@link toLogicalOrder} place an\n * embedded number after its RTL label (\"מספר צרכן 25024809\") instead of gluing\n * it in front (\"25024809מספר צרכן\").\n */\nfunction directionFlips(previousText: string, incomingText: string): boolean {\n return (isRtlRun(previousText) && isLtrRun(incomingText)) ||\n (isLtrRun(previousText) && isRtlRun(incomingText));\n}\n\nfunction isRtlRun(text: string): boolean {\n return RTL_RE.test(text);\n}\n\nfunction isLtrRun(text: string): boolean {\n return !RTL_RE.test(text) && (STRONG_LTR_RE.test(text) || /\\d/.test(text));\n}\n\n/** Space width in points, falling back to {@link DEFAULT_SPACE_EM} when the\n * font declares no space advance. */\nfunction estimateSpaceWidth(item: TextItem, ctx: WordBuildContext): number {\n const known = knownSpaceWidth(item, ctx);\n if (known !== null) return known;\n const scale = item.horizontalScaling > 0 ? item.horizontalScaling / 100 : 1;\n return DEFAULT_SPACE_EM * item.fontSize * scale;\n}\n\n/**\n * Width of the font's declared space glyph in points, or null when the font\n * declares no usable space advance. The declared (`/Widths`) advance is the\n * spec-exact word-break yardstick (ISO 32000 §9.4.4), so the caller prefers it\n * over the statistical {@link bimodalGapThreshold} fallback.\n */\nfunction knownSpaceWidth(item: TextItem, ctx: WordBuildContext): number | null {\n const advance = ctx.spaceAdvance(item.fontName);\n if (advance === null || advance <= 0) return null;\n const scale = item.horizontalScaling > 0 ? item.horizontalScaling / 100 : 1;\n return (advance / 1000) * item.fontSize * scale;\n}\n\n/**\n * Fragments arrive in visual left-to-right order. For RTL script the\n * visually-left fragment is logically LATER, so an incoming RTL fragment is\n * prepended — this reassembles per-character Hebrew/Arabic PDFs into\n * logical-order words. Neutrals (punctuation) already collected into the word\n * count as RTL context so a leading \"!\" or \".\" does not strand itself inside\n * the word (\"בהצלחה!\" not \"בהצלח!ה\"). A strong-LTR predecessor (Latin) keeps\n * appending; digit/Latin boundaries never reach here — they break first.\n */\nfunction mergesRightToLeft(previousText: string, incomingText: string): boolean {\n return RTL_RE.test(incomingText) && !STRONG_LTR_RE.test(previousText);\n}\n\nfunction isSpaceMarker(item: TextItem): boolean {\n return item.isSpaceOffset || item.text.trim().length === 0;\n}\n\nfunction itemRunStyle(item: TextItem, link: string, trackingEm: number): RunStyle {\n return {\n fontName: item.fontName,\n fontFamily: item.fontFamily,\n fontSize: item.fontSize,\n color: item.color,\n bold: item.bold,\n italic: item.italic,\n underline: false,\n baselineShift: baselineShiftOf(item),\n letterSpacing: letterSpacingOf(item, trackingEm),\n link,\n };\n}\n\n/** Declared `Tc` tracking wins; measured tracking covers the runs it misses. */\nfunction letterSpacingOf(item: TextItem, trackingEm: number): number {\n const pt = item.charSpacing > 0.25 ? item.charSpacing : trackingEm * item.fontSize;\n return pt > 0.25 ? Math.round(pt * 100) / 100 : 0;\n}\n\nfunction baselineShiftOf(item: TextItem): BaselineShift {\n if (item.textRise > item.fontSize * 0.15) return 'sup';\n if (item.textRise < -item.fontSize * 0.15) return 'sub';\n return 'none';\n}\n\nexport function sameStyle(a: RunStyle, b: RunStyle): boolean {\n return a.fontName === b.fontName &&\n Math.abs(a.fontSize - b.fontSize) < 0.25 &&\n a.color === b.color &&\n a.bold === b.bold &&\n a.italic === b.italic &&\n a.underline === b.underline &&\n a.baselineShift === b.baselineShift &&\n a.letterSpacing === b.letterSpacing &&\n a.link === b.link;\n}\n\nfunction findLinkUri(item: TextItem, annotations: readonly PdfAnnotation[]): string {\n if (annotations.length === 0) return '';\n const midX = (item.x + item.endX) / 2;\n for (const annotation of annotations) {\n if (annotation.page !== item.page) continue;\n const withinX = midX >= annotation.x && midX <= annotation.x + annotation.width;\n const withinY = item.y >= annotation.y - 2 && item.y <= annotation.y + annotation.height + 2;\n if (withinX && withinY) return annotation.uri;\n }\n return '';\n}\n\nexport function strongRtlRatio(text: string): number {\n let rtl = 0;\n let strong = 0;\n for (const ch of text) {\n if (RTL_RE.test(ch)) {\n rtl++;\n strong++;\n } else if (STRONG_LTR_RE.test(ch)) {\n strong++;\n }\n }\n return strong === 0 ? 0 : rtl / strong;\n}\n\nexport function detectDirection(words: readonly Word[]): TextDirection {\n const text = words.map(w => w.text).join(' ');\n return strongRtlRatio(text) > 0.3 ? 'rtl' : 'ltr';\n}\n\n/**\n * Converts visually-ordered (left→right) words to logical reading order.\n * For RTL lines the array is reversed, then each maximal run of LTR-only\n * words is restored to its original left→right order, and `spaceBefore`\n * flags are recomputed against each word's new logical predecessor.\n */\nexport function toLogicalOrder(words: Word[], dir: TextDirection): Word[] {\n if (dir === 'ltr' || words.length <= 1) return words;\n const visualSpaceBefore = new Map<Word, boolean>(words.map(w => [w, w.spaceBefore]));\n const reversed = [...words].reverse();\n restoreLtrRuns(reversed);\n recomputeLogicalSpaces(reversed, visualSpaceBefore);\n return reversed;\n}\n\nfunction recomputeLogicalSpaces(words: Word[], visualSpaceBefore: Map<Word, boolean>): void {\n for (let i = 1; i < words.length; i++) {\n const previous = words[i - 1];\n const current = words[i];\n const visuallyLater = previous.x <= current.x ? current : previous;\n current.spaceBefore = visualSpaceBefore.get(visuallyLater) ?? true;\n }\n words[0].spaceBefore = true;\n}\n\nfunction restoreLtrRuns(words: Word[]): void {\n const inLtrRun = ltrRunMembership(words);\n let runStart = -1;\n for (let i = 0; i <= words.length; i++) {\n const isLtr = i < words.length && inLtrRun[i];\n if (isLtr && runStart < 0) runStart = i;\n if (!isLtr && runStart >= 0) {\n reverseRange(words, runStart, i - 1);\n runStart = -1;\n }\n }\n}\n\n/**\n * Marks which words keep their visual left-to-right position when an RTL line\n * is reordered. A word with Latin letters or digits always qualifies. A\n * neutral-only word (punctuation/symbols — e.g. a standalone \":\") qualifies\n * only when its nearest non-neutral neighbours on BOTH sides are LTR: per the\n * Unicode bidi neutral rules a neutral between two LTR runs takes LTR, but one\n * at the boundary with RTL (a field label's colon before a number) takes the\n * paragraph direction and must stay on the RTL side.\n */\nfunction ltrRunMembership(words: readonly Word[]): boolean[] {\n const classes = words.map(wordBidiClass);\n return classes.map((cls, i) => {\n if (cls === 'ltr') return true;\n if (cls === 'rtl') return false;\n return nearestStrongIsLtr(classes, i, -1) && nearestStrongIsLtr(classes, i, 1);\n });\n}\n\ntype BidiClass = 'ltr' | 'rtl' | 'neutral';\n\nfunction wordBidiClass(word: Word): BidiClass {\n if (RTL_RE.test(word.text)) return 'rtl';\n return NEUTRAL_WORD_RE.test(word.text) ? 'neutral' : 'ltr';\n}\n\n/** Whether the nearest non-neutral word from `from` in `step` direction is LTR. */\nfunction nearestStrongIsLtr(classes: readonly BidiClass[], from: number, step: number): boolean {\n for (let i = from + step; i >= 0 && i < classes.length; i += step) {\n if (classes[i] !== 'neutral') return classes[i] === 'ltr';\n }\n return false;\n}\n\nfunction reverseRange(words: Word[], start: number, end: number): void {\n for (let i = start, j = end; i < j; i++, j--) {\n [words[i], words[j]] = [words[j], words[i]];\n }\n}\n","import type { PathRect } from '../pdf-parser';\nimport type { ClassifyContext } from './readable-classify';\nimport type { Line, TableBlock, TableCellModel, Word } from './readable-types';\nimport { detectDirection } from './readable-words';\n\nconst MIN_ROWS = 2;\nconst MIN_COLS = 2;\n/** Minimum fraction of filled cells for an unruled grid to count as a table. */\nconst MIN_CELL_FILL = 0.5;\nconst SNAP_RATE = 0.8;\nconst EDGE_CLUSTER_EM = 0.5;\nconst SEPARATOR_THICKNESS = 3;\nconst ROW_TOLERANCE_EM = 0.35;\n\nexport interface BandTableSplit {\n readonly before: Line[];\n readonly table: TableBlock;\n readonly after: Line[];\n /** Separator rects consumed by a ruled grid — excluded from later rule/hr detection. */\n readonly usedRects: ReadonlySet<PathRect>;\n /** Lines on the top-row baseline just outside the grid on the leading\n * side — a form's row label, rendered beside the table. */\n readonly leadingLabel?: Line[];\n}\n\n/**\n * Finds the first table inside a vertical band of lines. Ruled grids (drawn\n * separators) are matched first; otherwise consecutive multi-segment rows\n * whose segment edges snap to shared column positions are reconstructed as\n * an unruled table. Returns null when the band holds no table.\n */\nexport interface TableDetectionModes {\n /** Detect ruled (drawn-grid) tables. Default true. */\n readonly ruled?: boolean;\n /**\n * Detect unruled (edge-aligned) tables. Default true. At PAGE level use\n * 'strict' — before column splitting a two-column text layout is nearly\n * indistinguishable from an unruled table, so only unmistakably cellular\n * rows (uniformly short segments) may be claimed there; everything else\n * gets its chance at region level after columns are resolved.\n */\n readonly unruled?: boolean | 'strict';\n}\n\nexport function findTableInBand(\n band: readonly Line[],\n rects: readonly PathRect[],\n pageIndex: number,\n ctx: ClassifyContext,\n modes: TableDetectionModes = {},\n): BandTableSplit | null {\n const rows = groupByBaseline(band);\n const ruled = (modes.ruled ?? true) ? findRuledTable(band, rows, rects, pageIndex) : null;\n if (ruled) return applyTableSpan(ruled, ctx);\n const unruled = modes.unruled ?? true;\n if (unruled === false) return null;\n const measureWidth = Math.max(1, ctx.pageBounds.x1 - ctx.pageBounds.x0);\n const sectionRules = rects.filter(r => r.width >= measureWidth * SECTION_RULE_RATIO);\n const split = findUnruledTable(rows, pageIndex, ctx, unruled === 'strict', sectionRules);\n return split ? applyTableSpan(split, ctx, rects) : null;\n}\n\n/** Only a rule spanning most of the measure divides sections; narrower rules\n * inside a run are the table's own row styling. */\nconst SECTION_RULE_RATIO = 0.85;\n\n/** Distinct baselines of thin horizontal rules strictly inside the rows' y-range. */\nfunction interiorRuleYs(lines: readonly Line[], rects: readonly PathRect[]): number[] {\n const ys = lines.map(l => l.y);\n const top = Math.max(...ys);\n const bottom = Math.min(...ys);\n const found: number[] = [];\n for (const rect of rects) {\n const isRule = rect.height <= SEPARATOR_THICKNESS && rect.width > 20;\n if (!isRule || rect.y >= top || rect.y <= bottom) continue;\n if (!found.some(y => Math.abs(y - rect.y) <= 2)) found.push(rect.y);\n }\n return found;\n}\n\n/** Stamps the table's x-extent share of the measure so emission can render a\n * near-full-span data table at full width like the original, and records\n * whether the PDF drew rules between the table's rows. */\nfunction applyTableSpan(\n split: BandTableSplit,\n ctx: ClassifyContext,\n rects: readonly PathRect[] = [],\n): BandTableSplit {\n const lines = split.table.rows.flat().flatMap(cell => cell.lines);\n if (lines.length === 0) return split;\n const x0 = Math.min(...lines.map(l => l.x));\n const span = Math.max(...lines.map(l => l.endX)) - x0;\n const measure = Math.max(1, ctx.pageBounds.x1 - ctx.pageBounds.x0);\n const startsAtMeasure = x0 - ctx.pageBounds.x0 <= measure * TABLE_START_SLACK_RATIO;\n split.table.spanRatio = startsAtMeasure ? Math.min(1, span / measure) : 0;\n split.table.rowRules = split.table.ruled || hasInteriorRowRules(lines, rects);\n return split;\n}\n\n/** A table starting further than this share into the measure is positioned\n * content (a header card beside a logo), never stretched to full width. */\nconst TABLE_START_SLACK_RATIO = 0.15;\n\n/** True when thin horizontal rules repeat between the table's text rows —\n * drawn row separators. A single crossing rule is a section divider (handled\n * by {@link splitRowsAtSectionRule}), not row styling. */\nfunction hasInteriorRowRules(lines: readonly Line[], rects: readonly PathRect[]): boolean {\n return interiorRuleYs(lines, rects).length >= 2;\n}\n\nfunction groupByBaseline(band: readonly Line[]): Line[][] {\n const sorted = [...band].sort((a, b) => b.y - a.y || a.x - b.x);\n const rows: Line[][] = [];\n for (const line of sorted) {\n const current = rows.at(-1);\n const anchor = current?.[0];\n if (anchor && Math.abs(anchor.y - line.y) <= anchor.fontSize * ROW_TOLERANCE_EM) {\n current.push(line);\n } else {\n rows.push([line]);\n }\n }\n return rows;\n}\n\n// ── Ruled tables ────────────────────────────────────────────────────────\n\ninterface RuledGrid {\n readonly xs: number[];\n readonly ys: number[];\n readonly sources: PathRect[];\n}\n\nfunction findRuledTable(\n band: readonly Line[],\n rows: readonly Line[][],\n rects: readonly PathRect[],\n pageIndex: number,\n): BandTableSplit | null {\n const separators = bandScopedRects(band, rects).filter(isSeparatorRect);\n const components = connectedComponents(separators)\n .sort((a, b) => componentTop(b) - componentTop(a));\n for (const component of components) {\n const split = ruledTableFromComponent(band, component, pageIndex);\n if (split) return split;\n }\n return null;\n}\n\n/**\n * Builds a table from one spatially-cohesive cluster of separator rects. A\n * page can carry several disjoint bordered regions (e.g. a details box above a\n * data grid); clustering first keeps each its own grid instead of fusing them\n * into a single page-spanning table with the overflow dumped out of order.\n */\nfunction ruledTableFromComponent(\n band: readonly Line[],\n component: readonly PathRect[],\n pageIndex: number,\n): BandTableSplit | null {\n const grid = detectRuledGrid(component);\n if (!grid) return null;\n\n const inGrid = band.filter(line => lineInGrid(line, grid));\n if (groupByBaseline(inGrid).length < MIN_ROWS) return null;\n\n const cells = buildRuledCells(inGrid, grid);\n if (!cells) return null;\n if (cellFillRatio(cells) < MIN_CELL_FILL) return null;\n if (isRtlTable([inGrid])) for (const row of cells) row.reverse();\n\n const consumed = new Set(inGrid);\n const yTop = Math.max(...grid.ys);\n const leads = (line: Line): boolean => leadsTopRow(line, grid, yTop);\n const leadingLabel = band.filter(line => !consumed.has(line) && line.y <= yTop && leads(line));\n return {\n before: band.filter(line => !consumed.has(line) && line.y > yTop),\n table: makeTableBlock(cells, true, pageIndex),\n after: band.filter(line => !consumed.has(line) && line.y <= yTop && !leads(line)),\n usedRects: new Set(grid.sources),\n ...(leadingLabel.length > 0 ? { leadingLabel } : {}),\n };\n}\n\n/**\n * A line on the table's top-row baseline sitting horizontally OUTSIDE the grid\n * is the row's leading label (an RTL form writes \"סובל מ\" just right of the\n * diagnosis grid) — it renders beside the table, not after it. Lines beside\n * lower rows or below the grid (captions) keep their after position.\n */\nfunction leadsTopRow(line: Line, grid: RuledGrid, yTop: number): boolean {\n const ysDescending = [...grid.ys].sort((a, b) => b - a);\n const rowFloor = ysDescending.length > 1 ? ysDescending[1] : yTop;\n if (line.y > yTop || line.y <= rowFloor) return false;\n return line.endX <= Math.min(...grid.xs) || line.x >= Math.max(...grid.xs);\n}\n\n/** Whether a rect is a grid separator (thin line or stroked cell box). */\nfunction isSeparatorRect(rect: PathRect): boolean {\n const isHorizontalLine = rect.height <= SEPARATOR_THICKNESS && rect.width > 20;\n const isVerticalLine = rect.width <= SEPARATOR_THICKNESS && rect.height > 8;\n const isCellBox = rect.stroked && rect.width > 20 && rect.height > 8;\n return isHorizontalLine || isVerticalLine || isCellBox;\n}\n\n/** Vertical gap (pt) within which two separators are treated as one grid. */\nconst COMPONENT_GAP = 4;\n\n/**\n * Groups separator rects into connected components — clusters whose inflated\n * bounding boxes touch. Rects in different components belong to different\n * tables and must not share a grid.\n */\nfunction connectedComponents(rects: readonly PathRect[]): PathRect[][] {\n const parent = rects.map((_, i) => i);\n const find = (i: number): number => {\n let root = i;\n while (parent[root] !== root) root = parent[root];\n while (parent[i] !== root) { const next = parent[i]; parent[i] = root; i = next; }\n return root;\n };\n for (let i = 0; i < rects.length; i++) {\n for (let j = i + 1; j < rects.length; j++) {\n if (rectsTouch(rects[i], rects[j])) parent[find(i)] = find(j);\n }\n }\n const groups = new Map<number, PathRect[]>();\n for (let i = 0; i < rects.length; i++) {\n const root = find(i);\n const group = groups.get(root) ?? [];\n group.push(rects[i]);\n groups.set(root, group);\n }\n return [...groups.values()];\n}\n\nfunction rectsTouch(a: PathRect, b: PathRect): boolean {\n return a.x - COMPONENT_GAP <= b.x + b.width && b.x - COMPONENT_GAP <= a.x + a.width &&\n a.y - COMPONENT_GAP <= b.y + b.height && b.y - COMPONENT_GAP <= a.y + a.height;\n}\n\nfunction componentTop(component: readonly PathRect[]): number {\n return Math.max(...component.map(rect => rect.y + rect.height));\n}\n\n/** Restricts grid detection to rects vertically overlapping this band. */\nfunction bandScopedRects(band: readonly Line[], rects: readonly PathRect[]): PathRect[] {\n if (band.length === 0) return [];\n const margin = band[0].fontSize * 2;\n const yTop = Math.max(...band.map(l => l.y)) + margin;\n const yBottom = Math.min(...band.map(l => l.y)) - margin;\n return rects.filter(rect => rect.y <= yTop && rect.y + rect.height >= yBottom);\n}\n\n/** Clusters separator-rect positions into grid line coordinates. */\nfunction detectRuledGrid(rects: readonly PathRect[]): RuledGrid | null {\n const xCandidates: number[] = [];\n const yCandidates: number[] = [];\n const sources: PathRect[] = [];\n for (const rect of rects) {\n if (collectGridCandidates(rect, xCandidates, yCandidates)) sources.push(rect);\n }\n const xs = clusterPositions(xCandidates, 2);\n const ys = clusterPositions(yCandidates, 2);\n if (xs.length < MIN_COLS + 1 || ys.length < MIN_ROWS + 1) return null;\n return { xs, ys, sources };\n}\n\nfunction collectGridCandidates(rect: PathRect, xs: number[], ys: number[]): boolean {\n const isHorizontalLine = rect.height <= SEPARATOR_THICKNESS && rect.width > 20;\n const isVerticalLine = rect.width <= SEPARATOR_THICKNESS && rect.height > 8;\n const isCellBox = rect.stroked && rect.width > 20 && rect.height > 8;\n if (isHorizontalLine) ys.push(rect.y + rect.height / 2);\n if (isVerticalLine) xs.push(rect.x + rect.width / 2);\n if (isCellBox) {\n xs.push(rect.x, rect.x + rect.width);\n ys.push(rect.y, rect.y + rect.height);\n }\n return isHorizontalLine || isVerticalLine || isCellBox;\n}\n\nfunction clusterPositions(values: readonly number[], tolerance: number): number[] {\n const sorted = [...values].sort((a, b) => a - b);\n const clusters: number[] = [];\n for (const value of sorted) {\n const last = clusters.at(-1);\n if (last === undefined || value - last > tolerance) {\n clusters.push(value);\n }\n }\n return clusters;\n}\n\nfunction lineInGrid(line: Line, grid: RuledGrid): boolean {\n const x0 = Math.min(...grid.xs);\n const x1 = Math.max(...grid.xs);\n const y0 = Math.min(...grid.ys);\n const y1 = Math.max(...grid.ys);\n const midX = (line.x + line.endX) / 2;\n return midX >= x0 && midX <= x1 && line.y >= y0 && line.y <= y1;\n}\n\nfunction buildRuledCells(lines: readonly Line[], grid: RuledGrid): TableCellModel[][] | null {\n const xs = [...grid.xs].sort((a, b) => a - b);\n const ys = [...grid.ys].sort((a, b) => b - a);\n const rowCount = ys.length - 1;\n const colCount = xs.length - 1;\n\n const cells: Line[][][] = Array.from({ length: rowCount },\n () => Array.from({ length: colCount }, () => []));\n let placed = 0;\n for (const line of lines) {\n const row = bandIndex(ys, line.y);\n const col = columnIndex(xs, (line.x + line.endX) / 2);\n if (row < 0 || col < 0) continue;\n cells[row][col].push(line);\n placed++;\n }\n if (placed === 0) return null;\n return cells.map(row => row.map(cellLines => {\n cellLines.sort((a, b) => b.y - a.y || a.x - b.x);\n return { lines: cellLines };\n }));\n}\n\nfunction bandIndex(descendingYs: readonly number[], y: number): number {\n for (let i = 0; i < descendingYs.length - 1; i++) {\n if (y <= descendingYs[i] && y >= descendingYs[i + 1]) return i;\n }\n return -1;\n}\n\nfunction columnIndex(ascendingXs: readonly number[], x: number): number {\n for (let i = 0; i < ascendingXs.length - 1; i++) {\n if (x >= ascendingXs[i] && x <= ascendingXs[i + 1]) return i;\n }\n return -1;\n}\n\n// ── Unruled tables ──────────────────────────────────────────────────────\n\nfunction findUnruledTable(\n rows: readonly Line[][],\n pageIndex: number,\n ctx: ClassifyContext,\n strict = false,\n rects: readonly PathRect[] = [],\n): BandTableSplit | null {\n const run = findMultiSegmentRun(rows, ctx.bodyLeading);\n if (!run) return null;\n capRunAtSectionRule(run, rows, rects);\n const runRows = rows.slice(run.start, run.end);\n\n const rtl = isRtlTable(runRows);\n const columns = clusterColumns(runRows, ctx.bodyFontSize, rtl);\n if (!columns) return null;\n if (!looksCellular(runRows, columns.positions.length, strict)) return null;\n\n const cells = runRows.map(row => rowToCells(row, columns, rtl));\n if (cellFillRatio(cells) < MIN_CELL_FILL) return null;\n return {\n before: rows.slice(0, run.start).flat(),\n table: makeTableBlock(cells, false, pageIndex),\n after: rows.slice(run.end).flat(),\n usedRects: new Set<PathRect>(),\n };\n}\n\n/**\n * A SINGLE full-width rule crossing the run is a section divider (a form's\n * header separator), so rows below it must not fold into the table above —\n * the run ends at the rule and the tail flows normally. Repeated rules\n * between rows are the table's own row styling and leave the run intact.\n */\nfunction capRunAtSectionRule(\n run: { start: number; end: number },\n rows: readonly Line[][],\n rects: readonly PathRect[],\n): void {\n const runLines = rows.slice(run.start, run.end).flat();\n if (runLines.length === 0) return;\n const ruleYs = interiorRuleYs(runLines, rects);\n if (ruleYs.length !== 1) return;\n for (let i = run.start; i < run.end; i++) {\n if (rows[i][0].y < ruleYs[0]) {\n if (i > run.start) run.end = i;\n return;\n }\n }\n}\n\n/**\n * Fraction of grid cells that hold text. A genuine table fills most of its\n * grid; scattered key/value prose snapped onto shared edges leaves most cells\n * empty, and is more readable as flowing paragraphs than a ragged sparse grid.\n */\nfunction cellFillRatio(cells: readonly TableCellModel[][]): number {\n let filled = 0;\n let total = 0;\n for (const row of cells) {\n for (const cell of row) {\n total++;\n if (cell.lines.length > 0) filled++;\n }\n }\n return total > 0 ? filled / total : 0;\n}\n\n/**\n * Distinguishes tabular rows from multi-column prose: table cells are short\n * relative to the band width, while prose columns fill roughly half of it.\n * Two-column candidates get the stricter bound since they are the ambiguous\n * case; without this, every two-column page would collapse into a table.\n */\nfunction looksCellular(rows: readonly Line[][], columnCount: number, strict = false): boolean {\n const segments = rows.flat();\n const bandX0 = Math.min(...segments.map(l => l.x));\n const bandX1 = Math.max(...segments.map(l => l.endX));\n const bandWidth = bandX1 - bandX0;\n if (bandWidth <= 0) return false;\n const widths = segments.map(l => l.endX - l.x).sort((a, b) => a - b);\n const median = widths[Math.floor(widths.length / 2)];\n const maxRatio = columnCount >= 3 ? 0.4 : 0.3;\n if (median / bandWidth > maxRatio) return false;\n if (!strict) return true;\n const widest = widths.at(-1) ?? 0;\n return widest / bandWidth <= 0.35;\n}\n\n/**\n * Longest run of consecutive rows that each fragment into two or more\n * segments. Single-segment rows end a run — which means multi-line cells in\n * UNRULED tables are not merged (a continuation line reads as prose and\n * terminates the table). This is a conscious v1 limitation; ruled tables\n * support multi-line cells via grid bands.\n */\nfunction findMultiSegmentRun(\n rows: readonly Line[][],\n bodyLeading: number,\n): { start: number; end: number } | null {\n let best: { start: number; end: number } | null = null;\n let start = -1;\n for (let i = 0; i <= rows.length; i++) {\n const qualifies = i < rows.length && rows[i].length >= MIN_COLS &&\n (start < 0 || i === start || rowGap(rows, i) <= bodyLeading * 3);\n if (qualifies && start < 0) start = i;\n if (!qualifies && start >= 0) {\n if (i - start >= MIN_ROWS && (!best || i - start > best.end - best.start)) {\n best = { start, end: i };\n }\n start = -1;\n }\n }\n return best;\n}\n\nfunction rowGap(rows: readonly Line[][], index: number): number {\n return rows[index - 1][0].y - rows[index][0].y;\n}\n\n/** Column positions plus the metric used to assign lines to them. */\ninterface ColumnModel {\n readonly positions: number[];\n readonly byCenter: boolean;\n}\n\n/** Largest fragment (as a fraction of band width) allowed for center clustering. */\nconst SHORT_FRAGMENT_RATIO = 0.35;\n/** Most fragments a row may hold to qualify for center clustering. */\nconst MAX_CENTER_FRAGMENTS = 3;\n/**\n * Center-alignment tolerance, in em. Looser than the edge tolerance because a\n * centered label and its value are typeset independently and their midpoints\n * drift by up to ~1 em; columns sit far enough apart that this never merges\n * two of them.\n */\nconst CENTER_CLUSTER_EM = 1.05;\n\n/**\n * Clusters candidate rows into column positions. Start-edge alignment (right\n * edges for RTL) is tried first; when that fails but the rows are short,\n * few-per-row fragments — the shape of a centered label/value grid such as a\n * signature block whose cells share neither left nor right edge — their\n * midpoints are clustered instead. Accepts only when at least {@link SNAP_RATE}\n * of segments snap to a cluster supported by two or more distinct rows.\n */\nfunction clusterColumns(\n rows: readonly Line[][],\n bodyFontSize: number,\n rtl: boolean,\n): ColumnModel | null {\n const tolerance = Math.max(3, bodyFontSize * EDGE_CLUSTER_EM);\n const byEdge = clusterPositionsWithSupport(rows, tolerance, line => edgeOf(line, rtl));\n if (byEdge) {\n byEdge.sort((a, b) => a - b);\n return { positions: byEdge, byCenter: false };\n }\n if (!rowsAreShortFragments(rows)) return null;\n const centerTolerance = Math.max(3, bodyFontSize * CENTER_CLUSTER_EM);\n const byCenter = clusterPositionsWithSupport(rows, centerTolerance, centerOf);\n if (!byCenter) return null;\n byCenter.sort((a, b) => (rtl ? b - a : a - b));\n return { positions: byCenter, byCenter: true };\n}\n\nfunction clusterPositionsWithSupport(\n rows: readonly Line[][],\n tolerance: number,\n positionOf: (line: Line) => number,\n): number[] | null {\n const edges = rows.flatMap((row, rowIdx) =>\n row.map(line => ({ value: positionOf(line), rowIdx })));\n const clusters = clusterWithSupport(edges, tolerance);\n const supported = clusters.filter(c => c.rows.size >= MIN_ROWS);\n if (supported.length < MIN_COLS) return null;\n const snapped = edges.filter(edge =>\n supported.some(c => Math.abs(edge.value - c.center) <= tolerance)).length;\n if (snapped / edges.length < SNAP_RATE) return null;\n return supported.map(c => c.center);\n}\n\n/** True when every row holds few, short fragments — never prose columns. */\nfunction rowsAreShortFragments(rows: readonly Line[][]): boolean {\n const segments = rows.flat();\n const bandX0 = Math.min(...segments.map(l => l.x));\n const bandX1 = Math.max(...segments.map(l => l.endX));\n const bandWidth = bandX1 - bandX0;\n if (bandWidth <= 0) return false;\n if (rows.some(row => row.length > MAX_CENTER_FRAGMENTS)) return false;\n return segments.every(line => line.endX - line.x <= bandWidth * SHORT_FRAGMENT_RATIO);\n}\n\nfunction edgeOf(line: Line, rtl: boolean): number {\n return rtl ? -line.endX : line.x;\n}\n\nfunction centerOf(line: Line): number {\n return (line.x + line.endX) / 2;\n}\n\nfunction isRtlTable(rows: ReadonlyArray<readonly Line[]>): boolean {\n const lines = rows.flat();\n return lines.filter(l => l.dir === 'rtl').length * 2 > lines.length;\n}\n\nfunction clusterWithSupport(\n edges: ReadonlyArray<{ value: number; rowIdx: number }>,\n tolerance: number,\n): Array<{ center: number; count: number; rows: Set<number> }> {\n const sorted = [...edges].sort((a, b) => a.value - b.value);\n const clusters: Array<{ center: number; count: number; rows: Set<number> }> = [];\n for (const edge of sorted) {\n const last = clusters.at(-1);\n if (last && edge.value - last.center <= tolerance) {\n last.center = (last.center * last.count + edge.value) / (last.count + 1);\n last.count++;\n last.rows.add(edge.rowIdx);\n } else {\n clusters.push({ center: edge.value, count: 1, rows: new Set([edge.rowIdx]) });\n }\n }\n return clusters;\n}\n\nfunction rowToCells(\n row: readonly Line[],\n columns: ColumnModel,\n rtl: boolean,\n): TableCellModel[] {\n const cells: Line[][] = columns.positions.map(() => []);\n for (const line of row) {\n const value = columns.byCenter ? centerOf(line) : edgeOf(line, rtl);\n cells[nearestColumnIndex(value, columns.positions)].push(line);\n }\n return cells.map(cellLines => ({ lines: cellLines }));\n}\n\n// ── Multi-line prose columns ────────────────────────────────────────────\n\n/** Each column of a prose column-zone must span at least this many baselines. */\nconst COLUMN_ZONE_MIN_ROWS = 3;\n/** A line must overhang the gutter by more than this (pt) to be a split candidate. */\nconst GUTTER_SPLIT_TOLERANCE = 2;\n/** Split a straddling line only at an internal gap this wide, in em. */\nconst GUTTER_GAP_EM = 0.6;\n/** Places the gutter threshold this far (pt) left of the second column's edge,\n * inside the gap, so a right-column start exactly on the edge classifies right. */\nconst GUTTER_INSET = 2;\n\nexport interface ColumnZoneSplit {\n readonly before: Line[];\n readonly columns: Line[][];\n readonly after: Line[];\n}\n\n/**\n * Detects a multi-line, multi-column PROSE region — e.g. a CV's Summary\n * paragraph beside a Core-Skills list — that the unruled-table pass would\n * mis-claim as a sparse 6×2 table or collapse into interleaved full-width\n * text. A long left-column line abutting the right column (only a small gap\n * between them) is split at the gutter first so the whole region is seen. The\n * region is returned as ordered column line-groups plus the rows above/below,\n * or null when the band is not a clean multi-line column zone. Short-cell\n * (cellular) runs are left to the table detector — only wide prose columns,\n * each spanning several baselines, are returned here.\n */\nexport function findColumnZone(\n band: readonly Line[],\n ctx: ClassifyContext,\n): ColumnZoneSplit | null {\n const tolerance = Math.max(3, ctx.bodyFontSize * EDGE_CLUSTER_EM);\n const gutter = detectSecondaryGutter(groupByBaseline(band), tolerance);\n if (gutter === null) return null;\n\n const rows = groupByBaseline(splitStraddlingLines(band, gutter));\n const zone = gutterZoneBounds(rows, gutter);\n if (!zone) return null;\n\n const zoneRows = rows.slice(zone.start, zone.end);\n const rtl = isRtlTable(zoneRows);\n const columns = clusterColumns(zoneRows, ctx.bodyFontSize, rtl);\n if (!columns || columns.positions.length < MIN_COLS) return null;\n if (looksCellular(zoneRows, columns.positions.length, true)) return null;\n\n const groups = zoneColumnGroups(zoneRows, columns, rtl);\n if (groups.length < MIN_COLS) return null;\n if (groups.some(group => distinctBaselines(group) < COLUMN_ZONE_MIN_ROWS)) return null;\n return {\n before: rows.slice(0, zone.start).flat(),\n columns: groups,\n after: rows.slice(zone.end).flat(),\n };\n}\n\n/**\n * The x of the strongest inner column start — a second column's left edge\n * shared by at least {@link COLUMN_ZONE_MIN_ROWS} rows. Only non-leftmost\n * segments count, so the page margin never qualifies. Returns null for a\n * single-column band.\n */\nfunction detectSecondaryGutter(rows: readonly Line[][], tolerance: number): number | null {\n const innerStarts: Array<{ value: number; rowIdx: number }> = [];\n rows.forEach((row, rowIdx) => {\n const sorted = [...row].sort((a, b) => a.x - b.x);\n for (let i = 1; i < sorted.length; i++) innerStarts.push({ value: sorted[i].x, rowIdx });\n });\n if (innerStarts.length < COLUMN_ZONE_MIN_ROWS) return null;\n const clusters = clusterWithSupport(innerStarts, tolerance);\n let best: { center: number; rows: Set<number> } | null = null;\n for (const cluster of clusters) {\n if (!best || cluster.rows.size > best.rows.size) best = cluster;\n }\n return best && best.rows.size >= COLUMN_ZONE_MIN_ROWS ? best.center - GUTTER_INSET : null;\n}\n\n/** Splits lines that overhang the gutter with a real internal gap; leaves\n * genuine full-width spanners (no wide gap at the gutter) intact. */\nfunction splitStraddlingLines(band: readonly Line[], gutter: number): Line[] {\n const result: Line[] = [];\n for (const line of band) {\n const straddles = line.x < gutter - GUTTER_SPLIT_TOLERANCE &&\n line.endX > gutter + GUTTER_SPLIT_TOLERANCE;\n if (straddles) {\n result.push(...splitLineAtGutter(line, gutter));\n } else {\n result.push(line);\n }\n }\n return result;\n}\n\nfunction splitLineAtGutter(line: Line, gutter: number): Line[] {\n const sorted = [...line.words].sort((a, b) => a.x - b.x);\n const minGap = line.fontSize * GUTTER_GAP_EM;\n const hasColumnGap = sorted.some((word, i) =>\n i > 0 && sorted[i - 1].endX <= gutter && word.x >= gutter &&\n word.x - sorted[i - 1].endX >= minGap);\n if (!hasColumnGap) return [line];\n const left = line.words.filter(w => (w.x + w.endX) / 2 < gutter);\n const right = line.words.filter(w => (w.x + w.endX) / 2 >= gutter);\n if (left.length === 0 || right.length === 0) return [line];\n return [lineFromWords(left, line), lineFromWords(right, line)];\n}\n\nfunction lineFromWords(words: Word[], source: Line): Line {\n return {\n words,\n x: Math.min(...words.map(w => w.x)),\n endX: Math.max(...words.map(w => w.endX)),\n y: source.y,\n fontSize: source.fontSize,\n dir: detectDirection(words),\n page: source.page,\n };\n}\n\ninterface RowSides {\n readonly left: boolean;\n readonly right: boolean;\n readonly spanner: boolean;\n}\n\nfunction classifyRowSides(row: readonly Line[], gutter: number): RowSides {\n let left = false;\n let right = false;\n let spanner = false;\n for (const line of row) {\n if (line.x < gutter - GUTTER_SPLIT_TOLERANCE && line.endX > gutter + GUTTER_SPLIT_TOLERANCE) {\n spanner = true;\n } else if ((line.x + line.endX) / 2 >= gutter) {\n right = true;\n } else {\n left = true;\n }\n }\n return { left, right, spanner };\n}\n\n/**\n * The topmost contiguous, spanner-free run of rows that carries both columns,\n * trimmed to the first and last rows holding right-column content (interior\n * left-only continuation rows are kept). Returns null when no such run has\n * enough rows on both sides.\n */\nfunction gutterZoneBounds(\n rows: readonly Line[][],\n gutter: number,\n): { start: number; end: number } | null {\n const sides = rows.map(row => classifyRowSides(row, gutter));\n let i = 0;\n while (i < sides.length) {\n if (sides[i].spanner) { i++; continue; }\n let j = i;\n while (j < sides.length && !sides[j].spanner) j++;\n const bounds = trimToColumnRows(sides, i, j);\n if (bounds) return bounds;\n i = j;\n }\n return null;\n}\n\nfunction trimToColumnRows(\n sides: readonly RowSides[],\n windowStart: number,\n windowEnd: number,\n): { start: number; end: number } | null {\n let firstRight = -1;\n let lastRight = -1;\n for (let k = windowStart; k < windowEnd; k++) {\n if (sides[k].right) {\n if (firstRight < 0) firstRight = k;\n lastRight = k;\n }\n }\n if (firstRight < 0) return null;\n let rightRows = 0;\n let leftRows = 0;\n for (let k = firstRight; k <= lastRight; k++) {\n if (sides[k].right) rightRows++;\n if (sides[k].left) leftRows++;\n }\n if (rightRows < COLUMN_ZONE_MIN_ROWS || leftRows < COLUMN_ZONE_MIN_ROWS) return null;\n return { start: firstRight, end: lastRight + 1 };\n}\n\n/** Groups a zone's lines into columns (reading order) by their column edge. */\nfunction zoneColumnGroups(\n zoneRows: readonly Line[][],\n columns: ColumnModel,\n rtl: boolean,\n): Line[][] {\n const groups: Line[][] = columns.positions.map(() => []);\n for (const line of zoneRows.flat()) {\n const value = columns.byCenter ? centerOf(line) : edgeOf(line, rtl);\n groups[nearestColumnIndex(value, columns.positions)].push(line);\n }\n const filled = groups.filter(group => group.length > 0);\n filled.sort((a, b) => Math.min(...a.map(l => l.x)) - Math.min(...b.map(l => l.x)));\n return rtl ? [...filled].reverse() : filled;\n}\n\nfunction nearestColumnIndex(value: number, positions: readonly number[]): number {\n let bestIdx = 0;\n let bestDist = Number.POSITIVE_INFINITY;\n for (let i = 0; i < positions.length; i++) {\n const dist = Math.abs(value - positions[i]);\n if (dist < bestDist) { bestDist = dist; bestIdx = i; }\n }\n return bestIdx;\n}\n\nfunction distinctBaselines(lines: readonly Line[]): number {\n const sorted = [...lines].sort((a, b) => b.y - a.y);\n const tolerance = (sorted[0]?.fontSize ?? 12) * 0.5;\n let count = 0;\n let last = Number.POSITIVE_INFINITY;\n for (const line of sorted) {\n if (last - line.y > tolerance) {\n count++;\n last = line.y;\n }\n }\n return count;\n}\n\n// ── Shared ──────────────────────────────────────────────────────────────\n\nfunction makeTableBlock(\n cells: TableCellModel[][],\n ruled: boolean,\n pageIndex: number,\n): TableBlock {\n const allLines = cells.flat().flatMap(cell => cell.lines);\n const rtl = allLines.filter(l => l.dir === 'rtl').length * 2 > allLines.length;\n return {\n kind: 'table',\n rows: cells,\n ruled,\n headerRow: firstRowIsHeader(cells),\n page: pageIndex,\n style: {\n align: '',\n indentStart: 0,\n textIndent: 0,\n lineHeight: 0,\n marginTop: 0,\n dir: rtl ? 'rtl' : '',\n background: '',\n border: '',\n },\n };\n}\n\nfunction firstRowIsHeader(cells: readonly TableCellModel[][]): boolean {\n const firstRow = cells[0];\n if (!firstRow) return false;\n const words = firstRow.flatMap(cell => cell.lines.flatMap(l => l.words));\n if (words.length === 0) return false;\n return words.every(w => w.style.bold);\n}\n","import type { ImageItem, PathRect } from '../pdf-parser';\nimport { classifyGroup, hasListMarker, type ClassifyContext, type GroupKind } from './readable-classify';\nimport { computeMarginTop, resolveBlockStyle, type ColumnBounds } from './readable-styles';\nimport { type BandTableSplit, findColumnZone, findTableInBand } from './readable-tables';\nimport type {\n BlockAlign,\n BlockStyle,\n ColumnsBlock,\n DocBlock,\n HeadingBlock,\n ImageBlock,\n ListBlock,\n Line,\n PageExtract,\n ParagraphBlock,\n RuleBlock,\n TableBlock,\n TableCellModel,\n TextDirection,\n Word,\n} from './readable-types';\n\nconst PARAGRAPH_GAP_FACTOR = 1.8;\nconst FONT_SIZE_CHANGE_RATIO = 1.2;\n/**\n * Font-size ratio between a bullet line and an adjacent non-bullet line above\n * which the non-bullet line is treated as an interleaved subheading rather than\n * a wrapped list continuation. Below the {@link FONT_SIZE_CHANGE_RATIO}\n * paragraph split so only list boundaries are affected; above the 0.5pt font\n * rounding so same-size continuations never trip it.\n */\nconst LIST_SUBHEADING_RATIO = 1.05;\nconst MAX_CUT_DEPTH = 4;\nconst MIN_COLUMN_LINES = 2;\nconst UNDERLINE_MAX_HEIGHT = 2.5;\nconst RULE_MAX_HEIGHT = 3;\n/** A rule candidate within this distance (pt) of a table's row band counts as\n * the table's own grid, not a document rule. */\nconst RULE_TABLE_MARGIN = 2;\n/** A rule at least this fraction of the page width is a page-level separator,\n * never a table cell gridline (cells never span the whole page). */\nconst PAGE_SEPARATOR_WIDTH_RATIO = 0.85;\n/** A rectangular border must enclose at least this vertical span (pt); a smaller\n * gap between two parallel rules is a pair of separators, not a bordering box. */\nconst MIN_BOX_HEIGHT = 20;\n/** The two horizontal edges of a box must agree on x-start and width, and a\n * vertical edge must meet a corner, within this many pt. */\nconst BOX_EDGE_MATCH = 6;\n/** A form-field slot underline sits within this many font-sizes of the value\n * above it and the label below it (the sandwich that distinguishes it from a\n * bare answer-blank rule, whose space below carries no text). */\nconst SLOT_GAP_FONTS = 2;\n/** A slot underline sits under a single value; a rule wider than this fraction\n * of the page is a document separator or a box edge, never a field slot. */\nconst SLOT_MAX_WIDTH_RATIO = 0.5;\n\n/**\n * Master switch for the nested-structure detectors (sub-detector B: left/right\n * justified single-baseline rows; sub-detector A: nested 2×2 quadrant in a\n * cell). Default OFF — a resolved region flows exactly as before until each\n * detector has been validated equal-or-better across the whole doc set.\n */\nconst DETECT_NESTED_STRUCTURE = true;\n\n/** A justified row's inter-segment gap must span at least this fraction of the\n * region width to count as a genuine left/right split rather than a word gap. */\nconst JUSTIFIED_GAP_RATIO = 0.25;\n\n/** Both segments of a justified row must hug their region edge within this many\n * font-sizes (edge-pinned test). */\nconst JUSTIFIED_EDGE_FONTS = 2;\n\n/** A justified header band is short — a title strip, not a column of prose.\n * Regions taller than this (dense multi-column pages, long content blocks) are\n * never a two-item header. */\nconst JUSTIFIED_MAX_ROWS = 2;\n\n/** The band must span most of the page/column width; a narrow region is a prose\n * column whose per-glyph line happens to reach both its own edges. */\nconst JUSTIFIED_MIN_WIDTH_RATIO = 0.5;\n\n/** Absolute floor (pt) on the band width. A justified header spans a wide page\n * band; a narrow region (an in-cell amount|label row, whose scoped page bounds\n * make the ratio test pass) belongs to the nested-cell detector, not here. */\nconst JUSTIFIED_MIN_WIDTH_PT = 300;\n\n/** A header sits at body weight or larger; a sub-body strip (a print-chrome\n * timestamp/URL footer) is not a document header. */\nconst JUSTIFIED_MIN_FONT_RATIO = 0.95;\n\n/** Minimum trimmed length for each segment — a shorter one is a marker glyph. */\nconst JUSTIFIED_MIN_SEGMENT_CHARS = 3;\n\n/** A page-number / list-marker token (digits, roman numerals, a fraction, a\n * bare symbol) — never half of a justified content header. */\nconst MARKER_TOKEN_RE = /^[\\divxlcm]+(?:[./-][\\divxlcm]+)*%?$/i;\n\n/** A nested quadrant's second column must begin past this fraction of the cell\n * width — a genuine 2nd track, not a wrapped continuation. */\nconst QUADRANT_FAR_X_RATIO = 0.45;\n\n/** The nested quadrant run must be at least this many consecutive rows. */\nconst QUADRANT_MIN_ROWS = 2;\n\n/** …and no longer than this — a longer run is a full two-column body (owned by\n * the outer column pass), not a leading header quadrant. */\nconst QUADRANT_MAX_ROWS = 3;\n\n/** The far-x starts across the run must agree within this many font-sizes to be\n * one shared second column rather than scattered wrapped text. */\nconst QUADRANT_CLUSTER_FONTS = 2;\n\n/**\n * Converts one page's lines (top-to-bottom) into typed, ordered blocks:\n * recursive XY-cut into columns/regions, paragraph grouping, classification\n * (headings/lists/blockquotes), underline flagging from drawn rects,\n * horizontal rules, and image anchoring with float detection.\n */\nexport function buildPageBlocks(\n lines: Line[],\n page: PageExtract,\n includeImages: boolean,\n docCtx: Omit<ClassifyContext, 'pageBounds'>,\n): DocBlock[] {\n const usedRects = applyUnderlines(lines, page.rects);\n applySlotUnderlines(lines, page.rects, usedRects, page.width);\n applyCheckboxes(lines, page.rects, usedRects);\n const ctx: ClassifyContext = {\n ...docCtx,\n pageBounds: lines.length > 0 ? boundsOfLines(lines) : { x0: 0, x1: page.width },\n pageHeight: page.height,\n fieldRules: page.rects.filter(rect =>\n rect.width > rect.height && rect.height <= UNDERLINE_MAX_HEIGHT),\n useRect: rect => usedRects.add(rect),\n };\n const inlined = includeImages\n ? attachInlineImages(lines, page.images)\n : new Set<ImageItem>();\n const tableRects = page.rects.filter(rect => !usedRects.has(rect));\n const blocks = applyFillBackgrounds(\n rejoinSplitBaselines(\n linesToBlocks(lines, tableRects, page.index, ctx, usedRects), ctx),\n page.rects, page.index, ctx.pageBounds);\n const boxed = applyEdgeRules(\n applyBlockBorders(blocks, page.rects, usedRects, page.index), page.rects, usedRects);\n const withRules = applyColumnMargins(\n interleaveByTop(boxed, detectRules(page, usedRects, lines, boxed)));\n if (!includeImages || page.images.length === inlined.size) return withRules;\n const images = page.images.filter(img =>\n !inlined.has(img) && !isBackgroundDecoration(img, page.width * page.height));\n if (images.length === 0) return withRules;\n const consumed = applyButtonBoxes(withRules, images);\n const remaining = consumed.size > 0 ? images.filter(img => !consumed.has(img)) : images;\n if (remaining.length === 0) return withRules;\n return interleaveImages(withRules, remaining, page.index, isRtlPage(withRules) ? page.width : 0);\n}\n\n/** An inline icon is at most this multiple of the line font size tall. */\nconst INLINE_IMAGE_MAX_H_EM = 2.4;\n/** An inline icon is at most this multiple of the line font size wide. */\nconst INLINE_IMAGE_MAX_W_EM = 3;\n/** Horizontal slack, in em, an icon may sit outside the line's x-extent. */\nconst INLINE_IMAGE_SLACK_EM = 2;\n\n/**\n * Attaches icon-sized images to the text line they flow within (a LinkedIn\n * glyph just before a profile URL). Page-level image interleave cannot reach\n * a line nested inside a column cell, so the icon becomes an inline word on\n * the line itself: height and width capped at icon size, vertical band\n * overlapping the line, x within the line's extent plus slack. Consumed\n * images are excluded from every later image pass. Insertion index follows\n * the line's reading direction so logical word order stays intact.\n */\nfunction attachInlineImages(lines: readonly Line[], images: readonly ImageItem[]): Set<ImageItem> {\n const consumed = new Set<ImageItem>();\n const byArea = [...images].sort((a, b) =>\n b.renderWidth * b.renderHeight - a.renderWidth * a.renderHeight);\n for (const image of byArea) {\n const host = findInlineHost(lines, image);\n if (!host) continue;\n consumed.add(image);\n if (!hasInlineTwin(host, image)) insertInlineWord(host, image);\n }\n for (const image of byArea) {\n if (!consumed.has(image) && coveredByInlineImage(lines, image)) consumed.add(image);\n }\n swapStacksToTopPaint(lines, images, consumed);\n return consumed;\n}\n\n/**\n * A stacked icon paints bottom-up: background circle first, glyph last, so the\n * largest (hosting) layer is often a blank backdrop. Each inlined word swaps\n * to the last-painted non-outline layer covered by its box — the layer the\n * reader actually sees.\n */\nfunction swapStacksToTopPaint(\n lines: readonly Line[],\n images: readonly ImageItem[],\n consumed: ReadonlySet<ImageItem>,\n): void {\n for (const line of lines) {\n for (const word of line.words) {\n if (word.image) word.image = topPaintedLayer(word.image, images, consumed);\n }\n }\n}\n\nfunction topPaintedLayer(\n host: ImageItem,\n images: readonly ImageItem[],\n consumed: ReadonlySet<ImageItem>,\n): ImageItem {\n let top = host;\n for (const candidate of images) {\n if (candidate === host || !consumed.has(candidate)) continue;\n if (candidate.svgStrokeColor) continue;\n const centerX = candidate.x + candidate.renderWidth / 2;\n const centerY = candidate.y + candidate.renderHeight / 2;\n const inside = centerX >= host.x && centerX <= host.x + host.renderWidth &&\n centerY >= host.y && centerY <= host.y + host.renderHeight;\n if (inside && images.indexOf(candidate) > images.indexOf(top)) top = candidate;\n }\n return top;\n}\n\n/** A PDF often stacks an icon from several drawings (raster + outline ring +\n * inner glyph); once the largest is inlined, the overlapping rest are noise. */\nfunction hasInlineTwin(line: Line, image: ImageItem): boolean {\n const centerX = image.x + image.renderWidth / 2;\n return line.words.some(w => w.image && centerX >= w.x && centerX <= w.endX);\n}\n\n/** True when the image's center falls inside an already-inlined image's box —\n * a leftover layer of a stacked icon, dropped rather than emitted standalone. */\nfunction coveredByInlineImage(lines: readonly Line[], image: ImageItem): boolean {\n const centerX = image.x + image.renderWidth / 2;\n const centerY = image.y + image.renderHeight / 2;\n for (const line of lines) {\n for (const word of line.words) {\n const host = word.image;\n if (!host) continue;\n if (centerX >= host.x && centerX <= host.x + host.renderWidth &&\n centerY >= host.y && centerY <= host.y + host.renderHeight) return true;\n }\n }\n return false;\n}\n\nfunction findInlineHost(lines: readonly Line[], image: ImageItem): Line | null {\n let best: Line | null = null;\n let bestDistance = Infinity;\n for (const line of lines) {\n if (!fitsInline(line, image)) continue;\n const outside = Math.max(\n 0,\n line.x - (image.x + image.renderWidth),\n image.x - line.endX,\n );\n const distance = outside * 10 + Math.abs(image.y - line.y);\n if (distance < bestDistance) {\n best = line;\n bestDistance = distance;\n }\n }\n return best;\n}\n\n/** An adjacent badge (a header avatar hugging the line's end) is at most this\n * multiple of the line font size in either dimension. */\nconst BADGE_MAX_EM = 3;\n/** A badge may sit at most this multiple of the font size away from the line. */\nconst BADGE_GAP_EM = 1;\n\nfunction fitsInline(line: Line, image: ImageItem): boolean {\n const em = Math.max(line.fontSize, 1);\n const centerY = image.y + image.renderHeight / 2;\n if (centerY < line.y - em * 0.5 || centerY > line.y + em * 1.2) return false;\n return fitsWithinLine(line, image, em) || fitsAsBadge(line, image, em);\n}\n\n/** Icon-sized and horizontally inside the line's extent (plus slack). */\nfunction fitsWithinLine(line: Line, image: ImageItem, em: number): boolean {\n if (image.renderHeight > em * INLINE_IMAGE_MAX_H_EM) return false;\n if (image.renderWidth > em * INLINE_IMAGE_MAX_W_EM) return false;\n const slack = em * INLINE_IMAGE_SLACK_EM;\n return image.x >= line.x - slack && image.x + image.renderWidth <= line.endX + slack;\n}\n\n/** Badge-sized and hugging the line's start or end within a small gap. */\nfunction fitsAsBadge(line: Line, image: ImageItem, em: number): boolean {\n if (image.renderHeight > em * BADGE_MAX_EM) return false;\n if (image.renderWidth > em * BADGE_MAX_EM) return false;\n const gapRight = image.x - line.endX;\n const gapLeft = line.x - (image.x + image.renderWidth);\n return (gapRight >= 0 && gapRight <= em * BADGE_GAP_EM) ||\n (gapLeft >= 0 && gapLeft <= em * BADGE_GAP_EM);\n}\n\n/** Splices the icon into the host line's words at its visual reading position. */\nfunction insertInlineWord(line: Line, image: ImageItem): void {\n const centerX = image.x + image.renderWidth / 2;\n const before = line.dir === 'rtl'\n ? line.words.filter(w => w.x >= centerX).length\n : line.words.filter(w => w.endX <= centerX).length;\n const anchor = line.words[Math.min(before, line.words.length - 1)];\n line.words.splice(before, 0, {\n text: '',\n x: image.x,\n endX: image.x + image.renderWidth,\n y: line.y,\n fontSize: line.fontSize,\n style: anchor.style,\n mcid: anchor.mcid,\n spaceBefore: true,\n hardBreak: false,\n image,\n });\n}\n\n/** Majority of the text-bearing blocks read right-to-left. */\nfunction isRtlPage(blocks: readonly DocBlock[]): boolean {\n let rtl = 0;\n let total = 0;\n for (const block of blocks) {\n if (block.kind === 'image' || block.kind === 'rule') continue;\n total++;\n if (block.style.dir === 'rtl') rtl++;\n }\n return total > 0 && rtl * 2 > total;\n}\n\n/** A stroked outline outside this size band is a frame/panel, not a button. */\nconst BUTTON_MIN_W = 24;\nconst BUTTON_MAX_W = 320;\nconst BUTTON_MIN_H = 10;\nconst BUTTON_MAX_H = 60;\n/** A button label is at most this many words on one line. */\nconst BUTTON_MAX_WORDS = 4;\n\n/**\n * Reconstructs a bordered button. A PDF draws a button as an unfilled stroked\n * rounded-rect outline plus an independent text label; a flow layout cannot\n * overlap them, so they render as an empty box stacked above a loose label.\n * When a button-sized outline geometrically contains exactly one short\n * single-line text block, that block takes the outline as a CSS border and the\n * outline image — plus any identical fill twin painted behind it — is withheld\n * from image interleaving. Ambiguous outlines (zero or several contained\n * labels) are left untouched so panels and framed paragraphs never collapse.\n */\nfunction applyButtonBoxes(blocks: readonly DocBlock[], images: readonly ImageItem[]): Set<ImageItem> {\n const consumed = new Set<ImageItem>();\n for (const outline of images) {\n if (!isButtonOutline(outline)) continue;\n const label = singleContainedLabel(blocks, outline);\n if (!label) continue;\n const width = outline.svgStrokeWidth && outline.svgStrokeWidth > 0 ? outline.svgStrokeWidth : 1;\n label.style.border = `${width.toFixed(1)}pt solid ${outline.svgStrokeColor}`;\n consumed.add(outline);\n for (const twin of images) {\n if (twin !== outline && sameBox(twin, outline)) consumed.add(twin);\n }\n }\n return consumed;\n}\n\nfunction isButtonOutline(img: ImageItem): boolean {\n if (!img.svgStrokeColor) return false;\n const w = img.renderWidth;\n const h = img.renderHeight;\n return w >= BUTTON_MIN_W && w <= BUTTON_MAX_W && h >= BUTTON_MIN_H && h <= BUTTON_MAX_H && w > h;\n}\n\nfunction sameBox(a: ImageItem, b: ImageItem): boolean {\n return Math.abs(a.x - b.x) <= 2 && Math.abs(a.y - b.y) <= 2\n && Math.abs(a.renderWidth - b.renderWidth) <= 2\n && Math.abs(a.renderHeight - b.renderHeight) <= 2;\n}\n\n/** The lone short single-line label whose centre sits inside the outline, or\n * null when zero or several blocks qualify (ambiguous). */\nfunction singleContainedLabel(\n blocks: readonly DocBlock[],\n outline: ImageItem,\n): ParagraphBlock | HeadingBlock | null {\n let found: ParagraphBlock | HeadingBlock | null = null;\n for (const block of blocks) {\n if (block.kind !== 'paragraph' && block.kind !== 'heading') continue;\n if (block.lines.length !== 1 || block.lines[0].words.length > BUTTON_MAX_WORDS) continue;\n if (!outlineContainsLine(outline, block.lines[0])) continue;\n if (found) return null;\n found = block;\n }\n return found;\n}\n\n/** The image `y` is the outline's vertical centre; its true band is y ± h/2. */\nfunction outlineContainsLine(outline: ImageItem, line: Line): boolean {\n const halfHeight = outline.renderHeight / 2;\n const centerX = (line.x + line.endX) / 2;\n return centerX >= outline.x && centerX <= outline.x + outline.renderWidth\n && line.y >= outline.y - halfHeight && line.y <= outline.y + halfHeight;\n}\n\n/**\n * A single near-empty vector blown up to cover most of the page is a\n * background or watermark, not content. Rendered inline in the reading view it\n * only injects a large blank gap, so it is dropped. Guarded on a tiny payload\n * so real full-page photos or charts (large rasters) are never suppressed.\n */\nfunction isBackgroundDecoration(image: ImageItem, pageArea: number): boolean {\n const coverage = pageArea > 0 ? (image.renderWidth * image.renderHeight) / pageArea : 0;\n return coverage > 0.4 && image.dataUrl.length < 6000;\n}\n\n/** Smallest filled rect worth treating as a block background, in pt². */\nconst MIN_FILL_AREA = 1500;\n/** A fill at least one text line tall and a few characters wide is a drawn\n * highlight (a total pill) even when its area is under the panel floor. */\nconst MIN_PILL_HEIGHT = 12;\nconst MIN_PILL_WIDTH = 30;\n\nfunction holdsText(rect: PathRect): boolean {\n if (rect.width * rect.height >= MIN_FILL_AREA) return true;\n return rect.height >= MIN_PILL_HEIGHT && rect.width >= MIN_PILL_WIDTH;\n}\n\n/**\n * Reconstructs solid colour blocks (headers, callouts, badges) by giving a text\n * block the fill of the saturated rectangle it sits on. Without this, light\n * text designed to sit on a coloured panel — invisible on the white reading\n * surface — is lost. Only saturated fills qualify so black rules and grey\n * shading never turn same-coloured text unreadable.\n */\nfunction applyFillBackgrounds(\n blocks: readonly DocBlock[],\n rects: readonly PathRect[],\n pageIndex: number,\n measure: ColumnBounds,\n): DocBlock[] {\n const fills = mergeContiguousFills(rects.filter(r =>\n r.filled && holdsText(r) && isSaturatedColor(r.fillColor)));\n if (fills.length === 0) return [...blocks];\n const fillOf = new Map<DocBlock, PathRect>();\n for (const block of blocks) {\n assignBlockFill(block, fills, fillOf);\n }\n return wrapSharedFillRuns(blocks, fillOf, pageIndex, measure);\n}\n\n/**\n * Assigns a drawn fill to one block, recursing into column cells — a filled\n * panel inside a columns row (an invoice's header box) otherwise loses its\n * background and leaves its light-on-colour text invisible on white.\n */\nfunction assignBlockFill(\n block: DocBlock,\n fills: readonly PathRect[],\n fillOf: Map<DocBlock, PathRect>,\n): void {\n if (block.kind === 'table') {\n applyCellBackgrounds(block, fills);\n return;\n }\n if (block.kind === 'columns') {\n for (const column of block.columns) {\n for (const child of column.blocks) assignBlockFill(child, fills, fillOf);\n }\n return;\n }\n const bounds = textBlockBounds(block);\n if (bounds) {\n const fill = fills.find(r => rectCoversCentroid(r, bounds));\n if (fill) {\n block.style.background = fill.fillColor;\n fillOf.set(block, fill);\n }\n }\n}\n\n/** Vertical gap (pt) under which two same-colour fill slices are one rect. */\nconst FILL_MERGE_GAP = 2;\n\n/**\n * A PDF often paints one visual background as several stacked slices (doc4's\n * blue header: four rects, identical x-span and colour, touching y-bands).\n * Merging them restores the single rect the design drew.\n */\nfunction mergeContiguousFills(fills: readonly PathRect[]): PathRect[] {\n const merged: PathRect[] = [];\n const sorted = [...fills].sort((a, b) => a.x - b.x || b.y - a.y);\n for (const fill of sorted) {\n const host = merged.find(m =>\n m.fillColor === fill.fillColor &&\n Math.abs(m.x - fill.x) <= FILL_MERGE_GAP &&\n Math.abs(m.x + m.width - (fill.x + fill.width)) <= FILL_MERGE_GAP &&\n fill.y <= m.y + m.height + FILL_MERGE_GAP &&\n fill.y + fill.height >= m.y - FILL_MERGE_GAP);\n if (host) {\n const top = Math.max(host.y + host.height, fill.y + fill.height);\n const bottom = Math.min(host.y, fill.y);\n merged[merged.indexOf(host)] = { ...host, y: bottom, height: top - bottom };\n } else {\n merged.push({ ...fill });\n }\n }\n return merged;\n}\n\n/**\n * Wraps a run of two or more consecutive blocks sitting on the SAME merged\n * fill into one background container, so the original's single coloured panel\n * renders as one continuous box instead of striped per-block bands.\n */\nfunction wrapSharedFillRuns(\n blocks: readonly DocBlock[],\n fillOf: ReadonlyMap<DocBlock, PathRect>,\n pageIndex: number,\n measure: ColumnBounds,\n): DocBlock[] {\n const result: DocBlock[] = [];\n let i = 0;\n while (i < blocks.length) {\n const fill = fillOf.get(blocks[i]);\n let end = i + 1;\n while (fill && end < blocks.length && fillOf.get(blocks[end]) === fill) end++;\n if (fill && end - i >= 2) {\n const group = blocks.slice(i, end);\n for (const member of group) member.style.background = '';\n result.push(fillPanel(group, fill, pageIndex, measure));\n } else {\n result.push(...blocks.slice(i, end));\n }\n i = end;\n }\n return result;\n}\n\n/** A panel is treated as full-width above this share of the measure. */\nconst PANEL_FULL_RATIO = 0.85;\n\nfunction fillPanel(\n group: DocBlock[],\n fill: PathRect,\n pageIndex: number,\n measure: ColumnBounds,\n): ColumnsBlock {\n const rtl = group.filter(b => b.style.dir === 'rtl').length * 2 > group.length;\n const measureWidth = Math.max(1, measure.x1 - measure.x0);\n const ratio = Math.min(1, fill.width / measureWidth);\n const partial = ratio < PANEL_FULL_RATIO;\n const roomLeft = fill.x - measure.x0;\n const roomRight = measure.x1 - (fill.x + fill.width);\n return {\n kind: 'columns',\n columns: [{ blocks: group, widthRatio: 1 }],\n page: pageIndex,\n style: { ...emptyStyle(), dir: rtl ? 'rtl' : '', background: fill.fillColor },\n panelMinHeight: fill.height,\n ...(partial ? { panelRatio: ratio, panelSide: roomLeft > roomRight ? 'right' as const : 'left' as const } : {}),\n };\n}\n\n/**\n * Gives a table cell the saturated fill it sits on — a highlighted total\n * (light text on a coloured box) is otherwise invisible on the white surface.\n * Applied per cell because a table row rarely shares one background.\n */\nfunction applyCellBackgrounds(table: TableBlock, fills: readonly PathRect[]): void {\n for (const row of table.rows) {\n for (const cell of row) {\n if (cell.lines.length === 0) continue;\n const centroid = cellCentroid(cell.lines);\n const fill = fills.find(r => rectCoversCentroid(r, centroid));\n if (fill) cell.background = fill.fillColor;\n }\n }\n}\n\nfunction cellCentroid(lines: readonly Line[]): Centroid {\n let sx = 0;\n let sy = 0;\n for (const line of lines) {\n sx += (line.x + line.endX) / 2;\n sy += line.y;\n }\n return { cx: sx / lines.length, cy: sy / lines.length };\n}\n\n/** A rectangle drawn as separate stroked edges: its extent, stroke, and the\n * edge rects that formed it (withheld from rule/underline emission). */\ninterface RectBox {\n readonly left: number;\n readonly right: number;\n readonly top: number;\n readonly bottom: number;\n readonly color: string;\n readonly lineWidth: number;\n readonly edges: PathRect[];\n}\n\n/** Number of distinct y-positions among rects (double-drawn edges at the same\n * y collapse to one). */\nfunction distinctYCount(rects: readonly PathRect[]): number {\n const ys: number[] = [];\n for (const r of rects) {\n if (!ys.some(y => Math.abs(y - r.y) <= BOX_EDGE_MATCH)) ys.push(r.y);\n }\n return ys.length;\n}\n\nfunction isBoxEdgeColor(rect: PathRect): boolean {\n return (rect.stroked || rect.filled) &&\n !isNearWhite(rect.filled ? rect.fillColor : rect.strokeColor);\n}\n\n/**\n * Detects rectangles drawn as four (or three) separate stroked edges rather\n * than a single rect op — the blue box a form draws around a details panel.\n * Two parallel horizontal edges that share an x-span and are far enough apart\n * to enclose content, closed by at least one vertical edge meeting a corner.\n */\nfunction findRectBoxes(rects: readonly PathRect[]): RectBox[] {\n const horizontals = rects.filter(r => r.width > r.height && r.height <= RULE_MAX_HEIGHT && isBoxEdgeColor(r));\n const verticals = rects.filter(r => r.height > r.width && r.width <= RULE_MAX_HEIGHT && isBoxEdgeColor(r));\n const boxes: RectBox[] = [];\n const paired = new Set<PathRect>();\n for (const top of horizontals) {\n if (paired.has(top)) continue;\n const sameSpan = horizontals.filter(h =>\n Math.abs(h.x - top.x) <= BOX_EDGE_MATCH && Math.abs(h.width - top.width) <= BOX_EDGE_MATCH);\n // A panel box has exactly two horizontal edges (top + bottom) at its\n // x-span; three or more same-span lines are a table grid's rows, not a\n // border (double-drawn edges collapse to two distinct positions).\n if (distinctYCount(sameSpan) !== 2) continue;\n const bottom = horizontals.find(b => b !== top && !paired.has(b) &&\n top.y - b.y >= MIN_BOX_HEIGHT &&\n Math.abs(top.x - b.x) <= BOX_EDGE_MATCH &&\n Math.abs(top.width - b.width) <= BOX_EDGE_MATCH);\n if (!bottom) continue;\n const left = Math.min(top.x, bottom.x);\n const right = Math.max(top.x + top.width, bottom.x + bottom.width);\n const sides = verticals.filter(v =>\n v.y <= top.y + BOX_EDGE_MATCH && v.y + v.height >= bottom.y - BOX_EDGE_MATCH &&\n (Math.abs(v.x - left) <= BOX_EDGE_MATCH || Math.abs(v.x - right) <= BOX_EDGE_MATCH));\n if (sides.length === 0) continue;\n paired.add(top);\n paired.add(bottom);\n const twin = boxes.find(b =>\n Math.abs(b.left - left) <= BOX_EDGE_MATCH && Math.abs(b.top - top.y) <= BOX_EDGE_MATCH &&\n Math.abs(b.bottom - bottom.y) <= BOX_EDGE_MATCH);\n if (twin) {\n // A form over-draws the same box twice; keep one wrapper but consume\n // every copy's edges so none leaks out as a loose rule.\n twin.edges.push(top, bottom, ...sides);\n continue;\n }\n boxes.push({\n left, right, top: top.y, bottom: bottom.y,\n color: top.stroked ? top.strokeColor : top.fillColor,\n lineWidth: top.lineWidth > 0 ? top.lineWidth : 0.8,\n edges: [top, bottom, ...sides],\n });\n }\n return boxes;\n}\n\n/** Vertical/horizontal extent of a block's content, tables included. */\nfunction blockContentBox(block: DocBlock): { top: number; bottom: number; left: number; right: number } | null {\n const lines = block.kind === 'table'\n ? block.rows.flatMap(row => row.flatMap(cell => cell.lines))\n : textLinesOf(block);\n if (lines.length === 0) return null;\n return {\n top: Math.max(...lines.map(l => l.y)),\n bottom: Math.min(...lines.map(l => l.y)),\n left: Math.min(...lines.map(l => l.x)),\n right: Math.max(...lines.map(l => l.endX)),\n };\n}\n\n/**\n * Wraps the run of blocks a drawn rectangle encloses in a bordered single-column\n * {@link ColumnsBlock}, so a form's details panel keeps its box instead of\n * losing it to the flow (its edge rects would otherwise emit as loose rules).\n * Only a contiguous run is wrapped — nothing is reordered — and the edge rects\n * are marked used so they neither rule nor underline.\n */\nfunction applyBlockBorders(\n blocks: DocBlock[],\n rects: readonly PathRect[],\n usedRects: Set<PathRect>,\n pageIndex: number,\n): DocBlock[] {\n const boxes = findRectBoxes(rects.filter(r => !usedRects.has(r)));\n let result = blocks;\n for (const box of boxes) {\n const wrapped = wrapEnclosedRun(result, box, pageIndex);\n if (!wrapped) continue;\n result = wrapped;\n for (const edge of box.edges) usedRects.add(edge);\n }\n return result;\n}\n\n/** Size bounds, in pt, for a drawn checkbox. */\nconst CHECKBOX_MIN_SIZE = 5;\nconst CHECKBOX_MAX_SIZE = 18;\n/** How square a box must be to read as a checkbox rather than a panel. */\nconst CHECKBOX_ASPECT_TOLERANCE = 0.25;\n/** Furthest, in pt, a checkbox can sit from the text it labels. */\nconst CHECKBOX_MAX_GAP = 20;\n\n/** Flags lines the PDF drew a checkbox beside: a tick box carries no text\n * marker, so nothing downstream would otherwise see it. */\nfunction applyCheckboxes(\n lines: readonly Line[],\n rects: readonly PathRect[],\n usedRects: Set<PathRect>,\n): void {\n for (const rect of rects) {\n if (usedRects.has(rect)) continue;\n if (!isCheckboxRect(rect)) continue;\n const line = lines.find(l => lineTakesCheckbox(l, rect));\n if (!line) continue;\n line.checkbox = { checked: rect.filled };\n usedRects.add(rect);\n }\n}\n\nfunction isCheckboxRect(rect: PathRect): boolean {\n const { width, height } = rect;\n if (width < CHECKBOX_MIN_SIZE || width > CHECKBOX_MAX_SIZE) return false;\n if (height < CHECKBOX_MIN_SIZE || height > CHECKBOX_MAX_SIZE) return false;\n return Math.abs(width - height) <= Math.max(width, height) * CHECKBOX_ASPECT_TOLERANCE;\n}\n\n/** Whether a line sits on the box's own row, just after it in reading order. */\nfunction lineTakesCheckbox(line: Line, rect: PathRect): boolean {\n if (line.checkbox) return false;\n if (line.y < rect.y - line.fontSize * 0.5 || line.y > rect.y + rect.height) return false;\n const gap = line.dir === 'rtl' ? rect.x - line.endX : line.x - (rect.x + rect.width);\n return gap >= 0 && gap <= CHECKBOX_MAX_GAP;\n}\n\n/** Widest a rect can be and still read as a rule rather than a filled panel. */\nconst EDGE_RULE_MAX_WIDTH = 4;\n/** Share of a block's height the rule must cover to belong to it. */\nconst EDGE_RULE_COVERAGE = 0.6;\n/** Furthest a rule can sit from the text it marks, in pt. */\nconst EDGE_RULE_MAX_GAP = 24;\n\n/** Attaches a vertical rule drawn beside a block's leading edge (a pull-quote\n * bar), reconstructed from its own rect so an undrawn one stays plain. */\nfunction applyEdgeRules(\n blocks: DocBlock[],\n rects: readonly PathRect[],\n usedRects: Set<PathRect>,\n): DocBlock[] {\n const bars = rects.filter(rect => !usedRects.has(rect) &&\n rect.width <= EDGE_RULE_MAX_WIDTH && rect.height > rect.width * 2 &&\n (rect.filled || rect.stroked));\n if (bars.length === 0) return blocks;\n attachEdgeRules(blocks, bars, usedRects);\n return blocks;\n}\n\n/** Walks into column cells, since a marked block is often inside one. */\nfunction attachEdgeRules(\n blocks: readonly DocBlock[],\n bars: readonly PathRect[],\n usedRects: Set<PathRect>,\n): void {\n for (const block of blocks) {\n if (block.kind === 'columns') {\n for (const column of block.columns) attachEdgeRules(column.blocks, bars, usedRects);\n continue;\n }\n const box = blockContentBox(block);\n if (!box) continue;\n const bar = bars.find(rect => !usedRects.has(rect) && barMarks(rect, box, block.style.dir));\n if (!bar) continue;\n usedRects.add(bar);\n block.style.ruleStart = {\n widthPt: bar.width,\n color: (bar.filled ? bar.fillColor : bar.strokeColor) ?? '#000000',\n gapPt: block.style.dir === 'rtl'\n ? Math.max(0, bar.x - box.right)\n : Math.max(0, box.left - (bar.x + bar.width)),\n };\n }\n}\n\n/** Whether a bar runs alongside a block's leading edge for most of its height. */\nfunction barMarks(\n bar: PathRect,\n box: { top: number; bottom: number; left: number; right: number },\n dir: TextDirection | '',\n): boolean {\n const overlap = Math.min(bar.y + bar.height, box.top) - Math.max(bar.y, box.bottom);\n const span = Math.max(box.top - box.bottom, 1);\n if (overlap < span * EDGE_RULE_COVERAGE) return false;\n const gap = dir === 'rtl' ? bar.x - box.right : box.left - (bar.x + bar.width);\n return gap >= 0 && gap <= EDGE_RULE_MAX_GAP;\n}\n\nfunction wrapEnclosedRun(blocks: DocBlock[], box: RectBox, pageIndex: number): DocBlock[] | null {\n const enclosed = blocks\n .map((block, index) => ({ index, box: blockContentBox(block) }))\n .filter(entry => entry.box !== null && insideBox(entry.box, box));\n if (enclosed.length === 0) return null;\n const first = enclosed[0].index;\n const last = enclosed.at(-1)?.index ?? first;\n if (last - first + 1 !== enclosed.length) return null;\n const group = blocks.slice(first, last + 1);\n const rtl = group.filter(b => b.style.dir === 'rtl').length * 2 > group.length;\n const wrapper: ColumnsBlock = {\n kind: 'columns',\n columns: [{ blocks: group, widthRatio: 1 }],\n page: pageIndex,\n style: { ...emptyStyle(), border: `${box.lineWidth.toFixed(1)}pt solid ${box.color}`, dir: rtl ? 'rtl' : '' },\n };\n return [...blocks.slice(0, first), wrapper, ...blocks.slice(last + 1)];\n}\n\nfunction insideBox(\n b: { top: number; bottom: number; left: number; right: number },\n box: RectBox,\n): boolean {\n return b.left >= box.left - BOX_EDGE_MATCH && b.right <= box.right + BOX_EDGE_MATCH &&\n b.bottom >= box.bottom - BOX_EDGE_MATCH && b.top <= box.top + BOX_EDGE_MATCH;\n}\n\ninterface Centroid { readonly cx: number; readonly cy: number; }\n\nfunction textBlockBounds(block: DocBlock): Centroid | null {\n const lines = textLinesOf(block);\n if (lines.length === 0) return null;\n let sx = 0;\n let sy = 0;\n for (const line of lines) {\n sx += (line.x + line.endX) / 2;\n sy += line.y;\n }\n return { cx: sx / lines.length, cy: sy / lines.length };\n}\n\nfunction rectCoversCentroid(rect: PathRect, c: Centroid): boolean {\n return c.cx >= rect.x && c.cx <= rect.x + rect.width &&\n c.cy >= rect.y && c.cy <= rect.y + rect.height;\n}\n\nfunction isSaturatedColor(hex: string): boolean {\n const match = /^#([0-9a-f]{6})$/i.exec(hex);\n if (!match) return false;\n const value = Number.parseInt(match[1], 16);\n const r = (value >> 16) & 0xff;\n const g = (value >> 8) & 0xff;\n const b = value & 0xff;\n return Math.max(r, g, b) - Math.min(r, g, b) > 40;\n}\n\n/**\n * Table detection runs before band/column splitting — a ruled grid's widely\n * spaced rows would otherwise be cut into separate bands, and an unruled\n * table's aligned cells would be segmented as layout columns. `before`/\n * `after` remainders are re-analyzed recursively; each detected table\n * consumes at least two rows, so recursion terminates.\n */\nfunction linesToBlocks(\n lines: Line[],\n tableRects: readonly PathRect[],\n pageIndex: number,\n ctx: ClassifyContext,\n usedRects: Set<PathRect>,\n): DocBlock[] {\n if (lines.length === 0) return [];\n const split = findTableInBand(lines, tableRects, pageIndex, ctx, { unruled: 'strict' });\n if (split) {\n for (const rect of split.usedRects) usedRects.add(rect);\n return [\n ...linesToBlocks(split.before, tableRects, pageIndex, ctx, usedRects),\n tableWithLeadingLabel(split, pageIndex),\n ...linesToBlocks(split.after, tableRects, pageIndex, ctx, usedRects),\n ];\n }\n const blocks: DocBlock[] = [];\n for (const band of splitVerticalBands(lines)) {\n blocks.push(...bandToBlocks(band, pageIndex, ctx));\n }\n return blocks;\n}\n\n/**\n * Re-joins a visual line the XY-cut split across sibling blocks. Same-baseline\n * segments are one line (the invariant {@link mergeSameBaselineLines} enforces\n * inside a region), but a column valley can strand a row's short leading\n * segment (\"סה\"כ ימי מחלה: 1\") in its own single-line block while the rest of\n * the row joins a neighbouring paragraph. The stranded words are merged back\n * into the matching baseline — appended on the logically-later side — and the\n * host's deliberate-break flag is recomputed over the restored line.\n */\nfunction rejoinSplitBaselines(blocks: DocBlock[], ctx: ClassifyContext): DocBlock[] {\n const strays = blocks.filter(b =>\n b.kind === 'paragraph' && b.lines.length === 1 && (b.stacked ?? false) === false);\n const dropped = new Set<DocBlock>();\n for (const stray of strays) {\n if (stray.kind !== 'paragraph') continue;\n const line = stray.lines[0];\n const host = blocks.find(b => b !== stray && !dropped.has(b) &&\n (b.kind === 'paragraph' || b.kind === 'blockquote') &&\n b.lines.some(l => Math.abs(l.y - line.y) <= l.fontSize * 0.35));\n if (!host || (host.kind !== 'paragraph' && host.kind !== 'blockquote')) continue;\n const target = host.lines.find(l => Math.abs(l.y - line.y) <= l.fontSize * 0.35);\n if (!target || !sameRowFragment(target, line)) continue;\n mergeLineInto(target, line);\n dropped.add(stray);\n rebuildStacked(host, ctx);\n }\n return dropped.size > 0 ? blocks.filter(b => !dropped.has(b)) : blocks;\n}\n\n/** Fragments of one visual row share a font size and sit within a few ems of\n * each other; a small-type marginal note beside a body line matches neither\n * and stays its own block. */\nfunction sameRowFragment(target: Line, stray: Line): boolean {\n const sizeRatio = Math.max(target.fontSize, stray.fontSize) /\n Math.max(1, Math.min(target.fontSize, stray.fontSize));\n if (sizeRatio > 1.25) return false;\n const gap = Math.max(target.x, stray.x) - Math.min(target.endX, stray.endX);\n return gap <= Math.max(target.fontSize, stray.fontSize) * 8;\n}\n\n/** Appends the stray segment's words on the logically-later side of the host\n * line (visual left for RTL, visual right for LTR) and widens its extent. */\nfunction mergeLineInto(target: Line, stray: Line): void {\n const strayIsVisuallyLeft = stray.x < target.x;\n const strayIsLater = target.dir === 'rtl' ? strayIsVisuallyLeft : !strayIsVisuallyLeft;\n if (stray.words[0]) stray.words[0].spaceBefore = true;\n if (strayIsLater) {\n target.words.push(...stray.words);\n } else {\n if (target.words[0]) target.words[0].spaceBefore = true;\n target.words.unshift(...stray.words);\n }\n (target as { x: number }).x = Math.min(target.x, stray.x);\n (target as { endX: number }).endX = Math.max(target.endX, stray.endX);\n}\n\nfunction rebuildStacked(host: DocBlock, ctx: ClassifyContext): void {\n if (host.kind !== 'paragraph' && host.kind !== 'blockquote') return;\n (host as { stacked?: boolean }).stacked = allBreaksIntentional(host.lines, ctx.pageBounds);\n}\n\n/**\n * A table with a leading row label (a form's \"סובל מ\" beside the diagnosis\n * grid) renders as one side-by-side row: the label keeps its edge position\n * next to the table exactly as the original draws it.\n */\nfunction tableWithLeadingLabel(split: BandTableSplit, pageIndex: number): DocBlock {\n const label = split.leadingLabel;\n if (!label || label.length === 0) return split.table;\n const rtl = split.table.style.dir === 'rtl';\n const tableLines = split.table.rows.flat().flatMap((cell: TableCellModel) => cell.lines);\n const tableSpan = Math.max(...tableLines.map((l: Line) => l.endX)) -\n Math.min(...tableLines.map((l: Line) => l.x));\n const labelSpan = Math.max(...label.map((l: Line) => l.endX)) - Math.min(...label.map((l: Line) => l.x));\n const total = Math.max(1, tableSpan + labelSpan);\n const labelBlock: DocBlock = {\n kind: 'paragraph',\n lines: [...label],\n page: pageIndex,\n style: { ...emptyStyle(), dir: rtl ? 'rtl' : '' },\n };\n const labelColumn = { blocks: [labelBlock], widthRatio: Math.max(0.08, labelSpan / total) };\n const tableColumn = { blocks: [split.table], widthRatio: Math.min(0.92, tableSpan / total) };\n return {\n kind: 'columns',\n columns: [labelColumn, tableColumn],\n page: pageIndex,\n style: { ...emptyStyle(), dir: rtl ? 'rtl' : '' },\n };\n}\n\n/**\n * Splits one vertical band into blocks, detecting an unruled table before the\n * XY-cut so a short, aligned cellular grid (e.g. a centered signature block)\n * is not sliced into one stacked column per cell. Multi-column prose fails the\n * cellular test and falls through to column cutting. Rows above/below the\n * table are handled recursively, exactly as at page level.\n */\nfunction bandToBlocks(band: Line[], pageIndex: number, ctx: ClassifyContext): DocBlock[] {\n const split = findTableInBand(band, [], pageIndex, ctx, { ruled: false, unruled: 'strict' });\n if (split) {\n return [\n ...bandToBlocks(split.before, pageIndex, ctx),\n split.table,\n ...bandToBlocks(split.after, pageIndex, ctx),\n ];\n }\n return cutToBlocks(band, 1, pageIndex, ctx);\n}\n\n/**\n * Column-aware variant of {@link xyCut} that builds blocks directly: a\n * vertical band-split recurses into stacked blocks, but a horizontal\n * column-split is wrapped in a {@link ColumnsBlock} so the columns render side\n * by side instead of one after another. Spanner-tolerant splits keep their\n * flattened (stacked) reading order — the spanning rows between column groups\n * make a single parallel row unsound.\n */\nfunction cutToBlocks(\n lines: Line[],\n depth: number,\n pageIndex: number,\n ctx: ClassifyContext,\n): DocBlock[] {\n if (lines.length <= 1 || depth >= MAX_CUT_DEPTH) return regionToBlocks(lines, pageIndex, ctx);\n const bands = splitVerticalBands(lines);\n if (bands.length > 1) return bands.flatMap(band => cutToBlocks(band, depth + 1, pageIndex, ctx));\n const columns = splitColumns(lines);\n if (columns.length > 1) {\n return columnsSpanMultipleRows(columns)\n ? [columnsBlockFrom(columns, depth, pageIndex, ctx)]\n : columns.flatMap(column => cutToBlocks(column, depth + 1, pageIndex, ctx));\n }\n const aroundSpanners = splitColumnsAroundSpanners(lines);\n if (aroundSpanners.length > 1 || aroundSpanners[0]?.kind === 'columns') {\n return aroundSpanners.flatMap(chunk => spannerChunkToBlocks(chunk, depth, pageIndex, ctx));\n }\n const zone = findColumnZone(lines, ctx);\n if (zone) {\n return [\n ...cutToBlocks(zone.before, depth + 1, pageIndex, ctx),\n columnsBlockFrom(zone.columns, depth, pageIndex, ctx),\n ...cutToBlocks(zone.after, depth + 1, pageIndex, ctx),\n ];\n }\n return regionToBlocks(lines, pageIndex, ctx);\n}\n\n/**\n * Rows every column must span to render side by side. Set above 2 so a short\n * header strip (a contact block beside a title) is not forced into cells —\n * only a genuine multi-row column layout (a receipt's parallel columns) does.\n */\nconst MIN_COLUMN_ROWS = 3;\n\n/**\n * True only when every column spans multiple distinct baselines. A single\n * visual line whose cells sit at one baseline (a right-aligned label with its\n * value across the page) fragments into \"columns\" of one row each — rendering\n * that side by side would cramp a full-width line into a narrow cell.\n */\nfunction columnsSpanMultipleRows(columns: readonly Line[][]): boolean {\n return columns.every(column => distinctBaselineCount(column) >= MIN_COLUMN_ROWS);\n}\n\nfunction distinctBaselineCount(lines: readonly Line[]): number {\n const sorted = [...lines].sort((a, b) => b.y - a.y);\n const tolerance = (sorted[0]?.fontSize ?? 12) * 0.5;\n let count = 0;\n let last = Number.POSITIVE_INFINITY;\n for (const line of sorted) {\n if (last - line.y > tolerance) {\n count++;\n last = line.y;\n }\n }\n return count;\n}\n\n/** Recovers the whitespace above a columns row, which is assembled from its\n * cells and so never measured the gap {@link resolveBlockStyle} would. */\nfunction applyColumnMargins(blocks: DocBlock[]): DocBlock[] {\n let previous: Line | null = null;\n for (const block of blocks) {\n const first = firstLineOf(block);\n if (block.kind === 'columns' && block.style.marginTop === 0 && previous && first) {\n block.style.marginTop = computeMarginTop([first], previous.y, 0);\n }\n previous = lastLineOf(block) ?? previous;\n }\n return blocks;\n}\n\n/** Every text line a block holds, however nested. */\nfunction blockLines(block: DocBlock): readonly Line[] {\n if ('lines' in block) return block.lines;\n if (block.kind === 'list') return block.items.flatMap(item => item.lines);\n if (block.kind === 'table') return block.rows.flat().flatMap(cell => cell.lines);\n if (block.kind === 'columns') return block.columns.flatMap(col => col.blocks.flatMap(blockLines));\n return [];\n}\n\nfunction firstLineOf(block: DocBlock): Line | null {\n const lines = blockLines(block);\n return lines.reduce<Line | null>((top, line) => (top && top.y >= line.y ? top : line), null);\n}\n\nfunction lastLineOf(block: DocBlock): Line | null {\n const lines = blockLines(block);\n return lines.reduce<Line | null>((low, line) => (low && low.y <= line.y ? low : line), null);\n}\n\n/** Wraps parallel column regions as one side-by-side row, widths from geometry. */\nfunction columnsBlockFrom(\n columns: Line[][],\n depth: number,\n pageIndex: number,\n ctx: ClassifyContext,\n): ColumnsBlock {\n const widthRatios = columnZoneRatios(columns);\n const groups = columns.map((col, i) => ({\n blocks: cellToBlocks(col, depth, pageIndex, { ...ctx, pageBounds: boundsOfLines(col) }),\n widthRatio: widthRatios[i],\n }));\n const allLines = columns.flat();\n const dir = allLines.filter(l => l.dir === 'rtl').length * 2 > allLines.length ? 'rtl' : '';\n return { kind: 'columns', columns: groups, page: pageIndex, style: { ...emptyStyle(), dir } };\n}\n\n/**\n * Builds one column cell's blocks. Sub-detector A first tries to peel a leading\n * nested 2×2 quadrant (a contact card sitting atop a CV's right column) off the\n * top of the cell; whatever it does not consume flows normally.\n */\nfunction cellToBlocks(\n col: Line[],\n depth: number,\n pageIndex: number,\n cellCtx: ClassifyContext,\n): DocBlock[] {\n if (DETECT_NESTED_STRUCTURE) {\n const quadrant = extractLeadingQuadrant(col, depth, pageIndex, cellCtx);\n if (quadrant) {\n return [quadrant.block, ...cutToBlocks(quadrant.rest, depth + 1, pageIndex, cellCtx)];\n }\n const run = extractKeyValueRun(col, pageIndex);\n if (run) {\n return [\n ...(run.before.length > 0 ? cutToBlocks(run.before, depth + 1, pageIndex, cellCtx) : []),\n run.block,\n ...(run.after.length > 0 ? cellToBlocks(run.after, depth, pageIndex, cellCtx) : []),\n ];\n }\n }\n return cutToBlocks(col, depth + 1, pageIndex, cellCtx);\n}\n\n/** Minimum matched pairs before an interior key/value run becomes a table. */\nconst KV_MIN_PAIRS = 2;\n/** Minimum key-to-value gap, in em, for a row to read as two cells. */\nconst KV_MIN_GAP_EM = 1.5;\n/** Minimum key-segment width, in em — excludes list markers and stray glyphs. */\nconst KV_MIN_KEY_EM = 2;\n\n/**\n * Sub-detector C — an interior key/value run inside a column cell. A run of\n * baseline rows each carrying exactly two segments — the key pinned to the\n * cell's left edge, a clear gap, then the value — is a two-column sub-table\n * the outer passes cannot see (a receipt's Order-summary cell: amount|label\n * rows). Unlike sub-detector A the run may sit anywhere in the cell, the value\n * starts need not cluster (a right-pinned \"Total\" under a mid-cell label), and\n * a one-segment row that overlaps the previous value's x-band is that value's\n * wrap continuation. Emits a borderless two-column table so each pair stays\n * row-aligned; the rows before and after flow normally. Prose cells never\n * match: their rows are single-segment, and list markers fail the key-width\n * and gap gates.\n */\nexport function extractKeyValueRun(\n col: Line[],\n pageIndex: number,\n): { before: Line[]; block: TableBlock; after: Line[] } | null {\n const rows = groupByBaseline(col);\n const cell = boundsOfLines(col);\n const start = rows.findIndex(row => asKeyValueRow(row, cell.x0) !== null);\n if (start < 0) return null;\n const pairs: { key: Line; value: Line[] }[] = [];\n let next = start;\n while (next < rows.length) {\n const row = rows[next];\n const pair = asKeyValueRow(row, cell.x0);\n if (pair) {\n pairs.push({ key: pair.key, value: [pair.value] });\n } else if (!attachValueContinuation(row, pairs)) {\n break;\n }\n next++;\n }\n if (pairs.length < KV_MIN_PAIRS) return null;\n const rowsModel = pairs.map(p => [{ lines: [p.key] }, { lines: p.value }]);\n const block: TableBlock = {\n kind: 'table',\n rows: rowsModel,\n ruled: false,\n headerRow: false,\n page: pageIndex,\n style: emptyStyle(),\n };\n return { before: rows.slice(0, start).flat(), block, after: rows.slice(next).flat() };\n}\n\n/** A cell row read as key | gap | value, or null when the shape does not hold. */\nfunction asKeyValueRow(row: readonly Line[], cellLeft: number): { key: Line; value: Line } | null {\n if (row.length !== 2) return null;\n const [a, b] = row;\n const [key, value] = a.x <= b.x ? [a, b] : [b, a];\n const fontSize = Math.max(key.fontSize, value.fontSize, 1);\n if (key.x > cellLeft + fontSize) return null;\n if (key.endX - key.x < fontSize * KV_MIN_KEY_EM) return null;\n if (value.x - key.endX < fontSize * KV_MIN_GAP_EM) return null;\n if (segmentText(key) === segmentText(value)) return null;\n return { key, value };\n}\n\n/** Attaches a one-segment row to the previous value when it wraps within that\n * value's x-band; returns false when the row ends the run instead. */\nfunction attachValueContinuation(row: readonly Line[], pairs: { key: Line; value: Line[] }[]): boolean {\n const previous = pairs.at(-1)?.value.at(-1);\n if (row.length !== 1 || !previous) return false;\n const line = row[0];\n const slack = Math.max(line.fontSize, 1);\n if (line.x < previous.x - slack || line.x > previous.endX + slack) return false;\n pairs.at(-1)?.value.push(line);\n return true;\n}\n\n/**\n * Sub-detector A — a nested 2×2 quadrant at the head of a column cell. A short\n * leading run (≤ {@link QUADRANT_MAX_ROWS}) of baseline rows that each carry a\n * segment at the cell's left edge AND a second segment past a far-x threshold,\n * whose far-x starts agree across the run, followed by single-column content, is\n * a 2×2 grid the outer column pass could not see (the doc2 contact card:\n * Jerusalem|LinkedIn / phone|email above the \"Core Skills\" heading). It emits as\n * a nested borderless two-column block; the trailing content flows normally.\n * Returns null unless the whole shape holds — dense prose columns (their cells\n * are single-column) and marker+text rows never match.\n */\nexport function extractLeadingQuadrant(\n col: Line[],\n depth: number,\n pageIndex: number,\n ctx: ClassifyContext,\n): { block: ColumnsBlock; rest: Line[] } | null {\n const rows = groupByBaseline(col);\n const cell = boundsOfLines(col);\n const farXMin = cell.x0 + (cell.x1 - cell.x0) * QUADRANT_FAR_X_RATIO;\n const run: { left: Line; right: Line }[] = [];\n for (const row of rows) {\n const quadrantRow = asQuadrantRow(row, cell.x0, farXMin);\n if (!quadrantRow) break;\n run.push(quadrantRow);\n }\n if (run.length < QUADRANT_MIN_ROWS || run.length > QUADRANT_MAX_ROWS) return null;\n if (run.length >= rows.length) return null;\n const fontSize = Math.max(...run.flatMap(q => [q.left.fontSize, q.right.fontSize]));\n const farXs = run.map(q => q.right.x);\n if (Math.max(...farXs) - Math.min(...farXs) > fontSize * QUADRANT_CLUSTER_FONTS) return null;\n const block = columnsBlockFrom(\n [run.map(q => q.left), run.map(q => q.right)], depth + 1, pageIndex, ctx,\n );\n return { block, rest: rows.slice(run.length).flat() };\n}\n\n/** A cell row split into its left-edge segment and a far-x quadrant segment. */\nexport function asQuadrantRow(\n row: readonly Line[],\n cellLeft: number,\n farXMin: number,\n): { left: Line; right: Line } | null {\n if (row.length !== 2) return null;\n const [a, b] = row;\n const [left, right] = a.x <= b.x ? [a, b] : [b, a];\n if (left.x > cellLeft + Math.max(left.fontSize, right.fontSize)) return null;\n if (right.x < farXMin) return null;\n return { left, right };\n}\n\n/**\n * Each column's share of the row width from its allocated horizontal zone —\n * its own extent plus the surrounding whitespace, split at the gutter\n * midpoints. Sizing by bare text extent would starve a narrow-text column\n * (a contact block) and wrap it to a sliver; the zone gives it the room the\n * original left for it.\n */\nfunction columnZoneRatios(columns: readonly Line[][]): number[] {\n const spans = columns.map(col => ({\n x0: Math.min(...col.map(l => l.x)),\n x1: Math.max(...col.map(l => l.endX)),\n }));\n const overallX0 = Math.min(...spans.map(s => s.x0));\n const overallX1 = Math.max(...spans.map(s => s.x1));\n const totalWidth = Math.max(1, overallX1 - overallX0);\n const order = spans.map((_, i) => i).sort((a, b) => spans[a].x0 - spans[b].x0);\n const ratios = new Array<number>(columns.length).fill(0);\n for (let k = 0; k < order.length; k++) {\n const i = order[k];\n const left = k === 0 ? overallX0 : (spans[order[k - 1]].x1 + spans[i].x0) / 2;\n const right = k === order.length - 1 ? overallX1 : (spans[i].x1 + spans[order[k + 1]].x0) / 2;\n ratios[i] = Math.max(1, right - left) / totalWidth;\n }\n return ratios;\n}\n\n// ── XY-cut segmentation ─────────────────────────────────────────────────\n\n/** Recursively splits lines into reading-ordered regions (bands, then columns). */\nexport function xyCut(lines: Line[], depth: number): Line[][] {\n if (lines.length <= 1 || depth >= MAX_CUT_DEPTH) return [lines];\n const bands = splitVerticalBands(lines);\n if (bands.length > 1) return bands.flatMap(band => xyCut(band, depth + 1));\n const columns = splitColumns(lines);\n if (columns.length > 1) return columns.flatMap(column => xyCut(column, depth + 1));\n const aroundSpanners = flattenSpannerChunks(splitColumnsAroundSpanners(lines));\n if (aroundSpanners.length > 1) return aroundSpanners.flatMap(region => xyCut(region, depth + 1));\n return [lines];\n}\n\n/** The chunk grouping collapsed back to plain reading-ordered regions. */\nfunction flattenSpannerChunks(chunks: readonly SpannerChunk[]): Line[][] {\n return chunks.flatMap(chunk => chunk.kind === 'span' ? [chunk.lines] : chunk.regions);\n}\n\n/** A line spanning most of the region width vetoes any column valley. */\nconst SPANNER_WIDTH_RATIO = 0.7;\n\n/**\n * One vertical chunk of a spanner-tolerant split: either a run of lines that\n * crosses the gutter (a title, a section header) or a set of regions that sit\n * side by side between two such spanners.\n */\ntype SpannerChunk =\n | { readonly kind: 'span'; readonly lines: Line[] }\n | { readonly kind: 'columns'; readonly regions: Line[][] };\n\n/**\n * Column split tolerant of full-width lines: a title or section header that\n * crosses the gutter must not collapse the columns beneath it. Spanning\n * lines become their own vertical chunks; the flowing lines between them are\n * column-split using valleys computed from the flowing lines alone. Chunks\n * whose lines cross a valley stay unsplit — no content is ever reordered\n * across a boundary that the geometry does not support. The chunk grouping is\n * part of the result: regions inside one chunk render side by side, while\n * consecutive chunks stack.\n */\nfunction splitColumnsAroundSpanners(lines: Line[]): SpannerChunk[] {\n const whole: SpannerChunk[] = [{ kind: 'span', lines }];\n if (lines.length < MIN_COLUMN_LINES * 2 + 1) return whole;\n const x0 = Math.min(...lines.map(l => l.x));\n const x1 = Math.max(...lines.map(l => l.endX));\n const width = x1 - x0;\n if (width <= 0) return whole;\n\n const isWide = (line: Line): boolean => (line.endX - line.x) > width * SPANNER_WIDTH_RATIO;\n let flowing = lines.filter(line => !isWide(line));\n if (flowing.length < MIN_COLUMN_LINES * 2) return whole;\n\n let cuts = findColumnValleys(flowing).sort((a, b) => a - b);\n const crossers = new Set<Line>();\n if (cuts.length === 0) {\n const tolerant = findLowCoverageValley(flowing);\n if (!tolerant) return whole;\n for (const line of tolerant.crossers) crossers.add(line);\n flowing = flowing.filter(line => !crossers.has(line));\n if (flowing.length < MIN_COLUMN_LINES * 2) return whole;\n cuts = [tolerant.cut];\n }\n const isSpanner = (line: Line): boolean => isWide(line) || crossers.has(line);\n\n const result: SpannerChunk[] = [];\n let didSplit = false;\n for (const chunk of chunkBySpanners(lines, isSpanner)) {\n const split = splitChunkAtCuts(chunk, cuts);\n if (split.length > 1) {\n didSplit = true;\n result.push({ kind: 'columns', regions: split });\n } else {\n result.push({ kind: 'span', lines: chunk });\n }\n }\n return didSplit ? result : whole;\n}\n\n/** Renders one chunk of a spanner-tolerant split: a {@link ColumnsBlock} when\n * every region spans enough rows to be a real column, else stacked. */\nfunction spannerChunkToBlocks(\n chunk: SpannerChunk,\n depth: number,\n pageIndex: number,\n ctx: ClassifyContext,\n): DocBlock[] {\n if (chunk.kind === 'span') return cutToBlocks(chunk.lines, depth + 1, pageIndex, ctx);\n if (columnsSpanMultipleRows(chunk.regions)) {\n return [columnsBlockFrom(chunk.regions, depth, pageIndex, ctx)];\n }\n return chunk.regions.flatMap(region => cutToBlocks(region, depth + 1, pageIndex, ctx));\n}\n\n/** Fraction of flowing lines allowed to cross a tolerant valley. */\nconst MAX_CROSSER_RATIO = 0.12;\n\n/**\n * Fallback gutter search when no zero-coverage valley exists: finds the\n * lowest-coverage vertical strip wide enough to be a column gutter, provided\n * only a small fraction of lines cross it. Those crossers are returned so\n * the caller can isolate them as their own chunks instead of letting them\n * veto the entire column structure.\n */\nfunction findLowCoverageValley(lines: readonly Line[]): { cut: number; crossers: Line[] } | null {\n const x0 = Math.floor(Math.min(...lines.map(l => l.x)));\n const x1 = Math.ceil(Math.max(...lines.map(l => l.endX)));\n const width = x1 - x0;\n if (width <= 0) return null;\n\n const coverage = new Array<number>(width).fill(0);\n for (const line of lines) {\n const from = Math.max(0, Math.floor(line.x) - x0);\n const to = Math.min(width, Math.ceil(line.endX) - x0);\n for (let i = from; i < to; i++) coverage[i]++;\n }\n const minValley = Math.max(6, medianFontSize(lines) * 0.5);\n const maxCrossers = Math.max(1, Math.floor(lines.length * MAX_CROSSER_RATIO));\n const edgeMargin = width * 0.1;\n\n let best: { cut: number; cost: number } | null = null;\n for (let start = Math.ceil(edgeMargin); start + minValley < width - edgeMargin; start++) {\n let peak = 0;\n for (let i = start; i < start + minValley; i++) peak = Math.max(peak, coverage[i]);\n if (peak > maxCrossers) continue;\n if (!best || peak < best.cost) best = { cut: x0 + start + minValley / 2, cost: peak };\n }\n if (!best) return null;\n const crossers = lines.filter(line => line.x < best.cut && line.endX > best.cut);\n if (crossers.length > maxCrossers) return null;\n return { cut: best.cut, crossers };\n}\n\n/** Groups y-sorted lines into runs, breaking at every spanning line. */\nfunction chunkBySpanners(lines: Line[], isSpanner: (line: Line) => boolean): Line[][] {\n const sorted = [...lines].sort((a, b) => b.y - a.y || a.x - b.x);\n const chunks: Line[][] = [];\n for (const line of sorted) {\n const current = chunks.at(-1);\n if (isSpanner(line)) {\n chunks.push([line], []);\n } else if (current && !current.some(isSpanner)) {\n current.push(line);\n } else {\n chunks.push([line]);\n }\n }\n return chunks.filter(chunk => chunk.length > 0);\n}\n\nfunction splitChunkAtCuts(chunk: Line[], cuts: readonly number[]): Line[][] {\n if (chunk.length < MIN_COLUMN_LINES * 2) return [chunk];\n if (chunk.some(line => cuts.some(cut => line.x < cut && line.endX > cut))) return [chunk];\n\n const columns: Line[][] = Array.from({ length: cuts.length + 1 }, () => []);\n for (const line of chunk) {\n columns[columnIndexFor(line, cuts)].push(line);\n }\n const filled = columns.filter(column => column.length >= MIN_COLUMN_LINES);\n if (filled.length < 2 || filled.length !== columns.filter(c => c.length > 0).length) return [chunk];\n return orderColumns(filled, chunk);\n}\n\nfunction splitVerticalBands(lines: Line[]): Line[][] {\n const sorted = [...lines].sort((a, b) => b.y - a.y);\n const gaps: number[] = [];\n for (let i = 1; i < sorted.length; i++) {\n gaps.push(sorted[i - 1].y - sorted[i].y);\n }\n const fontSize = medianFontSize(sorted);\n const threshold = Math.max(typicalLeading(gaps, fontSize) * 2.5, fontSize * 2.5);\n\n const bands: Line[][] = [[sorted[0]]];\n for (let i = 1; i < sorted.length; i++) {\n if (gaps[i - 1] > threshold) {\n bands.push([sorted[i]]);\n } else {\n bands.at(-1)?.push(sorted[i]);\n }\n }\n return bands;\n}\n\n/** Median positive baseline gap with outliers (> 3 em) excluded. */\nfunction typicalLeading(gaps: readonly number[], fontSize: number): number {\n const usual = gaps.filter(g => g > 0 && g <= fontSize * 3).sort((a, b) => a - b);\n if (usual.length === 0) return fontSize * 1.2;\n return usual[Math.floor(usual.length / 2)];\n}\n\nfunction splitColumns(lines: Line[]): Line[][] {\n if (lines.length < MIN_COLUMN_LINES * 2) return [lines];\n const valleys = findColumnValleys(lines);\n if (valleys.length === 0) return [lines];\n\n const cuts = [...valleys].sort((a, b) => a - b);\n const columns: Line[][] = Array.from({ length: cuts.length + 1 }, () => []);\n for (const line of lines) {\n columns[columnIndexFor(line, cuts)].push(line);\n }\n const filled = columns.filter(column => column.length >= MIN_COLUMN_LINES);\n if (filled.length < 2 || filled.length !== columns.length) return [lines];\n return orderColumns(filled, lines);\n}\n\nfunction columnIndexFor(line: Line, cuts: readonly number[]): number {\n for (let i = 0; i < cuts.length; i++) {\n if (line.endX <= cuts[i]) return i;\n }\n return cuts.length;\n}\n\nfunction findColumnValleys(lines: Line[]): number[] {\n const x0 = Math.floor(Math.min(...lines.map(l => l.x)));\n const x1 = Math.ceil(Math.max(...lines.map(l => l.endX)));\n const width = x1 - x0;\n if (width <= 0) return [];\n\n const coverage = new Array<number>(width).fill(0);\n for (const line of lines) {\n const from = Math.max(0, Math.floor(line.x) - x0);\n const to = Math.min(width, Math.ceil(line.endX) - x0);\n for (let i = from; i < to; i++) coverage[i]++;\n }\n return zeroRunValleys(coverage, x0, width, medianFontSize(lines));\n}\n\nfunction zeroRunValleys(\n coverage: readonly number[],\n x0: number,\n width: number,\n fontSize: number,\n): number[] {\n const minValley = Math.max(6, fontSize * 0.5);\n const edgeMargin = width * 0.1;\n const valleys: number[] = [];\n let runStart = -1;\n for (let i = 0; i <= coverage.length; i++) {\n const isZero = i < coverage.length && coverage[i] === 0;\n if (isZero && runStart < 0) runStart = i;\n if (isZero || runStart < 0) continue;\n const runLength = i - runStart;\n const center = runStart + runLength / 2;\n if (runLength >= minValley && center > edgeMargin && center < width - edgeMargin) {\n valleys.push(x0 + center);\n }\n runStart = -1;\n }\n return valleys;\n}\n\nfunction orderColumns(columns: Line[][], allLines: readonly Line[]): Line[][] {\n const byLeftEdge = [...columns].sort(\n (a, b) => Math.min(...a.map(l => l.x)) - Math.min(...b.map(l => l.x)));\n const rtlCount = allLines.filter(l => l.dir === 'rtl').length;\n return rtlCount * 2 > allLines.length ? byLeftEdge.reverse() : byLeftEdge;\n}\n\nfunction medianFontSize(lines: readonly Line[]): number {\n const sizes = lines.map(l => l.fontSize).sort((a, b) => a - b);\n return sizes[Math.floor(sizes.length / 2)] ?? 12;\n}\n\n// ── Region → typed blocks ───────────────────────────────────────────────\n\n/**\n * Unruled table detection runs here — per region, AFTER column splitting —\n * because at page level an unruled table is indistinguishable from a\n * multi-column text layout and detection would swallow the columns.\n */\nfunction regionToBlocks(rawRegion: Line[], pageIndex: number, ctx: ClassifyContext): DocBlock[] {\n if (rawRegion.length === 0) return [];\n const tableSplit = findTableInBand(rawRegion, [], pageIndex, ctx, { ruled: false });\n if (tableSplit) {\n return [\n ...regionToBlocks(tableSplit.before, pageIndex, ctx),\n tableSplit.table,\n ...regionToBlocks(tableSplit.after, pageIndex, ctx),\n ];\n }\n if (DETECT_NESTED_STRUCTURE) {\n const justified = splitJustifiedRows(rawRegion, pageIndex, ctx);\n if (justified) return justified;\n }\n const fields = splitFieldRows(rawRegion, pageIndex, ctx);\n if (fields) {\n return [\n ...regionToBlocks(fields.before, pageIndex, ctx),\n fields.block,\n ...regionToBlocks(fields.after, pageIndex, ctx),\n ];\n }\n return flowRegionToBlocks(rawRegion, pageIndex, ctx);\n}\n\n/** Vertical reach, in ems, from a field rule to the label it belongs to. */\nconst FIELD_LABEL_REACH_EM = 2.5;\n/** Slack, in pt, for a label overhanging its rule's x-range. */\nconst FIELD_COLUMN_SLACK = 3;\n/** Rules within this many pt of each other count as one row. */\nconst FIELD_ROW_TOLERANCE = 1.5;\n\n/**\n * Builds side-by-side cells for a row of form field slots. The drawn rules tell\n * two fields apart from a label and its value, which\n * {@link mergeSameBaselineLines} would otherwise rejoin. Returns null unless\n * every line in the region sits in one of the rules' columns.\n */\nexport function splitFieldRows(\n region: Line[],\n pageIndex: number,\n ctx: ClassifyContext,\n): { before: Line[]; block: ColumnsBlock; after: Line[] } | null {\n for (const level of fieldRuleLevels(region, ctx)) {\n const split = fieldGridFrom(region, level, pageIndex, ctx);\n if (split) return split;\n }\n return null;\n}\n\n/** Rows of two or more field rules sharing a baseline, widest row first. */\nfunction fieldRuleLevels(region: readonly Line[], ctx: ClassifyContext): PathRect[][] {\n const rules = (ctx.fieldRules ?? []).filter(rect => ruleServesRegion(rect, region));\n const levels: PathRect[][] = [];\n for (const rect of [...rules].sort((a, b) => b.y - a.y)) {\n const level = levels.at(-1);\n if (level && Math.abs(level[0].y - rect.y) <= FIELD_ROW_TOLERANCE) level.push(rect);\n else levels.push([rect]);\n }\n return levels.filter(level => level.length >= 2).sort((a, b) => b.length - a.length);\n}\n\n/**\n * Grows one rule row into a grid: its x-columns pick up every other row with\n * the same column signature (the second field row of a form), then the region's\n * lines are bucketed into those columns. Bails unless the picked lines form a\n * contiguous band — anything else means the columns are catching text that is\n * not part of the grid.\n */\nfunction fieldGridFrom(\n region: readonly Line[],\n level: readonly PathRect[],\n pageIndex: number,\n ctx: ClassifyContext,\n): { before: Line[]; block: ColumnsBlock; after: Line[] } | null {\n const columns: FieldColumn[] = [...level]\n .sort((a, b) => a.x - b.x)\n .map(rect => ({ x0: rect.x, x1: rect.x + rect.width, rules: [rect] }));\n for (const rect of ctx.fieldRules ?? []) {\n const col = columns.find(c => sameFieldColumn(c, rect));\n if (col && !col.rules.includes(rect)) col.rules.push(rect);\n }\n const buckets = columns.map(col => labelsForFieldColumn(region, col));\n if (buckets.some(bucket => bucket.length === 0)) return null;\n const picked = buckets.flat();\n if (new Set(picked).size !== picked.length) return null;\n const top = Math.max(...picked.map(l => l.y));\n const bottom = Math.min(...picked.map(l => l.y));\n if (region.some(l => !picked.includes(l) && l.y <= top && l.y >= bottom)) return null;\n for (const col of columns) for (const rect of col.rules) ctx.useRect?.(rect);\n return {\n before: region.filter(l => l.y > top),\n block: columnsBlockFrom(buckets, MAX_CUT_DEPTH - 1, pageIndex, ctx),\n after: region.filter(l => l.y < bottom),\n };\n}\n\ninterface FieldColumn {\n readonly x0: number;\n readonly x1: number;\n readonly rules: PathRect[];\n}\n\nfunction sameFieldColumn(col: FieldColumn, rect: PathRect): boolean {\n return Math.abs(col.x0 - rect.x) <= FIELD_COLUMN_SLACK &&\n Math.abs(col.x1 - (rect.x + rect.width)) <= FIELD_COLUMN_SLACK;\n}\n\n/** Whether a rule is close enough to the region's text to be its field slot. */\nfunction ruleServesRegion(rect: PathRect, region: readonly Line[]): boolean {\n if (rect.height > UNDERLINE_MAX_HEIGHT) return false;\n return region.some(line =>\n Math.abs(line.y - rect.y) <= Math.max(line.fontSize, 1) * FIELD_LABEL_REACH_EM);\n}\n\n/**\n * One label per slot: each of a column's rules claims only the single nearest\n * line within reach, in row order. Taking every line in reach instead lets a\n * section heading a couple of lines below the last slot fall into the grid.\n */\nfunction labelsForFieldColumn(region: readonly Line[], col: FieldColumn): Line[] {\n const labels: Line[] = [];\n for (const rect of [...col.rules].sort((a, b) => b.y - a.y)) {\n const candidates = region.filter(line => lineFitsFieldColumn(line, col) &&\n Math.abs(line.y - rect.y) <= Math.max(line.fontSize, 1) * FIELD_LABEL_REACH_EM);\n if (candidates.length === 0) return [];\n const nearest = candidates.reduce((best, line) =>\n Math.abs(line.y - rect.y) < Math.abs(best.y - rect.y) ? line : best, candidates[0]);\n const below = rect.y < nearest.y;\n const distance = below\n ? nearest.y - (rect.y + rect.height)\n : rect.y - nearest.y;\n nearest.fieldRule = {\n widthPt: Math.max(rect.height, 0.5),\n color: (rect.filled ? rect.fillColor : rect.strokeColor) ?? '#000000',\n gapPt: Math.max(0, distance - Math.max(nearest.fontSize, 1) * 0.25),\n below,\n };\n labels.push(nearest);\n }\n return labels;\n}\n\nfunction lineFitsFieldColumn(line: Line, col: FieldColumn): boolean {\n return line.x >= col.x0 - FIELD_COLUMN_SLACK && line.endX <= col.x1 + FIELD_COLUMN_SLACK;\n}\n\n/**\n * Flows a region's hard-break segments into stacked paragraph/heading/list\n * blocks: rejoin same-baseline segments, split into paragraph groups, classify\n * each. This is the terminal (non-column, non-table) path of a resolved region.\n */\nfunction flowRegionToBlocks(rawRegion: Line[], pageIndex: number, ctx: ClassifyContext): DocBlock[] {\n const region = mergeSameBaselineLines(rawRegion);\n const bounds = boundsOfLines(region);\n const groups = splitIntoParagraphGroups(region);\n const blocks: DocBlock[] = [];\n let previousBaseline: number | null = null;\n for (const lines of groups) {\n const gapAbove = previousBaseline === null ? null : previousBaseline - lines[0].y;\n const kind = classifyGroup(lines, bounds, gapAbove, ctx);\n const style = resolveBlockStyle(lines, bounds, previousBaseline, ctx.pageBounds);\n blocks.push(blockFrom(kind, lines, pageIndex, style, ctx.pageBounds));\n previousBaseline = lines.at(-1)?.y ?? previousBaseline;\n }\n return blocks;\n}\n\n/**\n * A group whose lines each carry a drawn checkbox becomes a task list, one item\n * per box. Every line must have one: a paragraph that merely happens to sit\n * beside a single boxed glyph is not a list.\n */\nfunction taskListFrom(lines: readonly Line[], page: number, style: BlockStyle): ListBlock | null {\n if (lines.length === 0 || !lines.every(line => line.checkbox)) return null;\n return {\n kind: 'list',\n ordered: false,\n task: true,\n items: lines.map(line => ({\n level: 0,\n lines: [line],\n checked: line.checkbox?.checked ?? false,\n })),\n page,\n style,\n };\n}\n\n/**\n * Moves a field slot's rule from the label line onto its block, so the block\n * draws the line the PDF drew under (or over) the label. Only a lone label\n * carries one — a wrapped paragraph that happens to start on a slot does not.\n */\nfunction withFieldRule(lines: readonly Line[], style: BlockStyle): BlockStyle {\n const rule = lines.length === 1 ? lines[0].fieldRule : undefined;\n if (!rule) return style;\n const { widthPt, color, gapPt } = rule;\n return rule.below\n ? { ...style, ruleUnder: { widthPt, color, gapPt } }\n : { ...style, ruleOver: { widthPt, color, gapPt } };\n}\n\nfunction blockFrom(\n kind: GroupKind,\n lines: Line[],\n page: number,\n style: BlockStyle,\n measure: ColumnBounds,\n): DocBlock {\n const tasks = taskListFrom(lines, page, style);\n if (tasks) return tasks;\n style = withFieldRule(lines, style);\n switch (kind.kind) {\n case 'heading':\n return { kind: 'heading', level: kind.level, lines: [...lines], page, style };\n case 'list':\n return { kind: 'list', ordered: kind.ordered, items: kind.items, page, style };\n case 'blockquote':\n return {\n kind: 'blockquote',\n lines: [...lines],\n page,\n style: { ...style, maxWidth: narrowBlockWidth(lines, measure) },\n stacked: allBreaksIntentional(lines, measure),\n };\n default:\n return {\n kind: 'paragraph',\n lines: [...lines],\n page,\n style,\n stacked: allBreaksIntentional(lines, measure),\n };\n }\n}\n\n/** Safety margin, in em, the next line's first word must clear beyond the\n * broken line's remaining room before a break counts as deliberate. */\nconst INTENTIONAL_BREAK_MARGIN_EM = 1;\n\n/**\n * True when every line break in the group is deliberate: the next line's first\n * word would have fit in the room left on the broken line (ISO 32000 has no\n * break semantics — this is the pdfminer-style layout inference). Wrapped prose\n * breaks a line precisely because the next word does NOT fit, so a genuine\n * paragraph fails this on its very first break. The measure is the enclosing\n * region/column's content bounds (column-scoped for column cells), and the fit\n * requires a full safety margin so a ragged edge near the measure never\n * misreads as deliberate. A hyphen-ended line is a wrap artifact regardless of\n * room (narrow gloss columns sit far from their region measure), so it vetoes\n * the whole group. RTL lines fill right-to-left, so their remaining room is on\n * the left edge.\n */\nfunction allBreaksIntentional(lines: readonly Line[], measure: ColumnBounds): boolean {\n if (lines.length < 2) return false;\n if (lines.some(line => line.words.at(-1)?.text.endsWith('-'))) return false;\n const roomOnLeft = raggedOnLeft(lines);\n for (let i = 0; i < lines.length - 1; i++) {\n const line = lines[i];\n const nextWord = lines[i + 1].words[0];\n if (!nextWord) return false;\n const room = roomOnLeft ? line.x - measure.x0 : measure.x1 - line.endX;\n const needed = firstTokenWidth(nextWord) +\n INTENTIONAL_BREAK_MARGIN_EM * Math.max(line.fontSize, 1);\n if (needed > room) return false;\n }\n return true;\n}\n\n/**\n * The room a broken word would have used sits on the block's RAGGED edge —\n * where the text stops short — not on a side implied by script direction: a\n * right-aligned LTR stack (a receipt's rate-of-exchange lines) wraps on the\n * left exactly like RTL text does. Equal spreads fall back to the direction.\n */\nfunction raggedOnLeft(lines: readonly Line[]): boolean {\n const spreadLeft = Math.max(...lines.map(l => l.x)) - Math.min(...lines.map(l => l.x));\n const spreadRight = Math.max(...lines.map(l => l.endX)) - Math.min(...lines.map(l => l.endX));\n if (spreadLeft === spreadRight) {\n return lines.filter(l => l.dir === 'rtl').length * 2 > lines.length;\n }\n return spreadLeft > spreadRight;\n}\n\n/** Width of the word's first whitespace-separated token. Fragment merging can\n * fold a whole line into one Word; the wrap decision only ever concerned the\n * first token, so its width is estimated proportionally. */\nfunction firstTokenWidth(word: Word): number {\n const width = word.endX - word.x;\n const text = word.text.trim();\n const spaceAt = text.search(/\\s/);\n if (spaceAt < 0 || text.length === 0) return width;\n return width * (spaceAt / text.length);\n}\n\n/** A block spanning at most this share of its measure keeps its own width. */\nconst NARROW_BLOCK_MAX_RATIO = 0.5;\n\n/**\n * A multi-line block much narrower than its measure was wrapped by the\n * original at ITS OWN width — constraining the emitted block to that width\n * lets the browser reproduce the original's line breaks naturally (a vendor\n * address card re-wraps at ~135pt into its three original lines), instead of\n * re-flowing to whatever measure the surrounding layout happens to leave.\n */\nfunction narrowBlockWidth(lines: readonly Line[], measure: ColumnBounds): number {\n if (lines.length < 2) return 0;\n const x0 = Math.min(...lines.map(l => l.x));\n const x1 = Math.max(...lines.map(l => l.endX));\n const measureWidth = Math.max(1, measure.x1 - measure.x0);\n if (x1 - x0 > measureWidth * NARROW_BLOCK_MAX_RATIO) return 0;\n const fontSize = Math.max(1, ...lines.map(l => l.fontSize));\n return x1 - x0 + fontSize;\n}\n\n/**\n * Rejoins hard-break segments that share a baseline inside one region.\n * Segmentation exists so the XY-cut can see column valleys; once a region is\n * final, same-baseline segments were one visual line and must not stack as\n * separate paragraphs.\n */\nfunction mergeSameBaselineLines(region: readonly Line[]): Line[] {\n const sorted = [...region].sort((a, b) => b.y - a.y || a.x - b.x);\n const merged: Line[] = [];\n for (const line of sorted) {\n const previous = merged.at(-1);\n if (previous && Math.abs(previous.y - line.y) <= previous.fontSize * 0.35) {\n merged[merged.length - 1] = joinLines(previous, line);\n } else {\n merged.push(line);\n }\n }\n return merged;\n}\n\nfunction joinLines(a: Line, b: Line): Line {\n const rtl = a.dir === 'rtl' || b.dir === 'rtl';\n const [left, right] = a.x <= b.x ? [a, b] : [b, a];\n const [first, second] = rtl ? [right, left] : [left, right];\n const words = [...first.words, ...second.words.map((word, i) =>\n i === 0 ? { ...word, spaceBefore: true } : word)];\n return {\n words,\n x: Math.min(a.x, b.x),\n endX: Math.max(a.endX, b.endX),\n y: a.y,\n fontSize: Math.max(a.fontSize, b.fontSize),\n dir: rtl ? 'rtl' : 'ltr',\n page: a.page,\n };\n}\n\nexport function boundsOfLines(lines: readonly Line[]): ColumnBounds {\n return {\n x0: Math.min(...lines.map(l => l.x)),\n x1: Math.max(...lines.map(l => l.endX)),\n };\n}\n\n/**\n * Sub-detector B — left/right justified single-baseline rows. A region row that\n * carries exactly two segments each pinned to an opposite region edge with a\n * wide gap between them (a receipt's \"−$15.00 USD … Lemon Squeezy LLC\" header)\n * is a two-column layout that {@link mergeSameBaselineLines} would otherwise\n * flatten into one line. Such rows emit as a borderless two-cell row; the rest\n * of the region flows normally. Returns null when no row qualifies, so the\n * region is left to the standard flow path untouched.\n */\nexport function splitJustifiedRows(\n rawRegion: Line[],\n pageIndex: number,\n ctx: ClassifyContext,\n): DocBlock[] | null {\n const bounds = boundsOfLines(rawRegion);\n const width = bounds.x1 - bounds.x0;\n if (width <= 0) return null;\n const rows = groupByBaseline(rawRegion);\n const splittable = justifiableRows(rows, bounds, width, ctx);\n if (!splittable) return null;\n const blocks: DocBlock[] = [];\n let buffer: Line[] = [];\n const flush = (): void => {\n if (buffer.length > 0) {\n blocks.push(...flowRegionToBlocks(buffer, pageIndex, ctx));\n buffer = [];\n }\n };\n for (const row of rows) {\n const justified = splittable.has(row) ? asJustifiedRow(row, bounds, width, ctx) : null;\n if (justified) {\n flush();\n const rowBlock = columnsBlockFrom(\n [[justified.left], [justified.right]], MAX_CUT_DEPTH, pageIndex, ctx,\n );\n pinJustifiedCells(rowBlock);\n blocks.push(rowBlock);\n } else {\n buffer.push(...row);\n }\n }\n flush();\n return blocks;\n}\n\n/**\n * The rows of a region that may split into an edge-pinned two-cell row, or\n * null when none may. A short band (a header/footer strip cut out on its own)\n * offers every row. A long region — a whole page of prose — offers only a\n * leading masthead: a title with a kicker pinned to the far margin, set larger\n * than the body. Without that exception a report's masthead flowed into one\n * run and the kicker landed hard against the title; with the cap lifted\n * wholesale, any two-segment prose row in the body could split instead.\n */\nfunction justifiableRows(\n rows: readonly Line[][],\n bounds: ColumnBounds,\n width: number,\n ctx: ClassifyContext,\n): Set<Line[]> | null {\n if (rows.length <= JUSTIFIED_MAX_ROWS) {\n const any = rows.some(row => asJustifiedRow(row, bounds, width, ctx));\n return any ? new Set(rows) : null;\n }\n const first = rows[0];\n if (!first || !isMastheadRow(first, ctx)) return null;\n return asJustifiedRow(first, bounds, width, ctx) ? new Set([first]) : null;\n}\n\n/** Type this much larger than the body marks a masthead rather than prose. */\nconst MASTHEAD_FONT_RATIO = 1.3;\n\nfunction isMastheadRow(row: readonly Line[], ctx: ClassifyContext): boolean {\n const fontSize = Math.max(...row.map(line => line.fontSize));\n return fontSize >= ctx.bodyFontSize * MASTHEAD_FONT_RATIO;\n}\n\n/** A justified row's segments were pinned to opposite region edges, so their\n * cells anchor the same way — the page number stays at the far margin. */\nfunction pinJustifiedCells(rowBlock: ColumnsBlock): void {\n const [leftCol, rightCol] = rowBlock.columns;\n for (const block of leftCol?.blocks ?? []) block.style.align = 'left';\n for (const block of rightCol?.blocks ?? []) block.style.align = 'right';\n}\n\n/** Groups a region's segments into baseline rows, top-to-bottom, mirroring the\n * same-baseline tolerance {@link mergeSameBaselineLines} uses. */\nfunction groupByBaseline(region: readonly Line[]): Line[][] {\n const sorted = [...region].sort((a, b) => b.y - a.y || a.x - b.x);\n const rows: Line[][] = [];\n for (const line of sorted) {\n const current = rows.at(-1);\n if (current && Math.abs(current[0].y - line.y) <= current[0].fontSize * 0.35) {\n current.push(line);\n } else {\n rows.push([line]);\n }\n }\n return rows;\n}\n\n/**\n * Returns the two edge-pinned segments of a justified header row, or null.\n * Beyond the geometry (exactly two segments, each pinned to an opposite region\n * edge, a wide inter-segment gap) it rejects the shapes that share that\n * geometry but are not headers: page-number/marker tokens, duplicated segments\n * (rendered-twice visibility tests), narrow prose columns, and sub-body print\n * chrome. The region-level short-band check is applied by the caller\n * ({@link splitJustifiedRows}).\n */\nexport function asJustifiedRow(\n row: readonly Line[],\n bounds: ColumnBounds,\n width: number,\n ctx: ClassifyContext,\n): { left: Line; right: Line } | null {\n if (row.length !== 2) return null;\n const [a, b] = row;\n const [left, right] = a.x <= b.x ? [a, b] : [b, a];\n const fontSize = Math.max(left.fontSize, right.fontSize);\n const pinTolerance = fontSize * JUSTIFIED_EDGE_FONTS;\n if (left.x > bounds.x0 + pinTolerance) return null;\n if (right.endX < bounds.x1 - pinTolerance) return null;\n if (right.x - left.endX < width * JUSTIFIED_GAP_RATIO) return null;\n if (width < JUSTIFIED_MIN_WIDTH_PT) return null;\n const footer = isFooterBandRow(left, right, ctx);\n if (!footer && fontSize < ctx.bodyFontSize * JUSTIFIED_MIN_FONT_RATIO) return null;\n const pageWidth = ctx.pageBounds.x1 - ctx.pageBounds.x0;\n if (pageWidth > 0 && width < pageWidth * JUSTIFIED_MIN_WIDTH_RATIO) return null;\n if (rejectsMarkers(left, right, footer)) return null;\n if (segmentText(left) === segmentText(right)) return null;\n return { left, right };\n}\n\n/** Rows this low on the page are footer chrome, where small type and a bare\n * page number at the edges are exactly what a real footer looks like. */\nconst FOOTER_BAND_RATIO = 0.08;\n\nfunction isFooterBandRow(left: Line, right: Line, ctx: ClassifyContext): boolean {\n const pageHeight = ctx.pageHeight ?? 0;\n return pageHeight > 0 && Math.max(left.y, right.y) <= pageHeight * FOOTER_BAND_RATIO;\n}\n\n/** Outside the footer band any marker segment rejects the row; inside it only\n * a row of two bare markers does (URL | page-number is a genuine footer). */\nfunction rejectsMarkers(left: Line, right: Line, footer: boolean): boolean {\n if (footer) return isMarkerSegment(left) && isMarkerSegment(right);\n return isMarkerSegment(left) || isMarkerSegment(right);\n}\n\n/** A segment's text, normalised for the marker/duplicate checks. */\nfunction segmentText(line: Line): string {\n return line.words.map(w => w.text).join(' ').replaceAll(/\\s+/g, ' ').trim();\n}\n\n/** True when a segment is a page number, list marker, or bare symbol rather\n * than a content label. */\nfunction isMarkerSegment(line: Line): boolean {\n const text = segmentText(line);\n return text.length < JUSTIFIED_MIN_SEGMENT_CHARS || MARKER_TOKEN_RE.test(text);\n}\n\nfunction splitIntoParagraphGroups(lines: readonly Line[]): Line[][] {\n if (lines.length === 0) return [];\n const medianGap = medianBaselineGap(lines);\n const bounds = boundsOfLines(lines);\n let current: Line[] = [lines[0]];\n const groups: Line[][] = [current];\n for (let i = 1; i < lines.length; i++) {\n if (startsNewParagraph(lines[i - 1], lines[i], medianGap, bounds)) {\n current = [lines[i]];\n groups.push(current);\n } else {\n current.push(lines[i]);\n }\n }\n return groups;\n}\n\nfunction startsNewParagraph(\n previous: Line,\n line: Line,\n medianGap: number,\n bounds: ColumnBounds,\n): boolean {\n const gap = previous.y - line.y;\n if (gap <= 0) return true;\n if (gap > Math.max(previous.fontSize, line.fontSize) * 2.2) return true;\n if (medianGap > 0 && gap > medianGap * PARAGRAPH_GAP_FACTOR) return true;\n const sizeRatio = Math.max(previous.fontSize, line.fontSize) /\n Math.max(1, Math.min(previous.fontSize, line.fontSize));\n if (sizeRatio >= FONT_SIZE_CHANGE_RATIO) return true;\n if (isListSubheadingBoundary(previous, line, sizeRatio)) return true;\n if (dominantStyleChanges(previous, line)) return true;\n if (alignmentBreaks(previous, line, bounds)) return true;\n if (previous.dir !== line.dir) return true;\n return indentStartsParagraph(previous, line, bounds);\n}\n\n/** Smallest first-line indent, in em, that reads as a paragraph opener. */\nconst MIN_PARAGRAPH_INDENT_EM = 0.5;\n/** Largest such indent — beyond this the line is a differently-placed block. */\nconst MAX_PARAGRAPH_INDENT_EM = 4;\n/** How short of the measure the previous line must fall to have ended a paragraph. */\nconst PARAGRAPH_END_SLACK_EM = 0.5;\n/** Tolerance, in pt, for a line sitting on the region's start edge. */\nconst START_EDGE_TOLERANCE = 1;\n\n/**\n * A first-line indent opening a new paragraph. Indent-style typesetting marks\n * paragraphs with the indent alone, and its inter-paragraph leading can sit\n * well under {@link PARAGRAPH_GAP_FACTOR} — a two-column newsletter runs 15pt\n * lines with a 21.7pt paragraph gap (1.45x), so the gap test alone merges the\n * paragraphs into one.\n *\n * Deliberately narrow: the previous line must sit on the region's start edge\n * (so a list's hanging indent or a centered run cannot trip it) and must stop\n * short of the measure (so it genuinely ended a paragraph rather than wrapped).\n */\nfunction indentStartsParagraph(previous: Line, line: Line, bounds: ColumnBounds): boolean {\n const em = Math.max(line.fontSize, 1);\n const rtl = line.dir === 'rtl';\n const indent = rtl ? bounds.x1 - line.endX : line.x - bounds.x0;\n if (indent < em * MIN_PARAGRAPH_INDENT_EM || indent > em * MAX_PARAGRAPH_INDENT_EM) return false;\n const previousStart = rtl ? bounds.x1 - previous.endX : previous.x - bounds.x0;\n if (Math.abs(previousStart) > START_EDGE_TOLERANCE) return false;\n const previousSlack = rtl ? previous.x - bounds.x0 : bounds.x1 - previous.endX;\n return previousSlack > em * PARAGRAPH_END_SLACK_EM;\n}\n\ntype LineAlignClass = 'full' | 'start' | 'end' | 'center' | 'other';\n\n/**\n * An edge-pinned line next to a centered one is two differently-aligned\n * statements (a right-pinned RTL title over a centered emphasis line), not a\n * wrap. Full-width lines never split here — their continuation tail can land\n * anywhere, including dead centre — and 'other' placements stay inconclusive.\n */\nfunction alignmentBreaks(previous: Line, line: Line, bounds: ColumnBounds): boolean {\n const a = lineAlignClass(previous, bounds);\n const b = lineAlignClass(line, bounds);\n if (a === 'full' || b === 'full' || a === 'other' || b === 'other') return false;\n return (a === 'center') !== (b === 'center');\n}\n\nfunction lineAlignClass(line: Line, bounds: ColumnBounds): LineAlignClass {\n const em = Math.max(line.fontSize, 1);\n const left = line.x - bounds.x0;\n const right = bounds.x1 - line.endX;\n if (left <= em && right <= em) return 'full';\n if (left <= em) return 'start';\n if (right <= em) return 'end';\n const tolerance = Math.max(em * 2, 0.2 * Math.min(left, right));\n if (Math.abs(left - right) <= tolerance) return 'center';\n return 'other';\n}\n\n/**\n * A uniformly bold line followed by a uniformly plain one is a heading-to-body\n * boundary (a name over a role line, a column header over data rows), not a\n * wrap. Only this direction splits: a plain label line followed by a bold\n * value (\"לכבוד: <date>\" over a bold recipient) is one visual unit, and mixed\n * lines (prose with an inline bold word) never trip the test.\n */\nfunction dominantStyleChanges(previous: Line, line: Line): boolean {\n const uniformBold = (l: Line): boolean | null => {\n const [first, ...rest] = l.words;\n if (!first) return null;\n return rest.every(w => w.style.bold === first.style.bold) ? first.style.bold : null;\n };\n return uniformBold(previous) === true && uniformBold(line) === false;\n}\n\n/**\n * A subheading interleaved in a bullet list (e.g. a CV's job-title lines\n * between bullet groups) shares the list's baseline gap and stays under the\n * paragraph font-change threshold, so it would otherwise be swept into the\n * list — dropped when it precedes the first marker, or merged into the prior\n * item when it follows one. It is set apart by the bullet-marker status\n * flipping between the two lines together with a real font-size difference; a\n * genuine wrapped continuation keeps the body font, so the size gate leaves it\n * attached.\n */\nfunction isListSubheadingBoundary(previous: Line, line: Line, sizeRatio: number): boolean {\n return hasListMarker(previous) !== hasListMarker(line) && sizeRatio >= LIST_SUBHEADING_RATIO;\n}\n\nfunction medianBaselineGap(lines: readonly Line[]): number {\n const gaps: number[] = [];\n for (let i = 1; i < lines.length; i++) {\n const gap = lines[i - 1].y - lines[i].y;\n if (gap > 0) gaps.push(gap);\n }\n if (gaps.length === 0) return 0;\n gaps.sort((a, b) => a - b);\n return gaps[Math.floor(gaps.length / 2)];\n}\n\n// ── Underlines & horizontal rules ───────────────────────────────────────\n\n/** Flags words sitting directly above thin drawn rects as underlined. */\nexport function applyUnderlines(lines: readonly Line[], rects: readonly PathRect[]): Set<PathRect> {\n const used = new Set<PathRect>();\n for (const rect of rects) {\n if (rect.height > UNDERLINE_MAX_HEIGHT || rect.width < 4) continue;\n if (flagUnderlinedWords(lines, rect)) used.add(rect);\n }\n return used;\n}\n\nfunction flagUnderlinedWords(lines: readonly Line[], rect: PathRect): boolean {\n let flagged = false;\n for (const line of lines) {\n const drop = line.y - rect.y;\n if (drop < -1 || drop > line.fontSize * 0.35) continue;\n for (const word of line.words) {\n if (overlapRatio(word.x, word.endX, rect.x, rect.x + rect.width) < 0.5) continue;\n word.style = { ...word.style, underline: true };\n flagged = true;\n }\n }\n return flagged;\n}\n\nfunction overlapRatio(aStart: number, aEnd: number, bStart: number, bEnd: number): number {\n const overlap = Math.min(aEnd, bEnd) - Math.max(aStart, bStart);\n const span = aEnd - aStart;\n return span <= 0 ? 0 : overlap / span;\n}\n\n/**\n * Underlines a form-field slot value. A signature/field slot is drawn as a short\n * horizontal rule sitting a line below its value with the field label a line\n * further down (value / ───── / label). `applyUnderlines` misses it — the rule\n * is too far below the value baseline — so it renders as a loose line. Requiring\n * BOTH a value centred above AND a label centred below (the sandwich) excludes a\n * bare answer-blank rule, whose writing space below carries no text, and the\n * width cap excludes document separators and box edges.\n */\nexport function applySlotUnderlines(\n lines: readonly Line[],\n rects: readonly PathRect[],\n usedRects: Set<PathRect>,\n pageWidth: number,\n): void {\n for (const rect of rects) {\n if (usedRects.has(rect)) continue;\n const value = slotValueLine(lines, rect, pageWidth);\n if (value && underlineOverlappingWords(value, rect)) usedRects.add(rect);\n }\n}\n\n/** The value line a slot underline belongs to, or null when the rect is not a\n * field slot (too tall/short/wide, unsaturated, or missing the value/label\n * sandwich). */\nfunction slotValueLine(lines: readonly Line[], rect: PathRect, pageWidth: number): Line | null {\n if (rect.height > UNDERLINE_MAX_HEIGHT || rect.width < 4) return null;\n if (rect.width > pageWidth * SLOT_MAX_WIDTH_RATIO) return null;\n // A field slot is drawn in the form's accent colour; a grey/black thin rect\n // with text either side is a table gridline or a plain rule, not a slot\n // (this also excludes with_form's black answer-blank lines).\n if (!isSaturatedColor(rect.stroked ? rect.strokeColor : rect.fillColor)) return null;\n const value = closestCentredLine(lines, rect, 'above');\n if (!value || !closestCentredLine(lines, rect, 'below')) return null;\n return value;\n}\n\n/** Underlines the value's words that sit over the rect; true if any matched. */\nfunction underlineOverlappingWords(value: Line, rect: PathRect): boolean {\n let underlined = false;\n for (const word of value.words) {\n if (overlapRatio(word.x, word.endX, rect.x, rect.x + rect.width) < 0.3) continue;\n word.style = { ...word.style, underline: true };\n underlined = true;\n }\n return underlined;\n}\n\n/** The nearest line whose horizontal centre falls within the rect and whose\n * baseline sits within {@link SLOT_GAP_FONTS} font-sizes on the given side. */\nfunction closestCentredLine(lines: readonly Line[], rect: PathRect, side: 'above' | 'below'): Line | null {\n let best: Line | null = null;\n let bestGap = Number.POSITIVE_INFINITY;\n for (const line of lines) {\n const gap = side === 'above' ? line.y - rect.y : rect.y - line.y;\n if (gap <= 0 || gap > line.fontSize * SLOT_GAP_FONTS) continue;\n const centre = (line.x + line.endX) / 2;\n if (centre < rect.x || centre > rect.x + rect.width) continue;\n if (gap < bestGap) {\n best = line;\n bestGap = gap;\n }\n }\n return best;\n}\n\nfunction detectRules(\n page: PageExtract,\n usedRects: ReadonlySet<PathRect>,\n lines: readonly Line[],\n blocks: readonly DocBlock[],\n): RuleBlock[] {\n const contentWidth = lines.length > 0\n ? Math.max(...lines.map(l => l.endX)) - Math.min(...lines.map(l => l.x))\n : page.width;\n const tableSpans = tableRowSpans(blocks);\n const candidates = page.rects\n .filter(rect => !usedRects.has(rect) &&\n rect.height <= RULE_MAX_HEIGHT &&\n rect.width >= contentWidth * 0.4 &&\n (rect.stroked || rect.filled) &&\n !isNearWhite(rect.filled ? rect.fillColor : rect.strokeColor) &&\n !hidesInTableGrid(rect, tableSpans, page.width))\n .map(rect => ({ top: rect.y + rect.height, bottom: rect.y }))\n .sort((a, b) => b.top - a.top);\n return dedupeCloseTops(candidates).map(top => ({\n kind: 'rule' as const,\n page: page.index,\n style: emptyStyle(),\n top,\n }));\n}\n\n/** A detected table's bounding band: vertical row extent and column extent. */\ninterface TableSpan {\n readonly top: number;\n readonly bottom: number;\n readonly left: number;\n readonly right: number;\n}\n\n/**\n * Bounding bands of the detected tables. A thin wide rect inside one is a\n * cell border / row separator (the table's own structure), not a standalone\n * document rule — an unruled data table (invoice, statement) is reconstructed\n * from geometry, so its grey grid lines are never consumed as table rects and\n * would otherwise leak out as spurious rules between the rows.\n */\nfunction tableRowSpans(blocks: readonly DocBlock[]): TableSpan[] {\n const spans: TableSpan[] = [];\n for (const block of blocks) {\n if (block.kind !== 'table') continue;\n const cellLines = block.rows.flatMap(row => row.flatMap(cell => cell.lines));\n const ys = cellLines.map(l => l.y);\n if (ys.length === 0) continue;\n spans.push({\n top: Math.max(...ys),\n bottom: Math.min(...ys),\n left: Math.min(...cellLines.map(l => l.x)),\n right: Math.max(...cellLines.map(l => l.endX)),\n });\n }\n return spans;\n}\n\n/**\n * A thin wide rect inside a table's row band is that table's own cell border /\n * row separator and must not leak out as a document rule — EXCEPT a near-full-\n * page-width rule that extends beyond the table's own column span, which is a\n * page-level separator drawn across the header band (doc1's blue header rule\n * sits at the top of the header table yet runs the full page width). Cell\n * gridlines are always contained within their table's columns, so requiring the\n * rule to both span most of the page AND poke past the table keeps every real\n * gridline (doc4's grey grid maxes at 58% page width, fully contained) guarded.\n */\nfunction hidesInTableGrid(rect: PathRect, spans: readonly TableSpan[], pageWidth: number): boolean {\n return spans.some(span => {\n const inBand = rect.y >= span.bottom - RULE_TABLE_MARGIN && rect.y <= span.top + RULE_TABLE_MARGIN;\n if (!inBand) return false;\n const pageWide = rect.width >= pageWidth * PAGE_SEPARATOR_WIDTH_RATIO;\n const pokesOut = rect.x < span.left - RULE_TABLE_MARGIN ||\n rect.x + rect.width > span.right + RULE_TABLE_MARGIN;\n return !(pageWide && pokesOut);\n });\n}\n\n/**\n * Collapses the slices a PDF paints for one visual rule (a fill and a stroke\n * of the same line) while keeping a genuine double rule as two.\n *\n * The distinction is whitespace, not distance: slices of one rule touch or\n * overlap, so the merge runs against the previous slice's *bottom* edge. Two\n * hairlines with a clear gap between them — a masthead's double rule — stay\n * separate however close they are.\n */\nfunction dedupeCloseTops(descending: readonly { top: number; bottom: number }[]): number[] {\n const result: number[] = [];\n let lastBottom = Infinity;\n for (const rule of descending) {\n if (rule.top < lastBottom) {\n result.push(rule.bottom);\n lastBottom = rule.bottom;\n } else {\n lastBottom = Math.min(lastBottom, rule.bottom);\n }\n }\n return result;\n}\n\n/** A rule drawn in white (or near-white) is invisible on the page and is noise. */\nfunction isNearWhite(color: string): boolean {\n const match = /^#([0-9a-f]{6})$/i.exec(color);\n if (!match) return false;\n const value = Number.parseInt(match[1], 16);\n return ((value >> 16) & 0xff) > 235 && ((value >> 8) & 0xff) > 235 && (value & 0xff) > 235;\n}\n\nfunction emptyStyle(): BlockStyle {\n return { align: '', indentStart: 0, textIndent: 0, lineHeight: 0, marginTop: 0, dir: '', background: '', border: '' };\n}\n\n// ── Image & rule interleaving ───────────────────────────────────────────\n\nfunction interleaveByTop(blocks: DocBlock[], rules: RuleBlock[]): DocBlock[] {\n if (rules.length === 0) return blocks;\n const sortedRules = [...rules].sort((a, b) => b.top - a.top);\n const result: DocBlock[] = [];\n let ruleIdx = 0;\n for (const block of blocks) {\n const top = blockTopOf(block);\n while (ruleIdx < sortedRules.length && sortedRules[ruleIdx].top > top) {\n result.push(sortedRules[ruleIdx]);\n ruleIdx++;\n }\n result.push(block);\n }\n result.push(...sortedRules.slice(ruleIdx));\n return result;\n}\n\nfunction interleaveImages(\n blocks: readonly DocBlock[],\n images: readonly ImageItem[],\n pageIndex: number,\n rtlPageWidth: number,\n): DocBlock[] {\n const floatsByHost = assignFloats(blocks, images);\n const floated = new Set([...floatsByHost.values()].map(f => f.image));\n const inline = images\n .filter(img => !floated.has(img))\n .sort((a, b) => imageTop(b) - imageTop(a));\n const result: DocBlock[] = [];\n let imageIdx = 0;\n for (const block of blocks) {\n const floatImage = floatsByHost.get(block);\n if (floatImage) result.push(floatImage);\n const blockTop = blockTopOf(block);\n while (imageIdx < inline.length && imageTop(inline[imageIdx]) > blockTop) {\n result.push(standaloneImage(inline[imageIdx], pageIndex, rtlPageWidth));\n imageIdx++;\n }\n result.push(block);\n }\n while (imageIdx < inline.length) {\n result.push(standaloneImage(inline[imageIdx], pageIndex, rtlPageWidth));\n imageIdx++;\n }\n return result;\n}\n\n/**\n * A standalone image, anchored to its true horizontal side on an RTL page\n * (rtlPageWidth > 0) so the RTL container does not right-anchor a logo that sat\n * on the left. On LTR pages the inline default already matches, so no anchor is\n * set (avoids disturbing existing output).\n */\nfunction standaloneImage(image: ImageItem, pageIndex: number, rtlPageWidth: number): ImageBlock {\n const block = imageBlockFrom(image, pageIndex, '');\n if (rtlPageWidth > 0) block.style.align = imageSideAlign(image, rtlPageWidth);\n return block;\n}\n\nfunction imageSideAlign(image: ImageItem, pageWidth: number): BlockAlign {\n const center = (image.x + image.renderWidth / 2) / pageWidth;\n if (center < 0.4) return 'left';\n if (center > 0.6) return 'right';\n return 'center';\n}\n\n/** Pairs each image that sits beside a multi-line text block with that block. */\nfunction assignFloats(\n blocks: readonly DocBlock[],\n images: readonly ImageItem[],\n): Map<DocBlock, ImageBlock> {\n const byHost = new Map<DocBlock, ImageBlock>();\n for (const image of images) {\n const host = blocks.find(block => !byHost.has(block) && floatSideFor(block, image) !== null);\n if (!host) continue;\n const side = floatSideFor(host, image);\n if (side) byHost.set(host, imageBlockFrom(image, host.page, side));\n }\n return byHost;\n}\n\nfunction floatSideFor(block: DocBlock, image: ImageItem): 'left' | 'right' | null {\n const lines = textLinesOf(block);\n if (lines.length < 2) return null;\n const top = Math.max(...lines.map(l => l.y));\n const bottom = Math.min(...lines.map(l => l.y));\n const imgTopY = imageTop(image);\n const overlap = Math.min(top, imgTopY) - Math.max(bottom, image.y);\n const bandHeight = top - bottom + Math.max(...lines.map(l => l.fontSize));\n if (overlap < Math.min(image.renderHeight, bandHeight) * 0.5) return null;\n\n // Only lines vertically beside the image constrain the shared band — a\n // lower row extending under the image does not block the float.\n const beside = lines.filter(l =>\n l.y <= imgTopY + l.fontSize && l.y >= image.y - l.fontSize);\n if (beside.length === 0) return null;\n const blockLeft = Math.min(...beside.map(l => l.x));\n const blockRight = Math.max(...beside.map(l => l.endX));\n const imgRight = image.x + image.renderWidth;\n if (imgRight <= blockLeft + 1) return 'left';\n if (image.x >= blockRight - 1) return 'right';\n return null;\n}\n\nfunction textLinesOf(block: DocBlock): readonly Line[] {\n if (block.kind === 'paragraph' || block.kind === 'heading' || block.kind === 'blockquote') {\n return block.lines;\n }\n if (block.kind === 'list') return block.items.flatMap(item => item.lines);\n if (block.kind === 'columns') {\n return block.columns.flatMap(col => col.blocks.flatMap(textLinesOf));\n }\n if (block.kind === 'table') return block.rows.flat().flatMap(cell => cell.lines);\n return [];\n}\n\nfunction imageTop(image: ImageItem): number {\n return image.y + image.renderHeight;\n}\n\nfunction blockTopOf(block: DocBlock): number {\n if (block.kind === 'image') return imageTop(block.image);\n if (block.kind === 'rule') return block.top;\n if (block.kind === 'table') {\n const firstCell = block.rows[0]?.find(cell => cell.lines.length > 0);\n return firstCell?.lines[0]?.y ?? 0;\n }\n if (block.kind === 'columns') {\n const tops = block.columns.flatMap(col => col.blocks.map(blockTopOf));\n return tops.length > 0 ? Math.max(...tops) : 0;\n }\n const lines = textLinesOf(block);\n return lines[0]?.y ?? 0;\n}\n\nfunction imageBlockFrom(image: ImageItem, pageIndex: number, float: '' | 'left' | 'right'): ImageBlock {\n return {\n kind: 'image',\n image,\n float,\n page: pageIndex,\n style: emptyStyle(),\n };\n}\n","import type { ImageItem } from '../pdf-parser';\nimport { safeLinkHref } from '../markup-safety';\nimport { sameStyle } from './readable-words';\nimport type {\n BlockAlign,\n BlockStyle,\n ColumnsBlock,\n DocBlock,\n DocModel,\n EdgeRule,\n FontMapping,\n HeadingBlock,\n ImageBlock,\n Line,\n ListBlock,\n PdfReadableOptions,\n RunStyle,\n TableBlock,\n TableCellModel,\n Word,\n} from './readable-types';\n\ninterface EmitContext {\n readonly fonts: Map<string, FontMapping>;\n readonly bodyFontSize: number;\n readonly inColumn?: boolean;\n /** The underline renders as a cell border instead of text decoration. */\n readonly suppressUnderline?: boolean;\n}\n\ninterface RunModel {\n readonly style: RunStyle;\n readonly text: string;\n /** Icon-sized image flowing inline; the run renders as an <img> then. */\n readonly image?: ImageItem;\n}\n\nexport function emitDocument(\n doc: DocModel,\n options: Required<PdfReadableOptions>,\n fonts: Map<string, FontMapping>,\n): { html: string; text: string } {\n const ctx: EmitContext = { fonts, bodyFontSize: doc.bodyFontSize };\n const htmlParts: string[] = [];\n const textParts: string[] = [];\n\n for (const page of doc.pages) {\n let pageHtml = page.blocks.map(block => emitBlock(block, ctx)).filter(Boolean);\n if (pageHtml.length === 0) continue;\n if (pageIsRtl(page.blocks)) {\n pageHtml = [`<div dir=\"rtl\">${pageHtml.join('\\n')}</div>`];\n }\n if (options.pageWrappers) {\n htmlParts.push(\n `<div style=\"max-width:${round(page.width)}pt;margin:0 auto\">${pageHtml.join('\\n')}</div>`);\n } else {\n htmlParts.push(pageHtml.join('\\n'));\n }\n collectPageText(page.blocks, textParts);\n }\n\n const separator = options.pageWrappers ? '\\n<hr>\\n' : '\\n';\n return {\n html: htmlParts.join(separator),\n text: textParts.join(' ').replaceAll(/\\s+/g, ' ').trim(),\n };\n}\n\n/**\n * RTL-majority pages anchor to the right edge: without a page-level\n * dir=\"rtl\" container every block falls back to the LTR left edge, which\n * mirrors the entire document (user-verified defect on Hebrew letters).\n */\nfunction pageIsRtl(blocks: readonly DocBlock[]): boolean {\n let rtl = 0;\n let total = 0;\n for (const block of blocks) {\n if (block.kind === 'image' || block.kind === 'rule') continue;\n total++;\n if (block.style.dir === 'rtl') rtl++;\n }\n return total > 0 && rtl * 2 > total;\n}\n\nfunction collectPageText(blocks: readonly DocBlock[], out: string[]): void {\n for (const block of blocks) {\n for (const line of blockLines(block)) {\n out.push(line.words.map(w => w.text).join(' '));\n }\n }\n}\n\nexport function blockLines(block: DocBlock): readonly Line[] {\n switch (block.kind) {\n case 'paragraph':\n case 'heading':\n case 'blockquote':\n return block.lines;\n case 'list':\n return block.items.flatMap(item => item.lines);\n case 'table':\n return block.rows.flatMap(row => row.flatMap(cell => cell.lines));\n case 'columns':\n return block.columns.flatMap(col => col.blocks.flatMap(blockLines));\n default:\n return [];\n }\n}\n\nfunction emitBlock(block: DocBlock, ctx: EmitContext): string {\n switch (block.kind) {\n case 'paragraph':\n return emitLinesBlock('p', block.lines, block.style, ctx, block.stacked ?? false);\n case 'heading':\n return emitHeading(block, ctx);\n case 'blockquote':\n return emitBlockquote(block.lines, block.style, ctx, block.stacked ?? false);\n case 'list':\n return emitList(block, ctx);\n case 'table':\n return emitTable(block, ctx);\n case 'image':\n return emitImage(block);\n case 'rule':\n return '<hr>';\n case 'columns':\n return emitColumns(block, ctx);\n default:\n return '';\n }\n}\n\n/**\n * Renders side-by-side column regions as one borderless table row. A table is\n * the layout primitive the rich-text sanitizer preserves reliably (floats are\n * unstable in contenteditable); cells are top-aligned with widths taken from\n * the detected column geometry.\n */\nfunction emitColumns(block: ColumnsBlock, ctx: EmitContext): string {\n const cellCtx: EmitContext = { ...ctx, inColumn: true };\n const cells = block.columns.map(column => {\n const inner = column.blocks.map(child => emitBlock(child, cellCtx)).filter(Boolean).join('');\n const width = Math.round(column.widthRatio * 1000) / 10;\n const cellStyle = styleAttr([\n ['vertical-align', 'top'],\n ['width', `${width}%`],\n ['padding', '0 6pt'],\n ['border', '0'],\n ['min-width', '0'],\n ['background', 'transparent'],\n ]);\n return `<td style=\"${cellStyle}\">${inner}</td>`;\n });\n // Explicit both ways: an RTL page container would otherwise reverse the\n // column order of a majority-LTR row (a URL | page-number footer).\n const dirAttr = block.style.dir === 'rtl' ? ' dir=\"rtl\"' : ' dir=\"ltr\"';\n const boxStyle = block.style.border ? `;border:${block.style.border}` : '';\n const fillStyle = block.style.background ? `;background:${block.style.background}` : '';\n let width = '100%';\n let anchor = '';\n if (block.panelRatio) {\n width = `${Math.round(block.panelRatio * 1000) / 10}%`;\n anchor = block.panelSide === 'right' ? ';margin-left:auto' : ';margin-right:auto';\n }\n const tall = block.panelMinHeight ? `;height:${round(block.panelMinHeight)}pt` : '';\n const topMargin = block.style.marginTop > 0 ? `${round(block.style.marginTop)}pt` : '0';\n const margins = `;margin-top:${topMargin};margin-bottom:0`;\n return `<table style=\"border-collapse:collapse;width:${width}${anchor}${tall}${boxStyle}${fillStyle}${margins}\"${dirAttr}><tr>${cells.join('')}</tr></table>`;\n}\n\nfunction emitHeading(block: HeadingBlock, ctx: EmitContext): string {\n return emitLinesBlock(`h${block.level}`, block.lines, block.style, ctx);\n}\n\nfunction emitBlockquote(\n lines: readonly Line[],\n style: BlockStyle,\n ctx: EmitContext,\n stacked = false,\n): string {\n const inner = emitLinesBlock('p', lines, { ...style, marginTop: 0 }, ctx, stacked);\n const attrs = attrString(styleAttr([['margin-top', ptOrEmpty(style.marginTop)]]), '');\n return `<blockquote${attrs}>${inner}</blockquote>`;\n}\n\nfunction emitLinesBlock(\n tag: string,\n lines: readonly Line[],\n style: BlockStyle,\n ctx: EmitContext,\n stacked = false,\n): string {\n if (lines.length === 0) return '';\n const dominant = dominantRunStyle(lines);\n const content = emitLineContents(lines, dominant, ctx, stacked || preserveLineBreaks(lines));\n const styleValue = styleAttr([\n ...blockStylePairs(style, ctx.inColumn ?? false),\n ...baseFontPairs(dominant, ctx),\n // A heading tag is browser-bold by default; the PDF's own weight wins.\n ['font-weight', tag.startsWith('h') && dominant && !dominant.bold ? 'normal' : ''],\n ]);\n return `<${tag}${attrString(styleValue, style.dir === 'rtl' ? 'rtl' : '')}>${content}</${tag}>`;\n}\n\nfunction emitList(block: ListBlock, ctx: EmitContext): string {\n const tag = block.ordered ? 'ol' : 'ul';\n const items = block.items.map(item => {\n const dominant = dominantRunStyle(item.lines);\n const content = emitLineContents(item.lines, dominant, ctx);\n const attrs = attrString(styleAttr(baseFontPairs(dominant, ctx)), '');\n if (block.task) {\n return `<li data-task data-checked=\"${item.checked ? 'true' : 'false'}\"${attrs}>` +\n `<input type=\"checkbox\"${item.checked ? ' checked' : ''}>${content}</li>`;\n }\n return `<li${attrs}>${content}</li>`;\n });\n const styleValue = styleAttr([['margin-top', ptOrEmpty(block.style.marginTop)]]);\n const listAttrs = block.task ? ' data-task-list' : '';\n return `<${tag}${listAttrs}${attrString(styleValue, block.style.dir === 'rtl' ? 'rtl' : '')}>` +\n `${items.join('')}</${tag}>`;\n}\n\nfunction emitTable(block: TableBlock, ctx: EmitContext): string {\n const cellBorder = tableCellBorder(block);\n const signature = block.rows.some(row => row.some(isSignatureSlotCell));\n const rows = block.rows.map((row, rowIdx) => {\n const cellTag = block.headerRow && rowIdx === 0 ? 'th' : 'td';\n const cells = row.map(cell => emitTableCell(cell, cellTag, cellBorder, signature, ctx));\n return `<tr>${cells.join('')}</tr>`;\n });\n const fullWidth = (block.spanRatio ?? 0) >= TABLE_FULL_SPAN_RATIO;\n // Width and margins are always concrete: a hosting stylesheet (the rich\n // text editor styles every table for editing UX) must not restyle layout.\n const tableStyle = `border-collapse:collapse;${styleAttr([\n ['margin-top', block.style.marginTop > 0 ? ptOrEmpty(block.style.marginTop) : '0'],\n ['margin-bottom', '0'],\n ['width', fullWidth ? '100%' : 'auto'],\n ])}`;\n return `<table style=\"${tableStyle}\"${block.style.dir === 'rtl' ? ' dir=\"rtl\"' : ''}>${rows.join('')}</table>`;\n}\n\n/** A cell whose every word carries a slot underline is a signature field: the\n * form drew a wide line under it, wider than the text itself. */\nfunction isSignatureSlotCell(cell: TableCellModel): boolean {\n const words = cell.lines.flatMap(line => line.words);\n return words.length > 0 && words.every(word => word.style.underline);\n}\n\n/**\n * In a signature table every field centres over its slot, with the underline\n * promoted from text decoration to a full-cell bottom border — the wide,\n * roomy line the form drew rather than a text-hugging one.\n */\nfunction emitTableCell(\n cell: TableCellModel,\n cellTag: string,\n cellBorder: string,\n signature: boolean,\n ctx: EmitContext,\n): string {\n const dominant = dominantRunStyle(cell.lines);\n const slot = signature && isSignatureSlotCell(cell);\n let inner = emitLineContents(cell.lines, dominant, slot ? { ...ctx, suppressUnderline: true } : ctx);\n if (slot && dominant) {\n const slotStyle = styleAttr([\n ['border-bottom', `1pt solid ${colorValue(dominant.color)}`],\n ['padding-bottom', '3pt'],\n ]);\n inner = `<div style=\"${slotStyle}\">${inner}</div>`;\n }\n const fill: Array<[string, string]> = cell.background\n ? [['background', cell.background]]\n : [];\n const styleValue = cellBorder + styleAttr([\n ['padding', signature ? '4pt 12pt' : '2pt 4pt'],\n ['text-align', signature ? 'center' : 'start'],\n ['min-width', '0'],\n ['background', cell.background ? '' : 'transparent'],\n ...fill,\n ...baseFontPairs(dominant, ctx),\n ]);\n return `<${cellTag} style=\"${styleValue}\">${inner}</${cellTag}>`;\n}\n\n/** A table spanning at least this share of its measure renders full width. */\nconst TABLE_FULL_SPAN_RATIO = 0.7;\n\n/**\n * Ruled tables keep their full grid. An unruled table gets light horizontal\n * row separators only when the PDF actually drew rules between its rows\n * (invoices, statements); without that evidence — a borderless form header,\n * a key/value layout — it stays borderless so it reads as text.\n */\nfunction tableCellBorder(block: TableBlock): string {\n if (block.ruled) return 'border:0.5pt solid #999;';\n if (block.rowRules) return 'border:0;border-bottom:0.5pt solid #e5e7eb;';\n return 'border:0;';\n}\n\nfunction emitImage(block: ImageBlock): string {\n const pairs: Array<[string, string]> = [\n ['width', `${round(block.image.renderWidth)}pt`],\n ['max-width', '100%'],\n ['height', 'auto'],\n ['margin-top', ptOrEmpty(block.style.marginTop)],\n ];\n if (block.float) {\n pairs.push(['float', block.float], ['margin', '4pt']);\n } else if (block.style.align) {\n // A standalone image is inline by default, so an RTL page container\n // right-anchors it regardless of where it sat on the page. Pin it to its\n // true side with a block box and auto margins.\n pairs.push(['display', 'block'], ...blockImageMargins(block.style.align));\n }\n return `<img src=\"${block.image.dataUrl}\" alt=\"Embedded image\" style=\"${styleAttr(pairs)}\">`;\n}\n\nfunction blockImageMargins(align: BlockAlign): Array<[string, string]> {\n if (align === 'right') return [['margin-left', 'auto']];\n if (align === 'center') return [['margin-left', 'auto'], ['margin-right', 'auto']];\n return [['margin-right', 'auto']];\n}\n\n/** Joins a block's lines into styled runs; hyphen-broken lines join seamlessly. */\nfunction emitLineContents(\n lines: readonly Line[],\n dominant: RunStyle | null,\n ctx: EmitContext,\n preserveBreaks = false,\n): string {\n if (preserveBreaks) {\n return lines.map(line => {\n const lineRuns: RunModel[] = [];\n appendLineRuns(lineRuns, line.words);\n return lineRuns.map(run => emitRun(run, dominant, ctx)).join('');\n }).join('\\n<br>');\n }\n const runs: RunModel[] = [];\n for (let i = 0; i < lines.length; i++) {\n if (i > 0) appendLineJoin(runs, lines[i - 1]);\n appendLineRuns(runs, lines[i].words);\n }\n return runs.map(run => emitRun(run, dominant, ctx)).join('');\n}\n\n/**\n * A multi-line block whose lines mostly stop short of the wrap edge is a\n * stack of independent lines (key/value list, address, signature slots), not\n * flowing prose — its original line breaks carry meaning and are preserved.\n * Genuine paragraphs wrap because each line but the last fills the measure, so\n * most of them reach the fill edge and this returns false.\n */\nexport function preserveLineBreaks(lines: readonly Line[]): boolean {\n if (lines.length < 2) return false;\n const sizes = lines.map(l => l.fontSize).sort((a, b) => a - b);\n const tolerance = (sizes[Math.floor(sizes.length / 2)] ?? 12) * 2.5;\n const lefts = lines.map(l => l.x);\n const rights = lines.map(l => l.endX);\n const spreadLeft = Math.max(...lefts) - Math.min(...lefts);\n const spreadRight = Math.max(...rights) - Math.min(...rights);\n // The aligned edge barely moves; the opposite (higher-spread) edge is where\n // prose wraps. Right-aligned LTR and RTL both wrap on the left.\n const wrapsRight = spreadRight >= spreadLeft;\n const fillEdge = wrapsRight ? Math.max(...rights) : Math.min(...lefts);\n let reaching = 0;\n for (let i = 0; i < lines.length - 1; i++) {\n const line = lines[i];\n const reaches = wrapsRight\n ? line.endX >= fillEdge - tolerance\n : line.x <= fillEdge + tolerance;\n if (reaches) reaching++;\n }\n return reaching * 2 < lines.length - 1;\n}\n\nfunction appendLineJoin(runs: RunModel[], previousLine: Line): void {\n const last = runs.at(-1);\n if (!last) return;\n if (last.image) {\n runs.push({ style: last.style, text: ' ' });\n return;\n }\n if (last.text.endsWith('-') && previousLine.dir === 'ltr') {\n runs[runs.length - 1] = { style: last.style, text: last.text.slice(0, -1) };\n return;\n }\n runs[runs.length - 1] = { style: last.style, text: `${last.text} ` };\n}\n\nfunction appendLineRuns(runs: RunModel[], words: readonly Word[]): void {\n for (let i = 0; i < words.length; i++) {\n const word = words[i];\n const separator = i > 0 && word.spaceBefore ? ' ' : '';\n const last = runs.at(-1);\n if (word.image) {\n runs.push({ style: word.style, text: '', image: word.image });\n } else if (last && !last.image && sameStyle(last.style, word.style)) {\n runs[runs.length - 1] = { style: last.style, text: last.text + separator + word.text };\n } else {\n runs.push({ style: word.style, text: separator + word.text });\n }\n }\n}\n\nfunction emitRun(run: RunModel, dominant: RunStyle | null, ctx: EmitContext): string {\n if (run.image) {\n const size = styleAttr([\n ['width', `${round(run.image.renderWidth)}pt`],\n ['height', `${round(run.image.renderHeight)}pt`],\n ['vertical-align', 'baseline'],\n ]);\n return ` <img src=\"${run.image.dataUrl}\" alt=\"\" style=\"${size}\">`;\n }\n let html = escapeHtml(run.text);\n const style = run.style;\n const spanStyle = runDeltaPairs(style, dominant, ctx);\n if (spanStyle.some(([, v]) => v !== '')) html = `<span style=\"${styleAttr(spanStyle)}\">${html}</span>`;\n if (style.underline && !ctx.suppressUnderline) html = `<u>${html}</u>`;\n if (style.italic) html = `<em>${html}</em>`;\n if (style.bold) html = `<strong>${html}</strong>`;\n if (style.baselineShift === 'sup') html = `<sup>${html}</sup>`;\n if (style.baselineShift === 'sub') html = `<sub>${html}</sub>`;\n const href = style.link ? safeLinkHref(style.link) : undefined;\n if (href !== undefined) html = `<a href=\"${escapeHtml(href)}\" target=\"_blank\" rel=\"noopener\">${html}</a>`;\n return html;\n}\n\nfunction dominantRunStyle(lines: readonly Line[]): RunStyle | null {\n const weights = new Map<string, { style: RunStyle; weight: number }>();\n for (const line of lines) {\n for (const word of line.words) {\n const key = runStyleKey(word.style);\n const entry = weights.get(key);\n if (entry) {\n entry.weight += word.text.length;\n } else {\n weights.set(key, { style: word.style, weight: word.text.length });\n }\n }\n }\n let best: { style: RunStyle; weight: number } | null = null;\n for (const entry of weights.values()) {\n if (!best || entry.weight > best.weight) best = entry;\n }\n return best?.style ?? null;\n}\n\nfunction runStyleKey(style: RunStyle): string {\n return [style.fontName, style.fontSize, style.color].join('|');\n}\n\nfunction baseFontPairs(dominant: RunStyle | null, ctx: EmitContext): Array<[string, string]> {\n if (!dominant) return [];\n return [\n ['font-family', fontFamilyValue(dominant, ctx)],\n ['font-size', `${round(dominant.fontSize)}pt`],\n ['color', colorValue(dominant.color)],\n ['letter-spacing', dominant.letterSpacing > 0 ? `${dominant.letterSpacing}pt` : ''],\n ];\n}\n\nfunction runDeltaPairs(\n style: RunStyle,\n dominant: RunStyle | null,\n ctx: EmitContext,\n): Array<[string, string]> {\n const pairs: Array<[string, string]> = [];\n if (style.fontName !== dominant?.fontName) {\n pairs.push(['font-family', fontFamilyValue(style, ctx)]);\n }\n if (!dominant || Math.abs(style.fontSize - dominant.fontSize) >= 0.25) {\n pairs.push(['font-size', `${round(style.fontSize)}pt`]);\n }\n // Bold/italic/link runs always carry their colour: a hosting stylesheet\n // (the editor's prose styles) recolours <strong>/<em>/<a> descendants,\n // which beats a colour merely inherited from the block.\n const hostRestyled = style.bold || style.italic || style.link !== '';\n if (style.color !== dominant?.color || hostRestyled) {\n pairs.push(['color', colorValue(style.color)]);\n }\n if (style.letterSpacing > 0 && style.letterSpacing !== dominant?.letterSpacing) {\n pairs.push(['letter-spacing', `${style.letterSpacing}pt`]);\n }\n return pairs;\n}\n\n/**\n * The border/padding pairs for the rules a PDF drew around a block: the bar\n * beside a pull-quote and the slot rules a form draws under (or over) a field\n * label. The leading rule sits outside the text, so its width and gap come off\n * the block's indent and go back on as padding — the text stays exactly where\n * the PDF put it and the rule lands where the PDF drew it.\n */\nfunction edgeRulePairs(style: BlockStyle, startSide: string): Array<[string, string]> {\n const pairs: Array<[string, string]> = [];\n const add = (side: string, rule: EdgeRule | undefined): void => {\n if (!rule) return;\n pairs.push(\n [`border-${side}`, `${round(rule.widthPt)}pt solid ${rule.color}`],\n [`padding-${side}`, `${round(rule.gapPt)}pt`],\n );\n };\n add(startSide, style.ruleStart);\n add('bottom', style.ruleUnder);\n add('top', style.ruleOver);\n return pairs;\n}\n\nfunction blockStylePairs(style: BlockStyle, inColumn = false): Array<[string, string]> {\n const marginTop = inColumn && style.marginTop <= 0 ? '0' : ptOrEmpty(style.marginTop);\n const boxed = style.background !== '' || style.border !== '';\n const rule = style.ruleStart;\n const startSide = style.dir === 'rtl' ? 'right' : 'left';\n const indent = rule\n ? Math.max(0, style.indentStart - rule.widthPt - rule.gapPt)\n : style.indentStart;\n const pairs: Array<[string, string]> = [\n ['text-align', style.align],\n [`margin-${startSide}`, ptOrEmpty(indent)],\n ...edgeRulePairs(style, startSide),\n ['text-indent', ptOrEmpty(style.textIndent)],\n ['line-height', style.lineHeight > 0 ? String(style.lineHeight) : ''],\n ['margin-top', marginTop],\n ['background', style.background],\n ['border', style.border],\n ['display', style.border ? 'inline-block' : ''],\n ['padding', boxed ? '4pt 8pt' : ''],\n ['border-radius', boxed ? '3pt' : ''],\n ['max-width', style.maxWidth ? `${round(style.maxWidth)}pt` : ''],\n ];\n if (inColumn) pairs.push(['margin-bottom', '0']);\n return pairs;\n}\n\nfunction fontFamilyValue(style: RunStyle, ctx: EmitContext): string {\n const mapping = ctx.fonts.get(style.fontName);\n const family = style.fontFamily || mapping?.fallback || '';\n const parts: string[] = [];\n if (family) parts.push(`'${sanitizeFamilyName(family)}'`);\n parts.push(genericFamilyOf(family || style.fontName));\n return parts.length > 1 ? parts.join(',') : '';\n}\n\nfunction sanitizeFamilyName(family: string): string {\n return family.replaceAll(/['\"\\\\;]/g, '');\n}\n\nconst SERIF_HINT = /times|serif|georgia|garamond|book|roman|minion|caslon|palatino|cambria/i;\nconst MONO_HINT = /courier|mono|consolas|menlo/i;\n\nfunction genericFamilyOf(name: string): string {\n if (MONO_HINT.test(name)) return 'monospace';\n if (SERIF_HINT.test(name)) return 'serif';\n return 'sans-serif';\n}\n\nfunction colorValue(color: string): string {\n const normalized = color.toLowerCase();\n return normalized === '#000000' || normalized === '#000' ? '' : color;\n}\n\n/**\n * The declarations as the VALUE of a double-quoted `style` attribute. Escaped\n * here, at the one place every style attribute is built, because a font name\n * can hold `';…` (character references without their semicolon), which a\n * browser decodes back into a quote and a `;` and so into a further declaration.\n */\nfunction styleAttr(pairs: ReadonlyArray<readonly [string, string]>): string {\n return escapeHtml(pairs\n .filter(([, value]) => value !== '')\n .map(([prop, value]) => `${prop}:${value}`)\n .join(';'));\n}\n\nfunction attrString(styleValue: string, dir: string): string {\n const stylePart = styleValue ? ` style=\"${styleValue}\"` : '';\n const dirPart = dir ? ` dir=\"${dir}\"` : '';\n return `${stylePart}${dirPart}`;\n}\n\nfunction ptOrEmpty(value: number): string {\n return value > 0 ? `${round(value)}pt` : '';\n}\n\nfunction round(value: number): number {\n return Math.round(value * 100) / 100;\n}\n\nexport function escapeHtml(str: string): string {\n return str\n .replaceAll('&', '&')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('\"', '"');\n}\n","import {\n PdfReader,\n type PdfObject,\n type TextItem,\n deduplicateTextItems,\n extractPageContent,\n parseStructureTree,\n} from '../pdf-parser';\nimport { visitOnce } from '../limits';\nimport type { FontRegistry } from '../pdf-pixel-perfect';\nimport type { ExtractedDocument, FontMapping, PageExtract } from './readable-types';\n\nconst MAX_RESOURCE_DEPTH = 3;\n\n/**\n * Extracts text/image/path/annotation data for every page and registers all\n * reachable fonts with the given registry (page resources plus nested form\n * XObject resources).\n *\n * The font map is keyed by resource name document-wide (inherited from\n * FontRegistry's `entriesByResourceName`): if two pages bind the same name\n * (e.g. `/F1`) to different font objects, the first binding wins for family\n * lookup. `TextItem.fontName` falls back to BaseFont matching in\n * `FontRegistry.getEntry`, which limits the practical impact.\n */\nexport function extractDocument(\n reader: PdfReader,\n pages: PdfObject[],\n registry: FontRegistry | null,\n): ExtractedDocument {\n const structure = parseStructureTree(reader, pages);\n const fonts = new Map<string, FontMapping>();\n const pageExtracts: PageExtract[] = [];\n\n for (let i = 0; i < pages.length; i++) {\n const extract = extractSinglePage(reader, pages[i], i);\n if (extract) pageExtracts.push(extract);\n if (registry) registerPageFonts(reader, pages[i], registry, fonts);\n }\n\n if (registry) correctItemAdvances(pageExtracts, registry);\n return { pages: pageExtracts, structure, fonts };\n}\n\n/**\n * Rewrites each glyph run's right edge from the embedded font program's real\n * advances instead of the PDF `/Widths` array. Subset fonts frequently ship a\n * `/Widths` (or `defaultWidth`) that overshoots the true advance, so the\n * `endX` from {@link extractPageContent} runs long and collapses the small\n * positive inter-word gaps into overlaps — words merge. The registry's\n * advances (the same metrics the pixel-perfect renderer positions with)\n * restore accurate gaps. Runs whose glyphs are not all known to the registry\n * keep their original `endX`.\n */\nfunction correctItemAdvances(pages: readonly PageExtract[], registry: GlyphAdvanceSource): void {\n for (const page of pages) {\n for (const item of page.items) {\n const width = embeddedRunWidth(item, registry);\n if (width !== null) item.endX = item.x + width;\n }\n }\n}\n\n/** The one {@link FontRegistry} capability the advance correction needs. */\nexport interface GlyphAdvanceSource {\n getGlyphAdvance(fontName: string, code: number, unicode?: string): number | null;\n}\n\n/** Width in points of a glyph run from the embedded font advances, or null when\n * any glyph is unknown to the registry (leave the original `endX`). */\nexport function embeddedRunWidth(item: TextItem, registry: GlyphAdvanceSource): number | null {\n let advance = 0;\n let spaces = 0;\n for (const ch of item.text) {\n const code = ch === ' ' ? 32 : -1;\n const glyph = registry.getGlyphAdvance(item.fontName, code, ch);\n if (glyph === null) return null;\n advance += glyph;\n if (ch === ' ') spaces++;\n }\n const scale = item.horizontalScaling > 0 ? item.horizontalScaling / 100 : 1;\n const glyphSpan = (advance / 1000) * item.fontSize;\n const spacing = [...item.text].length * item.charSpacing + spaces * item.wordSpacing;\n return (glyphSpan + spacing) * scale;\n}\n\nfunction extractSinglePage(\n reader: PdfReader,\n pageObj: PdfObject,\n index: number,\n): PageExtract | null {\n try {\n const { textItems, imageItems, pathRects, pageWidth, pageHeight, annotations } =\n extractPageContent(reader, pageObj, index);\n return {\n index,\n width: pageWidth,\n height: pageHeight,\n items: deduplicateTextItems(textItems),\n images: imageItems,\n rects: pathRects,\n annotations,\n };\n } catch {\n return null;\n }\n}\n\nfunction registerPageFonts(\n reader: PdfReader,\n pageObj: PdfObject,\n registry: FontRegistry,\n fonts: Map<string, FontMapping>,\n): void {\n try {\n const pageDict = reader.getDict(pageObj);\n const resources = pageDict['Resources'] ? reader.getDict(pageDict['Resources']) : {};\n registerResourceFonts(reader, resources, registry, fonts, { depth: 0, seen: new Set() });\n } catch {\n // A malformed resource dict must not abort the page's text extraction.\n }\n}\n\n/**\n * Where the walk over form XObjects stands. `seen` holds the resource\n * dictionaries already registered, so a form reachable by many paths is\n * registered once instead of once per path.\n */\ninterface ResourceWalk {\n readonly depth: number;\n readonly seen: Set<Record<string, PdfObject>>;\n}\n\nfunction registerResourceFonts(\n reader: PdfReader,\n resources: Record<string, PdfObject>,\n registry: FontRegistry,\n fonts: Map<string, FontMapping>,\n walk: ResourceWalk,\n): void {\n if (walk.depth > MAX_RESOURCE_DEPTH || !visitOnce(walk.seen, resources)) return;\n registerFontDict(reader, resources, registry, fonts);\n descendIntoXObjects(reader, resources, registry, fonts, walk);\n}\n\nfunction registerFontDict(\n reader: PdfReader,\n resources: Record<string, PdfObject>,\n registry: FontRegistry,\n fonts: Map<string, FontMapping>,\n): void {\n if (!resources['Font']) return;\n const fontDict = reader.getDict(resources['Font']);\n for (const [name, ref] of Object.entries(fontDict)) {\n if (fonts.has(name)) continue;\n registerSingleFont(reader, name, ref, registry, fonts);\n }\n}\n\nfunction registerSingleFont(\n reader: PdfReader,\n name: string,\n ref: PdfObject,\n registry: FontRegistry,\n fonts: Map<string, FontMapping>,\n): void {\n try {\n const entry = registry.registerFont(reader, name, ref);\n const resolved = registry.cssFamilyFor(name);\n if (!resolved) return;\n fonts.set(name, {\n family: resolved.embedded ? resolved.family : '',\n fallback: entry.familyName || '',\n embedded: resolved.embedded,\n });\n } catch {\n // A single broken font program must not abort the import.\n }\n}\n\nfunction descendIntoXObjects(\n reader: PdfReader,\n resources: Record<string, PdfObject>,\n registry: FontRegistry,\n fonts: Map<string, FontMapping>,\n walk: ResourceWalk,\n): void {\n if (!resources['XObject']) return;\n const xObjects = reader.getDict(resources['XObject']);\n for (const ref of Object.values(xObjects)) {\n const nested = resolveXObjectResources(reader, ref);\n if (nested) registerResourceFonts(reader, nested, registry, fonts, { depth: walk.depth + 1, seen: walk.seen });\n }\n}\n\nfunction resolveXObjectResources(\n reader: PdfReader,\n ref: PdfObject,\n): Record<string, PdfObject> | null {\n try {\n const dict = reader.getDict(ref);\n return dict['Resources'] ? reader.getDict(dict['Resources']) : null;\n } catch {\n return null;\n }\n}\n","import type { TextItem, TextLine } from '../pdf-parser';\nimport type { Line, Word } from './readable-types';\nimport { buildWords, detectDirection, toLogicalOrder, type WordBuildContext } from './readable-words';\n\nconst MIN_Y_TOLERANCE = 2;\nconst Y_TOLERANCE_EM = 0.45;\n\n/**\n * Clusters one page's text fragments into visual baseline lines\n * (top-to-bottom, fragments left-to-right). The returned shape is the\n * parser's TextLine so RTL fixes can be applied in place before word building.\n */\nexport function clusterIntoLineItems(items: readonly TextItem[]): TextLine[] {\n if (items.length === 0) return [];\n const sorted = [...items].sort((a, b) =>\n Math.abs(a.y - b.y) > lineTolerance(a, b) ? b.y - a.y : a.x - b.x);\n\n const clusters: TextLine[] = [];\n for (const item of sorted) {\n const line = clusters.at(-1);\n if (line && belongsToLine(item, line)) {\n line.items.push(item);\n line.minX = Math.min(line.minX, item.x);\n } else {\n clusters.push({ items: [item], y: item.y, minX: item.x });\n }\n }\n for (const cluster of clusters) cluster.items.sort((a, b) => a.x - b.x);\n return clusters;\n}\n\nfunction belongsToLine(item: TextItem, line: TextLine): boolean {\n const anchor = dominantItem(line.items);\n return Math.abs(item.y - line.y) <= lineTolerance(item, anchor);\n}\n\nfunction lineTolerance(a: TextItem, b: TextItem): number {\n return Math.max(MIN_Y_TOLERANCE, Math.max(a.fontSize, b.fontSize) * Y_TOLERANCE_EM);\n}\n\nfunction dominantItem(items: readonly TextItem[]): TextItem {\n let best = items[0];\n for (const item of items) {\n if (item.fontSize > best.fontSize) best = item;\n }\n return best;\n}\n\n/**\n * Converts baseline clusters into the readable Line model (logical word\n * order). Clusters containing column-sized visual gaps are split into one\n * Line per segment so the XY-cut can see inter-column valleys.\n */\nexport function linesFromClusters(\n clusters: readonly TextLine[],\n page: number,\n ctx: WordBuildContext,\n): Line[] {\n const lines: Line[] = [];\n for (const cluster of clusters) {\n lines.push(...linesFromCluster(cluster, page, ctx));\n }\n return lines;\n}\n\nfunction linesFromCluster(cluster: TextLine, page: number, ctx: WordBuildContext): Line[] {\n const visualWords = buildWords(cluster.items, ctx);\n const segments = splitAtHardBreaks(visualWords);\n bindValuesToBareLabels(segments);\n return segments\n .filter(segment => segment.length > 0)\n .map(segment => lineFromSegment(segment, cluster.y, page));\n}\n\nconst RTL_CHAR_RE = /[\\u0590-\\u08FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFF]/u;\nconst LTR_STRONG_RE = /[\\dA-Za-z]/u;\n\n/** Digits/Latin with no RTL script - a field value, not label text. */\nfunction isLtrValueText(text: string): boolean {\n return text !== '' && !RTL_CHAR_RE.test(text) && LTR_STRONG_RE.test(text);\n}\n\n/**\n * An RTL form aligns each field's value in a column LEFT of its label, so the\n * label-to-value gap can exceed the value-to-next-field gap and hard-break\n * segmentation strands the value in the neighbouring field's segment (\"31.00\"\n * grouped with \"מין: ז\", leaving \"גיל:\" value-less). A bare colon-terminated\n * RTL label segment therefore pulls the LTR value from the visually-right end\n * of the segment to its left — the value it reads out to.\n */\nfunction bindValuesToBareLabels(segments: Word[][]): void {\n for (let i = 0; i + 1 < segments.length; i++) {\n const label = segments[i + 1];\n if (!isBareRtlColonLabel(label)) continue;\n const donor = segments[i];\n const value = donor.at(-1);\n if (!value || !isLtrValueText(value.text.trim())) continue;\n donor.pop();\n value.spaceBefore = true;\n label.unshift(value);\n }\n}\n\n/** A segment of RTL text carrying a field colon and no value — a label still\n * waiting for its value. (Words are in visual order here, so the colon's\n * position is not checked, only its presence.) */\nfunction isBareRtlColonLabel(segment: readonly Word[]): boolean {\n if (segment.length === 0) return false;\n const text = segment.map(w => w.text).join(' ').trim();\n return RTL_CHAR_RE.test(text) && text.includes(':') &&\n segment.every(w => !isLtrValueText(w.text.trim()));\n}\n\nfunction splitAtHardBreaks(words: readonly Word[]): Word[][] {\n const segments: Word[][] = [];\n for (const word of words) {\n const current = segments.at(-1);\n if (!current || word.hardBreak) {\n segments.push([word]);\n } else {\n current.push(word);\n }\n }\n return segments;\n}\n\nfunction lineFromSegment(segment: Word[], y: number, page: number): Line {\n const dir = detectDirection(segment);\n const words = toLogicalOrder(segment, dir);\n return {\n words,\n x: Math.min(...segment.map(w => w.x)),\n endX: Math.max(...segment.map(w => w.endX)),\n y,\n fontSize: dominantSegmentFontSize(segment),\n dir,\n page,\n };\n}\n\nfunction dominantSegmentFontSize(words: readonly Word[]): number {\n const weights = new Map<number, number>();\n for (const word of words) {\n const size = Math.round(word.fontSize * 2) / 2;\n weights.set(size, (weights.get(size) ?? 0) + word.text.length);\n }\n let bestSize = words[0].fontSize;\n let bestWeight = -1;\n for (const [size, weight] of weights) {\n if (weight > bestWeight) {\n bestWeight = weight;\n bestSize = size;\n }\n }\n return bestSize;\n}\n","import type { Line } from './readable-types';\n\nconst MARGIN_FRACTION = 0.08;\nconst MAX_REPEAT_TEXT_LENGTH = 80;\nconst REPEAT_PAGE_RATIO = 0.6;\nconst MIN_PAGES_FOR_REPEATS = 3;\nconst Y_BUCKET = 4;\n\n/**\n * Removes running headers, footers and page numbers: margin-zone lines whose\n * digit-masked text repeats at the same vertical position on most pages,\n * plus bare page-number lines. Returns a filtered copy per page.\n */\nexport function suppressRepeatedLines(\n pagesLines: readonly Line[][],\n pageHeights: readonly number[],\n): Line[][] {\n const pageCount = pagesLines.length;\n const repeatedKeys = pageCount >= MIN_PAGES_FOR_REPEATS\n ? findRepeatedKeys(pagesLines, pageHeights)\n : new Set<string>();\n\n return pagesLines.map((lines, pageIdx) => lines.filter(line => {\n if (!inMarginZone(line, pageHeights[pageIdx] ?? 0)) return true;\n if (pageCount >= 2 && isBarePageNumber(line)) return false;\n return !repeatedKeys.has(repeatKey(line));\n }));\n}\n\nfunction findRepeatedKeys(\n pagesLines: readonly Line[][],\n pageHeights: readonly number[],\n): Set<string> {\n const pagesByKey = new Map<string, Set<number>>();\n for (let pageIdx = 0; pageIdx < pagesLines.length; pageIdx++) {\n for (const line of pagesLines[pageIdx]) {\n if (!inMarginZone(line, pageHeights[pageIdx] ?? 0)) continue;\n const key = repeatKey(line);\n const pages = pagesByKey.get(key) ?? new Set<number>();\n pages.add(pageIdx);\n pagesByKey.set(key, pages);\n }\n }\n const threshold = Math.max(MIN_PAGES_FOR_REPEATS, Math.ceil(pagesLines.length * REPEAT_PAGE_RATIO));\n const repeated = new Set<string>();\n for (const [key, pages] of pagesByKey) {\n if (pages.size >= threshold) repeated.add(key);\n }\n return repeated;\n}\n\nfunction inMarginZone(line: Line, pageHeight: number): boolean {\n if (pageHeight <= 0) return false;\n if (maskedText(line).length > MAX_REPEAT_TEXT_LENGTH) return false;\n return line.y >= pageHeight * (1 - MARGIN_FRACTION) || line.y <= pageHeight * MARGIN_FRACTION;\n}\n\nfunction repeatKey(line: Line): string {\n return `${Math.round(line.y / Y_BUCKET)}|${maskedText(line)}`;\n}\n\nfunction maskedText(line: Line): string {\n return line.words.map(w => w.text).join(' ')\n .toLowerCase()\n .replaceAll(/\\d+/g, '#')\n .replaceAll(/\\s+/g, ' ')\n .trim();\n}\n\nfunction isBarePageNumber(line: Line): boolean {\n const text = line.words.map(w => w.text).join(' ').trim();\n return /^[-–—]?\\s*\\d{1,4}\\s*[-–—]?$/.test(text) ||\n /^page\\s+\\d{1,4}(\\s+of\\s+\\d{1,4})?$/i.test(text);\n}\n","import { DEFAULT_PARSER_LIMITS, type ParserLimits } from '../limits';\nimport { PdfReader, applyRtlWordFixes } from '../pdf-parser';\nimport { FontRegistry } from '../pdf-pixel-perfect';\nimport { buildPageBlocks } from './readable-blocks';\nimport { assignHeadingLevels, type ClassifyContext } from './readable-classify';\nimport { emitDocument } from './readable-emit';\nimport { extractDocument } from './readable-extract';\nimport { clusterIntoLineItems, linesFromClusters } from './readable-lines';\nimport { suppressRepeatedLines } from './readable-repeats';\nimport { mergeCrossPageParagraphs } from './readable-styles';\nimport type { WordBuildContext } from './readable-words';\nimport type {\n DocModel,\n ExtractedDocument,\n PageExtract,\n PageModel,\n PdfReadableOptions,\n PdfReadableResult,\n} from './readable-types';\n\nexport type { PdfReadableOptions, PdfReadableResult } from './readable-types';\n\nlet importCounter = 0;\n\n/**\n * Converts a PDF into clean, flowing, semantic HTML that visually resembles\n * the original document (fonts, colors, alignment, spacing) without absolute\n * positioning. The returned `fontFaceCss` must be added to the host document\n * (e.g. a `<style>` in `<head>`) for embedded fonts to render.\n * Input is untrusted; structures exceeding internal limits are skipped.\n */\nexport async function parsePdfReadable(\n buffer: ArrayBuffer,\n options?: PdfReadableOptions,\n limits: ParserLimits = DEFAULT_PARSER_LIMITS,\n): Promise<PdfReadableResult> {\n const opts = normalizeOptions(options);\n const reader = createValidatedReader(buffer, limits);\n const pages = reader.getPages();\n if (pages.length === 0) {\n throw new Error('PDF contains no pages.');\n }\n\n const registry = opts.embedFonts ? new FontRegistry(opts.fontFamilyPrefix) : null;\n const extracted = extractDocument(reader, pages, registry);\n const doc = buildDocModel(extracted, registry, opts);\n\n if (isImageOnly(doc, extracted)) {\n return emitImageOnly(extracted, opts);\n }\n if (!hasAnyText(doc)) {\n throw new Error('No readable content found in PDF.');\n }\n\n const { html, text } = emitDocument(doc, opts, extracted.fonts);\n return {\n html,\n fontFaceCss: registry?.dumpAllFontFaceCss() ?? '',\n text,\n imageOnly: false,\n pageCount: pages.length,\n pageWidthPt: Math.max(0, ...doc.pages.map(page => page.width)),\n };\n}\n\nfunction normalizeOptions(options?: PdfReadableOptions): Required<PdfReadableOptions> {\n importCounter++;\n return {\n embedFonts: options?.embedFonts ?? true,\n includeImages: options?.includeImages ?? true,\n pageWrappers: options?.pageWrappers ?? false,\n fontFamilyPrefix: options?.fontFamilyPrefix ?? `pdf${importCounter.toString(36)}-`,\n };\n}\n\nfunction createValidatedReader(buffer: ArrayBuffer, limits: ParserLimits): PdfReader {\n const header = new Uint8Array(buffer, 0, Math.min(5, buffer.byteLength));\n const isPdf = header.length === 5 &&\n header[0] === 0x25 && header[1] === 0x50 && header[2] === 0x44 &&\n header[3] === 0x46 && header[4] === 0x2D;\n if (!isPdf) {\n throw new Error('Not a valid PDF file.');\n }\n const reader = new PdfReader(buffer, limits);\n try {\n reader.parse();\n } catch {\n throw new Error('Unable to read this PDF. It may be corrupted or use an unsupported format.');\n }\n if (reader.isEncrypted()) {\n throw new Error('Encrypted PDFs are not supported.');\n }\n return reader;\n}\n\nfunction buildDocModel(\n extracted: ExtractedDocument,\n registry: FontRegistry | null,\n opts: Required<PdfReadableOptions>,\n): DocModel {\n const prepared = extracted.pages.map(page => ({\n page,\n clusters: clusterIntoLineItems(page.items),\n ctx: {\n annotations: page.annotations,\n spaceAdvance: (fontName: string) =>\n registry?.getDeclaredAdvance(fontName, ' ') ??\n registry?.getGlyphAdvance(fontName, 32, ' ') ?? null,\n } satisfies WordBuildContext,\n }));\n applyRtlWordFixes(prepared.flatMap(entry => entry.clusters));\n\n const pagesLines = prepared.map(({ page, clusters, ctx }) =>\n linesFromClusters(clusters, page.index, ctx));\n const filteredLines = suppressRepeatedLines(\n pagesLines, extracted.pages.map(page => page.height));\n\n const bodyFontSize = detectBodyFontSize(extracted.pages);\n const classifyCtx: Omit<ClassifyContext, 'pageBounds'> = {\n bodyFontSize,\n bodyLeading: bodyFontSize * 1.2,\n structure: extracted.structure,\n };\n const pageModels: PageModel[] = prepared.map(({ page }, idx) => ({\n index: page.index,\n width: page.width,\n height: page.height,\n blocks: buildPageBlocks(filteredLines[idx], page, opts.includeImages, classifyCtx),\n }));\n mergeCrossPageParagraphs(pageModels);\n assignHeadingLevels(pageModels, extracted.structure.hasStructure);\n\n return { pages: pageModels, bodyFontSize };\n}\n\nfunction detectBodyFontSize(pages: readonly PageExtract[]): number {\n const weights = new Map<number, number>();\n for (const page of pages) {\n for (const item of page.items) {\n const size = Math.round(item.fontSize * 2) / 2;\n weights.set(size, (weights.get(size) ?? 0) + item.text.length);\n }\n }\n let bodySize = 12;\n let bestWeight = 0;\n for (const [size, weight] of weights) {\n if (weight > bestWeight) {\n bestWeight = weight;\n bodySize = size;\n }\n }\n return bodySize;\n}\n\nfunction hasAnyText(doc: DocModel): boolean {\n return doc.pages.some(page => page.blocks.some(block => block.kind !== 'image' && block.kind !== 'rule'));\n}\n\nfunction isImageOnly(doc: DocModel, extracted: ExtractedDocument): boolean {\n return !hasAnyText(doc) && extracted.pages.some(page => page.images.length > 0);\n}\n\nfunction emitImageOnly(\n extracted: ExtractedDocument,\n opts: Required<PdfReadableOptions>,\n): PdfReadableResult {\n const images = extracted.pages\n .flatMap(page => page.images)\n .sort((a, b) => a.page === b.page ? b.y - a.y : a.page - b.page);\n const html = opts.includeImages\n ? images\n .map(img => `<img src=\"${img.dataUrl}\" alt=\"Page image\" style=\"width:${Math.round(img.renderWidth * 100) / 100}pt;max-width:100%;height:auto\">`)\n .join('\\n')\n : '';\n return {\n html,\n fontFaceCss: '',\n text: '',\n imageOnly: true,\n pageCount: extracted.pages.length,\n pageWidthPt: Math.max(0, ...extracted.pages.map(page => page.width)),\n };\n}\n"],"names":["PDF_DOC_ENCODING","decodeTwoByteChar","isValidDecodedChar","VALID_DECODED_CHAR_RANGES","rgbToHex","grayToHex","multiplyMatrix","CONTENT_ESCAPE_MAP","tokenizeEscapeSequence","tokenizeLiteralString","tokenizeHexString","skipComment","tokenizeAngleBracket","tokenizeClosingAngle","tokenizeName","tokenizeGenericToken","tokenizeNextElement","tokenizeContentStream","transformPoint","escapeHtml","detectBodyFontSize","writeI16","round","MARGIN_FRACTION","groupByBaseline","blockLines"],"mappings":"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C,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IAC/G,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACjH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACnH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACnH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACnH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACnH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACnH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACnH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACnH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACnH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACnH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACnH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACnH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACnH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;CACtH;AAED,MAAM,kBAAkB,GAAgB;IACpC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACtH,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACvH,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACvH,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACxH,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IAC3H,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;AAC3H,IAAA,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;CAC/F;AAED,MAAM,gBAAgB,GAAgB;IAClC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IAChH,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IAC/G,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACjH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC;IACnH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IACvH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IACvH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IACvH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IACvH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IACvH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IACvH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IACvH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IACvH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IACvH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IACvH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IACvH,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;CAC1H;AAED,MAAM,kBAAkB,GAAgB;IACpC,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IAC1H,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IAC3H,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IAC3H,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IAC5H,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,EAAC,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC;IAC/H,EAAC,MAAM,EAAC,IAA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QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;IAC7D,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,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"}
|