Skip to main content

oak_visualize/
lib.rs

1#![doc = include_str!("readme.md")]
2#![doc(html_logo_url = "https://raw.githubusercontent.com/ygg-lang/oaks/refs/heads/dev/documents/logo.svg")]
3#![doc(html_favicon_url = "https://raw.githubusercontent.com/ygg-lang/oaks/refs/heads/dev/documents/logo.svg")]
4#![feature(new_range_api)]
5#![warn(missing_docs)]
6//! Visualization tools for the Oak language framework.
7//!
8//! This crate provides tools for generating visual representations of
9//! syntax trees and other language structures, primarily in SVG format.
10
11use std::fmt;
12
13/// Geometry primitives for visualization.
14pub mod geometry;
15/// Graph-based visualization structures.
16pub mod graph;
17/// Layout algorithms for nodes and edges.
18pub mod layout;
19/// Rendering logic for generating visual output.
20pub mod render;
21/// Theme configuration for visualization styles.
22pub mod theme;
23/// Tree-specific visualization tools.
24pub mod tree;
25
26/// Error type for oak-visualize operations.
27#[derive(Debug)]
28pub enum Error {
29    /// Layout computation error.
30    LayoutError(String),
31    /// Rendering error.
32    RenderError(String),
33    /// Serialization error.
34    Serialization(String),
35    /// IO error.
36    IoError(std::io::Error),
37    /// Generic error.
38    Generic(String),
39}
40
41impl fmt::Display for Error {
42    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
43        match self {
44            Error::LayoutError(msg) => write!(f, "Layout error: {}", msg),
45            Error::RenderError(msg) => write!(f, "Render error: {}", msg),
46            Error::Serialization(msg) => write!(f, "Serialization error: {}", msg),
47            Error::IoError(err) => write!(f, "IO error: {}", err),
48            Error::Generic(msg) => write!(f, "Error: {}", msg),
49        }
50    }
51}
52
53impl std::error::Error for Error {}
54
55impl From<std::io::Error> for Error {
56    fn from(err: std::io::Error) -> Self {
57        Error::IoError(err)
58    }
59}
60
61/// Result type alias for oak-visualize operations
62pub type Result<T> = std::result::Result<T, Error>;
63
64/// Trait for types that can be visualized
65pub trait Visualize {
66    /// Visualize the object as an SVG string
67    fn visualize(&self) -> Result<String>;
68}
69
70/// Helper function to visualize a tree node as an SVG string
71pub fn to_svg<T: Visualize>(item: &T) -> Result<String> {
72    item.visualize()
73}
74
75// Re-export commonly used types
76pub use crate::{
77    geometry::{Point, Rect, Size, Transform},
78    graph::{Graph, GraphEdge, GraphLayout, GraphLayoutAlgorithm, GraphLayoutConfig, GraphNode},
79    layout::{EdgeType, Layout, LayoutConfig, LayoutEdge, LayoutEngine, LayoutNode, NodeType},
80    render::{ElementStyle, ExportFormat, LayoutExporter, RenderConfig, SvgRenderer},
81    theme::{ArrowConfig, EdgeTheme, HighlightTheme, NodeTheme, ShadowConfig, TextTheme, VisualizationTheme},
82    tree::{TreeLayout, TreeLayoutAlgorithm, TreeLayoutConfig, TreeNode},
83};