Blame view
node_modules/wordwrap/index.js
2.18 KB
f7563de62
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
var wordwrap = module.exports = function (start, stop, params) { if (typeof start === 'object') { params = start; start = params.start; stop = params.stop; } if (typeof stop === 'object') { params = stop; start = start || params.start; stop = undefined; } if (!stop) { stop = start; start = 0; } if (!params) params = {}; var mode = params.mode || 'soft'; var re = mode === 'hard' ? /\b/ : /(\S+\s+)/; return function (text) { var chunks = text.toString() .split(re) .reduce(function (acc, x) { if (mode === 'hard') { for (var i = 0; i < x.length; i += stop - start) { acc.push(x.slice(i, i + stop - start)); } } else acc.push(x) return acc; }, []) ; return chunks.reduce(function (lines, rawChunk) { if (rawChunk === '') return lines; var chunk = rawChunk.replace(/\t/g, ' '); var i = lines.length - 1; if (lines[i].length + chunk.length > stop) { lines[i] = lines[i].replace(/\s+$/, ''); chunk.split(/ /).forEach(function (c) { lines.push( new Array(start + 1).join(' ') + c.replace(/^\s+/, '') ); }); } else if (chunk.match(/ /)) { var xs = chunk.split(/ /); lines[i] += xs.shift(); xs.forEach(function (c) { lines.push( new Array(start + 1).join(' ') + c.replace(/^\s+/, '') ); }); } else { lines[i] += chunk; } return lines; }, [ new Array(start + 1).join(' ') ]).join(' '); }; }; wordwrap.soft = wordwrap; wordwrap.hard = function (start, stop) { return wordwrap(start, stop, { mode : 'hard' }); }; |