diff options
Diffstat (limited to 'vendor/github.com/yuin/goldmark/parser/parser.go')
| -rw-r--r-- | vendor/github.com/yuin/goldmark/parser/parser.go | 44 |
1 files changed, 16 insertions, 28 deletions
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 |
