vedeu 0.6.8 → 0.6.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -0
  3. data/README.md +1 -1
  4. data/docs/api.md +60 -67
  5. data/docs/configuration.md +8 -5
  6. data/docs/events.md +31 -15
  7. data/docs/events/application.md +12 -0
  8. data/docs/events/document.md +57 -0
  9. data/docs/events/drb.md +43 -0
  10. data/docs/events/focus.md +24 -0
  11. data/docs/events/menu.md +57 -0
  12. data/docs/events/movement.md +57 -0
  13. data/docs/events/refresh.md +25 -0
  14. data/docs/events/system.md +90 -0
  15. data/docs/events/visibility.md +68 -0
  16. data/lib/vedeu.rb +2 -2
  17. data/lib/vedeu/all.rb +3 -2
  18. data/lib/vedeu/api.rb +18 -18
  19. data/lib/vedeu/application/controller.rb +1 -1
  20. data/lib/vedeu/application/helper.rb +1 -1
  21. data/lib/vedeu/application/view.rb +1 -1
  22. data/lib/vedeu/bindings/application.rb +1 -12
  23. data/lib/vedeu/bindings/bindings.rb +3 -1
  24. data/lib/vedeu/bindings/document.rb +9 -62
  25. data/lib/vedeu/bindings/drb.rb +12 -56
  26. data/lib/vedeu/bindings/focus.rb +3 -28
  27. data/lib/vedeu/bindings/menus.rb +10 -66
  28. data/lib/vedeu/bindings/movement.rb +4 -69
  29. data/lib/vedeu/bindings/refresh.rb +3 -33
  30. data/lib/vedeu/bindings/system.rb +14 -100
  31. data/lib/vedeu/bindings/visibility.rb +20 -71
  32. data/lib/vedeu/borders/all.rb +4 -3
  33. data/lib/vedeu/borders/border.rb +39 -33
  34. data/lib/vedeu/borders/dsl.rb +40 -33
  35. data/lib/vedeu/borders/null.rb +2 -2
  36. data/lib/vedeu/borders/render.rb +29 -24
  37. data/lib/vedeu/borders/repository.rb +2 -2
  38. data/lib/vedeu/buffers/all.rb +8 -7
  39. data/lib/vedeu/buffers/buffer.rb +47 -39
  40. data/lib/vedeu/buffers/null.rb +2 -2
  41. data/lib/vedeu/buffers/refresh.rb +4 -3
  42. data/lib/vedeu/buffers/virtual_buffer.rb +122 -118
  43. data/lib/vedeu/buffers/virtual_buffers.rb +62 -56
  44. data/lib/vedeu/colours/background.rb +2 -1
  45. data/lib/vedeu/colours/colour.rb +21 -19
  46. data/lib/vedeu/colours/foreground.rb +2 -1
  47. data/lib/vedeu/colours/repository.rb +6 -5
  48. data/lib/vedeu/colours/translator.rb +39 -35
  49. data/lib/vedeu/configuration/api.rb +59 -51
  50. data/lib/vedeu/configuration/cli.rb +9 -7
  51. data/lib/vedeu/configuration/configuration.rb +41 -32
  52. data/lib/vedeu/cursors/cursor.rb +1 -1
  53. data/lib/vedeu/cursors/refresh.rb +20 -16
  54. data/lib/vedeu/distributed/server.rb +8 -6
  55. data/lib/vedeu/distributed/subprocess.rb +90 -86
  56. data/lib/vedeu/distributed/uri.rb +4 -3
  57. data/lib/vedeu/dsl/composition.rb +2 -2
  58. data/lib/vedeu/dsl/group.rb +4 -4
  59. data/lib/vedeu/dsl/interface.rb +5 -5
  60. data/lib/vedeu/dsl/presentation.rb +2 -2
  61. data/lib/vedeu/dsl/text.rb +1 -1
  62. data/lib/vedeu/editor/cropper.rb +4 -4
  63. data/lib/vedeu/editor/cursor.rb +6 -4
  64. data/lib/vedeu/editor/document.rb +20 -18
  65. data/lib/vedeu/editor/editor.rb +2 -2
  66. data/lib/vedeu/editor/line.rb +10 -5
  67. data/lib/vedeu/editor/lines.rb +2 -2
  68. data/lib/vedeu/internal_api.rb +4 -4
  69. data/lib/vedeu/models/focus.rb +197 -191
  70. data/lib/vedeu/models/group.rb +171 -159
  71. data/lib/vedeu/models/groups.rb +14 -10
  72. data/lib/vedeu/models/interface.rb +116 -110
  73. data/lib/vedeu/models/interfaces.rb +24 -20
  74. data/lib/vedeu/models/toggleable.rb +4 -4
  75. data/lib/vedeu/models/views/char.rb +1 -1
  76. data/lib/vedeu/models/views/composition.rb +1 -1
  77. data/lib/vedeu/models/views/line.rb +1 -1
  78. data/lib/vedeu/models/views/stream.rb +1 -1
  79. data/lib/vedeu/models/views/view.rb +1 -1
  80. data/lib/vedeu/null/interface.rb +1 -1
  81. data/lib/vedeu/null/view.rb +1 -1
  82. data/lib/vedeu/output/clear/named_interface.rb +1 -1
  83. data/lib/vedeu/output/compressor.rb +78 -73
  84. data/lib/vedeu/output/direct.rb +61 -57
  85. data/lib/vedeu/output/output.rb +34 -29
  86. data/lib/vedeu/output/{presentation.rb → presentation/presentation.rb} +2 -1
  87. data/lib/vedeu/output/presentation/style.rb +64 -18
  88. data/lib/vedeu/output/presentation/styles.rb +39 -0
  89. data/lib/vedeu/output/renderers/html.rb +2 -2
  90. data/lib/vedeu/output/renderers/json.rb +2 -1
  91. data/lib/vedeu/output/renderers/terminal.rb +3 -3
  92. data/lib/vedeu/output/renderers/text.rb +3 -3
  93. data/lib/vedeu/output/text.rb +186 -180
  94. data/lib/vedeu/output/wordwrap.rb +142 -138
  95. data/lib/vedeu/refresh/refresh.rb +2 -2
  96. data/lib/vedeu/templating/helpers.rb +11 -6
  97. data/lib/vedeu/templating/view_template.rb +1 -1
  98. data/lib/vedeu/terminal/terminal.rb +2 -2
  99. data/lib/vedeu/version.rb +1 -1
  100. data/test/lib/vedeu/borders/render_test.rb +1 -1
  101. data/test/lib/vedeu/buffers/buffer_test.rb +16 -14
  102. data/test/lib/vedeu/buffers/virtual_buffer_test.rb +105 -101
  103. data/test/lib/vedeu/buffers/virtual_buffers_test.rb +43 -39
  104. data/test/lib/vedeu/colours/colour_test.rb +4 -4
  105. data/test/lib/vedeu/cursors/cursor_test.rb +2 -2
  106. data/test/lib/vedeu/cursors/repository_test.rb +3 -3
  107. data/test/lib/vedeu/distributed/subprocess_test.rb +33 -29
  108. data/test/lib/vedeu/dsl/group_test.rb +3 -3
  109. data/test/lib/vedeu/dsl/interface_test.rb +6 -5
  110. data/test/lib/vedeu/dsl/line_test.rb +4 -2
  111. data/test/lib/vedeu/dsl/presentation_test.rb +2 -2
  112. data/test/lib/vedeu/dsl/text_test.rb +8 -8
  113. data/test/lib/vedeu/editor/document_test.rb +10 -6
  114. data/test/lib/vedeu/input/keymap_test.rb +1 -10
  115. data/test/lib/vedeu/models/focus_test.rb +177 -170
  116. data/test/lib/vedeu/models/group_test.rb +99 -95
  117. data/test/lib/vedeu/models/groups_test.rb +13 -9
  118. data/test/lib/vedeu/models/interface_test.rb +93 -87
  119. data/test/lib/vedeu/models/interfaces_test.rb +24 -20
  120. data/test/lib/vedeu/models/views/char_test.rb +2 -2
  121. data/test/lib/vedeu/models/views/line_test.rb +11 -7
  122. data/test/lib/vedeu/models/views/stream_test.rb +1 -1
  123. data/test/lib/vedeu/models/views/view_test.rb +1 -1
  124. data/test/lib/vedeu/output/clear/named_group_test.rb +1 -1
  125. data/test/lib/vedeu/output/clear/named_interface_test.rb +3 -1
  126. data/test/lib/vedeu/output/compressor_test.rb +126 -122
  127. data/test/lib/vedeu/output/direct_test.rb +49 -43
  128. data/test/lib/vedeu/output/output_test.rb +35 -31
  129. data/test/lib/vedeu/output/{presentation_test.rb → presentation/presentation_test.rb} +11 -7
  130. data/test/lib/vedeu/output/presentation/style_test.rb +88 -48
  131. data/test/lib/vedeu/output/presentation/styles_test.rb +84 -0
  132. data/test/lib/vedeu/output/text_test.rb +109 -105
  133. data/test/lib/vedeu/output/viewport_test.rb +3 -1
  134. data/test/lib/vedeu/output/wordwrap_test.rb +209 -205
  135. data/test/lib/vedeu/refresh/refresh_test.rb +3 -1
  136. data/test/lib/vedeu/templating/helpers_test.rb +6 -6
  137. data/test/lib/vedeu/templating/view_template_test.rb +1 -1
  138. metadata +17 -8
  139. data/lib/vedeu/output/style.rb +0 -76
  140. data/test/lib/vedeu/output/style_test.rb +0 -120
