




A collection of ANSI-aware methods andio.Writers
helping you to transformblocks of text. This means you can still style your terminal output with ANSIescape sequences without them affecting the reflow operations & algorithms.
Thewordwrap
package lets you word-wrap strings or entire blocks of text.
import"github.com/muesli/reflow/wordwrap"s:=wordwrap.String("Hello World!",5)fmt.Println(s)
Result:
The word-wrapping Writer is compatible with theio.Writer
/io.WriteCloser
interfaces:
f:=wordwrap.NewWriter(limit)f.Write(b)f.Close()fmt.Println(f.String())
Customize word-wrapping behavior:
f:=wordwrap.NewWriter(limit)f.Breakpoints= []rune{':',','}f.Newline= []rune{'\r'}
Thewrap
package lets you unconditionally wrap strings or entire blocks of text.
import"github.com/muesli/reflow/wrap"s:=wrap.String("Hello World!",7)fmt.Println(s)
Result:
The unconditional wrapping Writer is compatible with theio.Writer
interfaces:
f:=wrap.NewWriter(limit)f.Write(b)fmt.Println(f.String())
Customize word-wrapping behavior:
f:=wrap.NewWriter(limit)f.Newline= []rune{'\r'}f.KeepNewlines=falsef.PreserveSpace=truef.TabWidth=2
Tip: This wrapping method can be used in conjunction with word-wrapping when word-wrapping is preferred but a line limit has to be enforced:
wrapped:=wrap.String(wordwrap.String("Just an example",5),5)fmt.Println(wrapped)
Result:
s:=wordwrap.String("I really\x1B[38;2;249;38;114mlove\x1B[0m Go!",8)fmt.Println(s)
Result:

Theindent
package lets you indent strings or entire blocks of text.
import"github.com/muesli/reflow/indent"s:=indent.String("Hello World!",4)fmt.Println(s)
Result:
There is also an indenting Writer, which is compatible with theio.Writer
interface:
// indent uses spaces per default:f:=indent.NewWriter(width,nil)// but you can also use a custom indentation function:f=indent.NewWriter(width,func(w io.Writer) {w.Write([]byte("."))})f.Write(b)f.Close()fmt.Println(f.String())
Thededent
package lets you dedent strings or entire blocks of text.
import"github.com/muesli/reflow/dedent"input:=` Hello World! Hello World!`s:=dedent.String(input)fmt.Println(s)
Result:
Thepadding
package lets you pad strings or entire blocks of text.
import"github.com/muesli/reflow/padding"s:=padding.String("Hello",8)fmt.Println(s)
Result:Hello___
(the underlined portion represents 3 spaces)
There is also a padding Writer, which is compatible with theio.WriteCloser
interface:
// padding uses spaces per default:f:=padding.NewWriter(width,nil)// but you can also use a custom padding function:f=padding.NewWriter(width,func(w io.Writer) {w.Write([]byte("."))})f.Write(b)f.Close()fmt.Println(f.String())