Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion glamour.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,16 @@ func RenderBytes(in []byte, stylePath string) ([]byte, error) {
return r.RenderBytes(in)
}

func RenderBytesTo(in []byte, stylePath string, w io.Writer) error {
r, err := NewTermRenderer(
WithStylePath(stylePath),
)
if err != nil {
return err
}
return r.RenderBytesTo(in, w)
}

// NewTermRenderer returns a new TermRenderer the given options.
func NewTermRenderer(options ...TermRendererOption) (*TermRenderer, error) {
tr := &TermRenderer{
Expand Down Expand Up @@ -290,10 +300,15 @@ func (tr *TermRenderer) Render(in string) (string, error) {
// RenderBytes returns the markdown rendered into a byte slice.
func (tr *TermRenderer) RenderBytes(in []byte) ([]byte, error) {
var buf bytes.Buffer
err := tr.md.Convert(in, &buf)
err := tr.RenderBytesTo(in, &buf)
return buf.Bytes(), err
}

// RenderBytesTo renders markdown into the provided writer.
func (tr *TermRenderer) RenderBytesTo(in []byte, w io.Writer) error {
return tr.md.Convert(in, w)
}

func getEnvironmentStyle() string {
glamourStyle := os.Getenv("GLAMOUR_STYLE")
if len(glamourStyle) == 0 {
Expand Down
56 changes: 56 additions & 0 deletions glamour_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -325,3 +325,59 @@ func TestWithChromaFormatterCustom(t *testing.T) {

golden.RequireEqual(t, []byte(b))
}

func TestRenderBytesTo(t *testing.T) {
in, err := os.ReadFile(markdown)
if err != nil {
t.Fatal(err)
}

var buf bytes.Buffer
err = RenderBytesTo(in, "dark", &buf)
if err != nil {
t.Fatal(err)
}

golden.RequireEqual(t, buf.Bytes())
}

func TestRenderBytesToWithCustomStyle(t *testing.T) {
in, err := os.ReadFile(markdown)
if err != nil {
t.Fatal(err)
}

var buf bytes.Buffer
err = RenderBytesTo(in, "testdata/custom.style", &buf)
if err != nil {
t.Fatal(err)
}

// Compare with expected output
r, err := NewTermRenderer(WithStylePath("testdata/custom.style"))
if err != nil {
t.Fatal(err)
}

expected, err := r.RenderBytes(in)
if err != nil {
t.Fatal(err)
}

if !bytes.Equal(expected, buf.Bytes()) {
t.Errorf("Output doesn't match expected result")
}
}

func TestRenderBytesToError(t *testing.T) {
in, err := os.ReadFile(markdown)
if err != nil {
t.Fatal(err)
}

var buf bytes.Buffer
err = RenderBytesTo(in, "non-existent-style", &buf)
if err == nil {
t.Error("Expected error for non-existent style, got nil")
}
}
Loading