librustdoc/html: recognize slices not to nest A tags.
1. A slice of parametrized type, say
BorrowedRef { ... Vector(Generic(T)) }, is rendered as
"<a href='primitive.slice.html'>&[T]</a>"
2. A slice of other types, say
BorrowedRef { ... Vector(int) }, is rendered as
"<a href='primitive.slice.html'>&[</a>
<a href='primitive.int.html'>int</a>
<a href='primitive.slice.html'>]</a>"
3. Other cases, say BorrowedRef { ... int }, are
rendered as same as before:
"&<a href='primitive.int.html'>int</a>"
Relevant W3C specs:
- http://www.w3.org/TR/html401/struct/links.html#h-12.2.2
12.2.2 Nested links are illegal
- http://www.w3.org/TR/html5/text-level-semantics.html#the-a-element
states A tag must not enclose any "interactive contents"
which include A tags themselves.
This commit is contained in:
@@ -478,7 +478,25 @@ impl fmt::Show for clean::Type {
|
|||||||
Some(ref l) => format!("{} ", *l),
|
Some(ref l) => format!("{} ", *l),
|
||||||
_ => "".to_string(),
|
_ => "".to_string(),
|
||||||
};
|
};
|
||||||
write!(f, "&{}{}{}", lt, MutableSpace(mutability), **ty)
|
let m = MutableSpace(mutability);
|
||||||
|
match **ty {
|
||||||
|
clean::Vector(ref bt) => { // BorrowedRef{ ... Vector(T) } is &[T]
|
||||||
|
match **bt {
|
||||||
|
clean::Generic(_) =>
|
||||||
|
primitive_link(f, clean::Slice,
|
||||||
|
format!("&{}{}[{}]", lt, m, **bt).as_slice()),
|
||||||
|
_ => {
|
||||||
|
try!(primitive_link(f, clean::Slice,
|
||||||
|
format!("&{}{}[", lt, m).as_slice()));
|
||||||
|
try!(write!(f, "{}", **bt));
|
||||||
|
primitive_link(f, clean::Slice, "]")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
write!(f, "&{}{}{}", lt, m, **ty)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
clean::Unique(..) => {
|
clean::Unique(..) => {
|
||||||
fail!("should have been cleaned")
|
fail!("should have been cleaned")
|
||||||
|
|||||||
Reference in New Issue
Block a user