An open API service indexing awesome lists of open source software.

https://github.com/azur1s/vari

Vari (Väri) is a Rust library for formatting strings with colors and cosmetic stuff to the terminal.
https://github.com/azur1s/vari

ansi cli color colors cosmetics formatter rust style terminal

Last synced: 11 months ago
JSON representation

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

Awesome Lists containing this project

README

          

![Logo](https://raw.githubusercontent.com/azur1s/vari/master/assets/vari_logo.png)
# Vari
[![crates.io](https://img.shields.io/crates/v/vari.svg)](https://crates.io/crates/vari)
[![crates.io](https://docs.rs/chumsky/badge.svg)](https://docs.rs/vari/)
[![crates.io](https://img.shields.io/crates/dr/vari)](https://crates.io/crates/vari)
[![License](https://img.shields.io/crates/l/vari.svg)](https://github.com/azur1s/vari#license)

Vari (Väri) is a Rust library for formatting strings with colors and cosmetic stuff to the terminal. Like [Rich](https://github.com/Textualize/rich) library for Python.
> Väri means "color" in Finnish.

## Installing
Vari come with color anchors as default feature,
The other opt-in features are: "log", "fun",
```toml
[dependencies]
vari = "0.2.1"
```

## Features

### Color Anchor
> This is in default features.

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

Anchors

Colors:



  • [$black]

  • [$red]

  • [$green]

  • [$yellow]

  • [$blue]

  • [$magenta]

  • [$cyan]

  • [$white]

  • [$reset] or [$r] or [$/]


Bright colors:



  • [$bright_black] or [$brightblack]

  • [$bright_red] or [$brightred]

  • [$bright_green] or [$brightgreen]

  • [$bright_yellow] or [$brightyellow]

  • [$bright_blue] or [$brightblue]

  • [$bright_magenta] or [$brightmagenta]

  • [$bright_cyan] or [$brightcyan]

  • [$bright_white] or [$brightwhite]


Styles



  • [$regular]

  • [$bold]

  • [$dim] or [$low] or [$low_intensity] or [$lowintensity]

  • [$italic]

  • [$underline]

  • [$blink] or [$blinking]

  • [$reverse] or [$reversed]

  • [$invisible] or [$hidden]

  • [$strikethrough] or [$strike_through]


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
```toml
[dependencies]
vari = { version = "0.2.1", features = ["colorize"] }
```

Colorize string directly by calling colorize() method, like [colored](https://github.com/mackwic/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
```toml
[dependencies]
vari = { version = "0.2.1", features = ["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](https://raw.githubusercontent.com/azur1s/vari/master/assets/log.png)

### No ANSI for .len()
> This is in default features.

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 padding_amount = w - right.no_ansi().len() - left.no_ansi().len();
let padding = " ".repeat(padding_amount);

let mut result = String::new();

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

return result
```
![no_ansi()](https://raw.githubusercontent.com/azur1s/vari/master/assets/no_ansi.png)

### Fun
```toml
[dependencies]
vari = { version = "0.2.1", features = ["fun"] }
```

```rust
fn main() {
// Rainbow colors!
println!("{}", vari::fun::rainbow("Rainbow!!!"));
}
```
## License
This crate is under [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.en.html) license.