diff --git a/src/color.rs b/src/color.rs new file mode 100644 index 0000000..63f76b9 --- /dev/null +++ b/src/color.rs @@ -0,0 +1,8 @@ + +use termion::color::{ Fg, Rgb, Reset }; + +pub static BLACK: Fg = Fg(Rgb(0x00, 0x00, 0x00)); +pub static WHITE: Fg = Fg(Rgb(0xFF, 0xFF, 0xFF)); + +pub static RESET: Fg = Fg(Reset); + diff --git a/src/draw.rs b/src/draw.rs index ce7957f..7114252 100644 --- a/src/draw.rs +++ b/src/draw.rs @@ -1,7 +1,4 @@ -use std::{ - io, - io::Write -}; +use std::io::{ self, Write }; use termion::{ terminal_size, @@ -10,10 +7,10 @@ use termion::{ color::{ Fg, Rgb }, cursor, input::TermRead, - raw::IntoRawMode, - style + raw::IntoRawMode }; +use crate::color::RESET; use crate::flag::BLOCK; pub fn draw(colors: &[Fg]) { @@ -28,7 +25,6 @@ pub fn draw(colors: &[Fg]) { stdout.flush().ok(); let stripe = BLOCK.repeat(width as usize); - let reset = style::Reset; let mut index = 0; for n in 0..(height as usize) { @@ -38,7 +34,7 @@ pub fn draw(colors: &[Fg]) { } write!( stdout, - "{color}{stripe}{reset}", + "{color}{stripe}{RESET}", color = colors[index] ).ok(); } diff --git a/src/flag.rs b/src/flag.rs index d0c3bd0..2a76160 100644 --- a/src/flag.rs +++ b/src/flag.rs @@ -1,6 +1,7 @@ use termion::color; +use crate::color::*; use crate::draw::draw; pub static BLOCK: &str = "█"; @@ -17,8 +18,7 @@ pub fn pride(small: bool) { let width = 18; println!( - "{red}{stripe}\n{orange}{stripe}\n{yellow}{stripe}\n{green}{stripe}\n{blue}{stripe}\n{purple}{stripe}{reset}", - reset = color::Fg(color::Reset), + "{red}{stripe}\n{orange}{stripe}\n{yellow}{stripe}\n{green}{stripe}\n{blue}{stripe}\n{purple}{stripe}{RESET}", stripe = BLOCK.repeat(width) ); } else { draw(&[red, orange, yellow, green, blue, purple]); } @@ -27,60 +27,65 @@ pub fn pride(small: bool) { pub fn transgender(small: bool) { let pink = color::Fg(color::Rgb(0x7A, 0xCB, 0xF5)); let blue = color::Fg(color::Rgb(0xEA, 0xAC, 0xB8)); - let white = color::Fg(color::Rgb(0xFF, 0xFF, 0xFF)); if small { let width = 15; println!( - "{pink}{stripe}\n{blue}{stripe}\n{white}{stripe}\n{blue}{stripe}\n{pink}{stripe}{reset}", - reset = color::Fg(color::Reset), + "{pink}{stripe}\n{blue}{stripe}\n{WHITE}{stripe}\n{blue}{stripe}\n{pink}{stripe}{RESET}", stripe = BLOCK.repeat(width) ); - } else { draw(&[pink, blue, white, blue, pink]); } + } else { draw(&[pink, blue, WHITE, blue, pink]); } } // everything below here is alphabetical +pub fn agender(small: bool) { + let gray = color::Fg(color::Rgb(0xB9, 0xB9, 0xB9)); + let green = color::Fg(color::Rgb(0xB8, 0xF4, 0x83)); + + if small { + let width = 21; + + println!( + "{BLACK}{stripe}\n{gray}{stripe}\n{WHITE}{stripe}\n{green}{stripe}\n{WHITE}{stripe}\n{gray}{stripe}\n{BLACK}{stripe}{RESET}", + stripe = BLOCK.repeat(width) + ); + } else { draw(&[BLACK, gray, WHITE, green, WHITE, gray, BLACK]); } +} + pub fn aromantic(small: bool) { let green = color::Fg(color::Rgb(0x3B, 0xA7, 0x40)); let lime = color::Fg(color::Rgb(0xA8, 0xD4, 0x7A)); - let white = color::Fg(color::Rgb(0xFF, 0xFF, 0xFF)); let grey = color::Fg(color::Rgb(0xAB, 0xAB, 0xAB)); - let black = color::Fg(color::Rgb(0x00, 0x00, 0x00)); if small { let width = 15; println!( - "{green}{stripe}\n{lime}{stripe}\n{white}{stripe}\n{grey}{stripe}\n{black}{stripe}{reset}", - reset = color::Fg(color::Reset), + "{green}{stripe}\n{lime}{stripe}\n{WHITE}{stripe}\n{grey}{stripe}\n{BLACK}{stripe}{RESET}", stripe = BLOCK.repeat(width) ); - } else { draw(&[green, lime, white, grey, black]); } + } else { draw(&[green, lime, WHITE, grey, BLACK]); } } pub fn asexual(small: bool) { - let black = color::Fg(color::Rgb(0x00, 0x00, 0x00)); let grey = color::Fg(color::Rgb(0xA4, 0xA4, 0xA4)); - let white = color::Fg(color::Rgb(0xFF, 0xFF, 0xFF)); let purple = color::Fg(color::Rgb(0x81, 0x00, 0x81)); if small { let width = 12; println!( - "{black}{stripe}\n{grey}{stripe}\n{white}{stripe}\n{purple}{stripe}{reset}", - reset = color::Fg(color::Reset), + "{BLACK}{stripe}\n{grey}{stripe}\n{WHITE}{stripe}\n{purple}{stripe}{RESET}", stripe = BLOCK.repeat(width) ); - } else { draw(&[black, grey, white, purple]); } + } else { draw(&[BLACK, grey, WHITE, purple]); } } pub fn bigender(small: bool) { let pink = color::Fg(color::Rgb(0xE6, 0x76, 0xA6)); let yellow = color::Fg(color::Rgb(0xF9, 0xF0, 0x4C)); - let white = color::Fg(color::Rgb(0xFF, 0xFF, 0xFF)); let purple = color::Fg(color::Rgb(0xAB, 0x6B, 0xBB)); let blue = color::Fg(color::Rgb(0x6D, 0x96, 0xDC)); @@ -88,11 +93,10 @@ pub fn bigender(small: bool) { let width = 15; println!( - "{pink}{stripe}\n{yellow}{stripe}\n{white}{stripe}\n{purple}{stripe}\n{blue}{stripe}{reset}", - reset = color::Fg(color::Reset), + "{pink}{stripe}\n{yellow}{stripe}\n{WHITE}{stripe}\n{purple}{stripe}\n{blue}{stripe}{RESET}", stripe = BLOCK.repeat(width) ); - } else { draw(&[pink, yellow, white, purple, blue]); } + } else { draw(&[pink, yellow, WHITE, purple, blue]); } } pub fn bisexual(small: bool) { @@ -104,33 +108,53 @@ pub fn bisexual(small: bool) { let width = 15; println!( - "{magenta}{stripe}\n{stripe}\n{purple}{stripe}\n{blue}{stripe}\n{stripe}{reset}", - reset = color::Fg(color::Reset), + "{magenta}{stripe}\n{stripe}\n{purple}{stripe}\n{blue}{stripe}\n{stripe}{RESET}", stripe = BLOCK.repeat(width) ); } else { draw(&[magenta, magenta, purple, blue, blue]); } } +pub fn genderfluid(small: bool) { + let pink = color::Fg(color::Rgb(0xFF, 0x75, 0xA2)); + let violet = color::Fg(color::Rgb(0xBE, 0x18, 0xD6)); + let blue = color::Fg(color::Rgb(0x33, 0x3E, 0xBD)); + + if small { + + } else { draw(&[pink, WHITE, violet, BLACK, blue]); } +} + +pub fn genderqueer(small: bool) { + let purple = color::Fg(color::Rgb(0xB8, 0x99, 0xDF)); + let green = color::Fg(color::Rgb(0x6B, 0x8E, 0x3B)); + + if small { + let width = 18; + + println!( + "{purple}{stripe}\n{stripe}\n{WHITE}{stripe}\n{stripe}\n{green}{stripe}\n{stripe}{RESET}", + stripe = BLOCK.repeat(width) + ); + } else { draw(&[purple, WHITE, green]); } +} + pub fn gendervoid(small: bool) { let navy = color::Fg(color::Rgb(0x08, 0x11, 0x4A)); let gray = color::Fg(color::Rgb(0x4A, 0x48, 0x4B)); - let black = color::Fg(color::Rgb(0x00, 0x00, 0x00)); if small { let width = 15; println!( - "{navy}{stripe}\n{gray}{stripe}\n{black}{stripe}\n{gray}{stripe}\n{navy}{stripe}{reset}", - reset = color::Fg(color::Reset), + "{navy}{stripe}\n{gray}{stripe}\n{BLACK}{stripe}\n{gray}{stripe}\n{navy}{stripe}{RESET}", stripe = BLOCK.repeat(width) ); - } else { draw(&[navy, gray, black, gray, navy]); } + } else { draw(&[navy, gray, BLACK, gray, navy]); } } pub fn lesbian(small: bool) { let red = color::Fg(color::Rgb(0xD6, 0x28, 0x00)); let orange = color::Fg(color::Rgb(0xFF, 0x9B, 0x56)); - let white = color::Fg(color::Rgb(0xFF, 0xFF, 0xFF)); let pink = color::Fg(color::Rgb(0xD4, 0x62, 0xA6)); let magenta = color::Fg(color::Rgb(0xA4, 0x00, 0x62)); @@ -138,11 +162,10 @@ pub fn lesbian(small: bool) { let width = 15; println!( - "{red}{stripe}\n{orange}{stripe}\n{white}{stripe}\n{pink}{stripe}\n{magenta}{stripe}{reset}", - reset = color::Fg(color::Reset), + "{red}{stripe}\n{orange}{stripe}\n{WHITE}{stripe}\n{pink}{stripe}\n{magenta}{stripe}{RESET}", stripe = BLOCK.repeat(width) ); - } else { draw(&[red, orange, white, pink, magenta]); } + } else { draw(&[red, orange, WHITE, pink, magenta]); } } pub fn multigender(small: bool) { @@ -154,8 +177,7 @@ pub fn multigender(small: bool) { let width = 15; println!( - "{blue}{stripe}\n{ltblue}{stripe}\n{orange}{stripe}\n{ltblue}{stripe}\n{blue}{stripe}{reset}", - reset = color::Fg(color::Reset), + "{blue}{stripe}\n{ltblue}{stripe}\n{orange}{stripe}\n{ltblue}{stripe}\n{blue}{stripe}{RESET}", stripe = BLOCK.repeat(width) ); } else { draw(&[blue, ltblue, orange, ltblue, blue]); } @@ -163,19 +185,16 @@ pub fn multigender(small: bool) { pub fn nonbinary(small: bool) { let yellow = color::Fg(color::Rgb(0xFF, 0xF4, 0x33)); - let white = color::Fg(color::Rgb(0xFF, 0xFF, 0xFF)); let purple = color::Fg(color::Rgb(0x9B, 0x59, 0xD0)); - let black = color::Fg(color::Rgb(0x00, 0x00, 0x00)); if small { let width = 12; println!( - "{yellow}{stripe}\n{white}{stripe}\n{purple}{stripe}\n{black}{stripe}{reset}", - reset = color::Fg(color::Reset), + "{yellow}{stripe}\n{WHITE}{stripe}\n{purple}{stripe}\n{BLACK}{stripe}{RESET}", stripe = BLOCK.repeat(width) ); - } else { draw(&[yellow, white, purple, black]); } + } else { draw(&[yellow, WHITE, purple, BLACK]); } } pub fn pansexual(small: bool) { @@ -187,8 +206,7 @@ pub fn pansexual(small: bool) { let width = 18; println!( - "{magenta}{stripe}\n{stripe}\n{yellow}{stripe}\n{stripe}\n{cyan}{stripe}\n{stripe}{reset}", - reset = color::Fg(color::Reset), + "{magenta}{stripe}\n{stripe}\n{yellow}{stripe}\n{stripe}\n{cyan}{stripe}\n{stripe}{RESET}", stripe = BLOCK.repeat(width) ); } else { draw(&[magenta, yellow, cyan]); } diff --git a/src/main.rs b/src/main.rs index 5a52c0d..3c827f8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use std::process::exit; use pico_args::Arguments; +mod color; mod draw; mod flag; @@ -32,6 +33,8 @@ fn main() { Some("transgender") => flag::transgender(small), + Some("agender") => flag::agender(small), + Some("aro") | Some("aromantic") => flag::aromantic(small), @@ -43,6 +46,10 @@ fn main() { Some("bi") | Some("bisexual") => flag::bisexual(small), + Some("genderfluid") => flag::genderfluid(small), + + Some("genderqueer") => flag::genderqueer(small), + Some("gendervoid") => flag::gendervoid(small), Some("lesbian") => flag::lesbian(small), @@ -86,6 +93,7 @@ fn list_text() { println!(" bigender bigender pride flag"); println!(" bi, bisexual bisexual pride flag"); println!(" gay, pride six-color rainbow flag"); + println!(" genderqueer genderqueer pride flag"); println!(" gendervoid gendervoid pride flag"); println!(" lesbian lesbian pride flag"); println!(" multigender multigender pride flag");