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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
/*! *svgtypes* is a collection of parsers, containers and writers for [SVG 1.1](https://www.w3.org/TR/SVG11/) types. Usage is simple as: ```rust use svgtypes::Path; let path: Path = "M10-20A5.5.3-4 110-.1".parse().unwrap(); assert_eq!(path.to_string(), "M 10 -20 A 5.5 0.3 -4 1 1 0 -0.1"); ``` You can also use a low-level, pull-based parser: ```rust use svgtypes::PathParser; let p = PathParser::from("M10-20A5.5.3-4 110-.1"); for token in p { println!("{:?}", token); } ``` You can also tweak an output format: ```rust use svgtypes::{Path, WriteBuffer, WriteOptions}; let path_str = "M10-20A5.5.3-4 110-.1"; let path: Path = path_str.parse().unwrap(); let opt = WriteOptions { remove_leading_zero: true, use_compact_path_notation: true, join_arc_to_flags: true, .. WriteOptions::default() }; assert_eq!(path.with_write_opt(&opt).to_string(), path_str); ``` ## Supported SVG types | SVG Type | Rust Type | Storage | Parser | | ------------------------- | ------------- | ------- | ------------------- | | [\<color\>] | Color | Stack | | | [\<number\>] | f64 | Stack | | | [\<length\>] | Length | Stack | | | [\<angle\>] | Angle | Stack | | | [\<viewBox\>] | ViewBox | Stack | | | [\<path\>] | Path | Heap | PathParser | | [\<list-of-numbers\>] | NumberList | Heap | NumberListParser | | [\<list-of-lengths\>] | LengthList | Heap | LengthListParser | | [\<transform-list\>] | Transform | Stack | TransformListParser | | [\<list-of-points\>] | Points | Heap | PointsParser | | [\<paint\>] | - | - | Paint | [\<color\>]: https://www.w3.org/TR/SVG11/types.html#DataTypeColor [\<number\>]: https://www.w3.org/TR/SVG11/types.html#DataTypeNumber [\<length\>]: https://www.w3.org/TR/SVG11/types.html#DataTypeLength [\<angle\>]: https://www.w3.org/TR/SVG11/types.html#DataTypeAngle [\<viewBox\>]: https://www.w3.org/TR/SVG11/coords.html#ViewBoxAttribute [\<path\>]: https://www.w3.org/TR/SVG11/paths.html#PathData [\<list-of-numbers\>]: https://www.w3.org/TR/SVG11/types.html#DataTypeList [\<list-of-lengths\>]: https://www.w3.org/TR/SVG11/types.html#DataTypeList [\<transform-list\>]: https://www.w3.org/TR/SVG11/types.html#DataTypeTransformList [\<list-of-points\>]: https://www.w3.org/TR/SVG11/shapes.html#PointsBNF [\<paint\>]: https://www.w3.org/TR/SVG11/painting.html#SpecifyingPaint - All types implement from string (`FromStr`) and to string traits (`Display`, `WriteBuffer`). - The library doesn't store transform list as is. It will premultiplied. - The `paint` type can only be parsed. ## Benefits - Complete support of paths, so data like `M10-20A5.5.3-4 110-.1` will be parsed correctly. - Access to pull-based parsers. - Pretty fast. ## Limitations - Accepts only [normalized](https://www.w3.org/TR/REC-xml/#AVNormalize) values, e.g. an input text should not contain ` ` or `&data;`. - All keywords must be lowercase. Case-insensitive parsing is supported only for colors (requires allocation for named colors). - The `<color>` followed by the `<icccolor>` is not supported. As the `<icccolor>` itself. - [System colors](https://www.w3.org/TR/css3-color/#css2-system), like `fill="AppWorkspace"`, are not supported. They were deprecated anyway. - Implicit path commands are not supported. All commands will be parsed as explicit. - Implicit MoveTo commands will be automatically converted into explicit LineTo. ## Safety - The library should not panic. Any panic considered as a critical bug and should be reported. - The library forbids unsafe code. ## Alternatives None. */ #![doc(html_root_url = "https://docs.rs/svgtypes/0.5.0")] #![forbid(unsafe_code)] #![deny(missing_docs)] #![deny(missing_debug_implementations)] #![deny(missing_copy_implementations)] extern crate float_cmp; extern crate siphasher; macro_rules! matches { ($expression:expr, $($pattern:tt)+) => { match $expression { $($pattern)+ => true, _ => false } } } #[macro_use] mod traits; mod angle; mod aspect_ratio; mod color; mod error; mod length; mod length_list; mod number; mod number_list; mod options; mod paint; mod path; mod points; mod stream; mod transform; mod viewbox; pub use angle::*; pub use aspect_ratio::*; pub use color::*; pub use error::*; pub use length::*; pub use length_list::*; pub use number::*; pub use number_list::*; pub use options::*; pub use paint::*; pub use path::*; pub use points::*; pub use stream::*; pub use traits::*; pub use transform::*; pub use viewbox::*;