tty_string 2.0.0 → 2.0.2
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
- data/CHANGELOG.md +6 -0
- data/lib/tty_string/cell.rb +0 -4
- data/lib/tty_string/csi_code.rb +6 -3
- data/lib/tty_string/row.rb +30 -0
- data/lib/tty_string/screen.rb +27 -17
- data/lib/tty_string/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fed365cd62d837aec3621a4c1a1f9055871aaf7050d4c136206ca1b6ef6e6a5b
|
|
4
|
+
data.tar.gz: adfbc75cc2f3ec31be690d30a26848ba9ca6b43f83612f8a9ccf698bfc8a7d1e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: edf12a947a46e36cdb82ec8f2b8ba26c111b189a78d1f35e7136771499605d4bfba8c96b251595555c5b83bfaa0f3059aec868958590d3ae5d012c37772a3145
|
|
7
|
+
data.tar.gz: 3a4487855eecdb533dd8f3382752c3f7b35bcd119a2516c7a02dba077580dff64837f1374a86bb4aa88628dc93eb51a1b9296873df53c19022a8ab75ba8505f7
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
# v2.0.2
|
|
2
|
+
- Improve whitespace handling
|
|
3
|
+
|
|
4
|
+
# v2.0.1
|
|
5
|
+
- Fix warning
|
|
6
|
+
|
|
1
7
|
# v2.0.0
|
|
2
8
|
- TTYString is now a module not a class.
|
|
3
9
|
- Address the issue where preserved styles and unknown codes would cause the cursor to be misaligned when moving, and potentially overwriting styles unexpectedly:
|
data/lib/tty_string/cell.rb
CHANGED
data/lib/tty_string/csi_code.rb
CHANGED
|
@@ -27,11 +27,14 @@ module TTYString
|
|
|
27
27
|
@re ||= /\e\[#{args_re}#{char}/
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def args_re
|
|
30
|
+
def args_re # rubocop:disable Metrics/MethodLength
|
|
31
31
|
case max_args
|
|
32
|
-
|
|
32
|
+
# :nocov:
|
|
33
|
+
when 0 then nil
|
|
34
|
+
# :nocov:
|
|
35
|
+
when 1 then /[0-:<-?]*/
|
|
33
36
|
when -1 then %r{[0-?]*[ -/]*}
|
|
34
|
-
else /(?:(?:[0-:<-?]*)
|
|
37
|
+
else /(?:(?:[0-:<-?]*)(?:;(?:[0-:<-?]*)){0,#{max_args - 1}})?/
|
|
35
38
|
end
|
|
36
39
|
end
|
|
37
40
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module TTYString
|
|
4
|
+
class Row
|
|
5
|
+
include Enumerable
|
|
6
|
+
|
|
7
|
+
attr_accessor :newline_style
|
|
8
|
+
|
|
9
|
+
def initialize(newline_style: NullStyle)
|
|
10
|
+
@array = []
|
|
11
|
+
self.newline_style = newline_style
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def each(&block)
|
|
15
|
+
@array.each(&block)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def []=(index, value)
|
|
19
|
+
@array[index] = value
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def slice!(*args)
|
|
23
|
+
@array.slice!(*args)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def fill(*args)
|
|
27
|
+
@array.fill(*args)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
data/lib/tty_string/screen.rb
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
require_relative 'cursor'
|
|
4
4
|
require_relative 'cell'
|
|
5
5
|
require_relative 'style'
|
|
6
|
+
require_relative 'row'
|
|
6
7
|
|
|
7
8
|
module TTYString
|
|
8
9
|
# a grid to draw on
|
|
@@ -15,40 +16,49 @@ module TTYString
|
|
|
15
16
|
@current_style = @initial_style = initial_style
|
|
16
17
|
end
|
|
17
18
|
|
|
18
|
-
def to_s # rubocop:disable Metrics/MethodLength
|
|
19
|
+
def to_s # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
19
20
|
style_context = initial_style
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
str = +''
|
|
22
|
+
screen.each_with_index do |row, index|
|
|
23
|
+
unless index.zero?
|
|
24
|
+
str << row.newline_style.to_s(context: style_context) if row
|
|
25
|
+
str << "\n"
|
|
26
|
+
style_context = row.newline_style if row
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
Array(row).each do |cell|
|
|
22
30
|
if cell
|
|
23
|
-
|
|
31
|
+
str << cell.style.to_s(context: style_context)
|
|
32
|
+
str << cell.value
|
|
24
33
|
style_context = cell.style
|
|
25
|
-
value
|
|
26
34
|
else
|
|
27
|
-
' '
|
|
35
|
+
str << ' '
|
|
28
36
|
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
str << current_style.to_s(context: style_context)
|
|
40
|
+
str
|
|
31
41
|
end
|
|
32
42
|
|
|
33
43
|
def []=((row, col), value)
|
|
34
|
-
screen[row] ||=
|
|
44
|
+
screen[row] ||= Row.new(newline_style: current_style)
|
|
35
45
|
screen[row][col] = value
|
|
36
46
|
end
|
|
37
47
|
|
|
38
48
|
def clear_at_cursor
|
|
39
|
-
self[cursor] =
|
|
49
|
+
self[cursor] = Cell.new(' ', style: current_style)
|
|
40
50
|
end
|
|
41
51
|
|
|
42
52
|
def clear_line_forward
|
|
43
|
-
screen[row].
|
|
53
|
+
screen[row].slice!(col..-1)
|
|
44
54
|
end
|
|
45
55
|
|
|
46
56
|
def clear_line_backward
|
|
47
|
-
screen[row].fill(
|
|
57
|
+
screen[row].fill(Cell.new(' ', style: current_style), 0..col)
|
|
48
58
|
end
|
|
49
59
|
|
|
50
60
|
def clear_line
|
|
51
|
-
screen[row] =
|
|
61
|
+
screen[row] = Row.new(newline_style: current_style)
|
|
52
62
|
end
|
|
53
63
|
|
|
54
64
|
def clear
|
|
@@ -56,17 +66,17 @@ module TTYString
|
|
|
56
66
|
end
|
|
57
67
|
|
|
58
68
|
def scroll_up
|
|
59
|
-
screen.push(
|
|
69
|
+
screen.push(Row.new(newline_style: current_style))
|
|
60
70
|
screen.shift
|
|
61
71
|
end
|
|
62
72
|
|
|
63
73
|
def scroll_down
|
|
64
|
-
screen.unshift(
|
|
74
|
+
screen.unshift(Row.new(newline_style: current_style))
|
|
65
75
|
screen.pop
|
|
66
76
|
end
|
|
67
77
|
|
|
68
78
|
def clear_lines_before
|
|
69
|
-
screen.fill(
|
|
79
|
+
screen.fill(Row.new(newline_style: current_style), 0...row)
|
|
70
80
|
end
|
|
71
81
|
|
|
72
82
|
def clear_lines_after
|
|
@@ -84,7 +94,7 @@ module TTYString
|
|
|
84
94
|
end
|
|
85
95
|
|
|
86
96
|
def ensure_row
|
|
87
|
-
screen[row] ||=
|
|
97
|
+
screen[row] ||= Row.new(newline_style: current_style)
|
|
88
98
|
end
|
|
89
99
|
|
|
90
100
|
def write(string)
|
data/lib/tty_string/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tty_string
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dana Sherson
|
|
@@ -210,6 +210,7 @@ files:
|
|
|
210
210
|
- lib/tty_string/cursor.rb
|
|
211
211
|
- lib/tty_string/null_style.rb
|
|
212
212
|
- lib/tty_string/parser.rb
|
|
213
|
+
- lib/tty_string/row.rb
|
|
213
214
|
- lib/tty_string/screen.rb
|
|
214
215
|
- lib/tty_string/style.rb
|
|
215
216
|
- lib/tty_string/version.rb
|