diff options
| author | NODA, Kai <nodakai@gmail.com> | 2014-09-28 00:15:31 +0800 |
|---|---|---|
| committer | NODA, Kai <nodakai@gmail.com> | 2014-10-08 20:36:30 +0800 |
| commit | f40b60b0e46512e204225ce42c702ce23c943232 (patch) | |
| tree | 19f42794f256b98fe3e2782471268afd73b1195a | |
| parent | bc649ba8f803913a23c767d57be01c693cd03d8a (diff) | |
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.
| -rw-r--r-- | src/librustdoc/html/format.rs | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs index ebccb1188cc..02ba4aabc99 100644 --- a/src/librustdoc/html/format.rs +++ b/src/librustdoc/html/format.rs @@ -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") |
