vedeu 0.4.14 → 0.4.15
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/.rubocop.yml +3 -3
- data/README.md +47 -35
- data/docs/views.md +1 -1
- data/examples/material_colours_app.rb +0 -5
- data/lib/vedeu/cursor/cursor.rb +4 -5
- data/lib/vedeu/cursor/move.rb +52 -84
- data/lib/vedeu/cursor/refresh_cursor.rb +12 -18
- data/lib/vedeu/debug.rb +3 -1
- data/lib/vedeu/geometry/area.rb +0 -2
- data/lib/vedeu/geometry/coordinate.rb +10 -0
- data/lib/vedeu/geometry/dimension.rb +34 -18
- data/lib/vedeu/geometry/null_geometry.rb +10 -1
- data/lib/vedeu/geometry/position.rb +1 -1
- data/lib/vedeu/geometry/position_validator.rb +2 -2
- data/lib/vedeu/input/mapper.rb +4 -18
- data/lib/vedeu/main_loop.rb +1 -3
- data/lib/vedeu/models/cell.rb +11 -17
- data/lib/vedeu/models/interface.rb +0 -7
- data/lib/vedeu/output/border.rb +34 -61
- data/lib/vedeu/output/clear.rb +39 -14
- data/lib/vedeu/output/colour.rb +15 -15
- data/lib/vedeu/output/esc.rb +1 -1
- data/lib/vedeu/output/html_char.rb +18 -24
- data/lib/vedeu/output/null_border.rb +14 -10
- data/lib/vedeu/output/presentation.rb +32 -8
- data/lib/vedeu/output/renderers/all.rb +1 -0
- data/lib/vedeu/output/renderers/text_renderer.rb +40 -0
- data/lib/vedeu/output/translator.rb +2 -4
- data/lib/vedeu/output/viewport.rb +22 -13
- data/lib/vedeu/output/virtual_terminal.rb +0 -1
- data/lib/vedeu/repositories/repositories/borders.rb +3 -4
- data/lib/vedeu/repositories/repositories/cursors.rb +13 -1
- data/lib/vedeu/repositories/repositories/geometries.rb +1 -1
- data/lib/vedeu/support/all.rb +1 -0
- data/lib/vedeu/support/options.rb +65 -0
- data/lib/vedeu/support/terminal.rb +3 -5
- data/test/lib/vedeu/cursor/cursor_test.rb +0 -5
- data/test/lib/vedeu/cursor/move_test.rb +87 -92
- data/test/lib/vedeu/geometry/null_geometry_test.rb +3 -1
- data/test/lib/vedeu/models/cell_test.rb +13 -16
- data/test/lib/vedeu/models/interface_test.rb +0 -17
- data/test/lib/vedeu/output/border_test.rb +0 -22
- data/test/lib/vedeu/output/clear_test.rb +4 -2
- data/test/lib/vedeu/output/null_border_test.rb +8 -4
- data/test/lib/vedeu/output/renderers/text_renderer_test.rb +24 -0
- data/test/lib/vedeu/repositories/repositories/borders_test.rb +1 -13
- data/test/lib/vedeu/support/options_test.rb +70 -0
- data/vedeu.gemspec +1 -1
- metadata +8 -2
data/lib/vedeu/output/clear.rb
CHANGED
|
@@ -4,6 +4,22 @@ module Vedeu
|
|
|
4
4
|
#
|
|
5
5
|
class Clear
|
|
6
6
|
|
|
7
|
+
extend Forwardable
|
|
8
|
+
|
|
9
|
+
def_delegators :border,
|
|
10
|
+
:bx,
|
|
11
|
+
:by
|
|
12
|
+
|
|
13
|
+
def_delegators :geometry,
|
|
14
|
+
:x,
|
|
15
|
+
:y
|
|
16
|
+
|
|
17
|
+
def_delegators :interface,
|
|
18
|
+
:colour,
|
|
19
|
+
:name,
|
|
20
|
+
:style,
|
|
21
|
+
:visible?
|
|
22
|
+
|
|
7
23
|
class << self
|
|
8
24
|
|
|
9
25
|
# Clears the area defined by the interface.
|
|
@@ -42,14 +58,14 @@ module Vedeu
|
|
|
42
58
|
#
|
|
43
59
|
# @return [Array<Array<Vedeu::Char>>]
|
|
44
60
|
def clear
|
|
45
|
-
if
|
|
46
|
-
Vedeu.log(type: :output, message: "Clearing: '#{
|
|
61
|
+
if visible?
|
|
62
|
+
Vedeu.log(type: :output, message: "Clearing: '#{name}'")
|
|
47
63
|
|
|
48
64
|
@clear ||= Array.new(height) do |iy|
|
|
49
65
|
Array.new(width) do |ix|
|
|
50
66
|
Vedeu::Char.new(value: ' ',
|
|
51
|
-
colour:
|
|
52
|
-
style:
|
|
67
|
+
colour: clear_colour,
|
|
68
|
+
style: style,
|
|
53
69
|
position: position(iy, ix))
|
|
54
70
|
end
|
|
55
71
|
end
|
|
@@ -80,6 +96,11 @@ module Vedeu
|
|
|
80
96
|
# @return [Interface]
|
|
81
97
|
attr_reader :interface
|
|
82
98
|
|
|
99
|
+
# @return (see Vedeu::Borders#by_name)
|
|
100
|
+
def border
|
|
101
|
+
@border ||= Vedeu.borders.by_name(name)
|
|
102
|
+
end
|
|
103
|
+
|
|
83
104
|
# @return [Boolean] Indicates whether the area occupied by the border of the
|
|
84
105
|
# interface should be cleared also.
|
|
85
106
|
def clear_border?
|
|
@@ -88,12 +109,12 @@ module Vedeu
|
|
|
88
109
|
|
|
89
110
|
# @return [Vedeu::Colour] The default background and foreground colours for
|
|
90
111
|
# the terminal, or the colours of the interface.
|
|
91
|
-
def
|
|
112
|
+
def clear_colour
|
|
92
113
|
if use_terminal_colours?
|
|
93
|
-
Colour.new(background: :default, foreground: :default)
|
|
114
|
+
Vedeu::Colour.new(background: :default, foreground: :default)
|
|
94
115
|
|
|
95
116
|
else
|
|
96
|
-
|
|
117
|
+
colour
|
|
97
118
|
|
|
98
119
|
end
|
|
99
120
|
end
|
|
@@ -106,15 +127,20 @@ module Vedeu
|
|
|
106
127
|
}
|
|
107
128
|
end
|
|
108
129
|
|
|
130
|
+
# @return (see Vedeu::Geometries#by_name)
|
|
131
|
+
def geometry
|
|
132
|
+
@geometry ||= Vedeu.geometries.by_name(name)
|
|
133
|
+
end
|
|
134
|
+
|
|
109
135
|
# Returns the height of the area to be cleared.
|
|
110
136
|
#
|
|
111
137
|
# @return [Fixnum]
|
|
112
138
|
def height
|
|
113
139
|
if clear_border?
|
|
114
|
-
|
|
140
|
+
geometry.height
|
|
115
141
|
|
|
116
142
|
else
|
|
117
|
-
|
|
143
|
+
border.height
|
|
118
144
|
|
|
119
145
|
end
|
|
120
146
|
end
|
|
@@ -129,10 +155,10 @@ module Vedeu
|
|
|
129
155
|
# @return [Vedeu::IndexPosition]
|
|
130
156
|
def position(iy, ix)
|
|
131
157
|
if clear_border?
|
|
132
|
-
Vedeu::IndexPosition[iy, ix,
|
|
158
|
+
Vedeu::IndexPosition[iy, ix, y, x]
|
|
133
159
|
|
|
134
160
|
else
|
|
135
|
-
Vedeu::IndexPosition[iy, ix,
|
|
161
|
+
Vedeu::IndexPosition[iy, ix, by, bx]
|
|
136
162
|
|
|
137
163
|
end
|
|
138
164
|
end
|
|
@@ -148,10 +174,10 @@ module Vedeu
|
|
|
148
174
|
# @return [Fixnum]
|
|
149
175
|
def width
|
|
150
176
|
if clear_border?
|
|
151
|
-
|
|
177
|
+
geometry.width
|
|
152
178
|
|
|
153
179
|
else
|
|
154
|
-
|
|
180
|
+
border.width
|
|
155
181
|
|
|
156
182
|
end
|
|
157
183
|
end
|
|
@@ -159,4 +185,3 @@ module Vedeu
|
|
|
159
185
|
end # Clear
|
|
160
186
|
|
|
161
187
|
end # Vedeu
|
|
162
|
-
|
data/lib/vedeu/output/colour.rb
CHANGED
|
@@ -23,21 +23,10 @@ module Vedeu
|
|
|
23
23
|
# @return [Hash]
|
|
24
24
|
attr_reader :attributes
|
|
25
25
|
|
|
26
|
-
# @!attribute [r] background
|
|
27
|
-
# @return [Background|String]
|
|
28
|
-
attr_reader :background
|
|
29
|
-
|
|
30
|
-
# @!attribute [r] foreground
|
|
31
|
-
# @return [Foreground|String]
|
|
32
|
-
attr_reader :foreground
|
|
33
|
-
|
|
34
26
|
# @param value []
|
|
35
27
|
# @return [Object]
|
|
36
28
|
def self.coerce(value)
|
|
37
|
-
if value.
|
|
38
|
-
new
|
|
39
|
-
|
|
40
|
-
elsif value.is_a?(self)
|
|
29
|
+
if value.is_a?(self)
|
|
41
30
|
value
|
|
42
31
|
|
|
43
32
|
elsif value.is_a?(Hash)
|
|
@@ -53,7 +42,7 @@ module Vedeu
|
|
|
53
42
|
end
|
|
54
43
|
|
|
55
44
|
else
|
|
56
|
-
new
|
|
45
|
+
new
|
|
57
46
|
|
|
58
47
|
end
|
|
59
48
|
end
|
|
@@ -66,9 +55,13 @@ module Vedeu
|
|
|
66
55
|
# @return [Colour]
|
|
67
56
|
def initialize(attributes = {})
|
|
68
57
|
@attributes = defaults.merge!(attributes)
|
|
58
|
+
end
|
|
69
59
|
|
|
70
|
-
|
|
71
|
-
|
|
60
|
+
# Returns the background colour as a Vedeu::Background.
|
|
61
|
+
#
|
|
62
|
+
# @return [Vedeu::Background]
|
|
63
|
+
def background
|
|
64
|
+
@background ||= Vedeu::Background.coerce(attributes[:background])
|
|
72
65
|
end
|
|
73
66
|
|
|
74
67
|
# Converts the value into a Vedeu::Background.
|
|
@@ -87,6 +80,13 @@ module Vedeu
|
|
|
87
80
|
end
|
|
88
81
|
alias_method :==, :eql?
|
|
89
82
|
|
|
83
|
+
# Returns the foreground colour as a Vedeu::Foreground.
|
|
84
|
+
#
|
|
85
|
+
# @return [Vedeu::Foreground]
|
|
86
|
+
def foreground
|
|
87
|
+
@foreground ||= Vedeu::Foreground.coerce(attributes[:foreground])
|
|
88
|
+
end
|
|
89
|
+
|
|
90
90
|
# Converts the value into a Vedeu::Foreground.
|
|
91
91
|
#
|
|
92
92
|
# @param value [String]
|
data/lib/vedeu/output/esc.rb
CHANGED
|
@@ -54,7 +54,6 @@ module Vedeu
|
|
|
54
54
|
# @return [String]
|
|
55
55
|
def border_style
|
|
56
56
|
case border
|
|
57
|
-
when nil then ''
|
|
58
57
|
when :top_horizontal then border_css('top')
|
|
59
58
|
when :left_vertical then border_css('left')
|
|
60
59
|
when :right_vertical then border_css('right')
|
|
@@ -63,10 +62,7 @@ module Vedeu
|
|
|
63
62
|
when :top_right then [border_css('top'), border_css('right')].join
|
|
64
63
|
when :bottom_left then [border_css('bottom'), border_css('left')].join
|
|
65
64
|
when :bottom_right then [border_css('bottom'), border_css('right')].join
|
|
66
|
-
when :horizontal then ''
|
|
67
|
-
when :vertical then ''
|
|
68
65
|
else
|
|
69
|
-
# ... should not get here
|
|
70
66
|
''
|
|
71
67
|
end
|
|
72
68
|
end
|
|
@@ -78,41 +74,39 @@ module Vedeu
|
|
|
78
74
|
|
|
79
75
|
# @return [String]
|
|
80
76
|
def fg
|
|
81
|
-
@fg ||= colour_fg
|
|
77
|
+
@fg ||= colour_fg
|
|
82
78
|
end
|
|
83
79
|
|
|
84
80
|
# @return [String]
|
|
85
81
|
def bg
|
|
86
|
-
@bg ||= colour_bg
|
|
82
|
+
@bg ||= colour_bg
|
|
87
83
|
end
|
|
88
84
|
|
|
89
|
-
# @return [String
|
|
85
|
+
# @return [String]
|
|
90
86
|
def colour_bg
|
|
91
|
-
if
|
|
87
|
+
if defined_value?(char.background.to_html)
|
|
92
88
|
char.background.to_html
|
|
89
|
+
|
|
90
|
+
elsif defined_value?(char.parent_background.to_html)
|
|
91
|
+
char.parent_background.to_html
|
|
92
|
+
|
|
93
|
+
else
|
|
94
|
+
'#000'
|
|
95
|
+
|
|
93
96
|
end
|
|
94
97
|
end
|
|
95
98
|
|
|
96
|
-
# @return [String
|
|
99
|
+
# @return [String]
|
|
97
100
|
def colour_fg
|
|
98
|
-
if
|
|
101
|
+
if defined_value?(char.foreground.to_html)
|
|
99
102
|
char.foreground.to_html
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
# @return [String|NilClass]
|
|
104
|
-
def parent_bg
|
|
105
|
-
if char.parent_background &&
|
|
106
|
-
defined_value?(char.parent_background.to_html)
|
|
107
|
-
char.parent_background.to_html
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
103
|
|
|
111
|
-
|
|
112
|
-
def parent_fg
|
|
113
|
-
if char.parent_foreground &&
|
|
114
|
-
defined_value?(char.parent_foreground.to_html)
|
|
104
|
+
elsif defined_value?(char.parent_foreground.to_html)
|
|
115
105
|
char.parent_foreground.to_html
|
|
106
|
+
|
|
107
|
+
else
|
|
108
|
+
'#222'
|
|
109
|
+
|
|
116
110
|
end
|
|
117
111
|
end
|
|
118
112
|
|
|
@@ -5,33 +5,41 @@ module Vedeu
|
|
|
5
5
|
#
|
|
6
6
|
class NullBorder
|
|
7
7
|
|
|
8
|
+
# @!attribute [r] name
|
|
9
|
+
# @return [String|NilClass]
|
|
10
|
+
attr_reader :name
|
|
11
|
+
|
|
8
12
|
# Returns a new instance of Vedeu::NullBorder.
|
|
9
13
|
#
|
|
10
|
-
# @param
|
|
11
|
-
# @return [Vedeu::NullBorder]
|
|
12
|
-
def initialize(
|
|
13
|
-
@
|
|
14
|
+
# @param name [String|NilClass]
|
|
15
|
+
# @return [Vedeu::NullBorder]S
|
|
16
|
+
def initialize(name = nil)
|
|
17
|
+
@name = name
|
|
14
18
|
end
|
|
15
19
|
|
|
16
20
|
# @return [Fixnum]
|
|
17
21
|
def bx
|
|
18
22
|
geometry.x
|
|
19
23
|
end
|
|
24
|
+
alias_method :x, :bx
|
|
20
25
|
|
|
21
26
|
# @return [Fixnum]
|
|
22
27
|
def bxn
|
|
23
28
|
geometry.xn
|
|
24
29
|
end
|
|
30
|
+
alias_method :xn, :bxn
|
|
25
31
|
|
|
26
32
|
# @return [Fixnum]
|
|
27
33
|
def by
|
|
28
34
|
geometry.y
|
|
29
35
|
end
|
|
36
|
+
alias_method :y, :by
|
|
30
37
|
|
|
31
38
|
# @return [Fixnum]
|
|
32
39
|
def byn
|
|
33
40
|
geometry.yn
|
|
34
41
|
end
|
|
42
|
+
alias_method :yn, :byn
|
|
35
43
|
|
|
36
44
|
# @return [FalseClass]
|
|
37
45
|
def enabled?
|
|
@@ -55,15 +63,11 @@ module Vedeu
|
|
|
55
63
|
|
|
56
64
|
private
|
|
57
65
|
|
|
58
|
-
# @!attribute [r] interface
|
|
59
|
-
# @return [Vedeu::Interface]
|
|
60
|
-
attr_reader :interface
|
|
61
|
-
|
|
62
66
|
# Returns the geometry for the interface.
|
|
63
67
|
#
|
|
64
|
-
# @return
|
|
68
|
+
# @return (see Vedeu::Geometries#by_name)
|
|
65
69
|
def geometry
|
|
66
|
-
|
|
70
|
+
@geometry ||= Vedeu.geometries.by_name(name)
|
|
67
71
|
end
|
|
68
72
|
|
|
69
73
|
end # NullBorder
|
|
@@ -5,9 +5,15 @@ module Vedeu
|
|
|
5
5
|
#
|
|
6
6
|
module Presentation
|
|
7
7
|
|
|
8
|
-
# @return [Vedeu::Background
|
|
8
|
+
# @return [Vedeu::Background]
|
|
9
9
|
def background
|
|
10
|
-
|
|
10
|
+
if colour
|
|
11
|
+
colour.background
|
|
12
|
+
|
|
13
|
+
else
|
|
14
|
+
Vedeu::Background.new
|
|
15
|
+
|
|
16
|
+
end
|
|
11
17
|
end
|
|
12
18
|
|
|
13
19
|
# @return [Vedeu::Colour]
|
|
@@ -29,14 +35,26 @@ module Vedeu
|
|
|
29
35
|
@colour = Vedeu::Colour.coerce(value)
|
|
30
36
|
end
|
|
31
37
|
|
|
32
|
-
# @return [Vedeu::Foreground
|
|
38
|
+
# @return [Vedeu::Foreground]
|
|
33
39
|
def foreground
|
|
34
|
-
|
|
40
|
+
if colour
|
|
41
|
+
colour.foreground
|
|
42
|
+
|
|
43
|
+
else
|
|
44
|
+
Vedeu::Foreground.new
|
|
45
|
+
|
|
46
|
+
end
|
|
35
47
|
end
|
|
36
48
|
|
|
37
|
-
# @return [Vedeu::Background
|
|
49
|
+
# @return [Vedeu::Background]
|
|
38
50
|
def parent_background
|
|
39
|
-
|
|
51
|
+
if parent_colour
|
|
52
|
+
parent_colour.background
|
|
53
|
+
|
|
54
|
+
else
|
|
55
|
+
Vedeu::Background.new
|
|
56
|
+
|
|
57
|
+
end
|
|
40
58
|
end
|
|
41
59
|
|
|
42
60
|
# @return [String|NilClass]
|
|
@@ -44,9 +62,15 @@ module Vedeu
|
|
|
44
62
|
parent.colour if parent
|
|
45
63
|
end
|
|
46
64
|
|
|
47
|
-
# @return [Vedeu::Foreground
|
|
65
|
+
# @return [Vedeu::Foreground]
|
|
48
66
|
def parent_foreground
|
|
49
|
-
|
|
67
|
+
if parent_colour
|
|
68
|
+
parent_colour.foreground
|
|
69
|
+
|
|
70
|
+
else
|
|
71
|
+
Vedeu::Foreground.new
|
|
72
|
+
|
|
73
|
+
end
|
|
50
74
|
end
|
|
51
75
|
|
|
52
76
|
# @return [String|NilClass]
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Vedeu
|
|
2
|
+
|
|
3
|
+
# Converts a grid of {Vedeu::Char} objects into a stream of escape sequences
|
|
4
|
+
# and content.
|
|
5
|
+
#
|
|
6
|
+
class TextRenderer
|
|
7
|
+
|
|
8
|
+
# @param output [Array<Array<Vedeu::Char>>]
|
|
9
|
+
# @return [String]
|
|
10
|
+
def self.render(*output)
|
|
11
|
+
new(*output).render
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Returns a new instance of Vedeu::TextRenderer.
|
|
15
|
+
#
|
|
16
|
+
# @param output [Array<Array<Vedeu::Char>>]
|
|
17
|
+
# @return [Vedeu::TextRenderer]
|
|
18
|
+
def initialize(*output)
|
|
19
|
+
@output = output
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# @return [String]
|
|
23
|
+
def render
|
|
24
|
+
parsed
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
# @!attribute [r] output
|
|
30
|
+
# @return [Array<Array<Vedeu::Char>>]
|
|
31
|
+
attr_reader :output
|
|
32
|
+
|
|
33
|
+
# @return [String]
|
|
34
|
+
def parsed
|
|
35
|
+
Vedeu::Compressor.new(output).render
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end # TextRenderer
|
|
39
|
+
|
|
40
|
+
end # Vedeu
|