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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
//! # Text Printer Module
//!
//! This module provides functionality for printing colored and styled text to the terminal.
//! It leverages the color configurations from the `color::config` module and offers both
//! function-based and macro-based interfaces for convenience.
//!
//! ## Features
//!
//! - Print entire lines with a single color
//! - Print text with both style (bold, underline) and color
//! - Print multiple text segments with different colors in a single line
//! - Macros for simplified importing and usage
//!
//! ## Usage Examples
//!
//! ```rust
//! use drgrep::color::config::Color;
//! use drgrep::color::printer::{print_colored, print_styled, print_partial_colored};
//!
//! // Print a line with a single color
//! print_colored("This is an error message", Color::RED);
//!
//! // Print text with both style and color
//! print_styled("Important warning", Color::BOLD, Color::YELLOW);
//!
//! // Print multiple text segments with different colors
//! let parts = vec![
//! ("Success:", Color::GREEN),
//! ("File processed", Color::WHITE)
//! ];
//! print_partial_colored(&parts);
//!
//! // Using macros (requires importing them)
//! drgrep::print_colored!("Error detected", Color::RED);
//! ```
use crateColor;
/// Type alias for text parts with their associated colors
///
/// Each element in the vector is a tuple containing:
/// - The text segment to be printed
/// - The color or style to apply to that segment
pub type TextParts<'a> = &'a ;
/// Prints text in a specified color
///
/// This function prints the provided text in the specified color and
/// automatically resets the color after printing.
///
/// # Arguments
///
/// * `text` - The text to print
/// * `color` - The color to apply (from `Color` constants)
///
/// # Examples
///
/// ```
/// use drgrep::color::config::Color;
/// use drgrep::color::printer::print_colored;
///
/// print_colored("Success!", Color::GREEN);
/// print_colored("Error: File not found", Color::RED);
/// ```
/// Prints text with both style and color
///
/// This function applies both a text style (like bold or underline)
/// and a color to the provided text, then prints it.
///
/// # Arguments
///
/// * `text` - The text to print
/// * `style` - The style to apply (from `Color` constants)
/// * `color` - The color to apply (from `Color` constants)
///
/// # Examples
///
/// ```
/// use drgrep::color::config::Color;
/// use drgrep::color::printer::print_styled;
///
/// print_styled("Important warning", Color::BOLD, Color::YELLOW);
/// print_styled("Critical error", Color::BOLD, Color::RED);
/// ```
/// Prints multiple text segments with different colors on a single line
///
/// This function takes a vector of (text, color) pairs and prints each segment
/// with its associated color on the same line, with a space between segments.
///
/// # Arguments
///
/// * `parts` - A reference to a vector of tuples, each containing text and its color
///
/// # Examples
///
/// ```
/// use drgrep::color::config::Color;
/// use drgrep::color::printer::print_partial_colored;
///
/// let parts = vec![
/// ("File:", Color::BLUE),
/// ("example.txt", Color::WHITE),
/// ("Status:", Color::BLUE),
/// ("Found", Color::GREEN)
/// ];
/// print_partial_colored(&parts);
/// ```
/// Macro for printing colored text
///
/// This macro provides a convenient shorthand for calling the `print_colored` function.
///
/// # Examples
///
/// ```
/// use drgrep::color::config::Color;
/// use drgrep::print_colored;
///
/// print_colored!("Error message", Color::RED);
/// ```
/// Macro for printing styled and colored text
///
/// This macro provides a convenient shorthand for calling the `print_styled` function.
///
/// # Examples
///
/// ```
/// use drgrep::color::config::Color;
/// use drgrep::print_styled;
///
/// print_styled!("Warning", Color::BOLD, Color::YELLOW);
/// ```
/// Macro for printing multiple colored text segments
///
/// This macro provides a convenient shorthand for calling the `print_partial_colored` function.
///
/// # Examples
///
/// ```
/// use drgrep::color::config::Color;
/// use drgrep::print_partial_colored;
///
/// let parts = vec![
/// ("Success:", Color::GREEN),
/// ("Operation completed", Color::WHITE)
/// ];
/// print_partial_colored!(&parts);
/// ```