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