diff options
Diffstat (limited to 'vendor/github.com/yuin/goldmark/ast/inline.go')
-rw-r--r-- | vendor/github.com/yuin/goldmark/ast/inline.go | 573 |
1 files changed, 0 insertions, 573 deletions
diff --git a/vendor/github.com/yuin/goldmark/ast/inline.go b/vendor/github.com/yuin/goldmark/ast/inline.go deleted file mode 100644 index 613eb1edc..000000000 --- a/vendor/github.com/yuin/goldmark/ast/inline.go +++ /dev/null @@ -1,573 +0,0 @@ -package ast - -import ( - "fmt" - "strings" - - textm "github.com/yuin/goldmark/text" - "github.com/yuin/goldmark/util" -) - -// A BaseInline struct implements the Node interface partialliy. -type BaseInline struct { - BaseNode -} - -// Type implements Node.Type. -func (b *BaseInline) Type() NodeType { - return TypeInline -} - -// IsRaw implements Node.IsRaw. -func (b *BaseInline) IsRaw() bool { - return false -} - -// HasBlankPreviousLines implements Node.HasBlankPreviousLines. -func (b *BaseInline) HasBlankPreviousLines() bool { - panic("can not call with inline nodes.") -} - -// SetBlankPreviousLines implements Node.SetBlankPreviousLines. -func (b *BaseInline) SetBlankPreviousLines(v bool) { - panic("can not call with inline nodes.") -} - -// Lines implements Node.Lines. -func (b *BaseInline) Lines() *textm.Segments { - panic("can not call with inline nodes.") -} - -// SetLines implements Node.SetLines. -func (b *BaseInline) SetLines(v *textm.Segments) { - panic("can not call with inline nodes.") -} - -// A Text struct represents a textual content of the Markdown text. -type Text struct { - BaseInline - // Segment is a position in a source text. - Segment textm.Segment - - flags uint8 -} - -const ( - textSoftLineBreak = 1 << iota - textHardLineBreak - textRaw - textCode -) - -func textFlagsString(flags uint8) string { - buf := []string{} - if flags&textSoftLineBreak != 0 { - buf = append(buf, "SoftLineBreak") - } - if flags&textHardLineBreak != 0 { - buf = append(buf, "HardLineBreak") - } - if flags&textRaw != 0 { - buf = append(buf, "Raw") - } - if flags&textCode != 0 { - buf = append(buf, "Code") - } - return strings.Join(buf, ", ") -} - -// Inline implements Inline.Inline. -func (n *Text) Inline() { -} - -// SoftLineBreak returns true if this node ends with a new line, -// otherwise false. -func (n *Text) SoftLineBreak() bool { - return n.flags&textSoftLineBreak != 0 -} - -// SetSoftLineBreak sets whether this node ends with a new line. -func (n *Text) SetSoftLineBreak(v bool) { - if v { - n.flags |= textSoftLineBreak - } else { - n.flags = n.flags &^ textSoftLineBreak - } -} - -// IsRaw returns true if this text should be rendered without unescaping -// back slash escapes and resolving references. -func (n *Text) IsRaw() bool { - return n.flags&textRaw != 0 -} - -// SetRaw sets whether this text should be rendered as raw contents. -func (n *Text) SetRaw(v bool) { - if v { - n.flags |= textRaw - } else { - n.flags = n.flags &^ textRaw - } -} - -// HardLineBreak returns true if this node ends with a hard line break. -// See https://spec.commonmark.org/0.30/#hard-line-breaks for details. -func (n *Text) HardLineBreak() bool { - return n.flags&textHardLineBreak != 0 -} - -// SetHardLineBreak sets whether this node ends with a hard line break. -func (n *Text) SetHardLineBreak(v bool) { - if v { - n.flags |= textHardLineBreak - } else { - n.flags = n.flags &^ textHardLineBreak - } -} - -// Merge merges a Node n into this node. -// Merge returns true if the given node has been merged, otherwise false. -func (n *Text) Merge(node Node, source []byte) bool { - t, ok := node.(*Text) - if !ok { - return false - } - if n.Segment.Stop != t.Segment.Start || t.Segment.Padding != 0 || - source[n.Segment.Stop-1] == '\n' || t.IsRaw() != n.IsRaw() { - return false - } - n.Segment.Stop = t.Segment.Stop - n.SetSoftLineBreak(t.SoftLineBreak()) - n.SetHardLineBreak(t.HardLineBreak()) - return true -} - -// 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.Value(source)), "\n")) -} - -// KindText is a NodeKind of the Text node. -var KindText = NewNodeKind("Text") - -// Kind implements Node.Kind. -func (n *Text) Kind() NodeKind { - return KindText -} - -// NewText returns a new Text node. -func NewText() *Text { - return &Text{ - BaseInline: BaseInline{}, - } -} - -// NewTextSegment returns a new Text node with the given source position. -func NewTextSegment(v textm.Segment) *Text { - return &Text{ - BaseInline: BaseInline{}, - Segment: v, - } -} - -// NewRawTextSegment returns a new Text node with the given source position. -// The new node should be rendered as raw contents. -func NewRawTextSegment(v textm.Segment) *Text { - t := &Text{ - BaseInline: BaseInline{}, - Segment: v, - } - t.SetRaw(true) - return t -} - -// MergeOrAppendTextSegment merges a given s into the last child of the parent if -// it can be merged, otherwise creates a new Text node and appends it to after current -// last child. -func MergeOrAppendTextSegment(parent Node, s textm.Segment) { - last := parent.LastChild() - t, ok := last.(*Text) - if ok && t.Segment.Stop == s.Start && !t.SoftLineBreak() { - t.Segment = t.Segment.WithStop(s.Stop) - } else { - parent.AppendChild(parent, NewTextSegment(s)) - } -} - -// MergeOrReplaceTextSegment merges a given s into a previous sibling of the node n -// if a previous sibling of the node n is *Text, otherwise replaces Node n with s. -func MergeOrReplaceTextSegment(parent Node, n Node, s textm.Segment) { - prev := n.PreviousSibling() - if t, ok := prev.(*Text); ok && t.Segment.Stop == s.Start && !t.SoftLineBreak() { - t.Segment = t.Segment.WithStop(s.Stop) - parent.RemoveChild(parent, n) - } else { - parent.ReplaceChild(parent, n, NewTextSegment(s)) - } -} - -// A String struct is a textual content that has a concrete value. -type String struct { - BaseInline - - Value []byte - flags uint8 -} - -// Inline implements Inline.Inline. -func (n *String) Inline() { -} - -// IsRaw returns true if this text should be rendered without unescaping -// back slash escapes and resolving references. -func (n *String) IsRaw() bool { - return n.flags&textRaw != 0 -} - -// SetRaw sets whether this text should be rendered as raw contents. -func (n *String) SetRaw(v bool) { - if v { - n.flags |= textRaw - } else { - n.flags = n.flags &^ textRaw - } -} - -// IsCode returns true if this text should be rendered without any -// modifications. -func (n *String) IsCode() bool { - return n.flags&textCode != 0 -} - -// SetCode sets whether this text should be rendered without any modifications. -func (n *String) SetCode(v bool) { - if v { - n.flags |= textCode - } else { - n.flags = n.flags &^ textCode - } -} - -// 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 -} - -// Dump implements Node.Dump. -func (n *String) Dump(source []byte, level int) { - fs := textFlagsString(n.flags) - if len(fs) != 0 { - fs = "(" + fs + ")" - } - fmt.Printf("%sString%s: \"%s\"\n", strings.Repeat(" ", level), fs, strings.TrimRight(string(n.Value), "\n")) -} - -// KindString is a NodeKind of the String node. -var KindString = NewNodeKind("String") - -// Kind implements Node.Kind. -func (n *String) Kind() NodeKind { - return KindString -} - -// NewString returns a new String node. -func NewString(v []byte) *String { - return &String{ - Value: v, - } -} - -// A CodeSpan struct represents a code span of Markdown text. -type CodeSpan struct { - BaseInline -} - -// Inline implements Inline.Inline . -func (n *CodeSpan) Inline() { -} - -// IsBlank returns true if this node consists of spaces, otherwise false. -func (n *CodeSpan) IsBlank(source []byte) bool { - for c := n.FirstChild(); c != nil; c = c.NextSibling() { - text := c.(*Text).Segment - if !util.IsBlank(text.Value(source)) { - return false - } - } - return true -} - -// Dump implements Node.Dump. -func (n *CodeSpan) Dump(source []byte, level int) { - DumpHelper(n, source, level, nil, nil) -} - -// KindCodeSpan is a NodeKind of the CodeSpan node. -var KindCodeSpan = NewNodeKind("CodeSpan") - -// Kind implements Node.Kind. -func (n *CodeSpan) Kind() NodeKind { - return KindCodeSpan -} - -// NewCodeSpan returns a new CodeSpan node. -func NewCodeSpan() *CodeSpan { - return &CodeSpan{ - BaseInline: BaseInline{}, - } -} - -// An Emphasis struct represents an emphasis of Markdown text. -type Emphasis struct { - BaseInline - - // Level is a level of the emphasis. - Level int -} - -// Dump implements Node.Dump. -func (n *Emphasis) Dump(source []byte, level int) { - m := map[string]string{ - "Level": fmt.Sprintf("%v", n.Level), - } - DumpHelper(n, source, level, m, nil) -} - -// KindEmphasis is a NodeKind of the Emphasis node. -var KindEmphasis = NewNodeKind("Emphasis") - -// Kind implements Node.Kind. -func (n *Emphasis) Kind() NodeKind { - return KindEmphasis -} - -// NewEmphasis returns a new Emphasis node with the given level. -func NewEmphasis(level int) *Emphasis { - return &Emphasis{ - BaseInline: BaseInline{}, - Level: level, - } -} - -type baseLink struct { - BaseInline - - // Destination is a destination(URL) of this link. - Destination []byte - - // Title is a title of this link. - Title []byte -} - -// Inline implements Inline.Inline. -func (n *baseLink) Inline() { -} - -// A Link struct represents a link of the Markdown text. -type Link struct { - baseLink -} - -// Dump implements Node.Dump. -func (n *Link) Dump(source []byte, level int) { - m := map[string]string{} - m["Destination"] = string(n.Destination) - m["Title"] = string(n.Title) - DumpHelper(n, source, level, m, nil) -} - -// KindLink is a NodeKind of the Link node. -var KindLink = NewNodeKind("Link") - -// Kind implements Node.Kind. -func (n *Link) Kind() NodeKind { - return KindLink -} - -// NewLink returns a new Link node. -func NewLink() *Link { - c := &Link{ - baseLink: baseLink{ - BaseInline: BaseInline{}, - }, - } - return c -} - -// An Image struct represents an image of the Markdown text. -type Image struct { - baseLink -} - -// Dump implements Node.Dump. -func (n *Image) Dump(source []byte, level int) { - m := map[string]string{} - m["Destination"] = string(n.Destination) - m["Title"] = string(n.Title) - DumpHelper(n, source, level, m, nil) -} - -// KindImage is a NodeKind of the Image node. -var KindImage = NewNodeKind("Image") - -// Kind implements Node.Kind. -func (n *Image) Kind() NodeKind { - return KindImage -} - -// NewImage returns a new Image node. -func NewImage(link *Link) *Image { - c := &Image{ - baseLink: baseLink{ - BaseInline: BaseInline{}, - }, - } - c.Destination = link.Destination - c.Title = link.Title - for n := link.FirstChild(); n != nil; { - next := n.NextSibling() - link.RemoveChild(link, n) - c.AppendChild(c, n) - n = next - } - - return c -} - -// AutoLinkType defines kind of auto links. -type AutoLinkType int - -const ( - // AutoLinkEmail indicates that an autolink is an email address. - AutoLinkEmail AutoLinkType = iota + 1 - // AutoLinkURL indicates that an autolink is a generic URL. - AutoLinkURL -) - -// An AutoLink struct represents an autolink of the Markdown text. -type AutoLink struct { - BaseInline - // Type is a type of this autolink. - AutoLinkType AutoLinkType - - // Protocol specified a protocol of the link. - Protocol []byte - - value *Text -} - -// Inline implements Inline.Inline. -func (n *AutoLink) Inline() {} - -// Dump implements Node.Dump. -func (n *AutoLink) Dump(source []byte, level int) { - segment := n.value.Segment - m := map[string]string{ - "Value": string(segment.Value(source)), - } - DumpHelper(n, source, level, m, nil) -} - -// KindAutoLink is a NodeKind of the AutoLink node. -var KindAutoLink = NewNodeKind("AutoLink") - -// Kind implements Node.Kind. -func (n *AutoLink) Kind() NodeKind { - return KindAutoLink -} - -// URL returns an url of this node. -func (n *AutoLink) URL(source []byte) []byte { - if n.Protocol != nil { - s := n.value.Segment - ret := make([]byte, 0, len(n.Protocol)+s.Len()+3) - ret = append(ret, n.Protocol...) - ret = append(ret, ':', '/', '/') - ret = append(ret, n.value.Value(source)...) - return ret - } - return n.value.Value(source) -} - -// Label returns a label of this node. -func (n *AutoLink) Label(source []byte) []byte { - 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. -func NewAutoLink(typ AutoLinkType, value *Text) *AutoLink { - return &AutoLink{ - BaseInline: BaseInline{}, - value: value, - AutoLinkType: typ, - } -} - -// A RawHTML struct represents an inline raw HTML of the Markdown text. -type RawHTML struct { - BaseInline - Segments *textm.Segments -} - -// Inline implements Inline.Inline. -func (n *RawHTML) Inline() {} - -// Dump implements Node.Dump. -func (n *RawHTML) Dump(source []byte, level int) { - m := map[string]string{} - t := []string{} - for i := 0; i < n.Segments.Len(); i++ { - segment := n.Segments.At(i) - t = append(t, string(segment.Value(source))) - } - m["RawText"] = strings.Join(t, "") - DumpHelper(n, source, level, m, nil) -} - -// KindRawHTML is a NodeKind of the RawHTML node. -var KindRawHTML = NewNodeKind("RawHTML") - -// Kind implements Node.Kind. -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{ - Segments: textm.NewSegments(), - } -} |