diff options
| author | 2025-03-09 17:47:56 +0100 | |
|---|---|---|
| committer | 2025-12-01 22:08:04 +0100 | |
| commit | b1af8fd87760b34e3ff2fd3bda38f211815a0473 (patch) | |
| tree | 9317fad1a7ec298d7a8d2678e4e422953bbc6f33 /vendor/github.com/yuin/goldmark/ast | |
| parent | [chore] update URLs to forked source (diff) | |
| download | gotosocial-b1af8fd87760b34e3ff2fd3bda38f211815a0473.tar.xz | |
[chore] remove vendor
Diffstat (limited to 'vendor/github.com/yuin/goldmark/ast')
| -rw-r--r-- | vendor/github.com/yuin/goldmark/ast/ast.go | 521 | ||||
| -rw-r--r-- | vendor/github.com/yuin/goldmark/ast/block.go | 545 | ||||
| -rw-r--r-- | vendor/github.com/yuin/goldmark/ast/inline.go | 573 |
3 files changed, 0 insertions, 1639 deletions
diff --git a/vendor/github.com/yuin/goldmark/ast/ast.go b/vendor/github.com/yuin/goldmark/ast/ast.go deleted file mode 100644 index 36ba606f7..000000000 --- a/vendor/github.com/yuin/goldmark/ast/ast.go +++ /dev/null @@ -1,521 +0,0 @@ -// Package ast defines AST nodes that represent markdown elements. -package ast - -import ( - "bytes" - "fmt" - "strings" - - textm "github.com/yuin/goldmark/text" - "github.com/yuin/goldmark/util" -) - -// A NodeType indicates what type a node belongs to. -type NodeType int - -const ( - // TypeBlock indicates that a node is kind of block nodes. - TypeBlock NodeType = iota + 1 - // TypeInline indicates that a node is kind of inline nodes. - TypeInline - // TypeDocument indicates that a node is kind of document nodes. - TypeDocument -) - -// NodeKind indicates more specific type than NodeType. -type NodeKind int - -func (k NodeKind) String() string { - return kindNames[k] -} - -var kindMax NodeKind -var kindNames = []string{""} - -// NewNodeKind returns a new Kind value. -func NewNodeKind(name string) NodeKind { - kindMax++ - kindNames = append(kindNames, name) - return kindMax -} - -// An Attribute is an attribute of the Node. -type Attribute struct { - Name []byte - Value interface{} -} - -// A Node interface defines basic AST node functionalities. -type Node interface { - // Type returns a type of this node. - Type() NodeType - - // Kind returns a kind of this node. - Kind() NodeKind - - // NextSibling returns a next sibling node of this node. - NextSibling() Node - - // PreviousSibling returns a previous sibling node of this node. - PreviousSibling() Node - - // Parent returns a parent node of this node. - Parent() Node - - // SetParent sets a parent node to this node. - SetParent(Node) - - // SetPreviousSibling sets a previous sibling node to this node. - SetPreviousSibling(Node) - - // SetNextSibling sets a next sibling node to this node. - SetNextSibling(Node) - - // HasChildren returns true if this node has any children, otherwise false. - HasChildren() bool - - // ChildCount returns a total number of children. - ChildCount() int - - // FirstChild returns a first child of this node. - FirstChild() Node - - // LastChild returns a last child of this node. - LastChild() Node - - // AppendChild append a node child to the tail of the children. - AppendChild(self, child Node) - - // RemoveChild removes a node child from this node. - // If a node child is not children of this node, RemoveChild nothing to do. - RemoveChild(self, child Node) - - // RemoveChildren removes all children from this node. - RemoveChildren(self Node) - - // SortChildren sorts childrens by comparator. - SortChildren(comparator func(n1, n2 Node) int) - - // ReplaceChild replace a node v1 with a node insertee. - // If v1 is not children of this node, ReplaceChild append a insetee to the - // tail of the children. - ReplaceChild(self, v1, insertee Node) - - // InsertBefore inserts a node insertee before a node v1. - // If v1 is not children of this node, InsertBefore append a insetee to the - // tail of the children. - InsertBefore(self, v1, insertee Node) - - // InsertAfterinserts a node insertee after a node v1. - // If v1 is not children of this node, InsertBefore append a insetee to the - // tail of the children. - InsertAfter(self, v1, insertee Node) - - // OwnerDocument returns this node's owner document. - // If this node is not a child of the Document node, OwnerDocument - // returns nil. - OwnerDocument() *Document - - // Dump dumps an AST tree structure to stdout. - // This function completely aimed for debugging. - // level is a indent level. Implementer should indent informations with - // 2 * level spaces. - 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, - // otherwise false. - // This method is valid only for block nodes. - HasBlankPreviousLines() bool - - // SetBlankPreviousLines sets whether the row before this node is blank. - // This method is valid only for block nodes. - SetBlankPreviousLines(v bool) - - // Lines returns text segments that hold positions in a source. - // This method is valid only for block nodes. - Lines() *textm.Segments - - // SetLines sets text segments that hold positions in a source. - // This method is valid only for block nodes. - SetLines(*textm.Segments) - - // IsRaw returns true if contents should be rendered as 'raw' contents. - IsRaw() bool - - // SetAttribute sets the given value to the attributes. - SetAttribute(name []byte, value interface{}) - - // SetAttributeString sets the given value to the attributes. - SetAttributeString(name string, value interface{}) - - // Attribute returns a (attribute value, true) if an attribute - // associated with the given name is found, otherwise - // (nil, false) - Attribute(name []byte) (interface{}, bool) - - // AttributeString returns a (attribute value, true) if an attribute - // associated with the given name is found, otherwise - // (nil, false) - AttributeString(name string) (interface{}, bool) - - // Attributes returns a list of attributes. - // This may be a nil if there are no attributes. - Attributes() []Attribute - - // RemoveAttributes removes all attributes from this node. - RemoveAttributes() -} - -// A BaseNode struct implements the Node interface partialliy. -type BaseNode struct { - firstChild Node - lastChild Node - parent Node - next Node - prev Node - childCount int - attributes []Attribute -} - -func ensureIsolated(v Node) { - if p := v.Parent(); p != nil { - p.RemoveChild(p, v) - } -} - -// HasChildren implements Node.HasChildren . -func (n *BaseNode) HasChildren() bool { - return n.firstChild != nil -} - -// SetPreviousSibling implements Node.SetPreviousSibling . -func (n *BaseNode) SetPreviousSibling(v Node) { - n.prev = v -} - -// SetNextSibling implements Node.SetNextSibling . -func (n *BaseNode) SetNextSibling(v Node) { - n.next = v -} - -// PreviousSibling implements Node.PreviousSibling . -func (n *BaseNode) PreviousSibling() Node { - return n.prev -} - -// NextSibling implements Node.NextSibling . -func (n *BaseNode) NextSibling() Node { - return n.next -} - -// RemoveChild implements Node.RemoveChild . -func (n *BaseNode) RemoveChild(self, v Node) { - if v.Parent() != self { - return - } - n.childCount-- - prev := v.PreviousSibling() - next := v.NextSibling() - if prev != nil { - prev.SetNextSibling(next) - } else { - n.firstChild = next - } - if next != nil { - next.SetPreviousSibling(prev) - } else { - n.lastChild = prev - } - v.SetParent(nil) - v.SetPreviousSibling(nil) - v.SetNextSibling(nil) -} - -// RemoveChildren implements Node.RemoveChildren . -func (n *BaseNode) RemoveChildren(self Node) { - for c := n.firstChild; c != nil; { - c.SetParent(nil) - c.SetPreviousSibling(nil) - next := c.NextSibling() - c.SetNextSibling(nil) - c = next - } - n.firstChild = nil - n.lastChild = nil - n.childCount = 0 -} - -// SortChildren implements Node.SortChildren. -func (n *BaseNode) SortChildren(comparator func(n1, n2 Node) int) { - var sorted Node - current := n.firstChild - for current != nil { - next := current.NextSibling() - if sorted == nil || comparator(sorted, current) >= 0 { - current.SetNextSibling(sorted) - if sorted != nil { - sorted.SetPreviousSibling(current) - } - sorted = current - sorted.SetPreviousSibling(nil) - } else { - c := sorted - for c.NextSibling() != nil && comparator(c.NextSibling(), current) < 0 { - c = c.NextSibling() - } - current.SetNextSibling(c.NextSibling()) - current.SetPreviousSibling(c) - if c.NextSibling() != nil { - c.NextSibling().SetPreviousSibling(current) - } - c.SetNextSibling(current) - } - current = next - } - n.firstChild = sorted - for c := n.firstChild; c != nil; c = c.NextSibling() { - n.lastChild = c - } -} - -// FirstChild implements Node.FirstChild . -func (n *BaseNode) FirstChild() Node { - return n.firstChild -} - -// LastChild implements Node.LastChild . -func (n *BaseNode) LastChild() Node { - return n.lastChild -} - -// ChildCount implements Node.ChildCount . -func (n *BaseNode) ChildCount() int { - return n.childCount -} - -// Parent implements Node.Parent . -func (n *BaseNode) Parent() Node { - return n.parent -} - -// SetParent implements Node.SetParent . -func (n *BaseNode) SetParent(v Node) { - n.parent = v -} - -// AppendChild implements Node.AppendChild . -func (n *BaseNode) AppendChild(self, v Node) { - ensureIsolated(v) - if n.firstChild == nil { - n.firstChild = v - v.SetNextSibling(nil) - v.SetPreviousSibling(nil) - } else { - last := n.lastChild - last.SetNextSibling(v) - v.SetPreviousSibling(last) - } - v.SetParent(self) - n.lastChild = v - n.childCount++ -} - -// ReplaceChild implements Node.ReplaceChild . -func (n *BaseNode) ReplaceChild(self, v1, insertee Node) { - n.InsertBefore(self, v1, insertee) - n.RemoveChild(self, v1) -} - -// InsertAfter implements Node.InsertAfter . -func (n *BaseNode) InsertAfter(self, v1, insertee Node) { - n.InsertBefore(self, v1.NextSibling(), insertee) -} - -// InsertBefore implements Node.InsertBefore . -func (n *BaseNode) InsertBefore(self, v1, insertee Node) { - n.childCount++ - if v1 == nil { - n.AppendChild(self, insertee) - return - } - ensureIsolated(insertee) - if v1.Parent() == self { - c := v1 - prev := c.PreviousSibling() - if prev != nil { - prev.SetNextSibling(insertee) - insertee.SetPreviousSibling(prev) - } else { - n.firstChild = insertee - insertee.SetPreviousSibling(nil) - } - insertee.SetNextSibling(c) - c.SetPreviousSibling(insertee) - insertee.SetParent(self) - } -} - -// OwnerDocument implements Node.OwnerDocument. -func (n *BaseNode) OwnerDocument() *Document { - d := n.Parent() - for { - p := d.Parent() - if p == nil { - if v, ok := d.(*Document); ok { - return v - } - break - } - d = p - } - return nil -} - -// 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() -} - -// SetAttribute implements Node.SetAttribute. -func (n *BaseNode) SetAttribute(name []byte, value interface{}) { - if n.attributes == nil { - n.attributes = make([]Attribute, 0, 10) - } else { - for i, a := range n.attributes { - if bytes.Equal(a.Name, name) { - n.attributes[i].Name = name - n.attributes[i].Value = value - return - } - } - } - n.attributes = append(n.attributes, Attribute{name, value}) -} - -// SetAttributeString implements Node.SetAttributeString. -func (n *BaseNode) SetAttributeString(name string, value interface{}) { - n.SetAttribute(util.StringToReadOnlyBytes(name), value) -} - -// Attribute implements Node.Attribute. -func (n *BaseNode) Attribute(name []byte) (interface{}, bool) { - if n.attributes == nil { - return nil, false - } - for i, a := range n.attributes { - if bytes.Equal(a.Name, name) { - return n.attributes[i].Value, true - } - } - return nil, false -} - -// AttributeString implements Node.AttributeString. -func (n *BaseNode) AttributeString(s string) (interface{}, bool) { - return n.Attribute(util.StringToReadOnlyBytes(s)) -} - -// Attributes implements Node.Attributes. -func (n *BaseNode) Attributes() []Attribute { - return n.attributes -} - -// RemoveAttributes implements Node.RemoveAttributes. -func (n *BaseNode) RemoveAttributes() { - n.attributes = nil -} - -// DumpHelper is a helper function to implement Node.Dump. -// kv is pairs of an attribute name and an attribute value. -// cb is a function called after wrote a name and attributes. -func DumpHelper(v Node, source []byte, level int, kv map[string]string, cb func(int)) { - name := v.Kind().String() - indent := strings.Repeat(" ", level) - fmt.Printf("%s%s {\n", indent, name) - indent2 := strings.Repeat(" ", level+1) - if v.Type() == TypeBlock { - fmt.Printf("%sRawText: \"", indent2) - for i := 0; i < v.Lines().Len(); i++ { - line := v.Lines().At(i) - fmt.Printf("%s", line.Value(source)) - } - fmt.Printf("\"\n") - fmt.Printf("%sHasBlankPreviousLines: %v\n", indent2, v.HasBlankPreviousLines()) - } - for name, value := range kv { - fmt.Printf("%s%s: %s\n", indent2, name, value) - } - if cb != nil { - cb(level + 1) - } - for c := v.FirstChild(); c != nil; c = c.NextSibling() { - c.Dump(source, level+1) - } - fmt.Printf("%s}\n", indent) -} - -// WalkStatus represents a current status of the Walk function. -type WalkStatus int - -const ( - // WalkStop indicates no more walking needed. - WalkStop WalkStatus = iota + 1 - - // WalkSkipChildren indicates that Walk wont walk on children of current - // node. - WalkSkipChildren - - // WalkContinue indicates that Walk can continue to walk. - WalkContinue -) - -// Walker is a function that will be called when Walk find a -// new node. -// entering is set true before walks children, false after walked children. -// If Walker returns error, Walk function immediately stop walking. -type Walker func(n Node, entering bool) (WalkStatus, error) - -// Walk walks a AST tree by the depth first search algorithm. -func Walk(n Node, walker Walker) error { - _, err := walkHelper(n, walker) - return err -} - -func walkHelper(n Node, walker Walker) (WalkStatus, error) { - status, err := walker(n, true) - if err != nil || status == WalkStop { - return status, err - } - if status != WalkSkipChildren { - for c := n.FirstChild(); c != nil; c = c.NextSibling() { - if st, err := walkHelper(c, walker); err != nil || st == WalkStop { - return WalkStop, err - } - } - } - status, err = walker(n, false) - if err != nil || status == WalkStop { - return WalkStop, err - } - return WalkContinue, nil -} diff --git a/vendor/github.com/yuin/goldmark/ast/block.go b/vendor/github.com/yuin/goldmark/ast/block.go deleted file mode 100644 index efeea08ef..000000000 --- a/vendor/github.com/yuin/goldmark/ast/block.go +++ /dev/null @@ -1,545 +0,0 @@ -package ast - -import ( - "fmt" - "strings" - - textm "github.com/yuin/goldmark/text" -) - -// A BaseBlock struct implements the Node interface partialliy. -type BaseBlock struct { - BaseNode - lines textm.Segments - blankPreviousLines bool -} - -// Type implements Node.Type. -func (b *BaseBlock) Type() NodeType { - return TypeBlock -} - -// IsRaw implements Node.IsRaw. -func (b *BaseBlock) IsRaw() bool { - return false -} - -// HasBlankPreviousLines implements Node.HasBlankPreviousLines. -func (b *BaseBlock) HasBlankPreviousLines() bool { - return b.blankPreviousLines -} - -// SetBlankPreviousLines implements Node.SetBlankPreviousLines. -func (b *BaseBlock) SetBlankPreviousLines(v bool) { - b.blankPreviousLines = v -} - -// Lines implements Node.Lines. -func (b *BaseBlock) Lines() *textm.Segments { - return &b.lines -} - -// SetLines implements Node.SetLines. -func (b *BaseBlock) SetLines(v *textm.Segments) { - b.lines = *v -} - -// A Document struct is a root node of Markdown text. -type Document struct { - BaseBlock - - meta map[string]interface{} -} - -// KindDocument is a NodeKind of the Document node. -var KindDocument = NewNodeKind("Document") - -// Dump implements Node.Dump . -func (n *Document) Dump(source []byte, level int) { - DumpHelper(n, source, level, nil, nil) -} - -// Type implements Node.Type . -func (n *Document) Type() NodeType { - return TypeDocument -} - -// Kind implements Node.Kind. -func (n *Document) Kind() NodeKind { - return KindDocument -} - -// OwnerDocument implements Node.OwnerDocument. -func (n *Document) OwnerDocument() *Document { - return n -} - -// Meta returns metadata of this document. -func (n *Document) Meta() map[string]interface{} { - if n.meta == nil { - n.meta = map[string]interface{}{} - } - return n.meta -} - -// SetMeta sets given metadata to this document. -func (n *Document) SetMeta(meta map[string]interface{}) { - if n.meta == nil { - n.meta = map[string]interface{}{} - } - for k, v := range meta { - n.meta[k] = v - } -} - -// AddMeta adds given metadata to this document. -func (n *Document) AddMeta(key string, value interface{}) { - if n.meta == nil { - n.meta = map[string]interface{}{} - } - n.meta[key] = value -} - -// NewDocument returns a new Document node. -func NewDocument() *Document { - return &Document{ - BaseBlock: BaseBlock{}, - meta: nil, - } -} - -// A TextBlock struct is a node whose lines -// should be rendered without any containers. -type TextBlock struct { - BaseBlock -} - -// Dump implements Node.Dump . -func (n *TextBlock) Dump(source []byte, level int) { - DumpHelper(n, source, level, nil, nil) -} - -// KindTextBlock is a NodeKind of the TextBlock node. -var KindTextBlock = NewNodeKind("TextBlock") - -// Kind implements Node.Kind. -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{ - BaseBlock: BaseBlock{}, - } -} - -// A Paragraph struct represents a paragraph of Markdown text. -type Paragraph struct { - BaseBlock -} - -// Dump implements Node.Dump . -func (n *Paragraph) Dump(source []byte, level int) { - DumpHelper(n, source, level, nil, nil) -} - -// KindParagraph is a NodeKind of the Paragraph node. -var KindParagraph = NewNodeKind("Paragraph") - -// Kind implements Node.Kind. -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{ - BaseBlock: BaseBlock{}, - } -} - -// IsParagraph returns true if the given node implements the Paragraph interface, -// otherwise false. -func IsParagraph(node Node) bool { - _, ok := node.(*Paragraph) - return ok -} - -// A Heading struct represents headings like SetextHeading and ATXHeading. -type Heading struct { - BaseBlock - // Level returns a level of this heading. - // This value is between 1 and 6. - Level int -} - -// Dump implements Node.Dump . -func (n *Heading) Dump(source []byte, level int) { - m := map[string]string{ - "Level": fmt.Sprintf("%d", n.Level), - } - DumpHelper(n, source, level, m, nil) -} - -// KindHeading is a NodeKind of the Heading node. -var KindHeading = NewNodeKind("Heading") - -// Kind implements Node.Kind. -func (n *Heading) Kind() NodeKind { - return KindHeading -} - -// NewHeading returns a new Heading node. -func NewHeading(level int) *Heading { - return &Heading{ - BaseBlock: BaseBlock{}, - Level: level, - } -} - -// A ThematicBreak struct represents a thematic break of Markdown text. -type ThematicBreak struct { - BaseBlock -} - -// Dump implements Node.Dump . -func (n *ThematicBreak) Dump(source []byte, level int) { - DumpHelper(n, source, level, nil, nil) -} - -// KindThematicBreak is a NodeKind of the ThematicBreak node. -var KindThematicBreak = NewNodeKind("ThematicBreak") - -// Kind implements Node.Kind. -func (n *ThematicBreak) Kind() NodeKind { - return KindThematicBreak -} - -// NewThematicBreak returns a new ThematicBreak node. -func NewThematicBreak() *ThematicBreak { - return &ThematicBreak{ - BaseBlock: BaseBlock{}, - } -} - -// A CodeBlock interface represents an indented code block of Markdown text. -type CodeBlock struct { - BaseBlock -} - -// IsRaw implements Node.IsRaw. -func (n *CodeBlock) IsRaw() bool { - return true -} - -// Dump implements Node.Dump . -func (n *CodeBlock) Dump(source []byte, level int) { - DumpHelper(n, source, level, nil, nil) -} - -// KindCodeBlock is a NodeKind of the CodeBlock node. -var KindCodeBlock = NewNodeKind("CodeBlock") - -// Kind implements Node.Kind. -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{ - BaseBlock: BaseBlock{}, - } -} - -// A FencedCodeBlock struct represents a fenced code block of Markdown text. -type FencedCodeBlock struct { - BaseBlock - // Info returns a info text of this fenced code block. - Info *Text - - language []byte -} - -// Language returns an language in an info string. -// Language returns nil if this node does not have an info string. -func (n *FencedCodeBlock) Language(source []byte) []byte { - if n.language == nil && n.Info != nil { - segment := n.Info.Segment - info := segment.Value(source) - i := 0 - for ; i < len(info); i++ { - if info[i] == ' ' { - break - } - } - n.language = info[:i] - } - return n.language -} - -// IsRaw implements Node.IsRaw. -func (n *FencedCodeBlock) IsRaw() bool { - return true -} - -// Dump implements Node.Dump . -func (n *FencedCodeBlock) Dump(source []byte, level int) { - m := map[string]string{} - if n.Info != nil { - m["Info"] = fmt.Sprintf("\"%s\"", n.Info.Text(source)) - } - DumpHelper(n, source, level, m, nil) -} - -// KindFencedCodeBlock is a NodeKind of the FencedCodeBlock node. -var KindFencedCodeBlock = NewNodeKind("FencedCodeBlock") - -// Kind implements Node.Kind. -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{ - BaseBlock: BaseBlock{}, - Info: info, - } -} - -// A Blockquote struct represents an blockquote block of Markdown text. -type Blockquote struct { - BaseBlock -} - -// Dump implements Node.Dump . -func (n *Blockquote) Dump(source []byte, level int) { - DumpHelper(n, source, level, nil, nil) -} - -// KindBlockquote is a NodeKind of the Blockquote node. -var KindBlockquote = NewNodeKind("Blockquote") - -// Kind implements Node.Kind. -func (n *Blockquote) Kind() NodeKind { - return KindBlockquote -} - -// NewBlockquote returns a new Blockquote node. -func NewBlockquote() *Blockquote { - return &Blockquote{ - BaseBlock: BaseBlock{}, - } -} - -// A List struct represents a list of Markdown text. -type List struct { - BaseBlock - - // Marker is a marker character like '-', '+', ')' and '.'. - Marker byte - - // IsTight is a true if this list is a 'tight' list. - // See https://spec.commonmark.org/0.30/#loose for details. - IsTight bool - - // Start is an initial number of this ordered list. - // If this list is not an ordered list, Start is 0. - Start int -} - -// IsOrdered returns true if this list is an ordered list, otherwise false. -func (l *List) IsOrdered() bool { - return l.Marker == '.' || l.Marker == ')' -} - -// CanContinue returns true if this list can continue with -// the given mark and a list type, otherwise false. -func (l *List) CanContinue(marker byte, isOrdered bool) bool { - return marker == l.Marker && isOrdered == l.IsOrdered() -} - -// Dump implements Node.Dump. -func (l *List) Dump(source []byte, level int) { - m := map[string]string{ - "Ordered": fmt.Sprintf("%v", l.IsOrdered()), - "Marker": fmt.Sprintf("%c", l.Marker), - "Tight": fmt.Sprintf("%v", l.IsTight), - } - if l.IsOrdered() { - m["Start"] = fmt.Sprintf("%d", l.Start) - } - DumpHelper(l, source, level, m, nil) -} - -// KindList is a NodeKind of the List node. -var KindList = NewNodeKind("List") - -// Kind implements Node.Kind. -func (l *List) Kind() NodeKind { - return KindList -} - -// NewList returns a new List node. -func NewList(marker byte) *List { - return &List{ - BaseBlock: BaseBlock{}, - Marker: marker, - IsTight: true, - } -} - -// A ListItem struct represents a list item of Markdown text. -type ListItem struct { - BaseBlock - - // Offset is an offset position of this item. - Offset int -} - -// Dump implements Node.Dump. -func (n *ListItem) Dump(source []byte, level int) { - m := map[string]string{ - "Offset": fmt.Sprintf("%d", n.Offset), - } - DumpHelper(n, source, level, m, nil) -} - -// KindListItem is a NodeKind of the ListItem node. -var KindListItem = NewNodeKind("ListItem") - -// Kind implements Node.Kind. -func (n *ListItem) Kind() NodeKind { - return KindListItem -} - -// NewListItem returns a new ListItem node. -func NewListItem(offset int) *ListItem { - return &ListItem{ - BaseBlock: BaseBlock{}, - Offset: offset, - } -} - -// HTMLBlockType represents kinds of an html blocks. -// See https://spec.commonmark.org/0.30/#html-blocks -type HTMLBlockType int - -const ( - // HTMLBlockType1 represents type 1 html blocks. - HTMLBlockType1 HTMLBlockType = iota + 1 - // HTMLBlockType2 represents type 2 html blocks. - HTMLBlockType2 - // HTMLBlockType3 represents type 3 html blocks. - HTMLBlockType3 - // HTMLBlockType4 represents type 4 html blocks. - HTMLBlockType4 - // HTMLBlockType5 represents type 5 html blocks. - HTMLBlockType5 - // HTMLBlockType6 represents type 6 html blocks. - HTMLBlockType6 - // HTMLBlockType7 represents type 7 html blocks. - HTMLBlockType7 -) - -// An HTMLBlock struct represents an html block of Markdown text. -type HTMLBlock struct { - BaseBlock - - // Type is a type of this html block. - HTMLBlockType HTMLBlockType - - // ClosureLine is a line that closes this html block. - ClosureLine textm.Segment -} - -// IsRaw implements Node.IsRaw. -func (n *HTMLBlock) IsRaw() bool { - return true -} - -// HasClosure returns true if this html block has a closure line, -// otherwise false. -func (n *HTMLBlock) HasClosure() bool { - return n.ClosureLine.Start >= 0 -} - -// Dump implements Node.Dump. -func (n *HTMLBlock) Dump(source []byte, level int) { - indent := strings.Repeat(" ", level) - fmt.Printf("%s%s {\n", indent, "HTMLBlock") - indent2 := strings.Repeat(" ", level+1) - fmt.Printf("%sRawText: \"", indent2) - for i := 0; i < n.Lines().Len(); i++ { - s := n.Lines().At(i) - fmt.Print(string(source[s.Start:s.Stop])) - } - fmt.Printf("\"\n") - for c := n.FirstChild(); c != nil; c = c.NextSibling() { - c.Dump(source, level+1) - } - if n.HasClosure() { - cl := n.ClosureLine - fmt.Printf("%sClosure: \"%s\"\n", indent2, string(cl.Value(source))) - } - fmt.Printf("%sHasBlankPreviousLines: %v\n", indent2, n.HasBlankPreviousLines()) - fmt.Printf("%s}\n", indent) -} - -// KindHTMLBlock is a NodeKind of the HTMLBlock node. -var KindHTMLBlock = NewNodeKind("HTMLBlock") - -// Kind implements Node.Kind. -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{ - BaseBlock: BaseBlock{}, - HTMLBlockType: typ, - ClosureLine: textm.NewSegment(-1, -1), - } -} 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(), - } -} |
