1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
pub struct Strategery { space: bool, reverse: bool, add_space_re: regex::Regex, add_space_reverse_re: regex::Regex, remove_space_re: regex::Regex, remove_space_reverse_re: regex::Regex, } impl Strategery { pub fn new(one: &'static str, other: &'static str, space: bool, reverse: bool) -> Self { return Strategery { space: space, reverse: reverse, add_space_re: regexp!("({})({})", one, other), add_space_reverse_re: regexp!("({})({})", other, one), remove_space_re: regexp!("({})[ ]({})", one, other), remove_space_reverse_re: regexp!("({})[ ]({})", other, one), }; } pub fn format(&self, text: &str) -> String { if self.space { return self.add_space(text); } else { return self.remove_space(text); } } fn add_space(&self, text: &str) -> String { let mut out = String::from(text); out = (&self.add_space_re.replace_all(&out, "$1 $2")).to_string(); if self.reverse { out = (&self.add_space_reverse_re.replace_all(&out, "$1 $2")).to_string(); } return out; } fn remove_space(&self, text: &str) -> String { let mut out = String::from(text); out = (&self.remove_space_re.replace_all(&out, "$1 $2")).to_string(); if self.reverse { out = (&self.remove_space_reverse_re.replace_all(&out, "$1 $2")).to_string(); } return out; } }