@weasel-js/pdf 0.0.0-stage → 1.11.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/LICENSE +21 -0
- package/README.md +69 -2
- package/dist/index.d.ts +58 -0
- package/dist/index.js +1307 -0
- package/dist/index.js.map +1 -0
- package/package.json +50 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/fonts/fontSource.ts","../src/latin1.ts","../src/num.ts","../src/content.ts","../src/deflate.ts","../src/color.ts","../src/objects.ts","../src/shading.ts","../src/images.ts","../src/pathOps.ts","../src/resources.ts","../src/groupOps.ts","../src/strokeOps.ts","../src/textOutlines.ts","../src/textSegment.ts","../src/textOps.ts","../src/drawCommands.ts","../src/fonts/toUnicode.ts","../src/fonts/embedFont.ts","../src/writePdf.ts"],"names":["deflate","mat3","JOINS","SYNTHETIC_ITALIC_RADIANS","fillHasInk","strokeHasInk","isSolidPaint","writeText","isGradientPaint"],"mappings":"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","file":"index.js","sourcesContent":["import { type FaceEmbedding, type FontStyle, fontEmbedding, glyphOutline } from '@weasel-js/font';\n\n/** Where the writer gets the font faces it embeds and the glyph outlines it falls back to; `registryFontSource` reads the font registry. */\nexport interface PdfFontSource {\n embedding(family: string, weight: number, style: FontStyle): Promise<FaceEmbedding | null>;\n /** Em-space SVG path data, as glyphOutline answers it. */\n outline(family: string, weight: number, style: FontStyle, cp: number): string | null;\n}\n\n/** The faces registered with `@weasel-js/font`. */\nexport const registryFontSource: PdfFontSource = {\n embedding: fontEmbedding,\n outline: glyphOutline,\n};\n","/** Each char code as one byte: PDF syntax is ASCII, and binary strings here hold one byte per code. */\nexport function latin1Bytes(s: string): Uint8Array {\n return Uint8Array.from(s, (c) => c.charCodeAt(0));\n}\n\n/** The inverse of `latin1Bytes`. */\nexport function latin1(b: Uint8Array): string {\n let s = '';\n for (let i = 0; i < b.length; i++) s += String.fromCharCode(b[i] as number);\n return s;\n}\n","/** What `num` throws for NaN or an infinity; `writeCommands` drops the command that wrote one. */\nexport class NonFiniteNumber extends Error {}\n\n/** A PDF number: at most four decimals, never an exponent. */\nexport function num(n: number): string {\n if (!Number.isFinite(n)) throw new NonFiniteNumber(`pdf: cannot write non-finite number ${n}`);\n // toFixed falls back to exponent form from 1e21.\n if (Math.abs(n) >= 1e21) return BigInt(n).toString();\n const s = n.toFixed(4).replace(/\\.?0+$/, '');\n return s === '-0' || s === '' ? '0' : s;\n}\n","import { latin1Bytes } from './latin1';\nimport { num } from './num';\n\n/** A page's content stream, built one operator per line. */\nexport class ContentStream {\n private readonly lines: string[] = [];\n\n /** Numbers are written with `num`; strings go in as given, so a name operand is `'/GS1'`. */\n op(operator: string, ...operands: (number | string)[]): this {\n const args = operands.map((o) => (typeof o === 'number' ? num(o) : o));\n this.lines.push(args.length ? `${args.join(' ')} ${operator}` : operator);\n return this;\n }\n\n /** Where the stream ends now, for `rollback`. */\n mark(): number {\n return this.lines.length;\n }\n\n /** Drops every operator written since `mark` answered `at`. */\n rollback(at: number): void {\n this.lines.length = at;\n }\n\n bytes(): Uint8Array {\n return latin1Bytes(`${this.lines.join('\\n')}\\n`);\n }\n}\n","/** Zlib-wrapped deflate, as a PDF `FlateDecode` stream wants it. */\nexport async function deflate(data: Uint8Array): Promise<Uint8Array> {\n const stream = new Blob([data as BlobPart]).stream().pipeThrough(new CompressionStream('deflate'));\n return new Uint8Array(await new Response(stream).arrayBuffer());\n}\n","import { parseColor, type SolidPaint } from '@weasel-js/paint';\nimport { applyColorMatrix, composeColorMatrix } from '@weasel-js/renderer';\nimport type { DrawState } from './drawCommands';\n\nexport type Rgba = [number, number, number, number];\n\n/** A row-major 4x5 matrix on straight rgba in 0..1, clamped; null is identity. Group alpha is not part of it. */\nexport function foldColor(rgba: readonly [number, number, number, number], m: readonly number[] | null): Rgba {\n const [r, g, b, a] = rgba;\n return m ? applyColorMatrix(m, r, g, b, a) : [r, g, b, a];\n}\n\n/** `inner` applied first, then `outer`: the order the renderer's group stack composes them in. */\nexport function composeMatrix(outer: readonly number[] | null, inner: readonly number[] | undefined): number[] | null {\n if (!inner) return outer ? [...outer] : null;\n if (!outer) return [...inner];\n return composeColorMatrix(outer, inner, new Array<number>(20));\n}\n\n/** Every color the writer emits comes through here, so a color matrix has one place to apply. */\nexport function colorFor(color: string | readonly [number, number, number, number], state: DrawState): Rgba {\n return foldColor(typeof color === 'string' ? parseColor(color) : color, state.colorMatrix);\n}\n\n/** A solid paint's color under `state`, and the alpha it paints at: its own, its opacity's and the group's. */\nexport function solidColor(paint: SolidPaint, state: DrawState): { rgb: [number, number, number]; alpha: number } {\n const [r, g, b, a] = colorFor(paint.color, state);\n return { rgb: [r, g, b], alpha: a * (paint.opacity ?? 1) * state.alpha };\n}\n\n/** Every image pixel comes through here, so a color matrix has one place to apply. Straight RGBA in, straight RGBA out. */\nexport function foldPixels(data: Uint8ClampedArray, state: DrawState): Uint8ClampedArray {\n if (!state.colorMatrix) return data;\n const out = new Uint8ClampedArray(data.length);\n for (let i = 0; i + 3 < data.length; i += 4) {\n const [r, g, b, a] = foldColor(\n [data[i] / 255, data[i + 1] / 255, data[i + 2] / 255, data[i + 3] / 255],\n state.colorMatrix,\n );\n out[i] = r * 255;\n out[i + 1] = g * 255;\n out[i + 2] = b * 255;\n out[i + 3] = a * 255;\n }\n return out;\n}\n","import { latin1Bytes as latin1 } from './latin1';\nimport { num } from './num';\n\nexport class PdfName {\n constructor(readonly value: string) {}\n}\nexport class PdfRef {\n constructor(readonly id: number) {}\n}\nexport class PdfText {\n constructor(readonly value: string) {}\n}\nexport class PdfBytes {\n constructor(readonly value: Uint8Array) {}\n}\n\nexport type PdfValue =\n | number\n | boolean\n | null\n | PdfName\n | PdfRef\n | PdfText\n | PdfBytes\n | readonly PdfValue[]\n | PdfDict;\nexport interface PdfDict {\n readonly [key: string]: PdfValue | undefined;\n}\n\n/** Serializes as `/n`, escaping delimiters and anything outside printable ASCII as `#xx`. */\nexport function name(n: string): PdfName {\n return new PdfName(n);\n}\n/** Serializes as `(…)` when ASCII-safe, else as UTF-16BE hex with a byte-order mark. */\nexport function text(s: string): PdfText {\n return new PdfText(s);\n}\n/** Serializes as `<hex>`. */\nexport function bytes(b: Uint8Array): PdfBytes {\n return new PdfBytes(b);\n}\n\nconst hex2 = (b: number) => b.toString(16).toUpperCase().padStart(2, '0');\n\nfunction writeName(n: string): string {\n let out = '/';\n for (const b of new TextEncoder().encode(n)) {\n const ch = String.fromCharCode(b);\n out += b < 33 || b > 126 || '#()<>[]{}/%'.includes(ch) ? `#${hex2(b)}` : ch;\n }\n return out;\n}\n\nfunction writeText(s: string): string {\n if (/^[\\x20-\\x7e]*$/.test(s)) return `(${s.replace(/[\\\\()]/g, '\\\\$&')})`;\n let out = '<FEFF';\n for (let i = 0; i < s.length; i++) out += s.charCodeAt(i).toString(16).toUpperCase().padStart(4, '0');\n return `${out}>`;\n}\n\nfunction write(v: PdfValue): string {\n if (v === null) return 'null';\n if (typeof v === 'number') return num(v);\n if (typeof v === 'boolean') return v ? 'true' : 'false';\n if (v instanceof PdfName) return writeName(v.value);\n if (v instanceof PdfRef) return `${v.id} 0 R`;\n if (v instanceof PdfText) return writeText(v.value);\n if (v instanceof PdfBytes) return `<${Array.from(v.value, hex2).join('')}>`;\n if (Array.isArray(v)) return `[${(v as readonly PdfValue[]).map(write).join(' ')}]`;\n return writeDict(v as PdfDict);\n}\n\nfunction writeDict(d: PdfDict): string {\n const parts: string[] = [];\n for (const [k, v] of Object.entries(d)) if (v !== undefined) parts.push(`${writeName(k)} ${write(v)}`);\n return `<<${parts.join(' ')}>>`;\n}\n\nexport type Deflater = (data: Uint8Array) => Promise<Uint8Array>;\n\nexport class PdfObjects {\n private readonly bodies: (Uint8Array | undefined)[] = [];\n private readonly pending: { ref: PdfRef; dict: PdfDict; data: Uint8Array }[] = [];\n\n alloc(): PdfRef {\n this.bodies.push(undefined);\n return new PdfRef(this.bodies.length);\n }\n\n set(ref: PdfRef, value: PdfValue): void {\n this.bodies[ref.id - 1] = latin1(write(value));\n }\n\n /** Writes `/Length` itself; the caller passes the already-encoded bytes. */\n stream(ref: PdfRef, dict: PdfDict, data: Uint8Array): void {\n const head = latin1(`${writeDict({ ...dict, Length: data.length })}\\nstream\\n`);\n const tail = latin1('\\nendstream');\n const out = new Uint8Array(head.length + data.length + tail.length);\n out.set(head, 0);\n out.set(data, head.length);\n out.set(tail, head.length + data.length);\n this.bodies[ref.id - 1] = out;\n }\n\n /** Like `stream`, but takes the raw bytes: `settle` compresses them (or not) before `serialize`. */\n streamDeflated(ref: PdfRef, dict: PdfDict, data: Uint8Array): void {\n // Written now so a bad number throws inside the command that made the stream.\n writeDict(dict);\n this.pending.push({ ref, dict, data });\n }\n\n /** How many objects are allocated, for `nullUnset`. */\n mark(): number {\n return this.bodies.length;\n }\n\n /** Sets every object allocated since `mark` answered `at` and not yet written to `null`, so a dropped command leaves no hole. */\n nullUnset(at: number): void {\n const waiting = new Set(this.pending.map((p) => p.ref.id));\n for (let id = at + 1; id <= this.bodies.length; id++) {\n if (!this.bodies[id - 1] && !waiting.has(id)) this.set(new PdfRef(id), null);\n }\n }\n\n /** Writes every `streamDeflated` stream, FlateDecode-compressed when `compress` is set. */\n async settle(compress: boolean, deflate: Deflater): Promise<void> {\n for (const { ref, dict, data } of this.pending.splice(0)) {\n if (compress) this.stream(ref, { ...dict, Filter: name('FlateDecode') }, await deflate(data));\n else this.stream(ref, dict, data);\n }\n }\n\n serialize(root: PdfRef, info?: PdfRef): Uint8Array {\n const chunks: Uint8Array[] = [];\n let offset = 0;\n const push = (c: Uint8Array) => {\n chunks.push(c);\n offset += c.length;\n };\n push(Uint8Array.of(...latin1('%PDF-1.7\\n%'), 0xe2, 0xe3, 0xcf, 0xd3, 0x0a));\n const offsets: number[] = [];\n this.bodies.forEach((body, i) => {\n if (!body) throw new Error(`pdf: object ${i + 1} was allocated but never set`);\n offsets.push(offset);\n push(latin1(`${i + 1} 0 obj\\n`));\n push(body);\n push(latin1('\\nendobj\\n'));\n });\n const xref = offset;\n let table = `xref\\n0 ${this.bodies.length + 1}\\n0000000000 65535 f \\n`;\n for (const o of offsets) table += `${String(o).padStart(10, '0')} 00000 n \\n`;\n const trailer = writeDict({ Size: this.bodies.length + 1, Root: root, Info: info });\n push(latin1(`${table}trailer\\n${trailer}\\nstartxref\\n${xref}\\n%%EOF\\n`));\n const out = new Uint8Array(offset);\n let at = 0;\n for (const c of chunks) {\n out.set(c, at);\n at += c.length;\n }\n return out;\n }\n}\n","import { boundsOfPath, type GlMat3, mat3, type Path } from '@weasel-js/geom';\nimport {\n type CommandPaint,\n type CommandPaintUnits,\n gradientGeometry,\n isGradientPaint,\n resolveGradientStops,\n sampleResolvedStops,\n} from '@weasel-js/paint';\nimport { colorFor, type Rgba } from './color';\nimport type { DrawState, PageCtx } from './drawCommands';\nimport { latin1Bytes } from './latin1';\nimport { name, type PdfDict, type PdfRef, type PdfValue } from './objects';\n\ntype Gradient = Extract<CommandPaint, { kind: 'linear-gradient' | 'radial-gradient' | 'conic-gradient' }>;\ntype Box = { x0: number; y0: number; x1: number; y1: number };\ntype Stop = { offset: number; rgba: Rgba };\ntype Segment = { lo: number; hi: number; c0: Rgba; c1: Rgba };\n\n/** What a gradient fill needs in the content stream once its clip is set. */\nexport interface PaintShading {\n shading: string;\n softMask: string | null;\n /** The fill's constant alpha: opacity, group alpha and any alpha every stop shares. */\n alpha: number;\n /** Paint space to the current frame, or `null` when the two are the same. */\n matrix: GlMat3 | null;\n}\n\n/** A non-rgb `interpolate` is sampled into this many stops, which PDF then blends in RGB. */\nconst SAMPLED_STOPS = 64;\nconst CONIC_WEDGES = 360;\n\n/**\n * `paint` as a shading resource for a fill of `path`. `null` for a paint that is not a\n * gradient, and for one whose space has no inverse, which paints nothing.\n */\nexport function paintShading(ctx: PageCtx, paint: CommandPaint, state: DrawState, path: Path): PaintShading | null {\n if (!isGradientPaint(paint)) return null;\n const toFrame = paintToFrame(ctx, paint, state);\n const toPaint = toFrame && mat3.invert(toFrame);\n if (!toFrame || !toPaint) return null;\n const box = paintBox(path, toPaint);\n let segments = rampSegments(stopsOf(paint, state));\n const geometry = geometryOf(paint, box);\n if (geometry.degenerate) segments = [{ lo: 0, hi: 1, c0: segments[0].c0, c1: segments[0].c0 }];\n\n let alpha = (paint.opacity ?? 1) * state.alpha;\n const a0 = segments[0].c0[3];\n const uniform = segments.every((s) => s.c0[3] === a0 && s.c1[3] === a0);\n let softMask: string | null = null;\n if (uniform) alpha *= a0;\n else {\n const mask = writeShading(ctx, geometry, rampFunction(segments, (c) => [c[3]]), 'DeviceGray');\n softMask = ctx.resources.softMask(writeMaskGroup(ctx, mask, box));\n }\n const color = writeShading(ctx, geometry, rampFunction(segments, (c) => [c[0], c[1], c[2]]), 'DeviceRGB');\n return { shading: ctx.resources.shading(color), softMask, alpha, matrix: isIdentity(toFrame) ? null : toFrame };\n}\n\n/** Paint space to the current frame, resolving `units` as the renderer's `gradientSpaceInverse` does. */\nexport function paintToFrame(ctx: PageCtx, paint: { units?: CommandPaintUnits }, state: DrawState): GlMat3 | null {\n if (paint.units === 'local') return mat3.identity();\n const fromPage = mat3.invert(state.transform);\n if (!fromPage) return null;\n return paint.units === 'world' && ctx.view ? mat3.multiply(fromPage, ctx.view) : fromPage;\n}\n\nfunction isIdentity(m: GlMat3): boolean {\n return m[0] === 1 && m[1] === 0 && m[3] === 0 && m[4] === 1 && m[6] === 0 && m[7] === 0;\n}\n\n/** The path's bounds in paint space, grown a unit so nothing on the edge is left out. */\nfunction paintBox(path: Path, toPaint: GlMat3): Box {\n const b = boundsOfPath(path);\n const corners = [\n mat3.apply(toPaint, b.x, b.y),\n mat3.apply(toPaint, b.x + b.width, b.y),\n mat3.apply(toPaint, b.x, b.y + b.height),\n mat3.apply(toPaint, b.x + b.width, b.y + b.height),\n ];\n const xs = corners.map((c) => c[0]);\n const ys = corners.map((c) => c[1]);\n return { x0: Math.min(...xs) - 1, y0: Math.min(...ys) - 1, x1: Math.max(...xs) + 1, y1: Math.max(...ys) + 1 };\n}\n\nfunction stopsOf(paint: Gradient, state: DrawState): Stop[] {\n const resolved = resolveGradientStops(paint.stops);\n const space = paint.interpolate ?? 'rgb';\n if (resolved.length === 0) return [{ offset: 0, rgba: colorFor([0, 0, 0, 0], state) }];\n if (space === 'rgb') return resolved.map((s) => ({ offset: s.offset, rgba: colorFor(s.rgba, state) }));\n return Array.from({ length: SAMPLED_STOPS }, (_, i) => {\n const t = i / (SAMPLED_STOPS - 1);\n return { offset: t, rgba: colorFor(sampleResolvedStops(resolved, t, space), state) };\n });\n}\n\nconst lerp = (a: Rgba, b: Rgba, f: number): Rgba => a.map((v, i) => v + (b[i] - v) * f) as Rgba;\n\n/** The ramp over 0..1 as linear pieces, flat past either end stop, with no piece of zero width. */\nfunction rampSegments(stops: Stop[]): Segment[] {\n const first = stops[0];\n const last = stops[stops.length - 1];\n const raw: Segment[] = [];\n if (first.offset > 0) raw.push({ lo: Math.min(0, first.offset), hi: first.offset, c0: first.rgba, c1: first.rgba });\n for (let i = 0; i < stops.length - 1; i++) {\n const a = stops[i];\n const b = stops[i + 1];\n raw.push({ lo: a.offset, hi: b.offset, c0: a.rgba, c1: b.rgba });\n }\n if (last.offset < 1) raw.push({ lo: last.offset, hi: Math.max(1, last.offset), c0: last.rgba, c1: last.rgba });\n const out: Segment[] = [];\n for (const s of raw) {\n const lo = Math.max(s.lo, 0);\n const hi = Math.min(s.hi, 1);\n if (hi <= lo) continue;\n const span = s.hi - s.lo;\n out.push({ lo, hi, c0: lerp(s.c0, s.c1, (lo - s.lo) / span), c1: lerp(s.c0, s.c1, (hi - s.lo) / span) });\n }\n // Every stop sits outside 0..1 on one side, so one color covers the whole ramp.\n if (out.length === 0) {\n const c = first.offset >= 1 ? first.rgba : last.rgba;\n out.push({ lo: 0, hi: 1, c0: c, c1: c });\n }\n return out;\n}\n\nfunction rampFunction(segments: Segment[], channels: (c: Rgba) => number[]): PdfDict {\n const pieces = segments.map(\n (s): PdfDict => ({ FunctionType: 2, Domain: [0, 1], C0: channels(s.c0), C1: channels(s.c1), N: 1 }),\n );\n if (pieces.length === 1) return pieces[0];\n return {\n FunctionType: 3,\n Domain: [0, 1],\n Functions: pieces,\n Bounds: segments.slice(0, -1).map((s) => s.hi),\n Encode: segments.flatMap(() => [0, 1]),\n };\n}\n\ntype Geometry = { dict: PdfDict; data?: Uint8Array; degenerate?: boolean };\n\nfunction geometryOf(paint: Gradient, box: Box): Geometry {\n const extend = [true, true];\n if (paint.kind === 'linear-gradient') {\n const { from, to } = paint;\n // A zero-length segment paints the ramp's start everywhere, as the renderer does.\n const degenerate = from.x === to.x && from.y === to.y;\n const coords = degenerate ? [from.x, from.y, from.x + 1, from.y] : [from.x, from.y, to.x, to.y];\n return { dict: { ShadingType: 2, Coords: coords, Extend: extend }, degenerate };\n }\n const { center, radius, angle } = gradientGeometry(paint);\n if (paint.kind === 'radial-gradient') {\n const r = Math.max(radius, 1e-4);\n return { dict: { ShadingType: 3, Coords: [center.x, center.y, 0, center.x, center.y, r], Extend: extend } };\n }\n const reach = Math.max(\n ...[box.x0, box.x1].flatMap((x) => [box.y0, box.y1].map((y) => Math.hypot(x - center.x, y - center.y))),\n );\n return conicMesh(center, angle, reach * 1.01 + 1);\n}\n\n/**\n * Wedges about the center, each carrying its slice of the ramp as the function's input; the\n * center vertex takes the slice's midpoint, so a wedge strays at most half a slice from the\n * `atan` the renderer takes.\n */\nfunction conicMesh(center: { x: number; y: number }, angle: number, r: number): Geometry {\n const x0 = center.x - r;\n const y0 = center.y - r;\n const data = new Uint8Array(CONIC_WEDGES * 3 * 11);\n const view = new DataView(data.buffer);\n const coord = (v: number, lo: number) => Math.round(Math.min(1, Math.max(0, (v - lo) / (2 * r))) * 0xffffffff);\n let at = 0;\n const vertex = (x: number, y: number, t: number) => {\n view.setUint8(at, 0);\n view.setUint32(at + 1, coord(x, x0));\n view.setUint32(at + 5, coord(y, y0));\n view.setUint16(at + 9, Math.round(t * 0xffff));\n at += 11;\n };\n const rim = (i: number) => {\n const a = angle + (2 * Math.PI * i) / CONIC_WEDGES;\n vertex(center.x + r * Math.cos(a), center.y + r * Math.sin(a), i / CONIC_WEDGES);\n };\n for (let i = 0; i < CONIC_WEDGES; i++) {\n vertex(center.x, center.y, (i + 0.5) / CONIC_WEDGES);\n rim(i);\n rim(i + 1);\n }\n return {\n dict: {\n ShadingType: 4,\n BitsPerCoordinate: 32,\n BitsPerComponent: 16,\n BitsPerFlag: 8,\n Decode: [x0, x0 + 2 * r, y0, y0 + 2 * r, 0, 1],\n },\n data,\n };\n}\n\nfunction writeShading(ctx: PageCtx, g: Geometry, fn: PdfDict, colorSpace: string): PdfRef {\n const ref = ctx.objects.alloc();\n const dict: Record<string, PdfValue> = { ...g.dict, ColorSpace: name(colorSpace), Function: fn };\n if (g.data) ctx.objects.streamDeflated(ref, dict, g.data);\n else ctx.objects.set(ref, dict);\n return ref;\n}\n\n/** A luminosity group painting the gray alpha shading, for an ExtGState's `/SMask`. */\nfunction writeMaskGroup(ctx: PageCtx, mask: PdfRef, box: Box): PdfRef {\n const ref = ctx.objects.alloc();\n const body = latin1Bytes('/Sh1 sh\\n');\n ctx.objects.streamDeflated(\n ref,\n {\n Type: name('XObject'),\n Subtype: name('Form'),\n BBox: [box.x0, box.y0, box.x1, box.y1],\n Group: { Type: name('Group'), S: name('Transparency'), CS: name('DeviceGray'), I: true },\n Resources: { Shading: { Sh1: mask } },\n },\n body,\n );\n return ref;\n}\n","import { mat3 } from '@weasel-js/geom';\nimport type { CommandPaint } from '@weasel-js/paint';\nimport {\n type ImageDrawCommand,\n SPRITE_STRIDE,\n type SpritesDrawCommand,\n textureRegistry,\n} from '@weasel-js/renderer';\nimport { foldPixels } from './color';\nimport { type DrawState, type PageCtx, pageFlip, skip } from './drawCommands';\nimport { latin1Bytes } from './latin1';\nimport { name, type PdfDict, type PdfRef } from './objects';\nimport { paintToFrame } from './shading';\nimport type { RasterPixels, Rect } from './writePdf';\n\n/** A texture paint as a draw command carries it, its units already resolved. */\nexport type TextureFill = Extract<CommandPaint, { kind: 'texture' }>;\n\ntype Source = ImageBitmap | HTMLImageElement;\ntype Sampling = 'linear' | 'nearest' | undefined;\n\nconst ids = new WeakMap<object, number>();\nconst embedded = new WeakMap<object, Map<string, PdfRef>>();\nlet nextId = 0;\n\nfunction sizeOf(image: Source): { w: number; h: number } {\n const w = 'naturalWidth' in image ? image.naturalWidth : image.width;\n const h = 'naturalHeight' in image ? image.naturalHeight : image.height;\n return { w: w || 1, h: h || 1 };\n}\n\nfunction defaultReadPixels(image: Source): RasterPixels {\n const { w, h } = sizeOf(image);\n const ctx = new OffscreenCanvas(w, h).getContext('2d');\n if (!ctx) throw new Error('pdf: no 2D context to read image pixels with');\n ctx.drawImage(image, 0, 0);\n return { width: w, height: h, data: ctx.getImageData(0, 0, w, h).data };\n}\n\n/** A memo for this document: one entry per key, however many pages ask. */\nfunction memo(ctx: PageCtx): Map<string, PdfRef> {\n let m = embedded.get(ctx.objects);\n if (!m) embedded.set(ctx.objects, (m = new Map()));\n return m;\n}\n\nfunction idOf(image: Source): number {\n let id = ids.get(image);\n if (id === undefined) ids.set(image, (id = ++nextId));\n return id;\n}\n\nfunction imageObject(ctx: PageCtx, dict: PdfDict, data: Uint8Array): PdfRef {\n const ref = ctx.objects.alloc();\n ctx.objects.streamDeflated(ref, { Type: name('XObject'), Subtype: name('Image'), ...dict }, data);\n return ref;\n}\n\n/**\n * The image as an XObject, with its alpha as an SMask when any pixel is translucent.\n * Memoized per image, sampling and color matrix across the whole document.\n */\nexport function imageXObject(\n ctx: PageCtx,\n image: Source,\n state: DrawState = { transform: mat3.identity(), alpha: 1, colorMatrix: null },\n sampling: Sampling = 'linear',\n): PdfRef | null {\n const interpolate = sampling !== 'nearest';\n const key = `${idOf(image)} ${interpolate} ${state.colorMatrix?.join(',') ?? ''}`;\n const cache = memo(ctx);\n const hit = cache.get(key);\n if (hit) return hit;\n\n let raw: RasterPixels;\n try {\n raw = (ctx.opts.readPixels ?? defaultReadPixels)(image);\n } catch {\n skip(ctx, 'image could not be read');\n return null;\n }\n const ref = pixelsXObject(ctx, { ...raw, data: foldPixels(raw.data, state) }, interpolate);\n cache.set(key, ref);\n return ref;\n}\n\n/** Straight top-down RGBA as an image XObject, with its alpha as an SMask when any pixel is translucent. */\nfunction pixelsXObject(ctx: PageCtx, raw: RasterPixels, interpolate: boolean): PdfRef {\n const rgba = raw.data;\n const n = raw.width * raw.height;\n const rgb = new Uint8Array(n * 3);\n const alpha = new Uint8Array(n);\n let translucent = false;\n for (let i = 0; i < n; i++) {\n rgb[i * 3] = rgba[i * 4];\n rgb[i * 3 + 1] = rgba[i * 4 + 1];\n rgb[i * 3 + 2] = rgba[i * 4 + 2];\n alpha[i] = rgba[i * 4 + 3];\n if (alpha[i] < 255) translucent = true;\n }\n const dims = (space: string): PdfDict => ({\n Width: raw.width,\n Height: raw.height,\n ColorSpace: name(space),\n BitsPerComponent: 8,\n Interpolate: interpolate,\n });\n const mask = translucent ? imageObject(ctx, dims('DeviceGray'), alpha) : undefined;\n return imageObject(ctx, { ...dims('DeviceRGB'), SMask: mask }, rgb);\n}\n\n/** Draws rasterized pixels over `rect`, given in the page's y-down frame. */\nexport function writeRaster(ctx: PageCtx, raw: RasterPixels, rect: Rect, opacity: number): void {\n place(ctx, pixelsXObject(ctx, raw, true), raw.width, raw.height, {\n x: rect.x,\n y: rect.y,\n w: rect.width,\n h: rect.height,\n opacity,\n });\n}\n\ninterface Place {\n x: number;\n y: number;\n w: number;\n h: number;\n source?: { x: number; y: number; w: number; h: number };\n flipX?: boolean;\n flipY?: boolean;\n opacity: number;\n}\n\n/** Draws one placement of `ref`, whose bitmap is `iw` by `ih` pixels, upright in the page's y-down frame. */\nfunction place(ctx: PageCtx, ref: PdfRef, iw: number, ih: number, p: Place): void {\n const src = p.source ?? { x: 0, y: 0, w: iw, h: ih };\n if (!(src.w > 0 && src.h > 0 && p.w !== 0 && p.h !== 0)) return;\n const { out } = ctx;\n // Where the whole bitmap lands so that `src` fills the rect.\n const W = (iw * p.w) / src.w;\n const H = (ih * p.h) / src.h;\n const left = p.x - (src.x * p.w) / src.w;\n const top = p.y - (src.y * p.h) / src.h;\n const right = p.x + p.w + (src.x * p.w) / src.w;\n const bottom = p.y + p.h + (src.y * p.h) / src.h;\n const a = p.flipX ? -W : W;\n const e = p.flipX ? right : left;\n const d = p.flipY ? H : -H;\n const f = p.flipY ? bottom - H : top + H;\n\n out.op('q');\n if (p.opacity < 1) out.op('gs', `/${ctx.resources.extGState(p.opacity, p.opacity)}`);\n if (p.source) out.op('re', p.x, p.y, p.w, p.h).op('W').op('n');\n out.op('cm', a, 0, 0, d, e, f);\n out.op('Do', `/${ctx.resources.xobject(ref)}`);\n out.op('Q');\n}\n\nexport function writeImage(ctx: PageCtx, cmd: ImageDrawCommand | SpritesDrawCommand, state: DrawState): void {\n const { w: iw, h: ih } = sizeOf(cmd.image);\n const ref = imageXObject(ctx, cmd.image, state, cmd.sampling);\n if (!ref) return;\n if (cmd.kind === 'image') {\n place(ctx, ref, iw, ih, { ...cmd, opacity: (cmd.opacity ?? 1) * state.alpha });\n return;\n }\n const s = cmd.sprites;\n for (let i = 0; i + SPRITE_STRIDE <= s.length; i += SPRITE_STRIDE) {\n const [dx, dy, dw, dh, sx, sy, sw, sh, opacity] = s.subarray(i, i + SPRITE_STRIDE);\n place(ctx, ref, iw, ih, {\n x: dx,\n y: dy,\n w: dw,\n h: dh,\n source: { x: sw < 0 ? sx + sw : sx, y: sh < 0 ? sy + sh : sy, w: Math.abs(sw), h: Math.abs(sh) },\n flipX: sw < 0,\n flipY: sh < 0,\n opacity: opacity * state.alpha,\n });\n }\n}\n\n/**\n * The tiling pattern a texture paint names, as a resource name for `scn`; `null` when the\n * texture is not registered or its placement has no inverse, which paints nothing.\n */\nexport function texturePattern(ctx: PageCtx, paint: TextureFill, state: DrawState): string | null {\n const entry = textureRegistry.get(paint.texture.id);\n if (!entry) return null;\n const toFrame = paintToFrame(ctx, paint, state);\n if (!toFrame) return null;\n const [a, b, c, d] = paint.transform ?? [1, 0, 0, 1];\n const o = paint.origin ?? { x: 0, y: 0 };\n const placement = mat3.fromAffine([a, b, c, d, o.x, o.y]);\n if (!mat3.invert(placement)) return null;\n // A pattern's matrix maps to the page's own space, below the flip that opens the content stream.\n const m = mat3.multiply(mat3.multiply(pageFlip(ctx), mat3.multiply(Float64Array.from(state.transform), toFrame)), placement);\n const matrix = mat3.toAffine(m);\n\n const key = `pattern ${paint.texture.id} ${matrix.join(',')} ${state.colorMatrix?.join(',') ?? ''}`;\n const cache = memo(ctx);\n let ref = cache.get(key);\n if (!ref) {\n const { w, h } = sizeOf(entry.source);\n const image = imageXObject(ctx, entry.source, state, 'linear');\n if (!image) return null;\n ref = ctx.objects.alloc();\n ctx.objects.streamDeflated(\n ref,\n {\n Type: name('Pattern'),\n PatternType: 1,\n PaintType: 1,\n TilingType: 1,\n BBox: [0, 0, w, h],\n XStep: w,\n YStep: h,\n Matrix: matrix,\n Resources: { XObject: { Im1: image } },\n },\n latin1Bytes(`${w} 0 0 -${h} 0 ${h} cm\\n/Im1 Do\\n`),\n );\n cache.set(key, ref);\n }\n return ctx.resources.pattern(ref);\n}\n","import {\n fillsOpenSubpaths,\n forEachSegment,\n PATH_C,\n PATH_L,\n PATH_M,\n PATH_Q,\n PATH_Z,\n type Path,\n resolveCorners,\n} from '@weasel-js/geom';\nimport type { ContentStream } from './content';\n\ninterface Contour {\n ops: [string, number[]][];\n closed: boolean;\n}\n\n/**\n * Writes a path's construction operators. `'closed'` leaves out contours with no `Z`,\n * for a fill that does not close open ones.\n */\nexport function pathOps(out: ContentStream, path: Path, which: 'all' | 'closed'): void {\n if (path.kind === 'rect') {\n out.op('re', path.x, path.y, path.width, path.height);\n return;\n }\n const { commands, coords } = resolveCorners(path);\n const contours: Contour[] = [];\n let cur: Contour | undefined;\n forEachSegment(commands, coords, (cmd, ci, px, py, _i, opens) => {\n if (cmd === PATH_M || opens || !cur) {\n cur = { ops: [], closed: false };\n contours.push(cur);\n if (cmd === PATH_M) {\n cur.ops.push(['m', [coords[ci], coords[ci + 1]]]);\n return;\n }\n cur.ops.push(['m', [px, py]]);\n }\n if (cmd === PATH_L) cur.ops.push(['l', [coords[ci], coords[ci + 1]]]);\n else if (cmd === PATH_C) cur.ops.push(['c', Array.from({ length: 6 }, (_, k) => coords[ci + k])]);\n else if (cmd === PATH_Q) {\n const [qx, qy, x, y] = [coords[ci], coords[ci + 1], coords[ci + 2], coords[ci + 3]];\n cur.ops.push(['c', [px + ((qx - px) * 2) / 3, py + ((qy - py) * 2) / 3, x + ((qx - x) * 2) / 3, y + ((qy - y) * 2) / 3, x, y]]);\n } else if (cmd === PATH_Z) {\n cur.ops.push(['h', []]);\n cur.closed = true;\n cur = undefined;\n }\n });\n for (const c of contours) {\n if (which === 'closed' && !c.closed) continue;\n for (const [op, args] of c.ops) out.op(op, ...args);\n }\n}\n\n/** Writes the region a fill of `path` covers, which a clip covers too, and answers whether it is even-odd. */\nexport function fillPathOps(out: ContentStream, path: Path): boolean {\n const closeOpen = path.kind === 'rect' || fillsOpenSubpaths(path);\n pathOps(out, path, closeOpen ? 'all' : 'closed');\n return path.kind === 'polygon' && path.fillRule === 'evenodd';\n}\n","import { num } from './num';\nimport { name, type PdfDict, PdfRef } from './objects';\n\n/** Hands out resource names (`GS1`, `Sh1`, …) for one page and writes them as its `/Resources`. */\nexport class PageResources {\n private readonly gstates = new Map<string, string>();\n private readonly masks = new Map<number, string>();\n private readonly refs = {\n Shading: new Map<number, string>(),\n XObject: new Map<number, string>(),\n Font: new Map<number, string>(),\n Pattern: new Map<number, string>(),\n };\n\n extGState(fillAlpha: number, strokeAlpha: number): string {\n // Checked now: the dict is written after the page, outside the command that asked for it.\n num(fillAlpha);\n num(strokeAlpha);\n const key = `${fillAlpha} ${strokeAlpha}`;\n let n = this.gstates.get(key);\n if (n === undefined) {\n n = this.nextGState();\n this.gstates.set(key, n);\n }\n return n;\n }\n\n /** An ExtGState whose `/SMask` is the luminosity of the transparency group `group`. */\n softMask(group: PdfRef): string {\n let n = this.masks.get(group.id);\n if (n === undefined) {\n n = this.nextGState();\n this.masks.set(group.id, n);\n }\n return n;\n }\n\n private nextGState(): string {\n return `GS${this.gstates.size + this.masks.size + 1}`;\n }\n\n shading(ref: PdfRef): string {\n return this.named('Shading', 'Sh', ref);\n }\n xobject(ref: PdfRef): string {\n return this.named('XObject', 'Im', ref);\n }\n font(ref: PdfRef): string {\n return this.named('Font', 'F', ref);\n }\n pattern(ref: PdfRef): string {\n return this.named('Pattern', 'P', ref);\n }\n\n private named(kind: keyof PageResources['refs'], prefix: string, ref: PdfRef): string {\n const m = this.refs[kind];\n let n = m.get(ref.id);\n if (n === undefined) {\n n = `${prefix}${m.size + 1}`;\n m.set(ref.id, n);\n }\n return n;\n }\n\n dict(): PdfDict {\n const out: Record<string, PdfDict> = {};\n if (this.gstates.size || this.masks.size) {\n const g: Record<string, PdfDict> = {};\n for (const [key, n] of this.gstates) {\n const [ca, CA] = key.split(' ').map(Number);\n g[n] = { Type: name('ExtGState'), ca, CA };\n }\n for (const [id, n] of this.masks) {\n g[n] = { Type: name('ExtGState'), SMask: { Type: name('Mask'), S: name('Luminosity'), G: new PdfRef(id) } };\n }\n out.ExtGState = g;\n }\n for (const [kind, m] of Object.entries(this.refs)) {\n if (!m.size) continue;\n const d: Record<string, PdfRef> = {};\n for (const [id, n] of m) d[n] = new PdfRef(id);\n out[kind] = d;\n }\n return out;\n }\n}\n","import { mat3 } from '@weasel-js/geom';\nimport {\n commandsBounds,\n type DrawCommand,\n type GroupDrawCommand,\n isOwnComposite,\n type PathDrawCommand,\n type ShaderDrawCommand,\n} from '@weasel-js/renderer';\nimport { composeMatrix, foldPixels } from './color';\nimport { ContentStream } from './content';\nimport { type DrawState, type PageCtx, pageFlip, skip, writeCommands } from './drawCommands';\nimport { writeRaster } from './images';\nimport { name } from './objects';\nimport { fillPathOps } from './pathOps';\nimport { PageResources } from './resources';\nimport type { RasterPixels, Rect } from './writePdf';\n\n/** Rasters are made at twice the page's point scale. */\nconst RASTER_SCALE = 2;\n\n/** The renderer clips through the fill mesh, so a clip covers what a fill of its path would. */\nfunction setClip(ctx: PageCtx, clip: NonNullable<GroupDrawCommand['clip']>): void {\n ctx.out.op(fillPathOps(ctx.out, clip) ? 'W*' : 'W');\n ctx.out.op('n');\n}\n\nfunction compositeName(op: NonNullable<GroupDrawCommand['composite']>): string {\n return typeof op === 'string' ? op : `${op.source}/${op.destination}`;\n}\n\n/**\n * Hands `commands` (already in the page's frame) to the raster hook and draws what comes back over `box`.\n * The pixels are folded through `state`'s color matrix and drawn at its alpha. `unhooked` is the skip\n * reported when there is no hook.\n */\nasync function drawRaster(\n ctx: PageCtx,\n commands: readonly DrawCommand[],\n box: Rect,\n state: DrawState,\n reason: string,\n unhooked = reason,\n): Promise<void> {\n const hook = ctx.opts.rasterize;\n if (!hook) return skip(ctx, unhooked);\n if (box.width <= 0 || box.height <= 0) return;\n let px: RasterPixels;\n try {\n px = await hook(commands, box, RASTER_SCALE, ctx.view);\n } catch (err) {\n return skip(ctx, `${reason} raster failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n if (px.data.length !== px.width * px.height * 4) return skip(ctx, `${reason} raster has the wrong number of pixels`);\n const inverse = mat3.invert(state.transform);\n if (!inverse) return;\n const { out } = ctx;\n out.op('q');\n out.op('cm', ...mat3.toAffine(inverse));\n writeRaster(ctx, { ...px, data: foldPixels(px.data, state) }, box, state.alpha);\n out.op('Q');\n}\n\n/** A shader command's bounds are screen space, which is the page's frame here. */\nexport function writeShader(ctx: PageCtx, cmd: ShaderDrawCommand, state: DrawState): Promise<void> {\n const { x, y, w, h } = cmd.bounds;\n const x0 = Math.max(0, Math.floor(x));\n const y0 = Math.max(0, Math.floor(y));\n const x1 = Math.min(ctx.width, Math.ceil(x + w));\n const y1 = Math.min(ctx.height, Math.ceil(y + h));\n return drawRaster(ctx, [cmd], { x: x0, y: y0, width: x1 - x0, height: y1 - y0 }, state, 'shader');\n}\n\n/** A fill in a paint kind only the renderer can draw, rasterized on its own in the page's frame. */\nexport function rasterFill(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState, kind: string): Promise<void> {\n const wrapper: GroupDrawCommand = {\n kind: 'group',\n transform: state.transform,\n children: [{ kind: 'path', path: cmd.path, fill: cmd.fill }],\n };\n const box = commandsBounds([wrapper], mat3.identity(), ctx);\n return drawRaster(ctx, [wrapper], box, state, `paint kind ${kind}`, `paint kind ${kind} needs a raster`);\n}\n\n/** The group's own frame is dropped from the state: its alpha and color matrix apply to the finished raster. */\nasync function rasterGroup(ctx: PageCtx, cmd: GroupDrawCommand, state: DrawState, reason: string): Promise<void> {\n const full = cmd.transform ? mat3.multiply(Float64Array.from(state.transform), cmd.transform) : state.transform;\n const wrapper: GroupDrawCommand = {\n kind: 'group',\n transform: full,\n clip: cmd.clip,\n effects: cmd.effects,\n children: cmd.children,\n };\n const box = commandsBounds([wrapper], mat3.identity(), ctx);\n const grouped: DrawState = {\n transform: state.transform,\n alpha: state.alpha * (cmd.alpha ?? 1),\n colorMatrix: composeMatrix(state.colorMatrix, cmd.colorMatrix),\n };\n await drawRaster(ctx, [wrapper], box, grouped, reason);\n}\n\n/**\n * The children in a form of their own, so a group's alpha lands on the finished surface. The form is\n * drawn from the page's default space, which is what a tiling pattern's matrix inside it is relative to.\n */\nasync function isolatedGroup(ctx: PageCtx, cmd: GroupDrawCommand, state: DrawState, inner: DrawState): Promise<void> {\n if (cmd.colorMatrix?.[19]) skip(ctx, 'group color matrix alpha offset is not drawn');\n const flip = pageFlip(ctx);\n const toPage = mat3.multiply(flip, Float64Array.from(state.transform));\n const fromPage = mat3.invert(toPage);\n if (!fromPage) return;\n const sub: PageCtx = { ...ctx, out: new ContentStream(), resources: new PageResources() };\n sub.out.op('cm', ...mat3.toAffine(mat3.multiply(flip, Float64Array.from(inner.transform))));\n if (cmd.clip) setClip(sub, cmd.clip);\n await writeCommands(sub, cmd.children, { ...inner, alpha: 1 });\n\n const form = ctx.objects.alloc();\n ctx.objects.streamDeflated(\n form,\n {\n Type: name('XObject'),\n Subtype: name('Form'),\n BBox: [0, 0, ctx.width, ctx.height],\n Group: { Type: name('Group'), S: name('Transparency'), I: true },\n Resources: sub.resources.dict(),\n },\n sub.out.bytes(),\n );\n const { out } = ctx;\n out.op('q');\n out.op('cm', ...mat3.toAffine(fromPage));\n if (inner.alpha < 1) out.op('gs', `/${ctx.resources.extGState(inner.alpha, inner.alpha)}`);\n out.op('Do', `/${ctx.resources.xobject(form)}`);\n out.op('Q');\n}\n\nexport async function writeGroup(ctx: PageCtx, cmd: GroupDrawCommand, state: DrawState): Promise<void> {\n if (cmd.composite && isOwnComposite(cmd.composite)) {\n skip(ctx, `composite ${compositeName(cmd.composite)} drawn as source-over`);\n }\n if (cmd.effects?.length) return rasterGroup(ctx, cmd, state, 'effects');\n const m = cmd.transform;\n const inner: DrawState = {\n transform: m ? mat3.multiply(Float64Array.from(state.transform), m) : state.transform,\n alpha: state.alpha * (cmd.alpha ?? 1),\n colorMatrix: composeMatrix(state.colorMatrix, cmd.colorMatrix),\n };\n if (cmd.isolate) return isolatedGroup(ctx, cmd, state, inner);\n const { out } = ctx;\n out.op('q');\n if (m) out.op('cm', ...mat3.toAffine(m));\n if (cmd.clip) setClip(ctx, cmd.clip);\n await writeCommands(ctx, cmd.children, inner);\n out.op('Q');\n}\n","import type { Path } from '@weasel-js/geom';\nimport { type CommandPaint, type CommandStroke, isSolidPaint, type Stroke } from '@weasel-js/paint';\nimport { markerDrawCommands, resolveStrokeLengths } from '@weasel-js/renderer';\nimport { strokeInsets, strokeToPath } from '@weasel-js/stroke';\nimport { solidColor } from './color';\nimport { type DrawState, type PageCtx, skip, writeCommands } from './drawCommands';\nimport { num } from './num';\nimport { pathOps } from './pathOps';\n\nconst CAPS = { butt: 0, round: 1, square: 2 } as const;\nconst JOINS = { miter: 0, round: 1, bevel: 2 } as const;\n\n/** Whether PDF's own stroke operator draws this stroke as the renderer would. */\nexport function isNative(stroke: CommandStroke, width: number): boolean {\n if (stroke.align && stroke.align !== 'center') return false;\n if (stroke.vertexWidths || stroke.nib || stroke.vertexColors) return false;\n const { start, end } = strokeInsets(stroke as Stroke, width);\n return start === 0 && end === 0;\n}\n\n/** The line style operators for a native stroke; the caller sets its color. */\nexport function strokeStyleOps(ctx: PageCtx, stroke: CommandStroke, width: number): void {\n const { out } = ctx;\n out.op('w', width);\n out.op('J', CAPS[stroke.cap ?? 'butt']);\n out.op('j', JOINS[stroke.join ?? 'miter']);\n out.op('M', stroke.miterLimit ?? 4);\n // An all-zero dash draws nothing in PDF, and the renderer draws it solid.\n const dash = stroke.dash ?? [];\n if (dash.reduce((a, b) => a + b, 0) > 0) out.op('d', `[${dash.map(num).join(' ')}]`, 0);\n}\n\n/** `raw` with its `{ px }` lengths resolved at the exact scale of `state`, and its width as a number. */\nexport function resolveStroke(\n path: Path,\n raw: CommandStroke & { paint: CommandPaint },\n state: DrawState,\n): { stroke: CommandStroke & { paint: CommandPaint }; width: number } {\n const { cmd } = resolveStrokeLengths(state.transform, { kind: 'path', path, stroke: raw }, { quantize: false });\n return { stroke: cmd.stroke, width: typeof cmd.stroke.width === 'number' ? cmd.stroke.width : 1 };\n}\n\nfunction writeNative(ctx: PageCtx, path: Path, stroke: CommandStroke, state: DrawState, width: number): void {\n const paint = stroke.paint;\n if (!paint || !isSolidPaint(paint)) return;\n const { rgb, alpha } = solidColor(paint, state);\n const { out } = ctx;\n out.op('q');\n out.op('gs', `/${ctx.resources.extGState(alpha, alpha)}`);\n out.op('RG', ...rgb);\n strokeStyleOps(ctx, stroke, width);\n pathOps(out, path, 'all');\n out.op('S');\n out.op('Q');\n}\n\n/**\n * Strokes `path`: natively where PDF draws it as the renderer does, otherwise by\n * filling the stroke's outline, which also carries gradient paints. Marker heads\n * follow as their own commands; heads with their own paint are drawn over the\n * line-colored copy that `strokeToPath` already unioned into the outline.\n */\nexport async function writeStroke(ctx: PageCtx, path: Path, rawStroke: CommandStroke, state: DrawState): Promise<void> {\n if (!rawStroke.paint) return;\n const { stroke, width } = resolveStroke(path, { ...rawStroke, paint: rawStroke.paint as CommandPaint }, state);\n if (!(width > 0)) return;\n let heads =\n stroke.markerStart || stroke.markerMid || stroke.markerEnd\n ? markerDrawCommands(path, stroke, width, undefined)\n : [];\n if (isNative(stroke, width) && isSolidPaint(stroke.paint)) writeNative(ctx, path, stroke, state, width);\n else {\n if (stroke.vertexColors) skip(ctx, 'stroke vertexColors approximated by a single paint');\n heads = heads.filter((h) => h.stroke || h.fill?.paint !== stroke.paint);\n const outline = strokeToPath(path, stroke as Stroke);\n await writeCommands(ctx, [{ kind: 'path', path: outline, fill: { paint: stroke.paint } }], state);\n }\n if (heads.length) await writeCommands(ctx, heads, state);\n}\n","import { type Path, pathFromD, transformPath } from '@weasel-js/geom';\nimport { type CommandFill, type CommandStroke, fillHasInk, strokeHasInk } from '@weasel-js/paint';\nimport type { PathDrawCommand, TextDrawCommand } from '@weasel-js/renderer';\nimport { emboldenGlyphD, type PlacedGlyph, SYNTHETIC_ITALIC_RADIANS } from '@weasel-js/text';\nimport type { PageCtx } from './drawCommands';\n\n/** Word breaks a reader copies and searches by: written as glyphs where the face has one, and never ink. */\nexport function isSpace(cp: number): boolean {\n return cp === 0x20 || cp === 0xa0;\n}\n\nexport function codepointLabel(cp: number): string {\n return `U+${cp.toString(16).toUpperCase().padStart(4, '0')}`;\n}\n\nexport function skipGlyph(ctx: PageCtx, g: PlacedGlyph, why: string): void {\n const { family, weight, style } = g.resolved.resolved;\n ctx.skipped.push({ kind: 'glyph', detail: `${codepointLabel(g.cp)} in ${family} ${weight} ${style} ${why}` });\n}\n\n/** The glyph's outline where the renderer's outline tier places it, faked bold and oblique as it fakes them. */\nfunction placedOutline(ctx: PageCtx, g: PlacedGlyph, dx: number, dy: number): Path | null {\n const { family, weight, style } = g.resolved.resolved;\n let d: string | null;\n try {\n d = ctx.opts.fonts.outline(family, weight, style, g.cp);\n } catch {\n return null;\n }\n if (d === null) return null;\n const grown = emboldenGlyphD(d, g.resolved)?.d ?? d;\n const s = g.fontSize;\n // Em space is y down, so a point above the baseline has negative y and leans toward +x.\n const shear = g.resolved.synthetic.italic ? Math.tan(SYNTHETIC_ITALIC_RADIANS) : 0;\n return transformPath(pathFromD(grown), [s, 0, -shear * s, s, g.x + dx, g.baselineY + dy]);\n}\n\n/** The glyph as a path command painted as its run paints it (or only stroked), or null when the source has no outline for it. */\nexport function outlineCommand(\n ctx: PageCtx,\n g: PlacedGlyph,\n cmd: TextDrawCommand,\n dx: number,\n dy: number,\n paint: 'all' | 'stroke' = 'all',\n): PathDrawCommand | null {\n const path = placedOutline(ctx, g, dx, dy);\n if (!path) return null;\n const run = cmd.runs[g.run];\n const out: PathDrawCommand = { kind: 'path', path };\n if (paint !== 'stroke' && fillHasInk(run.fill)) out.fill = run.fill as CommandFill;\n if (strokeHasInk(run.stroke)) out.stroke = run.stroke as CommandStroke;\n return out;\n}\n","import type { Path } from '@weasel-js/geom';\nimport {\n type CommandPaint,\n type CommandStroke,\n fillHasInk,\n isSolidPaint,\n type SolidPaint,\n strokeHasInk,\n} from '@weasel-js/paint';\nimport type { TextDrawCommand } from '@weasel-js/renderer';\nimport { type PlacedGlyph, SYNTHETIC_ITALIC_RADIANS, syntheticBoldOffset } from '@weasel-js/text';\nimport { solidColor } from './color';\nimport { type DrawState, type PageCtx, writeCommands } from './drawCommands';\nimport type { EmbeddedFont } from './fonts/embedFont';\nimport { num } from './num';\nimport { isNative, resolveStroke, strokeStyleOps } from './strokeOps';\nimport { isSpace, outlineCommand, skipGlyph } from './textOutlines';\n\n/** Glyphs one text object draws: one line, run, face, size and baseline. */\nexport interface TextSegment {\n font: EmbeddedFont;\n line: number;\n glyphs: { g: PlacedGlyph; gid: number }[];\n}\n\nconst FILL = 0;\nconst STROKE = 1;\nconst FILL_STROKE = 2;\nconst INVISIBLE = 3;\nconst CLIP = 7;\nconst JOINS = { miter: 0, round: 1 } as const;\n/** `growRegion`'s default, which synthetic bold grows with; both limits are miter length over half-width. */\nconst BOLD_MITER_LIMIT = 4;\n\n/**\n * A rect over every glyph's ink, for the shading and soft mask a gradient fill needs bounds for.\n * An em past each slot on every side covers any glyph the face draws, oblique ones included.\n */\nfunction inkBox(seg: TextSegment, dx: number, dy: number): Path {\n const { fontSize: s, baselineY } = seg.glyphs[0].g;\n let x0 = Infinity;\n let x1 = -Infinity;\n for (const { g } of seg.glyphs) {\n x0 = Math.min(x0, g.x);\n x1 = Math.max(x1, g.x + g.advance);\n }\n return { kind: 'rect', x: x0 + dx - s, y: baselineY + dy - 1.5 * s, width: x1 - x0 + 2 * s, height: 2.5 * s };\n}\n\n/**\n * `BT … ET` for the segment: its glyphs at their laid-out x, the gap between what the font\n * advances and what the layout stepped written as a TJ adjustment.\n */\nfunction textObject(ctx: PageCtx, seg: TextSegment, mode: number, dx: number, dy: number): void {\n const { out } = ctx;\n const first = seg.glyphs[0].g;\n const s = first.fontSize;\n const shear = first.resolved.synthetic.italic ? Math.tan(SYNTHETIC_ITALIC_RADIANS) : 0;\n out.op('BT');\n out.op('Tf', `/${ctx.resources.font(seg.font.ref)}`, 1);\n if (mode !== FILL) out.op('Tr', mode);\n // Glyph space is y up and the frame is y down, so d is negative; c leans the tops toward +x.\n out.op('Tm', s, 0, s * shear, -s, first.x + dx, first.baselineY + dy);\n const parts: string[] = [];\n let hex = '';\n let pen = 0;\n for (const { g, gid } of seg.glyphs) {\n const adjust = num((pen - (g.x - first.x) / s) * 1000);\n if (adjust !== '0') {\n if (hex) parts.push(`<${hex}>`);\n hex = '';\n parts.push(adjust);\n pen -= Number(adjust) / 1000;\n }\n hex += gid.toString(16).toUpperCase().padStart(4, '0');\n pen += seg.font.widthOf(gid) / 1000;\n }\n parts.push(`<${hex}>`);\n out.op('TJ', `[${parts.join(' ')}]`);\n out.op('ET');\n}\n\n/** Paints the segment's glyphs from their outlines: all of the run's paint, or only its stroke. */\nasync function paintOutlines(\n ctx: PageCtx,\n seg: TextSegment,\n cmd: TextDrawCommand,\n dx: number,\n dy: number,\n state: DrawState,\n paint: 'all' | 'stroke',\n): Promise<void> {\n for (const { g } of seg.glyphs) {\n if (isSpace(g.cp)) continue;\n const outline = outlineCommand(ctx, g, cmd, dx, dy, paint);\n if (outline) await writeCommands(ctx, [outline], state);\n else skipGlyph(ctx, g, 'has no outline to paint its ink with');\n }\n}\n\n/** Selectable text that paints nothing, under ink drawn from the glyphs' outlines. */\nasync function writeOutlinedInk(ctx: PageCtx, seg: TextSegment, cmd: TextDrawCommand, dx: number, dy: number, state: DrawState) {\n ctx.out.op('q');\n textObject(ctx, seg, INVISIBLE, dx, dy);\n ctx.out.op('Q');\n await paintOutlines(ctx, seg, cmd, dx, dy, state, 'all');\n}\n\n/** Writes one segment as text, painted the way its run paints it. */\nexport async function writeSegment(\n ctx: PageCtx,\n seg: TextSegment,\n cmd: TextDrawCommand,\n dx: number,\n dy: number,\n state: DrawState,\n): Promise<void> {\n const first = seg.glyphs[0].g;\n const run = cmd.runs[first.run];\n const fill = fillHasInk(run.fill) ? (run.fill!.paint as CommandPaint) : undefined;\n const box = inkBox(seg, dx, dy);\n const rawStroke = strokeHasInk(run.stroke) ? (run.stroke as CommandStroke & { paint: CommandPaint }) : undefined;\n const stroke = rawStroke && resolveStroke(box, rawStroke, state);\n const nativeStroke = stroke && isNative(stroke.stroke, stroke.width) && isSolidPaint(stroke.stroke.paint);\n const solidFill = !fill || isSolidPaint(fill);\n const bold = syntheticBoldOffset(first.resolved);\n const fillColor = fill && isSolidPaint(fill) ? solidColor(fill, state) : undefined;\n // A text object paints a fill-and-stroke glyph twice, which only matches a grown outline when opaque.\n const boldInText = bold && !stroke && solidFill && fillColor!.alpha >= 1;\n if ((stroke && !nativeStroke) || (bold && !boldInText)) return writeOutlinedInk(ctx, seg, cmd, dx, dy, state);\n\n const { out } = ctx;\n if (!solidFill) {\n out.op('q');\n textObject(ctx, seg, CLIP, dx, dy);\n await writeCommands(ctx, [{ kind: 'path', path: box, fill: { paint: fill } }], state);\n out.op('Q');\n // A second text object would be extracted as a second copy of the text.\n if (stroke) await paintOutlines(ctx, seg, cmd, dx, dy, state, 'stroke');\n return;\n }\n const strokeColor = nativeStroke ? solidColor(stroke.stroke.paint as SolidPaint, state) : undefined;\n const paintsFill = fillColor;\n if (!paintsFill && !strokeColor) return;\n out.op('q');\n out.op('gs', `/${ctx.resources.extGState(paintsFill ? fillColor.alpha : 1, strokeColor?.alpha ?? fillColor?.alpha ?? 1)}`);\n if (paintsFill) out.op('rg', ...fillColor.rgb);\n if (stroke && strokeColor) {\n out.op('RG', ...strokeColor.rgb);\n strokeStyleOps(ctx, stroke.stroke, stroke.width);\n } else if (bold && fillColor) {\n out.op('RG', ...fillColor.rgb);\n // The growth is per side and a stroke straddles the outline, so the line is twice it.\n out.op('w', 2 * bold.growth * first.fontSize);\n out.op('j', JOINS[bold.join]);\n out.op('M', BOLD_MITER_LIMIT);\n }\n textObject(ctx, seg, paintsFill ? (strokeColor || bold ? FILL_STROKE : FILL) : STROKE, dx, dy);\n out.op('Q');\n}\n","import type { CommandFill } from '@weasel-js/paint';\nimport { fillHasInk, strokeHasInk } from '@weasel-js/paint';\nimport type { PathDrawCommand, TextDrawCommand } from '@weasel-js/renderer';\nimport {\n cachedLayoutRuns,\n cachedPaintRuns,\n type PlacedGlyph,\n resolveTextStyle,\n verticalAlignOffset,\n} from '@weasel-js/text';\nimport { type DrawState, type PageCtx, writeCommands } from './drawCommands';\nimport { isSpace, outlineCommand, skipGlyph } from './textOutlines';\nimport { type TextSegment, writeSegment } from './textSegment';\n\n/** Code points that hold a slot and never ink: they advance and are left out silently. */\nconst BLANK = /^[\\s\\p{Default_Ignorable_Code_Point}]$/u;\n\n/** Whether `g` can join `seg`: one text object holds one line, run, face, size and baseline. */\nfunction joins(seg: TextSegment | undefined, g: PlacedGlyph, line: number): seg is TextSegment {\n if (!seg || seg.line !== line) return false;\n const a = seg.glyphs[0].g;\n const [ra, rg] = [a.resolved, g.resolved];\n return (\n a.run === g.run &&\n a.fontSize === g.fontSize &&\n a.baselineY === g.baselineY &&\n ra.source === rg.source &&\n ra.resolved.family === rg.resolved.family &&\n ra.resolved.weight === rg.resolved.weight &&\n ra.resolved.style === rg.resolved.style &&\n ra.synthetic.bold === rg.synthetic.bold &&\n ra.synthetic.italic === rg.synthetic.italic\n );\n}\n\n/**\n * Writes a text command as PDF text in its embedded faces, laid out exactly as `drawText`\n * lays it out. A glyph whose face cannot embed is drawn as its outline; one nothing can draw\n * is reported and left out, and the glyphs after it keep their laid-out positions.\n */\nexport async function writeText(ctx: PageCtx, cmd: TextDrawCommand, state: DrawState): Promise<void> {\n const style = resolveTextStyle(cmd.style);\n const laid = cachedLayoutRuns(cmd.runs, {\n maxWidth: cmd.maxWidth ?? Infinity,\n alignWidth: cmd.width,\n lineHeight: style.lineHeight,\n align: cmd.align ?? style.align,\n direction: cmd.direction ?? style.direction,\n tabSize: style.tabSize,\n justify: cmd.justify,\n });\n const dx = cmd.x;\n const dy = cmd.y + verticalAlignOffset(cmd.verticalAlign, cmd.height, laid.bounds.height);\n\n const items: (TextSegment | PathDrawCommand)[] = [];\n let seg: TextSegment | undefined;\n for (const [line, box] of laid.lines.entries()) {\n for (const g of box.glyphs) {\n const run = cmd.runs[g.run];\n if (!fillHasInk(run.fill) && !strokeHasInk(run.stroke)) continue;\n const space = isSpace(g.cp);\n if (!space && BLANK.test(String.fromCodePoint(g.cp))) continue;\n // A slot the layout left empty has no width, so drawing into it would land on its neighbor.\n if (!space && (g.glyph?.color || (g.resolved.source !== 'outline' && g.glyph === null))) {\n skipGlyph(ctx, g, 'has no glyph to draw');\n continue;\n }\n const { family, weight, style: fontStyle } = g.resolved.resolved;\n const font = await ctx.fonts.face(family, weight, fontStyle);\n const gid = font?.use(g.cp) ?? null;\n if (font && gid !== null) {\n if (!joins(seg, g, line)) items.push((seg = { font, line, glyphs: [] }));\n seg.glyphs.push({ g, gid });\n continue;\n }\n if (space) continue;\n const outline = outlineCommand(ctx, g, cmd, dx, dy);\n if (outline) items.push(outline);\n else skipGlyph(ctx, g, 'has no glyph to draw');\n }\n }\n\n for (const item of items) {\n if ('kind' in item) await writeCommands(ctx, [item], state);\n else await writeSegment(ctx, item, cmd, dx, dy, state);\n }\n\n const { decorations } = cachedPaintRuns(laid, cmd.runs, {});\n const rules: PathDrawCommand[] = decorations.map((d) => ({\n kind: 'path',\n path: { kind: 'rect', x: d.x0 + dx, y: d.y0 + dy, width: d.x1 - d.x0, height: d.y1 - d.y0 },\n fill: d.fill as CommandFill,\n }));\n await writeCommands(ctx, rules, state);\n}\n","import { type GlMat3, mat3 } from '@weasel-js/geom';\nimport { type CommandPaint, isGradientPaint, isSolidPaint } from '@weasel-js/paint';\nimport type { DrawCommand, PathDrawCommand } from '@weasel-js/renderer';\nimport { solidColor } from './color';\nimport type { ContentStream } from './content';\nimport type { DocumentFonts } from './fonts/embedFont';\nimport { rasterFill, writeGroup, writeShader } from './groupOps';\nimport { type TextureFill, texturePattern, writeImage } from './images';\nimport type { PdfObjects } from './objects';\nimport { NonFiniteNumber } from './num';\nimport { fillPathOps } from './pathOps';\nimport type { PageResources } from './resources';\nimport { paintShading } from './shading';\nimport { writeStroke } from './strokeOps';\nimport { writeText } from './textOps';\nimport type { PdfSkip, WritePdfOptions } from './writePdf';\n\nexport interface DrawState {\n transform: GlMat3;\n alpha: number;\n colorMatrix: number[] | null;\n}\n\nexport interface PageCtx {\n objects: PdfObjects;\n resources: PageResources;\n out: ContentStream;\n opts: WritePdfOptions;\n fonts: DocumentFonts;\n skipped: PdfSkip[];\n view: GlMat3 | undefined;\n /** The page's width in points. */\n width: number;\n /** The page's height in points, which a pattern's matrix needs to undo the page flip. */\n height: number;\n}\n\nexport function skip(ctx: PageCtx, detail: string): void {\n ctx.skipped.push({ kind: 'command', detail });\n}\n\n/** The page's default space from its y-down frame, origin top left: the matrix every content stream opens with. */\nexport function pageFlip(ctx: { height: number }): GlMat3 {\n return mat3.fromAffine([1, 0, 0, -1, 0, ctx.height]);\n}\n\nfunction setAlpha(ctx: PageCtx, fill: number, stroke: number): void {\n ctx.out.op('gs', `/${ctx.resources.extGState(fill, stroke)}`);\n}\n\nfunction writeShadedFill(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState, paint: CommandPaint): void {\n const sh = paintShading(ctx, paint, state, cmd.path);\n if (!sh) return;\n const { out } = ctx;\n out.op('q');\n out.op(fillPathOps(out, cmd.path) ? 'W*' : 'W');\n out.op('n');\n if (sh.alpha < 1) setAlpha(ctx, sh.alpha, sh.alpha);\n if (sh.matrix) out.op('cm', ...mat3.toAffine(sh.matrix));\n if (sh.softMask) out.op('gs', `/${sh.softMask}`);\n out.op('sh', `/${sh.shading}`);\n out.op('Q');\n}\n\nfunction writeTextureFill(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState, paint: TextureFill): void {\n const pattern = texturePattern(ctx, paint, state);\n if (!pattern) return skip(ctx, `texture ${paint.texture.id} cannot be drawn`);\n const alpha = (paint.opacity ?? 1) * state.alpha;\n const { out } = ctx;\n out.op('q');\n setAlpha(ctx, alpha, alpha);\n out.op('cs', '/Pattern');\n out.op('scn', `/${pattern}`);\n out.op(fillPathOps(out, cmd.path) ? 'f*' : 'f');\n out.op('Q');\n}\n\nasync function writeFill(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState): Promise<void> {\n const paint = cmd.fill?.paint;\n if (!paint) return;\n if (isGradientPaint(paint)) return writeShadedFill(ctx, cmd, state, paint);\n if (paint.kind === 'texture') return writeTextureFill(ctx, cmd, state, paint);\n // A registered paint kind, which the paint union does not name.\n if (!isSolidPaint(paint)) return rasterFill(ctx, cmd, state, (paint as { kind: string }).kind);\n if (cmd.vertexColors?.length) skip(ctx, 'fill vertexColors approximated by the solid fill');\n const { rgb, alpha } = solidColor(paint, state);\n const { out } = ctx;\n out.op('q');\n setAlpha(ctx, alpha, alpha);\n out.op('rg', ...rgb);\n out.op(fillPathOps(out, cmd.path) ? 'f*' : 'f');\n out.op('Q');\n}\n\nasync function writePath(ctx: PageCtx, cmd: PathDrawCommand, state: DrawState): Promise<void> {\n await writeFill(ctx, cmd, state);\n if (cmd.stroke) await writeStroke(ctx, cmd.path, cmd.stroke, state);\n}\n\nasync function writeCommand(ctx: PageCtx, cmd: DrawCommand, state: DrawState): Promise<void> {\n if (cmd.kind === 'path') await writePath(ctx, cmd, state);\n else if (cmd.kind === 'group') await writeGroup(ctx, cmd, state);\n else if (cmd.kind === 'image' || cmd.kind === 'sprites') writeImage(ctx, cmd, state);\n else if (cmd.kind === 'text') await writeText(ctx, cmd, state);\n else await writeShader(ctx, cmd, state);\n}\n\n/** Writes each command; one holding a number PDF cannot write is dropped whole and reported. */\nexport async function writeCommands(ctx: PageCtx, cmds: readonly DrawCommand[], state: DrawState): Promise<void> {\n for (const cmd of cmds) {\n const line = ctx.out.mark();\n const object = ctx.objects.mark();\n const skips = ctx.skipped.length;\n try {\n await writeCommand(ctx, cmd, state);\n } catch (err) {\n if (!(err instanceof NonFiniteNumber)) throw err;\n ctx.out.rollback(line);\n ctx.objects.nullUnset(object);\n ctx.skipped.length = skips;\n skip(ctx, `${cmd.kind} has a non-finite coordinate`);\n }\n }\n}\n","const MAX_PER_BLOCK = 100;\n\nconst hex4 = (n: number) => n.toString(16).toUpperCase().padStart(4, '0');\n\nfunction utf16Hex(cp: number): string {\n if (cp <= 0xffff) return hex4(cp);\n const v = cp - 0x10000;\n return hex4(0xd800 + (v >> 10)) + hex4(0xdc00 + (v & 0x3ff));\n}\n\n/** A ToUnicode CMap for a two-byte identity-encoded font: glyph id to the codepoint it was drawn for. */\nexport function toUnicodeCMap(glyphs: ReadonlyMap<number, number>): string {\n const entries = [...glyphs].sort((a, b) => a[0] - b[0]);\n const lines = [\n '/CIDInit /ProcSet findresource begin',\n '12 dict begin',\n 'begincmap',\n '/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def',\n '/CMapName /Adobe-Identity-UCS def',\n '/CMapType 2 def',\n '1 begincodespacerange',\n '<0000> <FFFF>',\n 'endcodespacerange',\n ];\n for (let i = 0; i < entries.length; i += MAX_PER_BLOCK) {\n const block = entries.slice(i, i + MAX_PER_BLOCK);\n lines.push(`${block.length} beginbfchar`);\n for (const [gid, cp] of block) lines.push(`<${hex4(gid)}> <${utf16Hex(cp)}>`);\n lines.push('endbfchar');\n }\n lines.push('endcmap', 'CMapName currentdict /CMap defineresource pop', 'end', 'end');\n return lines.join('\\n');\n}\n","import type { FaceEmbedding, FontStyle } from '@weasel-js/font';\nimport { name, type PdfObjects, type PdfRef, text } from '../objects';\nimport type { PdfFontSource } from './fontSource';\nimport { toUnicodeCMap } from './toUnicode';\n\nexport interface EmbeddedFont {\n /** The font object; throws until `use` has returned a glyph, so a page names only faces it draws with. */\n readonly ref: PdfRef;\n /** The glyph id for `cp`, recorded for `/W` and `/ToUnicode`; `null` when the face has no glyph for it. */\n use(cp: number): number | null;\n /** A glyph's advance in 1000/em units. */\n widthOf(gid: number): number;\n}\n\nconst encoder = new TextEncoder();\n\nfunction baseFontName(e: FaceEmbedding, family: string, weight: number, style: FontStyle): string {\n const safe = (s: string) => s.replace(/[^A-Za-z0-9._-]/g, '');\n return safe(e.postScriptName) || safe(`${family}-${weight}-${style}`);\n}\n\nclass Face implements EmbeddedFont {\n /** Glyph id to the first codepoint that asked for it. */\n readonly used = new Map<number, number>();\n private fontRef: PdfRef | undefined;\n private written = false;\n\n constructor(\n private readonly objects: PdfObjects,\n private readonly emb: FaceEmbedding,\n private readonly baseFont: string,\n ) {}\n\n get ref(): PdfRef {\n if (!this.fontRef) throw new Error('pdf: font ref read before any glyph was used');\n return this.fontRef;\n }\n\n use(cp: number): number | null {\n const gid = this.emb.glyphIndexOf(cp);\n if (gid === null || gid === 0) return null;\n if (!this.used.has(gid)) this.used.set(gid, cp);\n this.fontRef ??= this.objects.alloc();\n return gid;\n }\n\n widthOf(gid: number): number {\n return Math.round((this.emb.advanceOfGlyph(gid) * 1000) / this.emb.unitsPerEm);\n }\n\n write(): void {\n if (this.written || !this.fontRef) return;\n this.written = true;\n const { objects, emb } = this;\n const k = 1000 / emb.unitsPerEm;\n const file = objects.alloc();\n const descriptor = objects.alloc();\n const cid = objects.alloc();\n const toUnicode = objects.alloc();\n objects.streamDeflated(file, { Length1: emb.sfnt.byteLength }, new Uint8Array(emb.sfnt));\n objects.streamDeflated(toUnicode, {}, encoder.encode(toUnicodeCMap(this.used)));\n objects.set(descriptor, {\n Type: name('FontDescriptor'),\n FontName: name(this.baseFont),\n Flags: 4,\n FontBBox: emb.bbox.map((v, i) => (i < 2 ? Math.floor(v * k) : Math.ceil(v * k))),\n ItalicAngle: emb.italicAngle,\n Ascent: Math.round(emb.ascent * k),\n Descent: Math.round(emb.descent * k),\n CapHeight: Math.round(emb.capHeight * k),\n StemV: 80, // required by the spec, advisory for TrueType\n FontFile2: file,\n });\n const widths: (number | number[])[] = [];\n for (const gid of [...this.used.keys()].sort((a, b) => a - b)) widths.push(gid, [this.widthOf(gid)]);\n objects.set(cid, {\n Type: name('Font'),\n Subtype: name('CIDFontType2'),\n BaseFont: name(this.baseFont),\n CIDSystemInfo: { Registry: text('Adobe'), Ordering: text('Identity'), Supplement: 0 },\n FontDescriptor: descriptor,\n CIDToGIDMap: name('Identity'),\n W: widths,\n });\n objects.set(this.fontRef, {\n Type: name('Font'),\n Subtype: name('Type0'),\n BaseFont: name(this.baseFont),\n Encoding: name('Identity-H'),\n DescendantFonts: [cid],\n ToUnicode: toUnicode,\n });\n }\n}\n\n/** One document's embedded fonts: each face is written once, with `/W` and `/ToUnicode` covering the glyphs used. */\nexport class DocumentFonts {\n private readonly faces = new Map<string, Promise<Face | null>>();\n\n constructor(\n private readonly objects: PdfObjects,\n private readonly source: PdfFontSource,\n ) {}\n\n /** The embedded font for a face, or null to draw its glyphs as outlines. */\n face(family: string, weight: number, style: FontStyle): Promise<EmbeddedFont | null> {\n const key = JSON.stringify([family, weight, style]);\n let p = this.faces.get(key);\n if (!p) {\n p = this.load(family, weight, style);\n this.faces.set(key, p);\n }\n return p;\n }\n\n private async load(family: string, weight: number, style: FontStyle): Promise<Face | null> {\n let emb: FaceEmbedding | null;\n try {\n emb = await this.source.embedding(family, weight, style);\n } catch {\n return null;\n }\n if (!emb || emb.outlines !== 'truetype' || !emb.embeddable) return null;\n return new Face(this.objects, emb, baseFontName(emb, family, weight, style));\n }\n\n /** Writes every face's objects; call before `PdfObjects.settle`. */\n async finish(): Promise<void> {\n for (const p of this.faces.values()) (await p)?.write();\n }\n}\n","import { type GlMat3, mat3 } from '@weasel-js/geom';\nimport type { DrawCommand } from '@weasel-js/renderer';\nimport { ContentStream } from './content';\nimport { deflate as zlibDeflate } from './deflate';\nimport { type PageCtx, pageFlip, writeCommands } from './drawCommands';\nimport { DocumentFonts } from './fonts/embedFont';\nimport type { PdfFontSource } from './fonts/fontSource';\nimport { type Deflater, name, PdfObjects, type PdfRef, text } from './objects';\nimport { PageResources } from './resources';\n\n/** An axis-aligned rectangle in page units. */\nexport type Rect = { x: number; y: number; width: number; height: number };\n\n/** One page of the document: its size in points and the draw commands painted onto it. */\nexport interface PdfPage {\n width: number;\n height: number;\n commands: readonly DrawCommand[];\n view?: GlMat3;\n}\n\n/** A decoded bitmap handed back by the host, for images and paints the PDF cannot express directly. */\nexport interface RasterPixels {\n width: number;\n height: number;\n /** Straight RGBA, top-down. */\n data: Uint8ClampedArray;\n}\n\n/** Settings and host callbacks for `writePdf`; only `fonts` is required. */\nexport interface WritePdfOptions {\n fonts: PdfFontSource;\n title?: string;\n /** Default true; unit tests pass false because jsdom realms lack `CompressionStream`. */\n compress?: boolean;\n readPixels?: (image: ImageBitmap | HTMLImageElement) => RasterPixels;\n /** `view` is the page's `PdfPage.view`: what a `world`-unit paint in `commands` resolves through. */\n rasterize?: (commands: readonly DrawCommand[], rect: Rect, scale: number, view: GlMat3 | undefined) => Promise<RasterPixels>;\n}\n\n/** A glyph or command the writer left out of the file, with the reason. */\nexport interface PdfSkip {\n kind: 'glyph' | 'command';\n detail: string;\n}\n\n/** The finished file and everything the writer had to leave out of it. */\nexport interface PdfResult {\n bytes: Uint8Array;\n skipped: readonly PdfSkip[];\n}\n\n/** One PDF page per entry of `pages`, which must hold at least one. */\nexport function writePdf(pages: readonly PdfPage[], opts: WritePdfOptions): Promise<PdfResult> {\n return writePdfWith(pages, opts, zlibDeflate);\n}\n\n/** `writePdf` with its compressor supplied; tests use it where `CompressionStream` is missing. Not re-exported by the package. */\nexport async function writePdfWith(\n pages: readonly PdfPage[],\n opts: WritePdfOptions,\n deflate: Deflater,\n): Promise<PdfResult> {\n if (pages.length === 0) throw new Error('pdf: a document needs at least one page');\n const objects = new PdfObjects();\n const catalog = objects.alloc();\n const tree = objects.alloc();\n const info = objects.alloc();\n const skipped: PdfSkip[] = [];\n const kids: PdfRef[] = [];\n const fonts = new DocumentFonts(objects, opts.fonts);\n\n for (const page of pages) {\n const pageRef = objects.alloc();\n const contentRef = objects.alloc();\n const ctx: PageCtx = {\n objects,\n resources: new PageResources(),\n out: new ContentStream(),\n opts,\n fonts,\n skipped,\n view: page.view,\n width: page.width,\n height: page.height,\n };\n // Page units are points, origin top left, y down.\n ctx.out.op('cm', ...mat3.toAffine(pageFlip(page)));\n await writeCommands(ctx, page.commands, { transform: mat3.identity(), alpha: 1, colorMatrix: null });\n const raw = ctx.out.bytes();\n objects.streamDeflated(contentRef, {}, raw);\n objects.set(pageRef, {\n Type: name('Page'),\n Parent: tree,\n MediaBox: [0, 0, page.width, page.height],\n Contents: contentRef,\n Resources: ctx.resources.dict(),\n });\n kids.push(pageRef);\n }\n\n objects.set(catalog, { Type: name('Catalog'), Pages: tree });\n objects.set(tree, { Type: name('Pages'), Kids: kids, Count: kids.length });\n objects.set(info, { Producer: text('weasel'), Title: opts.title === undefined ? undefined : text(opts.title) });\n await fonts.finish();\n await objects.settle(opts.compress !== false, deflate);\n return { bytes: objects.serialize(catalog, info), skipped };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,52 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weasel-js/pdf",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "1.11.1",
|
|
4
|
+
"description": "PDF documents from weasel draw commands: vector paths, shadings, images, and embedded fonts with selectable text. No scene graph, no React.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"module": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
},
|
|
16
|
+
"./package.json": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"test": "vitest run",
|
|
20
|
+
"build": "tsup"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@weasel-js/font": "1.11.1",
|
|
24
|
+
"@weasel-js/geom": "1.11.1",
|
|
25
|
+
"@weasel-js/paint": "1.11.1",
|
|
26
|
+
"@weasel-js/renderer": "1.11.1",
|
|
27
|
+
"@weasel-js/stroke": "1.11.1",
|
|
28
|
+
"@weasel-js/text": "1.11.1"
|
|
29
|
+
},
|
|
30
|
+
"author": "orochi235",
|
|
31
|
+
"homepage": "https://orochi235.github.io/weasel/",
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/orochi235/weasel.git",
|
|
35
|
+
"directory": "packages/pdf"
|
|
36
|
+
},
|
|
37
|
+
"bugs": {
|
|
38
|
+
"url": "https://github.com/orochi235/weasel/issues"
|
|
39
|
+
},
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=22"
|
|
42
|
+
},
|
|
43
|
+
"files": [
|
|
44
|
+
"dist",
|
|
45
|
+
"README.md",
|
|
46
|
+
"LICENSE"
|
|
47
|
+
],
|
|
48
|
+
"publishConfig": {
|
|
49
|
+
"access": "public",
|
|
50
|
+
"provenance": true
|
|
51
|
+
}
|
|
52
|
+
}
|