From 133f3068fbd512b70e9f71b2348d9a60cc9d3997 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Mon, 4 Aug 2025 08:52:50 -0500 Subject: [PATCH 1/2] refactor(roff): Simplify the code --- crates/anstyle-roff/src/lib.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/crates/anstyle-roff/src/lib.rs b/crates/anstyle-roff/src/lib.rs index ea88cdf8..4bc889eb 100644 --- a/crates/anstyle-roff/src/lib.rs +++ b/crates/anstyle-roff/src/lib.rs @@ -39,9 +39,15 @@ mod control_requests { pub fn to_roff(styled_text: &str) -> Roff { let mut doc = Roff::new(); for styled in styled_str::styled_stream(styled_text) { - set_color( - (&styled.style.get_fg_color(), &styled.style.get_bg_color()), + add_color_to_roff( &mut doc, + control_requests::FOREGROUND, + &styled.style.get_fg_color(), + ); + add_color_to_roff( + &mut doc, + control_requests::BACKGROUND, + &styled.style.get_bg_color(), ); set_effects_and_text(&styled, &mut doc); } @@ -93,13 +99,6 @@ fn is_bright(fg_color: &Color) -> bool { } } -type ColorSet<'a> = (&'a Option, &'a Option); - -fn set_color(colors: ColorSet<'_>, doc: &mut Roff) { - add_color_to_roff(doc, control_requests::FOREGROUND, colors.0); - add_color_to_roff(doc, control_requests::BACKGROUND, colors.1); -} - fn add_color_to_roff(doc: &mut Roff, control_request: &str, color: &Option) { match color { Some(Color::Rgb(c)) => { From 9c2b802041b8ad1f0afe9570d15e14fdb45aa238 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Mon, 4 Aug 2025 08:54:24 -0500 Subject: [PATCH 2/2] fix(roff): Minimize size of output --- crates/anstyle-roff/src/lib.rs | 28 +++++++++++++-------- crates/anstyle-roff/tests/roffs/bold.roff | 2 -- crates/anstyle-roff/tests/roffs/italic.roff | 2 -- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/crates/anstyle-roff/src/lib.rs b/crates/anstyle-roff/src/lib.rs index 4bc889eb..59e87bbf 100644 --- a/crates/anstyle-roff/src/lib.rs +++ b/crates/anstyle-roff/src/lib.rs @@ -38,17 +38,25 @@ mod control_requests { /// ``` pub fn to_roff(styled_text: &str) -> Roff { let mut doc = Roff::new(); + let mut previous_fg_color = None; + let mut previous_bg_color = None; for styled in styled_str::styled_stream(styled_text) { - add_color_to_roff( - &mut doc, - control_requests::FOREGROUND, - &styled.style.get_fg_color(), - ); - add_color_to_roff( - &mut doc, - control_requests::BACKGROUND, - &styled.style.get_bg_color(), - ); + if previous_fg_color != styled.style.get_fg_color() { + add_color_to_roff( + &mut doc, + control_requests::FOREGROUND, + &styled.style.get_fg_color(), + ); + previous_fg_color = styled.style.get_fg_color(); + } + if previous_bg_color != styled.style.get_bg_color() { + add_color_to_roff( + &mut doc, + control_requests::BACKGROUND, + &styled.style.get_bg_color(), + ); + previous_bg_color = styled.style.get_bg_color(); + } set_effects_and_text(&styled, &mut doc); } doc diff --git a/crates/anstyle-roff/tests/roffs/bold.roff b/crates/anstyle-roff/tests/roffs/bold.roff index 7db69f45..448da3e8 100644 --- a/crates/anstyle-roff/tests/roffs/bold.roff +++ b/crates/anstyle-roff/tests/roffs/bold.roff @@ -1,3 +1 @@ -.gcolor default -.fcolor default \fBtest\fR diff --git a/crates/anstyle-roff/tests/roffs/italic.roff b/crates/anstyle-roff/tests/roffs/italic.roff index e6c05801..02815a7e 100644 --- a/crates/anstyle-roff/tests/roffs/italic.roff +++ b/crates/anstyle-roff/tests/roffs/italic.roff @@ -1,3 +1 @@ -.gcolor default -.fcolor default \fItest\fR