1
0
Fork 0
mirror of https://github.com/diamondburned/cchat-discord.git synced 2024-12-23 12:56:42 +00:00
cchat-discord/segments/blockquote.go

50 lines
1.1 KiB
Go
Raw Normal View History

2020-06-19 01:00:24 +00:00
package segments
import (
"github.com/diamondburned/cchat/text"
"github.com/yuin/goldmark/ast"
)
type BlockquoteSegment struct {
start, end int
}
var _ text.Quoteblocker = (*BlockquoteSegment)(nil)
func (r *TextRenderer) blockquote(n *ast.Blockquote, enter bool) ast.WalkStatus {
if enter {
2020-07-08 21:23:14 +00:00
// Block formatting.
r.ensureBreak()
defer r.ensureBreak()
2020-06-19 01:00:24 +00:00
// Create a segment.
var seg = BlockquoteSegment{start: r.buf.Len()}
2020-06-19 01:00:24 +00:00
// A blockquote contains a paragraph each line. Because Discord.
for child := n.FirstChild(); child != nil; child = child.NextSibling() {
r.buf.WriteString("> ")
ast.Walk(child, func(node ast.Node, enter bool) (ast.WalkStatus, error) {
// We only call when entering, since we don't want to trigger a
// hard new line after each paragraph.
if enter {
return r.renderNode(node, enter)
}
return ast.WalkContinue, nil
})
}
// Write the end of the segment.
seg.end = r.buf.Len()
2020-06-19 01:00:24 +00:00
r.append(seg)
}
return ast.WalkSkipChildren
}
func (b BlockquoteSegment) Bounds() (start, end int) {
return b.start, b.end
}
func (b BlockquoteSegment) Quote() {}