30 releases (17 breaking)
✓ Uses Rust 2018 edition
|new 0.17.0||Jun 12, 2019|
|0.16.1||Mar 15, 2019|
|0.16.0||Jan 2, 2019|
|0.15.0||Dec 13, 2018|
|0.2.0||Nov 4, 2016|
#23 in Parser implementations
2,115 downloads per month
Used in 4 crates (2 directly)
svgdom is an SVG Full 1.1 processing library, which allows you to parse, manipulate, generate and write an SVG content.
Note: the library itself is pretty stable, but API is constantly changing.
svgdom is designed to simplify generic SVG processing and manipulations. Unfortunately, an SVG is very complex format (PDF spec is 826 pages long), with lots of features and implementing all of them will lead to an enormous library.
That's why svgdom supports only a static subset of an SVG. No scripts, external resources and complex CSS styling. Parser will convert as much as possible data to a simple doc->elements->attributes structure.
For example, the
fill parameter of an element can be set: as an element's attribute,
as part of a
style attribute, inside a
style element as CSS2, inside an
using a JS code and probably with lots of other methods.
Not to mention, that the
fill attribute supports 4 different types of data.
svgdom you can just use
node.has_attribute(AttributeId::Fill) and don't worry where this
attribute was defined in the original file.
Same goes for transforms, paths and other SVG types.
The main downside of this approach is that you can't save an original formatting and some data.
See the preprocessor doc for details.
- The element link(IRI, FuncIRI) is not just a text, but an actual link to another node.
- At any time you can check which elements linked to the specific element.
Node's doc for details.
- Support for many SVG specific data types like paths, transforms, IRI's, styles, etc. Thanks to svgtypes.
- A complete support of text nodes: XML escaping,
- Fine-grained control over the SVG output.
- Only SVG elements and attributes will be parsed.
- Attribute values, CDATA with CSS, DOCTYPE, text data and whitespaces will not be preserved.
- UTF-8 only.
- Only most popular attributes are parsed, other stored as strings.
- No compressed SVG (.svgz). You should decompress it by yourself.
- CSS support is minimal.
- SVG 1.1 Full only (no 2.0 Draft, Basic, Tiny subsets).
- Library follows SVG spec in the data parsing, writing, but not in the tree structure.
- Everything is a
Node. There are no separated
TextNode, etc. You still have all the data, but not in the specific struct's. You can check the node type via
Rust >= 1.32
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.
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.