vexy_vsvg/lib.rs
1// this_file: crates/vexy-vsvg/src/lib.rs
2
3//! # vexy-vsvg
4//!
5//! Core SVG processing engine for vexy-vsvg, providing parsing, AST manipulation,
6//! optimization, and stringification capabilities.
7//!
8//! ## Overview
9//!
10//! This crate provides the fundamental building blocks for SVG optimization:
11//!
12//! - **Parsing**: Convert SVG strings into an Abstract Syntax Tree (AST)
13//! - **Optimization**: Apply various optimization plugins to reduce file size
14//! - **Stringification**: Convert the optimized AST back to an SVG string
15//!
16//! ## Quick Start
17//!
18//! ```rust
19//! use vexy_vsvg::{optimize_default, parse_svg, stringify};
20//!
21//! // Simple optimization with default settings
22//! let svg = r#"<svg><rect width="100" height="100"/></svg>"#;
23//! let result = optimize_default(svg).unwrap();
24//! println!("Optimized: {}", result.data);
25//!
26//! // Manual parsing and stringification
27//! let doc = parse_svg(svg).unwrap();
28//! let output = stringify(&doc).unwrap();
29//! ```
30//!
31//! ## Features
32//!
33//! - `parallel`: Enable parallel processing for large SVG files
34//! - `wasm`: WebAssembly compatibility
35//! - `python`: Python bindings support
36
37// Public modules
38pub mod ast;
39pub mod collections;
40pub mod css;
41pub mod error;
42pub mod features;
43pub mod optimizer;
44pub mod parser;
45pub mod plugin_registry;
46pub mod stringifier;
47pub mod utils;
48pub mod visitor;
49
50// Re-exports for a flatter API
51pub use ast::{Document, DocumentMetadata, Element, Node};
52pub use css::variables::{CssScope, CssVariableResolver};
53pub use error::VexyError;
54pub use optimizer::memory::{MemoryBudget, MemoryError};
55#[cfg(feature = "parallel")]
56pub use optimizer::parallel;
57pub use optimizer::{
58 optimize, optimize_default, optimize_with_config, OptimizationInfo, OptimizationResult,
59 OptimizeOptions,
60};
61pub use parser::config::{Config, DataUriFormat, LineEnding, PluginConfig, StreamingConfig};
62pub use parser::error::ParseError;
63pub use parser::{
64 load_config_from_directory, parse_svg, parse_svg_file, parse_svg_streaming, Parser,
65};
66pub use plugin_registry::{create_default_registry, Plugin, PluginRegistry};
67pub use stringifier::{stringify, stringify_with_config, StreamingStringifier, StringifyConfig};
68
69/// Version string for vexy-vsvg
70pub const VERSION: &str = env!("CARGO_PKG_VERSION");