libsvgparser
libsvgparser is a streaming parser/tokenizer for SVG 1.1 Full data format without heap allocations.
It's not a XML parser, since it's not only splits the content into the XML nodes, but also supports SVG types parsing.
Supported SVG types
- <color>
- <paint>
- <path>
- <number> and <list-of-number>
- <length> and <list-of-length>
- <coordinate>
- <IRI>
- <FuncIRI>
- <transform-list>
- <style>
See documentation for details.
Benefits
- Most of the common data parsed into internal representation, and not just as string (unlike typical XML parser). Tag names, attribute names, attributes value, etc.
- Complete support of paths, so data like
M10-20A5.5.3-4 110-.1will be parsed correctly. - Predefined SVG values for presentation attributes,
like
auto,normal,none,inherit, etc. are parsed as enum, not as string. - 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 contains position (line:column) where it occurred.
- No heap allocations.
- Pretty fast.
Limitations
- All keywords must be lowercase. Case-insensitive parsing is not supported. Still it's extremely rare.
- The
<color>followed by the<icccolor>is not supported. As the<icccolor>itself. - Only ENTITY objects are parsed from DOCTYPE. Other ignored.
- CSS styles does not processed. You should use external CSS parser.
- Comments inside attributes value supported only for
styleattribute. - User agent colors, aka
fill="AppWorkspace", is not suppored. - Fallback color for
<paint>type is not supported. Example:fill="#linearGradient1 #f00". - There is no separate
opacity-valuetype. It will be parsed as<number>, but will be bound to 0..1 range.
Differences between libsvgparser and SVG spec
<percentage>type is part of<length>type.
Usage
Add this to your Cargo.toml:
[]
= "0.0.1"
Roadmap
V0.1.0
-
f64from string parsing pretty slow (Stream::parse_number).
V0.2.0
-
<angle>type support.
License
libsvgparser is licensed under the MPLv2.0.