9个版本

0.1.1 2024年7月1日
0.1.0 2024年1月16日
0.0.7 2023年11月11日

333图像 中排名

Download history 2/week @ 2024-04-22 1/week @ 2024-04-29 38/week @ 2024-05-27 25/week @ 2024-06-03 221/week @ 2024-06-10 6/week @ 2024-06-17 47/week @ 2024-06-24 208/week @ 2024-07-01 1/week @ 2024-07-22 48/week @ 2024-07-29 24/week @ 2024-08-05

每月下载 73

MIT 许可证

97KB
2.5K SLoC

svg-path-cst

Crates.io docs.rs Tests License

SVG v1.1路径的具体语法树解析器。

安装

cargo add svg-path-cst

使用

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

let cst: Result<Vec<SVGPathCSTNode>, SyntaxError> = svg_path_cst(b"m0 0 L1,-1");

let expected_cst: Vec<SVGPathCSTNode> = 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,
            },
        ],
    }),
];

assert_eq!(cst, Ok(expected_cst));

兼容性

此crate与W3C SVG 1.1中定义的SVG v1.1路径兼容,该路径定义在W3C SVG 1.1no_std环境中。

特性

  • 跟踪支持: tracing (见tracing)

依赖

~0.4–1MB
~20K SLoC