4fd5d3f348
* Bump pulldown_cmark to version 0.6.0 * Rename headers to headings
101 lines
2.5 KiB
Rust
101 lines
2.5 KiB
Rust
mod file_info;
|
|
mod page;
|
|
mod section;
|
|
mod ser;
|
|
|
|
pub use self::file_info::FileInfo;
|
|
pub use self::page::Page;
|
|
pub use self::section::Section;
|
|
pub use self::ser::{SerializingPage, SerializingSection};
|
|
|
|
use rendering::Heading;
|
|
|
|
pub fn has_anchor(headings: &[Heading], anchor: &str) -> bool {
|
|
for heading in headings {
|
|
if heading.id == anchor {
|
|
return true;
|
|
}
|
|
if has_anchor(&heading.children, anchor) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
false
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn can_find_anchor_at_root() {
|
|
let input = vec![
|
|
Heading {
|
|
level: 1,
|
|
id: "1".to_string(),
|
|
permalink: String::new(),
|
|
title: String::new(),
|
|
children: vec![],
|
|
},
|
|
Heading {
|
|
level: 2,
|
|
id: "1-1".to_string(),
|
|
permalink: String::new(),
|
|
title: String::new(),
|
|
children: vec![],
|
|
},
|
|
Heading {
|
|
level: 3,
|
|
id: "1-1-1".to_string(),
|
|
permalink: String::new(),
|
|
title: String::new(),
|
|
children: vec![],
|
|
},
|
|
Heading {
|
|
level: 2,
|
|
id: "1-2".to_string(),
|
|
permalink: String::new(),
|
|
title: String::new(),
|
|
children: vec![],
|
|
},
|
|
];
|
|
|
|
assert!(has_anchor(&input, "1-2"));
|
|
}
|
|
|
|
#[test]
|
|
fn can_find_anchor_in_children() {
|
|
let input = vec![Heading {
|
|
level: 1,
|
|
id: "1".to_string(),
|
|
permalink: String::new(),
|
|
title: String::new(),
|
|
children: vec![
|
|
Heading {
|
|
level: 2,
|
|
id: "1-1".to_string(),
|
|
permalink: String::new(),
|
|
title: String::new(),
|
|
children: vec![],
|
|
},
|
|
Heading {
|
|
level: 3,
|
|
id: "1-1-1".to_string(),
|
|
permalink: String::new(),
|
|
title: String::new(),
|
|
children: vec![],
|
|
},
|
|
Heading {
|
|
level: 2,
|
|
id: "1-2".to_string(),
|
|
permalink: String::new(),
|
|
title: String::new(),
|
|
children: vec![],
|
|
},
|
|
],
|
|
}];
|
|
|
|
assert!(has_anchor(&input, "1-2"));
|
|
}
|
|
}
|