vedeu 0.6.51 → 0.6.52
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/lib/vedeu/borders/refresh.rb +1 -0
- data/lib/vedeu/buffers/all.rb +2 -0
- data/lib/vedeu/buffers/empty.rb +78 -0
- data/lib/vedeu/buffers/view.rb +51 -0
- data/lib/vedeu/colours/colour.rb +24 -12
- data/lib/vedeu/editor/cropper.rb +1 -1
- data/lib/vedeu/editor/cursor.rb +6 -2
- data/lib/vedeu/editor/document.rb +50 -32
- data/lib/vedeu/esc/actions.rb +0 -7
- data/lib/vedeu/esc/borders.rb +0 -7
- data/lib/vedeu/esc/colours.rb +0 -2
- data/lib/vedeu/esc/mouse.rb +0 -7
- data/lib/vedeu/events/event.rb +2 -2
- data/lib/vedeu/interfaces/clear.rb +1 -0
- data/lib/vedeu/logging/all.rb +1 -0
- data/lib/vedeu/logging/clock_time.rb +34 -0
- data/lib/vedeu/logging/log.rb +20 -18
- data/lib/vedeu/logging/timer.rb +2 -2
- data/lib/vedeu/models/cell.rb +10 -0
- data/lib/vedeu/models/views/char.rb +12 -0
- data/lib/vedeu/models/views/line.rb +5 -0
- data/lib/vedeu/models/views/stream.rb +6 -0
- data/lib/vedeu/output/compressor.rb +31 -2
- data/lib/vedeu/output/output.rb +25 -2
- data/lib/vedeu/output/presentation/colour.rb +9 -0
- data/lib/vedeu/output/presentation/styles.rb +3 -0
- data/lib/vedeu/output/renderers/file.rb +1 -1
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/buffers/empty_test.rb +87 -0
- data/test/lib/vedeu/buffers/view_test.rb +36 -0
- data/test/lib/vedeu/colours/colour_test.rb +10 -13
- data/test/lib/vedeu/editor/cursor_test.rb +23 -5
- data/test/lib/vedeu/interfaces/clear_test.rb +4 -6
- data/test/lib/vedeu/logging/clock_time_test.rb +13 -0
- data/test/lib/vedeu/logging/timer_test.rb +3 -5
- data/test/lib/vedeu/models/cell_test.rb +16 -0
- data/test/lib/vedeu/models/views/char_test.rb +18 -0
- data/test/lib/vedeu/models/views/html_char_test.rb +30 -17
- data/test/lib/vedeu/models/views/line_test.rb +14 -0
- data/test/lib/vedeu/models/views/stream_test.rb +14 -0
- data/test/lib/vedeu/output/compressor_test.rb +43 -21
- data/test/lib/vedeu/output/renderers/json_test.rb +4 -1
- data/test/lib/vedeu/output/renderers/terminal_test.rb +4 -3
- data/test/lib/vedeu/templating/encoder_test.rb +1 -1
- data/test/lib/vedeu/templating/helpers_test.rb +6 -6
- data/vedeu.gemspec +1 -1
- metadata +13 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 134542edb6745534c69b060678db4f11bd0e5b47
|
4
|
+
data.tar.gz: c679c95b4f54b95a03ec19d6ed011d2590954905
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e63c021516235bf2d2567ed1416127b5ef882167d8811c5a7fa107591c87f596431bfb48a47aed11b394efc1dab68f29eeb671c2820a10a410741741ef536f6f
|
7
|
+
data.tar.gz: 1c0d40b4476b35b6cf4cd33161fd9b878da4efe5e8b8c02dc1d169d18adb877dc628c12276fde234cbbca3235eaebc1757c471d2c219c72994a6544455262da6
|
data/lib/vedeu/buffers/all.rb
CHANGED
@@ -0,0 +1,78 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Buffers
|
4
|
+
|
5
|
+
# Provides a grid of Vedeu::Models::Cell objects at the given
|
6
|
+
# height and width.
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
class Empty
|
10
|
+
|
11
|
+
# @!attribute [r] name
|
12
|
+
# @return [NilClass|String|Symbol]
|
13
|
+
attr_reader :name
|
14
|
+
|
15
|
+
# Returns a new instance of Vedeu::Buffers::Empty.
|
16
|
+
#
|
17
|
+
# @note
|
18
|
+
# If a particular key is missing from the attributes
|
19
|
+
# parameter, then it is added with the respective value from
|
20
|
+
# #defaults.
|
21
|
+
#
|
22
|
+
# @param attributes [Hash<Symbol => Fixnum, NilClass, String,
|
23
|
+
# Symbol]
|
24
|
+
# @option attributes name [NilClass|String|Symbol]
|
25
|
+
# @option attributes height [Fixnum]
|
26
|
+
# @option attributes width [Fixnum]
|
27
|
+
# @return [Vedeu::Buffers::Empty]
|
28
|
+
def initialize(attributes = {})
|
29
|
+
defaults.merge!(attributes).each do |key, value|
|
30
|
+
instance_variable_set("@#{key}", value || defaults.fetch(key))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [Array<Array<Vedeu::Models::Cell>>]
|
35
|
+
def buffer
|
36
|
+
Array.new(width) do |y|
|
37
|
+
Array.new(height) do |x|
|
38
|
+
Vedeu::Models::Cell.new(name: name, position: [y, x])
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# @note
|
44
|
+
# We add 1 to both the width and height as terminal screens
|
45
|
+
# are 1-indexed.
|
46
|
+
#
|
47
|
+
# @return [Fixnum]
|
48
|
+
def height
|
49
|
+
@height + 1
|
50
|
+
end
|
51
|
+
|
52
|
+
# @note
|
53
|
+
# We add 1 to both the width and height as terminal screens
|
54
|
+
# are 1-indexed.
|
55
|
+
#
|
56
|
+
# @return [Fixnum]
|
57
|
+
def width
|
58
|
+
@width + 1
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
# Returns the default options/attributes for this class.
|
64
|
+
#
|
65
|
+
# @return [Hash<Symbol => void>]
|
66
|
+
def defaults
|
67
|
+
{
|
68
|
+
height: Vedeu.height,
|
69
|
+
name: nil,
|
70
|
+
width: Vedeu.width,
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
end # Empty
|
75
|
+
|
76
|
+
end # Buffers
|
77
|
+
|
78
|
+
end # Vedeu
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Buffers
|
4
|
+
|
5
|
+
class View
|
6
|
+
|
7
|
+
def initialize(attributes = {})
|
8
|
+
defaults.merge!(attributes).each do |key, value|
|
9
|
+
instance_variable_set("@#{key}", value || defaults.fetch(key))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def border
|
16
|
+
Vedeu.borders.by_name(name)
|
17
|
+
end
|
18
|
+
|
19
|
+
def buffer
|
20
|
+
@_buffer ||= Vedeu::Buffers::Empty.new(height: border.height,
|
21
|
+
name: name,
|
22
|
+
width: border.width).buffer
|
23
|
+
end
|
24
|
+
|
25
|
+
def current
|
26
|
+
@current ||= buffer
|
27
|
+
end
|
28
|
+
|
29
|
+
def current_reset!
|
30
|
+
@current = buffer
|
31
|
+
end
|
32
|
+
|
33
|
+
def defaults
|
34
|
+
{
|
35
|
+
name: ''
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def dirty
|
40
|
+
@dirty ||= buffer
|
41
|
+
end
|
42
|
+
|
43
|
+
def dirty_reset!
|
44
|
+
@dirty = buffer
|
45
|
+
end
|
46
|
+
|
47
|
+
end # View
|
48
|
+
|
49
|
+
end # Buffers
|
50
|
+
|
51
|
+
end # Vedeu
|
data/lib/vedeu/colours/colour.rb
CHANGED
@@ -37,14 +37,6 @@ module Vedeu
|
|
37
37
|
#
|
38
38
|
class Colour
|
39
39
|
|
40
|
-
# @!attribute [r] background
|
41
|
-
# @return [Vedeu::Colours::Background]
|
42
|
-
attr_reader :background
|
43
|
-
|
44
|
-
# @!attribute [r] foreground
|
45
|
-
# @return [Vedeu::Colours::Foreground]
|
46
|
-
attr_reader :foreground
|
47
|
-
|
48
40
|
# @param value [Vedeu::Colours::Colour|Hash<Symbol => void>]
|
49
41
|
# @return [Vedeu::Colours::Colour]
|
50
42
|
def self.coerce(value)
|
@@ -78,19 +70,25 @@ module Vedeu
|
|
78
70
|
# @option attributes foreground [String]
|
79
71
|
# @return [Vedeu::Colours::Colour]
|
80
72
|
def initialize(attributes = {})
|
81
|
-
|
82
|
-
|
73
|
+
defaults.merge!(attributes).each do |key, value|
|
74
|
+
instance_variable_set("@#{key}", value)
|
75
|
+
end
|
83
76
|
end
|
84
77
|
|
85
78
|
# @return [Hash<Symbol => Vedeu::Colours::Background,
|
86
79
|
# Vedeu::Colours::Foreground>]
|
87
80
|
def attributes
|
88
81
|
{
|
89
|
-
background:
|
90
|
-
foreground:
|
82
|
+
background: background,
|
83
|
+
foreground: foreground,
|
91
84
|
}
|
92
85
|
end
|
93
86
|
|
87
|
+
# @return [Vedeu::Colours::Background]
|
88
|
+
def background
|
89
|
+
@background = Vedeu::Colours::Background.coerce(@background)
|
90
|
+
end
|
91
|
+
|
94
92
|
# Converts the value into a Vedeu::Colours::Background.
|
95
93
|
#
|
96
94
|
# @param value [String]
|
@@ -109,6 +107,11 @@ module Vedeu
|
|
109
107
|
end
|
110
108
|
alias_method :==, :eql?
|
111
109
|
|
110
|
+
# @return [Vedeu::Colours::Foreground]
|
111
|
+
def foreground
|
112
|
+
@foreground = Vedeu::Colours::Foreground.coerce(@foreground)
|
113
|
+
end
|
114
|
+
|
112
115
|
# Converts the value into a Vedeu::Colours::Foreground.
|
113
116
|
#
|
114
117
|
# @param value [String]
|
@@ -126,6 +129,15 @@ module Vedeu
|
|
126
129
|
end
|
127
130
|
alias_method :to_str, :to_s
|
128
131
|
|
132
|
+
private
|
133
|
+
|
134
|
+
def defaults
|
135
|
+
{
|
136
|
+
background: Vedeu::Colours::Background.new,
|
137
|
+
foreground: Vedeu::Colours::Foreground.new
|
138
|
+
}
|
139
|
+
end
|
140
|
+
|
129
141
|
end # Colour
|
130
142
|
|
131
143
|
end # Colours
|
data/lib/vedeu/editor/cropper.rb
CHANGED
@@ -43,7 +43,7 @@ module Vedeu
|
|
43
43
|
|
44
44
|
visible.each_with_index do |line, iy|
|
45
45
|
line.chars.each_with_index do |char, ix|
|
46
|
-
out << Vedeu::Views::Char.new(
|
46
|
+
out << Vedeu::Views::Char.new(name: name,
|
47
47
|
position: [(by + iy), (bx + ix)],
|
48
48
|
value: char.freeze)
|
49
49
|
end
|
data/lib/vedeu/editor/cursor.rb
CHANGED
@@ -65,9 +65,11 @@ module Vedeu
|
|
65
65
|
|
66
66
|
# Move the virtual cursor down by one line.
|
67
67
|
#
|
68
|
+
# @param size [Fixnum]
|
68
69
|
# @return [Vedeu::Editor::Cursor]
|
69
|
-
def down
|
70
|
+
def down(size = nil)
|
70
71
|
@y += 1
|
72
|
+
@x = size if size && x > size
|
71
73
|
|
72
74
|
self
|
73
75
|
end
|
@@ -132,10 +134,12 @@ module Vedeu
|
|
132
134
|
|
133
135
|
# Move the virtual cursor up by one line.
|
134
136
|
#
|
137
|
+
# @param size [Fixnum]
|
135
138
|
# @return [Vedeu::Editor::Cursor]
|
136
|
-
def up
|
139
|
+
def up(size = nil)
|
137
140
|
@oy -= 1 unless @oy == 0
|
138
141
|
@y -= 1
|
142
|
+
@x = size if size && x > size
|
139
143
|
|
140
144
|
self
|
141
145
|
end
|
@@ -77,9 +77,9 @@ module Vedeu
|
|
77
77
|
#
|
78
78
|
# @return [Vedeu::Editor::Document]
|
79
79
|
def delete_character
|
80
|
-
return self if
|
80
|
+
return self if document_start?
|
81
81
|
|
82
|
-
if
|
82
|
+
if first_char? && y > 0
|
83
83
|
delete_line
|
84
84
|
|
85
85
|
return
|
@@ -132,13 +132,12 @@ module Vedeu
|
|
132
132
|
|
133
133
|
down
|
134
134
|
|
135
|
-
cursor.bol.refresh
|
136
|
-
|
137
135
|
refresh
|
138
136
|
end
|
139
137
|
|
140
138
|
# Returns the current line from the collection of lines.
|
141
139
|
#
|
140
|
+
# @param index [Fixnum]
|
142
141
|
# @return [Array<String|void>]
|
143
142
|
def line(index = y)
|
144
143
|
lines.line(index)
|
@@ -160,6 +159,8 @@ module Vedeu
|
|
160
159
|
|
161
160
|
@lines = defaults[:data]
|
162
161
|
|
162
|
+
cursor.refresh
|
163
|
+
|
163
164
|
refresh
|
164
165
|
end
|
165
166
|
|
@@ -172,9 +173,9 @@ module Vedeu
|
|
172
173
|
|
173
174
|
Vedeu.trigger(:_clear_view_content_, name)
|
174
175
|
|
175
|
-
Vedeu.
|
176
|
+
Vedeu.buffer_update(output)
|
176
177
|
|
177
|
-
|
178
|
+
Vedeu.direct_write(output.map(&:to_s).join)
|
178
179
|
|
179
180
|
self
|
180
181
|
end
|
@@ -183,7 +184,7 @@ module Vedeu
|
|
183
184
|
#
|
184
185
|
# @return [Vedeu::Editor::Document]
|
185
186
|
def left
|
186
|
-
return self if
|
187
|
+
return self if first_char?
|
187
188
|
|
188
189
|
cursor.left.refresh
|
189
190
|
|
@@ -194,7 +195,7 @@ module Vedeu
|
|
194
195
|
#
|
195
196
|
# @return [Vedeu::Editor::Document]
|
196
197
|
def right
|
197
|
-
return self if
|
198
|
+
return self if last_char?
|
198
199
|
|
199
200
|
cursor.right.refresh
|
200
201
|
|
@@ -205,11 +206,9 @@ module Vedeu
|
|
205
206
|
#
|
206
207
|
# @return [Vedeu::Editor::Document]
|
207
208
|
def up
|
208
|
-
return self if
|
209
|
+
return self if first_line?
|
209
210
|
|
210
|
-
cursor.up.refresh
|
211
|
-
|
212
|
-
reposition_cursor_x!
|
211
|
+
cursor.up(prev_line_size).refresh
|
213
212
|
|
214
213
|
self
|
215
214
|
end
|
@@ -218,29 +217,26 @@ module Vedeu
|
|
218
217
|
#
|
219
218
|
# @return [Vedeu::Editor::Document]
|
220
219
|
def down
|
221
|
-
return self if
|
222
|
-
|
223
|
-
cursor.down.refresh
|
220
|
+
return self if last_line?
|
224
221
|
|
225
|
-
|
222
|
+
cursor.down(next_line_size).refresh
|
226
223
|
|
227
224
|
self
|
228
225
|
end
|
229
226
|
|
230
227
|
private
|
231
228
|
|
232
|
-
#
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
229
|
+
# @return [Boolean]
|
230
|
+
def document_start?
|
231
|
+
first_char? && first_line?
|
232
|
+
end
|
233
|
+
|
234
|
+
# Return a virtual cursor to track the cursor position within
|
235
|
+
# the document.
|
237
236
|
#
|
238
237
|
# @return [Vedeu::Editor::Cursor]
|
239
|
-
def
|
240
|
-
|
241
|
-
cursor.x = line.size
|
242
|
-
cursor.refresh
|
243
|
-
end
|
238
|
+
def cursor
|
239
|
+
@cursor ||= Vedeu::Editor::Cursor.new(name: name)
|
244
240
|
end
|
245
241
|
|
246
242
|
# Returns the default options/attributes for this class.
|
@@ -254,6 +250,31 @@ module Vedeu
|
|
254
250
|
}
|
255
251
|
end
|
256
252
|
|
253
|
+
# @return [Boolean]
|
254
|
+
def first_char?
|
255
|
+
x - 1 < 0
|
256
|
+
end
|
257
|
+
|
258
|
+
# @return [Boolean]
|
259
|
+
def first_line?
|
260
|
+
y - 1 < 0
|
261
|
+
end
|
262
|
+
|
263
|
+
# @return [Boolean]
|
264
|
+
def last_char?
|
265
|
+
x + 1 > line.size
|
266
|
+
end
|
267
|
+
|
268
|
+
# @return [Boolean]
|
269
|
+
def last_line?
|
270
|
+
y + 1 >= lines.size
|
271
|
+
end
|
272
|
+
|
273
|
+
# @return [Fixnum]
|
274
|
+
def next_line_size
|
275
|
+
line(y + 1).size
|
276
|
+
end
|
277
|
+
|
257
278
|
# Return the data needed to render the document, based on the
|
258
279
|
# current virtual cursor position. This output may be a cropped
|
259
280
|
# representation of the full document depending on the size of
|
@@ -267,12 +288,9 @@ module Vedeu
|
|
267
288
|
oy: oy).viewport
|
268
289
|
end
|
269
290
|
|
270
|
-
#
|
271
|
-
|
272
|
-
|
273
|
-
# @return [Vedeu::Editor::Cursor]
|
274
|
-
def cursor
|
275
|
-
@cursor ||= Vedeu::Editor::Cursor.new(name: name)
|
291
|
+
# @return [Fixnum]
|
292
|
+
def prev_line_size
|
293
|
+
line(y - 1).size
|
276
294
|
end
|
277
295
|
|
278
296
|
end # Document
|