Merge branch 'main' into variant
This commit is contained in:
commit
95bb8e9d60
6 changed files with 176 additions and 196 deletions
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "pride"
|
||||
version = "0.0.1"
|
||||
version = "0.1.2"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
|
|
@ -4,9 +4,8 @@
|
|||
A Rust utility to display pride flags in the terminal.
|
||||
|
||||
**This project is under heavy construction! It is subject to major structural and
|
||||
architectural changes. There are no issues with functionality, but I am not
|
||||
satisfied with the current state of the project. The software is usable, but I will
|
||||
continue to refer to it as pre-release until I am happy with it.**
|
||||
architectural changes. There are no issues with functionality, but I will continue
|
||||
to make major changes and refactors until the main roadmap is complete.**
|
||||
|
||||
Currently supports a variety of stripe flags.
|
||||
|
||||
|
|
17
src/color.rs
Normal file
17
src/color.rs
Normal file
|
@ -0,0 +1,17 @@
|
|||
|
||||
use termion::color::{ Fg, Rgb, Reset };
|
||||
|
||||
pub type Color = Fg<Rgb>;
|
||||
pub type Colors = Vec<Fg<Rgb>>;
|
||||
|
||||
pub static BLACK: Color = Fg(Rgb(0x00, 0x00, 0x00));
|
||||
pub static WHITE: Color = Fg(Rgb(0xFF, 0xFF, 0xFF));
|
||||
|
||||
pub static RESET: Fg<Reset> = Fg(Reset);
|
||||
|
||||
pub fn rgb(hex: u32) -> Color {
|
||||
let [_, r, g, b] = hex.to_be_bytes();
|
||||
|
||||
Fg(Rgb(r, g, b))
|
||||
}
|
||||
|
29
src/draw.rs
29
src/draw.rs
|
@ -1,22 +1,18 @@
|
|||
use std::{
|
||||
io,
|
||||
io::Write
|
||||
};
|
||||
use std::io::{ self, Write };
|
||||
|
||||
use termion::{
|
||||
terminal_size,
|
||||
|
||||
clear,
|
||||
color::{ Fg, Rgb },
|
||||
cursor,
|
||||
input::TermRead,
|
||||
raw::IntoRawMode,
|
||||
style
|
||||
raw::IntoRawMode
|
||||
};
|
||||
|
||||
use crate::color::{ RESET, Colors };
|
||||
use crate::flag::BLOCK;
|
||||
|
||||
pub fn draw(colors: &[Fg<Rgb>]) {
|
||||
pub fn full(colors: Colors) {
|
||||
let mut stdout = io::stdout().into_raw_mode().unwrap();
|
||||
let stdin = io::stdin();
|
||||
|
||||
|
@ -28,7 +24,6 @@ pub fn draw(colors: &[Fg<Rgb>]) {
|
|||
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 +33,7 @@ pub fn draw(colors: &[Fg<Rgb>]) {
|
|||
}
|
||||
write!(
|
||||
stdout,
|
||||
"{color}{stripe}{reset}",
|
||||
"{color}{stripe}{RESET}",
|
||||
color = colors[index]
|
||||
).ok();
|
||||
}
|
||||
|
@ -49,4 +44,18 @@ pub fn draw(colors: &[Fg<Rgb>]) {
|
|||
stdout.flush().ok();
|
||||
}
|
||||
|
||||
pub fn small(colors: Colors) {
|
||||
let mut stdout = io::stdout();
|
||||
|
||||
let count = colors.len();
|
||||
let width = count * 3;
|
||||
|
||||
let stripe = BLOCK.repeat(width);
|
||||
|
||||
for color in colors {
|
||||
println!("{color}{stripe}");
|
||||
}
|
||||
print!("{RESET}");
|
||||
stdout.flush().ok();
|
||||
}
|
||||
|
||||
|
|
234
src/flag.rs
234
src/flag.rs
|
@ -1,197 +1,119 @@
|
|||
|
||||
use termion::color;
|
||||
|
||||
use crate::draw::draw;
|
||||
use crate::color::*;
|
||||
|
||||
pub static BLOCK: &str = "█";
|
||||
|
||||
pub fn pride(small: bool) {
|
||||
let red = color::Fg(color::Rgb(0xE5, 0x00, 0x00));
|
||||
let orange = color::Fg(color::Rgb(0xFF, 0x8D, 0x00));
|
||||
let yellow = color::Fg(color::Rgb(0xFF, 0xEE, 0x00));
|
||||
let green = color::Fg(color::Rgb(0x02, 0x81, 0x21));
|
||||
let blue = color::Fg(color::Rgb(0x00, 0x4C, 0xFF));
|
||||
let purple = color::Fg(color::Rgb(0x77, 0x00, 0x88));
|
||||
pub fn pride() -> Colors {
|
||||
let red = rgb(0xE50000);
|
||||
let orange = rgb(0xFF8D00);
|
||||
let yellow = rgb(0xFFEE00);
|
||||
let green = rgb(0x028121);
|
||||
let blue = rgb(0x004CFF);
|
||||
let purple = rgb(0x770088);
|
||||
|
||||
if small { // small flag: 18x6
|
||||
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),
|
||||
stripe = BLOCK.repeat(width)
|
||||
);
|
||||
} else { draw(&[red, orange, yellow, green, blue, purple]); }
|
||||
vec![red, orange, yellow, green, blue, purple]
|
||||
}
|
||||
|
||||
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));
|
||||
pub fn transgender() -> Colors {
|
||||
let pink = rgb(0x7ACBF5);
|
||||
let blue = rgb(0xEAACB8);
|
||||
|
||||
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),
|
||||
stripe = BLOCK.repeat(width)
|
||||
);
|
||||
} else { draw(&[pink, blue, white, blue, pink]); }
|
||||
vec![pink, blue, WHITE, blue, pink]
|
||||
}
|
||||
|
||||
// everything below here is alphabetical
|
||||
|
||||
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));
|
||||
pub fn agender() -> Colors {
|
||||
let gray = rgb(0xB9B9B9);
|
||||
let green = rgb(0xB8F483);
|
||||
|
||||
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),
|
||||
stripe = BLOCK.repeat(width)
|
||||
);
|
||||
} else { draw(&[green, lime, white, grey, black]); }
|
||||
vec![BLACK, gray, WHITE, green, WHITE, gray, 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));
|
||||
pub fn aromantic() -> Colors {
|
||||
let green = rgb(0x3BA740);
|
||||
let lime = rgb(0xA8D47A);
|
||||
let grey = rgb(0xABABAB);
|
||||
|
||||
if small {
|
||||
let width = 12;
|
||||
|
||||
println!(
|
||||
"{black}{stripe}\n{grey}{stripe}\n{white}{stripe}\n{purple}{stripe}{reset}",
|
||||
reset = color::Fg(color::Reset),
|
||||
stripe = BLOCK.repeat(width)
|
||||
);
|
||||
} else { draw(&[black, grey, white, purple]); }
|
||||
vec![green, lime, WHITE, grey, BLACK]
|
||||
}
|
||||
|
||||
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));
|
||||
pub fn asexual() -> Colors {
|
||||
let grey = rgb(0xA4A4A4);
|
||||
let purple = rgb(0x810081);
|
||||
|
||||
if small {
|
||||
let width = 15;
|
||||
|
||||
println!(
|
||||
"{pink}{stripe}\n{yellow}{stripe}\n{white}{stripe}\n{purple}{stripe}\n{blue}{stripe}{reset}",
|
||||
reset = color::Fg(color::Reset),
|
||||
stripe = BLOCK.repeat(width)
|
||||
);
|
||||
} else { draw(&[pink, yellow, white, purple, blue]); }
|
||||
vec![BLACK, grey, WHITE, purple]
|
||||
}
|
||||
|
||||
pub fn bisexual(small: bool) {
|
||||
let magenta = color::Fg(color::Rgb(0xC4, 0x2A, 0x6F));
|
||||
let purple = color::Fg(color::Rgb(0x91, 0x53, 0x92));
|
||||
let blue = color::Fg(color::Rgb(0x14, 0x37, 0xA2));
|
||||
pub fn bigender() -> Colors {
|
||||
let pink = rgb(0xE676A6);
|
||||
let yellow = rgb(0xF9F04C);
|
||||
let purple = rgb(0xAB6BBB);
|
||||
let blue = rgb(0x6D96DC);
|
||||
|
||||
if small {
|
||||
let width = 15;
|
||||
|
||||
println!(
|
||||
"{magenta}{stripe}\n{stripe}\n{purple}{stripe}\n{blue}{stripe}\n{stripe}{reset}",
|
||||
reset = color::Fg(color::Reset),
|
||||
stripe = BLOCK.repeat(width)
|
||||
);
|
||||
} else { draw(&[magenta, magenta, purple, blue, blue]); }
|
||||
vec![pink, yellow, WHITE, purple, blue]
|
||||
}
|
||||
|
||||
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));
|
||||
pub fn bisexual() -> Colors {
|
||||
let magenta = rgb(0xC42A6F);
|
||||
let purple = rgb(0x915392);
|
||||
let blue = rgb(0x1437A2);
|
||||
|
||||
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),
|
||||
stripe = BLOCK.repeat(width)
|
||||
);
|
||||
} else { draw(&[navy, gray, black, gray, navy]); }
|
||||
vec![magenta, magenta, purple, blue, blue]
|
||||
}
|
||||
|
||||
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));
|
||||
pub fn genderfluid() -> Colors {
|
||||
let pink = rgb(0xFF75A2);
|
||||
let violet = rgb(0xBE18D6);
|
||||
let blue = rgb(0x333EBD);
|
||||
|
||||
if small {
|
||||
let width = 15;
|
||||
|
||||
println!(
|
||||
"{red}{stripe}\n{orange}{stripe}\n{white}{stripe}\n{pink}{stripe}\n{magenta}{stripe}{reset}",
|
||||
reset = color::Fg(color::Reset),
|
||||
stripe = BLOCK.repeat(width)
|
||||
);
|
||||
} else { draw(&[red, orange, white, pink, magenta]); }
|
||||
vec![pink, WHITE, violet, BLACK, blue]
|
||||
}
|
||||
|
||||
pub fn multigender(small: bool) {
|
||||
let blue = color::Fg(color::Rgb(0x3F, 0x47, 0xCC));
|
||||
let ltblue = color::Fg(color::Rgb(0x01, 0xA4, 0xE9));
|
||||
let orange = color::Fg(color::Rgb(0xFB, 0x7F, 0x27));
|
||||
pub fn genderqueer() -> Colors {
|
||||
let purple = rgb(0xB899DF);
|
||||
let green = rgb(0x6B8E3B);
|
||||
|
||||
if small {
|
||||
let width = 15;
|
||||
|
||||
println!(
|
||||
"{blue}{stripe}\n{ltblue}{stripe}\n{orange}{stripe}\n{ltblue}{stripe}\n{blue}{stripe}{reset}",
|
||||
reset = color::Fg(color::Reset),
|
||||
stripe = BLOCK.repeat(width)
|
||||
);
|
||||
} else { draw(&[blue, ltblue, orange, ltblue, blue]); }
|
||||
vec![purple, WHITE, green]
|
||||
}
|
||||
|
||||
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));
|
||||
pub fn gendervoid() -> Colors {
|
||||
let navy = rgb(0x08114A);
|
||||
let gray = rgb(0x4A484B);
|
||||
|
||||
if small {
|
||||
let width = 12;
|
||||
|
||||
println!(
|
||||
"{yellow}{stripe}\n{white}{stripe}\n{purple}{stripe}\n{black}{stripe}{reset}",
|
||||
reset = color::Fg(color::Reset),
|
||||
stripe = BLOCK.repeat(width)
|
||||
);
|
||||
} else { draw(&[yellow, white, purple, black]); }
|
||||
vec![navy, gray, BLACK, gray, navy]
|
||||
}
|
||||
|
||||
pub fn pansexual(small: bool) {
|
||||
let magenta = color::Fg(color::Rgb(0xFF, 0x1B, 0x8D));
|
||||
let yellow = color::Fg(color::Rgb(0xFF, 0xDA, 0x00));
|
||||
let cyan = color::Fg(color::Rgb(0x1B, 0xB3, 0xFF));
|
||||
pub fn lesbian() -> Colors {
|
||||
let red = rgb(0xD62800);
|
||||
let orange = rgb(0xFF9B56);
|
||||
let pink = rgb(0xD462A6);
|
||||
let magenta = rgb(0xA40062);
|
||||
|
||||
if small {
|
||||
let width = 18;
|
||||
vec![red, orange, WHITE, pink, magenta]
|
||||
}
|
||||
|
||||
println!(
|
||||
"{magenta}{stripe}\n{stripe}\n{yellow}{stripe}\n{stripe}\n{cyan}{stripe}\n{stripe}{reset}",
|
||||
reset = color::Fg(color::Reset),
|
||||
stripe = BLOCK.repeat(width)
|
||||
);
|
||||
} else { draw(&[magenta, yellow, cyan]); }
|
||||
pub fn multigender() -> Colors {
|
||||
let blue = rgb(0x3F47CC);
|
||||
let ltblue = rgb(0x01A4E9);
|
||||
let orange = rgb(0xFB7F27);
|
||||
|
||||
vec![blue, ltblue, orange, ltblue, blue]
|
||||
}
|
||||
|
||||
pub fn nonbinary() -> Colors {
|
||||
let yellow = rgb(0xFFF433);
|
||||
let purple = rgb(0x9B59D0);
|
||||
|
||||
vec![yellow, WHITE, purple, BLACK]
|
||||
}
|
||||
|
||||
pub fn pansexual() -> Colors {
|
||||
let magenta = rgb(0xFF1B8D);
|
||||
let yellow = rgb(0xFFDA00);
|
||||
let cyan = rgb(0x1BB3FF);
|
||||
|
||||
vec![magenta, yellow, cyan]
|
||||
}
|
||||
|
||||
// misc variants
|
||||
|
|
85
src/main.rs
85
src/main.rs
|
@ -2,58 +2,83 @@ use std::process::exit;
|
|||
|
||||
use pico_args::Arguments;
|
||||
|
||||
mod color;
|
||||
mod draw;
|
||||
mod flag;
|
||||
|
||||
use crate::color::Colors;
|
||||
|
||||
static VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||
|
||||
fn main() {
|
||||
let mut args = Arguments::from_env();
|
||||
|
||||
let help = args.contains(["-h", "--help"]);
|
||||
if help {
|
||||
// handle help flag
|
||||
if args.contains(["-h", "--help"]) {
|
||||
help_text();
|
||||
return;
|
||||
}
|
||||
|
||||
let list = args.contains(["-l", "--list"]);
|
||||
if list {
|
||||
// handle list flag
|
||||
if args.contains(["-l", "--list"]) {
|
||||
list_text();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// handle version flag
|
||||
if args.contains("--version") {
|
||||
println!("pride v{VERSION}");
|
||||
return;
|
||||
}
|
||||
|
||||
// get small flag
|
||||
let small = args.contains(["-s", "--small"]);
|
||||
|
||||
let subcommand = args.subcommand().unwrap();
|
||||
|
||||
match subcommand.as_deref() {
|
||||
Some("pride") |
|
||||
Some("gay") => flag::pride(small),
|
||||
let colors: Colors = match subcommand.as_deref() {
|
||||
Some("pride" | "gay")
|
||||
=> flag::pride(),
|
||||
|
||||
Some("trans") |
|
||||
Some("transgender") => flag::transgender(small),
|
||||
Some("transgender" | "trans")
|
||||
=> flag::transgender(),
|
||||
|
||||
|
||||
Some("aro") |
|
||||
Some("aromantic") => flag::aromantic(small),
|
||||
Some("agender")
|
||||
=> flag::agender(),
|
||||
|
||||
Some("ace") |
|
||||
Some("asexual") => flag::asexual(small),
|
||||
Some("aromantic" | "aro")
|
||||
=> flag::aromantic(),
|
||||
|
||||
Some("bigender") => flag::bigender(small),
|
||||
Some("asexual" | "ace")
|
||||
=> flag::asexual(),
|
||||
|
||||
Some("bi") |
|
||||
Some("bisexual") => flag::bisexual(small),
|
||||
Some("bigender")
|
||||
=> flag::bigender(),
|
||||
|
||||
Some("gendervoid") => flag::gendervoid(small),
|
||||
Some("bisexual" | "bi")
|
||||
=> flag::bisexual(),
|
||||
|
||||
Some("lesbian") => flag::lesbian(small),
|
||||
Some("genderfluid")
|
||||
=> flag::genderfluid(),
|
||||
|
||||
Some("multigender") => flag::multigender(small),
|
||||
Some("genderqueer")
|
||||
=> flag::genderqueer(),
|
||||
|
||||
Some("nb") |
|
||||
Some("nonbinary") => flag::nonbinary(small),
|
||||
Some("gendervoid")
|
||||
=> flag::gendervoid(),
|
||||
|
||||
Some("pan") |
|
||||
Some("pansexual") => flag::pansexual(small),
|
||||
Some("lesbian")
|
||||
=> flag::lesbian(),
|
||||
|
||||
Some("multigender")
|
||||
=> flag::multigender(),
|
||||
|
||||
Some("nonbinary" | "nb")
|
||||
=> flag::nonbinary(),
|
||||
|
||||
Some("pansexual" | "pan")
|
||||
=> flag::pansexual(),
|
||||
|
||||
|
||||
Some("sex-and-magic")|
|
||||
|
@ -64,11 +89,15 @@ fn main() {
|
|||
Some("philadelphia")=> flag::philadelphia(small),
|
||||
|
||||
_ => { help_text(); exit(1) }
|
||||
}
|
||||
};
|
||||
|
||||
if small { draw::small(colors); }
|
||||
else { draw::full(colors); }
|
||||
|
||||
}
|
||||
|
||||
fn help_text() {
|
||||
println!("pride v{}", env!("CARGO_PKG_VERSION"));
|
||||
println!("pride v{VERSION}");
|
||||
println!("Valerie Wolfe <sleeplessval@gmail.com>");
|
||||
println!("Show pride flags in the terminal.\n");
|
||||
|
||||
|
@ -79,6 +108,7 @@ fn help_text() {
|
|||
|
||||
println!("flags:");
|
||||
println!(" -h, --help Shows this help text");
|
||||
println!(" --version Show version information");
|
||||
println!(" -l, --list Prints a list of printable flags");
|
||||
println!(" -s, --small Prints a small version without holding");
|
||||
|
||||
|
@ -89,11 +119,14 @@ fn help_text() {
|
|||
fn list_text() {
|
||||
println!("pride v{}", env!("CARGO_PKG_VERSION"));
|
||||
println!("\nFlag list:");
|
||||
println!(" agender agender pride flag");
|
||||
println!(" aro, aromantic aromantic pride flag");
|
||||
println!(" ace, asexual asexual pride flag");
|
||||
println!(" bigender bigender pride flag");
|
||||
println!(" bi, bisexual bisexual pride flag");
|
||||
println!(" gay, pride six-color rainbow flag");
|
||||
println!(" genderfluid genderfluid pride flag");
|
||||
println!(" genderqueer genderqueer pride flag");
|
||||
println!(" gendervoid gendervoid pride flag");
|
||||
println!(" lesbian lesbian pride flag");
|
||||
println!(" multigender multigender pride flag");
|
||||
|
|
Loading…
Reference in a new issue