render

package
v1.7.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 29, 2024 License: MulanPSL-2.0 Imports: 18 Imported by: 22

Documentation

Index

Constants

This section is empty.

Variables

View Source
var NewlineSV = []byte("<span data-type=\"newline\"><br /><span style=\"display: none\">\n</span></span>")

Functions

func EChartsMindmap

func EChartsMindmap(listContent []byte) []byte

func EChartsMindmapStr

func EChartsMindmapStr(listContent string) string

func HeadingID

func HeadingID(heading *ast.Node) (ret string)

func NewTerms

func NewTerms() (ret map[string]string)

func NoHighlight added in v1.7.5

func NoHighlight(language string) bool

func RenderHeadingText

func RenderHeadingText(n *ast.Node) (ret string)

func Sanitize

func Sanitize(str string) string

func Space0

func Space0(text string) (ret string)

func SubStr

func SubStr(str string, length int) (ret string)

Types

type BaseRenderer

type BaseRenderer struct {
	Options             *Options                         // 渲染选项
	RendererFuncs       map[ast.NodeType]RendererFunc    // 渲染器
	DefaultRendererFunc RendererFunc                     // 默认渲染器,在 RendererFuncs 中找不到节点渲染器时会使用该默认渲染器进行渲染
	ExtRendererFuncs    map[ast.NodeType]ExtRendererFunc // 用户自定义的渲染器
	Writer              *bytes.Buffer                    // 输出缓冲
	LastOut             byte                             // 最新输出的一个字节
	Tree                *parse.Tree                      // 待渲染的树
	DisableTags         int                              // 标签嵌套计数器,用于判断不可能出现标签嵌套的情况,比如语法树允许图片节点包含链接节点,但是 HTML <img> 不能包含 <a>
	FootnotesDefs       []*ast.Node                      // 脚注定义集
	RenderingFootnotes  bool                             // 是否正在渲染脚注定义
}

BaseRenderer 描述了渲染器结构。

func NewBaseRenderer

func NewBaseRenderer(tree *parse.Tree, options *Options) *BaseRenderer

NewBaseRenderer 构造一个 BaseRenderer。

func (*BaseRenderer) EncodeLinkSpace added in v1.7.6

func (r *BaseRenderer) EncodeLinkSpace(dest string) string

func (*BaseRenderer) FixTermTypo

func (r *BaseRenderer) FixTermTypo(tokens []byte) []byte

FixTermTypo 修正 tokens 中出现的术语拼写问题。

func (*BaseRenderer) LinkPath

func (r *BaseRenderer) LinkPath(dest []byte) []byte

func (*BaseRenderer) LinkTextAutoSpaceNext

func (r *BaseRenderer) LinkTextAutoSpaceNext(node *ast.Node)

func (*BaseRenderer) LinkTextAutoSpacePrevious

func (r *BaseRenderer) LinkTextAutoSpacePrevious(node *ast.Node)

func (*BaseRenderer) Newline

func (r *BaseRenderer) Newline()

Newline 会在最新内容不是换行符 \n 时输出一个换行符。

func (*BaseRenderer) NodeAttrs

func (r *BaseRenderer) NodeAttrs(node *ast.Node) (ret [][]string)

func (*BaseRenderer) NodeAttrsStr

func (r *BaseRenderer) NodeAttrsStr(node *ast.Node) (ret string)

func (*BaseRenderer) NodeID

func (r *BaseRenderer) NodeID(node *ast.Node) (ret string)

func (*BaseRenderer) PrefixPath

func (r *BaseRenderer) PrefixPath(dest []byte) []byte

func (*BaseRenderer) RelativePath

func (r *BaseRenderer) RelativePath(dest []byte) []byte

func (*BaseRenderer) Render

func (r *BaseRenderer) Render() (output []byte)

Render 从根节点开始遍历并渲染。

func (*BaseRenderer) Space

func (r *BaseRenderer) Space(tokens []byte) []byte

Space 会把 tokens 中的中西文之间加上空格。

func (*BaseRenderer) Tag

func (r *BaseRenderer) Tag(name string, attrs [][]string, selfclosing bool)

func (*BaseRenderer) Text

func (r *BaseRenderer) Text(node *ast.Node) (ret string)

func (*BaseRenderer) TextAutoSpaceNext

func (r *BaseRenderer) TextAutoSpaceNext(node *ast.Node)

func (*BaseRenderer) TextAutoSpacePrevious

func (r *BaseRenderer) TextAutoSpacePrevious(node *ast.Node)

func (*BaseRenderer) Write

func (r *BaseRenderer) Write(content []byte)

