1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//! This crate is a lib to generate SVG strings from [geo-types](https://docs.rs/geo-types/0.4.3/geo_types/).
//!
//! Below is an example of a geometry collection rendered to SVG.
//!
//! ![example](https://raw.githubusercontent.com/lelongg/geo-svg/master/example.png)
//!
//! # Features
//!
//! - [GeometryCollection](https://docs.rs/geo-types/0.4.3/geo_types/struct.GeometryCollection.html) and all variants of [Geometry](https://docs.rs/geo-types/0.4.3/geo_types/enum.Geometry.html) are supported
//! - the viewport size is automatically computed to contain all shapes
//! - style and formatting options are available
//!
//! # Example
//!
//! The following will show how to convert a line to a SVG string.  
//! The [`to_svg`] method is provided by the [`ToSvg`] trait which is implemented for all [geo-types](https://docs.rs/geo-types/0.4.3/geo_types/).
//!
//! ```
//! # fn main() {
//! use geo_types::{Coordinate, Line, Point};
//! use geo_svg::{Color, ToSvg};
//! let point = Point::new(10.0, 28.1);
//! let line = Line::new(
//!     Coordinate { x: 114.19, y: 22.26 },
//!     Coordinate { x: 15.93, y: -15.76 },
//! );
//!
//! let svg = point
//!     .to_svg()
//!     .with_radius(2.0)
//!     .and(line.to_svg().with_stroke_width(2.5))
//!     .with_fill_color(Color::Named("red"))
//!     .with_stroke_color(Color::Rgb(200, 0, 100))
//!     .with_fill_opacity(0.7);
//!
//! println!("{}", svg);
//! # assert_eq!(svg.to_string(), r#"<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid meet" viewBox="7 -18.26 109.69 49.36"><circle cx="10" cy="28.1" r="2" fill="red" fill-opacity="0.7" stroke="rgb(200,0,100)"/><path d="M 114.19 22.26 L 15.93 -15.76" fill="red" fill-opacity="0.7" stroke="rgb(200,0,100)" stroke-width="2.5"/></svg>"#);
//! # }
//! ```
//!
//! ## Result
//!
//! ```xml
//! <svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid meet" viewBox="7 -18.26 109.69 49.36"><circle cx="10" cy="28.1" r="2" fill="red" fill-opacity="0.7" stroke="rgb(200,0,100)"/><path d="M 114.19 22.26 L 15.93 -15.76" fill="red" fill-opacity="0.7" stroke="rgb(200,0,100)" stroke-width="2.5"/></svg>
//! ```
//!
//! [`ToSvg`]: svg/trait.ToSvg.html
//! [`to_svg`]: svg/trait.ToSvg.html#method.to_svg

mod color;
mod style;
mod svg;
mod svg_impl;
mod to_svg;
mod to_svg_str;
mod viewbox;

pub use color::*;
pub use style::*;
pub use svg::Svg;
pub use svg_impl::*;
pub use to_svg::*;
pub use to_svg_str::*;
pub use viewbox::ViewBox;