--- /dev/null
+// 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;
+ }
+};