* MM-29981 - optimize markdown.Inspect - Cache regexp.MustCompile - Reuse slice in MergeInlineText - Remove pointer to slice in closeBlocks - Pre-allocate slice in ParseLines - Some more small cleanups ``` name old time/op new time/op delta Inspect-8 10.5µs ± 3% 6.6µs ± 1% -37.59% (p=0.000 n=10+7) name old alloc/op new alloc/op delta Inspect-8 6.66kB ± 0% 3.22kB ± 0% -51.62% (p=0.000 n=10+9) name old allocs/op new allocs/op delta Inspect-8 117 ± 0% 76 ± 0% -35.04% (p=0.000 n=10+10) ``` * fix lint * remove ignore Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
31 строка
802 B
Go
31 строка
802 B
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package markdown
|
|
|
|
import "strings"
|
|
|
|
type Line struct {
|
|
Range
|
|
}
|
|
|
|
func ParseLines(markdown string) []Line {
|
|
lineStartPosition := 0
|
|
isAfterCarriageReturn := false
|
|
lines := make([]Line, 0, strings.Count(markdown, "\n"))
|
|
for position, r := range markdown {
|
|
if r == '\n' {
|
|
lines = append(lines, Line{Range{lineStartPosition, position + 1}})
|
|
lineStartPosition = position + 1
|
|
} else if isAfterCarriageReturn {
|
|
lines = append(lines, Line{Range{lineStartPosition, position}})
|
|
lineStartPosition = position
|
|
}
|
|
isAfterCarriageReturn = r == '\r'
|
|
}
|
|
if lineStartPosition < len(markdown) {
|
|
lines = append(lines, Line{Range{lineStartPosition, len(markdown)}})
|
|
}
|
|
return lines
|
|
}
|