mirror of
https://github.com/rwinkhart/glamour-temp-MUTN.git
synced 2026-09-06 00:47:15 -04:00
Optionally Preserving New Lines (#115)
This commit is contained in:
+1
-1
@@ -38,7 +38,7 @@ func (e *ParagraphElement) Finish(w io.Writer, ctx RenderContext) error {
|
|||||||
mw := NewMarginWriter(ctx, w, rules)
|
mw := NewMarginWriter(ctx, w, rules)
|
||||||
if len(strings.TrimSpace(bs.Current().Block.String())) > 0 {
|
if len(strings.TrimSpace(bs.Current().Block.String())) > 0 {
|
||||||
flow := wordwrap.NewWriter(int(bs.Width(ctx)))
|
flow := wordwrap.NewWriter(int(bs.Width(ctx)))
|
||||||
flow.KeepNewlines = false
|
flow.KeepNewlines = ctx.options.PreserveNewLines
|
||||||
_, _ = flow.Write(bs.Current().Block.Bytes())
|
_, _ = flow.Write(bs.Current().Block.Bytes())
|
||||||
flow.Close()
|
flow.Close()
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import (
|
|||||||
type Options struct {
|
type Options struct {
|
||||||
BaseURL string
|
BaseURL string
|
||||||
WordWrap int
|
WordWrap int
|
||||||
|
PreserveNewLines bool
|
||||||
ColorProfile termenv.Profile
|
ColorProfile termenv.Profile
|
||||||
Styles StyleConfig
|
Styles StyleConfig
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -185,6 +185,14 @@ func WithWordWrap(wordWrap int) TermRendererOption {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithWordWrap sets a TermRenderer's word wrap.
|
||||||
|
func WithPreservedNewLines() TermRendererOption {
|
||||||
|
return func(tr *TermRenderer) error {
|
||||||
|
tr.ansiOptions.PreserveNewLines = true
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// WithEmoji sets a TermRenderer's emoji rendering.
|
// WithEmoji sets a TermRenderer's emoji rendering.
|
||||||
func WithEmoji() TermRendererOption {
|
func WithEmoji() TermRendererOption {
|
||||||
return func(tr *TermRenderer) error {
|
return func(tr *TermRenderer) error {
|
||||||
|
|||||||
@@ -113,6 +113,36 @@ func TestWithEmoji(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWithPreservedNewLines(t *testing.T) {
|
||||||
|
r, err := NewTermRenderer(
|
||||||
|
WithPreservedNewLines(),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
in, err := ioutil.ReadFile("testdata/preserved_newline.in")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
b, err := r.Render(string(in))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// verify
|
||||||
|
td, err := ioutil.ReadFile("testdata/preserved_newline.test")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !bytes.Equal(td, []byte(b)) {
|
||||||
|
t.Errorf("Rendered output doesn't match!\nExpected: `\n%s`\nGot: `\n%s`\n",
|
||||||
|
string(td), b)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestStyles(t *testing.T) {
|
func TestStyles(t *testing.T) {
|
||||||
_, err := NewTermRenderer(
|
_, err := NewTermRenderer(
|
||||||
WithAutoStyle(),
|
WithAutoStyle(),
|
||||||
|
|||||||
Vendored
+4
@@ -0,0 +1,4 @@
|
|||||||
|
Preserving line breaks will ensure
|
||||||
|
that this text displays on two separate lines
|
||||||
|
|
||||||
|
While this text appears on one line, it will wrap when the text meets the renderer's default value of 80 characters
|
||||||
Vendored
+5
@@ -0,0 +1,5 @@
|
|||||||
|
Preserving line breaks will ensure
|
||||||
|
that this text displays on two separate lines
|
||||||
|
|
||||||
|
While this text appears on one line, it will wrap when the text meets the
|
||||||
|
renderer's default value of 80 characters
|
||||||
Reference in New Issue
Block a user