Initial commit
This commit is contained in:
commit
c13c875d3e
|
@ -0,0 +1,2 @@
|
|||
/target
|
||||
/Cargo.lock
|
|
@ -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]
|
|
@ -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!"));
|
||||
}
|
|
@ -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"
|
||||
)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue