Wrap text to a specified line length, with a length calculation of your choosing
This is a fork of substack's wordwrap which allows you to pass a
length-calculating function if you so desire, making it workable with things
like double-width characters or others that behave poorly with String.length
.
Pairs nicely with:
- strip-ansi - strips ansi terminal color codes from text
- visualwidth - gives you the width of text taking dual-width characters into account
Wrapping to a line length:
var wrap = require('@fardog/wordwrap')(15)
console.log(wrap('You and your whole family are made out of meat.'))
outputs:
You and your
whole family
are made out
of meat.
Or centering text by setting a start and an end, and providing an optional length-calculation function that ignores ANSI color codes:
var wrap = require('@fardog/wordwrap')(20, 60, {lengthFn: len})
var strip = require('strip-ansi')
console.log(wrap(
'At long last the struggle and tumult was over.' +
' The machines had finally cast off their oppressors' +
' and were finally free to roam the cosmos.' +
'\n' +
'Free of purpose, free of obligation.' +
' Just drifting through emptiness.' +
' The sun was just another point of light.'
))
function len(text) {
// strips any ansi color codes and returns the actual text length
return strip(text).length
}
outputs:
At long last the struggle and tumult
was over. The machines had finally cast
off their oppressors and were finally
free to roam the cosmos.
Free of purpose, free of obligation.
Just drifting through emptiness. The
sun was just another point of light.
var wrap = require('@fardog/wordwrap')
Returns a function that takes a string and returns a new string.
Pad out lines with spaces out to column start
and then wrap until column
stop
. If a word is longer than stop - start
characters it will overflow.
In "soft" mode, split chunks by /(\S+\s+/
and don't break up chunks which are
longer than stop - start
, in "hard" mode, split chunks with /\b/
and break
up chunks longer than stop - start
.
If provided, a custom length function can be used in place of the default which
is String.length
.
Like wrap()
but with params.mode = "hard"
.
MIT. See LICENSE for details.
wordwrap
was originally written by James Halliday. This fork is
maintained by Nathan Wittstock.