summaryrefslogtreecommitdiff
path: root/vendor/github.com/yuin
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/yuin')
-rw-r--r--vendor/github.com/yuin/goldmark/ast/block.go9
-rw-r--r--vendor/github.com/yuin/goldmark/parser/code_block.go4
-rw-r--r--vendor/github.com/yuin/goldmark/parser/html_block.go8
-rw-r--r--vendor/github.com/yuin/goldmark/parser/list_item.go2
-rw-r--r--vendor/github.com/yuin/goldmark/parser/paragraph.go4
-rw-r--r--vendor/github.com/yuin/goldmark/parser/parser.go44
-rw-r--r--vendor/github.com/yuin/goldmark/parser/thematic_break.go4
-rw-r--r--vendor/github.com/yuin/goldmark/text/reader.go55
-rw-r--r--vendor/github.com/yuin/goldmark/text/segment.go6
9 files changed, 78 insertions, 58 deletions
diff --git a/vendor/github.com/yuin/goldmark/ast/block.go b/vendor/github.com/yuin/goldmark/ast/block.go
index d17564a99..efeea08ef 100644
--- a/vendor/github.com/yuin/goldmark/ast/block.go
+++ b/vendor/github.com/yuin/goldmark/ast/block.go
@@ -10,8 +10,8 @@ import (
// A BaseBlock struct implements the Node interface partialliy.
type BaseBlock struct {
BaseNode
+ lines textm.Segments
blankPreviousLines bool
- lines *textm.Segments
}
// Type implements Node.Type.
@@ -36,15 +36,12 @@ func (b *BaseBlock) SetBlankPreviousLines(v bool) {
// Lines implements Node.Lines.
func (b *BaseBlock) Lines() *textm.Segments {
- if b.lines == nil {
- b.lines = textm.NewSegments()
- }
- return b.lines
+ return &b.lines
}
// SetLines implements Node.SetLines.
func (b *BaseBlock) SetLines(v *textm.Segments) {
- b.lines = v
+ b.lines = *v
}
// A Document struct is a root node of Markdown text.
diff --git a/vendor/github.com/yuin/goldmark/parser/code_block.go b/vendor/github.com/yuin/goldmark/parser/code_block.go
index d99146c52..5a2401695 100644
--- a/vendor/github.com/yuin/goldmark/parser/code_block.go
+++ b/vendor/github.com/yuin/goldmark/parser/code_block.go
@@ -37,7 +37,7 @@ func (b *codeBlockParser) Open(parent ast.Node, reader text.Reader, pc Context)
}
segment.ForceNewline = true
node.Lines().Append(segment)
- reader.Advance(segment.Len() - 1)
+ reader.AdvanceToEOL()
return node, NoChildren
}
@@ -62,7 +62,7 @@ func (b *codeBlockParser) Continue(node ast.Node, reader text.Reader, pc Context
segment.ForceNewline = true
node.Lines().Append(segment)
- reader.Advance(segment.Len() - 1)
+ reader.AdvanceToEOL()
return Continue | NoChildren
}
diff --git a/vendor/github.com/yuin/goldmark/parser/html_block.go b/vendor/github.com/yuin/goldmark/parser/html_block.go
index 09dc21f42..262ef9325 100644
--- a/vendor/github.com/yuin/goldmark/parser/html_block.go
+++ b/vendor/github.com/yuin/goldmark/parser/html_block.go
@@ -150,7 +150,7 @@ func (b *htmlBlockParser) Open(parent ast.Node, reader text.Reader, pc Context)
}
}
if node != nil {
- reader.Advance(segment.Len() - util.TrimRightSpaceLength(line))
+ reader.AdvanceToEOL()
node.Lines().Append(segment)
return node, NoChildren
}
@@ -173,7 +173,7 @@ func (b *htmlBlockParser) Continue(node ast.Node, reader text.Reader, pc Context
}
if htmlBlockType1CloseRegexp.Match(line) {
htmlBlock.ClosureLine = segment
- reader.Advance(segment.Len() - util.TrimRightSpaceLength(line))
+ reader.AdvanceToEOL()
return Close
}
case ast.HTMLBlockType2:
@@ -202,7 +202,7 @@ func (b *htmlBlockParser) Continue(node ast.Node, reader text.Reader, pc Context
}
if bytes.Contains(line, closurePattern) {
htmlBlock.ClosureLine = segment
- reader.Advance(segment.Len())
+ reader.AdvanceToEOL()
return Close
}
@@ -212,7 +212,7 @@ func (b *htmlBlockParser) Continue(node ast.Node, reader text.Reader, pc Context
}
}
node.Lines().Append(segment)
- reader.Advance(segment.Len() - util.TrimRightSpaceLength(line))
+ reader.AdvanceToEOL()
return Continue | NoChildren
}
diff --git a/vendor/github.com/yuin/goldmark/parser/list_item.go b/vendor/github.com/yuin/goldmark/parser/list_item.go
index 2206ad908..f4d7da4a7 100644
--- a/vendor/github.com/yuin/goldmark/parser/list_item.go
+++ b/vendor/github.com/yuin/goldmark/parser/list_item.go
@@ -53,7 +53,7 @@ func (b *listItemParser) Open(parent ast.Node, reader text.Reader, pc Context) (
func (b *listItemParser) Continue(node ast.Node, reader text.Reader, pc Context) State {
line, _ := reader.PeekLine()
if util.IsBlank(line) {
- reader.Advance(len(line) - 1)
+ reader.AdvanceToEOL()
return Continue | HasChildren
}
diff --git a/vendor/github.com/yuin/goldmark/parser/paragraph.go b/vendor/github.com/yuin/goldmark/parser/paragraph.go
index 9d3fa38e0..801b0df56 100644
--- a/vendor/github.com/yuin/goldmark/parser/paragraph.go
+++ b/vendor/github.com/yuin/goldmark/parser/paragraph.go
@@ -29,7 +29,7 @@ func (b *paragraphParser) Open(parent ast.Node, reader text.Reader, pc Context)
}
node := ast.NewParagraph()
node.Lines().Append(segment)
- reader.Advance(segment.Len() - 1)
+ reader.AdvanceToEOL()
return node, NoChildren
}
@@ -39,7 +39,7 @@ func (b *paragraphParser) Continue(node ast.Node, reader text.Reader, pc Context
return Close
}
node.Lines().Append(segment)
- reader.Advance(segment.Len() - 1)
+ reader.AdvanceToEOL()
return Continue | NoChildren
}
diff --git a/vendor/github.com/yuin/goldmark/parser/parser.go b/vendor/github.com/yuin/goldmark/parser/parser.go
index 7ec40b31a..78a6b2603 100644
--- a/vendor/github.com/yuin/goldmark/parser/parser.go
+++ b/vendor/github.com/yuin/goldmark/parser/parser.go
@@ -1030,47 +1030,35 @@ type lineStat struct {
}
func isBlankLine(lineNum, level int, stats []lineStat) bool {
- ret := true
- for i := len(stats) - 1 - level; i >= 0; i-- {
- ret = false
+ l := len(stats)
+ if l == 0 {
+ return true
+ }
+ for i := l - 1 - level; i >= 0; i-- {
s := stats[i]
- if s.lineNum == lineNum {
- if s.level < level && s.isBlank {
- return true
- } else if s.level == level {
- return s.isBlank
- }
- }
- if s.lineNum < lineNum {
- return ret
+ if s.lineNum == lineNum && s.level <= level {
+ return s.isBlank
+ } else if s.lineNum < lineNum {
+ break
}
}
- return ret
+ return false
}
func (p *parser) parseBlocks(parent ast.Node, reader text.Reader, pc Context) {
- pc.SetOpenedBlocks([]Block{})
+ pc.SetOpenedBlocks(nil)
blankLines := make([]lineStat, 0, 128)
- var isBlank bool
for { // process blocks separated by blank lines
- _, lines, ok := reader.SkipBlankLines()
+ _, _, ok := reader.SkipBlankLines()
if !ok {
return
}
- lineNum, _ := reader.Position()
- if lines != 0 {
- blankLines = blankLines[0:0]
- l := len(pc.OpenedBlocks())
- for i := 0; i < l; i++ {
- blankLines = append(blankLines, lineStat{lineNum - 1, i, lines != 0})
- }
- }
- isBlank = isBlankLine(lineNum-1, 0, blankLines)
// first, we try to open blocks
- if p.openBlocks(parent, isBlank, reader, pc) != newBlocksOpened {
+ if p.openBlocks(parent, true, reader, pc) != newBlocksOpened {
return
}
reader.AdvanceLine()
+ blankLines = blankLines[0:0]
for { // process opened blocks line by line
openedBlocks := pc.OpenedBlocks()
l := len(openedBlocks)
@@ -1096,7 +1084,7 @@ func (p *parser) parseBlocks(parent ast.Node, reader text.Reader, pc Context) {
// When current node is a container block and has no children,
// we try to open new child nodes
if state&HasChildren != 0 && i == lastIndex {
- isBlank = isBlankLine(lineNum-1, i+1, blankLines)
+ isBlank := isBlankLine(lineNum-1, i+1, blankLines)
p.openBlocks(be.Node, isBlank, reader, pc)
break
}
@@ -1104,7 +1092,7 @@ func (p *parser) parseBlocks(parent ast.Node, reader text.Reader, pc Context) {
}
}
// current node may be closed or lazy continuation
- isBlank = isBlankLine(lineNum-1, i, blankLines)
+ isBlank := isBlankLine(lineNum-1, i, blankLines)
thisParent := parent
if i != 0 {
thisParent = openedBlocks[i-1].Node
diff --git a/vendor/github.com/yuin/goldmark/parser/thematic_break.go b/vendor/github.com/yuin/goldmark/parser/thematic_break.go
index db20a1e7a..ea015c870 100644
--- a/vendor/github.com/yuin/goldmark/parser/thematic_break.go
+++ b/vendor/github.com/yuin/goldmark/parser/thematic_break.go
@@ -50,9 +50,9 @@ func (b *thematicBreakPraser) Trigger() []byte {
}
func (b *thematicBreakPraser) Open(parent ast.Node, reader text.Reader, pc Context) (ast.Node, State) {
- line, segment := reader.PeekLine()
+ line, _ := reader.PeekLine()
if isThematicBreak(line, reader.LineOffset()) {
- reader.Advance(segment.Len() - 1)
+ reader.AdvanceToEOL()
return ast.NewThematicBreak(), NoChildren
}
return nil, NoChildren
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...)
}