123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /**
- * Repeats a string.
- *
- * @param {String} char(s)
- * @param {Number} number of times
- * @return {String} repeated string
- */
- exports.repeat = function (str, times){
- return Array(times + 1).join(str);
- };
- /**
- * Pads a string
- *
- * @api public
- */
- exports.pad = function (str, len, pad, dir) {
- if (len + 1 >= str.length)
- switch (dir){
- case 'left':
- str = Array(len + 1 - str.length).join(pad) + str;
- break;
- case 'both':
- var right = Math.ceil((padlen = len - str.length) / 2);
- var left = padlen - right;
- str = Array(left + 1).join(pad) + str + Array(right + 1).join(pad);
- break;
- default:
- str = str + Array(len + 1 - str.length).join(pad);
- };
- return str;
- };
- /**
- * Truncates a string
- *
- * @api public
- */
- exports.truncate = function (str, length, chr){
- chr = chr || '…';
- return str.length >= length ? str.substr(0, length - chr.length) + chr : str;
- };
- /**
- * Copies and merges options with defaults.
- *
- * @param {Object} defaults
- * @param {Object} supplied options
- * @return {Object} new (merged) object
- */
- function options(defaults, opts) {
- for (var p in opts) {
- if (opts[p] && opts[p].constructor && opts[p].constructor === Object) {
- defaults[p] = defaults[p] || {};
- options(defaults[p], opts[p]);
- } else {
- defaults[p] = opts[p];
- }
- }
- return defaults;
- };
- exports.options = options;
- //
- // For consideration of terminal "color" programs like colors.js,
- // which can add ANSI escape color codes to strings,
- // we destyle the ANSI color escape codes for padding calculations.
- //
- // see: http://en.wikipedia.org/wiki/ANSI_escape_code
- //
- exports.strlen = function(str){
- var code = /\u001b\[(?:\d*;){0,5}\d*m/g;
- var stripped = ("" + str).replace(code,'');
- var split = stripped.split("\n");
- return split.reduce(function (memo, s) { return (s.length > memo) ? s.length : memo }, 0);
- }
|