Logo

Vari

crates.io crates.io crates.io License

Vari (Väri) is a Rust library for formatting strings with colors and cosmetic stuff to the terminal. Like Rich library for Python.

Installing

toml [dependencies] vari = "0.1.8"

Features

Color Anchor

Color anchor are a bbcode-like markup for colors and styles (eg. "[\$red]", "[bg\$yellow]", "[\$bold]")

Anchors

Colors:

Bright colors:

Styles

Note: [bg$any] is a valid anchors, it will be translated to [$reversed][$any] (where `any` is the color/style name above)

```rust // [$/] is shorthand for [$reset] let message = vari::format("[$blue]Hello, [$green]World![$/]"); println!("{}", message);

// Custom RGB! println!("{}", vari::format("[$[114, 119, 39]]#727727![$[66, 4, 32]] Do you see it?[$/]"));

// Style anchor and also easy macros :O vprintln!("{}Bold and Italic :O{}", "[$bold][$italic]", "[$/]");

// Background color vprintln!("{}Backgroundssss{}[$/]", "[bg$magenta]", "[bg$[188, 188, 188]]World![$/]")

// Hexadecimal vprintln!("[$#ffffff]Hello, [$#000000]World![$/]"); ```

Colorize

Colorize string directly by calling colorize() method, like colored crate.

For example: "red".colorize("red") is the same as "[\$red]red[$/]"

Note: Chaining is not yet implemented, because .colorize() adds [$/] so you can't chain styles

The argument should be the color's name (the same name as the anchor colors). ```rust use vari::colorize::Colorize;

fn main() { println!("{}", "Hello, World".colorize("cyan")); println!("{}", "This is red".colorize("brightred")); println!("{}", "Bold.".colorize("bold")); } ```

Log

Some println-ish function for logging

rust let log_message = vformat!("[$green]This message is send by main.rs![$/]"); let log_file = vformat!("[$dim]src/main.rs[$/]"); vari::util::log(&log_message, &log_file); logs

No ANSI for .len()

This might be used in padding calculation, because in colored string (eg. "\x1b[31mTest\x1b[0m"), the length calculated also contains the "[31m" and the "[0m" in it, making the padding incorrect. So this trait implements a ".no_ansi()" which remove all the ANSI escape sequence and then you could do ".len()" after it. ```rust // vari::util::log()

// Calculate padding amount between the message. // eg. left_right let paddingamount = w - right.noansi().len() - left.noansi().len(); let padding = " ".repeat(padding_amount);

let mut result = String::new();

result.pushstr(left); result.pushstr(&padding); result.push_str(right);

return result
``` no_ansi()

Fun

rust fn main() { // Rainbow colors! println!("{}", vari::fun::rainbow("Rainbow!!!")); }

License

This crate is under AGPL-3.0 license.