def filter.primitive
gralha-svg-render@0.1.0.1 · svg.bend:4999
import gralha-svg-render@0.1.0.1/svg.bend as Svg
import Base
import gralha-text-scan@0.1.0.1/scan.bend as U
import gralha-xml-doc@0.1.0.1/xml.bend as XML
4999def filter.primitive(+name: String, +as: List<&2, XML.Attr>, +kids: List<&2, XML.Element>, +format: Raster, +source: FilterInput, +previous: FilterInput, +results: List<&2, FilterResult>, +region: Bounds, +units: Matrix, +viewport: Point, +aa: U32) -> FilterInput:
5000 +a = filter.resolve(XML.attr.get(as, "in", ""), source, previous, results)
5001 +b = filter.resolve(XML.attr.get(as, "in2", ""), source, previous, results)
5002 +merges = filter.merge.inputs(kids, source, previous, results)
5003 +two = U.string.equal(name, "feComposite") || U.string.equal(name, "feBlend")
5004 +defaultBox = U.branch(Bounds, U.string.equal(name, "feFlood"), _ => region,
5005 _ => U.branch(Bounds, U.string.equal(name, "feMerge"), _ => filter.inputs.region(merges, bounds.empty()), _ => U.choose(Bounds, two, bounds.merge(filter.input.region(a), filter.input.region(b)), filter.input.region(a))))
5006 +box = bounds.intersection(region, filter.subregion(as, defaultBox, viewport))
5007 +window = {FilterWindow{box, matrix.inverse(units), False{}} : FilterWindow}
5008 +linear = U.branch(Bool, U.string.equal(name, "feFlood"), _ => False{}, _ => U.branch(Bool, U.string.equal(name, "feOffset"), _ => raster.is.linear(filter.input.raster(a)), _ => Bool.not(U.string.equal(XML.attr.get(as, "color-interpolation-filters", "linearRGB"), "sRGB"))))
5009 FilterInput{U.branch(Raster, U.string.equal(name, "feGaussianBlur"), _ => filter.blur(as, format, a, units, window, linear, aa), _ => U.branch(Raster, U.string.equal(name, "feDropShadow"), _ => filter.shadow(as, format, a, units, viewport, window, linear, aa), _ => U.branch(Raster, U.string.equal(name, "feMorphology"), _ => filter.morphology(as, format, a, units, window, linear, aa), _ => filter.draw(format, U.branch(FilterOp, U.string.equal(name, "feConvolveMatrix"), _ => filter.convolution.parse(as, units, a, format), _ => filter.op.parse(name, as, kids, units, viewport, merges)), a, b, window, linear, aa)))), box, False{}, False{}}
5010
5011@unsafe