#![allow(clippy::let_and_return)]
use crate::model::{
Symbol,
SymbolSpread,
IsSymbol
};
use regex::Regex;
use crate::utils::cleaner::remove_banned_chars;
use crate::utils::duplicates::remove_duplicates;
pub fn find_symbol_spread(
body: &str
) -> Vec<String> {
let re: Regex = Regex::new(r"\dSpread").unwrap(); let span_re: Regex = Regex::new(r"<span></span>").unwrap(); let mut lines_with_spread: Vec<String> = Vec::new();
let mut capture: bool = false;
let mut captured_lines: Vec<String> = Vec::new();
let mut previous_line: String = String::new();
for line in body.lines().rev() {
if re.is_match(line) {
capture = true;
}
if capture {
captured_lines.push(previous_line.clone());
captured_lines.push(line.to_string());
if span_re.is_match(line) {
capture = false;
lines_with_spread.push(captured_lines.iter().rev().cloned().collect::<Vec<String>>().join("\n"));
captured_lines.clear();
}
}
previous_line = line.to_string(); }
let valid_symbols: Vec<String> = lines_with_spread.into_iter().filter(|line| {
let words: Vec<&str> = line.split_whitespace().collect();
words.iter().any(|&word| Symbol::is_valid_symbol(word))
}).collect();
let numbers_and_symbols: Vec<String> = valid_symbols.into_iter().map(|line| {
let words: Vec<&str> = line.split_whitespace().filter(|&word| {
Symbol::is_valid_symbol(word) || word.parse::<f32>().is_ok()
}).collect();
words.join(" ")
}).collect();
let cleaned_lines: Vec<String> = remove_duplicates(numbers_and_symbols);
cleaned_lines
}