| 12345678910111213141516171819202122232425 |
- use ansi_term::{ANSIString, Style};
- pub fn escape<'a>(string: String, bits: &mut Vec<ANSIString<'a>>, good: Style, bad: Style) {
- if string.chars().all(|c| c >= 0x20 as char) {
- bits.push(good.paint(string));
- }
- else {
- for c in string.chars() {
- // The `escape_default` method on `char` is *almost* what we want here, but
- // it still escapes non-ASCII UTF-8 characters, which are still printable.
- if c >= 0x20 as char {
- // TODO: This allocates way too much,
- // hence the `all` check above.
- let mut s = String::new();
- s.push(c);
- bits.push(good.paint(s));
- } else {
- let s = c.escape_default().collect::<String>();
- bits.push(bad.paint(s));
- }
- }
- }
- }
|