svgparser 0.0.1

Simple streaming, zero-allocation SVG parser.
Documentation

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

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-.1 will 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 style attribute.
  • 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-value type. 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:

[dependencies]
svgparser = "0.0.1"

Roadmap

V0.1.0

  • f64 from string parsing pretty slow (Stream::parse_number).

V0.2.0

  • <angle> type support.

License

libsvgparser is licensed under the MPLv2.0.