rewrite of attrEscape: cleaner and faster

This commit is contained in:
Russ Ross 2011-06-24 19:11:06 -06:00
parent a74678bf51
commit 44db721708

36
html.go
View File

@ -121,31 +121,39 @@ func HtmlTocRenderer(flags int) *Renderer {
}
func attrEscape(out *bytes.Buffer, src []byte) {
for i := 0; i < len(src); i++ {
// directly copy normal characters
org := i
for i < len(src) && src[i] != '<' && src[i] != '>' && src[i] != '&' && src[i] != '"' {
i++
org := 0
for i, ch := range src {
switch ch {
case '<':
if i > org {
// copy all the normal characters since the last escape
out.Write(src[org:i])
}
org = i + 1
out.WriteString("&lt;")
case '>':
if i > org {
out.Write(src[org:i])
}
// escape a character
if i >= len(src) {
break
}
switch src[i] {
case '<':
out.WriteString("&lt;")
case '>':
org = i + 1
out.WriteString("&gt;")
case '&':
if i > org {
out.Write(src[org:i])
}
org = i + 1
out.WriteString("&amp;")
case '"':
if i > org {
out.Write(src[org:i])
}
org = i + 1
out.WriteString("&quot;")
}
}
if org < len(src) {
out.Write(src[org:])
}
}
func htmlHeader(out *bytes.Buffer, text []byte, level int, opaque interface{}) {