@@ -1,31 +1,35 @@
1
1
  module Vedeu
2
2
 
3
- # Allows the storing of interfaces and views.
4
- #
5
- class Interfaces < Vedeu::Repository
3
+ module Models
6
4
 
7
- singleton_class.send(:alias_method, :interfaces, :repository)
5
+ # Allows the storing of interfaces and views.
6
+ #
7
+ class Interfaces < Vedeu::Repository
8
8
 
9
- null Vedeu::Null::Interface
10
- real Vedeu::Interface
9
+ singleton_class.send(:alias_method, :interfaces, :repository)
11
10
 
12
- # Returns the interfaces in zindex order.
13
- #
14
- # @example
15
- # Vedeu.interfaces.zindexed
16
- #
17
- # @return [Array<Vedeu::Interface>]
18
- # @see Vedeu::DSL::Interface#zindex
19
- def zindexed
20
- all.sort_by(&:zindex)
21
- end
11
+ null Vedeu::Null::Interface
12
+ real Vedeu::Models::Interface
13
+
14
+ # Returns the interfaces in zindex order.
15
+ #
16
+ # @example
17
+ # Vedeu.interfaces.zindexed
18
+ #
19
+ # @return [Array<Vedeu::Models::Interface>]
20
+ # @see Vedeu::DSL::Interface#zindex
21
+ def zindexed
22
+ all.sort_by(&:zindex)
23
+ end
24
+
25
+ end # Interfaces
22
26
 
