chromakitx 1.0.2

A comprehensive color manipulation library for Rust
Documentation
// SPDX-FileCopyrightText: 2023 CELESTIFYX Team
// SPDX-License-Identifier: GPL-3.0-or-later

use super::EnumColor;

use crate::{
    ColorFormattable,
    define_xterm_colors
};

define_xterm_colors! {
    UserBlack = (0, 0, 0),
    UserRed = (128, 0, 0),
    UserGreen = (0, 128, 0),
    UserYellow = (128, 128, 0),
    UserBlue = (0, 0, 128),
    UserMagenta = (128, 0, 128),
    UserCyan = (0, 128, 128),
    UserWhite = (192, 192, 192),
    UserBrightBlack = (128, 128, 128),
    UserBrightRed = (255, 0, 0),
    UserBrightGreen = (0, 255, 0),
    UserBrightYellow = (255, 255, 0),
    UserBrightBlue = (0, 0, 255),
    UserBrightMagenta = (255, 0, 255),
    UserBrightCyan = (0, 255, 255),
    UserBrightWhite = (255, 255, 255),
    Black = (0, 0, 0),
    StratosBlue = (0, 0, 95),
    NavyBlue = (0, 0, 135),
    MidnightBlue = (0, 0, 175),
    DarkBlue = (0, 0, 215),
    Blue = (0, 0, 255),
    CamaroneGreen = (0, 95, 0),
    BlueStone = (0, 95, 95),
    OrientBlue = (0, 95, 135),
    EndeavourBlue = (0, 95, 175),
    ScienceBlue = (0, 95, 215),
    BlueRibbon = (0, 95, 255),
    JapaneseLaurel = (0, 135, 0),
    DeepSeaGreen = (0, 135, 95),
    Teal = (0, 135, 135),
    DeepCerulean = (0, 135, 175),
    LochmaraBlue = (0, 135, 215),
    AzureRadiance = (0, 135, 255),
    LightJapaneseLaurel = (0, 175, 0),
    Jade = (0, 175, 95),
    PersianGreen = (0, 175, 135),
    BondiBlue = (0, 175, 175),
    Cerulean = (0, 175, 215),
    LightAzureRadiance = (0, 175, 255),
    DarkGreen = (0, 215, 0),
    Malachite = (0, 215, 95),
    CaribbeanGreen = (0, 215, 135),
    LightCaribbeanGreen = (0, 215, 175),
    RobinEggBlue = (0, 215, 215),
    Aqua = (0, 215, 255),
    Green = (0, 255, 0),
    DarkSpringGreen = (0, 255, 95),
    SpringGreen = (0, 255, 135),
    LightSpringGreen = (0, 255, 175),
    BrightTurquoise = (0, 255, 215),
    Cyan = (0, 255, 255),
    Rosewood = (95, 0, 0),
    PompadourMagenta = (95, 0, 95),
    PigmentIndigo = (95, 0, 135),
    DarkPurple = (95, 0, 175),
    ElectricIndigo = (95, 0, 215),
    ElectricPurple = (95, 0, 255),
    VerdunGreen = (95, 95, 0),
    ScorpionOlive = (95, 95, 95),
    Lilac = (95, 95, 135),
    ScampiIndigo = (95, 95, 175),
    Indigo = (95, 95, 215),
    DarkCornflowerBlue = (95, 95, 255),
    DarkLimeade = (95, 135, 0),
    GladeGreen = (95, 135, 95),
    JuniperGreen = (95, 135, 135),
    HippieBlue = (95, 135, 175),
    HavelockBlue = (95, 135, 215),
    CornflowerBlue = (95, 135, 255),
    Limeade = (95, 175, 0),
    FernGreen = (95, 175, 95),
    SilverTree = (95, 175, 135),
    Tradewind = (95, 175, 175),
    ShakespeareBlue = (95, 175, 215),
    DarkMalibuBlue = (95, 175, 255),
    DarkBrightGreen = (95, 215, 0),
    DarkPastelGreen = (95, 215, 95),
    PastelGreen = (95, 215, 135),
    DownyTeal = (95, 215, 175),
    Viking = (95, 215, 215),
    MalibuBlue = (95, 215, 255),
    BrightGreen = (95, 255, 0),
    DarkScreaminGreen = (95, 255, 95),
    ScreaminGreen = (95, 255, 135),
    DarkAquamarine = (95, 255, 175),
    Aquamarine = (95, 255, 215),
    LightAquamarine = (95, 255, 255),
    Maroon = (135, 0, 0),
    DarkFreshEggplant = (135, 0, 95),
    LightFreshEggplant = (135, 0, 135),
    Purple = (135, 0, 175),
    ElectricViolet = (135, 0, 215),
    LightElectricViolet = (135, 0, 255),
    Brown = (135, 95, 0),
    CopperRose = (135, 95, 95),
    StrikemasterPurple = (135, 95, 135),
    DelugePurple = (135, 95, 175),
    DarkMediumPurple = (135, 95, 215),
    DarkHeliotropePurple = (135, 95, 255),
    Olive = (135, 135, 0),
    ClayCreekOlive = (135, 135, 95),
    DarkGray = (135, 135, 135),
    WildBlueYonder = (135, 135, 175),
    ChetwodeBlue = (135, 135, 215),
    SlateBlue = (135, 135, 255),
    LightLimeade = (135, 175, 0),
    ChelseaCucumber = (135, 175, 95),
    BayLeaf = (135, 175, 135),
    GulfStream = (135, 175, 175),
    PoloBlue = (135, 175, 215),
    LightMalibuBlue = (135, 175, 255),
    Pistachio = (135, 215, 0),
    LightPastelGreen = (135, 215, 95),
    DarkFeijoaGreen = (135, 215, 135),
    VistaBlue = (135, 215, 175),
    Bermuda = (135, 215, 215),
    DarkAnakiwaBlue = (135, 215, 255),
    ChartreuseGreen = (135, 255, 0),
    LightScreaminGreen = (135, 255, 95),
    DarkMintGreen = (135, 255, 135),
    MintGreen = (135, 255, 175),
    LighterAquamarine = (135, 255, 215),
    AnakiwaBlue = (135, 255, 255),
    BrightRed = (175, 0, 0),
    DarkFlirt = (175, 0, 95),
    Flirt = (175, 0, 135),
    LightFlirt = (175, 0, 175),
    DarkViolet = (175, 0, 215),
    BrightElectricViolet = (175, 0, 255),
    RoseofSharonOrange = (175, 95, 0),
    MatrixPink = (175, 95, 95),
    TapestryPink = (175, 95, 135),
    FuchsiaPink = (175, 95, 175),
    MediumPurple = (175, 95, 215),
    Heliotrope = (175, 95, 255),
    PirateGold = (175, 135, 0),
    MuesliOrange = (175, 135, 95),
    PharlapPink = (175, 135, 135),
    Bouquet = (175, 135, 175),
    Lavender = (175, 135, 215),
    LightHeliotrope = (175, 135, 255),
    BuddhaGold = (175, 175, 0),
    OliveGreen = (175, 175, 95),
    HillaryOlive = (175, 175, 135),
    SilverChalice = (175, 175, 175),
    WistfulLilac = (175, 175, 215),
    MelroseLilac = (175, 175, 255),
    RioGrandeGreen = (175, 215, 0),
    ConiferGreen = (175, 215, 95),
    Feijoa = (175, 215, 135),
    PixieGreen = (175, 215, 175),
    JungleMist = (175, 215, 215),
    LightAnakiwaBlue = (175, 215, 255),
    Lime = (175, 255, 0),
    GreenYellow = (175, 255, 95),
    LightMintGreen = (175, 255, 135),
    Celadon = (175, 255, 175),
    AeroBlue = (175, 255, 215),
    FrenchPassLightBlue = (175, 255, 255),
    GuardsmanRed = (215, 0, 0),
    RazzmatazzCerise = (215, 0, 95),
    MediumVioletRed = (215, 0, 135),
    HollywoodCerise = (215, 0, 175),
    DarkPurplePizzazz = (215, 0, 215),
    BrighterElectricViolet = (215, 0, 255),
    TennOrange = (215, 95, 0),
    RomanOrange = (215, 95, 95),
    CranberryPink = (215, 95, 135),
    HopbushPink = (215, 95, 175),
    Orchid = (215, 95, 215),
    LighterHeliotrope = (215, 95, 255),
    MangoTango = (215, 135, 0),
    Copperfield = (215, 135, 95),
    SeaPink = (215, 135, 135),
    CanCanPink = (215, 135, 175),
    LightOrchid = (215, 135, 215),
    BrightHeliotrope = (215, 135, 255),
    DarkCorn = (215, 175, 0),
    DarkTachaOrange = (215, 175, 95),
    TanBeige = (215, 175, 135),
    ClamShell = (215, 175, 175),
    ThistlePink = (215, 175, 215),
    Mauve = (215, 175, 255),
    Corn = (215, 215, 0),
    TachaOrange = (215, 215, 95),
    DecoOrange = (215, 215, 135),
    PaleGoldenrod = (215, 215, 175),
    AltoBeige = (215, 215, 215),
    FogPink = (215, 215, 255),
    ChartreuseYellow = (215, 255, 0),
    Canary = (215, 255, 95),
    Honeysuckle = (215, 255, 135),
    ReefPaleYellow = (215, 255, 175),
    SnowyMint = (215, 255, 215),
    OysterBay = (215, 255, 255),
    Red = (255, 0, 0),
    DarkRose = (255, 0, 95),
    Rose = (255, 0, 135),
    LightHollywoodCerise = (255, 0, 175),
    PurplePizzazz = (255, 0, 215),
    Fuchsia = (255, 0, 255),
    BlazeOrange = (255, 95, 0),
    BittersweetOrange = (255, 95, 95),
    WildWatermelon = (255, 95, 135),
    DarkHotPink = (255, 95, 175),
    HotPink = (255, 95, 215),
    PinkFlamingo = (255, 95, 255),
    FlushOrange = (255, 135, 0),
    Salmon = (255, 135, 95),
    VividTangerine = (255, 135, 135),
    PinkSalmon = (255, 135, 175),
    DarkLavenderRose = (255, 135, 215),
    BlushPink = (255, 135, 255),
    YellowSea = (255, 175, 0),
    TexasRose = (255, 175, 95),
    Tacao = (255, 175, 135),
    Sundown = (255, 175, 175),
    CottonCandy = (255, 175, 215),
    LavenderRose = (255, 175, 255),
    Gold = (255, 215, 0),
    Dandelion = (255, 215, 95),
    GrandisCaramel = (255, 215, 135),
    Caramel = (255, 215, 175),
    CosmosSalmon = (255, 215, 215),
    PinkLace = (255, 215, 255),
    Yellow = (255, 255, 0),
    LaserLemon = (255, 255, 95),
    DollyYellow = (255, 255, 135),
    PortafinoYellow = (255, 255, 175),
    Cumulus = (255, 255, 215),
    White = (255, 255, 255),
    DarkCodGray = (8, 8, 8),
    CodGray = (18, 18, 18),
    LightCodGray = (28, 28, 28),
    DarkMineShaft = (38, 38, 38),
    MineShaft = (48, 48, 48),
    LightMineShaft = (58, 58, 58),
    DarkTundora = (68, 68, 68),
    Tundora = (78, 78, 78),
    ScorpionGray = (88, 88, 88),
    DarkDoveGray = (98, 98, 98),
    DoveGray = (108, 108, 108),
    Boulder = (118, 118, 118),
    Gray = (128, 128, 128),
    LightGray = (138, 138, 138),
    DustyGray = (148, 148, 148),
    NobelGray = (158, 158, 158),
    DarkSilverChalice = (168, 168, 168),
    LightSilverChalice = (178, 178, 178),
    DarkSilver = (188, 188, 188),
    Silver = (198, 198, 198),
    DarkAlto = (208, 208, 208),
    Alto = (218, 218, 218),
    Mercury = (228, 228, 228),
    GalleryGray = (238, 238, 238)
}

impl ColorFormattable for XtermColor {
    fn format(&self, is_background: bool) -> String {
        let (r, g, b): (u8, u8, u8) = self.rgb();

        if is_background {
            format!("\x1B[48;2;{};{};{}m", r, g, b)
        } else {
            format!("\x1B[38;2;{};{};{}m", r, g, b)
        }
    }
}

impl EnumColor for XtermColor {
    fn from_name(name: &str) -> Option<Self> {
        Self::from_str(name).ok()
    }
}