Initial commit

This commit is contained in:
Michael Pfaff 2022-12-23 20:44:23 -05:00
commit c13c875d3e
Signed by: michael
GPG Key ID: CF402C4A012AA9D4
4 changed files with 174 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/target
/Cargo.lock

8
Cargo.toml Normal file
View File

@ -0,0 +1,8 @@
[package]
name = "ansee"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

28
examples/print.rs Normal file
View File

@ -0,0 +1,28 @@
use ansee::*;
fn main() {
// black, red, green, yellow, blue, purple, cyan, white
println!(styled!(bold, black, "Hello, World!"));
println!(styled!(black, "Hello, World!"));
println!(styled!(bold, red, "Hello, World!"));
println!(styled!(red, "Hello, World!"));
println!(styled!(bold, green, "Hello, World!"));
println!(styled!(green, "Hello, World!"));
println!(styled!(bold, yellow, "Hello, World!"));
println!(styled!(yellow, "Hello, World!"));
println!(styled!(bold, blue, "Hello, World!"));
println!(styled!(blue, "Hello, World!"));
println!(styled!(bold, purple, "Hello, World!"));
println!(styled!(purple, "Hello, World!"));
println!(styled!(bold, cyan, "Hello, World!"));
println!(styled!(cyan, "Hello, World!"));
println!(styled!(bold, white, "Hello, World!"));
println!(styled!(white, "Hello, World!"));
}

136
src/lib.rs Normal file
View File

@ -0,0 +1,136 @@
#[macro_export]
macro_rules! __ansi_esc {
() => {
"\x1B"
};
}
pub use __ansi_esc as esc;
#[macro_export]
macro_rules! __ansi_csi {
() => {
::std::concat!($crate::esc!(), "[")
};
}
pub use __ansi_csi as csi;
#[macro_export]
macro_rules! __ansi_style_code {
($code:literal) => {
::std::concat!($code)
};
($code:literal, $($codes:tt)+) => {
::std::concat!($code, ";", $crate::style_code!($( $codes )+))
};
($code:ident, $($codes:tt)+) => {
::std::concat!($crate::style_code!($code), ";", $crate::style_code!($( $codes )+))
};
(reset) => {
$crate::style_code!(0)
};
(bold) => {
$crate::style_code!(1)
};
(faint) => {
$crate::style_code!(2)
};
(italic) => {
$crate::style_code!(3)
};
(underline) => {
$crate::style_code!(4)
};
(blink) => {
$crate::style_code!(5)
};
(negative) => {
$crate::style_code!(7)
};
(crossed) => {
$crate::style_code!(9)
};
(black) => {
// BACKGROUND COLOR
$crate::style_code!(30)
};
(red) => {
$crate::style_code!(31)
};
(green) => {
$crate::style_code!(32)
};
(yellow) => {
$crate::style_code!(33)
};
(blue) => {
$crate::style_code!(34)
};
(purple) => {
$crate::style_code!(35)
};
(cyan) => {
$crate::style_code!(36)
};
(white) => {
$crate::style_code!(37)
};
}
pub use __ansi_style_code as style_code;
#[macro_export]
macro_rules! __ansi_style {
($( $tt:tt )+) => {
::std::concat!($crate::csi!(), $crate::style_code!($( $tt )+), "m")
};
}
pub use __ansi_style as style;
#[macro_export]
macro_rules! __ansi_styled {
( [$( $style:tt )+], $fmt:literal ) => {
::std::concat!($crate::style!($( $style )+), $fmt, $crate::style!(reset))
};
( [$( $style:tt )+], $fmt:literal, $( $args:tt )+ ) => {
::std::format!($crate::styled!([$( $style )+], $fmt), $( $args )+)
};
( $( $style:ident, )+ $fmt:literal ) => {
$crate::styled!([$( $style ),+], $fmt)
};
( $( $style:ident, )+ $fmt:literal, $( $args:tt )+ ) => {
$crate::styled!([$( $style ),+], $fmt, $( $args )+)
};
}
pub use __ansi_styled as styled;
#[macro_export]
macro_rules! __ansi_define {
( $name:ident = $( $style:tt )+ ) => {
$crate::define!(@ $name = [ $( $style )+ ], $);
};
(@ $name:ident = [ $( $style:tt )+ ], $dol:tt) => {
#[macro_export]
macro_rules! $name {
($dol( $tokens:tt )+) => {
$crate::styled!([$( $style )+], $dol( $tokens )+)
};
}
};
}
pub use __ansi_define as define;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn styled_literal() {
assert_eq!(
styled!(bold, green, "Hello, World!"),
"\x1B[1;32mHello, World!\x1B[0m"
)
}
}