You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
terraformDummyRepo2/vendor/github.com/hashicorp/terraform-plugin-docs/internal/mdplain/renderer.go

203 lines
4.2 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package mdplain
import (
"bytes"
"github.com/russross/blackfriday"
)
type Text struct{}
func TextRenderer() blackfriday.Renderer {
return &Text{}
}
func (options *Text) GetFlags() int {
return 0
}
func (options *Text) TitleBlock(out *bytes.Buffer, text []byte) {
text = bytes.TrimPrefix(text, []byte("% "))
text = bytes.Replace(text, []byte("\n% "), []byte("\n"), -1)
out.Write(text)
out.WriteString("\n")
}
func (options *Text) Header(out *bytes.Buffer, text func() bool, level int, id string) {
marker := out.Len()
doubleSpace(out)
if !text() {
out.Truncate(marker)
return
}
}
func (options *Text) BlockHtml(out *bytes.Buffer, text []byte) {
doubleSpace(out)
out.Write(text)
out.WriteByte('\n')
}
func (options *Text) HRule(out *bytes.Buffer) {
doubleSpace(out)
}
func (options *Text) BlockCode(out *bytes.Buffer, text []byte, lang string) {
options.BlockCodeNormal(out, text, lang)
}
func (options *Text) BlockCodeNormal(out *bytes.Buffer, text []byte, lang string) {
doubleSpace(out)
out.Write(text)
}
func (options *Text) BlockQuote(out *bytes.Buffer, text []byte) {
doubleSpace(out)
out.Write(text)
}
func (options *Text) Table(out *bytes.Buffer, header []byte, body []byte, columnData []int) {
doubleSpace(out)
out.Write(header)
out.Write(body)
}
func (options *Text) TableRow(out *bytes.Buffer, text []byte) {
doubleSpace(out)
out.Write(text)
}
func (options *Text) TableHeaderCell(out *bytes.Buffer, text []byte, align int) {
doubleSpace(out)
out.Write(text)
}
func (options *Text) TableCell(out *bytes.Buffer, text []byte, align int) {
doubleSpace(out)
out.Write(text)
}
func (options *Text) Footnotes(out *bytes.Buffer, text func() bool) {
options.HRule(out)
options.List(out, text, 0)
}
func (options *Text) FootnoteItem(out *bytes.Buffer, name, text []byte, flags int) {
out.Write(text)
}
func (options *Text) List(out *bytes.Buffer, text func() bool, flags int) {
marker := out.Len()
doubleSpace(out)
if !text() {
out.Truncate(marker)
return
}
}
func (options *Text) ListItem(out *bytes.Buffer, text []byte, flags int) {
out.Write(text)
}
func (options *Text) Paragraph(out *bytes.Buffer, text func() bool) {
marker := out.Len()
doubleSpace(out)
if !text() {
out.Truncate(marker)
return
}
}
func (options *Text) AutoLink(out *bytes.Buffer, link []byte, kind int) {
out.Write(link)
}
func (options *Text) CodeSpan(out *bytes.Buffer, text []byte) {
out.Write(text)
}
func (options *Text) DoubleEmphasis(out *bytes.Buffer, text []byte) {
out.Write(text)
}
func (options *Text) Emphasis(out *bytes.Buffer, text []byte) {
if len(text) == 0 {
return
}
out.Write(text)
}
func (options *Text) Image(out *bytes.Buffer, link []byte, title []byte, alt []byte) {}
func (options *Text) LineBreak(out *bytes.Buffer) {}
func (options *Text) Link(out *bytes.Buffer, link []byte, title []byte, content []byte) {
out.Write(content)
if !isRelativeLink(link) {
out.WriteString(" ")
out.Write(link)
}
}
func (options *Text) RawHtmlTag(out *bytes.Buffer, text []byte) {}
func (options *Text) TripleEmphasis(out *bytes.Buffer, text []byte) {
out.Write(text)
}
func (options *Text) StrikeThrough(out *bytes.Buffer, text []byte) {
out.Write(text)
}
func (options *Text) FootnoteRef(out *bytes.Buffer, ref []byte, id int) {}
func (options *Text) Entity(out *bytes.Buffer, entity []byte) {
out.Write(entity)
}
func (options *Text) NormalText(out *bytes.Buffer, text []byte) {
out.Write(text)
}
func (options *Text) Smartypants(out *bytes.Buffer, text []byte) {}
func (options *Text) DocumentHeader(out *bytes.Buffer) {}
func (options *Text) DocumentFooter(out *bytes.Buffer) {}
func (options *Text) TocHeader(text []byte, level int) {}
func (options *Text) TocFinalize() {}
func doubleSpace(out *bytes.Buffer) {
if out.Len() > 0 {
out.WriteByte('\n')
}
}
func isRelativeLink(link []byte) (yes bool) {
yes = false
// a tag begin with '#'
if link[0] == '#' {
yes = true
}
// link begin with '/' but not '//', the second maybe a protocol relative link
if len(link) >= 2 && link[0] == '/' && link[1] != '/' {
yes = true
}
// only the root '/'
if len(link) == 1 && link[0] == '/' {
yes = true
}
return
}