Blame view

node_modules/text-table/index.js 2.37 KB
ce4c83ff   wxy   初始提交
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
  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;
  }