wrap

package module
v2.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 2, 2021 License: MIT Imports: 2 Imported by: 3

README

wrap Go Reference GitHub tag license Go Report Card codecov

An efficient and flexible word-wrapping package for Go (golang)

Usage

var loremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate quam nibh, et faucibus enim gravida vel. Integer bibendum lectus et erat semper fermentum quis a risus. Fusce dignissim tempus metus non pretium. Nunc sagittis magna nec purus porttitor mollis. Pellentesque feugiat quam eget laoreet aliquet. Donec gravida congue massa, et sollicitudin turpis lacinia a. Fusce non tortor magna. Cras vel finibus tellus."

// Wrap when lines exceed 80 chars.
fmt.Println(wrap.Wrap(loremIpsum, 80))
// Output:
// Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate quam
// nibh, et faucibus enim gravida vel. Integer bibendum lectus et erat semper
// fermentum quis a risus. Fusce dignissim tempus metus non pretium. Nunc sagittis
// magna nec purus porttitor mollis. Pellentesque feugiat quam eget laoreet
// aliquet. Donec gravida congue massa, et sollicitudin turpis lacinia a. Fusce non
// tortor magna. Cras vel finibus tellus.
var loremIpsum = "/* Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate quam nibh, et faucibus enim gravida vel. Integer bibendum lectus et erat semper fermentum quis a risus. Fusce dignissim tempus metus non pretium. Nunc sagittis magna nec purus porttitor mollis. Pellentesque feugiat quam eget laoreet aliquet. Donec gravida congue massa, et sollicitudin turpis lacinia a. Fusce non tortor magna. Cras vel finibus tellus. */"

w := wrap.NewWrapper()

// Trim the single-line block comment symbols from each input line.
w.TrimInputPrefix = "/* "
w.TrimInputSuffix = " */"

// Prefix each new line with a single-line comment symbol.
w.OutputLinePrefix = "// "

// Wrap when lines exceed 80 chars.
fmt.Println(w.Wrap(loremIpsum, 80))
// Output:
// // Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate quam
// // nibh, et faucibus enim gravida vel. Integer bibendum lectus et erat semper
// // fermentum quis a risus. Fusce dignissim tempus metus non pretium. Nunc
// // sagittis magna nec purus porttitor mollis. Pellentesque feugiat quam eget
// // laoreet aliquet. Donec gravida congue massa, et sollicitudin turpis lacinia
// // a. Fusce non tortor magna. Cras vel finibus tellus.
Advanced Usage and more examples (custom breakpoints, prefixes, suffixes, etc.)

See godoc.org/github.com/bbrks/wrap for more examples using the Wrapper type to provide custom breakpoints, prefixes, suffixes, etc.

Contributing

Issues, feature requests or improvements welcome!

License

This project is licensed under the MIT License.

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Wrap

func Wrap(s string, limit int) string

Wrap is shorthand for declaring a new default Wrapper calling its Wrap method

Example
var loremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate quam nibh, et faucibus enim gravida vel. Integer bibendum lectus et erat semper fermentum quis a risus. Fusce dignissim tempus metus non pretium. Nunc sagittis magna nec purus porttitor mollis. Pellentesque feugiat quam eget laoreet aliquet. Donec gravida congue massa, et sollicitudin turpis lacinia a. Fusce non tortor magna. Cras vel finibus tellus."

// Wrap when lines exceed 80 chars.
fmt.Println(wrap.Wrap(loremIpsum, 80))
Output:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate quam
nibh, et faucibus enim gravida vel. Integer bibendum lectus et erat semper
fermentum quis a risus. Fusce dignissim tempus metus non pretium. Nunc sagittis
magna nec purus porttitor mollis. Pellentesque feugiat quam eget laoreet
aliquet. Donec gravida congue massa, et sollicitudin turpis lacinia a. Fusce non
tortor magna. Cras vel finibus tellus.

Types

type Wrapper

