| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | module.exports = function (rows_, opts) {    if (!opts) opts = {};    var hsep = opts.hsep === undefined ? '  ' : opts.hsep;    var align = opts.align || [];    var stringLength = opts.stringLength        || function (s) { return String(s).length; }    ;        var dotsizes = reduce(rows_, function (acc, row) {        forEach(row, function (c, ix) {            var n = dotindex(c);            if (!acc[ix] || n > acc[ix]) acc[ix] = n;        });        return acc;    }, []);        var rows = map(rows_, function (row) {        return map(row, function (c_, ix) {            var c = String(c_);            if (align[ix] === '.') {                var index = dotindex(c);                var size = dotsizes[ix] + (/\./.test(c) ? 1 : 2)                    - (stringLength(c) - index)                ;                return c + Array(size).join(' ');            }            else return c;        });    });        var sizes = reduce(rows, function (acc, row) {        forEach(row, function (c, ix) {            var n = stringLength(c);            if (!acc[ix] || n > acc[ix]) acc[ix] = n;        });        return acc;    }, []);        return map(rows, function (row) {        return map(row, function (c, ix) {            var n = (sizes[ix] - stringLength(c)) || 0;            var s = Array(Math.max(n + 1, 1)).join(' ');            if (align[ix] === 'r' || align[ix] === '.') {                return s + c;            }            if (align[ix] === 'c') {                return Array(Math.ceil(n / 2 + 1)).join(' ')                    + c + Array(Math.floor(n / 2 + 1)).join(' ')                ;            }                        return c + s;        }).join(hsep).replace(/\s+$/, '');    }).join('\n');};function dotindex (c) {    var m = /\.[^.]*$/.exec(c);    return m ? m.index + 1 : c.length;}function reduce (xs, f, init) {    if (xs.reduce) return xs.reduce(f, init);    var i = 0;    var acc = arguments.length >= 3 ? init : xs[i++];    for (; i < xs.length; i++) {        f(acc, xs[i], i);    }    return acc;}function forEach (xs, f) {    if (xs.forEach) return xs.forEach(f);    for (var i = 0; i < xs.length; i++) {        f.call(xs, xs[i], i);    }}function map (xs, f) {    if (xs.map) return xs.map(f);    var res = [];    for (var i = 0; i < xs.length; i++) {        res.push(f.call(xs, xs[i], i));    }    return res;}
 |