diff options
Diffstat (limited to 'vendor/github.com/yuin/goldmark/renderer/renderer.go')
-rw-r--r-- | vendor/github.com/yuin/goldmark/renderer/renderer.go | 174 |
1 files changed, 0 insertions, 174 deletions
diff --git a/vendor/github.com/yuin/goldmark/renderer/renderer.go b/vendor/github.com/yuin/goldmark/renderer/renderer.go deleted file mode 100644 index 5b404655c..000000000 --- a/vendor/github.com/yuin/goldmark/renderer/renderer.go +++ /dev/null @@ -1,174 +0,0 @@ -// Package renderer renders the given AST to certain formats. -package renderer - -import ( - "bufio" - "io" - "sync" - - "github.com/yuin/goldmark/ast" - "github.com/yuin/goldmark/util" -) - -// A Config struct is a data structure that holds configuration of the Renderer. -type Config struct { - Options map[OptionName]interface{} - NodeRenderers util.PrioritizedSlice -} - -// NewConfig returns a new Config. -func NewConfig() *Config { - return &Config{ - Options: map[OptionName]interface{}{}, - NodeRenderers: util.PrioritizedSlice{}, - } -} - -// An OptionName is a name of the option. -type OptionName string - -// An Option interface is a functional option type for the Renderer. -type Option interface { - SetConfig(*Config) -} - -type withNodeRenderers struct { - value []util.PrioritizedValue -} - -func (o *withNodeRenderers) SetConfig(c *Config) { - c.NodeRenderers = append(c.NodeRenderers, o.value...) -} - -// WithNodeRenderers is a functional option that allow you to add -// NodeRenderers to the renderer. -func WithNodeRenderers(ps ...util.PrioritizedValue) Option { - return &withNodeRenderers{ps} -} - -type withOption struct { - name OptionName - value interface{} -} - -func (o *withOption) SetConfig(c *Config) { - c.Options[o.name] = o.value -} - -// WithOption is a functional option that allow you to set -// an arbitrary option to the parser. -func WithOption(name OptionName, value interface{}) Option { - return &withOption{name, value} -} - -// A SetOptioner interface sets given option to the object. -type SetOptioner interface { - // SetOption sets given option to the object. - // Unacceptable options may be passed. - // Thus implementations must ignore unacceptable options. - SetOption(name OptionName, value interface{}) -} - -// NodeRendererFunc is a function that renders a given node. -type NodeRendererFunc func(writer util.BufWriter, source []byte, n ast.Node, entering bool) (ast.WalkStatus, error) - -// A NodeRenderer interface offers NodeRendererFuncs. -type NodeRenderer interface { - // RendererFuncs registers NodeRendererFuncs to given NodeRendererFuncRegisterer. - RegisterFuncs(NodeRendererFuncRegisterer) -} - -// A NodeRendererFuncRegisterer registers given NodeRendererFunc to this object. -type NodeRendererFuncRegisterer interface { - // Register registers given NodeRendererFunc to this object. - Register(ast.NodeKind, NodeRendererFunc) -} - -// A Renderer interface renders given AST node to given -// writer with given Renderer. -type Renderer interface { - Render(w io.Writer, source []byte, n ast.Node) error - - // AddOptions adds given option to this renderer. - AddOptions(...Option) -} - -type renderer struct { - config *Config - options map[OptionName]interface{} - nodeRendererFuncsTmp map[ast.NodeKind]NodeRendererFunc - maxKind int - nodeRendererFuncs []NodeRendererFunc - initSync sync.Once -} - -// NewRenderer returns a new Renderer with given options. -func NewRenderer(options ...Option) Renderer { - config := NewConfig() - for _, opt := range options { - opt.SetConfig(config) - } - - r := &renderer{ - options: map[OptionName]interface{}{}, - config: config, - nodeRendererFuncsTmp: map[ast.NodeKind]NodeRendererFunc{}, - } - - return r -} - -func (r *renderer) AddOptions(opts ...Option) { - for _, opt := range opts { - opt.SetConfig(r.config) - } -} - -func (r *renderer) Register(kind ast.NodeKind, v NodeRendererFunc) { - r.nodeRendererFuncsTmp[kind] = v - if int(kind) > r.maxKind { - r.maxKind = int(kind) - } -} - -// Render renders the given AST node to the given writer with the given Renderer. -func (r *renderer) Render(w io.Writer, source []byte, n ast.Node) error { - r.initSync.Do(func() { - r.options = r.config.Options - r.config.NodeRenderers.Sort() - l := len(r.config.NodeRenderers) - for i := l - 1; i >= 0; i-- { - v := r.config.NodeRenderers[i] - nr, _ := v.Value.(NodeRenderer) - if se, ok := v.Value.(SetOptioner); ok { - for oname, ovalue := range r.options { - se.SetOption(oname, ovalue) - } - } - nr.RegisterFuncs(r) - } - r.nodeRendererFuncs = make([]NodeRendererFunc, r.maxKind+1) - for kind, nr := range r.nodeRendererFuncsTmp { - r.nodeRendererFuncs[kind] = nr - } - r.config = nil - r.nodeRendererFuncsTmp = nil - }) - writer, ok := w.(util.BufWriter) - if !ok { - writer = bufio.NewWriter(w) - } - err := ast.Walk(n, func(n ast.Node, entering bool) (ast.WalkStatus, error) { - s := ast.WalkStatus(ast.WalkContinue) - var err error - f := r.nodeRendererFuncs[n.Kind()] - if f != nil { - s, err = f(writer, source, n, entering) - } - return s, err - }) - if err != nil { - return err - } - return writer.Flush() -} |