From f7244397d2f730b0d15930a8398747fc48fc7f4c Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Wed, 4 Dec 2019 06:59:53 +0100 Subject: [PATCH] Support margins in block elements --- codeblock.go | 4 +++- document.go | 8 +++++--- paragraph.go | 13 ++++++++----- table.go | 4 +++- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/codeblock.go b/codeblock.go index 12ad15e..14a9e18 100644 --- a/codeblock.go +++ b/codeblock.go @@ -15,14 +15,16 @@ type CodeBlockElement struct { func (e *CodeBlockElement) Render(w io.Writer, node *bf.Node, tr *TermRenderer) error { var theme string var indent uint + var margin uint rules := tr.style[CodeBlock] if rules != nil { indent = rules.Indent + margin = rules.Margin theme = rules.Theme } iw := &IndentWriter{ - Indent: indent, + Indent: indent + margin, IndentFunc: func(wr io.Writer) { renderText(w, tr.blockStyle.Parent(), " ") }, diff --git a/document.go b/document.go index d5a7cd7..28f270d 100644 --- a/document.go +++ b/document.go @@ -20,14 +20,16 @@ func (e *DocumentElement) Render(w io.Writer, node *bf.Node, tr *TermRenderer) e func (e *DocumentElement) Finish(w io.Writer, node *bf.Node, tr *TermRenderer) error { var indent uint - suffix := "" + var margin uint + var suffix string rules := tr.style[Document] if rules != nil { indent = rules.Indent + margin = rules.Margin suffix = rules.Suffix } pw := &PaddingWriter{ - Padding: uint(tr.WordWrap + int(indent*2)), + Padding: uint(tr.WordWrap) - margin, PadFunc: func(wr io.Writer) { renderText(w, rules, " ") }, @@ -36,7 +38,7 @@ func (e *DocumentElement) Finish(w io.Writer, node *bf.Node, tr *TermRenderer) e }, } iw := &IndentWriter{ - Indent: indent, + Indent: indent + margin, Forward: &AnsiWriter{ Forward: pw, }, diff --git a/paragraph.go b/paragraph.go index 7b4b7b1..66fed3c 100644 --- a/paragraph.go +++ b/paragraph.go @@ -31,21 +31,24 @@ func (e *ParagraphElement) Render(w io.Writer, node *bf.Node, tr *TermRenderer) func (e *ParagraphElement) Finish(w io.Writer, node *bf.Node, tr *TermRenderer) error { var indent uint - suffix := "" + var margin uint + var suffix string rules := tr.blockStyle.Current() if rules != nil { indent = rules.Indent + margin = rules.Margin suffix = rules.Suffix if node.Prev == nil || (node.Parent != nil && node.Parent.Type == bf.Item) { - // remove indent for list items + // remove indent & margin for list items indent = 0 + margin = 0 } } renderText(tr.paragraph, rules, suffix) pw := &PaddingWriter{ - Padding: uint(tr.WordWrap + int(indent) - int(tr.blockStyle.Indent())), + Padding: uint(tr.WordWrap - int(tr.blockStyle.Indent()) - int(tr.blockStyle.Margin()*2)), PadFunc: func(wr io.Writer) { renderText(w, rules, " ") }, @@ -54,7 +57,7 @@ func (e *ParagraphElement) Finish(w io.Writer, node *bf.Node, tr *TermRenderer) }, } iw := &IndentWriter{ - Indent: indent, + Indent: indent + margin, IndentFunc: func(wr io.Writer) { renderText(w, tr.blockStyle.Parent(), " ") }, @@ -63,7 +66,7 @@ func (e *ParagraphElement) Finish(w io.Writer, node *bf.Node, tr *TermRenderer) }, } - _, err := iw.Write(reflow.ReflowBytes(tr.paragraph.Bytes(), tr.WordWrap-int(tr.blockStyle.Indent()))) + _, err := iw.Write(reflow.ReflowBytes(tr.paragraph.Bytes(), tr.WordWrap-int(tr.blockStyle.Indent())-int(tr.blockStyle.Margin())*2)) if err != nil { return err } diff --git a/table.go b/table.go index 697373c..e82d96a 100644 --- a/table.go +++ b/table.go @@ -24,12 +24,14 @@ type TableCellElement struct { func (e *TableElement) Render(w io.Writer, node *bf.Node, tr *TermRenderer) error { var indent uint + var margin uint rules := tr.style[Table] if rules != nil { indent = rules.Indent + margin = rules.Margin } iw := &IndentWriter{ - Indent: indent, + Indent: indent + margin, IndentFunc: func(wr io.Writer) { renderText(w, tr.blockStyle.Parent(), " ") },