12 releases (stable)
2.6.0 | Jan 21, 2021 |
---|---|
2.5.0 | Dec 27, 2020 |
2.4.0 | Jan 24, 2020 |
2.3.0 | Sep 18, 2019 |
0.1.0 | Dec 19, 2018 |
#1437 in Parser implementations
Used in goban
44KB
977 lines
SGF Parser
A SGF Parser for Rust. Supports all SGF properties, and tree branching.
NOTE when converting a GameTree
to a string we convert all charset tokens to be UTF-8, since
that is the encoding for all strings in Rust.
Using pest
for the actual parsing part.
Development
Code quality is ensured by running both cargo clippy
and cargo fmt
on each commit.
All code should also be unit tested.
Example usage
use sgf_parser::*;
let sgf_source = "(;C[comment]EV[event]PB[black]PW[white];B[aa])";
let tree: Result<GameTree, SgfError> = parse(sgf_source);
let tree = tree.unwrap();
let unknown_nodes = tree.get_unknown_nodes();
assert_eq!(unknown_nodes.len(), 0);
let invalid_nodes = tree.get_invalid_nodes();
assert_eq!(invalid_nodes.len(), 0);
tree.iter().for_each(|node| {
assert!(!node.tokens.is_empty());
});
let sgf_string: String = tree.into();
assert_eq!(sgf_source, sgf_string());
Dependencies
~2.1–2.9MB
~57K SLoC