1use collections::HashMap;
2
3#[cfg(test)]
4#[ctor::ctor]
5fn init_logger() {
6 if std::env::var("RUST_LOG").is_ok() {
7 env_logger::init();
8 }
9}
10
11pub fn marked_text_by(
12 marked_text: &str,
13 markers: Vec<char>,
14) -> (String, HashMap<char, Vec<usize>>) {
15 let mut extracted_markers: HashMap<char, Vec<usize>> = Default::default();
16 let mut unmarked_text = String::new();
17
18 for char in marked_text.chars() {
19 if markers.contains(&char) {
20 let char_offsets = extracted_markers.entry(char).or_insert(Vec::new());
21 char_offsets.push(unmarked_text.len());
22 } else {
23 unmarked_text.push(char);
24 }
25 }
26
27 (unmarked_text, extracted_markers)
28}
29
30pub fn marked_text(marked_text: &str) -> (String, Vec<usize>) {
31 let (unmarked_text, mut markers) = marked_text_by(marked_text, vec!['|']);
32 (unmarked_text, markers.remove(&'|').unwrap_or_else(Vec::new))
33}