1 var wordwrap = module.exports = function (start, stop, params) {
2 if (typeof start === 'object') {
8 if (typeof stop === 'object') {
10 start = start || params.start;
19 if (!params) params = {};
20 var mode = params.mode || 'soft';
21 var re = mode === 'hard' ? /\b/ : /(\S+\s+)/;
23 return function (text) {
24 var chunks = text.toString()
26 .reduce(function (acc, x) {
27 if (mode === 'hard') {
28 for (var i = 0; i < x.length; i += stop - start) {
29 acc.push(x.slice(i, i + stop - start));
37 return chunks.reduce(function (lines, rawChunk) {
38 if (rawChunk === '') return lines;
40 var chunk = rawChunk.replace(/\t/g, ' ');
42 var i = lines.length - 1;
43 if (lines[i].length + chunk.length > stop) {
44 lines[i] = lines[i].replace(/\s+$/, '');
46 chunk.split(/\n/).forEach(function (c) {
48 new Array(start + 1).join(' ')
49 + c.replace(/^\s+/, '')
53 else if (chunk.match(/\n/)) {
54 var xs = chunk.split(/\n/);
55 lines[i] += xs.shift();
56 xs.forEach(function (c) {
58 new Array(start + 1).join(' ')
59 + c.replace(/^\s+/, '')
68 }, [ new Array(start + 1).join(' ') ]).join('\n');
72 wordwrap.soft = wordwrap;
74 wordwrap.hard = function (start, stop) {
75 return wordwrap(start, stop, { mode : 'hard' });