mirror of
https://github.com/rwinkhart/glamour-temp-MUTN.git
synced 2026-09-06 00:47:15 -04:00
Make document indentable
This commit is contained in:
+4
-4
@@ -15,7 +15,7 @@ type BaseElement struct {
|
|||||||
Style StyleType
|
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)
|
out := aurora.Reset(s)
|
||||||
if rules.Color != "" {
|
if rules.Color != "" {
|
||||||
i, err := strconv.Atoi(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 != "" {
|
if rules.Prefix != "" {
|
||||||
e.renderText(w, rules, rules.Prefix)
|
renderText(w, rules, rules.Prefix)
|
||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
if rules.Suffix != "" {
|
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
|
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 {
|
func (tr *TermRenderer) NewElement(node *bf.Node) Element {
|
||||||
switch node.Type {
|
switch node.Type {
|
||||||
case bf.Document:
|
case bf.Document:
|
||||||
|
de := &DocumentElement{}
|
||||||
return Element{
|
return Element{
|
||||||
Renderer: &BaseElement{
|
Renderer: de,
|
||||||
Style: Document,
|
Finisher: de,
|
||||||
},
|
|
||||||
}
|
}
|
||||||
case bf.BlockQuote:
|
case bf.BlockQuote:
|
||||||
return Element{
|
return Element{
|
||||||
|
|||||||
@@ -23,8 +23,9 @@ type TermRenderer struct {
|
|||||||
WordWrap int
|
WordWrap int
|
||||||
|
|
||||||
style map[StyleType]*ElementStyle
|
style map[StyleType]*ElementStyle
|
||||||
table TableElement
|
document bytes.Buffer
|
||||||
paragraph *bytes.Buffer
|
paragraph *bytes.Buffer
|
||||||
|
table TableElement
|
||||||
}
|
}
|
||||||
|
|
||||||
func Render(in string, stylePath string) ([]byte, error) {
|
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 {
|
func (tr *TermRenderer) RenderNode(w io.Writer, node *bf.Node, entering bool) bf.WalkStatus {
|
||||||
|
writeTo := io.Writer(&tr.document)
|
||||||
|
|
||||||
if isChild(node) {
|
if isChild(node) {
|
||||||
return bf.GoToNext
|
return bf.GoToNext
|
||||||
}
|
}
|
||||||
@@ -92,10 +95,9 @@ func (tr *TermRenderer) RenderNode(w io.Writer, node *bf.Node, entering bool) bf
|
|||||||
e := tr.NewElement(node)
|
e := tr.NewElement(node)
|
||||||
if entering {
|
if entering {
|
||||||
if e.Entering != "" {
|
if e.Entering != "" {
|
||||||
_, _ = w.Write([]byte(e.Entering))
|
_, _ = tr.document.Write([]byte(e.Entering))
|
||||||
}
|
}
|
||||||
|
|
||||||
writeTo := w
|
|
||||||
if node.Type == bf.Paragraph {
|
if node.Type == bf.Paragraph {
|
||||||
tr.paragraph = &bytes.Buffer{}
|
tr.paragraph = &bytes.Buffer{}
|
||||||
}
|
}
|
||||||
@@ -111,8 +113,12 @@ func (tr *TermRenderer) RenderNode(w io.Writer, node *bf.Node, entering bool) bf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if node.Type == bf.Document {
|
||||||
|
writeTo = w
|
||||||
|
}
|
||||||
|
|
||||||
if e.Finisher != nil {
|
if e.Finisher != nil {
|
||||||
err := e.Finisher.Finish(w, node, tr)
|
err := e.Finisher.Finish(writeTo, node, tr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return bf.Terminate
|
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 {
|
if node.Type == bf.Paragraph {
|
||||||
_, _ = w.Write(tr.paragraph.Bytes())
|
|
||||||
tr.paragraph = nil
|
tr.paragraph = nil
|
||||||
}
|
}
|
||||||
if e.Exiting != "" {
|
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 = ""
|
pre = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
el := &BaseElement{
|
rules := tr.style[Paragraph]
|
||||||
Prefix: pre,
|
if rules == nil {
|
||||||
Token: string(node.Literal),
|
_, _ = w.Write([]byte(pre))
|
||||||
Style: Paragraph,
|
} 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 {
|
func (e *ParagraphElement) Finish(w io.Writer, node *bf.Node, tr *TermRenderer) error {
|
||||||
var indent uint
|
var indent uint
|
||||||
|
suffix := ""
|
||||||
rules := tr.style[Paragraph]
|
rules := tr.style[Paragraph]
|
||||||
if rules != nil {
|
if rules != nil {
|
||||||
indent = rules.Indent
|
indent = rules.Indent
|
||||||
|
suffix = rules.Suffix
|
||||||
}
|
}
|
||||||
|
if suffix != "" {
|
||||||
|
renderText(tr.paragraph, rules, suffix)
|
||||||
|
}
|
||||||
|
|
||||||
iw := &IndentWriter{
|
iw := &IndentWriter{
|
||||||
Indent: indent,
|
Indent: indent,
|
||||||
Forward: w,
|
Forward: w,
|
||||||
|
|||||||
Reference in New Issue
Block a user