mirror of
https://gitea.com/gitea/tea.git
synced 2024-11-29 22:06:52 +01:00
53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
|
package ansi
|
||
|
|
||
|
import (
|
||
|
"io"
|
||
|
|
||
|
"github.com/muesli/reflow/indent"
|
||
|
"github.com/muesli/reflow/padding"
|
||
|
)
|
||
|
|
||
|
// MarginWriter is a Writer that applies indentation and padding around
|
||
|
// whatever you write to it.
|
||
|
type MarginWriter struct {
|
||
|
w io.Writer
|
||
|
pw *padding.Writer
|
||
|
iw *indent.Writer
|
||
|
}
|
||
|
|
||
|
// NewMarginWriter returns a new MarginWriter.
|
||
|
func NewMarginWriter(ctx RenderContext, w io.Writer, rules StyleBlock) *MarginWriter {
|
||
|
bs := ctx.blockStack
|
||
|
|
||
|
var indentation uint
|
||
|
var margin uint
|
||
|
if rules.Indent != nil {
|
||
|
indentation = *rules.Indent
|
||
|
}
|
||
|
if rules.Margin != nil {
|
||
|
margin = *rules.Margin
|
||
|
}
|
||
|
|
||
|
pw := padding.NewWriterPipe(w, bs.Width(ctx), func(wr io.Writer) {
|
||
|
renderText(w, ctx.options.ColorProfile, rules.StylePrimitive, " ")
|
||
|
})
|
||
|
|
||
|
ic := " "
|
||
|
if rules.IndentToken != nil {
|
||
|
ic = *rules.IndentToken
|
||
|
}
|
||
|
iw := indent.NewWriterPipe(pw, indentation+margin, func(wr io.Writer) {
|
||
|
renderText(w, ctx.options.ColorProfile, bs.Parent().Style.StylePrimitive, ic)
|
||
|
})
|
||
|
|
||
|
return &MarginWriter{
|
||
|
w: w,
|
||
|
pw: pw,
|
||
|
iw: iw,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (w *MarginWriter) Write(b []byte) (int, error) {
|
||
|
return w.iw.Write(b)
|
||
|
}
|