bioneer 0.1.1

An Open-Source Rust Implementation of Bionic Reading.
Documentation
use lazy_static::lazy_static;
use regex::{Match, Regex};

lazy_static! {
    static ref CONVERTIBLE_REGEX: Regex = Regex::new(r"(<!--[\s\S]*?-->)|(<[^>]*>)").unwrap();
}

pub fn build_is_html_checker(text: &str) -> impl Fn(Match) -> bool {
    let html_tag_iter = CONVERTIBLE_REGEX.find_iter(text).collect::<Vec<_>>();
    let html_tag_range_iter: Vec<_> = html_tag_iter
        .iter()
        .map(|x| (x.start(), x.start() + x.as_str().len() - 1))
        .collect();
    let reversed_html_tag_iter: Vec<_> = html_tag_range_iter.into_iter().rev().collect();

    move |m| {
        let start_index = m.start();
        let tag_range = reversed_html_tag_iter
            .iter()
            .find(|(range_start, _)| start_index > *range_start);

        if let Some((_, range_end)) = tag_range {
            let is_include = start_index < *range_end;
            return is_include;
        }

        false
    }
}