svg-path-cst 0.0.4

CST SVG path parser.
Documentation

svg-path-cst

Crates.io Tests License

Concrete Syntax Tree parser for SVG v1.1 paths.

Install

cargo add svg-path-cst

Usage

use svg_path_cst::{
    svg_path_cst,
    SVGPathCSTNode,
    SVGPathSegment,
    SVGPathCommand,
    WSP,
    Sign,
};

let cst = svg_path_cst("m0 0 L1,-1");
assert_eq!(
    cst,
    Ok(vec![
        SVGPathCSTNode::Segment(SVGPathSegment{
            command: &SVGPathCommand::MovetoLower,
            args: vec![0.0, 0.0],
            start: 0,
            end: 4,
            chained: false,
            chain_start: 0,
            chain_end: 4,
            cst: vec![
                SVGPathCSTNode::Command(&SVGPathCommand::MovetoLower),
                SVGPathCSTNode::Number{
                    raw_number: "0".to_string(),
                    value: 0.0,
                    start: 1,
                    end: 2,
                },
                SVGPathCSTNode::Whitespace{
                    wsp: &WSP::Space,
                    start: 2,
                    end: 3,
                },
                SVGPathCSTNode::Number{
                    raw_number: "0".to_string(),
                    value: 0.0,
                    start: 3,
                    end: 4,
                },
            ],
        }),
        SVGPathCSTNode::Whitespace{
            wsp: &WSP::Space,
            start: 4,
            end: 5,
        },
        SVGPathCSTNode::Segment(SVGPathSegment{
            command: &SVGPathCommand::LinetoUpper,
            args: vec![1.0, -1.0],
            start: 5,
            end: 10,
            chained: false,
            chain_start: 5,
            chain_end: 10,
            cst: vec![
                SVGPathCSTNode::Command(&SVGPathCommand::LinetoUpper),
                SVGPathCSTNode::Number{
                    raw_number: "1".to_string(),
                    value: 1.0,
                    start: 6,
                    end: 7,
                },
                SVGPathCSTNode::Comma{ start: 7 },
                SVGPathCSTNode::Sign{ sign: &Sign::Minus, start: 8 },
                SVGPathCSTNode::Number{
                    raw_number: "1".to_string(),
                    value: 1.0,
                    start: 9,
                    end: 10,
                },
            ],
        }),
    ])
);