fix(varcon)!: Parse verified/level

This commit is contained in:
Ed Page 2024-08-23 13:43:44 -05:00
parent 6e39b516fb
commit 17b003e8f2
5 changed files with 21527 additions and 7171 deletions

View file

@ -1,6 +1,8 @@
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)] #[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
pub struct Cluster { pub struct Cluster {
pub header: &'static str, pub header: &'static str,
pub verified: bool,
pub level: usize,
pub entries: &'static [Entry], pub entries: &'static [Entry],
pub notes: &'static [&'static str], pub notes: &'static [&'static str],
} }
@ -9,6 +11,8 @@ impl Cluster {
pub fn into_owned(self) -> crate::Cluster { pub fn into_owned(self) -> crate::Cluster {
crate::Cluster { crate::Cluster {
header: self.header.to_owned(), header: self.header.to_owned(),
verified: self.verified,
level: self.level,
entries: self.entries.iter().map(|s| s.into_owned()).collect(), entries: self.entries.iter().map(|s| s.into_owned()).collect(),
notes: self.notes.iter().map(|s| (*s).to_owned()).collect(), notes: self.notes.iter().map(|s| (*s).to_owned()).collect(),
} }

View file

@ -13,6 +13,8 @@ pub use crate::parser::ClusterIter;
#[derive(Clone, PartialEq, Eq, Hash, Debug)] #[derive(Clone, PartialEq, Eq, Hash, Debug)]
pub struct Cluster { pub struct Cluster {
pub header: String, pub header: String,
pub verified: bool,
pub level: usize,
pub entries: Vec<Entry>, pub entries: Vec<Entry>,
pub notes: Vec<String>, pub notes: Vec<String>,
} }

View file

@ -54,7 +54,9 @@ A Cv: acknowledgment's / Av B C: acknowledgement's
str![[r#" str![[r#"
[ [
Cluster { Cluster {
header: "acknowledgment <verified> (level 35)", header: "acknowledgment ",
verified: true,
level: 35,
entries: [ entries: [
Entry { Entry {
variants: [ variants: [
@ -229,7 +231,9 @@ A Cv: acknowledgment's / Av B C: acknowledgement's
str![[r#" str![[r#"
[ [
Cluster { Cluster {
header: "acknowledgment <verified> (level 35)", header: "acknowledgment ",
verified: true,
level: 35,
entries: [ entries: [
Entry { Entry {
variants: [ variants: [
@ -379,7 +383,9 @@ A Cv: acknowledgment's / Av B C: acknowledgement's
notes: [], notes: [],
}, },
Cluster { Cluster {
header: "acknowledgment <verified> (level 35)", header: "acknowledgment ",
verified: true,
level: 35,
entries: [ entries: [
Entry { Entry {
variants: [ variants: [
@ -545,7 +551,11 @@ impl Cluster {
let header = ( let header = (
"#", "#",
winnow::ascii::space0, winnow::ascii::space0,
winnow::ascii::till_line_ending, winnow::token::take_till(1.., ('\r', '\n', '<', '(')),
winnow::ascii::space0,
opt(("<verified>", winnow::ascii::space0)),
delimited("(level ", winnow::ascii::digit1, ')').parse_to::<usize>(),
winnow::ascii::space0,
winnow::ascii::line_ending, winnow::ascii::line_ending,
); );
let note = preceded( let note = preceded(
@ -562,10 +572,14 @@ impl Cluster {
); );
let (header, entries, notes): (_, _, Vec<_>) = cluster.parse_next(input)?; let (header, entries, notes): (_, _, Vec<_>) = cluster.parse_next(input)?;
let verified = header.4.is_some();
let level = header.5;
let header = header.2.to_owned(); let header = header.2.to_owned();
let notes = notes.into_iter().map(|s| s.to_owned()).collect(); let notes = notes.into_iter().map(|s| s.to_owned()).collect();
let c = Self { let c = Self {
header, header,
verified,
level,
entries, entries,
notes, notes,
}; };
@ -606,7 +620,9 @@ A Cv: acknowledgment's / Av B C: acknowledgement's
actual.to_debug(), actual.to_debug(),
str![[r#" str![[r#"
Cluster { Cluster {
header: "acknowledgment <verified> (level 35)", header: "acknowledgment ",
verified: true,
level: 35,
entries: [ entries: [
Entry { Entry {
variants: [ variants: [
@ -785,7 +801,9 @@ A B C: coloration's / B. Cv: colouration's
actual.to_debug(), actual.to_debug(),
str![[r#" str![[r#"
Cluster { Cluster {
header: "coloration <verified> (level 50)", header: "coloration ",
verified: true,
level: 50,
entries: [ entries: [
Entry { Entry {
variants: [ variants: [

File diff suppressed because it is too large Load diff

View file

@ -36,6 +36,8 @@ fn generate<W: std::io::Write>(file: &mut W) {
cluster.infer(); cluster.infer();
writeln!(file, "Cluster {{").unwrap(); writeln!(file, "Cluster {{").unwrap();
writeln!(file, " header: {:?},", cluster.header).unwrap(); writeln!(file, " header: {:?},", cluster.header).unwrap();
writeln!(file, " verified: {:?},", cluster.verified).unwrap();
writeln!(file, " level: {:?},", cluster.level).unwrap();
writeln!(file, " entries: &[").unwrap(); writeln!(file, " entries: &[").unwrap();
for entry in &cluster.entries { for entry in &cluster.entries {
writeln!(file, " Entry {{").unwrap(); writeln!(file, " Entry {{").unwrap();