Write 输出指定的字节数组 content。

func (*BaseRenderer) WriteByte

func (r *BaseRenderer) WriteByte(c byte)

WriteByte 输出一个字节 c。

func (*BaseRenderer) WriteString

func (r *BaseRenderer) WriteString(content string)

WriteString 输出指定的字符串 content。

type EChartsJSONRenderer

type EChartsJSONRenderer struct {
	*BaseRenderer
}

EChartsJSONRenderer 描述了 ECharts JSON 渲染器。

type ExtRendererFunc

type ExtRendererFunc func(n *ast.Node, entering bool) (string, ast.WalkStatus)

ExtRendererFunc 描述了用户自定义的渲染器函数签名。

type FormatRenderer

type FormatRenderer struct {
	*BaseRenderer
	NodeWriterStack []*bytes.Buffer // 节点输出缓冲栈
}

FormatRenderer 描述了格式化渲染器。

func NewFormatRenderer

func NewFormatRenderer(tree *parse.Tree, options *Options) *FormatRenderer

NewFormatRenderer 创建一个格式化渲染器。

type Heading

type Heading struct {
	ID       string     `json:"id"`
	Box      string     `json:"box"`
	Path     string     `json:"path"`
	HPath    string     `json:"hPath"`
	Content  string     `json:"content"`
	Level    int        `json:"level"`
	Children []*Heading `json:"children"`
	// contains filtered or unexported fields
}

type HtmlRenderer

type HtmlRenderer struct {
	*BaseRenderer
}

HtmlRenderer 描述了 HTML 渲染器。

func NewHtmlRenderer

func NewHtmlRenderer(tree *parse.Tree, options *Options) *HtmlRenderer

NewHtmlRenderer 创建一个 HTML 渲染器。

func (*HtmlRenderer) Render

func (r *HtmlRenderer) Render() (output []byte)

func (*HtmlRenderer) RenderFootnotes

func (r *HtmlRenderer) RenderFootnotes() []byte

type JSONRenderer

type JSONRenderer struct {
	*BaseRenderer
}

type KityMinderJSONRenderer

type KityMinderJSONRenderer struct {
	*BaseRenderer
}

KityMinderJSONRenderer 描述了 KityMinder JSON 渲染器。

type Options

