1// Copyright 2023 The goldmark-figure authors
2//
3// Use of this source code is governed by an MIT-style
4// license that can be found in the LICENSE file or at
5// https://opensource.org/licenses/MIT.
6package ast
7
8import (
9 gast "github.com/yuin/goldmark/ast"
10 "github.com/yuin/goldmark/renderer"
11 "github.com/yuin/goldmark/util"
12)
13
14// KindFigure is a NodeKind of the Figure node.
15var KindFigure = gast.NewNodeKind("Figure")
16
17// A Figure struct represents a table of Markdown(GFM) text.
18type Figure struct {
19 gast.BaseBlock
20}
21
22// Kind implements Node.Kind.
23func (n *Figure) Kind() gast.NodeKind {
24 return KindFigure
25}
26
27// Dump implements Node.Dump
28func (n *Figure) Dump(source []byte, level int) {
29 gast.DumpHelper(n, source, level, nil, func(level int) {
30 })
31}
32
33// NewFigure returns a new Table node.
34func NewFigure() *Figure {
35 return &Figure{}
36}
37
38// KindFigureImage is a NodeKind of the FigureImage node.
39var KindFigureImage = gast.NewNodeKind("FigureImage")
40
41// A FigureImage struct represents a table of Markdown(GFM) text.
42type FigureImage struct {
43 gast.BaseBlock
44}
45
46// Kind implements Node.Kind.
47func (n *FigureImage) Kind() gast.NodeKind {
48 return KindFigureImage
49}
50
51// Dump implements Node.Dump
52func (n *FigureImage) Dump(source []byte, level int) {
53 gast.DumpHelper(n, source, level, nil, func(level int) {
54 })
55}
56
57// NewFigureImage returns a new Table node.
58func NewFigureImage() *FigureImage {
59 return &FigureImage{}
60}
61
62// KindFigureCaption is a NodeKind of the FigureCaption node.
63var KindFigureCaption = gast.NewNodeKind("FigureCaption")
64
65// A FigureCaption struct represents a table of Markdown(GFM) text.
66type FigureCaption struct {
67 gast.BaseBlock
68}
69
70// Kind implements Node.Kind.
71func (n *FigureCaption) Kind() gast.NodeKind {
72 return KindFigureCaption
73}
74
75// Dump implements Node.Dump
76func (n *FigureCaption) Dump(source []byte, level int) {
77 gast.DumpHelper(n, source, level, nil, func(level int) {
78 })
79}
80
81// NewFigureCaption returns a new Table node.
82func NewFigureCaption() *FigureCaption {
83 return &FigureCaption{}
84}
85
86// FigureHTMLRenderer is a renderer.NodeRenderer implementation that
87// renders Figure nodes.
88type FigureHTMLRenderer struct {
89}
90
91// NewFigureHTMLRenderer returns a new FigureHTMLRenderer.
92func NewFigureHTMLRenderer() renderer.NodeRenderer {
93 return &FigureHTMLRenderer{}
94}
95
96// RegisterFuncs implements renderer.NodeRenderer.RegisterFuncs.
97func (r *FigureHTMLRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
98 reg.Register(KindFigure, r.renderFigure)
99 reg.Register(KindFigureCaption, r.renderFigureCaption)
100}
101
102func (r *FigureHTMLRenderer) renderFigure(w util.BufWriter, source []byte, n gast.Node, entering bool) (gast.WalkStatus, error) {
103 if entering {
104 _, _ = w.WriteString("<figure>\n")
105 } else {
106 _, _ = w.WriteString("</figure>\n")
107 }
108 return gast.WalkContinue, nil
109}
110
111func (r *FigureHTMLRenderer) renderFigureCaption(w util.BufWriter, source []byte, n gast.Node, entering bool) (gast.WalkStatus, error) {
112 if entering {
113 _, _ = w.WriteString("<figcaption><p>")
114 } else {
115 _, _ = w.WriteString("</p></figcaption>\n")
116 }
117 return gast.WalkContinue, nil
118}