vedeu 0.3.1 → 0.3.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/examples/borders_app.rb +15 -14
- data/examples/colours_app.rb +1 -2
- data/examples/cursor_app.rb +2 -5
- data/examples/geometry_app.rb +141 -0
- data/lib/vedeu.rb +0 -17
- data/lib/vedeu/api.rb +18 -3
- data/lib/vedeu/buffers/all.rb +0 -6
- data/lib/vedeu/buffers/buffer.rb +5 -2
- data/lib/vedeu/cursor/all.rb +0 -13
- data/lib/vedeu/cursor/cursor.rb +1 -1
- data/lib/vedeu/dsl/components/border.rb +94 -12
- data/lib/vedeu/dsl/components/geometry.rb +40 -48
- data/lib/vedeu/dsl/components/keymap.rb +36 -0
- data/lib/vedeu/dsl/interface.rb +20 -5
- data/lib/vedeu/dsl/stream.rb +2 -0
- data/lib/vedeu/events/all.rb +0 -5
- data/lib/vedeu/events/event.rb +2 -1
- data/lib/vedeu/events/trigger.rb +1 -3
- data/lib/vedeu/input/all.rb +7 -12
- data/lib/vedeu/input/keymap.rb +10 -34
- data/lib/vedeu/input/keys.rb +1 -0
- data/lib/vedeu/input/mapper.rb +1 -5
- data/lib/vedeu/models/collection.rb +4 -0
- data/lib/vedeu/models/geometry.rb +2 -1
- data/lib/vedeu/models/model.rb +4 -0
- data/lib/vedeu/models/view/char.rb +10 -0
- data/lib/vedeu/models/view/chars.rb +3 -2
- data/lib/vedeu/models/view/interface.rb +18 -28
- data/lib/vedeu/models/view/interfaces.rb +3 -2
- data/lib/vedeu/models/view/lines.rb +3 -2
- data/lib/vedeu/models/view/stream.rb +1 -1
- data/lib/vedeu/models/view/streams.rb +3 -2
- data/lib/vedeu/output/border.rb +29 -21
- data/lib/vedeu/output/compositor.rb +2 -3
- data/lib/vedeu/output/output.rb +5 -1
- data/lib/vedeu/output/viewport.rb +45 -24
- data/lib/vedeu/output/wordwrap.rb +7 -1
- data/lib/vedeu/output/writer.rb +3 -0
- data/lib/vedeu/presentation/presentation.rb +2 -0
- data/lib/vedeu/repositories/all.rb +107 -1
- data/lib/vedeu/repositories/repository.rb +4 -0
- data/lib/vedeu/support/bounding_area.rb +1 -1
- data/lib/vedeu/support/position_validator.rb +18 -0
- data/test/lib/vedeu/buffers/buffer_test.rb +8 -8
- data/test/lib/vedeu/cursor/move_cursor_test.rb +3 -6
- data/test/lib/vedeu/dsl/components/border_test.rb +53 -4
- data/test/lib/vedeu/dsl/components/geometry_test.rb +0 -24
- data/test/lib/vedeu/dsl/interface_test.rb +11 -3
- data/test/lib/vedeu/events/event_test.rb +2 -2
- data/test/lib/vedeu/models/view/interface_test.rb +1 -25
- data/test/lib/vedeu/models/view/stream_test.rb +8 -0
- data/test/lib/vedeu/output/border_test.rb +159 -81
- data/test/lib/vedeu/output/output_test.rb +1 -2
- data/test/lib/vedeu/output/viewport_test.rb +3 -10
- data/test/lib/vedeu/repositories/all_test.rb +128 -0
- data/test/lib/vedeu/support/content_geometry_test.rb +1 -2
- data/vedeu.gemspec +1 -1
- metadata +3 -13
- data/lib/vedeu/repositories/menus.rb +0 -13
- data/test/lib/vedeu/buffers/all_test.rb +0 -11
- data/test/lib/vedeu/cursor/all_test.rb +0 -33
- data/test/lib/vedeu/events/all_test.rb +0 -11
- data/test/lib/vedeu/input/all_test.rb +0 -11
- data/test/lib/vedeu/repositories/menus_test.rb +0 -15
data/lib/vedeu/models/model.rb
CHANGED
@@ -17,6 +17,13 @@ module Vedeu
|
|
17
17
|
attr_reader :position
|
18
18
|
|
19
19
|
class << self
|
20
|
+
|
21
|
+
# @param value []
|
22
|
+
# @param parent []
|
23
|
+
# @param colour []
|
24
|
+
# @param style []
|
25
|
+
# @param position []
|
26
|
+
# @return [Vedeu::Char]
|
20
27
|
def coerce(value = nil, parent = nil, colour = nil, style = nil, position = nil)
|
21
28
|
if value.is_a?(self)
|
22
29
|
value
|
@@ -37,6 +44,7 @@ module Vedeu
|
|
37
44
|
|
38
45
|
end
|
39
46
|
end
|
47
|
+
|
40
48
|
end
|
41
49
|
|
42
50
|
# Returns a new instance of Char.
|
@@ -62,11 +70,13 @@ module Vedeu
|
|
62
70
|
"<#{self.class.name} (value:#{@value})>"
|
63
71
|
end
|
64
72
|
|
73
|
+
# @param other []
|
65
74
|
# @return [Boolean]
|
66
75
|
def ==(other)
|
67
76
|
eql?(other)
|
68
77
|
end
|
69
78
|
|
79
|
+
# @param other []
|
70
80
|
# @return [Boolean]
|
71
81
|
def eql?(other)
|
72
82
|
self.class == other.class && value == other.value
|
@@ -25,10 +25,8 @@ module Vedeu
|
|
25
25
|
collection Vedeu::Lines
|
26
26
|
member Vedeu::Line
|
27
27
|
|
28
|
-
attr_accessor :
|
29
|
-
:colour,
|
28
|
+
attr_accessor :colour,
|
30
29
|
:delay,
|
31
|
-
:geometry,
|
32
30
|
:group,
|
33
31
|
:name,
|
34
32
|
:parent,
|
@@ -108,10 +106,8 @@ module Vedeu
|
|
108
106
|
@colour = colour
|
109
107
|
@style = style
|
110
108
|
|
111
|
-
@
|
112
|
-
@
|
113
|
-
@geometry = nil
|
114
|
-
@group = ''
|
109
|
+
@delay = 0.0
|
110
|
+
@group = ''
|
115
111
|
|
116
112
|
@repository = Vedeu.interfaces
|
117
113
|
end
|
@@ -125,10 +121,8 @@ module Vedeu
|
|
125
121
|
# @return [Hash]
|
126
122
|
def attributes
|
127
123
|
{
|
128
|
-
border: border,
|
129
124
|
colour: colour,
|
130
125
|
delay: delay,
|
131
|
-
geometry: geometry,
|
132
126
|
group: group,
|
133
127
|
name: name,
|
134
128
|
parent: parent,
|
@@ -140,7 +134,16 @@ module Vedeu
|
|
140
134
|
#
|
141
135
|
# @return [Boolean]
|
142
136
|
def border?
|
143
|
-
|
137
|
+
Vedeu.borders.registered?(name)
|
138
|
+
end
|
139
|
+
|
140
|
+
# Returns the border object belonging to the interface.
|
141
|
+
#
|
142
|
+
# @return [Vedeu::Border|NilClass]
|
143
|
+
def border
|
144
|
+
if border?
|
145
|
+
Vedeu.borders.find(name)
|
146
|
+
end
|
144
147
|
end
|
145
148
|
|
146
149
|
# @return [Vedeu::Cursor]
|
@@ -148,6 +151,11 @@ module Vedeu
|
|
148
151
|
Vedeu.cursors.by_name(name)
|
149
152
|
end
|
150
153
|
|
154
|
+
# @return [Vedeu::Geometry]
|
155
|
+
def geometry
|
156
|
+
Vedeu.geometries.find(name)
|
157
|
+
end
|
158
|
+
|
151
159
|
# Returns log friendly output.
|
152
160
|
#
|
153
161
|
# @return [String]
|
@@ -169,19 +177,6 @@ module Vedeu
|
|
169
177
|
lines.any?
|
170
178
|
end
|
171
179
|
|
172
|
-
# Renders the interface with a border if one is defined.
|
173
|
-
#
|
174
|
-
# @return [Array]
|
175
|
-
def render
|
176
|
-
if border?
|
177
|
-
border.render
|
178
|
-
|
179
|
-
else
|
180
|
-
viewport
|
181
|
-
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
180
|
# @return [Interface]
|
186
181
|
def store
|
187
182
|
super
|
@@ -193,11 +188,6 @@ module Vedeu
|
|
193
188
|
store_group
|
194
189
|
end
|
195
190
|
|
196
|
-
# return [Array]
|
197
|
-
def viewport
|
198
|
-
Vedeu::Viewport.show(self)
|
199
|
-
end
|
200
|
-
|
201
191
|
end # Interface
|
202
192
|
|
203
193
|
end # Vedeu
|
data/lib/vedeu/output/border.rb
CHANGED
@@ -15,6 +15,7 @@ module Vedeu
|
|
15
15
|
include Vedeu::Model
|
16
16
|
|
17
17
|
attr_accessor :attributes
|
18
|
+
attr_reader :name
|
18
19
|
|
19
20
|
class << self
|
20
21
|
|
@@ -22,7 +23,7 @@ module Vedeu
|
|
22
23
|
def build(attributes = {}, &block)
|
23
24
|
attributes = defaults.merge(attributes)
|
24
25
|
|
25
|
-
model = new(attributes
|
26
|
+
model = new(attributes)
|
26
27
|
model.deputy(attributes[:client]).instance_eval(&block) if block_given?
|
27
28
|
model
|
28
29
|
end
|
@@ -35,7 +36,7 @@ module Vedeu
|
|
35
36
|
def defaults
|
36
37
|
{
|
37
38
|
client: nil,
|
38
|
-
|
39
|
+
name: '',
|
39
40
|
}
|
40
41
|
end
|
41
42
|
|
@@ -43,26 +44,27 @@ module Vedeu
|
|
43
44
|
|
44
45
|
# Returns a new instance of Border.
|
45
46
|
#
|
46
|
-
# @param interface [Interface]
|
47
47
|
# @param attributes [Hash]
|
48
|
+
# @option attributes bottom_left [String]
|
49
|
+
# @option attributes bottom_right [String]
|
48
50
|
# @option attributes colour
|
49
|
-
# @option attributes style
|
50
51
|
# @option attributes enabled [Boolean]
|
52
|
+
# @option attributes horizontal [String]
|
53
|
+
# @option attributes name [String]
|
54
|
+
# @option attributes style
|
51
55
|
# @option attributes show_bottom [Boolean]
|
52
56
|
# @option attributes show_left [Boolean]
|
53
57
|
# @option attributes show_right [Boolean]
|
54
58
|
# @option attributes show_top [Boolean]
|
55
|
-
# @option attributes horizontal [String]
|
56
|
-
# @option attributes vertical [String]
|
57
|
-
# @option attributes bottom_left [String]
|
58
|
-
# @option attributes bottom_right [String]
|
59
59
|
# @option attributes top_left [String]
|
60
60
|
# @option attributes top_right [String]
|
61
|
+
# @option attributes vertical [String]
|
61
62
|
# @return [Border]
|
62
|
-
def initialize(
|
63
|
-
@interface = interface
|
63
|
+
def initialize(attributes = {})
|
64
64
|
@attributes = defaults.merge(attributes)
|
65
|
+
@name = @attributes[:name]
|
65
66
|
@colour = Colour.coerce(@attributes[:colour])
|
67
|
+
@repository = Vedeu.borders
|
66
68
|
@style = Style.coerce(@attributes[:style])
|
67
69
|
end
|
68
70
|
|
@@ -177,13 +179,10 @@ module Vedeu
|
|
177
179
|
#
|
178
180
|
# @return [Boolean]
|
179
181
|
def to_s
|
182
|
+
render = Vedeu::Viewport.new(interface).render
|
180
183
|
render.map { |line| line.flatten.join }.join("\n")
|
181
184
|
end
|
182
185
|
|
183
|
-
private
|
184
|
-
|
185
|
-
attr_reader :colour, :interface, :style
|
186
|
-
|
187
186
|
# Renders the bottom border for the interface.
|
188
187
|
#
|
189
188
|
# @return [String]
|
@@ -235,6 +234,10 @@ module Vedeu
|
|
235
234
|
out
|
236
235
|
end
|
237
236
|
|
237
|
+
private
|
238
|
+
|
239
|
+
attr_reader :colour, :style
|
240
|
+
|
238
241
|
# Renders the bottom left border character with escape codes for colour and
|
239
242
|
# style for the interface.
|
240
243
|
#
|
@@ -360,25 +363,30 @@ module Vedeu
|
|
360
363
|
[interface.colour, interface.style]
|
361
364
|
end
|
362
365
|
|
366
|
+
# @return [Vedeu::Interface]
|
367
|
+
def interface
|
368
|
+
@_interface ||= Vedeu.interfaces.find(name)
|
369
|
+
end
|
370
|
+
|
363
371
|
# The default values for a new instance of this class.
|
364
372
|
#
|
365
373
|
# @return [Hash]
|
366
374
|
def defaults
|
367
375
|
{
|
376
|
+
bottom_left: "\x6D", # └
|
377
|
+
bottom_right: "\x6A", # ┘
|
378
|
+
colour: {},
|
368
379
|
enabled: false,
|
380
|
+
horizontal: "\x71", # ─
|
381
|
+
name: '',
|
369
382
|
show_bottom: true,
|
370
383
|
show_left: true,
|
371
384
|
show_right: true,
|
372
385
|
show_top: true,
|
373
|
-
bottom_right: "\x6A", # ┘
|
374
|
-
top_right: "\x6B", # ┐
|
375
|
-
top_left: "\x6C", # ┌
|
376
|
-
bottom_left: "\x6D", # └
|
377
|
-
horizontal: "\x71", # ─
|
378
|
-
colour: {},
|
379
386
|
style: [],
|
387
|
+
top_left: "\x6C", # ┌
|
388
|
+
top_right: "\x6B", # ┐
|
380
389
|
vertical: "\x78", # │
|
381
|
-
interface: nil,
|
382
390
|
}
|
383
391
|
end
|
384
392
|
|
@@ -47,10 +47,8 @@ module Vedeu
|
|
47
47
|
# @return [Array<Interface>]
|
48
48
|
def compose
|
49
49
|
buffer.map do |view|
|
50
|
-
view.border = interface.border unless view.border
|
51
50
|
view.colour = interface.colour unless view.colour
|
52
51
|
view.style = interface.style unless view.style
|
53
|
-
view.geometry = interface.geometry unless view.geometry
|
54
52
|
|
55
53
|
Output.render(view)
|
56
54
|
end
|
@@ -60,11 +58,12 @@ module Vedeu
|
|
60
58
|
|
61
59
|
attr_reader :name
|
62
60
|
|
61
|
+
# @return [Vedeu::Interface]
|
63
62
|
def buffer
|
64
63
|
Vedeu.buffers.find(name).content
|
65
64
|
end
|
66
65
|
|
67
|
-
# @return [Interface]
|
66
|
+
# @return [Vedeu::Interface]
|
68
67
|
def interface
|
69
68
|
@interface ||= Vedeu.interfaces.find(name)
|
70
69
|
end
|
data/lib/vedeu/output/output.rb
CHANGED
@@ -54,7 +54,7 @@ module Vedeu
|
|
54
54
|
|
55
55
|
Vedeu.log("Rendering view: '#{interface.name}'")
|
56
56
|
|
57
|
-
|
57
|
+
viewport.each_with_index do |line, index|
|
58
58
|
out << interface.origin(index)
|
59
59
|
out << line.join
|
60
60
|
end
|
@@ -62,6 +62,10 @@ module Vedeu
|
|
62
62
|
out.join
|
63
63
|
end
|
64
64
|
|
65
|
+
def viewport
|
66
|
+
@_viewport ||= Vedeu::Viewport.new(interface).render
|
67
|
+
end
|
68
|
+
|
65
69
|
end # Output
|
66
70
|
|
67
71
|
end # Vedeu
|
@@ -11,19 +11,11 @@ module Vedeu
|
|
11
11
|
extend Forwardable
|
12
12
|
|
13
13
|
def_delegators :interface,
|
14
|
-
:border,
|
15
|
-
:border?,
|
16
14
|
:geometry,
|
17
15
|
:lines,
|
18
16
|
:lines?,
|
19
17
|
:cursor
|
20
18
|
|
21
|
-
def_delegators :border,
|
22
|
-
:bottom?,
|
23
|
-
:left?,
|
24
|
-
:right?,
|
25
|
-
:top?
|
26
|
-
|
27
19
|
def_delegators :cursor,
|
28
20
|
:ox,
|
29
21
|
:oy
|
@@ -32,11 +24,6 @@ module Vedeu
|
|
32
24
|
:height,
|
33
25
|
:width
|
34
26
|
|
35
|
-
# @see Viewport#show
|
36
|
-
def self.show(interface)
|
37
|
-
new(interface).show
|
38
|
-
end
|
39
|
-
|
40
27
|
# Returns an instance of Viewport.
|
41
28
|
#
|
42
29
|
# @param interface [Interface] An instance of interface.
|
@@ -45,31 +32,55 @@ module Vedeu
|
|
45
32
|
@interface = interface
|
46
33
|
end
|
47
34
|
|
48
|
-
# Returns the
|
49
|
-
#
|
50
|
-
# @note If there are no lines of content, we return an empty array. If there
|
51
|
-
# are no more columns of content we return a space enclosed in an array;
|
52
|
-
# this prevents a weird line hopping bug which occurs when the current
|
53
|
-
# line has no more content, but subsequent lines do.
|
35
|
+
# Returns the interface with border (if enabled) and the content for the
|
36
|
+
# interface.
|
54
37
|
#
|
55
|
-
# @return [Array]
|
56
|
-
def
|
57
|
-
|
38
|
+
# @return [Array<Array<String>>]
|
39
|
+
def render
|
40
|
+
if border?
|
41
|
+
out = []
|
58
42
|
|
59
|
-
|
43
|
+
out << border.top if border.top?
|
44
|
+
|
45
|
+
show[0...bordered_height].each do |line|
|
46
|
+
out << [border.left, line[0...bordered_width], border.right].flatten
|
47
|
+
end
|
48
|
+
|
49
|
+
out << border.bottom if border.bottom?
|
50
|
+
|
51
|
+
out
|
52
|
+
|
53
|
+
else
|
54
|
+
show
|
55
|
+
|
56
|
+
end
|
60
57
|
end
|
61
58
|
|
62
59
|
# Returns a string representation of the viewport.
|
63
60
|
#
|
64
61
|
# @return [String]
|
65
62
|
def to_s
|
66
|
-
|
63
|
+
render.map(&:join).join("\n")
|
67
64
|
end
|
68
65
|
|
69
66
|
private
|
70
67
|
|
71
68
|
attr_reader :interface
|
72
69
|
|
70
|
+
# Returns the visible content for the interface.
|
71
|
+
#
|
72
|
+
# @note If there are no lines of content, we return an empty array. If there
|
73
|
+
# are no more columns of content we return a space enclosed in an array;
|
74
|
+
# this prevents a weird line hopping bug which occurs when the current
|
75
|
+
# line has no more content, but subsequent lines do.
|
76
|
+
#
|
77
|
+
# @return [Array]
|
78
|
+
def show
|
79
|
+
return [] unless lines?
|
80
|
+
|
81
|
+
line_pad.map { |line| column_pad(line) }.compact
|
82
|
+
end
|
83
|
+
|
73
84
|
# Pad the number of rows so that we always return an Array of the same
|
74
85
|
# length for each viewport.
|
75
86
|
#
|
@@ -169,6 +180,16 @@ module Vedeu
|
|
169
180
|
height
|
170
181
|
end
|
171
182
|
|
183
|
+
# @return [Vedeu::Border]
|
184
|
+
def border
|
185
|
+
@_border ||= Vedeu.borders.find(interface.name)
|
186
|
+
end
|
187
|
+
|
188
|
+
# @return [Boolean]
|
189
|
+
def border?
|
190
|
+
Vedeu.borders.registered?(interface.name)
|
191
|
+
end
|
192
|
+
|
172
193
|
end # Viewport
|
173
194
|
|
174
195
|
end # Vedeu
|