gralha-svg-render Releases (2): 0.1.0.1 0xa695057c6a3562ac094940eedd9649df indexed https://jend.leeeet.dev/files.txt?path=gralha-svg-render@0.1.0.1 0.1.0.0 0x7f742f88d400d7dfabd2906476966aa4 invalid https://jend.leeeet.dev/files.txt?path=gralha-svg-render@0.1.0.0 expected a package named gralha-xml-doc@0.1.0.0 on https://hub.bend-lang.com At https://jend.leeeet.dev/read.txt?path=gralha-svg-render@0.1.0.0/svg.bend&start_line=4. Files that do not load: svg.bend. Definitions (947, 1 to 100 shown): Svg.length.go (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=length.go) def length.go(s: String, acc: U32) -> U32: Svg.length (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=length) def length(s: String) -> U32: Svg.Matrix (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=Matrix) # Affine transforms, composed in SVG's column - vector order. type Matrix is Data: Matrix{a: F32, b: F32, c: F32, d: F32, e: F32, f: F32} Svg.identity (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=identity) def identity() -> Matrix: Svg.matrix.mul (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=matrix.mul) def matrix.mul(+m: Matrix, +n: Matrix) -> Matrix: Svg.matrix.inverse.values (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=matrix.inverse.values) def matrix.inverse.values(+m: Matrix, +det: F32) -> Matrix: Svg.matrix.inverse (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=matrix.inverse) def matrix.inverse(+m: Matrix) -> Matrix: Svg.Point (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=Point) type Point is Data: Point{x: F32, y: F32} Svg.matrix.point (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=matrix.point) def matrix.point(+m: Matrix, +p: Point) -> Point: Svg.translate (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=translate) def translate(x: F32, y: F32) -> Matrix: Svg.scale (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=scale) def scale(x: F32, y: F32) -> Matrix: Svg.rotate (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=rotate) def rotate(+angle: F32) -> Matrix: Svg.transform.one (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=transform.one) def transform.one(+name: String, +v: List<&2, F32>) -> Matrix: Svg.transform.args (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=transform.args) def transform.args(n: String, s: U.Scan, m: Matrix, next: String -> Matrix -> Matrix) -> Matrix: Svg.transform.name (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=transform.name) def transform.name(s: U.Scan, m: Matrix, next: String -> Matrix -> Matrix) -> Matrix: Svg.transform (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=transform) def transform(+s: String, +m: Matrix) -> Matrix: Svg.Edge (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=Edge) # Paths are flattened in user coordinates. The fill-only closing edge of an # open subpath is kept separate from its stroked edges. # An edge is one heap node: its endpoints are stored as four numbers, so # building, walking and freeing edge lists touch half the nodes a pair of # points would. type Edge is Data: Edge{x0: F32, y0: F32, x1: F32, y1: F32, stroke: Bool, closed: Bool} Svg.edge.of (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=edge.of) def edge.of(a: Point, b: Point, stroke: Bool, closed: Bool) -> Edge: Svg.Cover (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=Cover) # ---- analytic coverage ---- # A cover is a pixel-space coverage mask (see cover.bend) together with the raster # grid it was built for, so device points map straight to its cells. type Cover is Data: Cover{mask: Cov.CovMask, origin: Point, step: F32} Svg.cover.none (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=cover.none) def cover.none() -> Cover: Svg.cover.present (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=cover.present) def cover.present(+c: Cover) -> Bool: Svg.cover.at (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=cover.at) def cover.at(+c: Cover, +p: Point) -> F32: Svg.point.add (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=point.add) def point.add(p: Point, q: Point) -> Point: Svg.point.sub (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=point.sub) def point.sub(p: Point, q: Point) -> Point: Svg.point.scale (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=point.scale) def point.scale(p: Point, +s: F32) -> Point: Svg.point.dot (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=point.dot) def point.dot(p: Point, q: Point) -> F32: Svg.point.mid (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=point.mid) def point.mid(p: Point, q: Point) -> Point: Svg.point.distance (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=point.distance) def point.distance(+p: Point, +q: Point) -> F32: Svg.flat.tolerance (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=flat.tolerance) # Curves are flattened to a tolerance measured in device pixels (converted to # local units through the element's matrix by the caller), so a curve gets as # many segments as the output size needs and no more. def flat.tolerance() -> F32: Svg.matrix.norm (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=matrix.norm) # The largest scale the matrix applies to any direction, bounded by its # Frobenius norm; local tolerance = pixel tolerance / scale. def matrix.norm(+m: Matrix) -> F32: Svg.local.tolerance (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=local.tolerance) # scale is the device pixels per unit of the frame m maps into (1 when m # maps to the device, the tile's density for pattern content). def local.tolerance(+m: Matrix, +scale: F32) -> F32: Svg.chord.cross (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=chord.cross) def chord.cross(p: Point, q: Point) -> F32: Svg.chord.near (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=chord.near) # Whether x lies within tol of the chord pq: at most tol from its line and # not beyond either end by more than tol. def chord.near(+p: Point, +q: Point, +x: Point, +tol: F32) -> Bool: Svg.cubic.flat (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=cubic.flat) # A cubic's distance from its chord is 3t(1-t) times a mix of its control # points' distances, at most three quarters of the larger, so the curve is # within tol when both control points are within 4/3 tol. def cubic.flat(+p: Point, +a: Point, +b: Point, +q: Point, +tol: F32) -> Bool: Svg.cubic.count (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=cubic.count) # Wang's bound: a cubic cut into n equal parameter steps stays within e of # its chords when n >= sqrt(3/4 * L / e), L the larger second difference of # the control points. The bound assumes the curvature all sits in one place, # so the tolerance is doubled to land near the adaptive count; the count is # fixed up front and each point costs one evaluation and no flatness test. def cubic.count(+p: Point, +a: Point, +b: Point, +q: Point, +tol: F32) -> U32: Svg.cubic.at (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=cubic.at) def cubic.at(+p: Point, +a: Point, +b: Point, +q: Point, +t: F32) -> Point: Svg.cubic.go (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=cubic.go) def cubic.go(+n: Nat, +i: F32, +step: F32, +p: Point, +a: Point, +b: Point, +q: Point, +prev: Point, +edges: List<&2, Edge>) -> List<&2, Edge>: Svg.cubic (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=cubic) def cubic(+p: Point, +a: Point, +b: Point, +q: Point, +edges: List<&2, Edge>, +tol: F32) -> List<&2, Edge>: Svg.PathNext (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=PathNext) # What follows a command's numbers, scanned one step ahead: `kind` is 0 at # the end of the data, 1 at a letter, 2 at a number repeating the pending # command, 3 at anything else. type PathNext is Data: PathNext{kind: U32, ch: U32, rest: String} Svg.Params (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=Params) type Params is Data: Params{valid: Bool, values: List<&2, F32>, next: PathNext} Svg.path.letter (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.letter) def path.letter(+ch: U32) -> Bool: Svg.path.next (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.next) def path.next(s: String, +cmd: U32) -> PathNext: Svg.floats.rev (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=floats.rev) def floats.rev(xs: List<&2, F32>, acc: List<&2, F32>) -> List<&2, F32>: Svg.arc.flag (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=arc.flag) def arc.flag(+s: String) -> U.Number: Svg.args.number.pick (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=args.number.pick) def args.number.pick(flag: Bool, s: String) -> U.Number: Svg.args.number (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=args.number) # The arguments are counted down; an arc's flags are the 4th and 3rd from its end. def args.number(+n: Nat, s: String, +arc: Bool) -> U.Number: Svg.path.args (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.args) def path.args(num: U.Number, +n: Nat, acc: List<&2, F32>, +arc: Bool, +cmd: U32) -> Params: Svg.path.arguments (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.arguments) def path.arguments(+n: Nat, s: String, +arc: Bool, +cmd: U32) -> Params: Svg.MarkerSegment (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=MarkerSegment) # Preserve source segment endpoints and analytic tangents only when requested. type MarkerSegment is Data: MarkerSegment{p: Point, q: Point, outgoing: Point, incoming: Point, kind: U32} Svg.marker.segment (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=marker.segment) def marker.segment(trace: Maybe<&2, List<&2, MarkerSegment>>, segment: MarkerSegment) -> Maybe<&2, List<&2, MarkerSegment>>: Svg.marker.nonzero (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=marker.nonzero) def marker.nonzero(+v: Point) -> Bool: Svg.marker.vector (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=marker.vector) def marker.vector(+a: Point, b: Point) -> Point: Svg.marker.cubic (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=marker.cubic) def marker.cubic(+p: Point, +a: Point, +b: Point, +q: Point) -> MarkerSegment: Svg.marker.line (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=marker.line) def marker.line(+p: Point, +q: Point, kind: U32) -> MarkerSegment: Svg.marker.arc.tangent (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=marker.arc.tangent) def marker.arc.tangent(+rx: F32, +ry: F32, +phi: F32, +theta: F32, +delta: F32) -> Point: Svg.Path (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=Path) type Path is Data: Path{current: Point, start: Point, control: Point, command: U32, previous: U32, edges: List<&2, Edge>, trace: Maybe<&2, List<&2, MarkerSegment>>, tolerance: F32} Svg.upper (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=upper) def upper(+c: U32) -> U32: Svg.relative (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=relative) def relative(+cmd: U32, +current: Point, p: Point) -> Point: Svg.path.move (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.move) def path.move(+p: Path, +q: Point, cmd: U32) -> Path: Svg.path.line (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.line) def path.line(+p: Path, +q: Point, +cmd: U32) -> Path: Svg.path.cubic (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.cubic) def path.cubic(+p: Path, +a: Point, +b: Point, +q: Point, +cmd: U32) -> Path: Svg.path.quad (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.quad) def path.quad(+p: Path, +a: Point, +q: Point, +cmd: U32) -> Path: Svg.path.close (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.close) def path.close(+p: Path) -> Path: Svg.path.h (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.h) def path.h(+cur: Point, +v: F32, cmd: U32) -> Point: Svg.path.v (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.v) def path.v(+cur: Point, +v: F32, cmd: U32) -> Point: Svg.arc.point (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=arc.point) # Endpoint-to-center conversion from SVG's elliptical arc implementation notes. def arc.point(+center: Point, +rx: F32, +ry: F32, +phi: F32, +t: F32) -> Point: Svg.arc.edges (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=arc.edges) def arc.edges(+n: Nat, +i: F32, +step: F32, +theta: F32, +center: Point, +rx: F32, +ry: F32, +phi: F32, +endpoint: Point, p: Point, edges: List<&2, Edge>) -> List<&2, Edge>: Svg.arc.draw (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=arc.draw) def arc.draw(+p: Path, +q: Point, +cmd: U32, +rx: F32, +ry: F32, +phi: F32, +center: Point, +theta: F32, +delta: F32) -> Path: Svg.arc.angles (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=arc.angles) def arc.angles(+p: Path, +q: Point, +cmd: U32, +rx: F32, +ry: F32, +phi: F32, +xp: F32, +yp: F32, +cx: F32, +cy: F32, +center: Point, sweep: F32) -> Path: Svg.arc.center (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=arc.center) def arc.center(+p: Path, +q: Point, +cmd: U32, +rx: F32, +ry: F32, +phi: F32, +xp: F32, +yp: F32, +coef: F32, sweep: F32) -> Path: Svg.arc.radii (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=arc.radii) def arc.radii(+p: Path, +q: Point, +cmd: U32, +rx: F32, +ry: F32, +phi: F32, +xp: F32, +yp: F32, +large: F32, +sweep: F32) -> Path: Svg.arc.prepare (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=arc.prepare) def arc.prepare(+p: Path, +q: Point, cmd: U32, rx: F32, ry: F32, +phi: F32, large: F32, sweep: F32, delta: Point) -> Path: Svg.path.arc (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.arc) def path.arc(+p: Path, +q: Point, +cmd: U32, +rx: F32, +ry: F32, phi: F32, large: F32, sweep: F32) -> Path: Svg.path.cursor (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.cursor) # The command's numbers are read by pattern, exactly as many as it takes; # the parser has already counted them. def path.cursor(p: Path) -> Point: Svg.path.smooth (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.smooth) # The reflected control point of a smooth curve after a curve of the same # kind (commands a or b), else the current point. def path.smooth(p: Path, +a: U32, +b: U32) -> Point: Svg.path.apply (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.apply) def path.apply(+p: Path, +cmd: U32, c: U32, vs: List<&2, F32>) -> Path: Svg.path.arity (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.arity) def path.arity(+c: U32) -> Nat: Svg.path.step (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.step) # A command applied to the path: 0 nothing (before the first command), # 1 a close, 2 a drawing command with its numbers. def path.step(kind: U32, p: Path, +cmd: U32, vs: List<&2, F32>) -> Path: Svg.path.follow (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.follow) # The command a bare number after `cmd` repeats: a move continues as a # line, a close as nothing (the parse ends), any other command as itself. def path.follow(+cmd: U32) -> U32: Svg.path.step.kind (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.step.kind) def path.step.kind(+cmd: U32) -> U32: Svg.path.run (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.run) def path.run(ps: Params, +cmd: U32, p: Path) -> Path: Svg.path.loop (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.loop) def path.loop(s: String, p: Path) -> Path: Svg.path.finish (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path.finish) def path.finish(+p: Path) -> List<&2, Edge>: Svg.path (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=path) def path(s: String, +tol: F32) -> List<&2, Edge>: Svg.edge.cross (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=edge.cross) # Geometry queries use half-open crossings, supporting both SVG fill rules. def edge.cross(+edge: Edge, +p: Point) -> F32: Svg.winding (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=winding) def winding(edges: List<&2, Edge>, +p: Point) -> F32: Svg.fill.inside (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=fill.inside) def fill.inside(edges: List<&2, Edge>, p: Point, even: Bool) -> Bool: Svg.edge.distance (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=edge.distance) def edge.distance(+e: Edge, +p: Point) -> F32: Svg.stroke.inside (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=stroke.inside) def stroke.inside(edges: List<&2, Edge>, +p: Point, +radius: F32) -> Bool: Svg.Bounds (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=Bounds) type Bounds is Data: Bounds{x0: F32, y0: F32, x1: F32, y1: F32} Svg.bounds.point (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=bounds.point) def bounds.point(+b: Bounds, +p: Point) -> Bounds: Svg.bounds.at (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=bounds.at) def bounds.at(+b: Bounds, +x: F32, +y: F32) -> Bounds: Svg.bounds (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=bounds) def bounds(edges: List<&2, Edge>, box: Bounds) -> Bounds: Svg.bounds.inside (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=bounds.inside) def bounds.inside(b: Bounds, +p: Point, +margin: F32) -> Bool: Svg.inflate (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=inflate) def inflate(+data: Bin.Bytes, limit: U32) -> Bin.Inflate: Svg.color.fade (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=color.fade) def color.fade(c: Img.Color, +opacity: F32) -> Img.Color: Svg.color.over (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=color.over) def color.over(+front: Img.Color, back: Img.Color) -> Img.Color: Svg.color.add (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=color.add) def color.add(c: Img.Color, d: Img.Color) -> Img.Color: Svg.byte (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=byte) def byte(+x: U32, n: U32) -> F32: Svg.Raster (https://jend.leeeet.dev/definition.txt?path=gralha-svg-render@0.1.0.1/svg.bend&name=Raster) type Raster is Data: Raster{origin: Point, step: F32, width: U32, height: U32, depth: Nat, linear: Bool, pixels: Img.Pixels} More: https://jend.leeeet.dev/packages/gralha-svg-render.txt?definitions_offset=100