[][src]Crate svgtypes

svgtypes is a collection of parsers, containers and writers for SVG 1.1 types.

Usage is simple as:

use svgtypes::Path;

let path: Path = "M10-20A5.5.3-4 110-.1".parse().unwrap();
assert_eq!(path.to_string(), "M 10 -20 A 5.5 0.3 -4 1 1 0 -0.1");

You can also use a low-level, pull-based parser:

use svgtypes::PathParser;

let p = PathParser::from("M10-20A5.5.3-4 110-.1");
for token in p {
    println!("{:?}", token);
}

You can also tweak an output format:

use svgtypes::{Path, WriteBuffer, WriteOptions};

let path_str = "M10-20A5.5.3-4 110-.1";
let path: Path = path_str.parse().unwrap();

let opt = WriteOptions {
    remove_leading_zero: true,
    use_compact_path_notation: true,
    join_arc_to_flags: true,
    .. WriteOptions::default()
};

assert_eq!(path.with_write_opt(&opt).to_string(), path_str);

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) and to string traits (Display, WriteBuffer).
  • The library doesn't store transform list as is. It will premultiplied.
  • style and paint types can only be parsed.

Benefits

  • Complete support of paths, so data like M10-20A5.5.3-4 110-.1 will be parsed correctly.
  • Access to pull-based parsers.
  • Pretty fast.

Limitations

  • Accepts only normalized values, e.g. an input text should not contain &#x20; or &data;.
  • 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.
  • Comments inside attributes value supported only for the style attribute.
  • System colors, like fill="AppWorkspace", are not supported. They were deprecated anyway.
  • Implicit path commands are not supported. All commands will be 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.

Structs

Angle

Representation of the <angle> type.

AspectRatio

Representation of the preserveAspectRatio attribute.

Color

Representation of the <color> type.

DisplaySvg

A wrapper to use fmt::Display with WriteOptions.

Length

Representation of the <length> type.

LengthList

Representation of the <list-of-length> type.

LengthListParser

A pull-based <list-of-length> parser.

NumberList

Representation of the <list-of-numbers> type.

NumberListParser

A pull-based <list-of-numbers> parser.

Path

Representation of the SVG path data.

PathBuilder

A builder for Path.

PathParser

A pull-based path data parser.

Points

Representation of the <list-of-points> type.

PointsParser

A pull-based <list-of-points> parser.

Stream

A streaming text parsing interface.

StyleParser

A pull-based style parser.

Transform

Representation of the <transform> type.

TransformListParser

A pull-based <transform-list> parser.

ViewBox

Representation of the <viewBox> type.

WriteOptions

Options for SVG types writing.

Enums

Align

Representation of the align value of the preserveAspectRatio attribute.

AngleUnit

List of all SVG angle units.

AttributeId

List of all SVG attributes.

ElementId

List of all SVG elements.

Error

List of all errors.

LengthUnit

List of all SVG length units.

ListSeparator

A separator type for a list of values.

Paint

Representation of the <paint> type.

PaintFallback

Representation of the fallback part of the <paint> type.

PathCommand

List of all path commands.

PathSegment

Representation of the path segment.

TransformListToken

Transform list token.

Traits

FuzzyEq

A trait for fuzzy/approximate equality comparisons of float numbers.

FuzzyZero

A trait for fuzzy/approximate comparisons of float numbers.

WriteBuffer

A trait for writing data to the buffer.