summaryrefslogtreecommitdiff
path: root/vendor/github.com/yuin/goldmark/text
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/yuin/goldmark/text')
-rw-r--r--vendor/github.com/yuin/goldmark/text/package.go2
-rw-r--r--vendor/github.com/yuin/goldmark/text/reader.go660
-rw-r--r--vendor/github.com/yuin/goldmark/text/segment.go239
3 files changed, 0 insertions, 901 deletions
diff --git a/vendor/github.com/yuin/goldmark/text/package.go b/vendor/github.com/yuin/goldmark/text/package.go
deleted file mode 100644
index d241ac693..000000000
--- a/vendor/github.com/yuin/goldmark/text/package.go
+++ /dev/null
@@ -1,2 +0,0 @@
-// Package text provides functionalities to manipulate texts.
-package text
diff --git a/vendor/github.com/yuin/goldmark/text/reader.go b/vendor/github.com/yuin/goldmark/text/reader.go
deleted file mode 100644
index b3f97fb56..000000000
--- a/vendor/github.com/yuin/goldmark/text/reader.go
+++ /dev/null
@@ -1,660 +0,0 @@
-package text
-
-import (
- "bytes"
- "io"
- "regexp"
- "unicode/utf8"
-
- "github.com/yuin/goldmark/util"
-)
-
-const invalidValue = -1
-
-// EOF indicates the end of file.
-const EOF = byte(0xff)
-
-// A Reader interface provides abstracted method for reading text.
-type Reader interface {
- io.RuneReader
-
- // Source returns a source of the reader.
- Source() []byte
-
- // ResetPosition resets positions.
- ResetPosition()
-
- // Peek returns a byte at current position without advancing the internal pointer.
- Peek() byte
-
- // PeekLine returns the current line without advancing the internal pointer.
- PeekLine() ([]byte, Segment)
-
- // PrecendingCharacter returns a character just before current internal pointer.
- PrecendingCharacter() rune
-
- // Value returns a value of the given segment.
- Value(Segment) []byte
-
- // LineOffset returns a distance from the line head to current position.
- LineOffset() int
-
- // Position returns current line number and position.
- Position() (int, Segment)
-
- // SetPosition sets current line number and position.
- SetPosition(int, Segment)
-
- // SetPadding sets padding to the reader.
- SetPadding(int)
-
- // Advance advances the internal pointer.
- Advance(int)
-
- // AdvanceAndSetPadding advances the internal pointer and add padding to the
- // reader.
- AdvanceAndSetPadding(int, int)
-
- // AdvanceLine advances the internal pointer to the next line head.
- AdvanceLine()
-
- // SkipSpaces skips space characters and returns a non-blank line.
- // If it reaches EOF, returns false.
- SkipSpaces() (Segment, int, bool)
-
- // SkipSpaces skips blank lines and returns a non-blank line.
- // If it reaches EOF, returns false.
- SkipBlankLines() (Segment, int, bool)
-
- // Match performs regular expression matching to current line.
- Match(reg *regexp.Regexp) bool
-
- // Match performs regular expression searching to current line.
- FindSubMatch(reg *regexp.Regexp) [][]byte
-
- // FindClosure finds corresponding closure.
- FindClosure(opener, closer byte, options FindClosureOptions) (*Segments, bool)
-}
-
-// FindClosureOptions is options for Reader.FindClosure.
-type FindClosureOptions struct {
- // CodeSpan is a flag for the FindClosure. If this is set to true,
- // FindClosure ignores closers in codespans.
- CodeSpan bool
-
- // Nesting is a flag for the FindClosure. If this is set to true,
- // FindClosure allows nesting.
- Nesting bool
-
- // Newline is a flag for the FindClosure. If this is set to true,
- // FindClosure searches for a closer over multiple lines.
- Newline bool
-
- // Advance is a flag for the FindClosure. If this is set to true,
- // FindClosure advances pointers when closer is found.
- Advance bool
-}
-
-type reader struct {
- source []byte
- sourceLength int
- line int
- peekedLine []byte
- pos Segment
- head int
- lineOffset int
-}
-
-// NewReader return a new Reader that can read UTF-8 bytes .
-func NewReader(source []byte) Reader {
- r := &reader{
- source: source,
- sourceLength: len(source),
- }
- r.ResetPosition()
- return r
-}
-
-func (r *reader) FindClosure(opener, closer byte, options FindClosureOptions) (*Segments, bool) {
- return findClosureReader(r, opener, closer, options)
-}
-
-func (r *reader) ResetPosition() {
- r.line = -1
- r.head = 0
- r.lineOffset = -1
- r.AdvanceLine()
-}
-
-func (r *reader) Source() []byte {
- return r.source
-}
-
-func (r *reader) Value(seg Segment) []byte {
- return seg.Value(r.source)
-}
-
-func (r *reader) Peek() byte {
- if r.pos.Start >= 0 && r.pos.Start < r.sourceLength {
- if r.pos.Padding != 0 {
- return space[0]
- }
- return r.source[r.pos.Start]
- }
- return EOF
-}
-
-func (r *reader) PeekLine() ([]byte, Segment) {
- if r.pos.Start >= 0 && r.pos.Start < r.sourceLength {
- if r.peekedLine == nil {
- r.peekedLine = r.pos.Value(r.Source())
- }
- return r.peekedLine, r.pos
- }
- return nil, r.pos
-}
-
-// io.RuneReader interface.
-func (r *reader) ReadRune() (rune, int, error) {
- return readRuneReader(r)
-}
-
-func (r *reader) LineOffset() int {
- if r.lineOffset < 0 {
- v := 0
- for i := r.head; i < r.pos.Start; i++ {
- if r.source[i] == '\t' {
- v += util.TabWidth(v)
- } else {
- v++
- }
- }
- r.lineOffset = v - r.pos.Padding
- }
- return r.lineOffset
-}
-
-func (r *reader) PrecendingCharacter() rune {
- if r.pos.Start <= 0 {
- if r.pos.Padding != 0 {
- return rune(' ')
- }
- return rune('\n')
- }
- i := r.pos.Start - 1
- for ; i >= 0; i-- {
- if utf8.RuneStart(r.source[i]) {
- break
- }
- }
- rn, _ := utf8.DecodeRune(r.source[i:])
- return rn
-}
-
-func (r *reader) Advance(n int) {
- r.lineOffset = -1
- if n < len(r.peekedLine) && r.pos.Padding == 0 {
- r.pos.Start += n
- r.peekedLine = nil
- return
- }
- r.peekedLine = nil
- l := r.sourceLength
- for ; n > 0 && r.pos.Start < l; n-- {
- if r.pos.Padding != 0 {
- r.pos.Padding--
- continue
- }
- if r.source[r.pos.Start] == '\n' {
- r.AdvanceLine()
- continue
- }
- r.pos.Start++
- }
-}
-
-func (r *reader) AdvanceAndSetPadding(n, padding int) {
- r.Advance(n)
- if padding > r.pos.Padding {
- r.SetPadding(padding)
- }
-}
-
-func (r *reader) AdvanceLine() {
- r.lineOffset = -1
- r.peekedLine = nil
- r.pos.Start = r.pos.Stop
- r.head = r.pos.Start
- if r.pos.Start < 0 {
- return
- }
- r.pos.Stop = r.sourceLength
- for i := r.pos.Start; i < r.sourceLength; i++ {
- c := r.source[i]
- if c == '\n' {
- r.pos.Stop = i + 1
- break
- }
- }
- r.line++
- r.pos.Padding = 0
-}
-
-func (r *reader) Position() (int, Segment) {
- return r.line, r.pos
-}
-
-func (r *reader) SetPosition(line int, pos Segment) {
- r.lineOffset = -1
- r.line = line
- r.pos = pos
-}
-
-func (r *reader) SetPadding(v int) {
- r.pos.Padding = v
-}
-
-func (r *reader) SkipSpaces() (Segment, int, bool) {
- return skipSpacesReader(r)
-}
-
-func (r *reader) SkipBlankLines() (Segment, int, bool) {
- return skipBlankLinesReader(r)
-}
-
-func (r *reader) Match(reg *regexp.Regexp) bool {
- return matchReader(r, reg)
-}
-
-func (r *reader) FindSubMatch(reg *regexp.Regexp) [][]byte {
- return findSubMatchReader(r, reg)
-}
-
-// A BlockReader interface is a reader that is optimized for Blocks.
-type BlockReader interface {
- Reader
- // Reset resets current state and sets new segments to the reader.
- Reset(segment *Segments)
-}
-
-type blockReader struct {
- source []byte
- segments *Segments
- segmentsLength int
- line int
- pos Segment
- head int
- last int
- lineOffset int
-}
-
-// NewBlockReader returns a new BlockReader.
-func NewBlockReader(source []byte, segments *Segments) BlockReader {
- r := &blockReader{
- source: source,
- }
- if segments != nil {
- r.Reset(segments)
- }
- return r
-}
-
-func (r *blockReader) FindClosure(opener, closer byte, options FindClosureOptions) (*Segments, bool) {
- return findClosureReader(r, opener, closer, options)
-}
-
-func (r *blockReader) ResetPosition() {
- r.line = -1
- r.head = 0
- r.last = 0
- r.lineOffset = -1
- r.pos.Start = -1
- r.pos.Stop = -1
- r.pos.Padding = 0
- if r.segmentsLength > 0 {
- last := r.segments.At(r.segmentsLength - 1)
- r.last = last.Stop
- }
- r.AdvanceLine()
-}
-
-func (r *blockReader) Reset(segments *Segments) {
- r.segments = segments
- r.segmentsLength = segments.Len()
- r.ResetPosition()
-}
-
-func (r *blockReader) Source() []byte {
- return r.source
-}
-
-func (r *blockReader) Value(seg Segment) []byte {
- line := r.segmentsLength - 1
- ret := make([]byte, 0, seg.Stop-seg.Start+1)
- for ; line >= 0; line-- {
- if seg.Start >= r.segments.At(line).Start {
- break
- }
- }
- i := seg.Start
- for ; line < r.segmentsLength; line++ {
- s := r.segments.At(line)
- if i < 0 {
- i = s.Start
- }
- ret = s.ConcatPadding(ret)
- for ; i < seg.Stop && i < s.Stop; i++ {
- ret = append(ret, r.source[i])
- }
- i = -1
- if s.Stop > seg.Stop {
- break
- }
- }
- return ret
-}
-
-// io.RuneReader interface.
-func (r *blockReader) ReadRune() (rune, int, error) {
- return readRuneReader(r)
-}
-
-func (r *blockReader) PrecendingCharacter() rune {
- if r.pos.Padding != 0 {
- return rune(' ')
- }
- if r.segments.Len() < 1 {
- return rune('\n')
- }
- firstSegment := r.segments.At(0)
- if r.line == 0 && r.pos.Start <= firstSegment.Start {
- return rune('\n')
- }
- l := len(r.source)
- i := r.pos.Start - 1
- for ; i < l && i >= 0; i-- {
- if utf8.RuneStart(r.source[i]) {
- break
- }
- }
- if i < 0 || i >= l {
- return rune('\n')
- }
- rn, _ := utf8.DecodeRune(r.source[i:])
- return rn
-}
-
-func (r *blockReader) LineOffset() int {
- if r.lineOffset < 0 {
- v := 0
- for i := r.head; i < r.pos.Start; i++ {
- if r.source[i] == '\t' {
- v += util.TabWidth(v)
- } else {
- v++
- }
- }
- r.lineOffset = v - r.pos.Padding
- }
- return r.lineOffset
-}
-
-func (r *blockReader) Peek() byte {
- if r.line < r.segmentsLength && r.pos.Start >= 0 && r.pos.Start < r.last {
- if r.pos.Padding != 0 {
- return space[0]
- }
- return r.source[r.pos.Start]
- }
- return EOF
-}
-
-func (r *blockReader) PeekLine() ([]byte, Segment) {
- if r.line < r.segmentsLength && r.pos.Start >= 0 && r.pos.Start < r.last {
- return r.pos.Value(r.source), r.pos
- }
- return nil, r.pos
-}
-
-func (r *blockReader) Advance(n int) {
- r.lineOffset = -1
-
- if n < r.pos.Stop-r.pos.Start && r.pos.Padding == 0 {
- r.pos.Start += n
- return
- }
-
- for ; n > 0; n-- {
- if r.pos.Padding != 0 {
- r.pos.Padding--
- continue
- }
- if r.pos.Start >= r.pos.Stop-1 && r.pos.Stop < r.last {
- r.AdvanceLine()
- continue
- }
- r.pos.Start++
- }
-}
-
-func (r *blockReader) AdvanceAndSetPadding(n, padding int) {
- r.Advance(n)
- if padding > r.pos.Padding {
- r.SetPadding(padding)
- }
-}
-
-func (r *blockReader) AdvanceLine() {
- r.SetPosition(r.line+1, NewSegment(invalidValue, invalidValue))
- r.head = r.pos.Start
-}
-
-func (r *blockReader) Position() (int, Segment) {
- return r.line, r.pos
-}
-
-func (r *blockReader) SetPosition(line int, pos Segment) {
- r.lineOffset = -1
- r.line = line
- if pos.Start == invalidValue {
- if r.line < r.segmentsLength {
- s := r.segments.At(line)
- r.head = s.Start
- r.pos = s
- }
- } else {
- r.pos = pos
- if r.line < r.segmentsLength {
- s := r.segments.At(line)
- r.head = s.Start
- }
- }
-}
-
-func (r *blockReader) SetPadding(v int) {
- r.lineOffset = -1
- r.pos.Padding = v
-}
-
-func (r *blockReader) SkipSpaces() (Segment, int, bool) {
- return skipSpacesReader(r)
-}
-
-func (r *blockReader) SkipBlankLines() (Segment, int, bool) {
- return skipBlankLinesReader(r)
-}
-
-func (r *blockReader) Match(reg *regexp.Regexp) bool {
- return matchReader(r, reg)
-}
-
-func (r *blockReader) FindSubMatch(reg *regexp.Regexp) [][]byte {
- return findSubMatchReader(r, reg)
-}
-
-func skipBlankLinesReader(r Reader) (Segment, int, bool) {
- lines := 0
- for {
- line, seg := r.PeekLine()
- if line == nil {
- return seg, lines, false
- }
- if util.IsBlank(line) {
- lines++
- r.AdvanceLine()
- } else {
- return seg, lines, true
- }
- }
-}
-
-func skipSpacesReader(r Reader) (Segment, int, bool) {
- chars := 0
- for {
- line, segment := r.PeekLine()
- if line == nil {
- return segment, chars, false
- }
- for i, c := range line {
- if util.IsSpace(c) {
- chars++
- r.Advance(1)
- continue
- }
- return segment.WithStart(segment.Start + i + 1), chars, true
- }
- }
-}
-
-func matchReader(r Reader, reg *regexp.Regexp) bool {
- oldline, oldseg := r.Position()
- match := reg.FindReaderSubmatchIndex(r)
- r.SetPosition(oldline, oldseg)
- if match == nil {
- return false
- }
- r.Advance(match[1] - match[0])
- return true
-}
-
-func findSubMatchReader(r Reader, reg *regexp.Regexp) [][]byte {
- oldLine, oldSeg := r.Position()
- match := reg.FindReaderSubmatchIndex(r)
- r.SetPosition(oldLine, oldSeg)
- if match == nil {
- return nil
- }
- var bb bytes.Buffer
- bb.Grow(match[1] - match[0])
- for i := 0; i < match[1]; {
- r, size, _ := readRuneReader(r)
- i += size
- bb.WriteRune(r)
- }
- bs := bb.Bytes()
- var result [][]byte
- for i := 0; i < len(match); i += 2 {
- if match[i] < 0 {
- result = append(result, []byte{})
- continue
- }
- result = append(result, bs[match[i]:match[i+1]])
- }
-
- r.SetPosition(oldLine, oldSeg)
- r.Advance(match[1] - match[0])
- return result
-}
-
-func readRuneReader(r Reader) (rune, int, error) {
- line, _ := r.PeekLine()
- if line == nil {
- return 0, 0, io.EOF
- }
- rn, size := utf8.DecodeRune(line)
- if rn == utf8.RuneError {
- return 0, 0, io.EOF
- }
- r.Advance(size)
- return rn, size, nil
-}
-
-func findClosureReader(r Reader, opener, closer byte, opts FindClosureOptions) (*Segments, bool) {
- opened := 1
- codeSpanOpener := 0
- closed := false
- orgline, orgpos := r.Position()
- var ret *Segments
-
- for {
- bs, seg := r.PeekLine()
- if bs == nil {
- goto end
- }
- i := 0
- for i < len(bs) {
- c := bs[i]
- if opts.CodeSpan && codeSpanOpener != 0 && c == '`' {
- codeSpanCloser := 0
- for ; i < len(bs); i++ {
- if bs[i] == '`' {
- codeSpanCloser++
- } else {
- i--
- break
- }
- }
- if codeSpanCloser == codeSpanOpener {
- codeSpanOpener = 0
- }
- } else if codeSpanOpener == 0 && c == '\\' && i < len(bs)-1 && util.IsPunct(bs[i+1]) {
- i += 2
- continue
- } else if opts.CodeSpan && codeSpanOpener == 0 && c == '`' {
- for ; i < len(bs); i++ {
- if bs[i] == '`' {
- codeSpanOpener++
- } else {
- i--
- break
- }
- }
- } else if (opts.CodeSpan && codeSpanOpener == 0) || !opts.CodeSpan {
- if c == closer {
- opened--
- if opened == 0 {
- if ret == nil {
- ret = NewSegments()
- }
- ret.Append(seg.WithStop(seg.Start + i))
- r.Advance(i + 1)
- closed = true
- goto end
- }
- } else if c == opener {
- if !opts.Nesting {
- goto end
- }
- opened++
- }
- }
- i++
- }
- if !opts.Newline {
- goto end
- }
- r.AdvanceLine()
- if ret == nil {
- ret = NewSegments()
- }
- ret.Append(seg)
- }
-end:
- if !opts.Advance {
- r.SetPosition(orgline, orgpos)
- }
- if closed {
- return ret, true
- }
- return nil, false
-}
diff --git a/vendor/github.com/yuin/goldmark/text/segment.go b/vendor/github.com/yuin/goldmark/text/segment.go
deleted file mode 100644
index 93fbf1994..000000000
--- a/vendor/github.com/yuin/goldmark/text/segment.go
+++ /dev/null
@@ -1,239 +0,0 @@
-package text
-
-import (
- "bytes"
-
- "github.com/yuin/goldmark/util"
-)
-
-var space = []byte(" ")
-
-// A Segment struct holds information about source positions.
-type Segment struct {
- // Start is a start position of the segment.
- Start int
-
- // Stop is a stop position of the segment.
- // This value should be excluded.
- Stop int
-
- // Padding is a padding length of the segment.
- Padding int
-
- // 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.
-func NewSegment(start, stop int) Segment {
- return Segment{
- Start: start,
- Stop: stop,
- Padding: 0,
- }
-}
-
-// NewSegmentPadding returns a new Segment with the given padding.
-func NewSegmentPadding(start, stop, n int) Segment {
- return Segment{
- Start: start,
- Stop: stop,
- Padding: n,
- }
-}
-
-// Value returns a value of the segment.
-func (t *Segment) Value(buffer []byte) []byte {
- var result []byte
- if t.Padding == 0 {
- result = buffer[t.Start:t.Stop]
- } else {
- result = make([]byte, 0, t.Padding+t.Stop-t.Start+1)
- result = append(result, bytes.Repeat(space, t.Padding)...)
- result = append(result, buffer[t.Start:t.Stop]...)
- }
- if t.ForceNewline && len(result) > 0 && result[len(result)-1] != '\n' {
- result = append(result, '\n')
- }
- return result
-}
-
-// Len returns a length of the segment.
-func (t *Segment) Len() int {
- return t.Stop - t.Start + t.Padding
-}
-
-// Between returns a segment between this segment and the given segment.
-func (t *Segment) Between(other Segment) Segment {
- if t.Stop != other.Stop {
- panic("invalid state")
- }
- return NewSegmentPadding(
- t.Start,
- other.Start,
- t.Padding-other.Padding,
- )
-}
-
-// IsEmpty returns true if this segment is empty, otherwise false.
-func (t *Segment) IsEmpty() bool {
- return t.Start >= t.Stop && t.Padding == 0
-}
-
-// TrimRightSpace returns a new segment by slicing off all trailing
-// space characters.
-func (t *Segment) TrimRightSpace(buffer []byte) Segment {
- v := buffer[t.Start:t.Stop]
- l := util.TrimRightSpaceLength(v)
- if l == len(v) {
- return NewSegment(t.Start, t.Start)
- }
- return NewSegmentPadding(t.Start, t.Stop-l, t.Padding)
-}
-
-// TrimLeftSpace returns a new segment by slicing off all leading
-// space characters including padding.
-func (t *Segment) TrimLeftSpace(buffer []byte) Segment {
- v := buffer[t.Start:t.Stop]
- l := util.TrimLeftSpaceLength(v)
- return NewSegment(t.Start+l, t.Stop)
-}
-
-// TrimLeftSpaceWidth returns a new segment by slicing off leading space
-// characters until the given width.
-func (t *Segment) TrimLeftSpaceWidth(width int, buffer []byte) Segment {
- padding := t.Padding
- for ; width > 0; width-- {
- if padding == 0 {
- break
- }
- padding--
- }
- if width == 0 {
- return NewSegmentPadding(t.Start, t.Stop, padding)
- }
- text := buffer[t.Start:t.Stop]
- start := t.Start
- for _, c := range text {
- if start >= t.Stop-1 || width <= 0 {
- break
- }
- if c == ' ' {
- width--
- } else if c == '\t' {
- width -= 4
- } else {
- break
- }
- start++
- }
- if width < 0 {
- padding = width * -1
- }
- return NewSegmentPadding(start, t.Stop, padding)
-}
-
-// WithStart returns a new Segment with same value except Start.
-func (t *Segment) WithStart(v int) Segment {
- return NewSegmentPadding(v, t.Stop, t.Padding)
-}
-
-// WithStop returns a new Segment with same value except Stop.
-func (t *Segment) WithStop(v int) Segment {
- return NewSegmentPadding(t.Start, v, t.Padding)
-}
-
-// ConcatPadding concats the padding to the given slice.
-func (t *Segment) ConcatPadding(v []byte) []byte {
- if t.Padding > 0 {
- return append(v, bytes.Repeat(space, t.Padding)...)
- }
- return v
-}
-
-// Segments is a collection of the Segment.
-type Segments struct {
- values []Segment
-}
-
-// NewSegments return a new Segments.
-func NewSegments() *Segments {
- return &Segments{
- values: nil,
- }
-}
-
-// Append appends the given segment after the tail of the collection.
-func (s *Segments) Append(t Segment) {
- if s.values == nil {
- s.values = make([]Segment, 0, 20)
- }
- s.values = append(s.values, t)
-}
-
-// AppendAll appends all elements of given segments after the tail of the collection.
-func (s *Segments) AppendAll(t []Segment) {
- if s.values == nil {
- s.values = make([]Segment, 0, 20)
- }
- s.values = append(s.values, t...)
-}
-
-// Len returns the length of the collection.
-func (s *Segments) Len() int {
- if s.values == nil {
- return 0
- }
- return len(s.values)
-}
-
-// At returns a segment at the given index.
-func (s *Segments) At(i int) Segment {
- return s.values[i]
-}
-
-// Set sets the given Segment.
-func (s *Segments) Set(i int, v Segment) {
- s.values[i] = v
-}
-
-// SetSliced replace the collection with a subsliced value.
-func (s *Segments) SetSliced(lo, hi int) {
- s.values = s.values[lo:hi]
-}
-
-// Sliced returns a subslice of the collection.
-func (s *Segments) Sliced(lo, hi int) []Segment {
- return s.values[lo:hi]
-}
-
-// Clear delete all element of the collection.
-func (s *Segments) Clear() {
- s.values = nil
-}
-
-// Unshift insert the given Segment to head of the collection.
-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
-}