mirror of
https://github.com/rwinkhart/glamour-temp-MUTN.git
synced 2026-08-30 21:56:44 -04:00
Make document indentable
This commit is contained in:
+4
-4
@@ -15,7 +15,7 @@ type BaseElement struct {
|
||||
Style StyleType
|
||||
}
|
||||
|
||||
func (e *BaseElement) renderText(w io.Writer, rules *ElementStyle, s string) {
|
||||
func renderText(w io.Writer, rules *ElementStyle, s string) {
|
||||
out := aurora.Reset(s)
|
||||
if rules.Color != "" {
|
||||
i, err := strconv.Atoi(rules.Color)
|
||||
@@ -72,14 +72,14 @@ func (e *BaseElement) Render(w io.Writer, node *bf.Node, tr *TermRenderer) error
|
||||
}
|
||||
|
||||
if rules.Prefix != "" {
|
||||
e.renderText(w, rules, rules.Prefix)
|
||||
renderText(w, rules, rules.Prefix)
|
||||
}
|
||||
defer func() {
|
||||
if rules.Suffix != "" {
|
||||
e.renderText(w, rules, rules.Suffix)
|
||||
renderText(w, rules, rules.Suffix)
|
||||
}
|
||||
}()
|
||||
|
||||
e.renderText(w, rules, e.Token)
|
||||
renderText(w, rules, e.Token)
|
||||
return nil
|
||||
}
|
||||
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package gold
|
||||
|
||||
import (
|
||||
"io"
|
||||
|
||||
bf "gopkg.in/russross/blackfriday.v2"
|
||||
)
|
||||
|
||||
type DocumentElement struct {
|
||||
}
|
||||
|
||||
func (e *DocumentElement) Render(w io.Writer, node *bf.Node, tr *TermRenderer) error {
|
||||
rules := tr.style[Document]
|
||||
if rules != nil {
|
||||
if rules.Prefix != "" {
|
||||
renderText(w, rules, rules.Prefix)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (e *DocumentElement) Finish(w io.Writer, node *bf.Node, tr *TermRenderer) error {
|
||||
var indent uint
|
||||
suffix := ""
|
||||
rules := tr.style[Document]
|
||||
if rules != nil {
|
||||
indent = rules.Indent
|
||||
suffix = rules.Suffix
|
||||
}
|
||||
|
||||
iw := &IndentWriter{
|
||||
Indent: indent,
|
||||
Forward: w,
|
||||
}
|
||||
|
||||
_, err := iw.Write(tr.document.Bytes())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
tr.document.Reset()
|
||||
|
||||
if suffix != "" {
|
||||
renderText(iw, rules, suffix)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
+3
-3
@@ -26,10 +26,10 @@ type Element struct {
|
||||
func (tr *TermRenderer) NewElement(node *bf.Node) Element {
|
||||
switch node.Type {
|
||||
case bf.Document:
|
||||
de := &DocumentElement{}
|
||||
return Element{
|
||||
Renderer: &BaseElement{
|
||||
Style: Document,
|
||||
},
|
||||
Renderer: de,
|
||||
Finisher: de,
|
||||
}
|
||||
case bf.BlockQuote:
|
||||
return Element{
|
||||
|
||||
@@ -23,8 +23,9 @@ type TermRenderer struct {
|
||||
WordWrap int
|
||||
|
||||
style map[StyleType]*ElementStyle
|
||||
table TableElement
|
||||
document bytes.Buffer
|
||||
paragraph *bytes.Buffer
|
||||
table TableElement
|
||||
}
|
||||
|
||||
func Render(in string, stylePath string) ([]byte, error) {
|
||||
@@ -85,6 +86,8 @@ func (tr *TermRenderer) RenderBytes(in []byte) []byte {
|
||||
}
|
||||
|
||||
func (tr *TermRenderer) RenderNode(w io.Writer, node *bf.Node, entering bool) bf.WalkStatus {
|
||||
writeTo := io.Writer(&tr.document)
|
||||
|
||||
if isChild(node) {
|
||||
return bf.GoToNext
|
||||
}
|
||||
@@ -92,10 +95,9 @@ func (tr *TermRenderer) RenderNode(w io.Writer, node *bf.Node, entering bool) bf
|
||||
e := tr.NewElement(node)
|
||||
if entering {
|
||||
if e.Entering != "" {
|
||||
_, _ = w.Write([]byte(e.Entering))
|
||||
_, _ = tr.document.Write([]byte(e.Entering))
|
||||
}
|
||||
|
||||
writeTo := w
|
||||
if node.Type == bf.Paragraph {
|
||||
tr.paragraph = &bytes.Buffer{}
|
||||
}
|
||||
@@ -111,8 +113,12 @@ func (tr *TermRenderer) RenderNode(w io.Writer, node *bf.Node, entering bool) bf
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if node.Type == bf.Document {
|
||||
writeTo = w
|
||||
}
|
||||
|
||||
if e.Finisher != nil {
|
||||
err := e.Finisher.Finish(w, node, tr)
|
||||
err := e.Finisher.Finish(writeTo, node, tr)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return bf.Terminate
|
||||
@@ -120,11 +126,10 @@ func (tr *TermRenderer) RenderNode(w io.Writer, node *bf.Node, entering bool) bf
|
||||
}
|
||||
|
||||
if node.Type == bf.Paragraph {
|
||||
_, _ = w.Write(tr.paragraph.Bytes())
|
||||
tr.paragraph = nil
|
||||
}
|
||||
if e.Exiting != "" {
|
||||
_, _ = w.Write([]byte(e.Exiting))
|
||||
_, _ = tr.document.Write([]byte(e.Exiting))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+16
-5
@@ -16,20 +16,31 @@ func (e *ParagraphElement) Render(w io.Writer, node *bf.Node, tr *TermRenderer)
|
||||
pre = ""
|
||||
}
|
||||
|
||||
el := &BaseElement{
|
||||
Prefix: pre,
|
||||
Token: string(node.Literal),
|
||||
Style: Paragraph,
|
||||
rules := tr.style[Paragraph]
|
||||
if rules == nil {
|
||||
_, _ = w.Write([]byte(pre))
|
||||
} else {
|
||||
renderText(w, rules, pre)
|
||||
|
||||
if rules.Prefix != "" {
|
||||
renderText(w, rules, rules.Prefix)
|
||||
}
|
||||
}
|
||||
return el.Render(w, node, tr)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (e *ParagraphElement) Finish(w io.Writer, node *bf.Node, tr *TermRenderer) error {
|
||||
var indent uint
|
||||
suffix := ""
|
||||
rules := tr.style[Paragraph]
|
||||
if rules != nil {
|
||||
indent = rules.Indent
|
||||
suffix = rules.Suffix
|
||||
}
|
||||
if suffix != "" {
|
||||
renderText(tr.paragraph, rules, suffix)
|
||||
}
|
||||
|
||||
iw := &IndentWriter{
|
||||
Indent: indent,
|
||||
Forward: w,
|
||||
|
||||
Reference in New Issue
Block a user