]> Cypherpunks repositories - gostls13.git/commitdiff
Fix bug in godoc tab conversion filter:
authorRobert Griesemer <gri@golang.org>
Tue, 29 Dec 2009 01:24:53 +0000 (17:24 -0800)
committerRobert Griesemer <gri@golang.org>
Tue, 29 Dec 2009 01:24:53 +0000 (17:24 -0800)
tabs after an empty line where not converted.

Also, made it more robust in the presence of
(unexpected) ' ' and '\v' chars in indentation
mode.

R=r
CC=golang-dev
https://golang.org/cl/181085

src/cmd/godoc/godoc.go

index a381c3a5863280a14ec47adc5905c9e6df11c16a..8b6bc5e4602ab19cbc372bf147a1ca2b8dc093f9 100644 (file)
@@ -471,8 +471,8 @@ type tconv struct {
 }
 
 
-func (p *tconv) writeIndent(n int) (err os.Error) {
-       i := n * *tabwidth
+func (p *tconv) writeIndent() (err os.Error) {
+       i := p.indent
        for i > len(spaces) {
                i -= len(spaces)
                if _, err = p.output.Write(spaces); err != nil {
@@ -490,12 +490,20 @@ func (p *tconv) Write(data []byte) (n int, err os.Error) {
        for n, b = range data {
                switch p.state {
                case indenting:
-                       if b == '\t' {
+                       switch b {
+                       case '\t', '\v':
+                               p.indent += *tabwidth
+                       case '\n':
+                               p.indent = 0
+                               if _, err = p.output.Write(data[n : n+1]); err != nil {
+                                       return
+                               }
+                       case ' ':
                                p.indent++
-                       } else {
+                       default:
                                p.state = collecting
                                pos = n
-                               if err = p.writeIndent(p.indent); err != nil {
+                               if err = p.writeIndent(); err != nil {
                                        return
                                }
                        }