package goldmark
import (
"io"
"github.com/yuin/goldmark/parser"
"github.com/yuin/goldmark/renderer"
"github.com/yuin/goldmark/renderer/html"
"github.com/yuin/goldmark/text"
"github.com/yuin/goldmark/util"
)
func DefaultParser () parser .Parser {
return parser .NewParser (parser .WithBlockParsers (parser .DefaultBlockParsers ()...),
parser .WithInlineParsers (parser .DefaultInlineParsers ()...),
parser .WithParagraphTransformers (parser .DefaultParagraphTransformers ()...),
)
}
func DefaultRenderer () renderer .Renderer {
return renderer .NewRenderer (renderer .WithNodeRenderers (util .Prioritized (html .NewRenderer (), 1000 )))
}
var defaultMarkdown = New ()
func Convert (source []byte , w io .Writer , opts ...parser .ParseOption ) error {
return defaultMarkdown .Convert (source , w , opts ...)
}
type Markdown interface {
Convert (source []byte , writer io .Writer , opts ...parser .ParseOption ) error
Parser () parser .Parser
SetParser (parser .Parser )
Renderer () renderer .Renderer
SetRenderer (renderer .Renderer )
}
type Option func (*markdown )
func WithExtensions (ext ...Extender ) Option {
return func (m *markdown ) {
m .extensions = append (m .extensions , ext ...)
}
}
func WithParser (p parser .Parser ) Option {
return func (m *markdown ) {
m .parser = p
}
}
func WithParserOptions (opts ...parser .Option ) Option {
return func (m *markdown ) {
m .parser .AddOptions (opts ...)
}
}
func WithRenderer (r renderer .Renderer ) Option {
return func (m *markdown ) {
m .renderer = r
}
}
func WithRendererOptions (opts ...renderer .Option ) Option {
return func (m *markdown ) {
m .renderer .AddOptions (opts ...)
}
}
type markdown struct {
parser parser .Parser
renderer renderer .Renderer
extensions []Extender
}
func New (options ...Option ) Markdown {
md := &markdown {
parser : DefaultParser (),
renderer : DefaultRenderer (),
extensions : []Extender {},
}
for _ , opt := range options {
opt (md )
}
for _ , e := range md .extensions {
e .Extend (md )
}
return md
}
func (m *markdown ) Convert (source []byte , writer io .Writer , opts ...parser .ParseOption ) error {
reader := text .NewReader (source )
doc := m .parser .Parse (reader , opts ...)
return m .renderer .Render (writer , source , doc )
}
func (m *markdown ) Parser () parser .Parser {
return m .parser
}
func (m *markdown ) SetParser (v parser .Parser ) {
m .parser = v
}
func (m *markdown ) Renderer () renderer .Renderer {
return m .renderer
}
func (m *markdown ) SetRenderer (v renderer .Renderer ) {
m .renderer = v
}
type Extender interface {
Extend (Markdown )
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .