rspack_style/style_core/
scan.rs1use crate::extend::vec_str::VecCharExtend;
2
3pub type CharWord<'a> = (Option<&'a char>, &'a char, Option<&'a char>);
4pub type ScanArg<'a> = (&'a mut usize, &'a mut Vec<char>, &'a mut bool);
5
6#[inline]
10pub fn traversal(
11 arg_start: Option<usize>,
12 charlist: &[char],
13 exec: &mut dyn for<'a> FnMut(ScanArg<'a>, CharWord) -> Result<(), String>,
14) -> Result<(String, usize), String> {
15 let mut index = arg_start.unwrap_or(0);
16 let mut temp: Vec<char> = Vec::with_capacity(charlist.len());
17 let mut hasend = false;
18
19 while index < charlist.len() {
20 let prevchar = if index == 0 {
21 None
22 } else {
23 charlist.get(index - 1)
24 };
25 let char = charlist.get(index).unwrap();
26 let nextchar = if index + 1 < charlist.len() {
27 charlist.get(index + 1)
28 } else {
29 None
30 };
31 exec(
32 (&mut index, &mut temp, &mut hasend),
33 (prevchar, char, nextchar),
34 )?;
35 if hasend {
36 break;
37 }
38 index += 1;
39 }
40 let final_str = temp.poly();
41 Ok((final_str, index))
42}