SVG Generation
This module handles SVG document generation and manipulation for QR codes.
SVG Builder System
SVG generation and manipulation subsystem.
This package provides comprehensive SVG document creation, styling, and manipulation capabilities for QR code generation.
Key Components:
InteractiveSVGBuilder: Main builder for creating SVG documentswith support for CSS styling, backgrounds, and interactive features.
PathClipper: Utilities for clipping SVG paths to frame boundaries.
The SVG subsystem handles:
SVG document structure and namespaces
CSS style injection and management
Background and foreground layering
Interactive hover effects and tooltips
Proper XML formatting and encoding
Path manipulation and clipping
Frame boundary enforcement
Example
Basic usage of the SVG builder:
from segnomms.svg import InteractiveSVGBuilder
builder = InteractiveSVGBuilder()
svg_root = builder.create_svg_root(200, 200)
builder.add_styles(svg_root, interactive=True)
builder.add_background(svg_root, 200, 200, 'white')
See also
segnomms.svg.core: Core SVG building implementation
segnomms.svg.interactivity: Interactive features
segnomms.svg.path_clipper: Path clipping utilities
- class segnomms.svg.InteractiveSVGBuilder(accessibility_config=None)[source]
Bases:
SVGBuilderMain SVG builder that composes all specialized builders.
This class maintains the same interface as the original monolithic SVGBuilder while delegating to specialized builders internally.
- Parameters:
accessibility_config (AccessibilityConfig | None)
- __init__(accessibility_config=None)[source]
Initialize the composite SVG builder.
- Parameters:
accessibility_config (
Optional[AccessibilityConfig]) – Configuration for accessibility features
- add_centerpiece_metadata(svg, config, bounds, scale, border)[source]
Add metadata about centerpiece location for overlay applications.
- add_definitions(svg, definitions_or_gradients=None, patterns=None, filters=None)[source]
Add definitions section to SVG.
- Parameters:
svg (
Element) – SVG element to add definitions todefinitions_or_gradients (
Union[Dict[str,Any],List[GradientConfig],None]) – Either a dictionary containing definitions structure or a list of GradientConfig objects (backward compatibility)patterns (
Optional[List[Dict[str,Any]]]) – List of pattern definitions (when not using dictionary format)filters (
Optional[List[Dict[str,Any]]]) – List of filter definitions (when not using dictionary format)
- Return type:
- add_frame_definitions(svg, frame_config, width, height, border_pixels)[source]
Add frame shape definitions to SVG defs section.
- add_svg_accessibility_elements(svg, title=None, description=None)[source]
Add native SVG accessibility elements (<title> and <desc>).
These elements are part of the SVG specification and provide accessibility information that works in all contexts.
- add_title_and_description(svg, title=None, description=None)[source]
Add title and description elements for accessibility.
DEPRECATED: Use add_svg_accessibility_elements() for clarity. Kept for backward compatibility.
- create_svg_root(width, height, **kwargs)[source]
Create the root SVG element with accessibility features.
Handles both web accessibility (ARIA attributes) and SVG accessibility (title/desc elements) for complete coverage.
- enhance_module_accessibility(element, row, col, module_type='data')[source]
Enhance accessibility for individual QR modules.
- enhance_pattern_group_accessibility(group_element, pattern_type, module_count)[source]
Enhance accessibility for pattern groups.
- class segnomms.svg.CoreSVGBuilder[source]
Bases:
SVGBuilderCore SVG document builder for basic operations.
Handles fundamental SVG operations like creating root elements, adding CSS styles, and managing background elements.
- class segnomms.svg.DefinitionsBuilder[source]
Bases:
objectBuilder for SVG definition elements.
Manages gradients, patterns, filters, and other reusable SVG elements that belong in the <defs> section.
- add_definitions(svg, gradients=None, patterns=None, filters=None)[source]
Add definitions section to SVG with gradients, patterns, and filters.
- Parameters:
svg (
Element) – SVG element to add definitions togradients (
Optional[Sequence[Union[GradientConfig,Dict[str,Any]]]]) – List of gradient configurationspatterns (
Optional[Sequence[Dict[str,Any]]]) – List of pattern configurationsfilters (
Optional[Sequence[Dict[str,Any]]]) – List of filter configurations
- Return type:
- Returns:
The defs element
- class segnomms.svg.InteractivityBuilder[source]
Bases:
objectBuilder for SVG interactive features.
Manages JavaScript injection, event handlers, and interactive behaviors for SVG elements.
- add_custom_interaction(svg, element_selector, event_type, handler_code)[source]
Add a custom interaction handler to specific elements.
- add_interaction_handlers(svg)[source]
Add default interaction handlers to the SVG.
Adds standard interaction handlers for tooltips, click events, and hover effects.
- configure_interaction(element, config)[source]
Configure interaction settings for a specific element.
- Parameters:
element (
Element) – Element to configureconfig (
InteractionConfig) – Interaction configuration
- Return type:
- class segnomms.svg.FrameVisualBuilder[source]
Bases:
objectBuilder for frame shapes and visual effects.
Manages frame definitions, quiet zone styling, centerpiece metadata, and other visual enhancements for QR codes.
- add_centerpiece_metadata(svg, config, qr_bounds, scale)[source]
Add metadata for centerpiece/reserve area.
- Parameters:
svg (
Element) – SVG element to add metadata toconfig (
Union[RenderingConfig,CenterpieceConfig]) – Rendering configuration with centerpiece settingsqr_bounds (
Tuple[int,int,int,int]) – Tuple of (x, y, width, height) for QR code boundsscale (
int) – Scale factor for module size calculations
- Return type:
- add_frame_definitions(svg, frame_config, qr_size, module_count)[source]
Add frame shape definitions to the SVG.
- class segnomms.svg.AccessibilityBuilder(accessibility_config=None)[source]
Bases:
objectBuilder for SVG accessibility features.
Manages ARIA attributes, semantic structure, titles, descriptions, and other accessibility enhancements.
- Parameters:
accessibility_config (AccessibilityConfig | None)
- __init__(accessibility_config=None)[source]
Initialize the accessibility builder.
- Parameters:
accessibility_config (
Optional[AccessibilityConfig]) – Configuration for accessibility features
- add_title_and_description(svg, title=None, description=None)[source]
Add title and description elements for accessibility.
- create_layered_structure(svg)[source]
Create a semantic layered structure for the SVG.
Creates groups for different layers (background, modules, overlays) with proper semantic markup.
- enhance_module_accessibility(element, row, col, module_type='data')[source]
Enhance accessibility for individual QR modules.
- enhance_pattern_group_accessibility(group_element, pattern_type, module_count)[source]
Enhance accessibility for pattern groups.
- class segnomms.svg.PathClipper(frame_shape, width, height, border, corner_radius=0.0)[source]
Bases:
objectClips SVG paths to frame boundaries.
This class provides methods to ensure that generated paths (from clustering or other phases) don’t extend beyond the configured frame shape boundaries.
- __init__(frame_shape, width, height, border, corner_radius=0.0)[source]
Initialize the path clipper.
- clip_path(path_data)[source]
Clip an SVG path to frame boundaries.
- Parameters:
path_data (
str) – SVG path string to clip- Return type:
- Returns:
Clipped SVG path string
Note
This is a basic implementation that returns the original path for most cases. Full path parsing and clipping is a complex operation that would require substantial geometry libraries.
- get_frame_aware_bounds(positions, scale)[source]
Get bounding box for positions, constrained by frame.
- class segnomms.svg.SVGElementConfig(**data)[source]
Bases:
BaseModelConfiguration for SVG root element creation.
This model validates parameters for creating SVG root elements with proper dimensions, viewBox, and attributes.
Example
>>> config = SVGElementConfig( ... width=200, ... height=200, ... id="my-qr-code", ... css_class="qr-svg" ... ) >>> svg = builder.create_svg_root(**config.model_dump())
- classmethod handle_css_class_aliases(values)[source]
Handle both ‘css_class’ and ‘class’ parameter names.
- model_config: ClassVar[ConfigDict] = {'str_strip_whitespace': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class segnomms.svg.BackgroundConfig(**data)[source]
Bases:
BaseModelConfiguration for SVG background elements.
This model validates parameters for adding background rectangles to SVG documents.
- model_config: ClassVar[ConfigDict] = {'str_strip_whitespace': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class segnomms.svg.GradientConfig(**data)[source]
Bases:
BaseModelConfiguration for SVG gradient definitions.
This model validates gradient parameters for creating linear and radial gradients in SVG definitions.
- Parameters:
- model_config: ClassVar[ConfigDict] = {'str_strip_whitespace': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class segnomms.svg.TitleDescriptionConfig(**data)[source]
Bases:
BaseModelConfiguration for SVG title and description elements.
This model validates accessibility metadata for SVG documents.
- model_config: ClassVar[ConfigDict] = {'str_strip_whitespace': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class segnomms.svg.InteractionConfig(**data)[source]
Bases:
BaseModelConfiguration for SVG interactivity features.
This model validates parameters for enabling interactive features like hover effects and tooltips.
- model_config: ClassVar[ConfigDict] = {'validate_default': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class segnomms.svg.FrameDefinitionConfig(**data)[source]
Bases:
BaseModelConfiguration for SVG frame shape definitions.
This model validates parameters for creating frame shapes in SVG definition sections.
- Parameters:
- model_config: ClassVar[ConfigDict] = {'str_strip_whitespace': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class segnomms.svg.LayerStructureConfig(**data)[source]
Bases:
BaseModelConfiguration for SVG layer organization.
This model defines the structure of layered SVG elements for proper rendering order and organization.
- Parameters:
- model_config: ClassVar[ConfigDict] = {'frozen': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class segnomms.svg.CenterpieceMetadataConfig(**data)[source]
Bases:
BaseModelConfiguration for centerpiece metadata in SVG.
This model validates parameters for adding centerpiece positioning metadata to SVG documents.
- model_config: ClassVar[ConfigDict] = {'frozen': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
Main SVG Builder
- class segnomms.svg.InteractiveSVGBuilder(accessibility_config=None)[source]
Bases:
SVGBuilderMain SVG builder that composes all specialized builders.
This class maintains the same interface as the original monolithic SVGBuilder while delegating to specialized builders internally.
- Parameters:
accessibility_config (AccessibilityConfig | None)
- __init__(accessibility_config=None)[source]
Initialize the composite SVG builder.
- Parameters:
accessibility_config (
Optional[AccessibilityConfig]) – Configuration for accessibility features
- create_svg_root(width, height, **kwargs)[source]
Create the root SVG element with accessibility features.
Handles both web accessibility (ARIA attributes) and SVG accessibility (title/desc elements) for complete coverage.
- add_definitions(svg, definitions_or_gradients=None, patterns=None, filters=None)[source]
Add definitions section to SVG.
- Parameters:
svg (
Element) – SVG element to add definitions todefinitions_or_gradients (
Union[Dict[str,Any],List[GradientConfig],None]) – Either a dictionary containing definitions structure or a list of GradientConfig objects (backward compatibility)patterns (
Optional[List[Dict[str,Any]]]) – List of pattern definitions (when not using dictionary format)filters (
Optional[List[Dict[str,Any]]]) – List of filter definitions (when not using dictionary format)
- Return type:
- add_svg_accessibility_elements(svg, title=None, description=None)[source]
Add native SVG accessibility elements (<title> and <desc>).
These elements are part of the SVG specification and provide accessibility information that works in all contexts.
- add_title_and_description(svg, title=None, description=None)[source]
Add title and description elements for accessibility.
DEPRECATED: Use add_svg_accessibility_elements() for clarity. Kept for backward compatibility.
- add_frame_definitions(svg, frame_config, width, height, border_pixels)[source]
Add frame shape definitions to SVG defs section.
- add_centerpiece_metadata(svg, config, bounds, scale, border)[source]
Add metadata about centerpiece location for overlay applications.
- enhance_module_accessibility(element, row, col, module_type='data')[source]
Enhance accessibility for individual QR modules.
- enhance_pattern_group_accessibility(group_element, pattern_type, module_count)[source]
Enhance accessibility for pattern groups.
The InteractiveSVGBuilder is the main composite builder that orchestrates
all specialized builders to create complete interactive SVG documents.
Core SVG Builder
- class segnomms.svg.CoreSVGBuilder[source]
Bases:
SVGBuilderCore SVG document builder for basic operations.
Handles fundamental SVG operations like creating root elements, adding CSS styles, and managing background elements.
- create_svg_root(width, height, **kwargs)[source]
Create the root SVG element with proper attributes and namespaces.
Path Clipping
- class segnomms.svg.PathClipper(frame_shape, width, height, border, corner_radius=0.0)[source]
Bases:
objectClips SVG paths to frame boundaries.
This class provides methods to ensure that generated paths (from clustering or other phases) don’t extend beyond the configured frame shape boundaries.
- __init__(frame_shape, width, height, border, corner_radius=0.0)[source]
Initialize the path clipper.
- get_scale_factor(x, y, scale_distance)[source]
Calculate scale factor for a point based on distance from frame edge.
- clip_path(path_data)[source]
Clip an SVG path to frame boundaries.
- Parameters:
path_data (
str) – SVG path string to clip- Return type:
- Returns:
Clipped SVG path string
Note
This is a basic implementation that returns the original path for most cases. Full path parsing and clipping is a complex operation that would require substantial geometry libraries.
SVG Models
Pydantic models for utility components.
This module provides data models for utility classes using Pydantic for automatic validation and type safety.
- class segnomms.svg.models.SVGElementConfig(**data)[source]
Bases:
BaseModelConfiguration for SVG root element creation.
This model validates parameters for creating SVG root elements with proper dimensions, viewBox, and attributes.
Example
>>> config = SVGElementConfig( ... width=200, ... height=200, ... id="my-qr-code", ... css_class="qr-svg" ... ) >>> svg = builder.create_svg_root(**config.model_dump())
- Parameters:
- model_config: ClassVar[ConfigDict] = {'str_strip_whitespace': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class segnomms.svg.models.BackgroundConfig(**data)[source]
Bases:
BaseModelConfiguration for SVG background elements.
This model validates parameters for adding background rectangles to SVG documents.
- Parameters:
- model_config: ClassVar[ConfigDict] = {'str_strip_whitespace': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class segnomms.svg.models.GradientConfig(**data)[source]
Bases:
BaseModelConfiguration for SVG gradient definitions.
This model validates gradient parameters for creating linear and radial gradients in SVG definitions.
- Parameters:
- model_config: ClassVar[ConfigDict] = {'str_strip_whitespace': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class segnomms.svg.models.TitleDescriptionConfig(**data)[source]
Bases:
BaseModelConfiguration for SVG title and description elements.
This model validates accessibility metadata for SVG documents.
- Parameters:
- model_config: ClassVar[ConfigDict] = {'str_strip_whitespace': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class segnomms.svg.models.InteractionConfig(**data)[source]
Bases:
BaseModelConfiguration for SVG interactivity features.
This model validates parameters for enabling interactive features like hover effects and tooltips.
- model_config: ClassVar[ConfigDict] = {'validate_default': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class segnomms.svg.models.FrameDefinitionConfig(**data)[source]
Bases:
BaseModelConfiguration for SVG frame shape definitions.
This model validates parameters for creating frame shapes in SVG definition sections.
- Parameters:
- model_config: ClassVar[ConfigDict] = {'str_strip_whitespace': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class segnomms.svg.models.LayerStructureConfig(**data)[source]
Bases:
BaseModelConfiguration for SVG layer organization.
This model defines the structure of layered SVG elements for proper rendering order and organization.
- Parameters:
- model_config: ClassVar[ConfigDict] = {'frozen': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class segnomms.svg.models.CenterpieceMetadataConfig(**data)[source]
Bases:
BaseModelConfiguration for centerpiece metadata in SVG.
This model validates parameters for adding centerpiece positioning metadata to SVG documents.
- Parameters:
- model_config: ClassVar[ConfigDict] = {'frozen': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
These models provide type-safe configuration for SVG generation parameters.
Example Usage
Basic SVG generation:
from segnomms.svg import InteractiveSVGBuilder
builder = InteractiveSVGBuilder()
svg_root = builder.create_svg_root(200, 200)
builder.add_styles(svg_root, interactive=True)
builder.add_background(svg_root, 200, 200, 'white')
Path clipping for frames:
from segnomms.svg import PathClipper
clipper = PathClipper(
frame_shape='circle',
width=200,
height=200,
border=20
)
clipped_path = clipper.clip_path_to_frame(original_path)