23
- end # Interfaces
27
+ class Interface
24
28
 
25
- class Interface
29
+ repo Vedeu::Models::Interfaces.repository
26
30
 
27
- repo Vedeu::Interfaces.repository
31
+ end # Interface
28
32
 
29
- end # Interface
33
+ end # Models
30
34
 
31
35
  end # Vedeu
@@ -1,10 +1,10 @@
1
1
  module Vedeu
2
2
 
3
- # This module provides behaviour for certain classes which can be toggled
4
- # between being shown and hidden.
3
+ # This module provides behaviour for certain classes which can be
4
+ # toggled between being shown and hidden.
5
5
  #
6
- # Currently using this are: {Vedeu::Cursors::Cursor}, {Vedeu::Group} and
7
- # {Vedeu::Interface}.
6
+ # Currently using this are: {Vedeu::Cursors::Cursor},
7
+ # {Vedeu::Models::Group} and {Vedeu::Models::Interface}.
8
8
  #
9
9
  module Toggleable
10
10
 
@@ -37,7 +37,7 @@ module Vedeu
37
37
  # @option attributes colour [Vedeu::Colours::Colour]
38
38
  # @option attributes parent [Vedeu::Views::Line]
39
39
  # @option attributes position [Vedeu::Geometry::Position]
40
- # @option attributes style [Vedeu::Style]
40
+ # @option attributes style [Vedeu::Presentation::Style]
41
41
  # @option attributes value [String]
42
42
  # @return [Vedeu::Views::Char]
43
43
  def initialize(attributes = {})
@@ -25,7 +25,7 @@ module Vedeu
25
25
  # @param attributes [Hash]
26
26
  # @option attributes client [void]
27
27
  # @option attributes colour [Vedeu::Colours::Colour]
