diff options
Diffstat (limited to 'vendor/owo-colors/src/lib.rs')
-rw-r--r-- | vendor/owo-colors/src/lib.rs | 515 |
1 files changed, 0 insertions, 515 deletions
diff --git a/vendor/owo-colors/src/lib.rs b/vendor/owo-colors/src/lib.rs deleted file mode 100644 index 74a4764..0000000 --- a/vendor/owo-colors/src/lib.rs +++ /dev/null @@ -1,515 +0,0 @@ -//! |**Quick Links**|[`OwoColorize`](OwoColorize)|[`Style`]|[`StyledList`]|[`github`](https://github.com/jam1garner/owo-colors)| -//! |-|-|-|-|-| -//! -//! --- -//! -//! This crate provides [`OwoColorize`](OwoColorize), an extension trait for colorizing a -//! given type. -//! -//! ## Example -//! -//! ```rust -//! use owo_colors::OwoColorize; -//! -//! fn main() { -//! // Foreground colors -//! println!("My number is {:#x}!", 10.green()); -//! // Background colors -//! println!("My number is not {}!", 4.on_red()); -//! } -//! ``` -//! -//! ## Generically color -//! -//! ```rust -//! use owo_colors::OwoColorize; -//! use owo_colors::colors::*; -//! -//! fn main() { -//! // Generically color -//! println!("My number might be {}!", 4.fg::<Black>().bg::<Yellow>()); -//! } -//! ``` -//! -//! ## Stylize -//! -//! ```rust -//! use owo_colors::OwoColorize; -//! -//! println!("{}", "strikethrough".strikethrough()); -//! ``` -//! -//! ## Only Style on Supported Terminals -//! -//! ```rust -//! # #[cfg(feature = "supports-color")] { -//! use owo_colors::{OwoColorize, Stream::Stdout}; -//! -//! println!( -//! "{}", -//! "colored blue if a supported terminal" -//! .if_supports_color(Stdout, |text| text.bright_blue()) -//! ); -//! # } -//! ``` -//! -//! Supports `NO_COLOR`/`FORCE_COLOR` environment variables, checks if it's a tty, checks -//! if it's running in CI (and thus likely supports color), and checks which terminal is being -//! used. (Note: requires `supports-colors` feature) -//! -//! ## Style Objects -//! -//! owo-colors also features the ability to create a [`Style`] object and use it to -//! apply the same set of colors/effects to any number of things to display. -//! -//! ```rust -//! use owo_colors::{OwoColorize, Style}; -//! -//! let my_style = Style::new() -//! .red() -//! .on_white() -//! .strikethrough(); -//! -//! let text = "red text, white background, struck through"; -//! println!("{}", text.style(my_style)); -//! ``` -#![cfg_attr(not(test), no_std)] -#![cfg_attr(doc_cfg, feature(doc_cfg))] -#![doc(html_logo_url = "https://jam1.re/img/rust_owo.svg")] -#![warn(missing_docs)] - -pub mod colors; -mod combo; -mod dyn_colors; -mod dyn_styles; -mod styled_list; -pub mod styles; - -#[cfg(feature = "supports-colors")] -mod overrides; - -#[cfg(feature = "supports-colors")] -pub(crate) use overrides::OVERRIDE; - -use core::fmt; -use core::marker::PhantomData; - -/// A trait for describing a type which can be used with [`FgColorDisplay`](FgColorDisplay) or -/// [`BgCBgColorDisplay`](BgColorDisplay) -pub trait Color { - /// The ANSI format code for setting this color as the foreground - const ANSI_FG: &'static str; - - /// The ANSI format code for setting this color as the background - const ANSI_BG: &'static str; - - /// The raw ANSI format for settings this color as the foreground without the ANSI - /// delimiters ("\x1b" and "m") - const RAW_ANSI_FG: &'static str; - - /// The raw ANSI format for settings this color as the background without the ANSI - /// delimiters ("\x1b" and "m") - const RAW_ANSI_BG: &'static str; - - #[doc(hidden)] - type DynEquivelant: DynColor; - - #[doc(hidden)] - const DYN_EQUIVELANT: Self::DynEquivelant; - - #[doc(hidden)] - fn into_dyncolors() -> crate::DynColors; -} - -/// A trait describing a runtime-configurable color which can displayed using [`FgDynColorDisplay`](FgDynColorDisplay) -/// or [`BgDynColorDisplay`](BgDynColorDisplay). If your color will be known at compile time it -/// is recommended you avoid this. -pub trait DynColor { - /// A function to output a ANSI code to a formatter to set the foreground to this color - fn fmt_ansi_fg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result; - /// A function to output a ANSI code to a formatter to set the background to this color - fn fmt_ansi_bg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result; - - /// A function to output a raw ANSI code to a formatter to set the foreground to this color, - /// but without including the ANSI delimiters. - fn fmt_raw_ansi_fg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result; - - /// A function to output a raw ANSI code to a formatter to set the background to this color, - /// but without including the ANSI delimiters. - fn fmt_raw_ansi_bg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result; - - #[doc(hidden)] - fn get_dyncolors_fg(&self) -> DynColors; - #[doc(hidden)] - fn get_dyncolors_bg(&self) -> DynColors; -} - -/// Transparent wrapper around a type which implements all the formatters the wrapped type does, -/// with the addition of changing the foreground color. Recommended to be constructed using -/// [`OwoColorize`](OwoColorize). -#[repr(transparent)] -pub struct FgColorDisplay<'a, C: Color, T>(&'a T, PhantomData<C>); - -/// Transparent wrapper around a type which implements all the formatters the wrapped type does, -/// with the addition of changing the background color. Recommended to be constructed using -/// [`OwoColorize`](OwoColorize). -#[repr(transparent)] -pub struct BgColorDisplay<'a, C: Color, T>(&'a T, PhantomData<C>); - -/// Wrapper around a type which implements all the formatters the wrapped type does, -/// with the addition of changing the foreground color. Is not recommended unless compile-time -/// coloring is not an option. -pub struct FgDynColorDisplay<'a, Color: DynColor, T>(&'a T, Color); - -/// Wrapper around a type which implements all the formatters the wrapped type does, -/// with the addition of changing the background color. Is not recommended unless compile-time -/// coloring is not an option. -pub struct BgDynColorDisplay<'a, Color: DynColor, T>(&'a T, Color); - -macro_rules! style_methods { - ($(#[$meta:meta] $name:ident $ty:ident),* $(,)?) => { - $( - #[$meta] - #[must_use] - #[inline(always)] - fn $name<'a>(&'a self) -> styles::$ty<'a, Self> { - styles::$ty(self) - } - )* - }; -} - -const _: () = (); // workaround for syntax highlighting bug - -macro_rules! color_methods { - ($( - #[$fg_meta:meta] #[$bg_meta:meta] $color:ident $fg_method:ident $bg_method:ident - ),* $(,)?) => { - $( - #[$fg_meta] - #[must_use] - #[inline(always)] - fn $fg_method<'a>(&'a self) -> FgColorDisplay<'a, colors::$color, Self> { - FgColorDisplay(self, PhantomData) - } - - #[$bg_meta] - #[must_use] - #[inline(always)] - fn $bg_method<'a>(&'a self) -> BgColorDisplay<'a, colors::$color, Self> { - BgColorDisplay(self, PhantomData) - } - )* - }; -} - -const _: () = (); // workaround for syntax highlighting bug - -/// Extension trait for colorizing a type which implements any std formatter -/// ([`Display`](core::fmt::Display), [`Debug`](core::fmt::Debug), [`UpperHex`](core::fmt::UpperHex), -/// etc.) -/// -/// ## Example -/// -/// ```rust -/// use owo_colors::OwoColorize; -/// -/// println!("My number is {:#x}!", 10.green()); -/// println!("My number is not {}!", 4.on_red()); -/// ``` -/// -/// ## How to decide which method to use -/// -/// **Do you have a specific color you want to use?** -/// -/// Use the specific color's method, such as [`blue`](OwoColorize::blue) or -/// [`on_green`](OwoColorize::on_green). -/// -/// -/// **Do you want your colors configurable via generics?** -/// -/// Use [`fg`](OwoColorize::fg) and [`bg`](OwoColorize::bg) to make it compile-time configurable. -/// -/// -/// **Do you need to pick a color at runtime?** -/// -/// Use the [`color`](OwoColorize::color), [`on_color`](OwoColorize::on_color), -/// [`truecolor`](OwoColorize::truecolor) or [`on_truecolor`](OwoColorize::on_truecolor). -/// -/// **Do you need some other text modifier?** -/// -/// * [`bold`](OwoColorize::bold) -/// * [`dimmed`](OwoColorize::dimmed) -/// * [`italic`](OwoColorize::italic) -/// * [`underline`](OwoColorize::underline) -/// * [`blink`](OwoColorize::blink) -/// * [`blink_fast`](OwoColorize::blink_fast) -/// * [`reversed`](OwoColorize::reversed) -/// * [`hidden`](OwoColorize::hidden) -/// * [`strikethrough`](OwoColorize::strikethrough) -/// -/// **Do you want it to only display colors if it's a terminal?** -/// -/// 1. Enable the `supports-colors` feature -/// 2. Colorize inside [`if_supports_color`](OwoColorize::if_supports_color) -/// -/// **Do you need to store a set of colors/effects to apply to multiple things?** -/// -/// Use [`style`](OwoColorize::style) to apply a [`Style`] -/// -pub trait OwoColorize: Sized { - /// Set the foreground color generically - /// - /// ```rust - /// use owo_colors::{OwoColorize, colors::*}; - /// - /// println!("{}", "red foreground".fg::<Red>()); - /// ``` - #[must_use] - #[inline(always)] - fn fg<C: Color>(&self) -> FgColorDisplay<'_, C, Self> { - FgColorDisplay(self, PhantomData) - } - - /// Set the background color generically. - /// - /// ```rust - /// use owo_colors::{OwoColorize, colors::*}; - /// - /// println!("{}", "black background".bg::<Black>()); - /// ``` - #[must_use] - #[inline(always)] - fn bg<C: Color>(&self) -> BgColorDisplay<'_, C, Self> { - BgColorDisplay(self, PhantomData) - } - - color_methods! { - /// Change the foreground color to black - /// Change the background color to black - Black black on_black, - /// Change the foreground color to red - /// Change the background color to red - Red red on_red, - /// Change the foreground color to green - /// Change the background color to green - Green green on_green, - /// Change the foreground color to yellow - /// Change the background color to yellow - Yellow yellow on_yellow, - /// Change the foreground color to blue - /// Change the background color to blue - Blue blue on_blue, - /// Change the foreground color to magenta - /// Change the background color to magenta - Magenta magenta on_magenta, - /// Change the foreground color to purple - /// Change the background color to purple - Magenta purple on_purple, - /// Change the foreground color to cyan - /// Change the background color to cyan - Cyan cyan on_cyan, - /// Change the foreground color to white - /// Change the background color to white - White white on_white, - - /// Change the foreground color to the terminal default - /// Change the background color to the terminal default - Default default_color on_default_color, - - /// Change the foreground color to bright black - /// Change the background color to bright black - BrightBlack bright_black on_bright_black, - /// Change the foreground color to bright red - /// Change the background color to bright red - BrightRed bright_red on_bright_red, - /// Change the foreground color to bright green - /// Change the background color to bright green - BrightGreen bright_green on_bright_green, - /// Change the foreground color to bright yellow - /// Change the background color to bright yellow - BrightYellow bright_yellow on_bright_yellow, - /// Change the foreground color to bright blue - /// Change the background color to bright blue - BrightBlue bright_blue on_bright_blue, - /// Change the foreground color to bright magenta - /// Change the background color to bright magenta - BrightMagenta bright_magenta on_bright_magenta, - /// Change the foreground color to bright purple - /// Change the background color to bright purple - BrightMagenta bright_purple on_bright_purple, - /// Change the foreground color to bright cyan - /// Change the background color to bright cyan - BrightCyan bright_cyan on_bright_cyan, - /// Change the foreground color to bright white - /// Change the background color to bright white - BrightWhite bright_white on_bright_white, - } - - style_methods! { - /// Make the text bold - bold BoldDisplay, - /// Make the text dim - dimmed DimDisplay, - /// Make the text italicized - italic ItalicDisplay, - /// Make the text italicized - underline UnderlineDisplay, - /// Make the text blink - blink BlinkDisplay, - /// Make the text blink (but fast!) - blink_fast BlinkFastDisplay, - /// Swap the foreground and background colors - reversed ReversedDisplay, - /// Hide the text - hidden HiddenDisplay, - /// Cross out the text - strikethrough StrikeThroughDisplay, - } - - /// Set the foreground color at runtime. Only use if you do not know which color will be used at - /// compile-time. If the color is constant, use either [`OwoColorize::fg`](OwoColorize::fg) or - /// a color-specific method, such as [`OwoColorize::green`](OwoColorize::green), - /// - /// ```rust - /// use owo_colors::{OwoColorize, AnsiColors}; - /// - /// println!("{}", "green".color(AnsiColors::Green)); - /// ``` - #[must_use] - #[inline(always)] - fn color<Color: DynColor>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self> { - FgDynColorDisplay(self, color) - } - - /// Set the background color at runtime. Only use if you do not know what color to use at - /// compile-time. If the color is constant, use either [`OwoColorize::bg`](OwoColorize::bg) or - /// a color-specific method, such as [`OwoColorize::on_yellow`](OwoColorize::on_yellow), - /// - /// ```rust - /// use owo_colors::{OwoColorize, AnsiColors}; - /// - /// println!("{}", "yellow background".on_color(AnsiColors::BrightYellow)); - /// ``` - #[must_use] - #[inline(always)] - fn on_color<Color: DynColor>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self> { - BgDynColorDisplay(self, color) - } - - /// Set the foreground color to a specific RGB value. - #[must_use] - fn fg_rgb<const R: u8, const G: u8, const B: u8>( - &self, - ) -> FgColorDisplay<'_, colors::CustomColor<R, G, B>, Self> { - FgColorDisplay(self, PhantomData) - } - - /// Set the background color to a specific RGB value. - #[must_use] - fn bg_rgb<const R: u8, const G: u8, const B: u8>( - &self, - ) -> BgColorDisplay<'_, colors::CustomColor<R, G, B>, Self> { - BgColorDisplay(self, PhantomData) - } - - /// Sets the foreground color to an RGB value. - #[must_use] - #[inline(always)] - fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self> { - FgDynColorDisplay(self, Rgb(r, g, b)) - } - - /// Sets the background color to an RGB value. - #[must_use] - #[inline(always)] - fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self> { - BgDynColorDisplay(self, Rgb(r, g, b)) - } - - /// Apply a runtime-determined style - #[must_use] - fn style(&self, style: Style) -> Styled<&Self> { - style.style(self) - } - - /// Apply a given transformation function to all formatters if the given stream - /// supports at least basic ANSI colors, allowing you to conditionally apply - /// given styles/colors. - /// - /// Requires the `supports-colors` feature. - /// - /// ```rust - /// use owo_colors::{OwoColorize, Stream}; - /// - /// println!( - /// "{}", - /// "woah! error! if this terminal supports colors, it's blue" - /// .if_supports_color(Stream::Stdout, |text| text.bright_blue()) - /// ); - /// ``` - #[must_use] - #[cfg(feature = "supports-colors")] - fn if_supports_color<'a, Out, ApplyFn>( - &'a self, - stream: Stream, - apply: ApplyFn, - ) -> SupportsColorsDisplay<'a, Self, Out, ApplyFn> - where - ApplyFn: Fn(&'a Self) -> Out, - { - SupportsColorsDisplay(self, apply, stream) - } -} - -#[cfg(feature = "supports-colors")] -mod supports_colors; - -#[cfg(feature = "supports-colors")] -pub use { - overrides::{set_override, unset_override}, - supports_color::Stream, - supports_colors::SupportsColorsDisplay, -}; - -pub use colors::{ - ansi_colors::AnsiColors, css::dynamic::CssColors, dynamic::Rgb, xterm::dynamic::XtermColors, -}; - -// TODO: figure out some wait to only implement for fmt::Display | fmt::Debug | ... -impl<D: Sized> OwoColorize for D {} - -pub use {combo::ComboColorDisplay, dyn_colors::*, dyn_styles::*}; - -/// Module for drop-in [`colored`](https://docs.rs/colored) support to aid in porting code from -/// [`colored`](https://docs.rs/colored) to owo-colors. -/// -/// Just replace: -/// -/// ```rust -/// # mod colored {} -/// use colored::*; -/// ``` -/// -/// with -/// -/// ```rust -/// use owo_colors::colored::*; -/// ``` -pub mod colored { - pub use crate::AnsiColors as Color; - pub use crate::OwoColorize; - - /// A couple of functions to enable and disable coloring similarly to `colored` - #[cfg(feature = "supports-colors")] - pub mod control { - pub use crate::{set_override, unset_override}; - } -} - -pub use styled_list::StyledList; -#[cfg(feature = "alloc")] -pub use styled_list::StyledVec; - -#[cfg(test)] -mod tests; |