type Wrapper struct {
	// Breakpoints defines which characters should be able to break a line.
	// By default, this follows the usual English rules of spaces, and hyphens.
	// Default: " -"
	Breakpoints string

	// Newline defines which characters should be used to split and create new lines.
	// Default: "\n"
	Newline string

	// OutputLinePrefix is prepended to any output lines. This can be useful
	// for wrapping code-comments and prefixing new lines with "// ".
	// Default: ""
	OutputLinePrefix string

	// OutputLineSuffix is appended to any output lines.
	// Default: ""
	OutputLineSuffix string

	// LimitIncludesPrefixSuffix can be set to false if you don't want prefixes
	// and suffixes to be included in the length limits.
	// Default: true
	LimitIncludesPrefixSuffix bool

	// TrimPrefix can be set to remove a prefix on each input line.
	// This can be paired up with OutputPrefix to create a block of C-style
	// comments (/* * */ ) from a long single-line comment.
	// Default: ""
	TrimInputPrefix string

	// TrimSuffix can be set to remove a suffix on each input line.
	// Default: ""
	TrimInputSuffix string

	// StripTrailingNewline can be set to true if you want the trailing
	// newline to be removed from the return value.
	// Default: false
	StripTrailingNewline bool

	// CutLongWords will cause a hard-wrap in the middle of a word if the word's length exceeds the given limit.
	CutLongWords bool
}

Wrapper contains settings for customisable word-wrapping.

func NewWrapper

func NewWrapper() Wrapper

NewWrapper returns a new instance of a Wrapper initialised with defaults.

func (Wrapper) Wrap

func (w Wrapper) Wrap(s string, limit int) string

Wrap will wrap one or more lines of text at the given length. If limit is less than 1, the string remains unwrapped.

Example
var loremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate quam nibh, et faucibus enim gravida vel. Integer bibendum lectus et erat semper fermentum quis a risus. Fusce dignissim tempus metus non pretium. Nunc sagittis magna nec purus porttitor mollis. Pellentesque feugiat quam eget laoreet aliquet. Donec gravida congue massa, et sollicitudin turpis lacinia a. Fusce non tortor magna. Cras vel finibus tellus."

w := wrap.NewWrapper()

// Wrap when lines exceed 80 chars.
fmt.Println(w.Wrap(loremIpsum, 80))
Output:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate quam
nibh, et faucibus enim gravida vel. Integer bibendum lectus et erat semper
fermentum quis a risus. Fusce dignissim tempus metus non pretium. Nunc sagittis
magna nec purus porttitor mollis. Pellentesque feugiat quam eget laoreet
aliquet. Donec gravida congue massa, et sollicitudin turpis lacinia a. Fusce non
tortor magna. Cras vel finibus tellus.
Example (Hyphens)
var loremIpsum = `
In this particular example, I will spam a lot of hyphenated words, which should wrap at some point, and test the multi-breakpoint feature of this package.

The girl was accident-prone, good-looking, quick-thinking, carbon-neutral, bad-tempered, sport-mad, fair-haired, camera-ready, and finally open-mouthed.
`

w := wrap.NewWrapper()

fmt.Println(w.Wrap(loremIpsum, 80))
Output:

In this particular example, I will spam a lot of hyphenated words, which should
wrap at some point, and test the multi-breakpoint feature of this package.

The girl was accident-prone, good-looking, quick-thinking, carbon-neutral, bad
tempered, sport-mad, fair-haired, camera-ready, and finally open-mouthed.
Example (Paragraphs)
var loremIpsum = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. In pulvinar augue vel dui gravida, sed convallis ante aliquam. Morbi euismod felis in justo lobortis, eu egestas quam cursus. Ut ut tellus mattis, porttitor leo ut, porttitor ex. Nulla suscipit molestie ligula, quis porta nulla pellentesque ac. Cras ut vestibulum orci. Phasellus ante nisl, dignissim non nunc eget, dapibus convallis orci. Integer vel euismod mauris. Integer tortor elit, vestibulum eget augue vitae, vehicula commodo sapien. Integer iaculis maximus dui, vitae rutrum magna congue at. Praesent varius quam vitae rhoncus fringilla. Quisque ac ex sit amet enim aliquam rutrum in in tortor. Sed sit amet est finibus, congue purus et, ultrices quam. Aenean felis velit, ullamcorper at sagittis ut, aliquam eu mauris.

