github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/utils/markdown/lines.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package markdown 5 6 import ( 7 "strings" 8 ) 9 10 type Line struct { 11 Range 12 } 13 14 func ParseLines(markdown string) []Line { 15 lineStartPosition := 0 16 isAfterCarriageReturn := false 17 lines := make([]Line, 0, strings.Count(markdown, "\n")) 18 for position, r := range markdown { 19 if r == '\n' { 20 lines = append(lines, Line{Range{lineStartPosition, position + 1}}) 21 lineStartPosition = position + 1 22 } else if isAfterCarriageReturn { 23 lines = append(lines, Line{Range{lineStartPosition, position}}) 24 lineStartPosition = position 25 } 26 isAfterCarriageReturn = r == '\r' 27 } 28 if lineStartPosition < len(markdown) { 29 lines = append(lines, Line{Range{lineStartPosition, len(markdown)}}) 30 } 31 return lines 32 }