wrap.js
2.18 KB
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// Wrap
// wraps a string by a certain width
var makeString = require('./helper/makeString');
module.exports = function wrap(str, options){
str = makeString(str);
options = options || {};
var width = options.width || 75;
var seperator = options.seperator || '\n';
var cut = options.cut || false;
var preserveSpaces = options.preserveSpaces || false;
var trailingSpaces = options.trailingSpaces || false;
var result;
if(width <= 0){
return str;
}
else if(!cut){
var words = str.split(" ");
var current_column = 0;
result = "";
while(words.length > 0){
// if adding a space and the next word would cause this line to be longer than width...
if(1 + words[0].length + current_column > width){
//start a new line if this line is not already empty
if(current_column > 0){
// add a space at the end of the line is preserveSpaces is true
if (preserveSpaces){
result += ' ';
current_column++;
}
// fill the rest of the line with spaces if trailingSpaces option is true
else if(trailingSpaces){
while(current_column < width){
result += ' ';
current_column++;
}
}
//start new line
result += seperator;
current_column = 0;
}
}
// if not at the begining of the line, add a space in front of the word
if(current_column > 0){
result += " ";
current_column++;
}
// tack on the next word, update current column, a pop words array
result += words[0];
current_column += words[0].length;
words.shift();
}
// fill the rest of the line with spaces if trailingSpaces option is true
if(trailingSpaces){
while(current_column < width){
result += ' ';
current_column++;
}
}
return result;
}
else {
var index = 0;
result = "";
// walk through each character and add seperators where appropriate
while(index < str.length){
if(index % width == 0 && index > 0){
result += seperator;
}
result += str.charAt(index);
index++;
}
// fill the rest of the line with spaces if trailingSpaces option is true
if(trailingSpaces){
while(index % width > 0){
result += ' ';
index++;
}
}
return result;
}
};