vividtext/
lib.rs

1pub mod colorful_text {
2    #[derive(Clone)]
3    pub enum OutputFormat {
4        Ansi, // ANSIエスケープコードを使用して8ビットカラーを適用
5        EightBit, // 直接8ビットカラーコードを使用(ターミナルでの表示に適している)
6    }
7
8    pub fn apply_gradient(text: &str, format: OutputFormat) -> String {
9        let mut result = String::new();
10        let hue_step = 360.0 / text.chars().count() as f32;
11
12        for (i, char) in text.chars().enumerate() {
13            let hue = (i as f32) * hue_step;
14            // 8ビットカラーインデックスを計算
15            let base = 16; // 基本色とグレースケールを除外
16            let color_index = base + ((hue / 360.0) * 216.0).floor() as u8;
17
18            // ANSIエスケープコードまたは直接8ビットカラーコードの使用
19            let color_code = match format {
20                OutputFormat::Ansi | OutputFormat::EightBit => format!("\x1b[38;5;{}m", color_index),
21            };
22
23            result.push_str(&color_code);
24            result.push(char); // グラデーションを適用した文字を追加
25        }
26        result.push_str("\x1b[0m"); // テキストの終わりにリセットコードを追加して、後続のテキストに影響を与えないようにする
27        result
28    }
29}