diff options
author | Robert Griesemer <gri@golang.org> | 2009-12-28 17:24:53 -0800 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2009-12-28 17:24:53 -0800 |
commit | 2aefb8d930dd6c3878590dff727226130d836b8d (patch) | |
tree | 3dab676eb84817d36b7f380008197a703ed418c5 | |
parent | f0fcb2d59fb431d45847f09cf1bbcfc3363047ba (diff) | |
download | go-2aefb8d930dd6c3878590dff727226130d836b8d.tar.gz go-2aefb8d930dd6c3878590dff727226130d836b8d.zip |
Fix bug in godoc tab conversion filter:
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
-rw-r--r-- | src/cmd/godoc/godoc.go | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/cmd/godoc/godoc.go b/src/cmd/godoc/godoc.go index a381c3a586..8b6bc5e460 100644 --- a/src/cmd/godoc/godoc.go +++ b/src/cmd/godoc/godoc.go @@ -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 } } |