svgtypes
svgtypes is a collection of parsers, containers and writers for SVG types.
Usage is simple as:
use Path;
let path: Path = "M10-20A5.5.3-4 110-.1".parse.unwrap;
assert_eq!;
You can also use a low-level, pull-based parser:
use PathParser;
let p = from;
for token in p
You can also tweak an output format:
use ;
let path_str = "M10-20A5.5.3-4 110-.1";
let path: Path = path_str.parse.unwrap;
let opt = WriteOptions ;
assert_eq!;
Supported SVG types
| SVG Type | Rust Type | Storage | Parser |
|---|---|---|---|
| <color> | Color | Stack | |
| <number> | f64 | Stack | |
| <length> | Length | 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 |
| <style> | - | - | StyleParser |
| <paint> | - | - | Paint |
- All types implement from string (
FromStr,FromSpan) and to string traits (Display,WriteBuffer). - The library doesn't store transform list as is. It will premultiplied.
styleandpainttypes can only be parsed.
Benefits
- Complete support of paths, so data like
M10-20A5.5.3-4 110-.1will be parsed correctly. - Every type can be parsed separately, so you can parse just paths or transform or any other SVG value.
- Good error processing. All error types contain position (line:column) where it occurred.
- Access to pull-based parsers.
- Pretty fast.
Limitations
- 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. - CSS styles does not processed. You should use an external CSS parser.
- Comments inside attributes value supported only for the
styleattribute. - System colors, like
fill="AppWorkspace", are not supported. - There is no separate
coordinatetype. It will be parsed as<length>, - There is no separate
opacity-valuetype. It will be parsed as<number>, but will be bound to 0..1 range. - Implicit path commands are not supported. All commands are 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.
Migration from svgparser
This crate is a successor for the svgparser crate,
but it differs from it in many ways.
- There is no XML parser or writer. You can use any you like.
But since it depends on
xmlparserand reexports it - you can use it too. - Unlike the
svgparserthis crate not only parse values but can also store and write them. Currently, it has a minimal API for manipulating this values. - No
AttributeValue. This crate provides only value parsers. You should match attributes and values by yourself. - No
ValueId. It's up to you how to store those values.
Usage
Dependency: Rust >= 1.18
Add this to your Cargo.toml:
[]
= "0.2"
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.