diff options
author | Andrew Gerrand <adg@golang.org> | 2012-01-19 18:59:06 +1100 |
---|---|---|
committer | Andrew Gerrand <adg@golang.org> | 2012-01-19 18:59:06 +1100 |
commit | 3358a5068a87bc25bd551698f4f0be7c5677168d (patch) | |
tree | 02c83428fcf33abb187ea34ad3451ef7f50bb03b | |
parent | b4829c1de6ffd8581c40932da7a57dcfdd0610fb (diff) | |
download | go-3358a5068a87bc25bd551698f4f0be7c5677168d.tar.gz go-3358a5068a87bc25bd551698f4f0be7c5677168d.zip |
godoc: add anchors to cmd documentation headings
Also, disable server-side generation of TOC for commands as they would
only ever show Overview. The JS does a better job (for now).
Fixes #2732.
R=gri, dsymonds
CC=golang-dev
https://golang.org/cl/5558046
-rw-r--r-- | doc/godocs.js | 54 | ||||
-rw-r--r-- | lib/godoc/package.html | 2 | ||||
-rw-r--r-- | src/pkg/go/doc/comment.go | 18 |
3 files changed, 40 insertions, 34 deletions
diff --git a/doc/godocs.js b/doc/godocs.js index bbf5ea2893..3b8625a58d 100644 --- a/doc/godocs.js +++ b/doc/godocs.js @@ -66,44 +66,32 @@ function godocs_generateTOC() { var i; for (i = 0; i < navbar.parentNode.childNodes.length; i++) { var node = navbar.parentNode.childNodes[i]; - if ((node.tagName == 'h2') || (node.tagName == 'H2')) { - if (!node.id) { - node.id = 'tmp_' + i; - } - var text = godocs_nodeToText(node); - if (!text) { continue; } - - var textNode = document.createTextNode(text); - - var link = document.createElement('a'); - link.href = '#' + node.id; - link.appendChild(textNode); - - // Then create the item itself - var item = document.createElement('dt'); - - item.appendChild(link); - toc_items.push(item); + if ((node.tagName != 'h2') && (node.tagName != 'H2') && + (node.tagName != 'h3') && (node.tagName != 'H3')) { + continue; } - if ((node.tagName == 'h3') || (node.tagName == 'H3')) { - if (!node.id) { - node.id = 'tmp_' + i; - } - var text = godocs_nodeToText(node); - if (!text) { continue; } - - var textNode = document.createTextNode(text); + if (!node.id) { + node.id = 'tmp_' + i; + } + var text = godocs_nodeToText(node); + if (!text) { continue; } - var link = document.createElement('a'); - link.href = '#' + node.id; - link.appendChild(textNode); + var textNode = document.createTextNode(text); - // Then create the item itself - var item = document.createElement('dd'); + var link = document.createElement('a'); + link.href = '#' + node.id; + link.appendChild(textNode); - item.appendChild(link); - toc_items.push(item); + // Then create the item itself + var item; + if ((node.tagName == 'h2') || (node.tagName == 'H2')) { + item = document.createElement('dt'); + } else { // h3 + item = document.createElement('dd'); } + + item.appendChild(link); + toc_items.push(item); } if (toc_items.length <= 1) { return; } diff --git a/lib/godoc/package.html b/lib/godoc/package.html index 155f24032a..5a7f3ef976 100644 --- a/lib/godoc/package.html +++ b/lib/godoc/package.html @@ -3,6 +3,7 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> +{{if .IsPkg}} <!-- Table of contents; must be named manual-nav to turn off auto nav. --> <div id="manual-nav"> {{with .PDoc}} @@ -37,6 +38,7 @@ </dl> {{end}} </div> +{{end}} <!-- Main page --> {{with .PAst}} diff --git a/src/pkg/go/doc/comment.go b/src/pkg/go/doc/comment.go index 060e37bff1..d73b131595 100644 --- a/src/pkg/go/doc/comment.go +++ b/src/pkg/go/doc/comment.go @@ -68,7 +68,8 @@ var ( html_endp = []byte("</p>\n") html_pre = []byte("<pre>") html_endpre = []byte("</pre>\n") - html_h = []byte("<h3>") + html_h = []byte(`<h3 id="`) + html_hq = []byte(`">`) html_endh = []byte("</h3>\n") ) @@ -225,6 +226,12 @@ type block struct { lines []string } +var nonAlphaNumRx = regexp.MustCompile(`[^a-zA-Z0-9]`) + +func anchorID(line string) string { + return nonAlphaNumRx.ReplaceAllString(line, "_") +} + // ToHTML converts comment text to formatted HTML. // The comment was prepared by DocReader, // so it is known not to have leading, trailing blank lines @@ -253,9 +260,18 @@ func ToHTML(w io.Writer, text string, words map[string]string) { w.Write(html_endp) case opHead: w.Write(html_h) + id := "" for _, line := range b.lines { + if id == "" { + id = anchorID(line) + w.Write([]byte(id)) + w.Write(html_hq) + } commentEscape(w, line, true) } + if id == "" { + w.Write(html_hq) + } w.Write(html_endh) case opPre: w.Write(html_pre) |