type Options struct {
	// SoftBreak2HardBreak 设置是否将软换行(\n)渲染为硬换行(<br />)。
	SoftBreak2HardBreak bool
	// AutoSpace 设置是否对普通文本中的中西文间自动插入空格。
	// https://github.com/sparanoid/chinese-copywriting-guidelines
	AutoSpace bool
	// RenderListStyle 设置在渲染 OL、UL 时是否添加 data-style 属性 https://github.com/88250/lute/issues/48
	RenderListStyle bool
	// CodeSyntaxHighlight 设置是否对代码块进行语法高亮。
	CodeSyntaxHighlight bool
	// CodeSyntaxHighlightDetectLang bool
	CodeSyntaxHighlightDetectLang bool
	// CodeSyntaxHighlightInlineStyle 设置语法高亮是否为内联样式,默认不内联。
	CodeSyntaxHighlightInlineStyle bool
	// CodeSyntaxHightLineNum 设置语法高亮是否显示行号,默认不显示。
	CodeSyntaxHighlightLineNum bool
	// CodeSyntaxHighlightStyleName 指定语法高亮样式名,默认为 "github"。
	CodeSyntaxHighlightStyleName string
	// Vditor 所见即所得支持。
	VditorWYSIWYG bool
	// Vditor 即时渲染支持。
	VditorIR bool
	// Vditor 分屏预览支持。
	VditorSV bool
	// Protyle 所见即所得支持。
	ProtyleWYSIWYG bool
	// KramdownBlockIAL 设置是否打开 kramdown 块级内联属性列表支持。 https://kramdown.gettalong.org/syntax.html#inline-attribute-lists
	KramdownBlockIAL bool
	// KramdownSpanIAL 设置是否打开 kramdown 行级内联属性列表支持。
	KramdownSpanIAL bool
	// SuperBlock 设置是否支持超级块。 https://github.com/88250/lute/issues/111
	SuperBlock bool
	// ImageLazyLoading 设置图片懒加载时使用的图片路径,配置该字段后将启用图片懒加载。
	// 图片 src 的值会复制给新属性 data-src,然后使用该参数值作为 src 的值 https://github.com/88250/lute/issues/55
	ImageLazyLoading string
	// ChineseParagraphBeginningSpace 设置是否使用传统中文排版“段落开头空两格”。
	ChineseParagraphBeginningSpace bool
	// Sanitize 设置是否启用 XSS 安全过滤 https://github.com/88250/lute/issues/51
	// 注意:Lute 目前的实现存在一些漏洞,请不要依赖它来防御 XSS 攻击。
	Sanitize bool
	// FixTermTypo 设置是否对普通文本中出现的术语进行修正。
	// https://github.com/sparanoid/chinese-copywriting-guidelines
	// 注意:开启术语修正的话会默认在中西文之间插入空格。
	FixTermTypo bool
	// Terms 将传入的 terms 合并覆盖到已有的 Terms 字典。
	Terms map[string]string
	// ToC 设置是否打开“目录”支持。
	ToC bool
	// HeadingID 设置是否打开“自定义标题 ID”支持。
	HeadingID bool
	// KramdownIALIDRenderName 设置 kramdown 内联属性列表中出现 id 属性时渲染 id 属性用的 name(key) 名称,默认为 "id"。
	// 仅在 HTML 渲染器 HtmlRenderer 中支持。
	KramdownIALIDRenderName string
	// HeadingAnchor 设置是否对标题生成链接锚点。
	HeadingAnchor bool
	// GFMTaskListItemClass 作为 GFM 任务列表项类名,默认为 "vditor-task"。
	GFMTaskListItemClass string
	// VditorCodeBlockPreview 设置 Vditor 代码块是否需要渲染预览部分
	VditorCodeBlockPreview bool
	// VditorMathBlockPreview 设置 Vditor 数学公式块是否需要渲染预览部分
	VditorMathBlockPreview bool
	// VditorHTMLBlockPreview 设置 Vditor HTML 块是否需要渲染预览部分
	VditorHTMLBlockPreview bool
	// LinkBase 设置链接、图片、脚注的基础路径。如果用户在链接或者图片地址中使用相对路径(没有协议前缀且不以 / 开头)并且 LinkBase 不为空则会用该值作为前缀。
	// 比如 LinkBase 设置为 http://domain.com/,对于 ![foo](bar.png) 则渲染为 <img src="http://domain.com/bar.png" alt="foo" />
	LinkBase string
	// LinkPrefix 设置连接、图片的路径前缀。一旦设置该值,链接渲染将强制添加该值作为链接前缀,这有别于 LinkBase。
	// 比如 LinkPrefix 设置为 http://domain.com,对于使用绝对路径的 ![foo](/local/path/bar.png) 则渲染为 <img src="http://domain.com/local/path/bar.png" alt="foo" />;
	// 在 LinkBase 和 LinkPrefix 同时设置的情况下,会先处理 LinkBase 逻辑,最后再在 LinkBase 处理结果上加上 LinkPrefix。
	LinkPrefix string
	// NodeIndexStart 用于设置块级节点编号起始值。
	NodeIndexStart int
	// ProtyleContenteditable 设置 Protyle 渲染时标签中的 contenteditable 属性。
	ProtyleContenteditable bool
	// KeepParagraphBeginningSpace 设置是否保留段首空格
	KeepParagraphBeginningSpace bool
	// NetImgMarker 设置 Protyle 是否标记网络图片
	ProtyleMarkNetImg bool
	// Spellcheck 设置是否启用拼写检查
	Spellcheck bool
}

Options 描述了渲染选项。

func NewOptions

func NewOptions() *Options

type ProtyleExportDocxRenderer added in v1.7.5

type ProtyleExportDocxRenderer struct {
	*BaseRenderer
}

func NewProtyleExportDocxRenderer added in v1.7.5

func NewProtyleExportDocxRenderer(tree *parse.Tree, options *Options) *ProtyleExportDocxRenderer

func (*ProtyleExportDocxRenderer) Render added in v1.7.5

func (r *ProtyleExportDocxRenderer) Render() (output []byte)

type ProtyleExportMdRenderer added in v1.7.5

type ProtyleExportMdRenderer struct {
	*BaseRenderer
	NodeWriterStack []*bytes.Buffer
}

func NewProtyleExportMdRenderer added in v1.7.5

func NewProtyleExportMdRenderer(tree *parse.Tree, options *Options) *ProtyleExportMdRenderer

type ProtyleExportRenderer added in v1.7.5

type ProtyleExportRenderer struct {
	*BaseRenderer
}

func NewProtyleExportRenderer added in v1.7.5

func NewProtyleExportRenderer(tree *parse.Tree, options *Options) *ProtyleExportRenderer

type ProtylePreviewRenderer

type ProtylePreviewRenderer struct {
	*BaseRenderer
}

func NewProtylePreviewRenderer

