summaryrefslogtreecommitdiff
path: root/vendor/github.com/yuin/goldmark/text
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/yuin/goldmark/text')
-rw-r--r--vendor/github.com/yuin/goldmark/text/reader.go55
-rw-r--r--vendor/github.com/yuin/goldmark/text/segment.go6
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...)
}