muflax 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/Gemfile.lock +1 -1
- data/lib/muflax/array.rb +1 -1
- data/lib/muflax/panes.rb +142 -0
- data/lib/muflax/table.rb +61 -0
- data/muflax.gemspec +1 -1
- data.tar.gz.sig +0 -0
- metadata +12 -10
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e18db37633af5a0f277d21797637376d2721b2e4
|
4
|
+
data.tar.gz: 497b57bad006b26bc036fc34923ce042a5152845
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 598dc5ef8f411290cd55b22f90a105633c6e97bbf3bb2f6aeb923abd82f3785b57daf7e5a0a3c51855533f3dd36fc7e90edafc3022df332bc06d534f6abd3b65
|
7
|
+
data.tar.gz: 951337d9166fd81021e323d5b1c86645199d874c4e936d2e0156669cf086dbb342bb4a18a27faf4dcc6df94503d42ab58c5d35e34ca0d00cee5e00bae67b761b
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/Gemfile.lock
CHANGED
data/lib/muflax/array.rb
CHANGED
data/lib/muflax/panes.rb
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- encoding: utf-8 -*-
|
3
|
+
# Copyright Stefan Dorn <mail@muflax.com>, 2017
|
4
|
+
# License: GNU GPLv3 (or later) <http://www.gnu.org/copyleft/gpl.html>
|
5
|
+
|
6
|
+
module Kernel
|
7
|
+
def clear_screen
|
8
|
+
print "\e[H\e[2J"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class Panes
|
13
|
+
class Section
|
14
|
+
attr_reader :lines
|
15
|
+
attr_accessor :divider
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
@lines = []
|
19
|
+
@divider = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def <<(line) ; @lines << line ; end
|
23
|
+
def size ; @lines.size ; end
|
24
|
+
def empty? ; @lines.empty? ; end
|
25
|
+
end
|
26
|
+
|
27
|
+
attr_reader :width, :height, :columns
|
28
|
+
attr_reader :column_width, :column_height
|
29
|
+
attr_reader :remaining_columns, :remaining_lines
|
30
|
+
attr_reader :sections
|
31
|
+
|
32
|
+
def initialize columns: 2, separator: "|", divider: "="
|
33
|
+
# can't be bigger than the terminal
|
34
|
+
@width, @height = HighLine::SystemExtensions.terminal_size
|
35
|
+
@separator = separator
|
36
|
+
@divider = divider
|
37
|
+
seps = (columns-1) * separator.size
|
38
|
+
@columns = columns
|
39
|
+
@column_width = @width / columns - seps
|
40
|
+
@column_height = @height
|
41
|
+
@sections = []
|
42
|
+
|
43
|
+
# keep track of drawing positions
|
44
|
+
@used_lines = 0
|
45
|
+
@need_divider = false
|
46
|
+
end
|
47
|
+
|
48
|
+
def last_section
|
49
|
+
@sections << Section.new if @sections.empty?
|
50
|
+
@sections.last
|
51
|
+
end
|
52
|
+
|
53
|
+
def new_section
|
54
|
+
@sections << Section.new unless last_section.empty?
|
55
|
+
@sections.last
|
56
|
+
end
|
57
|
+
|
58
|
+
def total_lines ; @height * @columns ; end
|
59
|
+
def remaining_lines ; total_lines - @used_lines ; end
|
60
|
+
def remaining_lines_on_column ; remaining_lines % @height ; end
|
61
|
+
def used_columns ; @used_lines / @height ; end
|
62
|
+
def remaining_columns ; @columns - used_columns ; end
|
63
|
+
def column_full? ; remaining_lines_on_column <= 1 ; end
|
64
|
+
|
65
|
+
def new_column
|
66
|
+
unless column_full?
|
67
|
+
section [""]* remaining_lines_on_column
|
68
|
+
last_section.divider = false
|
69
|
+
last_section.lines << ""
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def section *lines, max: :all, tail: false, header: false
|
74
|
+
lines = [*lines].flatten
|
75
|
+
section = new_section
|
76
|
+
left = remaining_lines_on_column
|
77
|
+
|
78
|
+
# ap h: @height, t: total_lines, r: remaining_lines, rc: remaining_lines_on_column, l: lines
|
79
|
+
|
80
|
+
num = case max
|
81
|
+
when :all ; lines.size
|
82
|
+
when :column ; left == 0 ? @column_height : left
|
83
|
+
# when :full_column ; @column_height
|
84
|
+
else ; raise "unknown: #{max}"
|
85
|
+
end
|
86
|
+
|
87
|
+
num = [num, remaining_lines].min
|
88
|
+
@used_lines += num
|
89
|
+
|
90
|
+
if @need_divider
|
91
|
+
if header
|
92
|
+
h = lines.first
|
93
|
+
lines = lines[1..-1]
|
94
|
+
div = h.sub(/^\s+/){|s| @divider*s.size}.sub(/\s+$/){|s| @divider*s.size}
|
95
|
+
section.divider = div + @divider * (@column_width - div.str_length)
|
96
|
+
else
|
97
|
+
@used_lines += 1
|
98
|
+
num -= 1 unless max == :all # compensate for the divider
|
99
|
+
section.divider = @divider * @column_width
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
to_print = tail ? lines.last(num) : lines.first(num)
|
104
|
+
@need_divider = ! column_full?
|
105
|
+
|
106
|
+
to_print.each do |line|
|
107
|
+
section << line.truncate(@column_width, omission: "⇏")
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def show!
|
112
|
+
output = []
|
113
|
+
@sections.each do |s|
|
114
|
+
output << s.divider unless s.divider.nil?
|
115
|
+
output += s.lines
|
116
|
+
end
|
117
|
+
|
118
|
+
# ap w: @width, h: @height, cw: @column_width, ch: @column_height, c: @columns
|
119
|
+
# ap ul: @used_lines, os: output.size
|
120
|
+
# ap output
|
121
|
+
|
122
|
+
max_row = @column_height - 1
|
123
|
+
max_col = @columns - 1
|
124
|
+
|
125
|
+
clear_screen
|
126
|
+
|
127
|
+
(0..max_row).each do |row|
|
128
|
+
(0..max_col).each do |col|
|
129
|
+
i = col * @column_height + row
|
130
|
+
out = output[i]&.rstrip || ""
|
131
|
+
print out
|
132
|
+
print " " * (@column_width - out.str_length)
|
133
|
+
print HighLine.color("", :reset)
|
134
|
+
|
135
|
+
if col < max_col ; print @separator
|
136
|
+
elsif row < max_row ; print "\n"
|
137
|
+
else ; # skip
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
data/lib/muflax/table.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- encoding: utf-8 -*-
|
3
|
+
# Copyright Stefan Dorn <mail@muflax.com>, 2017
|
4
|
+
# License: GNU GPLv3 (or later) <http://www.gnu.org/copyleft/gpl.html>
|
5
|
+
|
6
|
+
class Table
|
7
|
+
def initialize separator: "\t", alignment: :left
|
8
|
+
@rows = []
|
9
|
+
@lengths = []
|
10
|
+
@separator = separator
|
11
|
+
@just = case alignment
|
12
|
+
when :left ; :ljust
|
13
|
+
when :right ; :rjust
|
14
|
+
when :center ; :center
|
15
|
+
else
|
16
|
+
raise "invalid alignment: #{alignment}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def [](row) ; @rows[row] ; end
|
21
|
+
def []=(row, x) ; @rows[row] = x ; end
|
22
|
+
|
23
|
+
def <<(row)
|
24
|
+
row.each.with_index do |x, i|
|
25
|
+
l = @lengths[i] || 0
|
26
|
+
s = x.str_length
|
27
|
+
@lengths[i] = s if s > l
|
28
|
+
end
|
29
|
+
|
30
|
+
@rows << row
|
31
|
+
end
|
32
|
+
|
33
|
+
def render out
|
34
|
+
@rows.each.with_index do |row, row_i|
|
35
|
+
row.each.with_index do |elem, elem_i|
|
36
|
+
len = @lengths[elem_i]
|
37
|
+
next if len.nil?
|
38
|
+
|
39
|
+
# align element based on how much it's internally longer than it appears
|
40
|
+
aligned = if not elem.nil?
|
41
|
+
elem_diff = elem.to_s.length - elem.str_length
|
42
|
+
elem.send(@just, len + elem_diff)
|
43
|
+
else
|
44
|
+
" "*len
|
45
|
+
end
|
46
|
+
|
47
|
+
if elem_i == (row.size - 1)
|
48
|
+
out.write(aligned.rstrip)
|
49
|
+
else
|
50
|
+
out.write(aligned)
|
51
|
+
out.write(@separator)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
out.write("\n") unless row_i == (@rows.size - 1)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def to_s
|
59
|
+
render(StringIO.new).string
|
60
|
+
end
|
61
|
+
end
|
data/muflax.gemspec
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: muflax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- muflax
|
@@ -10,9 +10,9 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
13
|
+
MIIDLDCCAhSgAwIBAgIBBDANBgkqhkiG9w0BAQUFADA8MQ0wCwYDVQQDDARtYWls
|
14
14
|
MRYwFAYKCZImiZPyLGQBGRYGbXVmbGF4MRMwEQYKCZImiZPyLGQBGRYDY29tMB4X
|
15
|
-
|
15
|
+
DTE3MDUxNjA3NDUxMVoXDTE4MDUxNjA3NDUxMVowPDENMAsGA1UEAwwEbWFpbDEW
|
16
16
|
MBQGCgmSJomT8ixkARkWBm11ZmxheDETMBEGCgmSJomT8ixkARkWA2NvbTCCASIw
|
17
17
|
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMBwn+ZDlWYfoEevtvoQBKK+NBFA
|
18
18
|
U9iKN5Aa4g51ZjiFUtoasYeTVUvqKmkRDM+tFTjlTNRCMtFKZy+Fbw+Q2+JALBnk
|
@@ -21,14 +21,14 @@ cert_chain:
|
|
21
21
|
coJqx3UHhPw1e97CxC4r4IEO4vfNwMr3Uxxcv/idcQwDi5thDwtzjG3u4xwzL3xS
|
22
22
|
HSvktDccLmeF9hsWUGlmee87oQGqZvZTmRmLmpcpzsNxFcVJxGK72VfbsjUCAwEA
|
23
23
|
AaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFEEiWHZRn5hp
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
8ho98JIewpJitn3DMA0GCSqGSIb3DQEBBQUAA4IBAQCFvlpydHAKq6pEgwaG8nNR
|
25
|
+
JP21BB4467hKYRPHO4vQW+zA1ezZdFak4Ie71hGrxQXmjHBWDk6rMcC+SfgxKL+q
|
26
|
+
1rOpOHgG08uq3RZgAi5tBoXSWid8+9Ii3aJc/9g2OF2ZELmEjvOueGBFkP57c8ju
|
27
|
+
1EztgTx/sIwPTCMntncnw/83prQqO4G5S/cCguOqGQ9NQlXUczRJzrfDorGVAD0T
|
28
|
+
9xjevPGDZ+8y8wc8/mXBPK1pTaBh2oi8947HaTq8EadxezFs2Je+oSnMbygfo/a7
|
29
|
+
0rbAHpJPtzql3a4+gjK54qkJUWSUjWuLMHFIHhMt1laowNJUio6ASGx8tfzgLLnZ
|
30
30
|
-----END CERTIFICATE-----
|
31
|
-
date: 2017-
|
31
|
+
date: 2017-07-19 00:00:00.000000000 Z
|
32
32
|
dependencies:
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: activesupport
|
@@ -165,8 +165,10 @@ files:
|
|
165
165
|
- lib/muflax/kernel.rb
|
166
166
|
- lib/muflax/library.rb
|
167
167
|
- lib/muflax/objects.rb
|
168
|
+
- lib/muflax/panes.rb
|
168
169
|
- lib/muflax/regex.rb
|
169
170
|
- lib/muflax/string.rb
|
171
|
+
- lib/muflax/table.rb
|
170
172
|
- lib/muflax/value.rb
|
171
173
|
- muflax.gemspec
|
172
174
|
homepage: http://github.com/muflax/ruby-muflax
|
metadata.gz.sig
CHANGED
Binary file
|