28
- # @option attributes style [Vedeu::Style]
28
+ # @option attributes style [Vedeu::Presentation::Style]
29
29
  # @option attributes value [Vedeu::Views::ViewCollection]
30
30
  # @return [Vedeu::Views::Composition]
31
31
  def initialize(attributes = {})
@@ -27,7 +27,7 @@ module Vedeu
27
27
  # @param attributes [Hash]
28
28
  # @option attributes colour [Vedeu::Colours::Colour]
29
29
  # @option attributes parent [Vedeu::Views::View]
30
- # @option attributes style [Vedeu::Style]
30
+ # @option attributes style [Vedeu::Presentation::Style]
31
31
  # @option attributes value [Vedeu::Views::Streams]
32
32
  # @return [Vedeu::Views::Line]
33
33
  def initialize(attributes = {})
@@ -32,7 +32,7 @@ module Vedeu
32
32
  #
33
33
  # @param attributes [Hash]
34
34
  # @option attributes colour [Vedeu::Colours::Colour]
35
- # @option attributes style [Vedeu::Style]
35
+ # @option attributes style [Vedeu::Presentation::Style]
36
36
  # @option attributes parent [Vedeu::Views::Line]
37
37
  # @option attributes value [String]
38
38
  # @return [Vedeu::Views::Stream]
@@ -45,7 +45,7 @@ module Vedeu
45
45
  # @option attributes value [Vedeu::Views::Lines]
46
46
  # @option attributes name [String]
47
47
  # @option attributes parent [Vedeu::Views::Composition]
48
- # @option attributes style [Vedeu::Style]
48
+ # @option attributes style [Vedeu::Presentation::Style]
49
49
  # @option attributes zindex [Fixnum]
50
50
  # @return [Vedeu::Views::View]
51
51
  def initialize(attributes = {})
@@ -1,4 +1,4 @@
1
- require 'vedeu/output/presentation'
1
+ require 'vedeu/output/presentation/presentation'
2
2
 
3
3
  module Vedeu
4
4
 
@@ -1,4 +1,4 @@
1
- require 'vedeu/output/presentation'
1
+ require 'vedeu/output/presentation/presentation'
2
2
 
3
3
  module Vedeu
4
4
 
@@ -51,7 +51,7 @@ module Vedeu
51
51
  @geometry ||= Vedeu.geometries.by_name(name)
52
52
  end
53
53
 
54
- # @see Vedeu::Interfaces#by_name
54
+ # @see Vedeu::Models::Interfaces#by_name
55
55
  def interface
56
56
  @interface ||= Vedeu.interfaces.by_name(name)
57
57
  end
@@ -1,85 +1,90 @@
1
1
  module Vedeu
2
2
 
3
- # During the conversion of a Vedeu::Views::Char object into a string of escape
4
- # sequences, this class removes multiple occurences of the same escape
5
- # sequence, resulting in a smaller payload being sent to the renderer.
6
- #
7
- class Compressor
8
-
9
- # @param output [Array<Array<Vedeu::Views::Char>>]
10
- # @return [String]
11
- def self.render(output)
12
- new(output).render
13
- end
14
-
15
- # Returns a new instance of Vedeu::Compressor.
3
+ module Output
4
+
5
+ # During the conversion of a Vedeu::Views::Char object into a
6
+ # string of escape sequences, this class removes multiple
7
+ # occurences of the same escape sequence, resulting in a smaller
8
+ # payload being sent to the renderer.
16
9
  #
17
- # @param output [Array<Array<Vedeu::Views::Char>>]
18
- # @return [Vedeu::Compressor]
19
- def initialize(output)
20
- @output = output
21
- @colour = ''
22
- @style = ''
23
- end
24
-
25
- # @note
26
- # Takes approximately ~25ms for 2100 chars. (2015-07-25)
27
- # @return [String]
28
- def render
29
- if Vedeu::Configuration.compression?
30
- compress
31
-
32
- else
33
- uncompress
10
+ class Compressor
11
+
12
+ # @param output [Array<Array<Vedeu::Views::Char>>]
13
+ # @return [String]
14
+ def self.render(output)
15
+ new(output).render
16
+ end
34
17
 
18
+ # Returns a new instance of Vedeu::Output::Compressor.
19
+ #
20
+ # @param output [Array<Array<Vedeu::Views::Char>>]
21
+ # @return [Vedeu::Output::Compressor]
22
+ def initialize(output)
23
+ @output = output
24
+ @colour = ''
25
+ @style = ''
35
26
  end
