1pub trait TinyAnsi {
17 fn bold(&self) -> String;
18 fn dimmed(&self) -> String;
19 fn italic(&self) -> String;
20 fn underline(&self) -> String;
21 fn blink(&self) -> String;
22 fn reverse(&self) -> String;
23 fn hidden(&self) -> String;
24 fn strikethrough(&self) -> String;
25
26 fn black(&self) -> String;
27 fn red(&self) -> String;
28 fn green(&self) -> String;
29 fn yellow(&self) -> String;
30 fn blue(&self) -> String;
31 fn magenta(&self) -> String;
32 fn cyan(&self) -> String;
33 fn white(&self) -> String;
34 fn bright_black(&self) -> String;
35 fn bright_red(&self) -> String;
36 fn bright_green(&self) -> String;
37 fn bright_yellow(&self) -> String;
38 fn bright_blue(&self) -> String;
39 fn bright_magenta(&self) -> String;
40 fn bright_cyan(&self) -> String;
41 fn bright_white(&self) -> String;
42
43 fn on_black(&self) -> String;
44 fn on_red(&self) -> String;
45 fn on_green(&self) -> String;
46 fn on_yellow(&self) -> String;
47 fn on_blue(&self) -> String;
48 fn on_magenta(&self) -> String;
49 fn on_cyan(&self) -> String;
50 fn on_white(&self) -> String;
51 fn on_bright_black(&self) -> String;
52 fn on_bright_red(&self) -> String;
53 fn on_bright_green(&self) -> String;
54 fn on_bright_yellow(&self) -> String;
55 fn on_bright_blue(&self) -> String;
56 fn on_bright_magenta(&self) -> String;
57 fn on_bright_cyan(&self) -> String;
58 fn on_bright_white(&self) -> String;
59}
60
61impl TinyAnsi for str {
62 fn bold(&self) -> String {
63 format!("\u{1b}[1m{}\u{1b}[0m", self)
64 }
65 fn dimmed(&self) -> String {
66 format!("\u{1b}[2m{}\u{1b}[0m", self)
67 }
68 fn italic(&self) -> String {
69 format!("\u{1b}[3m{}\u{1b}[0m", self)
70 }
71 fn underline(&self) -> String {
72 format!("\u{1b}[4m{}\u{1b}[0m", self)
73 }
74 fn blink(&self) -> String {
75 format!("\u{1b}[5m{}\u{1b}[0m", self)
76 }
77 fn reverse(&self) -> String {
78 format!("\u{1b}[7m{}\u{1b}[0m", self)
79 }
80 fn hidden(&self) -> String {
81 format!("\u{1b}[8m{}\u{1b}[0m", self)
82 }
83 fn strikethrough(&self) -> String {
84 format!("\u{1b}[9m{}\u{1b}[0m", self)
85 }
86
87 fn black(&self) -> String {
88 format!("\u{1b}[30m{}\u{1b}[0m", self)
89 }
90 fn red(&self) -> String {
91 format!("\u{1b}[31m{}\u{1b}[0m", self)
92 }
93 fn green(&self) -> String {
94 format!("\u{1b}[32m{}\u{1b}[0m", self)
95 }
96 fn yellow(&self) -> String {
97 format!("\u{1b}[33m{}\u{1b}[0m", self)
98 }
99 fn blue(&self) -> String {
100 format!("\u{1b}[34m{}\u{1b}[0m", self)
101 }
102 fn magenta(&self) -> String {
103 format!("\u{1b}[35m{}\u{1b}[0m", self)
104 }
105 fn cyan(&self) -> String {
106 format!("\u{1b}[36m{}\u{1b}[0m", self)
107 }
108 fn white(&self) -> String {
109 format!("\u{1b}[37m{}\u{1b}[0m", self)
110 }
111 fn bright_black(&self) -> String {
112 format!("\u{1b}[90m{}\u{1b}[0m", self)
113 }
114 fn bright_red(&self) -> String {
115 format!("\u{1b}[91m{}\u{1b}[0m", self)
116 }
117 fn bright_green(&self) -> String {
118 format!("\u{1b}[92m{}\u{1b}[0m", self)
119 }
120 fn bright_yellow(&self) -> String {
121 format!("\u{1b}[93m{}\u{1b}[0m", self)
122 }
123 fn bright_blue(&self) -> String {
124 format!("\u{1b}[94m{}\u{1b}[0m", self)
125 }
126 fn bright_magenta(&self) -> String {
127 format!("\u{1b}[95m{}\u{1b}[0m", self)
128 }
129 fn bright_cyan(&self) -> String {
130 format!("\u{1b}[96m{}\u{1b}[0m", self)
131 }
132 fn bright_white(&self) -> String {
133 format!("\u{1b}[97m{}\u{1b}[0m", self)
134 }
135
136 fn on_black(&self) -> String {
137 format!("\u{1b}[40m{}\u{1b}[0m", self)
138 }
139 fn on_red(&self) -> String {
140 format!("\u{1b}[41m{}\u{1b}[0m", self)
141 }
142 fn on_green(&self) -> String {
143 format!("\u{1b}[42m{}\u{1b}[0m", self)
144 }
145 fn on_yellow(&self) -> String {
146 format!("\u{1b}[43m{}\u{1b}[0m", self)
147 }
148 fn on_blue(&self) -> String {
149 format!("\u{1b}[44m{}\u{1b}[0m", self)
150 }
151 fn on_magenta(&self) -> String {
152 format!("\u{1b}[45m{}\u{1b}[0m", self)
153 }
154 fn on_cyan(&self) -> String {
155 format!("\u{1b}[46m{}\u{1b}[0m", self)
156 }
157 fn on_white(&self) -> String {
158 format!("\u{1b}[47m{}\u{1b}[0m", self)
159 }
160 fn on_bright_black(&self) -> String {
161 format!("\u{1b}[100m{}\u{1b}[0m", self)
162 }
163 fn on_bright_red(&self) -> String {
164 format!("\u{1b}[101m{}\u{1b}[0m", self)
165 }
166 fn on_bright_green(&self) -> String {
167 format!("\u{1b}[102m{}\u{1b}[0m", self)
168 }
169 fn on_bright_yellow(&self) -> String {
170 format!("\u{1b}[103m{}\u{1b}[0m", self)
171 }
172 fn on_bright_blue(&self) -> String {
173 format!("\u{1b}[104m{}\u{1b}[0m", self)
174 }
175 fn on_bright_magenta(&self) -> String {
176 format!("\u{1b}[105m{}\u{1b}[0m", self)
177 }
178 fn on_bright_cyan(&self) -> String {
179 format!("\u{1b}[106m{}\u{1b}[0m", self)
180 }
181 fn on_bright_white(&self) -> String {
182 format!("\u{1b}[107m{}\u{1b}[0m", self)
183 }
184}
185
186#[cfg(test)]
187mod tests {
188 use crate::TinyAnsi;
189
190 #[test]
191 fn test_show() {
192 println!("{}", "bold".bold());
193 println!("{}", "dimmed".dimmed());
194 println!("{}", "italic".italic());
195 println!("{}", "underline".underline());
196 println!("{}", "blink".blink());
197 println!("{}", "reverse".reverse());
198 println!("{}", "hidden".hidden());
199 println!("{}", "strikethrough".strikethrough());
200
201 println!("{}", "black".black());
202 println!("{}", "red".red());
203 println!("{}", "green".green());
204 println!("{}", "yellow".yellow());
205 println!("{}", "blue".blue());
206 println!("{}", "magenta".magenta());
207 println!("{}", "cyan".cyan());
208 println!("{}", "white".white());
209 println!("{}", "bright_black".bright_black());
210 println!("{}", "bright_red".bright_red());
211 println!("{}", "bright_green".bright_green());
212 println!("{}", "bright_yellow".bright_yellow());
213 println!("{}", "bright_blue".bright_blue());
214 println!("{}", "bright_magenta".bright_magenta());
215 println!("{}", "bright_cyan".bright_cyan());
216 println!("{}", "bright_white".bright_white());
217
218 println!("{}", "on black".on_black());
219 println!("{}", "on red".on_red());
220 println!("{}", "on green".on_green());
221 println!("{}", "on yellow".on_yellow());
222 println!("{}", "on blue".on_blue());
223 println!("{}", "on magenta".on_magenta());
224 println!("{}", "on cyan".on_cyan());
225 println!("{}", "on white".on_white());
226 println!("{}", "on bright_black".on_bright_black());
227 println!("{}", "on bright_red".on_bright_red());
228 println!("{}", "on bright_green".on_bright_green());
229 println!("{}", "on bright_yellow".on_bright_yellow());
230 println!("{}", "on bright_blue".on_bright_blue());
231 println!("{}", "on bright_magenta".on_bright_magenta());
232 println!("{}", "on bright_cyan".on_bright_cyan());
233 println!("{}", "on bright_white".on_bright_white());
234
235 println!("{}", "italic yellow on blue".italic().yellow().on_blue());
236 println!(
237 "{}",
238 "bold italic red on green".bold().italic().red().on_green()
239 );
240 println!(
241 "{}",
242 "underline blink magenta on red"
243 .underline()
244 .blink()
245 .magenta()
246 .on_red()
247 );
248 }
249}