merged in changes from main
This commit is contained in:
commit
f94bbcb042
6 changed files with 162 additions and 36 deletions
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "pride"
|
name = "pride"
|
||||||
version = "0.2.1"
|
version = "0.2.2"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
|
@ -12,6 +12,6 @@ slant symbols, and therefore require use of a Powerline font, such as [Fira Code
|
||||||
|
|
||||||
## Libraries
|
## Libraries
|
||||||
|
|
||||||
- [pico-args](https://crates.io/crates/pico-args)
|
- [pico-args](https://crates.io/crates/pico-args) — argument parsing
|
||||||
- [termion](https://crates.io/crates/termion)
|
- [termion](https://crates.io/crates/termion) — ANSI formatting
|
||||||
|
|
||||||
|
|
|
@ -52,16 +52,6 @@ pub fn progress(small: bool) -> Flag {
|
||||||
// set up stripe index
|
// set up stripe index
|
||||||
let mut index = 0;
|
let mut index = 0;
|
||||||
|
|
||||||
/* ok, coming up with procedure:
|
|
||||||
* - can't rely on bg_stripes; line count, threshold, etc., will need to happen here
|
|
||||||
* - line count will always be the largest multiple of 6 smaller than height; c = h - (h % 6)
|
|
||||||
* - chevrons may have larger widths: TODO calc
|
|
||||||
* - depth will be funky; line depth will need to use "full" depth; (Df - Dl) / Wc = Ic (TODO verify?)
|
|
||||||
* - switch stripe index on *absolute* line number rather than n
|
|
||||||
* - chevron building will be BLOCK.repeat(width) + TRIANGLE_21[0] (fg Ic, bg Ic + 1)
|
|
||||||
* - chevrons[len - 1] will need unique handling to draw stripes
|
|
||||||
*/
|
|
||||||
|
|
||||||
// set up constraints
|
// set up constraints
|
||||||
let linecount = height - (height % 6); // largest multiple of 6 smaller than height
|
let linecount = height - (height % 6); // largest multiple of 6 smaller than height
|
||||||
let full_depth = width / 3;
|
let full_depth = width / 3;
|
||||||
|
@ -280,13 +270,62 @@ pub fn intersex() -> Flag {
|
||||||
Flag::Lines(lines)
|
Flag::Lines(lines)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn polyamorous() {
|
pub fn polyamory(small: bool) -> Flag {
|
||||||
let blue = rgb(0x019FE3);
|
let blue = rgb(0x019FE3);
|
||||||
let magenta = rgb(0xE50051);
|
let magenta = rgb(0xE50051);
|
||||||
let purple = rgb(0x340C46);
|
let purple = rgb(0x340C46);
|
||||||
let yellow = rgb(0x00FCBF);
|
let yellow = rgb(0xFCBF00);
|
||||||
|
let white = bg(0xFFFFFF);
|
||||||
|
|
||||||
// blue / magenta / purple vert
|
// special characters
|
||||||
// WHITE isosceles cutin with yellow heart pointed right
|
let semicircle = '\u{E0B6}';
|
||||||
|
let separators = ['\u{E0BE}', '\u{E0BA}'];
|
||||||
|
|
||||||
|
let (width, height) = if small { (18, 6) } else { terminal_size().unwrap() };
|
||||||
|
|
||||||
|
// create stripe array and line buffer
|
||||||
|
let stripes = [magenta, purple]; // only stripes 2 and 3 need tracked
|
||||||
|
let mut lines: Vec<String> = Vec::new();
|
||||||
|
|
||||||
|
// constraints
|
||||||
|
let linecount = height - (height % 3); // largest multiple of 3 smaller than height
|
||||||
|
let full_depth = width / 3;
|
||||||
|
let thresh = linecount / 3; // stripe & direction thresh
|
||||||
|
let start = width / 6;
|
||||||
|
|
||||||
|
// piecewise function: ascent -> descent
|
||||||
|
let mut separator = separators[0];
|
||||||
|
for n in 0..thresh {
|
||||||
|
let size = start + n;
|
||||||
|
|
||||||
|
let line = format!(
|
||||||
|
"{white}{yellow}{cutin}{blue}{separator}{stripe}",
|
||||||
|
cutin = " ".repeat(size as usize),
|
||||||
|
stripe = draw::BLOCK.repeat((width - (size + 1)) as usize)
|
||||||
|
);
|
||||||
|
|
||||||
|
lines.push(line);
|
||||||
|
}
|
||||||
|
// first piece goes until the end of stripes[0]
|
||||||
|
let mut index = 0; // stripe index
|
||||||
|
separator = separators[1];
|
||||||
|
for n in thresh..linecount {
|
||||||
|
// advance index at threshold
|
||||||
|
if n == (thresh * 2) { index = 1; }
|
||||||
|
|
||||||
|
let rel = (n - thresh) + 2;
|
||||||
|
let size = full_depth - rel;
|
||||||
|
let color = stripes[index];
|
||||||
|
|
||||||
|
let line = format!(
|
||||||
|
"{white}{yellow}{cutin}{color}{separator}{stripe}",
|
||||||
|
cutin = " ".repeat(size as usize),
|
||||||
|
stripe = draw::BLOCK.repeat((width - (size + 1)) as usize)
|
||||||
|
);
|
||||||
|
|
||||||
|
lines.push(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
Flag::Lines(lines)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
24
src/flag.rs
24
src/flag.rs
|
@ -20,13 +20,6 @@ pub fn pride() -> Flag {
|
||||||
Flag::Stripes(vec![red, orange, yellow, green, blue, purple])
|
Flag::Stripes(vec![red, orange, yellow, green, blue, purple])
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn transgender() -> Flag {
|
|
||||||
let pink = rgb(0x7ACBF5);
|
|
||||||
let blue = rgb(0xEAACB8);
|
|
||||||
|
|
||||||
Flag::Stripes(vec![pink, blue, WHITE, blue, pink])
|
|
||||||
}
|
|
||||||
|
|
||||||
// everything below here is alphabetical
|
// everything below here is alphabetical
|
||||||
|
|
||||||
pub fn agender() -> Flag {
|
pub fn agender() -> Flag {
|
||||||
|
@ -51,6 +44,15 @@ pub fn asexual() -> Flag {
|
||||||
Flag::Stripes(vec![BLACK, grey, WHITE, purple])
|
Flag::Stripes(vec![BLACK, grey, WHITE, purple])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn aroace() -> Flag {
|
||||||
|
let orange = rgb(0xE28D00);
|
||||||
|
let yellow = rgb(0xEBE200);
|
||||||
|
let blue = rgb(0x67B7E8);
|
||||||
|
let navy = rgb(0x203756);
|
||||||
|
|
||||||
|
Flag::Stripes(vec![orange, yellow, WHITE, blue, navy])
|
||||||
|
}
|
||||||
|
|
||||||
pub fn bigender() -> Flag {
|
pub fn bigender() -> Flag {
|
||||||
let pink = rgb(0xE676A6);
|
let pink = rgb(0xE676A6);
|
||||||
let yellow = rgb(0xF9F04C);
|
let yellow = rgb(0xF9F04C);
|
||||||
|
@ -141,3 +143,11 @@ pub fn pansexual() -> Flag {
|
||||||
Flag::Stripes(vec![magenta, yellow, cyan])
|
Flag::Stripes(vec![magenta, yellow, cyan])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn transgender() -> Flag {
|
||||||
|
let pink = rgb(0x7ACBF5);
|
||||||
|
let blue = rgb(0xEAACB8);
|
||||||
|
|
||||||
|
Flag::Stripes(vec![pink, blue, WHITE, blue, pink])
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
10
src/help.rs
10
src/help.rs
|
@ -1,7 +1,6 @@
|
||||||
|
|
||||||
use crate::VERSION;
|
use crate::VERSION;
|
||||||
|
|
||||||
|
|
||||||
pub fn help_text() {
|
pub fn help_text() {
|
||||||
println!("pride v{VERSION}
|
println!("pride v{VERSION}
|
||||||
Valerie Wolfe <sleeplessval@gmail.com>
|
Valerie Wolfe <sleeplessval@gmail.com>
|
||||||
|
@ -33,6 +32,8 @@ flag list:
|
||||||
asexual asexual pride flag
|
asexual asexual pride flag
|
||||||
bigender bigender pride flag
|
bigender bigender pride flag
|
||||||
bisexual bisexual pride flag
|
bisexual bisexual pride flag
|
||||||
|
demiromantic demiromantic pride flag
|
||||||
|
demisexual demisexual pride flag
|
||||||
gay gay men pride flag
|
gay gay men pride flag
|
||||||
genderfluid genderfluid pride flag
|
genderfluid genderfluid pride flag
|
||||||
gender-nonconforming gender nonconforming pride flag
|
gender-nonconforming gender nonconforming pride flag
|
||||||
|
@ -82,11 +83,16 @@ names:
|
||||||
=> { println!("The asexual pride flag.\n\nnames:\n 'asexual', 'ace'"); }
|
=> { println!("The asexual pride flag.\n\nnames:\n 'asexual', 'ace'"); }
|
||||||
"aroace" | "aromantic-asexual"
|
"aroace" | "aromantic-asexual"
|
||||||
=> {
|
=> {
|
||||||
println!("The aromantic-asexual pride flag.
|
println!("The aromantic-asexual pride flag designed by aroaesflags on tumblr.
|
||||||
|
|
||||||
names:
|
names:
|
||||||
'aroace', 'aromantic-asexual'
|
'aroace', 'aromantic-asexual'
|
||||||
|
|
||||||
|
variants:
|
||||||
|
halves The side-by-side aromantic and asexual aroace flag
|
||||||
|
side-by-side
|
||||||
|
sbs
|
||||||
|
|
||||||
notes:
|
notes:
|
||||||
Currently only displays in terminals 20 lines or taller.");
|
Currently only displays in terminals 20 lines or taller.");
|
||||||
},
|
},
|
||||||
|
|
91
src/main.rs
91
src/main.rs
|
@ -1,4 +1,7 @@
|
||||||
use std::process::exit;
|
use std::{
|
||||||
|
io::{ stdout, IsTerminal },
|
||||||
|
process::exit
|
||||||
|
};
|
||||||
|
|
||||||
use pico_args::Arguments;
|
use pico_args::Arguments;
|
||||||
|
|
||||||
|
@ -38,17 +41,22 @@ fn main() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !stdout().is_terminal() {
|
||||||
|
println!("pride: output must be a terminal");
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
|
||||||
// get small flag
|
// get small flag
|
||||||
let small = args.contains(["-s", "--small"]);
|
let small = args.contains(["-s", "--small"]);
|
||||||
|
|
||||||
let subcommand = args.subcommand().unwrap();
|
let subcommand = args.subcommand().unwrap();
|
||||||
|
let variant = args.subcommand().unwrap_or(None);
|
||||||
|
|
||||||
// get color vec from matched flag
|
// get color vec from matched flag
|
||||||
let flag: Flag = match subcommand.as_deref() {
|
let flag: Flag = match subcommand.as_deref() {
|
||||||
Some("pride" | "rainbow")
|
Some("pride" | "rainbow")
|
||||||
| None
|
| None
|
||||||
=> {
|
=> {
|
||||||
let variant = args.subcommand().unwrap_or(None);
|
|
||||||
match variant.as_deref() {
|
match variant.as_deref() {
|
||||||
Some("8-color" | "gilbert-baker" | "sex-and-magic")
|
Some("8-color" | "gilbert-baker" | "sex-and-magic")
|
||||||
=> variant::gilbert_baker(),
|
=> variant::gilbert_baker(),
|
||||||
|
@ -61,8 +69,8 @@ fn main() {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
Some("transgender" | "trans")
|
Some("progress")
|
||||||
=> flag::transgender(),
|
=> complex::progress(small),
|
||||||
|
|
||||||
|
|
||||||
Some("agender")
|
Some("agender")
|
||||||
|
@ -75,7 +83,14 @@ fn main() {
|
||||||
=> flag::asexual(),
|
=> flag::asexual(),
|
||||||
|
|
||||||
Some("aroace" | "aromantic-asexual")
|
Some("aroace" | "aromantic-asexual")
|
||||||
=> complex::aroace(small),
|
=> {
|
||||||
|
match variant.as_deref() {
|
||||||
|
Some("halves" | "side-by-side" | "sbs")
|
||||||
|
=> complex::aroace(small),
|
||||||
|
_
|
||||||
|
=> flag::aroace()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
Some("bigender")
|
Some("bigender")
|
||||||
=> flag::bigender(),
|
=> flag::bigender(),
|
||||||
|
@ -107,8 +122,8 @@ fn main() {
|
||||||
Some("gendervoid")
|
Some("gendervoid")
|
||||||
=> flag::gendervoid(),
|
=> flag::gendervoid(),
|
||||||
|
|
||||||
Some("intersex")
|
// Some("intersex")
|
||||||
=> complex::intersex(),
|
// => complex::intersex(),
|
||||||
|
|
||||||
Some("lesbian")
|
Some("lesbian")
|
||||||
=> {
|
=> {
|
||||||
|
@ -130,11 +145,16 @@ fn main() {
|
||||||
Some("pansexual" | "pan")
|
Some("pansexual" | "pan")
|
||||||
=> flag::pansexual(),
|
=> flag::pansexual(),
|
||||||
|
|
||||||
// Some("poly" | "polyamorous" | "polyamory")
|
Some("polyamory" | "polyamorous" | "poly")
|
||||||
// => complex::polyamorous(),
|
=> complex::polyamory(small),
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
Some("progress")
|
Some("progress")
|
||||||
=> complex::progress(small),
|
=> complex::progress(small),
|
||||||
|
=======
|
||||||
|
Some("transgender" | "trans")
|
||||||
|
=> flag::transgender(),
|
||||||
|
>>>>>>> main
|
||||||
|
|
||||||
_ => { help::help_text(); exit(1) }
|
_ => { help::help_text(); exit(1) }
|
||||||
};
|
};
|
||||||
|
@ -143,3 +163,54 @@ fn main() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
fn help_text() {
|
||||||
|
println!("pride v{VERSION}");
|
||||||
|
println!("Valerie Wolfe <sleeplessval@gmail.com>");
|
||||||
|
println!("Show pride flags in the terminal.\n");
|
||||||
|
|
||||||
|
println!("usage: pride [flags] [name]\n");
|
||||||
|
|
||||||
|
println!("args:");
|
||||||
|
println!(" <name> The pride flag to display\n");
|
||||||
|
|
||||||
|
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");
|
||||||
|
|
||||||
|
println!("\nUse 'pride --list' to see a list of printable flags");
|
||||||
|
println!("\n~ You're loved and you matter ♥");
|
||||||
|
}
|
||||||
|
|
||||||
|
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!(" aroace aromantic/asexual pride flag");
|
||||||
|
println!(" bigender bigender pride flag");
|
||||||
|
println!(" bi, bisexual bisexual pride flag");
|
||||||
|
println!(" demiromantic demiromantic pride flag");
|
||||||
|
println!(" demisexual demisexual pride flag");
|
||||||
|
// println!(" disability disability pride flag");
|
||||||
|
println!(" gay, mlm gay men pride flag");
|
||||||
|
println!(" genderfluid genderfluid pride flag");
|
||||||
|
println!(" gender-nonconforming gender nonconforming pride flag");
|
||||||
|
println!(" genderqueer genderqueer pride flag");
|
||||||
|
println!(" gendervoid gendervoid pride flag");
|
||||||
|
// println!(" intersex intersex pride flag");
|
||||||
|
println!(" lesbian lesbian pride flag");
|
||||||
|
println!(" multigender multigender pride flag");
|
||||||
|
println!(" nb, nonbinary nonbinary pride flag");
|
||||||
|
println!(" pan, pansexual pansexual pride flag");
|
||||||
|
println!(" polyamory polyamorous pride flag");
|
||||||
|
println!(" pride, rainbow six-color rainbow flag");
|
||||||
|
println!(" progress progress arrow flag");
|
||||||
|
println!(" trans, transgender transgender pride flag");
|
||||||
|
}
|
||||||
|
|
||||||
|
>>>>>>> main
|
||||||
|
|
Loading…
Reference in a new issue