diff --git a/renderer/mkDocsAdmonition.go b/renderer/mkDocsAdmonition.go index d22e9f2..7f6e72a 100644 --- a/renderer/mkDocsAdmonition.go +++ b/renderer/mkDocsAdmonition.go @@ -18,14 +18,12 @@ var MkDocsAdmonitionAttributeFilter = html.GlobalAttributeFilter // nodes as (X)HTML. type ConfluenceMkDocsAdmonitionRenderer struct { html.Config - LevelMap MkDocsAdmonitionLevelMap } -// NewConfluenceRenderer creates a new instance of the ConfluenceRenderer +// NewConfluenceMkDocsAdmonitionRenderer creates a new instance of the ConfluenceRenderer func NewConfluenceMkDocsAdmonitionRenderer(opts ...html.Option) renderer.NodeRenderer { return &ConfluenceMkDocsAdmonitionRenderer{ - Config: html.NewConfig(), - LevelMap: nil, + Config: html.NewConfig(), } } @@ -49,12 +47,6 @@ func (t MkDocsAdmonitionType) String() string { return []string{"info", "note", "warning", "tip", "none"}[t] } -type MkDocsAdmonitionLevelMap map[ast.Node]int - -func (m MkDocsAdmonitionLevelMap) Level(node ast.Node) int { - return m[node] -} - func ParseMkDocsAdmonitionType(node ast.Node) MkDocsAdmonitionType { n, ok := node.(*parser.Admonition) if !ok { @@ -75,42 +67,13 @@ func ParseMkDocsAdmonitionType(node ast.Node) MkDocsAdmonitionType { } } -// GenerateMkDocsAdmonitionLevel walks a given node and returns a map of blockquote levels -func GenerateMkDocsAdmonitionLevel(someNode ast.Node) MkDocsAdmonitionLevelMap { - - // We define state variable that tracks BlockQuote level while we walk the tree - admonitionLevel := 0 - AdmonitionLevelMap := make(map[ast.Node]int) - - rootNode := someNode - for rootNode.Parent() != nil { - rootNode = rootNode.Parent() - } - _ = ast.Walk(rootNode, func(node ast.Node, entering bool) (ast.WalkStatus, error) { - if node.Kind() == ast.KindBlockquote && entering { - AdmonitionLevelMap[node] = admonitionLevel - admonitionLevel += 1 - } - if node.Kind() == ast.KindBlockquote && !entering { - admonitionLevel -= 1 - } - return ast.WalkContinue, nil - }) - return AdmonitionLevelMap -} - -// renderBlockQuote will render a BlockQuote +// renderMkDocsAdmonition renders an admonition node as a Confluence structured macro. +// All admonitions (including nested ones) are rendered as Confluence macros. func (r *ConfluenceMkDocsAdmonitionRenderer) renderMkDocsAdmonition(writer util.BufWriter, source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) { - // Initialize BlockQuote level map n := node.(*parser.Admonition) - if r.LevelMap == nil { - r.LevelMap = GenerateMkDocsAdmonitionLevel(node) - } - admonitionType := ParseMkDocsAdmonitionType(node) - admonitionLevel := r.LevelMap.Level(node) - if admonitionLevel == 0 && entering && admonitionType != ANone { + if entering && admonitionType != ANone { prefix := fmt.Sprintf("true\n", admonitionType) if _, err := writer.Write([]byte(prefix)); err != nil { return ast.WalkStop, err @@ -126,7 +89,7 @@ func (r *ConfluenceMkDocsAdmonitionRenderer) renderMkDocsAdmonition(writer util. return ast.WalkContinue, nil } - if admonitionLevel == 0 && !entering && admonitionType != ANone { + if !entering && admonitionType != ANone { suffix := "\n" if _, err := writer.Write([]byte(suffix)); err != nil { return ast.WalkStop, err