diff options
| author | Michael Howell <michael@notriddle.com> | 2024-07-19 09:00:50 -0700 |
|---|---|---|
| committer | Michael Howell <michael@notriddle.com> | 2024-07-29 10:31:02 -0700 |
| commit | 3bf8bcfbe0ebd9527a8ec107c83085cd2d4d6ec1 (patch) | |
| tree | d0a1a198ca761c372b1fb97a4d5a8b410453e610 /src | |
| parent | 1d339b07ca84743710dc87dc0bc4c0597006ed59 (diff) | |
| download | rust-3bf8bcfbe0ebd9527a8ec107c83085cd2d4d6ec1.tar.gz rust-3bf8bcfbe0ebd9527a8ec107c83085cd2d4d6ec1.zip | |
rustdoc: properly handle path wrapping
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/html/escape.rs | 5 | ||||
| -rw-r--r-- | src/librustdoc/html/escape/tests.rs | 9 | ||||
| -rw-r--r-- | src/librustdoc/html/render/print_item.rs | 2 | ||||
| -rw-r--r-- | src/librustdoc/html/static/css/rustdoc.css | 5 | ||||
| -rw-r--r-- | src/librustdoc/html/templates/sidebar.html | 2 |
5 files changed, 19 insertions, 4 deletions
diff --git a/src/librustdoc/html/escape.rs b/src/librustdoc/html/escape.rs index 3e20c5b322b..f8199cd6e0e 100644 --- a/src/librustdoc/html/escape.rs +++ b/src/librustdoc/html/escape.rs @@ -107,12 +107,17 @@ impl<'a> fmt::Display for EscapeBodyTextWithWbr<'a> { let next_is_uppercase = || pk.map_or(true, |(_, t)| t.chars().any(|c| c.is_uppercase())); let next_is_underscore = || pk.map_or(true, |(_, t)| t.contains('_')); + let next_is_colon = || pk.map_or(true, |(_, t)| t.contains(':')); if (i - last > 3 && is_uppercase() && !next_is_uppercase()) || (s.contains('_') && !next_is_underscore()) { EscapeBodyText(&text[last..i]).fmt(fmt)?; fmt.write_str("<wbr>")?; last = i; + } else if s.contains(':') && !next_is_colon() { + EscapeBodyText(&text[last..i + 1]).fmt(fmt)?; + fmt.write_str("<wbr>")?; + last = i + 1; } } if last < text.len() { diff --git a/src/librustdoc/html/escape/tests.rs b/src/librustdoc/html/escape/tests.rs index 7933f23eb74..e2d81cf5c27 100644 --- a/src/librustdoc/html/escape/tests.rs +++ b/src/librustdoc/html/escape/tests.rs @@ -6,6 +6,12 @@ fn escape_body_text_with_wbr() { assert_eq!(&E("").to_string(), ""); assert_eq!(&E("a").to_string(), "a"); assert_eq!(&E("A").to_string(), "A"); + assert_eq!(&E("_").to_string(), "_"); + assert_eq!(&E(":").to_string(), ":"); + assert_eq!(&E(" ").to_string(), " "); + assert_eq!(&E("___________").to_string(), "___________"); + assert_eq!(&E(":::::::::::").to_string(), ":::::::::::"); + assert_eq!(&E(" ").to_string(), " "); // real(istic) examples assert_eq!(&E("FirstSecond").to_string(), "First<wbr>Second"); assert_eq!(&E("First_Second").to_string(), "First<wbr>_Second"); @@ -15,8 +21,9 @@ fn escape_body_text_with_wbr() { assert_eq!(&E("First SecondThird").to_string(), "First Second<wbr>Third"); assert_eq!(&E("First<T>_Second").to_string(), "First<<wbr>T><wbr>_Second"); assert_eq!(&E("first_second").to_string(), "first<wbr>_second"); + assert_eq!(&E("first:second").to_string(), "first:<wbr>second"); + assert_eq!(&E("first::second").to_string(), "first::<wbr>second"); assert_eq!(&E("MY_CONSTANT").to_string(), "MY<wbr>_CONSTANT"); - assert_eq!(&E("___________").to_string(), "___________"); // a string won't get wrapped if it's less than 8 bytes assert_eq!(&E("HashSet").to_string(), "HashSet"); // an individual word won't get wrapped if it's less than 4 bytes diff --git a/src/librustdoc/html/render/print_item.rs b/src/librustdoc/html/render/print_item.rs index 3f01c082ba9..eec6df9dd20 100644 --- a/src/librustdoc/html/render/print_item.rs +++ b/src/librustdoc/html/render/print_item.rs @@ -558,7 +558,7 @@ fn extra_info_tags<'a, 'tcx: 'a>( display_fn(move |f| { write!( f, - r#"<span class="stab {class}" title="{title}">{contents}</span>"#, + r#"<wbr><span class="stab {class}" title="{title}">{contents}</span>"#, title = Escape(title), ) }) diff --git a/src/librustdoc/html/static/css/rustdoc.css b/src/librustdoc/html/static/css/rustdoc.css index e936e1ca07e..cafe5fe4c87 100644 --- a/src/librustdoc/html/static/css/rustdoc.css +++ b/src/librustdoc/html/static/css/rustdoc.css @@ -586,12 +586,15 @@ ul.block, .block li { } .sidebar h2 { + text-wrap: balance; overflow-wrap: anywhere; padding: 0; margin: 0.7rem 0; } .sidebar h3 { + text-wrap: balance; + overflow-wrap: anywhere; font-size: 1.125rem; /* 18px */ padding: 0; margin: 0; @@ -2222,7 +2225,7 @@ in src-script.js and main.js width: 33%; } .item-table > li > div { - word-break: break-all; + overflow-wrap: anywhere; } } diff --git a/src/librustdoc/html/templates/sidebar.html b/src/librustdoc/html/templates/sidebar.html index 025220ab415..0990c2716b8 100644 --- a/src/librustdoc/html/templates/sidebar.html +++ b/src/librustdoc/html/templates/sidebar.html @@ -31,6 +31,6 @@ </section> {% endif %} {% if !path.is_empty() %} - <h2><a href="{% if is_mod %}../{% endif %}index.html">In {{+ path}}</a></h2> + <h2><a href="{% if is_mod %}../{% endif %}index.html">In {{+ path|wrapped|safe}}</a></h2> {% endif %} </div> |
