diff --git a/html.go b/html.go
index 0dead5e..23e86dd 100644
--- a/html.go
+++ b/html.go
@@ -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++
- }
- if i > org {
- out.Write(src[org:i])
- }
-
- // escape a character
- if i >= len(src) {
- break
- }
- switch src[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("<")
case '>':
+ if i > org {
+ out.Write(src[org:i])
+ }
+ org = i + 1
out.WriteString(">")
case '&':
+ if i > org {
+ out.Write(src[org:i])
+ }
+ org = i + 1
out.WriteString("&")
case '"':
+ if i > org {
+ out.Write(src[org:i])
+ }
+ org = i + 1
out.WriteString(""")
}
}
+ if org < len(src) {
+ out.Write(src[org:])
+ }
}
func htmlHeader(out *bytes.Buffer, text []byte, level int, opaque interface{}) {