36
- end
37
27
 
38
- protected
28
+ # @note
29
+ # Takes approximately ~25ms for 2100 chars. (2015-07-25)
30
+ # @return [String]
31
+ def render
32
+ if Vedeu::Configuration.compression?
33
+ compress
39
34
 
40
- # @!attribute [r] output
41
- # @return [Array<Array<Vedeu::Views::Char>>]
42
- attr_reader :output
35
+ else
36
+ uncompress
37
+
38
+ end
39
+ end
43
40
 
44
- private
41
+ protected
42
+
43
+ # @!attribute [r] output
44
+ # @return [Array<Array<Vedeu::Views::Char>>]
45
+ attr_reader :output
46
+
47
+ private
48
+
49
+ # @return [String]
50
+ def compress
51
+ out = ''
52
+ Array(output).flatten.each do |char|
53
+ out << char.position.to_s
54
+ out << colour_for(char)
55
+ out << style_for(char)
56
+ out << char.value
57
+ end
58
+ out
59
+ end
45
60
 
46
- # @return [String]
47
- def compress
48
- out = ''
49
- Array(output).flatten.each do |char|
50
- out << char.position.to_s
51
- out << colour_for(char)
52
- out << style_for(char)
53
- out << char.value
61
+ # @return [String]
62
+ def uncompress
63
+ out = ''
64
+ Array(output).flatten.each { |char| out << char.to_s }
65
+ out
54
66
  end
55
- out
56
- end
57
-
58
- # @return [String]
59
- def uncompress
60
- out = ''
61
- Array(output).flatten.each { |char| out << char.to_s }
62
- out
63
- end
64
-
65
- # @param char [Vedeu::Views::Char]
66
- # @return [String]
67
- def colour_for(char)
68
- return '' if char.colour == @colour
69
-
70
- @colour = char.colour
71
- @colour.to_s
72
- end
73
-
74
- # @param char [Vedeu::Views::Char]
75
- # @return [String]
76
- def style_for(char)
77
- return '' if char.style == @style
78
-
79
- @style = char.style
80
- @style.to_s
81
- end
82
-
83
- end # Compressor
67
+
68
+ # @param char [Vedeu::Views::Char]
69
+ # @return [String]
70
+ def colour_for(char)
71
+ return '' if char.colour == @colour
72
+
73
+ @colour = char.colour
74
+ @colour.to_s
75
+ end
76
+
77
+ # @param char [Vedeu::Views::Char]
78
+ # @return [String]
79
+ def style_for(char)
80
+ return '' if char.style == @style
81
+
82
+ @style = char.style
83
+ @style.to_s
84
+ end
85
+
86
+ end # Compressor
87
+
88
+ end # Output
84
89
 
85
90
  end # Vedeu
@@ -1,62 +1,66 @@
1
1
  module Vedeu
2
2
 
3
- # Write a string directly to the terminal at defined coordinates.
4
- #
5
- class Direct
6
-
7
- # @param value [String]
8
- # @param x [Fixnum]
9
- # @param y [Fixnum]
10
- # @return [String]
11
- def self.write(value:, x:, y:)
12
- new(value: value, x: x, y: y).write
13
- end
14
-
15
- # Returns a new instance of Vedeu::Direct.
3
+ module Output
4
+
5
+ # Write a string directly to the terminal at defined coordinates.
16
6
  #
