diff options
Diffstat (limited to 'vendor/github.com')
-rw-r--r-- | vendor/github.com/yuin/goldmark/ast/ast.go | 15 | ||||
-rw-r--r-- | vendor/github.com/yuin/goldmark/ast/block.go | 49 | ||||
-rw-r--r-- | vendor/github.com/yuin/goldmark/ast/inline.go | 32 | ||||
-rw-r--r-- | vendor/github.com/yuin/goldmark/parser/code_block.go | 2 | ||||
-rw-r--r-- | vendor/github.com/yuin/goldmark/parser/fcode_block.go | 1 | ||||
-rw-r--r-- | vendor/github.com/yuin/goldmark/parser/parser.go | 6 | ||||
-rw-r--r-- | vendor/github.com/yuin/goldmark/renderer/html/html.go | 15 | ||||
-rw-r--r-- | vendor/github.com/yuin/goldmark/text/segment.go | 26 |
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 +} |