arnaucube
arnaucube/socketioMEANseedPublic Self-hosted repository
socketioMEANseed/www/node_modules/wordwrap/index.js
www/node_modules/wordwrap/index.jsRaw
 1var 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
72wordwrap.soft = wordwrap;
73
74wordwrap.hard = function (start, stop) {
75    return wordwrap(start, stop, { mode : 'hard' });
76};