Set up SGF reading and start on the game database #47
|
@ -131,7 +131,9 @@ fn parse_sequence<'a, E: nom::error::ParseError<&'a str>>(
|
||||||
println!("::: parse_sequence: {}", input);
|
println!("::: parse_sequence: {}", input);
|
||||||
let (input, _) = multispace0(input)?;
|
let (input, _) = multispace0(input)?;
|
||||||
let (input, nodes) = many1(parse_node)(input)?;
|
let (input, nodes) = many1(parse_node)(input)?;
|
||||||
|
let (input, _) = multispace0(input)?;
|
||||||
let (input, sub_sequences) = many0(parse_tree)(input)?;
|
let (input, sub_sequences) = many0(parse_tree)(input)?;
|
||||||
|
let (input, _) = multispace0(input)?;
|
||||||
|
|
||||||
Ok((
|
Ok((
|
||||||
input,
|
input,
|
||||||
|
@ -157,6 +159,7 @@ fn parse_property<'a, E: nom::error::ParseError<&'a str>>(
|
||||||
let (input, _) = multispace0(input)?;
|
let (input, _) = multispace0(input)?;
|
||||||
let (input, ident) = alpha1(input)?;
|
let (input, ident) = alpha1(input)?;
|
||||||
let (input, values) = many1(parse_propval)(input)?;
|
let (input, values) = many1(parse_propval)(input)?;
|
||||||
|
let (input, _) = multispace0(input)?;
|
||||||
|
|
||||||
let values = values
|
let values = values
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
@ -477,4 +480,22 @@ k<. Hard line breaks are all other linebreaks.",
|
||||||
.to_owned()
|
.to_owned()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn it_parses_sgf_with_newline_in_sequence() {
|
||||||
|
let data = String::from(
|
||||||
|
"(;FF[4]C[root](;C[a];C[b](;C[c])(;C[d];C[e]
|
||||||
|
))(;C[f](;C[g];C[h];C[i])(;C[j])))",
|
||||||
|
);
|
||||||
|
parse_tree::<nom::error::VerboseError<&str>>(&data).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn it_parses_sgf_with_newline_between_two_sequence_closings() {
|
||||||
|
let data = String::from(
|
||||||
|
"(;FF[4]C[root](;C[a];C[b](;C[c])(;C[d];C[e])
|
||||||
|
)(;C[f](;C[g];C[h];C[i])(;C[j])))",
|
||||||
|
);
|
||||||
|
parse_tree::<nom::error::VerboseError<&str>>(&data).unwrap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue