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),
|
||||
_ => "".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(..) => {
|
||||
fail!("should have been cleaned")
|
||||
|
||||
Reference in New Issue
Block a user