From a8da4466c9baa44f9edc8b8712f4f61b040393e6 Mon Sep 17 00:00:00 2001 From: Urgau Date: Sat, 9 May 2026 20:50:37 +0200 Subject: [PATCH 1/4] Make the word colors highlighting follow the hunk rather than the line --- src/gh_range_diff.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gh_range_diff.rs b/src/gh_range_diff.rs index 1d7713fc..855e8598 100644 --- a/src/gh_range_diff.rs +++ b/src/gh_range_diff.rs @@ -520,6 +520,13 @@ impl HtmlDiffPrinter<'_> { for (word, changed) in words { if changed { + let prefix_class = match (hunk_token_status, is_add) { + (HunkTokenStatus::Removed, true) => "removed-after", + (HunkTokenStatus::Removed, false) => "removed-before", + (HunkTokenStatus::Added, true) => "added-after", + (HunkTokenStatus::Added, false) => "added-before", + }; + write!(f, r#""#)?; pulldown_cmark_escape::escape_html(FmtWriter(&mut f), word)?; write!(f, "")?; From 1b0762dec8a111c2a4e32f855e5ba60e83ff43b1 Mon Sep 17 00:00:00 2001 From: Urgau Date: Sat, 9 May 2026 23:12:09 +0200 Subject: [PATCH 2/4] Refactor CSS class of line and word highlighting --- src/gh_range_diff.rs | 76 +++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/src/gh_range_diff.rs b/src/gh_range_diff.rs index 855e8598..3f722aa7 100644 --- a/src/gh_range_diff.rs +++ b/src/gh_range_diff.rs @@ -265,31 +265,31 @@ fn process_old_new( .line-removed-after {{ color: rgb(220, 0, 0) }} + .line-removed-after .word-added {{ + color: white; + background-color: rgb(63, 128, 94); + }} .line-added-after {{ color: rgb(0, 221, 0) }} + .line-added-after .word-added {{ + color: white; + background-color: rgb(0, 73, 0); + }} .line-removed-before {{ color: rgb(192, 78, 76) }} + .line-removed-before .word-removed {{ + color: white; + background-color: rgb(192, 78, 76); + }} .line-added-before {{ color: rgb(63, 128, 94) }} - .word-removed-after {{ + .line-added-before .word-removed {{ color: white; background-color: rgb(220, 0, 0); }} - .word-added-after {{ - color: white; - background-color: rgb(0, 73, 0); - }} - .word-removed-before {{ - color: white; - background-color: rgb(192, 78, 76); - }} - .word-added-before {{ - color: white; - background-color: rgb(63, 128, 94); - }} .spacer {{ margin-bottom: 1rem; }} @@ -321,30 +321,30 @@ fn process_old_new( .line-removed-after {{ color: rgba(255, 0, 0, 1); }} + .line-removed-after .word-added {{ + color: black; + background-color: rgb(0, 100, 0); + }} .line-added-after {{ color: rgba(0, 255, 0, 1); }} + .line-added-after .word-added {{ + color: black; + background-color: rgb(0, 255, 0); + }} .line-removed-before {{ color: rgb(255, 159, 131); }} - .line-added-before {{ - color: rgba(11, 142, 0, 1); - }} - .word-removed-after {{ - color: black; - background-color: rgba(255, 0, 0, 1); - }} - .word-added-after {{ + .line-removed-before .word-removed {{ color: black; - background-color: rgba(0, 255, 0, 1); + background-color: rgb(100, 0, 0); }} - .word-removed-before {{ - color: black; - background-color: rgba(100, 0, 0, 1); + .line-added-before {{ + color: rgba(11, 142, 0, 1); }} - .word-added-before {{ + .line-added-before .word-removed {{ color: black; - background-color: rgba(0, 100, 0, 1); + background-color: rgb(255, 0, 0); }} }} @@ -510,24 +510,22 @@ impl HtmlDiffPrinter<'_> { // diff lines though, since then the coloring distracts from what is // relevant.) if is_add || is_remove { - let prefix_class = match (hunk_token_status, is_add) { - (HunkTokenStatus::Removed, true) => "added-before", - (HunkTokenStatus::Removed, false) => "removed-before", - (HunkTokenStatus::Added, true) => "added-after", - (HunkTokenStatus::Added, false) => "removed-after", + let line_class = match (is_add, hunk_token_status) { + (true, HunkTokenStatus::Removed) => "line-added-before", + (false, HunkTokenStatus::Removed) => "line-removed-before", + (true, HunkTokenStatus::Added) => "line-added-after", + (false, HunkTokenStatus::Added) => "line-removed-after", }; - write!(f, r#""#)?; + write!(f, r#""#)?; for (word, changed) in words { if changed { - let prefix_class = match (hunk_token_status, is_add) { - (HunkTokenStatus::Removed, true) => "removed-after", - (HunkTokenStatus::Removed, false) => "removed-before", - (HunkTokenStatus::Added, true) => "added-after", - (HunkTokenStatus::Added, false) => "added-before", + let word_class = match hunk_token_status { + HunkTokenStatus::Removed => "word-removed", + HunkTokenStatus::Added => "word-added", }; - write!(f, r#""#)?; + write!(f, r#""#)?; pulldown_cmark_escape::escape_html(FmtWriter(&mut f), word)?; write!(f, "")?; } else { From d153b162f600bcc8e7a7a111a5b52091770091de Mon Sep 17 00:00:00 2001 From: Urgau Date: Sun, 10 May 2026 12:04:55 +0200 Subject: [PATCH 3/4] Use orange for word added in a removed line --- src/gh_range_diff.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gh_range_diff.rs b/src/gh_range_diff.rs index 3f722aa7..05af39ea 100644 --- a/src/gh_range_diff.rs +++ b/src/gh_range_diff.rs @@ -267,7 +267,7 @@ fn process_old_new( }} .line-removed-after .word-added {{ color: white; - background-color: rgb(63, 128, 94); + background-color: #C85000; }} .line-added-after {{ color: rgb(0, 221, 0) @@ -323,7 +323,7 @@ fn process_old_new( }} .line-removed-after .word-added {{ color: black; - background-color: rgb(0, 100, 0); + background-color: #C85000; }} .line-added-after {{ color: rgba(0, 255, 0, 1); From c1e90ea9bd0fa4746e5988a05899b2c3cfc4473e Mon Sep 17 00:00:00 2001 From: Urgau Date: Sun, 10 May 2026 14:15:03 +0200 Subject: [PATCH 4/4] Use stronger orange with black text --- src/gh_range_diff.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gh_range_diff.rs b/src/gh_range_diff.rs index 05af39ea..30bda62c 100644 --- a/src/gh_range_diff.rs +++ b/src/gh_range_diff.rs @@ -266,8 +266,8 @@ fn process_old_new( color: rgb(220, 0, 0) }} .line-removed-after .word-added {{ - color: white; - background-color: #C85000; + color: black; + background-color: #FFA500; }} .line-added-after {{ color: rgb(0, 221, 0) @@ -323,7 +323,7 @@ fn process_old_new( }} .line-removed-after .word-added {{ color: black; - background-color: #C85000; + background-color: #D48B04; }} .line-added-after {{ color: rgba(0, 255, 0, 1);