summaryrefslogtreecommitdiff
path: root/vendor/github.com
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com')
-rw-r--r--vendor/github.com/yuin/goldmark/ast/ast.go15
-rw-r--r--vendor/github.com/yuin/goldmark/ast/block.go49
-rw-r--r--vendor/github.com/yuin/goldmark/ast/inline.go32
-rw-r--r--vendor/github.com/yuin/goldmark/parser/code_block.go2
-rw-r--r--vendor/github.com/yuin/goldmark/parser/fcode_block.go1
-rw-r--r--vendor/github.com/yuin/goldmark/parser/parser.go6
-rw-r--r--vendor/github.com/yuin/goldmark/renderer/html/html.go15
-rw-r--r--vendor/github.com/yuin/goldmark/text/segment.go26
8 files changed, 112 insertions, 34 deletions
diff --git a/vendor/github.com/yuin/goldmark/ast/ast.go b/vendor/github.com/yuin/goldmark/ast/ast.go
index 67bb0da56..36ba606f7 100644
--- a/vendor/github.com/yuin/goldmark/ast/ast.go
+++ b/vendor/github.com/yuin/goldmark/ast/ast.go
@@ -123,6 +123,12 @@ type Node interface {
Dump(source []byte, level int)
// Text returns text values of this node.
+ // This method is valid only for some inline nodes.
+ // If this node is a block node, Text returns a text value as reasonable as possible.
+ // Notice that there are no 'correct' text values for the block nodes.
+ // Result for the block nodes may be different from your expectation.
+ //
+ // Deprecated: Use other properties of the node to get the text value(i.e. Pragraph.Lines, Text.Value).
Text(source []byte) []byte
// HasBlankPreviousLines returns true if the row before this node is blank,
@@ -374,11 +380,18 @@ func (n *BaseNode) OwnerDocument() *Document {
return nil
}
-// Text implements Node.Text .
+// Text implements Node.Text .
+//
+// Deprecated: Use other properties of the node to get the text value(i.e. Pragraph.Lines, Text.Value).
func (n *BaseNode) Text(source []byte) []byte {
var buf bytes.Buffer
for c := n.firstChild; c != nil; c = c.NextSibling() {
buf.Write(c.Text(source))
+ if sb, ok := c.(interface {
+ SoftLineBreak() bool
+ }); ok && sb.SoftLineBreak() {
+ buf.WriteByte('\n')
+ }
}
return buf.Bytes()
}
diff --git a/vendor/github.com/yuin/goldmark/ast/block.go b/vendor/github.com/yuin/goldmark/ast/block.go
index 04d0d5443..eae7acdca 100644
--- a/vendor/github.com/yuin/goldmark/ast/block.go
+++ b/vendor/github.com/yuin/goldmark/ast/block.go
@@ -1,7 +1,6 @@
package ast
import (
- "bytes"
"fmt"
"strings"
@@ -48,15 +47,6 @@ func (b *BaseBlock) SetLines(v *textm.Segments) {
b.lines = v
}
-// Text implements Node.Text.
-func (b *BaseBlock) Text(source []byte) []byte {
- var buf bytes.Buffer
- for _, line := range b.Lines().Sliced(0, b.Lines().Len()) {
- buf.Write(line.Value(source))
- }
- return buf.Bytes()
-}
-
// A Document struct is a root node of Markdown text.
type Document struct {
BaseBlock
@@ -140,6 +130,13 @@ func (n *TextBlock) Kind() NodeKind {
return KindTextBlock
}
+// Text implements Node.Text.
+//
+// Deprecated: Use other properties of the node to get the text value(i.e. TextBlock.Lines).
+func (n *TextBlock) Text(source []byte) []byte {
+ return n.Lines().Value(source)
+}
+
// NewTextBlock returns a new TextBlock node.
func NewTextBlock() *TextBlock {
return &TextBlock{
@@ -165,6 +162,13 @@ func (n *Paragraph) Kind() NodeKind {
return KindParagraph
}
+// Text implements Node.Text.
+//
+// Deprecated: Use other properties of the node to get the text value(i.e. Paragraph.Lines).
+func (n *Paragraph) Text(source []byte) []byte {
+ return n.Lines().Value(source)
+}
+
// NewParagraph returns a new Paragraph node.
func NewParagraph() *Paragraph {
return &Paragraph{
@@ -259,6 +263,13 @@ func (n *CodeBlock) Kind() NodeKind {
return KindCodeBlock
}
+// Text implements Node.Text.
+//
+// Deprecated: Use other properties of the node to get the text value(i.e. CodeBlock.Lines).
+func (n *CodeBlock) Text(source []byte) []byte {
+ return n.Lines().Value(source)
+}
+
// NewCodeBlock returns a new CodeBlock node.
func NewCodeBlock() *CodeBlock {
return &CodeBlock{
@@ -314,6 +325,13 @@ func (n *FencedCodeBlock) Kind() NodeKind {
return KindFencedCodeBlock
}
+// Text implements Node.Text.
+//
+// Deprecated: Use other properties of the node to get the text value(i.e. FencedCodeBlock.Lines).
+func (n *FencedCodeBlock) Text(source []byte) []byte {
+ return n.Lines().Value(source)
+}
+
// NewFencedCodeBlock return a new FencedCodeBlock node.
func NewFencedCodeBlock(info *Text) *FencedCodeBlock {
return &FencedCodeBlock{
@@ -508,6 +526,17 @@ func (n *HTMLBlock) Kind() NodeKind {
return KindHTMLBlock
}
+// Text implements Node.Text.
+//
+// Deprecated: Use other properties of the node to get the text value(i.e. HTMLBlock.Lines).
+func (n *HTMLBlock) Text(source []byte) []byte {
+ ret := n.Lines().Value(source)
+ if n.HasClosure() {
+ ret = append(ret, n.ClosureLine.Value(source)...)
+ }
+ return ret
+}
+
// NewHTMLBlock returns a new HTMLBlock node.
func NewHTMLBlock(typ HTMLBlockType) *HTMLBlock {
return &HTMLBlock{
diff --git a/vendor/github.com/yuin/goldmark/ast/inline.go b/vendor/github.com/yuin/goldmark/ast/inline.go
index 7e4c51f23..613eb1edc 100644
--- a/vendor/github.com/yuin/goldmark/ast/inline.go
+++ b/vendor/github.com/yuin/goldmark/ast/inline.go
@@ -143,17 +143,25 @@ func (n *Text) Merge(node Node, source []byte) bool {
}
// Text implements Node.Text.
+//
+// Deprecated: Use other properties of the node to get the text value(i.e. Text.Value).
func (n *Text) Text(source []byte) []byte {
return n.Segment.Value(source)
}
+// Value returns a value of this node.
+// SoftLineBreaks are not included in the returned value.
+func (n *Text) Value(source []byte) []byte {
+ return n.Segment.Value(source)
+}
+
// Dump implements Node.Dump.
func (n *Text) Dump(source []byte, level int) {
fs := textFlagsString(n.flags)
if len(fs) != 0 {
fs = "(" + fs + ")"
}
- fmt.Printf("%sText%s: \"%s\"\n", strings.Repeat(" ", level), fs, strings.TrimRight(string(n.Text(source)), "\n"))
+ fmt.Printf("%sText%s: \"%s\"\n", strings.Repeat(" ", level), fs, strings.TrimRight(string(n.Value(source)), "\n"))
}
// KindText is a NodeKind of the Text node.
@@ -258,6 +266,8 @@ func (n *String) SetCode(v bool) {
}
// Text implements Node.Text.
+//
+// Deprecated: Use other properties of the node to get the text value(i.e. String.Value).
func (n *String) Text(source []byte) []byte {
return n.Value
}
@@ -492,15 +502,22 @@ func (n *AutoLink) URL(source []byte) []byte {
ret := make([]byte, 0, len(n.Protocol)+s.Len()+3)
ret = append(ret, n.Protocol...)
ret = append(ret, ':', '/', '/')
- ret = append(ret, n.value.Text(source)...)
+ ret = append(ret, n.value.Value(source)...)
return ret
}
- return n.value.Text(source)
+ return n.value.Value(source)
}
// Label returns a label of this node.
func (n *AutoLink) Label(source []byte) []byte {
- return n.value.Text(source)
+ return n.value.Value(source)
+}
+
+// Text implements Node.Text.
+//
+// Deprecated: Use other properties of the node to get the text value(i.e. AutoLink.Label).
+func (n *AutoLink) Text(source []byte) []byte {
+ return n.value.Value(source)
}
// NewAutoLink returns a new AutoLink node.
@@ -541,6 +558,13 @@ func (n *RawHTML) Kind() NodeKind {
return KindRawHTML
}
+// Text implements Node.Text.
+//
+// Deprecated: Use other properties of the node to get the text value(i.e. RawHTML.Segments).
+func (n *RawHTML) Text(source []byte) []byte {
+ return n.Segments.Value(source)
+}
+
// NewRawHTML returns a new RawHTML node.
func NewRawHTML() *RawHTML {
return &RawHTML{
diff --git a/vendor/github.com/yuin/goldmark/parser/code_block.go b/vendor/github.com/yuin/goldmark/parser/code_block.go
index 732f18c65..d99146c52 100644
--- a/vendor/github.com/yuin/goldmark/parser/code_block.go
+++ b/vendor/github.com/yuin/goldmark/parser/code_block.go
@@ -35,6 +35,7 @@ func (b *codeBlockParser) Open(parent ast.Node, reader text.Reader, pc Context)
if segment.Padding != 0 {
preserveLeadingTabInCodeBlock(&segment, reader, 0)
}
+ segment.ForceNewline = true
node.Lines().Append(segment)
reader.Advance(segment.Len() - 1)
return node, NoChildren
@@ -59,6 +60,7 @@ func (b *codeBlockParser) Continue(node ast.Node, reader text.Reader, pc Context
preserveLeadingTabInCodeBlock(&segment, reader, 0)
}
+ segment.ForceNewline = true
node.Lines().Append(segment)
reader.Advance(segment.Len() - 1)
return Continue | NoChildren
diff --git a/vendor/github.com/yuin/goldmark/parser/fcode_block.go b/vendor/github.com/yuin/goldmark/parser/fcode_block.go
index e51a35ace..953b8dcba 100644
--- a/vendor/github.com/yuin/goldmark/parser/fcode_block.go
+++ b/vendor/github.com/yuin/goldmark/parser/fcode_block.go
@@ -100,6 +100,7 @@ func (b *fencedCodeBlockParser) Continue(node ast.Node, reader text.Reader, pc C
if padding != 0 {
preserveLeadingTabInCodeBlock(&seg, reader, fdata.indent)
}
+ seg.ForceNewline = true // EOF as newline
node.Lines().Append(seg)
reader.AdvanceAndSetPadding(segment.Stop-segment.Start-pos-1, padding)
return Continue | NoChildren
diff --git a/vendor/github.com/yuin/goldmark/parser/parser.go b/vendor/github.com/yuin/goldmark/parser/parser.go
index b59666c6d..b05db1356 100644
--- a/vendor/github.com/yuin/goldmark/parser/parser.go
+++ b/vendor/github.com/yuin/goldmark/parser/parser.go
@@ -878,12 +878,6 @@ func (p *parser) Parse(reader text.Reader, opts ...ParseOption) ast.Node {
blockReader := text.NewBlockReader(reader.Source(), nil)
p.walkBlock(root, func(node ast.Node) {
p.parseBlock(blockReader, node, pc)
- lines := node.Lines()
- if lines != nil && lines.Len() != 0 {
- s := lines.At(lines.Len() - 1)
- s.EOB = true
- lines.Set(lines.Len()-1, s)
- }
})
for _, at := range p.astTransformers {
at.Transform(root, reader, pc)
diff --git a/vendor/github.com/yuin/goldmark/renderer/html/html.go b/vendor/github.com/yuin/goldmark/renderer/html/html.go
index 9ebd0a371..aac8d2dd7 100644
--- a/vendor/github.com/yuin/goldmark/renderer/html/html.go
+++ b/vendor/github.com/yuin/goldmark/renderer/html/html.go
@@ -680,7 +680,7 @@ func (r *Renderer) renderImage(w util.BufWriter, source []byte, node ast.Node, e
_, _ = w.Write(util.EscapeHTML(util.URLEscape(n.Destination, true)))
}
_, _ = w.WriteString(`" alt="`)
- r.renderAttribute(w, source, n)
+ r.renderTexts(w, source, n)
_ = w.WriteByte('"')
if n.Title != nil {
_, _ = w.WriteString(` title="`)
@@ -737,7 +737,7 @@ func (r *Renderer) renderText(w util.BufWriter, source []byte, node ast.Node, en
if r.EastAsianLineBreaks != EastAsianLineBreaksNone && len(value) != 0 {
sibling := node.NextSibling()
if sibling != nil && sibling.Kind() == ast.KindText {
- if siblingText := sibling.(*ast.Text).Text(source); len(siblingText) != 0 {
+ if siblingText := sibling.(*ast.Text).Value(source); len(siblingText) != 0 {
thisLastRune := util.ToRune(value, len(value)-1)
siblingFirstRune, _ := utf8.DecodeRune(siblingText)
if r.EastAsianLineBreaks.softLineBreak(thisLastRune, siblingFirstRune) {
@@ -770,19 +770,14 @@ func (r *Renderer) renderString(w util.BufWriter, source []byte, node ast.Node,
return ast.WalkContinue, nil
}
-func (r *Renderer) renderAttribute(w util.BufWriter, source []byte, n ast.Node) {
+func (r *Renderer) renderTexts(w util.BufWriter, source []byte, n ast.Node) {
for c := n.FirstChild(); c != nil; c = c.NextSibling() {
if s, ok := c.(*ast.String); ok {
_, _ = r.renderString(w, source, s, true)
- } else if t, ok := c.(*ast.String); ok {
+ } else if t, ok := c.(*ast.Text); ok {
_, _ = r.renderText(w, source, t, true)
- } else if !c.HasChildren() {
- r.Writer.Write(w, c.Text(source))
- if t, ok := c.(*ast.Text); ok && t.SoftLineBreak() {
- _ = w.WriteByte('\n')
- }
} else {
- r.renderAttribute(w, source, c)
+ r.renderTexts(w, source, c)
}
}
}
diff --git a/vendor/github.com/yuin/goldmark/text/segment.go b/vendor/github.com/yuin/goldmark/text/segment.go
index 83c875bcb..93fbf1994 100644
--- a/vendor/github.com/yuin/goldmark/text/segment.go
+++ b/vendor/github.com/yuin/goldmark/text/segment.go
@@ -20,8 +20,19 @@ type Segment struct {
// Padding is a padding length of the segment.
Padding int
- // EOB is true if the segment is end of the block.
- EOB bool
+ // ForceNewline is true if the segment should be ended with a newline.
+ // Some elements(i.e. CodeBlock, FencedCodeBlock) does not trim trailing
+ // newlines. Spec defines that EOF is treated as a newline, so we need to
+ // add a newline to the end of the segment if it is not empty.
+ //
+ // i.e.:
+ //
+ // ```go
+ // const test = "test"
+ //
+ // This code does not close the code block and ends with EOF. In this case,
+ // we need to add a newline to the end of the last line like `const test = "test"\n`.
+ ForceNewline bool
}
// NewSegment return a new Segment.
@@ -52,7 +63,7 @@ func (t *Segment) Value(buffer []byte) []byte {
result = append(result, bytes.Repeat(space, t.Padding)...)
result = append(result, buffer[t.Start:t.Stop]...)
}
- if t.EOB && len(result) > 0 && result[len(result)-1] != '\n' {
+ if t.ForceNewline && len(result) > 0 && result[len(result)-1] != '\n' {
result = append(result, '\n')
}
return result
@@ -217,3 +228,12 @@ func (s *Segments) Unshift(v Segment) {
s.values = append(s.values[0:1], s.values[0:]...)
s.values[0] = v
}
+
+// Value returns a string value of the collection.
+func (s *Segments) Value(buffer []byte) []byte {
+ var result []byte
+ for _, v := range s.values {
+ result = append(result, v.Value(buffer)...)
+ }
+ return result
+}