Improved performance
This commit is contained in:
46
Render.go
46
Render.go
@ -249,36 +249,37 @@ func (r *renderer) closeTables() {
|
||||
// writeText converts inline markdown to HTML.
|
||||
func (r *renderer) writeText(markdown string) {
|
||||
var (
|
||||
i = 0
|
||||
tokenStart = 0
|
||||
)
|
||||
|
||||
var (
|
||||
textStart = -1
|
||||
textEnd = -1
|
||||
urlStart = -1
|
||||
codeStart = -1
|
||||
emStart = -1
|
||||
strongStart = -1
|
||||
parentheses = 0
|
||||
tokenStart = 0
|
||||
searchStart = 0
|
||||
linkTextStart = -1
|
||||
linkTextEnd = -1
|
||||
urlStart = -1
|
||||
codeStart = -1
|
||||
emStart = -1
|
||||
strongStart = -1
|
||||
parentheses = 0
|
||||
)
|
||||
|
||||
for {
|
||||
if i >= len(markdown) {
|
||||
i := strings.IndexAny(markdown[searchStart:], "[]()`*_")
|
||||
|
||||
if i == -1 {
|
||||
r.WriteString(html.EscapeString(markdown[tokenStart:]))
|
||||
return
|
||||
}
|
||||
|
||||
i += searchStart
|
||||
searchStart = i + 1
|
||||
c := markdown[i]
|
||||
|
||||
switch c {
|
||||
case '[':
|
||||
r.WriteString(html.EscapeString(markdown[tokenStart:i]))
|
||||
tokenStart = i
|
||||
textStart = i
|
||||
linkTextStart = i
|
||||
|
||||
case ']':
|
||||
textEnd = i
|
||||
linkTextEnd = i
|
||||
|
||||
case '(':
|
||||
if parentheses == 0 {
|
||||
@ -290,8 +291,8 @@ func (r *renderer) writeText(markdown string) {
|
||||
case ')':
|
||||
parentheses--
|
||||
|
||||
if parentheses == 0 && textStart >= 0 && textEnd >= 0 && urlStart >= 0 {
|
||||
linkText := markdown[textStart+1 : textEnd]
|
||||
if parentheses == 0 && linkTextStart >= 0 && linkTextEnd >= 0 && urlStart >= 0 {
|
||||
linkText := markdown[linkTextStart+1 : linkTextEnd]
|
||||
linkURL := markdown[urlStart+1 : i]
|
||||
|
||||
r.WriteString("<a href=\"")
|
||||
@ -300,8 +301,8 @@ func (r *renderer) writeText(markdown string) {
|
||||
r.WriteString(html.EscapeString(linkText))
|
||||
r.WriteString("</a>")
|
||||
|
||||
textStart = -1
|
||||
textEnd = -1
|
||||
linkTextStart = -1
|
||||
linkTextEnd = -1
|
||||
urlStart = -1
|
||||
|
||||
tokenStart = i + 1
|
||||
@ -329,9 +330,8 @@ func (r *renderer) writeText(markdown string) {
|
||||
r.WriteString(html.EscapeString(markdown[strongStart:i]))
|
||||
r.WriteString("</strong>")
|
||||
strongStart = -1
|
||||
|
||||
i++
|
||||
tokenStart = i + 1
|
||||
tokenStart = i + 2
|
||||
searchStart = tokenStart
|
||||
} else if emStart != -1 {
|
||||
r.WriteString("<em>")
|
||||
r.WriteString(html.EscapeString(markdown[emStart:i]))
|
||||
@ -344,8 +344,6 @@ func (r *renderer) writeText(markdown string) {
|
||||
emStart = i + 1
|
||||
}
|
||||
}
|
||||
|
||||
i++
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user