vedeu 0.3.4 → 0.3.5
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/README.md +1 -1
- data/Rakefile +6 -0
- data/bin/vedeu_drb_client +8 -3
- data/bin/vedeu_drb_server +113 -0
- data/bin/vedeu_test +1 -1
- data/docs/events.md +0 -127
- data/examples/borders_app.rb +17 -7
- data/examples/configuration_app.rb +1 -1
- data/examples/cursor_app.rb +4 -2
- data/examples/drb_app.rb +113 -0
- data/examples/focus_app.rb +1 -1
- data/examples/geometry_app.rb +1 -1
- data/examples/hello_world.rb +1 -1
- data/examples/lines_app.rb +1 -1
- data/features/start_stop.feature +1 -1
- data/inch.yml +5 -0
- data/lib/vedeu/all.rb +2 -0
- data/lib/vedeu/api.rb +1 -0
- data/lib/vedeu/application.rb +17 -36
- data/lib/vedeu/bindings.rb +134 -27
- data/lib/vedeu/buffers/display_buffer.rb +1 -4
- data/lib/vedeu/configuration/api.rb +15 -14
- data/lib/vedeu/configuration/cli.rb +17 -16
- data/lib/vedeu/configuration/configuration.rb +3 -1
- data/lib/vedeu/cursor/cursor.rb +6 -8
- data/lib/vedeu/cursor/move_cursor.rb +1 -0
- data/lib/vedeu/cursor/toggle_cursor.rb +1 -0
- data/lib/vedeu/debug.rb +23 -0
- data/lib/vedeu/distributed/all.rb +1 -1
- data/lib/vedeu/distributed/client.rb +55 -13
- data/lib/vedeu/distributed/server.rb +207 -0
- data/lib/vedeu/distributed/subprocess.rb +22 -21
- data/lib/vedeu/distributed/templates/default_application.vedeu +3 -1
- data/lib/vedeu/distributed/test_application.rb +2 -1
- data/lib/vedeu/distributed/uri.rb +1 -0
- data/lib/vedeu/dsl/all.rb +4 -2
- data/lib/vedeu/dsl/components/border.rb +11 -10
- data/lib/vedeu/dsl/components/geometry.rb +1 -0
- data/lib/vedeu/dsl/components/keymap.rb +1 -0
- data/lib/vedeu/dsl/components/menu.rb +1 -0
- data/lib/vedeu/dsl/interface.rb +1 -0
- data/lib/vedeu/dsl/line.rb +3 -1
- data/lib/vedeu/dsl/shared/colour.rb +1 -0
- data/lib/vedeu/dsl/shared/style.rb +1 -0
- data/lib/vedeu/dsl/shared/text.rb +2 -0
- data/lib/vedeu/dsl/shared/use.rb +3 -0
- data/lib/vedeu/dsl/stream.rb +3 -1
- data/lib/vedeu/dsl/view.rb +1 -0
- data/lib/vedeu/events/event.rb +9 -6
- data/lib/vedeu/events/trigger.rb +18 -7
- data/lib/vedeu/exceptions.rb +4 -1
- data/lib/vedeu/input/input.rb +1 -0
- data/lib/vedeu/input/key.rb +0 -1
- data/lib/vedeu/input/keymap.rb +5 -3
- data/lib/vedeu/input/keys.rb +1 -0
- data/lib/vedeu/input/mapper.rb +1 -0
- data/lib/vedeu/launcher.rb +35 -12
- data/lib/vedeu/main_loop.rb +53 -0
- data/lib/vedeu/models/collection.rb +11 -3
- data/lib/vedeu/models/focus.rb +3 -3
- data/lib/vedeu/models/geometry.rb +8 -16
- data/lib/vedeu/models/group.rb +1 -0
- data/lib/vedeu/models/menu.rb +2 -1
- data/lib/vedeu/models/model.rb +7 -1
- data/lib/vedeu/models/view/char.rb +52 -44
- data/lib/vedeu/models/view/chars.rb +1 -0
- data/lib/vedeu/models/view/composition.rb +2 -1
- data/lib/vedeu/models/view/interface.rb +5 -3
- data/lib/vedeu/models/view/interfaces.rb +1 -0
- data/lib/vedeu/models/view/line.rb +2 -1
- data/lib/vedeu/models/view/stream.rb +2 -1
- data/lib/vedeu/models/view/streams.rb +1 -0
- data/lib/vedeu/output/all.rb +4 -0
- data/lib/vedeu/output/border.rb +75 -206
- data/lib/vedeu/output/compositor.rb +1 -0
- data/lib/vedeu/output/html_char.rb +119 -0
- data/lib/vedeu/output/html_renderer.rb +89 -0
- data/lib/vedeu/output/output.rb +48 -44
- data/lib/vedeu/output/position_index.rb +12 -1
- data/lib/vedeu/output/renderer.rb +28 -0
- data/lib/vedeu/output/viewport.rb +14 -14
- data/lib/vedeu/output/virtual_buffer.rb +56 -0
- data/lib/vedeu/output/virtual_terminal.rb +42 -34
- data/lib/vedeu/output/wordwrap.rb +3 -0
- data/lib/vedeu/output/writer.rb +13 -1
- data/lib/vedeu/presentation/background.rb +1 -0
- data/lib/vedeu/presentation/colour.rb +8 -7
- data/lib/vedeu/presentation/foreground.rb +1 -0
- data/lib/vedeu/presentation/presentation.rb +43 -7
- data/lib/vedeu/presentation/translator.rb +12 -0
- data/lib/vedeu/repositories/repository.rb +8 -8
- data/lib/vedeu/support/bounding_area.rb +2 -0
- data/lib/vedeu/support/coercions.rb +2 -1
- data/lib/vedeu/support/common.rb +1 -0
- data/lib/vedeu/support/console.rb +17 -23
- data/lib/vedeu/support/content_geometry.rb +2 -0
- data/lib/vedeu/support/coordinate.rb +1 -0
- data/lib/vedeu/support/esc.rb +58 -29
- data/lib/vedeu/support/grid.rb +1 -0
- data/lib/vedeu/support/limit.rb +9 -0
- data/lib/vedeu/support/log.rb +31 -9
- data/lib/vedeu/support/node.rb +8 -18
- data/lib/vedeu/support/position.rb +13 -34
- data/lib/vedeu/support/position_validator.rb +3 -0
- data/lib/vedeu/support/read.rb +1 -0
- data/lib/vedeu/support/refresh.rb +3 -2
- data/lib/vedeu/support/terminal.rb +11 -5
- data/lib/vedeu/support/trace.rb +16 -1
- data/lib/vedeu/support/visible.rb +2 -0
- data/lib/vedeu/support/write.rb +1 -0
- data/lib/vedeu/traps.rb +1 -0
- data/lib/vedeu.rb +2 -0
- data/test/integration/distributed_test.rb +10 -8
- data/test/lib/vedeu/api_test.rb +3 -7
- data/test/lib/vedeu/application_test.rb +2 -5
- data/test/lib/vedeu/configuration/api_test.rb +12 -0
- data/test/lib/vedeu/cursor/cursor_test.rb +2 -0
- data/test/lib/vedeu/distributed/client_test.rb +17 -7
- data/test/lib/vedeu/distributed/server_test.rb +56 -0
- data/test/lib/vedeu/distributed/test_application_test.rb +7 -3
- data/test/lib/vedeu/dsl/components/border_test.rb +10 -2
- data/test/lib/vedeu/dsl/interface_test.rb +6 -0
- data/test/lib/vedeu/dsl/line_test.rb +19 -0
- data/test/lib/vedeu/dsl/shared/colour_test.rb +4 -26
- data/test/lib/vedeu/dsl/shared/text_test.rb +8 -1
- data/test/lib/vedeu/dsl/stream_test.rb +13 -1
- data/test/lib/vedeu/input/input_test.rb +1 -1
- data/test/lib/vedeu/input/key_test.rb +3 -16
- data/test/lib/vedeu/launcher_test.rb +11 -1
- data/test/lib/vedeu/main_loop_test.rb +41 -0
- data/test/lib/vedeu/models/geometry_test.rb +15 -34
- data/test/lib/vedeu/models/view/char_test.rb +44 -45
- data/test/lib/vedeu/models/view/interface_test.rb +6 -0
- data/test/lib/vedeu/models/view/line_test.rb +1 -1
- data/test/lib/vedeu/models/view/stream_test.rb +1 -1
- data/test/lib/vedeu/output/border_test.rb +6 -5
- data/test/lib/vedeu/output/compositor_test.rb +2 -20
- data/test/lib/vedeu/output/html_char_test.rb +85 -0
- data/test/lib/vedeu/output/html_renderer_test.rb +37 -0
- data/test/lib/vedeu/output/position_index_test.rb +2 -10
- data/test/lib/vedeu/output/renderer_test.rb +24 -0
- data/test/lib/vedeu/output/virtual_buffer_test.rb +53 -0
- data/test/lib/vedeu/output/virtual_terminal_test.rb +32 -2
- data/test/lib/vedeu/presentation/background_test.rb +41 -1
- data/test/lib/vedeu/presentation/colour_test.rb +10 -6
- data/test/lib/vedeu/presentation/foreground_test.rb +46 -6
- data/test/lib/vedeu/presentation/presentation_test.rb +44 -1
- data/test/lib/vedeu/presentation/translator_test.rb +34 -0
- data/test/lib/vedeu/repositories/repository_test.rb +1 -1
- data/test/lib/vedeu/support/bounding_area_test.rb +4 -12
- data/test/lib/vedeu/support/console_test.rb +9 -50
- data/test/lib/vedeu/support/esc_test.rb +7 -7
- data/test/lib/vedeu/support/position_test.rb +42 -0
- data/test/lib/vedeu/support/terminal_test.rb +5 -20
- data/test/lib/vedeu/support/write_test.rb +42 -18
- data/test/support/helpers/all.rb +0 -1
- data/test/support/helpers/repository_test_module.rb +1 -0
- data/test/test_helper.rb +5 -2
- data/vedeu.gemspec +7 -5
- metadata +60 -14
- data/lib/vedeu/distributed/application.rb +0 -91
- data/test/lib/vedeu/distributed/application_test.rb +0 -24
- data/test/support/helpers/presentation.rb +0 -16
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'vedeu/output/html_char'
|
1
2
|
require 'vedeu/presentation/presentation'
|
2
3
|
|
3
4
|
module Vedeu
|
@@ -9,58 +10,34 @@ module Vedeu
|
|
9
10
|
# character is returned in the escape sequence.
|
10
11
|
#
|
11
12
|
# @api private
|
13
|
+
#
|
12
14
|
class Char
|
13
15
|
|
14
16
|
include Vedeu::Presentation
|
15
17
|
|
16
|
-
attr_accessor :
|
18
|
+
attr_accessor :border,
|
19
|
+
:parent,
|
17
20
|
:position
|
18
21
|
|
19
|
-
class << self
|
20
|
-
|
21
|
-
# @param value []
|
22
|
-
# @param parent []
|
23
|
-
# @param colour []
|
24
|
-
# @param style []
|
25
|
-
# @param position []
|
26
|
-
# @return [Vedeu::Char]
|
27
|
-
def coerce(value = nil, parent = nil, colour = nil, style = nil, position = nil)
|
28
|
-
if value.is_a?(self)
|
29
|
-
value
|
30
|
-
|
31
|
-
elsif value.is_a?(Array)
|
32
|
-
if value.first.is_a?(self)
|
33
|
-
value
|
34
|
-
|
35
|
-
elsif value.first.is_a?(String)
|
36
|
-
value.map { |char| new(char, parent, colour, style, position) }
|
37
|
-
|
38
|
-
else
|
39
|
-
# ...
|
40
|
-
|
41
|
-
end
|
42
|
-
else
|
43
|
-
# ...
|
44
|
-
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
22
|
# Returns a new instance of Char.
|
51
23
|
#
|
52
|
-
# @param
|
53
|
-
# @
|
54
|
-
# @
|
55
|
-
# @
|
56
|
-
# @
|
24
|
+
# @param attributes [Hash]
|
25
|
+
# @option attributes value [String]
|
26
|
+
# @option attributes parent [Line]
|
27
|
+
# @option attributes colour [Colour]
|
28
|
+
# @option attributes style [Style]
|
29
|
+
# @option attributes position [Position]
|
30
|
+
# @option attributes border [Boolean]
|
57
31
|
# @return [Char]
|
58
|
-
def initialize(
|
59
|
-
@
|
60
|
-
|
61
|
-
@
|
62
|
-
@
|
63
|
-
@
|
32
|
+
def initialize(attributes = {})
|
33
|
+
@attributes = defaults.merge(attributes)
|
34
|
+
|
35
|
+
@border = @attributes[:border]
|
36
|
+
@colour = Vedeu::Colour.coerce(@attributes[:colour])
|
37
|
+
@parent = @attributes[:parent]
|
38
|
+
@position = Vedeu::Position.coerce(@attributes[:position])
|
39
|
+
@style = @attributes[:style]
|
40
|
+
@value = @attributes[:value]
|
64
41
|
end
|
65
42
|
|
66
43
|
# Returns log friendly output.
|
@@ -86,7 +63,38 @@ module Vedeu
|
|
86
63
|
def value
|
87
64
|
return '' unless @value
|
88
65
|
|
89
|
-
@value
|
66
|
+
@value
|
67
|
+
end
|
68
|
+
|
69
|
+
# @return [Fixnum|NilClass]
|
70
|
+
def x
|
71
|
+
position.x if position
|
72
|
+
end
|
73
|
+
|
74
|
+
# @return [Fixnum|NilClass]
|
75
|
+
def y
|
76
|
+
position.y if position
|
77
|
+
end
|
78
|
+
|
79
|
+
# @return [String]
|
80
|
+
def to_html
|
81
|
+
@to_html ||= HTMLChar.render(self)
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
# The default values for a new instance of this class.
|
87
|
+
#
|
88
|
+
# @return [Hash]
|
89
|
+
def defaults
|
90
|
+
{
|
91
|
+
border: nil,
|
92
|
+
colour: nil,
|
93
|
+
parent: nil,
|
94
|
+
position: nil,
|
95
|
+
style: nil,
|
96
|
+
value: nil,
|
97
|
+
}
|
90
98
|
end
|
91
99
|
|
92
100
|
end # Char
|
@@ -11,6 +11,7 @@ module Vedeu
|
|
11
11
|
# A composition is a collection of interfaces.
|
12
12
|
#
|
13
13
|
# @api private
|
14
|
+
#
|
14
15
|
class Composition
|
15
16
|
|
16
17
|
include Vedeu::Presentation
|
@@ -37,7 +38,7 @@ module Vedeu
|
|
37
38
|
end
|
38
39
|
|
39
40
|
# @param child [Vedeu::Interface]
|
40
|
-
# @return []
|
41
|
+
# @return [void]
|
41
42
|
def add(child)
|
42
43
|
@interfaces = interfaces.add(child)
|
43
44
|
end
|
@@ -45,8 +45,7 @@ module Vedeu
|
|
45
45
|
:left,
|
46
46
|
:width,
|
47
47
|
:height,
|
48
|
-
:origin
|
49
|
-
:raw_origin
|
48
|
+
:origin
|
50
49
|
|
51
50
|
# Return a new instance of Interface.
|
52
51
|
#
|
@@ -73,11 +72,14 @@ module Vedeu
|
|
73
72
|
end
|
74
73
|
|
75
74
|
# @param child []
|
76
|
-
# @return []
|
75
|
+
# @return [void]
|
77
76
|
def add(child)
|
78
77
|
@lines = lines.add(child)
|
79
78
|
end
|
80
79
|
|
80
|
+
# @note
|
81
|
+
# This may be unused. (GL 2015-02-20)
|
82
|
+
#
|
81
83
|
# @return [Hash]
|
82
84
|
def attributes
|
83
85
|
{
|
@@ -10,6 +10,7 @@ module Vedeu
|
|
10
10
|
# {Vedeu::Interface} it belongs to.
|
11
11
|
#
|
12
12
|
# @api private
|
13
|
+
#
|
13
14
|
class Line
|
14
15
|
|
15
16
|
include Vedeu::Model
|
@@ -39,7 +40,7 @@ module Vedeu
|
|
39
40
|
end
|
40
41
|
|
41
42
|
# @param child []
|
42
|
-
# @return []
|
43
|
+
# @return [void]
|
43
44
|
def add(child)
|
44
45
|
@streams = streams.add(child)
|
45
46
|
end
|
@@ -8,6 +8,7 @@ module Vedeu
|
|
8
8
|
# characters in that line.
|
9
9
|
#
|
10
10
|
# @api private
|
11
|
+
#
|
11
12
|
class Stream
|
12
13
|
|
13
14
|
include Vedeu::Model
|
@@ -56,7 +57,7 @@ module Vedeu
|
|
56
57
|
return [] if value.empty?
|
57
58
|
|
58
59
|
value.chars.map do |char|
|
59
|
-
member.new(char, parent, colour, style, nil).to_s
|
60
|
+
member.new({ value: char, parent: parent, colour: colour, style: style, position: nil }).to_s
|
60
61
|
end
|
61
62
|
end
|
62
63
|
|
data/lib/vedeu/output/all.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'vedeu/output/border'
|
2
2
|
require 'vedeu/output/compositor'
|
3
3
|
require 'vedeu/output/position_index'
|
4
|
+
require 'vedeu/output/virtual_buffer'
|
5
|
+
require 'vedeu/output/html_char'
|
6
|
+
require 'vedeu/output/html_renderer'
|
7
|
+
require 'vedeu/output/renderer'
|
4
8
|
require 'vedeu/output/output'
|
5
9
|
require 'vedeu/output/viewport'
|
6
10
|
require 'vedeu/output/virtual_terminal'
|
data/lib/vedeu/output/border.rb
CHANGED
@@ -14,29 +14,67 @@ module Vedeu
|
|
14
14
|
|
15
15
|
include Vedeu::Model
|
16
16
|
|
17
|
-
attr_accessor :attributes
|
18
|
-
|
17
|
+
attr_accessor :attributes,
|
18
|
+
:bottom_left,
|
19
|
+
:bottom_right,
|
20
|
+
:horizontal,
|
21
|
+
:show_bottom,
|
22
|
+
:show_left,
|
23
|
+
:show_right,
|
24
|
+
:show_top,
|
25
|
+
:top_left,
|
26
|
+
:top_right,
|
27
|
+
:vertical
|
28
|
+
|
29
|
+
attr_reader :name,
|
30
|
+
:colour,
|
31
|
+
:enabled,
|
32
|
+
:style
|
33
|
+
|
34
|
+
alias_method :enabled?, :enabled
|
35
|
+
alias_method :bottom?, :show_bottom
|
36
|
+
alias_method :left?, :show_left
|
37
|
+
alias_method :right?, :show_right
|
38
|
+
alias_method :top?, :show_top
|
19
39
|
|
20
40
|
# Returns a new instance of Border.
|
21
41
|
#
|
22
42
|
# @param attributes [Hash]
|
23
|
-
# @option attributes bottom_left [String]
|
24
|
-
# @option attributes bottom_right [String]
|
43
|
+
# @option attributes bottom_left [String] The bottom left border character.
|
44
|
+
# @option attributes bottom_right [String] The bottom right border
|
45
|
+
# character.
|
25
46
|
# @option attributes colour
|
26
|
-
# @option attributes enabled [Boolean]
|
27
|
-
#
|
47
|
+
# @option attributes enabled [Boolean] Indicate whether the border is to be
|
48
|
+
# shown for this interface.
|
49
|
+
# @option attributes horizontal [String] The horizontal border character.
|
28
50
|
# @option attributes name [String]
|
29
51
|
# @option attributes style
|
30
|
-
# @option attributes show_bottom [Boolean]
|
31
|
-
#
|
32
|
-
# @option attributes
|
33
|
-
#
|
34
|
-
# @option attributes
|
35
|
-
#
|
36
|
-
# @option attributes
|
52
|
+
# @option attributes show_bottom [Boolean] Indicate whether the bottom
|
53
|
+
# border is to be shown.
|
54
|
+
# @option attributes show_left [Boolean] Indicate whether the left border
|
55
|
+
# is to be shown.
|
56
|
+
# @option attributes show_right [Boolean] Indicate whether the right border
|
57
|
+
# is to be shown.
|
58
|
+
# @option attributes show_top [Boolean] Indicate whether the top border is
|
59
|
+
# to be shown.
|
60
|
+
# @option attributes top_left [String] The top left border character.
|
61
|
+
# @option attributes top_right [String] The top right border character.
|
62
|
+
# @option attributes vertical [String] The vertical border character.
|
37
63
|
# @return [Border]
|
38
64
|
def initialize(attributes = {})
|
39
65
|
@attributes = defaults.merge(attributes)
|
66
|
+
|
67
|
+
@enabled = @attributes[:enabled]
|
68
|
+
@bottom_left = @attributes[:bottom_left]
|
69
|
+
@bottom_right = @attributes[:bottom_right]
|
70
|
+
@show_bottom = @attributes[:show_bottom]
|
71
|
+
@show_left = @attributes[:show_left]
|
72
|
+
@show_right = @attributes[:show_right]
|
73
|
+
@show_top = @attributes[:show_top]
|
74
|
+
@top_left = @attributes[:top_left]
|
75
|
+
@top_right = @attributes[:top_right]
|
76
|
+
@horizontal = @attributes[:horizontal]
|
77
|
+
@vertical = @attributes[:vertical]
|
40
78
|
@name = @attributes[:name]
|
41
79
|
@colour = Colour.coerce(@attributes[:colour])
|
42
80
|
@repository = Vedeu.borders
|
@@ -81,24 +119,6 @@ module Vedeu
|
|
81
119
|
end
|
82
120
|
end
|
83
121
|
|
84
|
-
# Returns the interface with border (if enabled) and the content for the
|
85
|
-
# interface.
|
86
|
-
#
|
87
|
-
# @return [Array<Array<String>>]
|
88
|
-
def render
|
89
|
-
out = []
|
90
|
-
|
91
|
-
out << top if top?
|
92
|
-
|
93
|
-
interface.viewport[0...height].each do |line|
|
94
|
-
out << [left, line[0...width], right].flatten
|
95
|
-
end
|
96
|
-
|
97
|
-
out << bottom if bottom?
|
98
|
-
|
99
|
-
out
|
100
|
-
end
|
101
|
-
|
102
122
|
# Set the border colour.
|
103
123
|
#
|
104
124
|
# @return [Vedeu::Colour]
|
@@ -113,42 +133,6 @@ module Vedeu
|
|
113
133
|
@style = Style.coerce(value)
|
114
134
|
end
|
115
135
|
|
116
|
-
# Returns a boolean indicating whether the border is to be shown for this
|
117
|
-
# interface.
|
118
|
-
#
|
119
|
-
# @return [Boolean]
|
120
|
-
def enabled?
|
121
|
-
attributes[:enabled]
|
122
|
-
end
|
123
|
-
|
124
|
-
# Returns a boolean indicating whether the bottom border is to be shown.
|
125
|
-
#
|
126
|
-
# @return [Boolean]
|
127
|
-
def bottom?
|
128
|
-
attributes[:show_bottom]
|
129
|
-
end
|
130
|
-
|
131
|
-
# Returns a boolean indicating whether the left border is to be shown.
|
132
|
-
#
|
133
|
-
# @return [Boolean]
|
134
|
-
def left?
|
135
|
-
attributes[:show_left]
|
136
|
-
end
|
137
|
-
|
138
|
-
# Returns a boolean indicating whether the right border is to be shown.
|
139
|
-
#
|
140
|
-
# @return [Boolean]
|
141
|
-
def right?
|
142
|
-
attributes[:show_right]
|
143
|
-
end
|
144
|
-
|
145
|
-
# Returns a boolean indicating whether the top border is to be shown.
|
146
|
-
#
|
147
|
-
# @return [Boolean]
|
148
|
-
def top?
|
149
|
-
attributes[:show_top]
|
150
|
-
end
|
151
|
-
|
152
136
|
# Returns a string representation of the border for the interface without
|
153
137
|
# content.
|
154
138
|
#
|
@@ -166,31 +150,31 @@ module Vedeu
|
|
166
150
|
|
167
151
|
out = []
|
168
152
|
|
169
|
-
out << bottom_left
|
170
|
-
|
171
|
-
out << border
|
153
|
+
out << border(bottom_left, :bottom_left) if left?
|
154
|
+
width.times do
|
155
|
+
out << border(horizontal, :bottom_horizontal)
|
172
156
|
end
|
173
|
-
out << bottom_right
|
157
|
+
out << border(bottom_right, :bottom_right) if right?
|
174
158
|
|
175
|
-
out
|
159
|
+
out.flatten
|
176
160
|
end
|
177
161
|
|
178
162
|
# Renders the left border for the interface.
|
179
163
|
#
|
180
164
|
# @return [String]
|
181
165
|
def left
|
182
|
-
return
|
166
|
+
return [] unless left?
|
183
167
|
|
184
|
-
|
168
|
+
border(vertical, :left_vertical)
|
185
169
|
end
|
186
170
|
|
187
171
|
# Renders the right border for the interface.
|
188
172
|
#
|
189
173
|
# @return [String]
|
190
174
|
def right
|
191
|
-
return
|
175
|
+
return [] unless right?
|
192
176
|
|
193
|
-
|
177
|
+
border(vertical, :right_vertical)
|
194
178
|
end
|
195
179
|
|
196
180
|
# Renders the top border for the interface.
|
@@ -200,142 +184,27 @@ module Vedeu
|
|
200
184
|
return [] unless top?
|
201
185
|
|
202
186
|
out = []
|
203
|
-
out << top_left
|
204
|
-
|
205
|
-
out << border
|
187
|
+
out << border(top_left, :top_left) if left?
|
188
|
+
width.times do
|
189
|
+
out << border(horizontal, :top_horizontal)
|
206
190
|
end
|
207
|
-
out << top_right
|
191
|
+
out << border(top_right, :top_right) if right?
|
208
192
|
|
209
|
-
out
|
193
|
+
out.flatten
|
210
194
|
end
|
211
195
|
|
212
196
|
private
|
213
197
|
|
214
|
-
|
215
|
-
|
216
|
-
#
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
end
|
225
|
-
|
226
|
-
# Renders the bottom right border character with escape codes for colour and
|
227
|
-
# style for the interface.
|
228
|
-
#
|
229
|
-
# @return [String]
|
230
|
-
def bottom_right
|
231
|
-
return '' unless right?
|
232
|
-
|
233
|
-
[*presentation, on, br, off, *reset].join
|
234
|
-
end
|
235
|
-
|
236
|
-
# Renders the top left border character with escape codes for colour and
|
237
|
-
# style for the interface.
|
238
|
-
#
|
239
|
-
# @return [String]
|
240
|
-
def top_left
|
241
|
-
return '' unless left?
|
242
|
-
|
243
|
-
[*presentation, on, tl, off, *reset].join
|
244
|
-
end
|
245
|
-
|
246
|
-
# Renders the top right border character with escape codes for colour and
|
247
|
-
# style for the interface.
|
248
|
-
#
|
249
|
-
# @return [String]
|
250
|
-
def top_right
|
251
|
-
return '' unless right?
|
252
|
-
|
253
|
-
[*presentation, on, tr, off, *reset].join
|
254
|
-
end
|
255
|
-
|
256
|
-
# Returns the horizontal border characters with colours and styles.
|
257
|
-
#
|
258
|
-
# @return [Array<String>]
|
259
|
-
def horizontal_border
|
260
|
-
[[*presentation, on, h, off, *reset].join] * width
|
261
|
-
end
|
262
|
-
|
263
|
-
# Returns the vertical border characters with colours and styles.
|
264
|
-
#
|
265
|
-
# @return [String]
|
266
|
-
def vertical_border
|
267
|
-
[*presentation, on, v, off, *reset].join
|
268
|
-
end
|
269
|
-
|
270
|
-
# Returns the horizontal border character.
|
271
|
-
#
|
272
|
-
# @return [String]
|
273
|
-
def h
|
274
|
-
attributes[:horizontal]
|
275
|
-
end
|
276
|
-
|
277
|
-
# Returns the vertical border character.
|
278
|
-
#
|
279
|
-
# @return [String]
|
280
|
-
def v
|
281
|
-
attributes[:vertical]
|
282
|
-
end
|
283
|
-
|
284
|
-
# Returns the top right border character.
|
285
|
-
#
|
286
|
-
# @return [String]
|
287
|
-
def tr
|
288
|
-
attributes[:top_right]
|
289
|
-
end
|
290
|
-
|
291
|
-
# Returns the top left border character.
|
292
|
-
#
|
293
|
-
# @return [String]
|
294
|
-
def tl
|
295
|
-
attributes[:top_left]
|
296
|
-
end
|
297
|
-
|
298
|
-
# Returns the bottom right border character.
|
299
|
-
#
|
300
|
-
# @return [String]
|
301
|
-
def br
|
302
|
-
attributes[:bottom_right]
|
303
|
-
end
|
304
|
-
|
305
|
-
# Returns the bottom left border character.
|
306
|
-
#
|
307
|
-
# @return [String]
|
308
|
-
def bl
|
309
|
-
attributes[:bottom_left]
|
310
|
-
end
|
311
|
-
|
312
|
-
# Returns the escape sequence to start a border.
|
313
|
-
#
|
314
|
-
# @return [String]
|
315
|
-
def on
|
316
|
-
"\e(0"
|
317
|
-
end
|
318
|
-
|
319
|
-
# Returns the escape sequence to end a border.
|
320
|
-
#
|
321
|
-
# @return [String]
|
322
|
-
def off
|
323
|
-
"\e(B"
|
324
|
-
end
|
325
|
-
|
326
|
-
# Returns the colour and styles for the border.
|
327
|
-
#
|
328
|
-
# @return [Array]
|
329
|
-
def presentation
|
330
|
-
[colour, style]
|
331
|
-
end
|
332
|
-
|
333
|
-
# Returns the colour and styles for the interface; effectively turning off
|
334
|
-
# the colours and styles for the border.
|
335
|
-
#
|
336
|
-
# @return [Array]
|
337
|
-
def reset
|
338
|
-
[interface.colour, interface.style]
|
198
|
+
# @param value [String]
|
199
|
+
# @param type [Symbol|NilClass]
|
200
|
+
# @return [Vedeu::Char]
|
201
|
+
def border(value, type = :border)
|
202
|
+
Vedeu::Char.new({ value: value,
|
203
|
+
parent: interface,
|
204
|
+
colour: colour,
|
205
|
+
style: style,
|
206
|
+
position: nil,
|
207
|
+
border: type })
|
339
208
|
end
|
340
209
|
|
341
210
|
# @return [Vedeu::Interface]
|