1use unicode_segmentation::UnicodeSegmentation;
2
3pub fn remove_lines_postfix(src: &str, postfix: &str) -> String {
4    let mut result = String::new();
5
6    for line in src.lines() {
7        if line.ends_with(postfix) {
8            result.push_str(&line[..line.len() - 4]);
9        } else {
10            result.push_str(line);
11        }
12        result.push('\n');
13    }
14    result.pop();
15    result
16}
17
18#[cfg(windows)]
19pub(crate) fn fit_to_powershell(original_str: &str) -> String {
20    let mut result = String::with_capacity(original_str.len());
21    for g in original_str.graphemes(true) {
22        match g {
23            "`" => result.push_str("``"),
24            "\"" => result.push_str("`\""),
25            "$" => result.push_str("`$"),
26            "#" => result.push_str("`#"),
27            "\n" => result.push_str("`n"),
28            "\r" => result.push_str("`r"),
29            "\t" => result.push_str("`t"),
30            "\x07" => result.push_str("`a"),
31            "\x08" => result.push_str("`b"),
32            "\x0C" => result.push_str("`f"),
33            "\x0B" => result.push_str("`v"),
34            "\x1B" => result.push_str("`e"),
35            _ => result.push_str(g),
36        }
37    }
38    result
39}
40
41#[cfg(unix)]
42pub(crate) fn fit_to_unix(original_str: &str) -> String {
43    let mut result = String::with_capacity(original_str.len());
44    for g in original_str.graphemes(true) {
45        match g {
46            "\\" => result.push_str("\\\\"),
47            _ => result.push_str(g),
48        }
49    }
50    result
51}