103 lines
2.2 KiB
JavaScript
103 lines
2.2 KiB
JavaScript
|
// 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;
|
||
|
}
|
||
|
};
|