about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Howell <michael@notriddle.com>2024-07-06 19:05:28 -0700
committerMichael Howell <michael@notriddle.com>2024-07-29 08:46:25 -0700
commit9186001f3491c0eb996de6f61a457cecfb089333 (patch)
treee914653d9b874bc24ded09cc479400495a3059dd
parent0d0e18e7f6e5f3278d897123e78271cce95de863 (diff)
rustdoc: avoid redundant HTML when there's already line breaks
-rw-r--r--src/librustdoc/html/escape.rs6
-rw-r--r--src/librustdoc/html/escape/tests.rs4
2 files changed, 10 insertions, 0 deletions
diff --git a/src/librustdoc/html/escape.rs b/src/librustdoc/html/escape.rs
index 94414913163..3e20c5b322b 100644
--- a/src/librustdoc/html/escape.rs
+++ b/src/librustdoc/html/escape.rs
@@ -97,6 +97,12 @@ impl<'a> fmt::Display for EscapeBodyTextWithWbr<'a> {
         let _ = it.next(); // don't insert wbr before first char
         while let Some((i, s)) = it.next() {
             let pk = it.peek();
+            if s.chars().all(|c| c.is_whitespace()) {
+                // don't need "First <wbr>Second"; the space is enough
+                EscapeBodyText(&text[last..i]).fmt(fmt)?;
+                last = i;
+                continue;
+            }
             let is_uppercase = || s.chars().any(|c| c.is_uppercase());
             let next_is_uppercase =
                 || pk.map_or(true, |(_, t)| t.chars().any(|c| c.is_uppercase()));
diff --git a/src/librustdoc/html/escape/tests.rs b/src/librustdoc/html/escape/tests.rs
index f99a2a693a6..7933f23eb74 100644
--- a/src/librustdoc/html/escape/tests.rs
+++ b/src/librustdoc/html/escape/tests.rs
@@ -9,6 +9,10 @@ fn escape_body_text_with_wbr() {
     // real(istic) examples
     assert_eq!(&E("FirstSecond").to_string(), "First<wbr>Second");
     assert_eq!(&E("First_Second").to_string(), "First<wbr>_Second");
+    assert_eq!(&E("First Second").to_string(), "First Second");
+    assert_eq!(&E("First HSecond").to_string(), "First HSecond");
+    assert_eq!(&E("First HTTPSecond").to_string(), "First HTTP<wbr>Second");
+    assert_eq!(&E("First SecondThird").to_string(), "First Second<wbr>Third");
     assert_eq!(&E("First<T>_Second").to_string(), "First&lt;<wbr>T&gt;<wbr>_Second");
     assert_eq!(&E("first_second").to_string(), "first<wbr>_second");
     assert_eq!(&E("MY_CONSTANT").to_string(), "MY<wbr>_CONSTANT");