diff options
Diffstat (limited to 'vendor/github.com/yuin/goldmark/text')
| -rw-r--r-- | vendor/github.com/yuin/goldmark/text/reader.go | 55 | ||||
| -rw-r--r-- | vendor/github.com/yuin/goldmark/text/segment.go | 6 |
2 files changed, 48 insertions, 13 deletions
diff --git a/vendor/github.com/yuin/goldmark/text/reader.go b/vendor/github.com/yuin/goldmark/text/reader.go index b3f97fb56..21083dcbb 100644 --- a/vendor/github.com/yuin/goldmark/text/reader.go +++ b/vendor/github.com/yuin/goldmark/text/reader.go @@ -55,6 +55,11 @@ type Reader interface { // reader. AdvanceAndSetPadding(int, int) + // AdvanceToEOL advances the internal pointer to the end of line. + // If the line ends with a newline, it will be included in the segment. + // If the line ends with EOF, it will not be included in the segment. + AdvanceToEOL() + // AdvanceLine advances the internal pointer to the next line head. AdvanceLine() @@ -220,21 +225,46 @@ func (r *reader) AdvanceAndSetPadding(n, padding int) { } } +func (r *reader) AdvanceToEOL() { + if r.pos.Start >= r.sourceLength { + return + } + + r.lineOffset = -1 + i := -1 + if r.peekedLine != nil { + r.pos.Start += len(r.peekedLine) - r.pos.Padding - 1 + if r.source[r.pos.Start] == '\n' { + i = 0 + } + } + if i == -1 { + i = bytes.IndexByte(r.source[r.pos.Start:], '\n') + } + r.peekedLine = nil + if i != -1 { + r.pos.Start += i + } else { + r.pos.Start = r.sourceLength + } + r.pos.Padding = 0 +} + func (r *reader) AdvanceLine() { r.lineOffset = -1 r.peekedLine = nil r.pos.Start = r.pos.Stop r.head = r.pos.Start - if r.pos.Start < 0 { + if r.pos.Start < 0 || r.pos.Start >= r.sourceLength { return } r.pos.Stop = r.sourceLength - for i := r.pos.Start; i < r.sourceLength; i++ { - c := r.source[i] - if c == '\n' { - r.pos.Stop = i + 1 - break - } + i := 0 + if r.source[r.pos.Start] != '\n' { + i = bytes.IndexByte(r.source[r.pos.Start:], '\n') + } + if i != -1 { + r.pos.Stop = r.pos.Start + i + 1 } r.line++ r.pos.Padding = 0 @@ -444,6 +474,17 @@ func (r *blockReader) AdvanceAndSetPadding(n, padding int) { } } +func (r *blockReader) AdvanceToEOL() { + r.lineOffset = -1 + r.pos.Padding = 0 + c := r.source[r.pos.Stop-1] + if c == '\n' { + r.pos.Start = r.pos.Stop - 1 + } else { + r.pos.Start = r.pos.Stop + } +} + func (r *blockReader) AdvanceLine() { r.SetPosition(r.line+1, NewSegment(invalidValue, invalidValue)) r.head = r.pos.Start diff --git a/vendor/github.com/yuin/goldmark/text/segment.go b/vendor/github.com/yuin/goldmark/text/segment.go index 93fbf1994..30655dd3f 100644 --- a/vendor/github.com/yuin/goldmark/text/segment.go +++ b/vendor/github.com/yuin/goldmark/text/segment.go @@ -176,17 +176,11 @@ func NewSegments() *Segments { // Append appends the given segment after the tail of the collection. func (s *Segments) Append(t Segment) { - if s.values == nil { - s.values = make([]Segment, 0, 20) - } s.values = append(s.values, t) } // AppendAll appends all elements of given segments after the tail of the collection. func (s *Segments) AppendAll(t []Segment) { - if s.values == nil { - s.values = make([]Segment, 0, 20) - } s.values = append(s.values, t...) } |
