https://github.com/linebender/svgtypes
A collection of parsers for SVG types.
https://github.com/linebender/svgtypes
svg
Last synced: about 1 year ago
JSON representation
A collection of parsers for SVG types.
- Host: GitHub
- URL: https://github.com/linebender/svgtypes
- Owner: linebender
- License: apache-2.0
- Created: 2018-04-20T19:52:55.000Z (about 8 years ago)
- Default Branch: main
- Last Pushed: 2025-04-19T16:32:28.000Z (about 1 year ago)
- Last Synced: 2025-04-19T19:40:22.203Z (about 1 year ago)
- Topics: svg
- Language: Rust
- Homepage:
- Size: 301 KB
- Stars: 73
- Watchers: 6
- Forks: 17
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
- Authors: AUTHORS
Awesome Lists containing this project
README
# SVG Types
**A collection of parsers for [SVG](https://www.w3.org/TR/SVG2/) types.**
[](https://xi.zulipchat.com/#narrow/channel/465085-resvg)
[](https://deps.rs/repo/github/linebender/svgtypes)
[](#license)
[](https://github.com/linebender/svgtypes/actions)
[](https://crates.io/crates/svgtypes)
[](https://docs.rs/svgtypes)

## Supported SVG types
- [``](https://www.w3.org/TR/css-color-3/)
- [``](https://www.w3.org/TR/SVG2/types.html#InterfaceSVGNumber)
- [``](https://www.w3.org/TR/SVG2/types.html#InterfaceSVGLength)
- [``](https://www.w3.org/TR/SVG2/types.html#InterfaceSVGAngle)
- [``](https://www.w3.org/TR/SVG2/coords.html#ViewBoxAttribute)
- [``](https://www.w3.org/TR/SVG2/paths.html#PathData)
- [``](https://www.w3.org/TR/SVG11/types.html#DataTypeTransformList)
- [`transform-origin`](https://drafts.csswg.org/css-transforms/#transform-origin-property)
- [``](https://www.w3.org/TR/SVG2/types.html#InterfaceSVGNumberList)
- [``](https://www.w3.org/TR/SVG2/types.html#InterfaceSVGLengthList)
- [``](https://www.w3.org/TR/SVG11/shapes.html#PointsBNF)
- [``](https://www.w3.org/TR/filter-effects-1/#typedef-filter-value-list)
- [``](https://www.w3.org/TR/SVG2/painting.html#SpecifyingPaint)
- [``](https://www.w3.org/TR/SVG11/coords.html#PreserveAspectRatioAttribute)
- [``](https://www.w3.org/TR/SVG11/filters.html#EnableBackgroundProperty)
- [``](https://www.w3.org/TR/SVG11/types.html#DataTypeIRI)
- [``](https://www.w3.org/TR/SVG11/types.html#DataTypeFuncIRI)
- [`paint-order`](https://www.w3.org/TR/SVG2/painting.html#PaintOrder)
- [``](https://www.w3.org/TR/2018/REC-css-fonts-3-20180920/#font-family-prop)
- [`font`](https://www.w3.org/TR/css-fonts-3/#font-prop)
## Features
- Complete support of paths, so data like `M10-20A5.5.3-4 110-.1` will be parsed correctly.
- Implicit path commands will be automatically converted into explicit one.
- Some SVG2 data types support.
- 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 `` followed by the `` is not supported.
As the `` itself.
- [System colors](https://www.w3.org/TR/css3-color/#css2-system), like `fill="AppWorkspace"`, are not supported.
They were deprecated anyway.
## Safety
- The library should not panic. Any panic considered as a critical bug and should be reported.
- The library forbids unsafe code.
## Alternatives
None.
## Minimum supported Rust Version (MSRV)
This version of SVG Types has been verified to compile with **Rust 1.65** and later.
Future versions of SVG Types might increase the Rust version requirement.
It will not be treated as a breaking change and as such can even happen with small patch releases.
Click here if compiling fails.
As time has passed, some of SVG Types's dependencies could have released versions with a higher Rust requirement.
If you encounter a compilation issue due to a dependency and don't want to upgrade your Rust toolchain, then you could downgrade the dependency.
```sh
# Use the problematic dependency's name and version
cargo update -p package_name --precise 0.1.1
```
## Community
[](https://xi.zulipchat.com/#narrow/channel/465085-resvg)
Discussion of SVG Types development happens in the Linebender Zulip at , specifically the [#resvg channel](https://xi.zulipchat.com/#narrow/channel/465085-resvg).
All public content can be read without logging in.
## License
Licensed under either of
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or )
- MIT license ([LICENSE-MIT](LICENSE-MIT) or )
at your option.
## Contribution
Contributions are welcome by pull request. The [Rust code of conduct] applies.
Please feel free to add your name to the [AUTHORS] file in any substantive pull request.
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 licensed as above, without any additional terms or conditions.
[Rust Code of Conduct]: https://www.rust-lang.org/policies/code-of-conduct
[AUTHORS]: ./AUTHORS