use crate::coord::Shift; use crate::drawing::{DrawingArea, IntoDrawingArea}; use plotters_svg::SVGBackend; /// The wrapper for the generated SVG pub struct SVGWrapper(String, String); impl SVGWrapper { pub fn evcxr_display(&self) { println!("{:?}", self); } pub fn style>(mut self, style: S) -> Self { self.1 = style.into(); self } } impl std::fmt::Debug for SVGWrapper { fn fmt(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { let svg = self.0.as_str(); write!( formatter, "EVCXR_BEGIN_CONTENT text/html\n
{}
\nEVCXR_END_CONTENT", self.1, svg ) } } /// Start drawing an evcxr figure pub fn evcxr_figure< Draw: FnOnce(DrawingArea) -> Result<(), Box>, >( size: (u32, u32), draw: Draw, ) -> SVGWrapper { let mut buffer = "".to_string(); let root = SVGBackend::with_string(&mut buffer, size).into_drawing_area(); draw(root).expect("Drawing failure"); SVGWrapper(buffer, "".to_string()) }