On this page
SVG renderer — converts a resolved Scene into an SVG string.
#predraw.renderer
#predraw.renderer
SVG renderer — converts a resolved Scene into an SVG string.
#render_svg
def render_svg(scene: Scene) -> strRender a Scene to an SVG string.
#_stroke_attrs
def _stroke_attrs(el: Element, gradient_list: list | None=None) -> strBuild SVG stroke attribute string from element stroke fields.
#_render_element
def _render_element(el: Element, scene: Scene, indent: int=2, gradient_list: list | None=None) -> strRender a single element to SVG string.
#_render_transform
def _render_transform(t: Transform) -> strConvert Transform to SVG transform attribute value.
#_render_text_with_char_styles
def _render_text_with_char_styles(el: Element, indent: int=2, gradient_list: list | None=None) -> strRender text element with per-character tspan styling.
#_render_plain_text
def _render_plain_text(el: Element, indent: int=2, gradient_list: list | None=None) -> strRender a text element without char styles.
#_render_group
def _render_group(el: Element, scene: Scene, indent: int=2, gradient_list: list | None=None) -> strRender a group element with optional transform and children.
#_render_use
def _render_use(el: Element, scene: Scene, indent: int=2, gradient_list: list | None=None) -> strRender a component reference by looking up scene.defs.
#_apply_overrides
def _apply_overrides(element: Element, fill: str | Gradient | None, opacity: float) -> NoneRecursively apply fill/opacity overrides to an element tree.
- fill: replaces child fill entirely (if not None)
- opacity: multiplies with existing child opacity (if != 1.0)
#_match_char_style
def _match_char_style(char: str, styles: list[CharStyle]) -> CharStyle | NoneFind the first CharStyle whose chars field contains the given character.
#_escape_xml
def _escape_xml(text: str) -> strEscape XML special characters in text content.
#_collect_gradients
def _collect_gradients(scene: Scene) -> list[tuple[Gradient, str]]Walk the scene tree and collect unique Gradient objects, assigning IDs.
Uses dataclass equality to deduplicate gradients (identical gradients share one ID). Returns a list of (Gradient, grad_id) tuples for all unique gradients.
#_render_defs
def _render_defs(gradient_list: list[tuple[Gradient, str]]) -> strRender the
#_render_linear_gradient
def _render_linear_gradient(grad: Gradient, grad_id: str) -> strRender a linearGradient SVG element.
#_render_radial_gradient
def _render_radial_gradient(grad: Gradient, grad_id: str) -> strRender a radialGradient SVG element.
#_fill_value
def _fill_value(fill, gradient_list: list[tuple[Gradient, str]] | None=None) -> strReturn the SVG fill attribute value: either a color string or url(#id) reference.
Uses equality-based lookup so deep-copied Gradient objects still resolve correctly.