Phasellus vel lorem venenatis, condimentum risus quis, ultricies risus. Vivamus porttitor lorem sit amet bibendum congue. Mauris sem enim, rutrum in ipsum eget, porttitor placerat diam. Pellentesque ut pharetra augue. Maecenas in ante eget ex efficitur tincidunt. Cras ut ultrices nisl. Donec tristique tincidunt eros condimentum tempus. Morbi libero urna, pretium id turpis vel, cursus efficitur orci. Mauris ut elit felis. Duis ultrices nisl eget accumsan consectetur. Nullam blandit elit vel vulputate scelerisque. Nulla facilisi. Cras quis maximus odio. Nam orci est, tempor ac arcu eget, tincidunt consectetur risus. Donec quis faucibus velit.

Maecenas rhoncus semper nisi non luctus. Nam accumsan malesuada urna vel vehicula. Nullam quis dui in augue tristique sollicitudin. Praesent vulputate condimentum vestibulum. Morbi tincidunt consectetur velit non accumsan. Praesent sit amet vestibulum purus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla rhoncus urna ut aliquet congue. Sed ornare dignissim orci non imperdiet. Maecenas nec magna bibendum, cursus nisi ac, commodo arcu.

Sed auctor id leo at molestie. Donec sed cursus massa. Morbi semper lobortis dui. Sed mattis sem a molestie sodales. Cras consequat sapien semper, pretium nulla a, dignissim massa. Aliquam non ornare lacus. Cras gravida lorem tellus, et consectetur ante sodales ut.

