mirror of
https://github.com/rwinkhart/glamour-temp-MUTN.git
synced 2026-08-30 21:56:44 -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)
|
||||
if len(strings.TrimSpace(bs.Current().Block.String())) > 0 {
|
||||
flow := wordwrap.NewWriter(int(bs.Width(ctx)))
|
||||
flow.KeepNewlines = false
|
||||
flow.KeepNewlines = ctx.options.PreserveNewLines
|
||||
_, _ = flow.Write(bs.Current().Block.Bytes())
|
||||
flow.Close()
|
||||
|
||||
|
||||
+5
-4
@@ -15,10 +15,11 @@ import (
|
||||
|
||||
// Options is used to configure an ANSIRenderer.
|
||||
type Options struct {
|
||||
BaseURL string
|
||||
WordWrap int
|
||||
ColorProfile termenv.Profile
|
||||
Styles StyleConfig
|
||||
BaseURL string
|
||||
WordWrap int
|
||||
PreserveNewLines bool
|
||||
ColorProfile termenv.Profile
|
||||
Styles StyleConfig
|
||||
}
|
||||
|
||||
// ANSIRenderer renders markdown content as ANSI escaped sequences.
|
||||
|
||||
@@ -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.
|
||||
func WithEmoji() TermRendererOption {
|
||||
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) {
|
||||
_, err := NewTermRenderer(
|
||||
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