1use super::rule::Rule;
3use super::tree::Tree;
4use super::trim::trim;
5
6pub fn cook(raw: &str) -> String {
7 let raw_chars: Vec<char> = raw.chars().collect();
8 let raw_len = raw_chars.len();
9 let mut cooked = String::with_capacity(2 * raw.len());
10 let mut index = 0usize;
11
12 let search_tree = Tree::from(Rule::default_rules());
13
14 while index < raw_len {
15 match search_tree.query(&raw_chars, index, raw_len) {
16 Some((to, depth)) => {
17 cooked.push_str(to);
18 index += depth;
19 }
20 None => {
21 cooked.push(raw_chars[index]);
22 index += 1;
23 }
24 }
25 }
26
27 trim(&cooked)
28}