Nunc mi enim, aliquam quis bibendum sed, commodo quis nulla. Aliquam vulputate arcu a volutpat semper. Donec nec mauris eros. Suspendisse velit ante, fermentum a odio non, porta dignissim nunc. Vestibulum condimentum at massa at malesuada. Etiam augue purus, interdum a est pretium, cursus interdum eros. Vestibulum et ligula dignissim, suscipit arcu et, congue sem. Integer posuere mauris id scelerisque sagittis. Proin cursus congue sem, nec pulvinar neque auctor eget. Suspendisse vitae mi ipsum. Nullam sed mauris posuere, accumsan ligula vitae, viverra tellus. Morbi quam turpis, sagittis vitae arcu vel, tempus sagittis neque. Vivamus dolor purus, blandit ac condimentum a, interdum in ipsum.`

w := wrap.NewWrapper()

fmt.Println(w.Wrap(loremIpsum, 80))
Output:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. In pulvinar augue vel
dui gravida, sed convallis ante aliquam. Morbi euismod felis in justo lobortis,
eu egestas quam cursus. Ut ut tellus mattis, porttitor leo ut, porttitor ex.
Nulla suscipit molestie ligula, quis porta nulla pellentesque ac. Cras ut
vestibulum orci. Phasellus ante nisl, dignissim non nunc eget, dapibus convallis
orci. Integer vel euismod mauris. Integer tortor elit, vestibulum eget augue
vitae, vehicula commodo sapien. Integer iaculis maximus dui, vitae rutrum magna
congue at. Praesent varius quam vitae rhoncus fringilla. Quisque ac ex sit amet
enim aliquam rutrum in in tortor. Sed sit amet est finibus, congue purus et,
ultrices quam. Aenean felis velit, ullamcorper at sagittis ut, aliquam eu
mauris.

Phasellus vel lorem venenatis, condimentum risus quis, ultricies risus. Vivamus
porttitor lorem sit amet bibendum congue. Mauris sem enim, rutrum in ipsum eget,
porttitor placerat diam. Pellentesque ut pharetra augue. Maecenas in ante eget
ex efficitur tincidunt. Cras ut ultrices nisl. Donec tristique tincidunt eros
condimentum tempus. Morbi libero urna, pretium id turpis vel, cursus efficitur
orci. Mauris ut elit felis. Duis ultrices nisl eget accumsan consectetur. Nullam
blandit elit vel vulputate scelerisque. Nulla facilisi. Cras quis maximus odio.
Nam orci est, tempor ac arcu eget, tincidunt consectetur risus. Donec quis
faucibus velit.

Maecenas rhoncus semper nisi non luctus. Nam accumsan malesuada urna vel
vehicula. Nullam quis dui in augue tristique sollicitudin. Praesent vulputate
condimentum vestibulum. Morbi tincidunt consectetur velit non accumsan. Praesent
sit amet vestibulum purus. Orci varius natoque penatibus et magnis dis
parturient montes, nascetur ridiculus mus. Nulla rhoncus urna ut aliquet congue.
Sed ornare dignissim orci non imperdiet. Maecenas nec magna bibendum, cursus
nisi ac, commodo arcu.

Sed auctor id leo at molestie. Donec sed cursus massa. Morbi semper lobortis
dui. Sed mattis sem a molestie sodales. Cras consequat sapien semper, pretium
nulla a, dignissim massa. Aliquam non ornare lacus. Cras gravida lorem tellus,
et consectetur ante sodales ut.

Nunc mi enim, aliquam quis bibendum sed, commodo quis nulla. Aliquam vulputate
arcu a volutpat semper. Donec nec mauris eros. Suspendisse velit ante, fermentum
a odio non, porta dignissim nunc. Vestibulum condimentum at massa at malesuada.
Etiam augue purus, interdum a est pretium, cursus interdum eros. Vestibulum et
ligula dignissim, suscipit arcu et, congue sem. Integer posuere mauris id
scelerisque sagittis. Proin cursus congue sem, nec pulvinar neque auctor eget.
Suspendisse vitae mi ipsum. Nullam sed mauris posuere, accumsan ligula vitae,
viverra tellus. Morbi quam turpis, sagittis vitae arcu vel, tempus sagittis
neque. Vivamus dolor purus, blandit ac condimentum a, interdum in ipsum.
Example (Prefix)
var loremIpsum = "/* Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate quam nibh, et faucibus enim gravida vel. Integer bibendum lectus et erat semper fermentum quis a risus. Fusce dignissim tempus metus non pretium. Nunc sagittis magna nec purus porttitor mollis. Pellentesque feugiat quam eget laoreet aliquet. Donec gravida congue massa, et sollicitudin turpis lacinia a. Fusce non tortor magna. Cras vel finibus tellus. */"

w := wrap.NewWrapper()

// Trim the single-line block comment symbols from each input line.
w.TrimInputPrefix = "/* "
w.TrimInputSuffix = " */"

// Prefix each new line with a single-line comment symbol.
w.OutputLinePrefix = "// "

// Wrap when lines exceed 80 chars.
fmt.Println(w.Wrap(loremIpsum, 80))
Output:

// Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate quam
// nibh, et faucibus enim gravida vel. Integer bibendum lectus et erat semper
// fermentum quis a risus. Fusce dignissim tempus metus non pretium. Nunc
// sagittis magna nec purus porttitor mollis. Pellentesque feugiat quam eget
// laoreet aliquet. Donec gravida congue massa, et sollicitudin turpis lacinia
// a. Fusce non tortor magna. Cras vel finibus tellus.
Example (Short)
var loremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate quam nibh, et faucibus enim gravida vel. Integer bibendum lectus et erat semper fermentum quis a risus. Fusce dignissim tempus metus non pretium. Nunc sagittis magna nec purus porttitor mollis. Pellentesque feugiat quam eget laoreet aliquet. Donec gravida congue massa, et sollicitudin turpis lacinia a. Fusce non tortor magna. Cras vel finibus tellus."

w := wrap.NewWrapper()

// Wrap on every word.
fmt.Println(w.Wrap(loremIpsum, 1))
Output:

Lorem
ipsum
dolor
sit
amet,
consectetur
adipiscing
elit.
Sed
vulputate
quam
nibh,
et
faucibus
enim
gravida
vel.
Integer
bibendum
lectus
et
erat
semper
fermentum
quis
a
risus.
Fusce
dignissim
tempus
metus
non
pretium.
Nunc
sagittis
magna
nec
purus
porttitor
mollis.
Pellentesque
feugiat
quam
eget
laoreet
aliquet.
Donec
gravida
congue
massa,
et
sollicitudin
turpis
lacinia
a.
Fusce
non
tortor
magna.
Cras
vel
finibus
tellus.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL