From 3637346c1ab5826e069664772be95e46715ae529 Mon Sep 17 00:00:00 2001 From: Funnisimo Date: Tue, 23 Aug 2022 10:01:13 -0500 Subject: [PATCH 1/3] export colors mods separately to aid precise imports --- bracket-color/Cargo.toml | 6 +++--- bracket-color/examples/util/mod.rs | 2 +- bracket-color/src/lib.rs | 14 +++++++------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/bracket-color/Cargo.toml b/bracket-color/Cargo.toml index 3c5122c0..564d5439 100755 --- a/bracket-color/Cargo.toml +++ b/bracket-color/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bracket-color" -version = "0.8.2" +version = "0.8.3" authors = ["Herbert Wolverson "] edition = "2018" publish = true @@ -17,13 +17,13 @@ palette = [ "lazy_static", "parking_lot" ] [dependencies] serde = { version = "~1.0.110", features = ["derive"], optional = true } -crossterm = { version = "~0.24", optional = true } +crossterm = { version = "~0.25", optional = true } lazy_static = { version = "1.4.0", optional = true } parking_lot = { version = "~0.12", optional = true } bevy = { version = "0.8", optional = true } [dev-dependencies] -crossterm = "~0.24" +crossterm = "~0.25" [[example]] name = "colors" diff --git a/bracket-color/examples/util/mod.rs b/bracket-color/examples/util/mod.rs index cafaf439..b620f9ed 100755 --- a/bracket-color/examples/util/mod.rs +++ b/bracket-color/examples/util/mod.rs @@ -2,7 +2,7 @@ use bracket_color::prelude::*; use crossterm::queue; use crossterm::style::{Print, SetForegroundColor}; use std::convert::TryInto; -use std::io::{stdout, Write}; +use std::io::stdout; pub fn print_color(color: RGB, text: &str) { queue!(stdout(), SetForegroundColor(color.try_into().unwrap())).expect("Command Fail"); diff --git a/bracket-color/src/lib.rs b/bracket-color/src/lib.rs index ab9a0908..84721e17 100755 --- a/bracket-color/src/lib.rs +++ b/bracket-color/src/lib.rs @@ -31,20 +31,20 @@ extern crate lazy_static; /// Import color pair support -mod color_pair; +pub mod color_pair; /// Import HSV color support -mod hsv; +pub mod hsv; /// Import Lerp as an iterator -mod lerpit; +pub mod lerpit; /// Import library of named colors -mod named; +pub mod named; /// Import Palette support #[cfg(feature = "palette")] -mod palette; +pub mod palette; /// Import RGB color support -mod rgb; +pub mod rgb; /// Import RGBA color support -mod rgba; +pub mod rgba; /// Exports the color functions/types in the `prelude` namespace. pub mod prelude { From f74a2a81be46803889adebfe7c6a3edad9c8ced9 Mon Sep 17 00:00:00 2001 From: Funnisimo Date: Tue, 23 Aug 2022 10:02:40 -0500 Subject: [PATCH 2/3] use updated bracket-color --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 992aa165..c1bc8267 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,7 +36,7 @@ webgpu = [ "bracket-terminal/webgpu" ] [dependencies] bracket-algorithm-traits = { path = "./bracket-algorithm-traits", version = "~0.8.2" } -bracket-color = { path = "./bracket-color", version = "~0.8.2", features = [ "palette" ] } +bracket-color = { path = "./bracket-color", version = "~0.8.3", features = [ "palette" ] } bracket-geometry = { path = "./bracket-geometry", version = "~0.8.2" } bracket-noise = { path = "./bracket-noise", version = "~0.8.2" } bracket-pathfinding = { path = "./bracket-pathfinding", version = "~0.8.2" } From d96db56633d958c15a2ce1d4fb8966c77952b21e Mon Sep 17 00:00:00 2001 From: Funnisimo Date: Wed, 12 Oct 2022 10:51:53 -0500 Subject: [PATCH 3/3] updated text color format parsing --- .../src/consoles/text/format_string.rs | 77 ++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/bracket-terminal/src/consoles/text/format_string.rs b/bracket-terminal/src/consoles/text/format_string.rs index 322fe93d..7d580238 100755 --- a/bracket-terminal/src/consoles/text/format_string.rs +++ b/bracket-terminal/src/consoles/text/format_string.rs @@ -22,7 +22,12 @@ impl ColoredTextSpans { }; let mut color_stack = Vec::new(); - for color_span in text.to_owned().split("#[") { + let text: String = match text.starts_with("#[") { + true => text.to_owned(), + false => "#[white]".to_string() + text, + }; + + for color_span in text.split("#[") { if color_span.is_empty() { continue; } @@ -47,3 +52,73 @@ impl ColoredTextSpans { result } } + +#[cfg(test)] +mod tests { + use super::*; + // use crate::prelude::*; + + #[test] + fn no_colors() { + let text = "This is a simple message."; + let span = ColoredTextSpans::new(text); + assert_eq!(span.length, text.len()); + assert_eq!(span.spans.len(), 1); + assert_eq!(span.spans[0].0, RGBA::from_u8(255, 255, 255, 255)); + assert_eq!(span.spans[0].1, text); + } + + #[test] + fn no_start_color() { + register_palette_color("blue", RGBA::from_u8(0, 0, 255, 255)); + + let text = "This is a #[blue]simple#[] message."; + let span = ColoredTextSpans::new(text); + assert_eq!(span.length, 25); + assert_eq!(span.spans.len(), 3); + assert_eq!(span.spans[0].0, RGBA::from_u8(255, 255, 255, 255)); + assert_eq!(span.spans[0].1, "This is a "); + assert_eq!(span.spans[1].0, RGBA::from_u8(0, 0, 255, 255)); + assert_eq!(span.spans[1].1, "simple"); + assert_eq!(span.spans[2].0, RGBA::from_u8(255, 255, 255, 255)); + assert_eq!(span.spans[2].1, " message."); + } + + #[test] + fn start_color() { + let text = "#[white]This is a simple message."; + let span = ColoredTextSpans::new(text); + assert_eq!(span.length, text.len() - "$[white]".len()); + assert_eq!(span.spans.len(), 1); + assert_eq!(span.spans[0].0, RGBA::from_u8(255, 255, 255, 255)); + assert_eq!(span.spans[0].1, "This is a simple message."); + } + + #[test] + fn color_with_pop() { + register_palette_color("blue", RGBA::from_u8(0, 0, 255, 255)); + + let text = "#[white]This is a #[blue]simple#[] message."; + let span = ColoredTextSpans::new(text); + assert_eq!(span.length, 25); + assert_eq!(span.spans.len(), 3); + assert_eq!(span.spans[0].0, RGBA::from_u8(255, 255, 255, 255)); + assert_eq!(span.spans[0].1, "This is a "); + assert_eq!(span.spans[1].0, RGBA::from_u8(0, 0, 255, 255)); + assert_eq!(span.spans[1].1, "simple"); + assert_eq!(span.spans[2].0, RGBA::from_u8(255, 255, 255, 255)); + assert_eq!(span.spans[2].1, " message."); + } + + #[test] + fn pop_color() { + let text = "#[white]This#[] is a simple message."; + let span = ColoredTextSpans::new(text); + assert_eq!(span.length, 25); + assert_eq!(span.spans.len(), 2); + assert_eq!(span.spans[0].0, RGBA::from_u8(255, 255, 255, 255)); + assert_eq!(span.spans[0].1, "This"); + assert_eq!(span.spans[1].0, RGBA::from_u8(255, 255, 255, 255)); + assert_eq!(span.spans[1].1, " is a simple message."); + } +}