Move stateful objects to RenderContext struct

This commit is contained in:
Christian Muehlhaeuser
2019-12-07 15:40:42 +01:00
parent 53c220c9fc
commit 665477d690
12 changed files with 129 additions and 89 deletions
+15 -11
View File
@@ -11,25 +11,27 @@ type HeadingElement struct {
}
func (e *HeadingElement) Render(w io.Writer, node *bf.Node, tr *TermRenderer) error {
var indent uint
var margin uint
rules := tr.style[Heading]
ctx := tr.context
bs := ctx.blockStack
rules := ctx.style[Heading]
switch node.HeadingData.Level {
case 1:
rules = cascadeStyles(false, rules, tr.style[H1])
rules = cascadeStyles(false, rules, ctx.style[H1])
case 2:
rules = cascadeStyles(false, rules, tr.style[H2])
rules = cascadeStyles(false, rules, ctx.style[H2])
case 3:
rules = cascadeStyles(false, rules, tr.style[H3])
rules = cascadeStyles(false, rules, ctx.style[H3])
case 4:
rules = cascadeStyles(false, rules, tr.style[H4])
rules = cascadeStyles(false, rules, ctx.style[H4])
case 5:
rules = cascadeStyles(false, rules, tr.style[H5])
rules = cascadeStyles(false, rules, ctx.style[H5])
case 6:
rules = cascadeStyles(false, rules, tr.style[H6])
rules = cascadeStyles(false, rules, ctx.style[H6])
}
var indent uint
var margin uint
if rules.Indent != nil {
indent = *rules.Indent
}
@@ -40,14 +42,16 @@ func (e *HeadingElement) Render(w io.Writer, node *bf.Node, tr *TermRenderer) er
iw := &IndentWriter{
Indent: indent + margin,
IndentFunc: func(wr io.Writer) {
renderText(w, tr.blockStack.Parent().Style, " ")
renderText(w, bs.Parent().Style, " ")
},
Forward: &AnsiWriter{
Forward: w,
},
}
flow := reflow.NewReflow(tr.WordWrap - int(indent) - int(margin*2) - int(tr.blockStack.Indent()) - int(tr.blockStack.Margin())*2)
flow := reflow.NewReflow(tr.WordWrap -
int(indent) - int(margin*2) -
int(bs.Indent()) - int(bs.Margin())*2)
var pre string
if node.Prev != nil {