12 releases
0.1.4 | Sep 6, 2024 |
---|---|
0.1.3 | Aug 28, 2024 |
0.1.1 | Jul 1, 2024 |
0.1.0 | Jan 16, 2024 |
0.0.7 | Nov 11, 2023 |
#335 in Images
805 downloads per month
115KB
2.5K
SLoC
svg-path-cst
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,
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));
Compatibility
This crate is compatible with SVG v1.1 paths, as defined in the W3C SVG 1.1
and no_std
environments.
Features
tracing
Add tracing
support. See the tracing
example to learn how to use it.
strict
Enable strict mode. The differences between strict and non-strict modes are:
- With empty input (
b""
), non-strict mode returns an empty vector, while strict mode returns aSyntaxError::UnexpectedEnding
error. - With the input
b"none"
, non-strict mode returns aSVGPathCSTNode::None
node, while strict mode returns aSyntaxError::ExpectedMovetoCommand
error. The"none"
input is defined by the SVG specification. - With input containing only whitespaces, non-strict mode returns an empty vector,
while strict mode returns a
SyntaxError::ExpectedMovetoCommand
error.
Dependencies
~0.4–1MB
~20K SLoC