func NewProtylePreviewRenderer(tree *parse.Tree, options *Options) *ProtylePreviewRenderer

func (*ProtylePreviewRenderer) Render

func (r *ProtylePreviewRenderer) Render() (output []byte)

type ProtyleRenderer added in v1.7.5

type ProtyleRenderer struct {
	*BaseRenderer
	NodeIndex int
}

ProtyleRenderer 描述了 Protyle WYSIWYG Block DOM 渲染器。

func NewProtyleRenderer added in v1.7.5

func NewProtyleRenderer(tree *parse.Tree, options *Options) *ProtyleRenderer

NewProtyleRenderer 创建一个 WYSIWYG Block DOM 渲染器。

type Renderer

type Renderer interface {
	// Render 渲染输出。
	Render() (output []byte)
}

Renderer 描述了渲染器接口。

func NewEChartsJSONRenderer

func NewEChartsJSONRenderer(tree *parse.Tree, options *Options) Renderer

NewEChartsJSONRenderer 创建一个 ECharts JSON 渲染器。

func NewJSONRenderer

func NewJSONRenderer(tree *parse.Tree, options *Options) Renderer

func NewKityMinderJSONRenderer

func NewKityMinderJSONRenderer(tree *parse.Tree, options *Options) Renderer

NewKityMinderJSONRenderer 创建一个 KityMinder JSON 渲染器。

type RendererFunc

type RendererFunc func(n *ast.Node, entering bool) ast.WalkStatus

RendererFunc 描述了渲染器函数签名。

type TextBundleRenderer

type TextBundleRenderer struct {
	*FormatRenderer
	// contains filtered or unexported fields
}

TextBundleRenderer 描述了 TextBundle 渲染器。https://github.com/88250/lute/issues/77

继承 FormatRenderer,覆写链接地址渲染函数 renderLinkDest,如果 URL 在指定的链接前缀列表中,则将其替换为 assets/xxx,比如对于 Markdown 原文:

[foo](https://img.hacpai.com/dir1/bar.zip)

![foo](https://b3logfile.com/dir2/baz.png)

指定链接前缀列表为:["https://img.hacpai.com", "https://b3logfile.com"],处理后渲染为:

[foo](assets/dir1/bar.zip)

![foo](assets/dir2/baz.png)

func NewTextBundleRenderer

func NewTextBundleRenderer(tree *parse.Tree, linkPrefixes []string, options *Options) *TextBundleRenderer

NewTextBundleRenderer 创建一个 TextBundle 渲染器。

func (*TextBundleRenderer) Render

func (r *TextBundleRenderer) Render() (output []byte, originalLink []string)

type VditorIRRenderer

type VditorIRRenderer struct {
	*BaseRenderer
}

VditorIRRenderer 描述了 Vditor Instant-Rendering DOM 渲染器。

func NewVditorIRRenderer

func NewVditorIRRenderer(tree *parse.Tree, options *Options) *VditorIRRenderer

NewVditorIRRenderer 创建一个 Vditor Instant-Rendering DOM 渲染器。

func (*VditorIRRenderer) Text

func (r *VditorIRRenderer) Text(node *ast.Node) (ret string)

type VditorRenderer

type VditorRenderer struct {
	*BaseRenderer
	// contains filtered or unexported fields
}

VditorRenderer 描述了 Vditor WYSIWYG DOM 渲染器。

func NewVditorRenderer

func NewVditorRenderer(tree *parse.Tree, options *Options) *VditorRenderer

NewVditorRenderer 创建一个 Vditor WYSIWYG DOM 渲染器。

type VditorSVRenderer

type VditorSVRenderer struct {
	*BaseRenderer

	LastOut []byte // 最新输出的 newline 长度个字节
	// contains filtered or unexported fields
}

VditorSVRenderer 描述了 Vditor Split-View DOM 渲染器。

func NewVditorSVRenderer

func NewVditorSVRenderer(tree *parse.Tree, options *Options) *VditorSVRenderer

NewVditorSVRenderer 创建一个 Vditor Split-View DOM 渲染器

func (*VditorSVRenderer) Newline

func (r *VditorSVRenderer) Newline()

func (*VditorSVRenderer) Text

func (r *VditorSVRenderer) Text(node *ast.Node) (ret string)

func (*VditorSVRenderer) Write

func (r *VditorSVRenderer) Write(content []byte)

func (*VditorSVRenderer) WriteByte

func (r *VditorSVRenderer) WriteByte(c byte)

func (*VditorSVRenderer) WriteString

func (r *VditorSVRenderer) WriteString(content string)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL