render

package
v1.7.8 Latest Latest
Warning

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

Go to latest
Published: Sep 23, 2026 License: MulanPSL-2.0 Imports: 19 Imported by: 30

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 HeadingIDRaw added in v1.7.7

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

HeadingIDRaw 返回标题 ID 语法花括号内的原始文本。

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)

func TableCellRichHTML added in v1.7.8

func TableCellRichHTML(rich *ast.TableCellRich, options *Options) ([]byte, error)

TableCellRichHTML 输出片段的静态 HTML,不把内部节点作为可编辑文档块暴露。

Types

type BaseRenderer

type BaseRenderer struct {
	Options             *Options                         // 渲染选项
	ParseOptions        *parse.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                             // 是否正在渲染脚注定义
	// contains filtered or unexported fields
}

BaseRenderer 描述了渲染器结构。

func NewBaseRenderer

func NewBaseRenderer(tree *parse.Tree, options *Options, parseOptions *parse.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) NormalizedTaskListItemChecked added in v1.7.7

func (r *BaseRenderer) NormalizedTaskListItemChecked(node *ast.Node) bool

NormalizedTaskListItemChecked 返回规范化后的任务列表勾选状态。

func (*BaseRenderer) NormalizedTaskListItemMarker added in v1.7.7

func (r *BaseRenderer) NormalizedTaskListItemMarker(node *ast.Node) byte

NormalizedTaskListItemMarker 返回规范化后的任务列表标记符。 当 ExportNormalizeTaskListMarker 选项开启时,将非标准标记符(如 /、>、! 等)转为 X。 仅用于 Markdown 文本输出场景(format、export_md),不用于 data-task 属性。

func (*BaseRenderer) ParagraphContainImgOnly added in v1.7.7

func (r *BaseRenderer) ParagraphContainImgOnly(paragraph *ast.Node) (ret bool)

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 // 节点输出缓冲栈
	// contains filtered or unexported fields
}

FormatRenderer 描述了格式化渲染器。

func NewFormatRenderer

func NewFormatRenderer(tree *parse.Tree, options *Options, parseOptions *parse.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, parseOptions *parse.Options) *HtmlRenderer

NewHtmlRenderer 创建一个 HTML 渲染器。

func (*HtmlRenderer) Render

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

func (*HtmlRenderer) RenderFootnotes

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

func (*HtmlRenderer) SetTextMarkStandardTag added in v1.7.7

func (r *HtmlRenderer) SetTextMarkStandardTag()

SetTextMarkStandardTag 设置文本标记使用标准 HTML 标签渲染。

type JSONRenderer

type JSONRenderer struct {
	*BaseRenderer
}

type KityMinderJSONRenderer

type KityMinderJSONRenderer struct {
	*BaseRenderer
}

KityMinderJSONRenderer 描述了 KityMinder JSON 渲染器。

type Options

type Options struct {
	TabsMarkdown bool // 剪贴板保留页签结构,文件导出默认平铺。
	// 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
	// CodeSyntaxHighlightLineNum 设置语法高亮是否显示行号,默认不显示。
	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
	// DataTask 设置是否渲染任务列表项的 data-task 属性,用于多状态任务列表。
	DataTask bool
	// 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
	// UnorderedListMarker 设置无序列表和任务列表的标记符,默认为 *
	UnorderedListMarker string
	// ImgTag 设置是否使用 <img> 标签渲染图片
	ImgTag bool
	// PreventEncodeLinkSpace 设置是否阻止将链接中对空格编码为 %20
	PreventEncodeLinkSpace bool
	// ExportNormalizeTaskListMarker 设置是否将非标准的任务列表标记符(如 [/]、[>]、[!] 等)统一导出为完成标记 [X]。
	// 开启后 [ ] 和 [X] 保持不变,其余标记符均转换为 [X],以兼容不支持自定义标记符的 Markdown 解析器。
	ExportNormalizeTaskListMarker 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, parseOptions *parse.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
	// contains filtered or unexported fields
}

func NewProtyleExportMdRenderer added in v1.7.5

func NewProtyleExportMdRenderer(tree *parse.Tree, options *Options, parseOptions *parse.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, parseOptions *parse.Options) *ProtyleExportRenderer

type ProtylePreviewRenderer

type ProtylePreviewRenderer struct {
	*BaseRenderer
}

func NewProtylePreviewRenderer

func NewProtylePreviewRenderer(tree *parse.Tree, options *Options, parseOptions *parse.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, parseOptions *parse.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, parseOptions *parse.Options) Renderer

NewEChartsJSONRenderer 创建一个 ECharts JSON 渲染器。

func NewJSONRenderer

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

func NewKityMinderJSONRenderer

func NewKityMinderJSONRenderer(tree *parse.Tree, options *Options, parseOptions *parse.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, parseOptions *parse.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, parseOptions *parse.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, parseOptions *parse.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, parseOptions *parse.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