1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
/*!
*libsvgparser* is a streaming parser/tokenizer for [SVG 1.1 Full](https://www.w3.org/TR/SVG/)
data format without heap allocations.
It's not an XML parser since it does not only split the content into the XML nodes,
but also supports [SVG types](https://www.w3.org/TR/SVG/types.html#BasicDataTypes) parsing.
### Supported SVG types
- [\<color\>](https://www.w3.org/TR/SVG/types.html#DataTypeColor)
- [\<paint\>](https://www.w3.org/TR/SVG/painting.html#SpecifyingPaint)
- [\<path\>](https://www.w3.org/TR/SVG/paths.html#PathData)
- [\<number\>](https://www.w3.org/TR/SVG/types.html#DataTypeNumber) and \<list-of-numbers\>
- [\<length\>](https://www.w3.org/TR/SVG/types.html#DataTypeLength) and \<list-of-lengths\>
- [\<coordinate\>](https://www.w3.org/TR/SVG/types.html#DataTypeCoordinate)
- [\<IRI\>](https://www.w3.org/TR/SVG/types.html#DataTypeIRI)
- [\<FuncIRI\>](https://www.w3.org/TR/SVG/types.html#DataTypeFuncIRI)
- [\<transform-list\>](https://www.w3.org/TR/SVG/types.html#DataTypeTransformList)
- [\<style\>](https://www.w3.org/TR/SVG/styling.html#StyleAttribute)
### 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](https://www.w3.org/TR/SVG/propidx.html) 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 contain 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 the DOCTYPE. Other ignored.
- CSS styles does not processed. You should use an external CSS parser.
- Comments inside attributes value supported only for the `style` attribute.
- [System colors](https://www.w3.org/TR/css3-color/#css2-system), like `fill="AppWorkspace"`, are not supported.
- There is no separate `opacity-value` type. It will be parsed as `<number>`,
but will be bound to 0..1 range.
- Implicit path commands are not supported. All commands are parsed as explicit.
- Implicit MoveTo commands will be automatically converted into explicit LineTo.
- No escape support for text. It will be emitted as is.
### Differences between *libsvgparser* and SVG spec
- `<percentage>` type is part of the `<length>` type.
*/
extern crate phf;
pub use AttributeId;
pub use ;
pub use Color;
pub use ElementId;
pub use ;
pub use ;
pub use ;
pub use Tokenize;
pub use ValueId;
pub use ;
/// Prints warnings into stderr.
// TODO: add a prelude module