ruterm

Форк
0
/
render.rs 
91 строка · 2.2 Кб
1
use crate::{
2
        cursor::{
3
                self,
4
                Direction,
5
        },
6
        error::Result,
7
        io::write_to,
8
};
9
use std::io::{
10
        self,
11
        Write,
12
};
13

14
pub const END: &str = "\n";
15

16
/// Writes `text` to `output` in rendered form.
17
///
18
/// # Usage
19
///
20
/// ```no_run
21
/// use ruterm::render::{
22
///         render_to,
23
///         END, // moves to the newline
24
/// };
25
/// use std::io;
26
///
27
/// let mut output = io::stdout();
28
/// render_to(&mut output, vec!["* *", END, " * ", END, "* *", END]).unwrap();
29
/// ```
30
///
31
/// You can apply style to the text:
32
/// ```no_run
33
/// use ruterm::{
34
///         render::{
35
///                 render_to,
36
///                 END,
37
///         },
38
///         style::{
39
///                 color::fore,
40
///                 RESET,
41
///         },
42
/// };
43
/// use std::io;
44
///
45
/// let mut output = io::stdout();
46
/// render_to(
47
///         &mut output,
48
///         vec![
49
///                 fore::RED,
50
///                 "red",
51
///                 END,
52
///                 fore::GREEN,
53
///                 "green",
54
///                 END,
55
///                 fore::BLUE,
56
///                 "blue",
57
///                 RESET, // don't forget to reset style!
58
///         ],
59
/// ).unwrap();
60
/// ```
61
pub fn render_to<T>(output: &mut dyn Write, text: Vec<T>) -> Result<()>
62
where
63
        T: ToString,
64
{
65
        let mut shift = 0;
66
        for line in text {
67
                let line = line.to_string();
68
                match line.as_str() {
69
                        END => {
70
                                cursor::move_(Direction::Down, 1)?;
71
                                cursor::move_(Direction::Left, shift)?;
72
                                shift = 0;
73
                        }
74
                        _ => {
75
                                write_to(output, line.as_bytes())?;
76
                                if !line.starts_with("\x1b") {
77
                                        shift += line.len() as u16;
78
                                }
79
                        }
80
                }
81
        }
82
        Ok(())
83
}
84

85
/// Writes `text` to stdout in rendered form. Same as `render_to`.
86
pub fn render<T>(text: Vec<T>) -> Result<()>
87
where
88
        T: ToString,
89
{
90
        render_to(&mut io::stdout(), text)
91
}
92

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.