vedeu 0.2.12 → 0.3.0
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/.ruby-version +1 -1
- data/Guardfile +13 -0
- data/README.md +11 -9
- data/Rakefile +10 -1
- data/bin/vedeu_test +14 -0
- data/config/cucumber.yml +8 -0
- data/docs/api.md +45 -16
- data/docs/events.md +21 -9
- data/docs/getting_started.md +16 -0
- data/docs/views.md +158 -0
- data/examples/borders_app.rb +236 -110
- data/examples/colour_support.sh +98 -0
- data/examples/colours_app.rb +41 -0
- data/examples/configuration_app.rb +11 -6
- data/examples/cursor_app.rb +60 -61
- data/examples/focus_app.rb +72 -34
- data/examples/hello_world.rb +13 -8
- data/examples/lines_app.rb +37 -28
- data/features/start_stop.feature +27 -0
- data/features/support/env.rb +14 -0
- data/lib/vedeu/all.rb +29 -0
- data/lib/vedeu/api.rb +39 -0
- data/lib/vedeu/application.rb +15 -7
- data/lib/vedeu/bindings.rb +121 -0
- data/lib/vedeu/buffers/all.rb +10 -0
- data/lib/vedeu/{repositories/models → buffers}/buffer.rb +47 -64
- data/lib/vedeu/buffers/display_buffer.rb +118 -0
- data/lib/vedeu/configuration/all.rb +6 -0
- data/lib/vedeu/configuration/api.rb +3 -1
- data/lib/vedeu/configuration/cli.rb +3 -1
- data/lib/vedeu/configuration/configuration.rb +23 -2
- data/lib/vedeu/cursor/all.rb +23 -0
- data/lib/vedeu/cursor/cursor.rb +116 -0
- data/lib/vedeu/cursor/move_cursor.rb +137 -0
- data/lib/vedeu/cursor/toggle_cursor.rb +53 -0
- data/lib/vedeu/dsl/all.rb +28 -0
- data/lib/vedeu/dsl/components/all.rb +7 -0
- data/lib/vedeu/dsl/components/border.rb +104 -0
- data/lib/vedeu/dsl/components/geometry.rb +153 -0
- data/lib/vedeu/dsl/components/keymap.rb +93 -0
- data/lib/vedeu/dsl/components/menu.rb +82 -0
- data/lib/vedeu/dsl/composition.rb +72 -0
- data/lib/vedeu/dsl/interface.rb +210 -0
- data/lib/vedeu/dsl/line.rb +135 -0
- data/lib/vedeu/dsl/shared/all.rb +7 -0
- data/lib/vedeu/dsl/shared/colour.rb +85 -0
- data/lib/vedeu/dsl/shared/style.rb +38 -0
- data/lib/vedeu/dsl/shared/text.rb +102 -0
- data/lib/vedeu/dsl/shared/use.rb +47 -0
- data/lib/vedeu/dsl/stream.rb +49 -0
- data/lib/vedeu/dsl/view.rb +136 -0
- data/lib/vedeu/events/all.rb +10 -0
- data/lib/vedeu/{repositories/models → events}/event.rb +97 -8
- data/lib/vedeu/events/trigger.rb +58 -0
- data/lib/vedeu/exceptions.rb +34 -0
- data/lib/vedeu/input/all.rb +29 -0
- data/lib/vedeu/input/input.rb +26 -0
- data/lib/vedeu/{models → input}/key.rb +21 -11
- data/lib/vedeu/input/keymap.rb +130 -0
- data/lib/vedeu/input/keys.rb +8 -0
- data/lib/vedeu/input/mapper.rb +112 -0
- data/lib/vedeu/launcher.rb +7 -4
- data/lib/vedeu/models/all.rb +12 -0
- data/lib/vedeu/models/collection.rb +71 -0
- data/lib/vedeu/{repositories → models}/focus.rb +63 -21
- data/lib/vedeu/models/geometry.rb +100 -259
- data/lib/vedeu/{repositories/models → models}/group.rb +16 -14
- data/lib/vedeu/{repositories/models → models}/menu.rb +85 -22
- data/lib/vedeu/models/model.rb +51 -0
- data/lib/vedeu/models/view/all.rb +12 -0
- data/lib/vedeu/models/view/char.rb +84 -0
- data/lib/vedeu/models/view/chars.rb +8 -0
- data/lib/vedeu/models/view/composition.rb +101 -0
- data/lib/vedeu/models/view/interface.rb +215 -0
- data/lib/vedeu/models/view/interfaces.rb +8 -0
- data/lib/vedeu/models/view/line.rb +134 -0
- data/lib/vedeu/models/view/lines.rb +8 -0
- data/lib/vedeu/models/view/stream.rb +144 -0
- data/lib/vedeu/models/view/streams.rb +8 -0
- data/lib/vedeu/output/all.rb +8 -0
- data/lib/vedeu/output/border.rb +387 -0
- data/lib/vedeu/output/compositor.rb +41 -30
- data/lib/vedeu/output/output.rb +6 -13
- data/lib/vedeu/output/viewport.rb +78 -94
- data/lib/vedeu/output/writer.rb +29 -0
- data/lib/vedeu/presentation/all.rb +9 -0
- data/lib/vedeu/{colours → presentation}/background.rb +1 -9
- data/lib/vedeu/{colours → presentation}/colour.rb +21 -8
- data/lib/vedeu/{colours → presentation}/foreground.rb +5 -9
- data/lib/vedeu/presentation/presentation.rb +91 -0
- data/lib/vedeu/presentation/style.rb +47 -0
- data/lib/vedeu/{colours → presentation}/translator.rb +11 -5
- data/lib/vedeu/repositories/all.rb +5 -0
- data/lib/vedeu/repositories/menus.rb +5 -42
- data/lib/vedeu/{support → repositories}/repository.rb +78 -41
- data/lib/vedeu/support/all.rb +22 -0
- data/lib/vedeu/support/bounding_area.rb +2 -1
- data/lib/vedeu/support/coercions.rb +18 -1
- data/lib/vedeu/support/console.rb +73 -0
- data/lib/vedeu/support/content_geometry.rb +69 -0
- data/lib/vedeu/support/coordinate.rb +246 -0
- data/lib/vedeu/support/esc.rb +29 -2
- data/lib/vedeu/support/log.rb +36 -2
- data/lib/vedeu/support/node.rb +61 -0
- data/lib/vedeu/support/position.rb +28 -13
- data/lib/vedeu/support/position_validator.rb +79 -0
- data/lib/vedeu/support/read.rb +65 -0
- data/lib/vedeu/support/refresh.rb +8 -32
- data/lib/vedeu/support/terminal.rb +34 -4
- data/lib/vedeu/support/text.rb +104 -0
- data/lib/vedeu/support/trace.rb +11 -23
- data/lib/vedeu/support/visible.rb +75 -0
- data/lib/vedeu/support/write.rb +85 -0
- data/lib/vedeu/traps.rb +18 -0
- data/lib/vedeu.rb +41 -101
- data/test/integration/dsl/compositions_test.rb +27 -0
- data/test/integration/dsl/interfaces_test.rb +261 -0
- data/test/integration/dsl/keymaps_test.rb +42 -0
- data/test/integration/dsl/lines_test.rb +146 -0
- data/test/integration/dsl/menus_test.rb +59 -0
- data/test/integration/dsl/streams_test.rb +129 -0
- data/test/integration/dsl/views_test.rb +63 -0
- data/test/lib/vedeu/api_test.rb +163 -0
- data/test/lib/vedeu/application_test.rb +19 -10
- data/test/lib/vedeu/bindings_test.rb +54 -0
- data/test/lib/vedeu/buffers/all_test.rb +11 -0
- data/test/lib/vedeu/buffers/buffer_test.rb +196 -0
- data/test/lib/vedeu/buffers/display_buffer_test.rb +58 -0
- data/test/lib/vedeu/configuration/api_test.rb +42 -58
- data/test/lib/vedeu/configuration/cli_test.rb +4 -4
- data/test/lib/vedeu/configuration/configuration_test.rb +11 -29
- data/test/lib/vedeu/cursor/all_test.rb +33 -0
- data/test/lib/vedeu/cursor/cursor_test.rb +85 -0
- data/test/lib/vedeu/cursor/move_cursor_test.rb +212 -0
- data/test/lib/vedeu/cursor/toggle_cursor_test.rb +63 -0
- data/test/lib/vedeu/dsl/components/border_test.rb +414 -0
- data/test/lib/vedeu/dsl/components/geometry_test.rb +231 -0
- data/test/lib/vedeu/dsl/components/keymap_test.rb +80 -0
- data/test/lib/vedeu/dsl/components/menu_test.rb +115 -0
- data/test/lib/vedeu/dsl/composition_test.rb +41 -0
- data/test/lib/vedeu/dsl/interface_test.rb +470 -0
- data/test/lib/vedeu/dsl/line_test.rb +60 -0
- data/test/lib/vedeu/dsl/shared/colour_test.rb +100 -0
- data/test/lib/vedeu/dsl/shared/style_test.rb +22 -0
- data/test/lib/vedeu/dsl/shared/text_test.rb +15 -0
- data/test/lib/vedeu/dsl/shared/use_test.rb +27 -0
- data/test/lib/vedeu/dsl/stream_test.rb +26 -0
- data/test/lib/vedeu/dsl/view_test.rb +73 -0
- data/test/lib/vedeu/events/all_test.rb +11 -0
- data/test/lib/vedeu/events/event_test.rb +109 -0
- data/test/lib/vedeu/events/trigger_test.rb +60 -0
- data/test/lib/vedeu/input/all_test.rb +11 -0
- data/test/lib/vedeu/input/input_test.rb +7 -3
- data/test/lib/vedeu/input/key_test.rb +72 -0
- data/test/lib/vedeu/input/keymap_test.rb +89 -0
- data/test/lib/vedeu/input/mapper_test.rb +94 -0
- data/test/lib/vedeu/launcher_test.rb +19 -20
- data/test/lib/vedeu/models/collection_test.rb +114 -0
- data/test/lib/vedeu/{repositories → models}/focus_test.rb +46 -13
- data/test/lib/vedeu/models/geometry_test.rb +35 -39
- data/test/lib/vedeu/models/group_test.rb +100 -0
- data/test/lib/vedeu/models/menu_test.rb +288 -0
- data/test/lib/vedeu/models/model_test.rb +31 -0
- data/test/lib/vedeu/models/view/char_test.rb +166 -0
- data/test/lib/vedeu/models/view/chars_test.rb +18 -0
- data/test/lib/vedeu/models/view/composition_test.rb +41 -0
- data/test/lib/vedeu/models/view/interface_test.rb +128 -0
- data/test/lib/vedeu/models/view/interfaces_test.rb +18 -0
- data/test/lib/vedeu/models/view/line_test.rb +214 -0
- data/test/lib/vedeu/models/view/lines_test.rb +18 -0
- data/test/lib/vedeu/models/view/stream_test.rb +106 -0
- data/test/lib/vedeu/models/view/streams_test.rb +18 -0
- data/test/lib/vedeu/output/border_test.rb +357 -0
- data/test/lib/vedeu/output/compositor_test.rb +61 -15
- data/test/lib/vedeu/output/output_test.rb +25 -84
- data/test/lib/vedeu/output/viewport_test.rb +171 -45
- data/test/lib/vedeu/output/writer_test.rb +45 -0
- data/test/lib/vedeu/{colours → presentation}/background_test.rb +0 -0
- data/test/lib/vedeu/{colours → presentation}/colour_test.rb +5 -5
- data/test/lib/vedeu/{colours → presentation}/foreground_test.rb +0 -0
- data/test/lib/vedeu/presentation/presentation_test.rb +56 -0
- data/test/lib/vedeu/presentation/style_test.rb +69 -0
- data/test/lib/vedeu/presentation/translator_test.rb +63 -0
- data/test/lib/vedeu/repositories/all_test.rb +7 -0
- data/test/lib/vedeu/repositories/menus_test.rb +3 -156
- data/test/lib/vedeu/repositories/repository_test.rb +271 -0
- data/test/lib/vedeu/support/bounding_area_test.rb +3 -3
- data/test/lib/vedeu/support/coercions_test.rb +39 -0
- data/test/lib/vedeu/support/common_test.rb +31 -16
- data/test/lib/vedeu/support/console_test.rb +85 -0
- data/test/lib/vedeu/support/content_geometry_test.rb +107 -0
- data/test/lib/vedeu/support/coordinate_test.rb +190 -0
- data/test/lib/vedeu/support/esc_test.rb +18 -0
- data/test/lib/vedeu/support/grid_test.rb +15 -10
- data/test/lib/vedeu/support/log_test.rb +3 -0
- data/test/lib/vedeu/support/position_test.rb +22 -2
- data/test/lib/vedeu/support/position_validator_test.rb +11 -0
- data/test/lib/vedeu/support/read_test.rb +88 -0
- data/test/lib/vedeu/support/refresh_test.rb +44 -12
- data/test/lib/vedeu/support/sentence_test.rb +6 -4
- data/test/lib/vedeu/support/terminal_test.rb +81 -70
- data/test/lib/vedeu/support/text_test.rb +93 -0
- data/test/lib/vedeu/support/trace_test.rb +21 -9
- data/test/lib/vedeu/support/visible_test.rb +148 -0
- data/test/lib/vedeu/support/write_test.rb +136 -0
- data/test/lib/vedeu/traps_test.rb +11 -0
- data/test/lib/vedeu_test.rb +2 -0
- data/test/support/helpers/all.rb +7 -0
- data/test/support/helpers/dsl_model_test_class.rb +25 -0
- data/test/support/{test_classes → helpers}/helpers.rb +0 -2
- data/test/support/helpers/misc.rb +15 -0
- data/test/support/helpers/model_test_class.rb +34 -0
- data/test/support/{test_classes → helpers}/presentation.rb +0 -0
- data/test/support/{test_classes → helpers}/repositories.rb +3 -3
- data/test/support/{test_modules/repository.rb → helpers/repository_test_module.rb} +5 -1
- data/test/test_helper.rb +19 -22
- data/vedeu.gemspec +11 -6
- metadata +322 -181
- data/lib/vedeu/api/api.rb +0 -239
- data/lib/vedeu/api/composition.rb +0 -38
- data/lib/vedeu/api/defined.rb +0 -52
- data/lib/vedeu/api/helpers.rb +0 -161
- data/lib/vedeu/api/interface.rb +0 -287
- data/lib/vedeu/api/keymap.rb +0 -75
- data/lib/vedeu/api/line.rb +0 -107
- data/lib/vedeu/api/menu.rb +0 -111
- data/lib/vedeu/api/stream.rb +0 -96
- data/lib/vedeu/models/border.rb +0 -238
- data/lib/vedeu/models/char.rb +0 -43
- data/lib/vedeu/models/composition.rb +0 -72
- data/lib/vedeu/models/line.rb +0 -100
- data/lib/vedeu/models/stream.rb +0 -130
- data/lib/vedeu/models/style.rb +0 -52
- data/lib/vedeu/repositories/buffers.rb +0 -52
- data/lib/vedeu/repositories/cursors.rb +0 -64
- data/lib/vedeu/repositories/events.rb +0 -147
- data/lib/vedeu/repositories/groups.rb +0 -47
- data/lib/vedeu/repositories/interfaces.rb +0 -78
- data/lib/vedeu/repositories/keymaps.rb +0 -196
- data/lib/vedeu/repositories/models/cursor.rb +0 -209
- data/lib/vedeu/repositories/models/interface.rb +0 -163
- data/lib/vedeu/repositories/models/keymap.rb +0 -111
- data/lib/vedeu/repositories/models/offset.rb +0 -91
- data/lib/vedeu/repositories/offsets.rb +0 -69
- data/lib/vedeu/support/exceptions.rb +0 -34
- data/lib/vedeu/support/keymap_validator.rb +0 -100
- data/lib/vedeu/support/model.rb +0 -14
- data/lib/vedeu/support/presentation.rb +0 -86
- data/lib/vedeu/support/registrar.rb +0 -53
- data/test/integration/api/api_test.rb +0 -97
- data/test/integration/api_dsl/dsl_api_test.rb +0 -4
- data/test/integration/api_dsl/dsl_composition_test.rb +0 -4
- data/test/integration/api_dsl/dsl_defined_test.rb +0 -4
- data/test/integration/api_dsl/dsl_helpers_test.rb +0 -4
- data/test/integration/api_dsl/dsl_interface_test.rb +0 -4
- data/test/integration/api_dsl/dsl_keymap.rb +0 -4
- data/test/integration/api_dsl/dsl_line_test.rb +0 -4
- data/test/integration/api_dsl/dsl_menu_test.rb +0 -4
- data/test/integration/api_dsl/dsl_stream_test.rb +0 -138
- data/test/integration/cursors_test.rb +0 -9
- data/test/integration/defining_interfaces_test.rb +0 -26
- data/test/integration/run_once_test.rb +0 -26
- data/test/integration/views/basic_view_test.rb +0 -807
- data/test/lib/vedeu/api/api_test.rb +0 -204
- data/test/lib/vedeu/api/composition_test.rb +0 -31
- data/test/lib/vedeu/api/defined_test.rb +0 -79
- data/test/lib/vedeu/api/helpers_test.rb +0 -111
- data/test/lib/vedeu/api/interface_test.rb +0 -410
- data/test/lib/vedeu/api/keymap_test.rb +0 -65
- data/test/lib/vedeu/api/line_test.rb +0 -83
- data/test/lib/vedeu/api/menu_test.rb +0 -85
- data/test/lib/vedeu/api/stream_test.rb +0 -59
- data/test/lib/vedeu/colours/translator_test.rb +0 -22
- data/test/lib/vedeu/models/border_test.rb +0 -197
- data/test/lib/vedeu/models/char_test.rb +0 -52
- data/test/lib/vedeu/models/composition_test.rb +0 -45
- data/test/lib/vedeu/models/key_test.rb +0 -43
- data/test/lib/vedeu/models/line_test.rb +0 -123
- data/test/lib/vedeu/models/stream_test.rb +0 -233
- data/test/lib/vedeu/models/style_test.rb +0 -59
- data/test/lib/vedeu/repositories/buffers_test.rb +0 -37
- data/test/lib/vedeu/repositories/cursors_test.rb +0 -62
- data/test/lib/vedeu/repositories/events_test.rb +0 -57
- data/test/lib/vedeu/repositories/groups_test.rb +0 -28
- data/test/lib/vedeu/repositories/interfaces_test.rb +0 -51
- data/test/lib/vedeu/repositories/keymaps_test.rb +0 -223
- data/test/lib/vedeu/repositories/models/buffer_test.rb +0 -174
- data/test/lib/vedeu/repositories/models/cursor_test.rb +0 -158
- data/test/lib/vedeu/repositories/models/event_test.rb +0 -53
- data/test/lib/vedeu/repositories/models/group_test.rb +0 -98
- data/test/lib/vedeu/repositories/models/interface_test.rb +0 -130
- data/test/lib/vedeu/repositories/models/keymap_test.rb +0 -27
- data/test/lib/vedeu/repositories/models/menu_test.rb +0 -246
- data/test/lib/vedeu/repositories/models/offset_test.rb +0 -128
- data/test/lib/vedeu/repositories/offsets_test.rb +0 -39
- data/test/lib/vedeu/support/keymap_validator_test.rb +0 -62
- data/test/lib/vedeu/support/model_test.rb +0 -23
- data/test/lib/vedeu/support/presentation_test.rb +0 -53
- data/test/lib/vedeu/support/registrar_test.rb +0 -94
- data/test/lib/vedeu/support/repository_test.rb +0 -208
- data/test/support/test_classes/all.rb +0 -5
- data/test/support/test_classes/coercions.rb +0 -16
- data/test/support/test_classes/model.rb +0 -23
- data/test/support/test_modules/all.rb +0 -1
data/lib/vedeu/models/border.rb
DELETED
@@ -1,238 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
#
|
4
|
-
#
|
5
|
-
# @note Refer to UTF-8 U+2500 to U+257F for border characters. More details
|
6
|
-
# can be found at: http://en.wikipedia.org/wiki/Box-drawing_character
|
7
|
-
#
|
8
|
-
class Border
|
9
|
-
|
10
|
-
# Returns a new instance of Border.
|
11
|
-
#
|
12
|
-
# @param interface [Interface]
|
13
|
-
# @param attributes [Hash]
|
14
|
-
# @return [Border]
|
15
|
-
def initialize(interface, attributes = {})
|
16
|
-
@interface = interface
|
17
|
-
@attributes = defaults.merge(attributes)
|
18
|
-
end
|
19
|
-
|
20
|
-
def enabled?
|
21
|
-
attributes[:enabled]
|
22
|
-
end
|
23
|
-
|
24
|
-
def bottom?
|
25
|
-
attributes[:show_bottom]
|
26
|
-
end
|
27
|
-
|
28
|
-
def left?
|
29
|
-
attributes[:show_left]
|
30
|
-
end
|
31
|
-
|
32
|
-
def right?
|
33
|
-
attributes[:show_right]
|
34
|
-
end
|
35
|
-
|
36
|
-
def top?
|
37
|
-
attributes[:show_top]
|
38
|
-
end
|
39
|
-
|
40
|
-
def to_s
|
41
|
-
to_viewport.map { |line| line.flatten.join }.join("\n")
|
42
|
-
end
|
43
|
-
|
44
|
-
def to_viewport
|
45
|
-
return viewport unless enabled?
|
46
|
-
|
47
|
-
out = []
|
48
|
-
|
49
|
-
out << top if top?
|
50
|
-
|
51
|
-
viewport[0...height].each do |line|
|
52
|
-
out << [left, line[0...width], right].flatten
|
53
|
-
end
|
54
|
-
|
55
|
-
out << bottom if bottom?
|
56
|
-
|
57
|
-
out
|
58
|
-
end
|
59
|
-
|
60
|
-
private
|
61
|
-
|
62
|
-
attr_reader :attributes, :interface, :attributes
|
63
|
-
|
64
|
-
def bottom
|
65
|
-
return [] unless bottom?
|
66
|
-
|
67
|
-
out = []
|
68
|
-
|
69
|
-
out << bottom_left if left?
|
70
|
-
horizontal_border.each do |border|
|
71
|
-
out << border
|
72
|
-
end
|
73
|
-
out << bottom_right if right?
|
74
|
-
|
75
|
-
out
|
76
|
-
end
|
77
|
-
|
78
|
-
def left
|
79
|
-
return '' unless left?
|
80
|
-
|
81
|
-
vertical_border
|
82
|
-
end
|
83
|
-
|
84
|
-
def right
|
85
|
-
return '' unless right?
|
86
|
-
|
87
|
-
vertical_border
|
88
|
-
end
|
89
|
-
|
90
|
-
def top
|
91
|
-
return [] unless top?
|
92
|
-
|
93
|
-
out = []
|
94
|
-
out << top_left if left?
|
95
|
-
horizontal_border.each do |border|
|
96
|
-
out << border
|
97
|
-
end
|
98
|
-
out << top_right if right?
|
99
|
-
|
100
|
-
out
|
101
|
-
end
|
102
|
-
|
103
|
-
def bottom_left
|
104
|
-
[*presentation, on, bl, off, *reset].join
|
105
|
-
end
|
106
|
-
|
107
|
-
def bottom_right
|
108
|
-
[*presentation, on, br, off, *reset].join
|
109
|
-
end
|
110
|
-
|
111
|
-
def top_left
|
112
|
-
[*presentation, on, tl, off, *reset].join
|
113
|
-
end
|
114
|
-
|
115
|
-
def top_right
|
116
|
-
[*presentation, on, tr, off, *reset].join
|
117
|
-
end
|
118
|
-
|
119
|
-
def width
|
120
|
-
if left? && right?
|
121
|
-
interface.width - 2
|
122
|
-
|
123
|
-
elsif left? || right?
|
124
|
-
interface.width - 1
|
125
|
-
|
126
|
-
else
|
127
|
-
interface.width
|
128
|
-
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
def height
|
133
|
-
if top? && bottom?
|
134
|
-
interface.height - 2
|
135
|
-
|
136
|
-
elsif top? || bottom?
|
137
|
-
interface.height - 1
|
138
|
-
|
139
|
-
else
|
140
|
-
interface.height
|
141
|
-
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
def horizontal_border
|
146
|
-
[[*presentation, on, h, off, *reset].join] * width
|
147
|
-
end
|
148
|
-
|
149
|
-
def horizontal_space
|
150
|
-
[' '] * width
|
151
|
-
end
|
152
|
-
|
153
|
-
def vertical_border
|
154
|
-
[*presentation, on, v, off, *reset].join
|
155
|
-
end
|
156
|
-
|
157
|
-
def h
|
158
|
-
attributes[:horizontal]
|
159
|
-
end
|
160
|
-
|
161
|
-
def v
|
162
|
-
attributes[:vertical]
|
163
|
-
end
|
164
|
-
|
165
|
-
def tr
|
166
|
-
attributes[:top_right]
|
167
|
-
end
|
168
|
-
|
169
|
-
def tl
|
170
|
-
attributes[:top_left]
|
171
|
-
end
|
172
|
-
|
173
|
-
def br
|
174
|
-
attributes[:bottom_right]
|
175
|
-
end
|
176
|
-
|
177
|
-
def bl
|
178
|
-
attributes[:bottom_left]
|
179
|
-
end
|
180
|
-
|
181
|
-
def on
|
182
|
-
"\e(0"
|
183
|
-
end
|
184
|
-
|
185
|
-
def off
|
186
|
-
"\e(B"
|
187
|
-
end
|
188
|
-
|
189
|
-
def viewport
|
190
|
-
interface.viewport
|
191
|
-
end
|
192
|
-
|
193
|
-
def presentation
|
194
|
-
[colour.to_s, style.to_s]
|
195
|
-
end
|
196
|
-
|
197
|
-
def reset
|
198
|
-
[interface.colour.to_s, interface.style.to_s]
|
199
|
-
end
|
200
|
-
|
201
|
-
# Returns a new Colour instance.
|
202
|
-
#
|
203
|
-
# @return [Colour]
|
204
|
-
def colour
|
205
|
-
@colour ||= Colour.new(attributes[:colour])
|
206
|
-
end
|
207
|
-
|
208
|
-
# Returns a new Style instance.
|
209
|
-
#
|
210
|
-
# @return [Style]
|
211
|
-
def style
|
212
|
-
@style ||= Style.new(attributes[:style])
|
213
|
-
end
|
214
|
-
|
215
|
-
# The default values for a new instance of Border.
|
216
|
-
#
|
217
|
-
# @return [Hash]
|
218
|
-
def defaults
|
219
|
-
{
|
220
|
-
enabled: false,
|
221
|
-
show_bottom: true,
|
222
|
-
show_left: true,
|
223
|
-
show_right: true,
|
224
|
-
show_top: true,
|
225
|
-
bottom_right: "\x6A", # ┘
|
226
|
-
top_right: "\x6B", # ┐
|
227
|
-
top_left: "\x6C", # ┌
|
228
|
-
bottom_left: "\x6D", # └
|
229
|
-
horizontal: "\x71", # ─
|
230
|
-
colour: {},
|
231
|
-
style: [],
|
232
|
-
vertical: "\x78", # │
|
233
|
-
}
|
234
|
-
end
|
235
|
-
|
236
|
-
end # Border
|
237
|
-
|
238
|
-
end # Vedeu
|
data/lib/vedeu/models/char.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# A Char represents a single character of the terminal. It is a container for
|
4
|
-
# the a single character in a {Vedeu::Stream}.
|
5
|
-
#
|
6
|
-
# @note The parent of a Char is a Line.
|
7
|
-
# @todo Colour and style is not being correctly reset. (GL 2014-10-19)
|
8
|
-
#
|
9
|
-
# @api private
|
10
|
-
class Char
|
11
|
-
|
12
|
-
include Presentation
|
13
|
-
|
14
|
-
attr_reader :attributes, :parent, :value
|
15
|
-
alias_method :data, :value
|
16
|
-
|
17
|
-
# Returns a new instance of Char.
|
18
|
-
#
|
19
|
-
# @param attributes [Hash]
|
20
|
-
# @return [Char]
|
21
|
-
def initialize(attributes = {})
|
22
|
-
@attributes = defaults.merge(attributes)
|
23
|
-
@parent = @attributes[:parent]
|
24
|
-
@value = @attributes[:value]
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
# The default values for a new instance of Char.
|
30
|
-
#
|
31
|
-
# @return [Hash]
|
32
|
-
def defaults
|
33
|
-
{
|
34
|
-
colour: {},
|
35
|
-
parent: nil,
|
36
|
-
style: [],
|
37
|
-
value: '',
|
38
|
-
}
|
39
|
-
end
|
40
|
-
|
41
|
-
end # Char
|
42
|
-
|
43
|
-
end # Vedeu
|
@@ -1,72 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# A composition is a collection of interfaces.
|
4
|
-
#
|
5
|
-
# @api private
|
6
|
-
class Composition
|
7
|
-
|
8
|
-
attr_reader :attributes
|
9
|
-
|
10
|
-
# Builds a new composition, ready to be rendered to the screen.
|
11
|
-
#
|
12
|
-
# @param attributes [Hash]
|
13
|
-
# @param block [Proc]
|
14
|
-
# @return [Hash]
|
15
|
-
def self.build(attributes = {}, &block)
|
16
|
-
new(attributes, &block).attributes
|
17
|
-
end
|
18
|
-
|
19
|
-
# Returns a new instance of Composition.
|
20
|
-
#
|
21
|
-
# @param attributes [Hash]
|
22
|
-
# @param block [Proc]
|
23
|
-
# @return [Composition]
|
24
|
-
def initialize(attributes = {}, &block)
|
25
|
-
@attributes = defaults.merge(attributes)
|
26
|
-
|
27
|
-
if block_given?
|
28
|
-
@self_before_instance_eval = eval('self', block.binding)
|
29
|
-
|
30
|
-
instance_eval(&block)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
# Returns a collection of interfaces associated with this composition.
|
35
|
-
#
|
36
|
-
# @return [Array]
|
37
|
-
def interfaces
|
38
|
-
@interfaces ||= Interface.coercer(attributes[:interfaces])
|
39
|
-
end
|
40
|
-
|
41
|
-
# Returns the view attributes for a Composition, which will always be none,
|
42
|
-
# as a composition is a merely a collection of interfaces.
|
43
|
-
#
|
44
|
-
# @return [Hash]
|
45
|
-
def view_attributes
|
46
|
-
{}
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
# The default values for a new instance of Composition.
|
52
|
-
#
|
53
|
-
# @return [Hash]
|
54
|
-
def defaults
|
55
|
-
{
|
56
|
-
interfaces: []
|
57
|
-
}
|
58
|
-
end
|
59
|
-
|
60
|
-
# @param method [Symbol] The name of the method sought.
|
61
|
-
# @param args [Array] The arguments which the method was to be invoked with.
|
62
|
-
# @param block [Proc] The optional block provided to the method.
|
63
|
-
# @return []
|
64
|
-
def method_missing(method, *args, &block)
|
65
|
-
Vedeu.log("Composition#method_missing '#{method}' (args: #{args.inspect})")
|
66
|
-
|
67
|
-
@self_before_instance_eval.send(method, *args, &block) if @self_before_instance_eval
|
68
|
-
end
|
69
|
-
|
70
|
-
end # Composition
|
71
|
-
|
72
|
-
end # Vedeu
|
data/lib/vedeu/models/line.rb
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# A Line represents a single row of the terminal. It is a container for
|
4
|
-
# {Vedeu::Stream} objects. A line's width is determined by the
|
5
|
-
# {Vedeu::Interface} it belongs to.
|
6
|
-
#
|
7
|
-
# @api private
|
8
|
-
class Line
|
9
|
-
|
10
|
-
include Coercions
|
11
|
-
include Presentation
|
12
|
-
|
13
|
-
attr_reader :attributes, :parent
|
14
|
-
|
15
|
-
# Builds up a new Line object and returns the attributes.
|
16
|
-
#
|
17
|
-
# @param attributes [Hash]
|
18
|
-
# @param block [Proc]
|
19
|
-
# @return [Hash]
|
20
|
-
def self.build(attributes = {}, &block)
|
21
|
-
new(attributes, &block).attributes
|
22
|
-
end
|
23
|
-
|
24
|
-
# Returns a new instance of Line.
|
25
|
-
#
|
26
|
-
# @param attributes [Hash]
|
27
|
-
# @param block [Proc]
|
28
|
-
# @return [Line]
|
29
|
-
def initialize(attributes = {}, &block)
|
30
|
-
@attributes = defaults.merge(attributes)
|
31
|
-
@parent = @attributes[:parent]
|
32
|
-
|
33
|
-
if block_given?
|
34
|
-
@self_before_instance_eval = eval('self', block.binding)
|
35
|
-
|
36
|
-
instance_eval(&block)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# Returns an array of all the characters with formatting for this line.
|
41
|
-
#
|
42
|
-
# @return [Array]
|
43
|
-
# @see Vedeu::Stream
|
44
|
-
def chars
|
45
|
-
return [] if empty?
|
46
|
-
|
47
|
-
@_chars ||= streams.map(&:chars).flatten
|
48
|
-
end
|
49
|
-
|
50
|
-
# Returns a boolean indicating whether the line has content.
|
51
|
-
#
|
52
|
-
# @return [Boolean]
|
53
|
-
def empty?
|
54
|
-
size == 0
|
55
|
-
end
|
56
|
-
|
57
|
-
# Returns the size of the content in characters without formatting.
|
58
|
-
#
|
59
|
-
# @return [Fixnum]
|
60
|
-
def size
|
61
|
-
streams.map(&:size).inject(0, :+) { |sum, x| sum += x }
|
62
|
-
end
|
63
|
-
|
64
|
-
# Returns a collection of streams associated with this line. This method
|
65
|
-
# also has the alias_method :data, a convenience method to provide
|
66
|
-
# Presentation with a consistent interface.
|
67
|
-
#
|
68
|
-
# @return [Array]
|
69
|
-
def streams
|
70
|
-
@streams ||= Stream.coercer(attributes[:streams])
|
71
|
-
end
|
72
|
-
alias_method :data, :streams
|
73
|
-
|
74
|
-
private
|
75
|
-
|
76
|
-
# The default values for a new instance of Line.
|
77
|
-
#
|
78
|
-
# @return [Hash]
|
79
|
-
def defaults
|
80
|
-
{
|
81
|
-
colour: {},
|
82
|
-
streams: [],
|
83
|
-
style: [],
|
84
|
-
parent: nil,
|
85
|
-
}
|
86
|
-
end
|
87
|
-
|
88
|
-
# @param method [Symbol] The name of the method sought.
|
89
|
-
# @param args [Array] The arguments which the method was to be invoked with.
|
90
|
-
# @param block [Proc] The optional block provided to the method.
|
91
|
-
# @return []
|
92
|
-
def method_missing(method, *args, &block)
|
93
|
-
Vedeu.log("Line#method_missing '#{method}' (args: #{args.inspect})")
|
94
|
-
|
95
|
-
@self_before_instance_eval.send(method, *args, &block) if @self_before_instance_eval
|
96
|
-
end
|
97
|
-
|
98
|
-
end # Line
|
99
|
-
|
100
|
-
end # Vedeu
|
data/lib/vedeu/models/stream.rb
DELETED
@@ -1,130 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# A Stream can represent a character or collection of characters as part of a
|
4
|
-
# {Vedeu::Line} which you wish to colour and style independently of the other
|
5
|
-
# characters in that line.
|
6
|
-
#
|
7
|
-
# @api private
|
8
|
-
class Stream
|
9
|
-
|
10
|
-
include Coercions
|
11
|
-
include Presentation
|
12
|
-
|
13
|
-
attr_reader :attributes, :align, :text, :width, :parent
|
14
|
-
|
15
|
-
# Builds up a new Stream object and returns the attributes.
|
16
|
-
#
|
17
|
-
# @param attributes [Hash]
|
18
|
-
# @param block [Proc]
|
19
|
-
# @return [Hash]
|
20
|
-
def self.build(attributes = {}, &block)
|
21
|
-
new(attributes, &block).attributes
|
22
|
-
end
|
23
|
-
|
24
|
-
# Returns a new instance of Stream.
|
25
|
-
#
|
26
|
-
# @param attributes [Hash]
|
27
|
-
# @param block [Proc]
|
28
|
-
# @return [Stream]
|
29
|
-
def initialize(attributes = {}, &block)
|
30
|
-
@attributes = defaults.merge(attributes)
|
31
|
-
@align = @attributes[:align]
|
32
|
-
@text = @attributes[:text]
|
33
|
-
@width = @attributes[:width]
|
34
|
-
@parent = @attributes[:parent]
|
35
|
-
|
36
|
-
if block_given?
|
37
|
-
@self_before_instance_eval = eval('self', block.binding)
|
38
|
-
|
39
|
-
instance_eval(&block)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
# Returns an array of characters, each element is the escape sequences of
|
44
|
-
# colours and styles for this stream, the character itself, and the escape
|
45
|
-
# sequences of colours and styles for the parent of the stream
|
46
|
-
# ({Vedeu::Line}).
|
47
|
-
#
|
48
|
-
# @return [Array]
|
49
|
-
def chars
|
50
|
-
return [] if empty?
|
51
|
-
|
52
|
-
char_attrs = view_attributes.merge!({ parent: parent })
|
53
|
-
|
54
|
-
@_chars ||= content.chars.map do |c|
|
55
|
-
Char.new(char_attrs.merge!({ value: c })).to_s
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
# Returns the text aligned if a width was set, otherwise just the text. This
|
60
|
-
# method also has the alias_method :data, a convenience method to provide
|
61
|
-
# Presentation with a consistent interface.
|
62
|
-
#
|
63
|
-
# @return [String]
|
64
|
-
def content
|
65
|
-
width? ? aligned : text
|
66
|
-
end
|
67
|
-
alias_method :data, :content
|
68
|
-
|
69
|
-
# Returns a boolean indicating whether the stream has content.
|
70
|
-
#
|
71
|
-
# @return [Boolean]
|
72
|
-
def empty?
|
73
|
-
size == 0
|
74
|
-
end
|
75
|
-
|
76
|
-
# Returns the size of the content in characters without formatting.
|
77
|
-
#
|
78
|
-
# @return [Fixnum]
|
79
|
-
def size
|
80
|
-
content.size
|
81
|
-
end
|
82
|
-
|
83
|
-
private
|
84
|
-
|
85
|
-
# Returns an aligned string if the string is shorter than the specified
|
86
|
-
# width; the excess area being padded by spaces.
|
87
|
-
#
|
88
|
-
# @return [String]
|
89
|
-
def aligned
|
90
|
-
case align
|
91
|
-
when :right then text.rjust(width, ' ')
|
92
|
-
when :centre then text.center(width, ' ')
|
93
|
-
else text.ljust(width, ' ')
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
# Returns a boolean to indicate whether this stream has a width set.
|
98
|
-
#
|
99
|
-
# @return [Boolean]
|
100
|
-
def width?
|
101
|
-
!!width
|
102
|
-
end
|
103
|
-
|
104
|
-
# The default values for a new instance of Stream.
|
105
|
-
#
|
106
|
-
# @return [Hash]
|
107
|
-
def defaults
|
108
|
-
{
|
109
|
-
colour: {},
|
110
|
-
style: [],
|
111
|
-
text: '',
|
112
|
-
width: nil,
|
113
|
-
align: :left,
|
114
|
-
parent: nil,
|
115
|
-
}
|
116
|
-
end
|
117
|
-
|
118
|
-
# @param method [Symbol] The name of the method sought.
|
119
|
-
# @param args [Array] The arguments which the method was to be invoked with.
|
120
|
-
# @param block [Proc] The optional block provided to the method.
|
121
|
-
# @return []
|
122
|
-
def method_missing(method, *args, &block)
|
123
|
-
Vedeu.log("Stream#method_missing '#{method}' (args: #{args.inspect})")
|
124
|
-
|
125
|
-
@self_before_instance_eval.send(method, *args, &block) if @self_before_instance_eval
|
126
|
-
end
|
127
|
-
|
128
|
-
end # Stream
|
129
|
-
|
130
|
-
end # Vedeu
|
data/lib/vedeu/models/style.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# Converts the style value or value collection into a terminal escape
|
4
|
-
# sequence. Unrecognised values are discarded- an empty string is returned.
|
5
|
-
#
|
6
|
-
# @api private
|
7
|
-
class Style
|
8
|
-
|
9
|
-
include Vedeu::Common
|
10
|
-
|
11
|
-
attr_reader :attributes, :values
|
12
|
-
|
13
|
-
# Return a new instance of Style.
|
14
|
-
#
|
15
|
-
# @param values [String|Array] The style value or values collection.
|
16
|
-
# @return [Style]
|
17
|
-
def initialize(values)
|
18
|
-
@values = values
|
19
|
-
end
|
20
|
-
|
21
|
-
# Return an attributes hash for this class.
|
22
|
-
#
|
23
|
-
# @return [Hash]
|
24
|
-
def attributes
|
25
|
-
{
|
26
|
-
style: values
|
27
|
-
}
|
28
|
-
end
|
29
|
-
|
30
|
-
# Return the terminal escape sequences for the values provided.
|
31
|
-
#
|
32
|
-
# @return [String]
|
33
|
-
def to_s
|
34
|
-
escape_sequences
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
# Converts the style or styles into terminal escape sequences.
|
40
|
-
#
|
41
|
-
# @return [String]
|
42
|
-
def escape_sequences
|
43
|
-
return '' unless defined_value?(values)
|
44
|
-
|
45
|
-
@_sequences ||= Array(values).flatten.map do |value|
|
46
|
-
Esc.string(value)
|
47
|
-
end.join
|
48
|
-
end
|
49
|
-
|
50
|
-
end # Style
|
51
|
-
|
52
|
-
end # Vedeu
|
@@ -1,52 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# Stores interface views to be later combined with interface geometry to be
|
4
|
-
# displayed.
|
5
|
-
#
|
6
|
-
# @api private
|
7
|
-
module Buffers
|
8
|
-
|
9
|
-
include Repository
|
10
|
-
extend self
|
11
|
-
|
12
|
-
# Add an interface view into the back buffer. If the buffer is already
|
13
|
-
# registered, then we preserve its front buffer. Returns the name of the
|
14
|
-
# buffer added to storage.
|
15
|
-
#
|
16
|
-
# @param attributes [Hash]
|
17
|
-
# @return [String] The name of the buffer that has been added.
|
18
|
-
def add(attributes)
|
19
|
-
validate_attributes!(attributes)
|
20
|
-
|
21
|
-
name = attributes[:name]
|
22
|
-
|
23
|
-
if registered?(name)
|
24
|
-
Vedeu.log("Adding new content to existing buffer: '#{name}'")
|
25
|
-
|
26
|
-
find(name).add(attributes)
|
27
|
-
|
28
|
-
else
|
29
|
-
Vedeu.log("Adding new buffer: '#{name}'")
|
30
|
-
|
31
|
-
model.new({ name: name }).add(attributes)
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
name
|
36
|
-
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
# @return [Class] The model class for this repository.
|
41
|
-
def model
|
42
|
-
Vedeu::Buffer
|
43
|
-
end
|
44
|
-
|
45
|
-
# @return [Hash]
|
46
|
-
def in_memory
|
47
|
-
{}
|
48
|
-
end
|
49
|
-
|
50
|
-
end # Buffers
|
51
|
-
|
52
|
-
end # Vedeu
|