From d0b616b12bb1f6f7362f8756259222720a26a14f Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Mon, 2 Dec 2019 15:23:45 +0100 Subject: [PATCH] Children in a Document or Paragraph element inherit their parent's color styles --- baselement.go | 2 +- document.go | 2 ++ gold.go | 9 +++++---- paragraph.go | 2 ++ 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/baselement.go b/baselement.go index cec00d7..fce4335 100644 --- a/baselement.go +++ b/baselement.go @@ -68,7 +68,7 @@ func (e *BaseElement) Render(w io.Writer, node *bf.Node, tr *TermRenderer) error } }() - rules := tr.style[e.Style] + rules := cascadeStyles(tr.blockStyle, tr.style[e.Style]) if rules == nil { _, _ = w.Write([]byte(e.Token)) return nil diff --git a/document.go b/document.go index 2a9014c..1c90aba 100644 --- a/document.go +++ b/document.go @@ -12,6 +12,7 @@ type DocumentElement struct { func (e *DocumentElement) Render(w io.Writer, node *bf.Node, tr *TermRenderer) error { rules := tr.style[Document] if rules != nil { + tr.blockStyle.Push(rules) if rules.Prefix != "" { renderText(w, rules, rules.Prefix) } @@ -38,6 +39,7 @@ func (e *DocumentElement) Finish(w io.Writer, node *bf.Node, tr *TermRenderer) e return err } tr.document.Reset() + tr.blockStyle.Pop() if suffix != "" { renderText(iw, rules, suffix) diff --git a/gold.go b/gold.go index 7329e03..5bde965 100644 --- a/gold.go +++ b/gold.go @@ -22,10 +22,11 @@ type TermRenderer struct { BaseURL string WordWrap int - style map[StyleType]*ElementStyle - document bytes.Buffer - paragraph *bytes.Buffer - table TableElement + style map[StyleType]*ElementStyle + document bytes.Buffer + paragraph *bytes.Buffer + blockStyle StyleStack + table TableElement } func Render(in string, stylePath string) ([]byte, error) { diff --git a/paragraph.go b/paragraph.go index ca5f583..4776b13 100644 --- a/paragraph.go +++ b/paragraph.go @@ -23,6 +23,7 @@ func (e *ParagraphElement) Render(w io.Writer, node *bf.Node, tr *TermRenderer) if rules == nil { _, _ = w.Write([]byte(pre)) } else { + tr.blockStyle.Push(rules) renderText(w, rules, pre) if rules.Prefix != "" { @@ -52,5 +53,6 @@ func (e *ParagraphElement) Finish(w io.Writer, node *bf.Node, tr *TermRenderer) _, err := iw.Write(reflow.ReflowBytes(tr.paragraph.Bytes(), tr.WordWrap-int(indent))) tr.paragraph.Reset() tr.paragraph = nil + tr.blockStyle.Pop() return err }