From e310343e4acac016f729ab3c14a80a747aa19e89 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Thu, 12 Dec 2019 23:11:07 +0100 Subject: [PATCH] Support rendering definition lists --- elements.go | 27 +++++++++++++++++++++++++++ gold.go | 5 ++++- style.go | 11 +++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/elements.go b/elements.go index 5601044..9b92920 100644 --- a/elements.go +++ b/elements.go @@ -299,6 +299,33 @@ func (tr *TermRenderer) NewElement(node ast.Node, source []byte) Element { }, } + // Definition Lists + case astext.KindDefinitionList: + e := &BlockElement{ + Block: &bytes.Buffer{}, + Style: cascadeStyle(ctx.blockStack.Current().Style, ctx.style[DefinitionList], true), + Margin: true, + } + return Element{ + Entering: "\n", + Renderer: e, + Finisher: e, + } + + case astext.KindDefinitionTerm: + return Element{ + Renderer: &BaseElement{ + Style: ctx.style[DefinitionTerm], + }, + } + + case astext.KindDefinitionDescription: + return Element{ + Renderer: &BaseElement{ + Style: ctx.style[DefinitionDescription], + }, + } + // Handled by parents case astext.KindTaskCheckBox: // handled by KindListItem diff --git a/gold.go b/gold.go index 2d5885b..ebbfa6f 100644 --- a/gold.go +++ b/gold.go @@ -91,7 +91,10 @@ func (tr *TermRenderer) Render(in string) string { // RenderBytes returns the markdown rendered into a byte slice. func (tr *TermRenderer) RenderBytes(in []byte) []byte { md := goldmark.New( - goldmark.WithExtensions(extension.GFM), + goldmark.WithExtensions( + extension.GFM, + extension.DefinitionList, + ), goldmark.WithParserOptions( parser.WithAutoHeadingID(), ), diff --git a/style.go b/style.go index 765795b..9159ff3 100644 --- a/style.go +++ b/style.go @@ -54,6 +54,11 @@ const ( TableBody TableRow + // Definition Lists + DefinitionList + DefinitionTerm + DefinitionDescription + // HTML styles HTMLBlock HTMLSpan @@ -310,6 +315,12 @@ func keyToType(key string) (StyleType, error) { return TableBody, nil case "table_row": return TableRow, nil + case "definition_list": + return DefinitionList, nil + case "definition_term": + return DefinitionTerm, nil + case "definition_description": + return DefinitionDescription, nil default: return 0, fmt.Errorf("invalid style element type: %s", key)