use crate::format::*;
use crate::logging::*;
use crate::regexes::*;
use log::Level::Warn;
#[derive(Clone, Debug)]
pub struct Verbatim {
pub actual: i8,
pub visual: bool,
}
impl Verbatim {
pub const fn new() -> Self {
Self {
actual: 0,
visual: false,
}
}
}
pub fn get_verbatim(
line: &str,
state: &State,
logs: &mut Vec<Log>,
file: &str,
warn: bool,
pattern: &Pattern,
) -> Verbatim {
let diff = get_verbatim_diff(line, pattern);
let actual = state.verbatim.actual + diff;
let visual = actual > 0 || state.verbatim.actual > 0;
if warn && (actual < 0) {
record_line_log(
logs,
Warn,
file,
state.linum_new,
state.linum_old,
line,
"Verbatim count is negative.",
);
}
Verbatim { actual, visual }
}
fn get_verbatim_diff(line: &str, pattern: &Pattern) -> i8 {
if pattern.contains_env_begin
&& VERBATIMS_BEGIN.iter().any(|r| line.contains(r))
{
1
} else if pattern.contains_env_end
&& VERBATIMS_END.iter().any(|r| line.contains(r))
{
-1
} else {
0
}
}