rustdoc: properly handle path wrapping
This commit is contained in:
parent
1d339b07ca
commit
3bf8bcfbe0
@ -107,12 +107,17 @@ fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|||||||
let next_is_uppercase =
|
let next_is_uppercase =
|
||||||
|| pk.map_or(true, |(_, t)| t.chars().any(|c| c.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_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())
|
if (i - last > 3 && is_uppercase() && !next_is_uppercase())
|
||||||
|| (s.contains('_') && !next_is_underscore())
|
|| (s.contains('_') && !next_is_underscore())
|
||||||
{
|
{
|
||||||
EscapeBodyText(&text[last..i]).fmt(fmt)?;
|
EscapeBodyText(&text[last..i]).fmt(fmt)?;
|
||||||
fmt.write_str("<wbr>")?;
|
fmt.write_str("<wbr>")?;
|
||||||
last = i;
|
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() {
|
if last < text.len() {
|
||||||
|
@ -6,6 +6,12 @@ fn escape_body_text_with_wbr() {
|
|||||||
assert_eq!(&E("").to_string(), "");
|
assert_eq!(&E("").to_string(), "");
|
||||||
assert_eq!(&E("a").to_string(), "a");
|
assert_eq!(&E("a").to_string(), "a");
|
||||||
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
|
// real(istic) examples
|
||||||
assert_eq!(&E("FirstSecond").to_string(), "First<wbr>Second");
|
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<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 SecondThird").to_string(), "First Second<wbr>Third");
|
||||||
assert_eq!(&E("First<T>_Second").to_string(), "First<<wbr>T><wbr>_Second");
|
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("first::second").to_string(), "first::<wbr>second");
|
||||||
assert_eq!(&E("MY_CONSTANT").to_string(), "MY<wbr>_CONSTANT");
|
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
|
// a string won't get wrapped if it's less than 8 bytes
|
||||||
assert_eq!(&E("HashSet").to_string(), "HashSet");
|
assert_eq!(&E("HashSet").to_string(), "HashSet");
|
||||||
// an individual word won't get wrapped if it's less than 4 bytes
|
// an individual word won't get wrapped if it's less than 4 bytes
|
||||||
|
@ -558,7 +558,7 @@ fn tag_html<'a>(
|
|||||||
display_fn(move |f| {
|
display_fn(move |f| {
|
||||||
write!(
|
write!(
|
||||||
f,
|
f,
|
||||||
r#"<span class="stab {class}" title="{title}">{contents}</span>"#,
|
r#"<wbr><span class="stab {class}" title="{title}">{contents}</span>"#,
|
||||||
title = Escape(title),
|
title = Escape(title),
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
@ -586,12 +586,15 @@ ul.block, .block li {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.sidebar h2 {
|
.sidebar h2 {
|
||||||
|
text-wrap: balance;
|
||||||
overflow-wrap: anywhere;
|
overflow-wrap: anywhere;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0.7rem 0;
|
margin: 0.7rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar h3 {
|
.sidebar h3 {
|
||||||
|
text-wrap: balance;
|
||||||
|
overflow-wrap: anywhere;
|
||||||
font-size: 1.125rem; /* 18px */
|
font-size: 1.125rem; /* 18px */
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@ -2222,7 +2225,7 @@ in src-script.js and main.js
|
|||||||
width: 33%;
|
width: 33%;
|
||||||
}
|
}
|
||||||
.item-table > li > div {
|
.item-table > li > div {
|
||||||
word-break: break-all;
|
overflow-wrap: anywhere;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,6 @@
|
|||||||
</section>
|
</section>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if !path.is_empty() %}
|
{% 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 %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
@ -27,7 +27,8 @@ compare-elements-position-near: (
|
|||||||
".item-name .stab.deprecated",
|
".item-name .stab.deprecated",
|
||||||
{"y": 2},
|
{"y": 2},
|
||||||
)
|
)
|
||||||
compare-elements-position: (
|
// "Unix" part is on second line
|
||||||
|
compare-elements-position-false: (
|
||||||
".item-name .stab.deprecated",
|
".item-name .stab.deprecated",
|
||||||
".item-name .stab.portability",
|
".item-name .stab.portability",
|
||||||
["y"],
|
["y"],
|
||||||
|
Loading…
Reference in New Issue
Block a user