17
- # @param value [String]
18
- # @param x [Fixnum]
19
- # @param y [Fixnum]
20
- # @return [Vedeu::Direct]
21
- def initialize(value:, x:, y:)
22
- @value = value || ''
23
- @x = x || 1
24
- @y = y || 1
25
- end
26
-
27
- # @return [String]
28
- def write
29
- Vedeu::Terminal.output(output)
30
-
31
- output
32
- end
33
-
34
- protected
35
-
36
- # @attribute [r] value
37
- # @return [String]
38
- attr_reader :value
39
-
40
- # @attribute [r] x
41
- # @return [Fixnum]
42
- attr_reader :x
43
-
44
- # @attribute [r] y
45
- # @return [Fixnum]
46
- attr_reader :y
47
-
48
- private
49
-
50
- # @return [String]
51
- def output
52
- (Array(position) + Array(value)).join
53
- end
54
-
55
- # @return [String]
56
- def position
57
- Vedeu::Geometry::Position.new(y, x).to_s
58
- end
59
-
60
- end # Direct
7
+ class Direct
8
+
9
+ # @param value [String]
10
+ # @param x [Fixnum]
11
+ # @param y [Fixnum]
12
+ # @return [String]
13
+ def self.write(value:, x:, y:)
14
+ new(value: value, x: x, y: y).write
15
+ end
16
+
17
+ # Returns a new instance of Vedeu::Output::Direct.
18
+ #
19
+ # @param value [String]
20
+ # @param x [Fixnum]
21
+ # @param y [Fixnum]
22
+ # @return [Vedeu::Output::Direct]
23
+ def initialize(value:, x:, y:)
24
+ @value = value || ''
25
+ @x = x || 1
26
+ @y = y || 1
27
+ end
28
+
29
+ # @return [String]
30
+ def write
31
+ Vedeu::Terminal.output(output)
32
+
33
+ output
34
+ end
35
+
36
+ protected
37
+
38
+ # @attribute [r] value
39
+ # @return [String]
40
+ attr_reader :value
41
+
42
+ # @attribute [r] x
43
+ # @return [Fixnum]
44
+ attr_reader :x
45
+
46
+ # @attribute [r] y
47
+ # @return [Fixnum]
48
+ attr_reader :y
49
+
50
+ private
51
+
52
+ # @return [String]
53
+ def output
54
+ (Array(position) + Array(value)).join
55
+ end
56
+
57
+ # @return [String]
58
+ def position
59
+ Vedeu::Geometry::Position.new(y, x).to_s
60
+ end
61
+
62
+ end # Direct
63
+
64
+ end # Output
61
65
 
62
66
  end # Vedeu
@@ -1,43 +1,48 @@
1
1
  module Vedeu
2
2
 
3
- # Sends the output to the renderers.
4
- #
5
- class Output
3
+ module Output
6
4
 
7
- # Writes output to the defined renderers.
5
+ # Sends the output to the renderers.
8
6
  #
9
- # @return [Array|String]
10
- # @see #initialize
11
- def self.render(output)
12
- new(output).render
13
- end
7
+ class Output
8
+
9
+ # Writes output to the defined renderers.
10
+ #
11
+ # @return [Array|String]
12
+ # @see #initialize
13
+ def self.render(output)
14
+ new(output).render
15
+ end
14
16
 
15
- # Return a new instance of Vedeu::Output.
16
- #
17
- # @param output [Array<Array<Vedeu::Views::Char>>]
18
- # @return [Vedeu::Output]
19
- def initialize(output)
20
- @output = output
21
- end
17
+ # Return a new instance of Vedeu::Output::Output.
18
+ #
19
+ # @param output [Array<Array<Vedeu::Views::Char>>]
20
+ # @return [Vedeu::Output::Output]
21
+ def initialize(output)
22
+ @output = output
23
+ end
22
24
 
23
- # Send the view to the renderers.
24
- #
25
- # @return [Array]
26
- def render
27
- if Vedeu::Configuration.drb?
28
- Vedeu.trigger(:_drb_store_output_, output)
25
+ # Send the view to the renderers.
26
+ #
27
+ # @return [Array]
28
+ def render
29
+ if Vedeu::Configuration.drb?
30
+ Vedeu.trigger(:_drb_store_output_, output)
31
+
32
+ # Vedeu::Renderers::HTML.
33
+ # to_file(Vedeu::Buffers::VirtualBuffers.retrieve)
34
+ end
29
35
 
30
- # Vedeu::Renderers::HTML.to_file(Vedeu::VirtualBuffers.retrieve)
36
+ Vedeu.renderers.render(output) if Vedeu.ready?
31
37
  end
32
38
 
33
- Vedeu.renderers.render(output) if Vedeu.ready?
34
- end
39
+ protected
35
40
 
36
- protected
41
+ # @!attribute [r] output
42
+ # @return [Array<Array<Vedeu::Views::Char>>]
43
+ attr_reader :output
37
44
 
38
- # @!attribute [r] output
39
- # @return [Array<Array<Vedeu::Views::Char>>]
40
- attr_reader :output
45
+ end # Output
41
46
 
42
47
  end # Output
43
48