vedeu 0.8.2 → 0.8.3

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.
Files changed (134) hide show
  1. checksums.yaml +4 -4
  2. data/examples/views/_interfaces.rb +127 -0
  3. data/examples/views/empty_template.rb +10 -0
  4. data/examples/views/expected/vedeu_full_screen.html +140 -0
  5. data/examples/views/expected/vedeu_full_screen.json +96050 -0
  6. data/examples/views/expected/vedeu_full_screen.out +1 -0
  7. data/examples/views/expected/vedeu_full_screen.txt +50 -0
  8. data/examples/views/expected/vedeu_line.html +140 -0
  9. data/examples/views/expected/vedeu_line.json +96050 -0
  10. data/examples/views/expected/vedeu_line.out +1 -0
  11. data/examples/views/expected/vedeu_line.txt +58 -0
  12. data/examples/views/expected/vedeu_lines.html +140 -0
  13. data/examples/views/expected/vedeu_lines.json +96050 -0
  14. data/examples/views/expected/{lines.out → vedeu_lines.out} +1 -1
  15. data/examples/views/expected/vedeu_lines_alignment.html +80 -0
  16. data/examples/views/expected/vedeu_lines_alignment.json +46370 -0
  17. data/examples/views/expected/vedeu_lines_alignment.out +1 -0
  18. data/examples/views/full_screen.rb +10 -0
  19. data/examples/views/line.rb +11 -106
  20. data/examples/views/lines.rb +8 -127
  21. data/examples/views/lines_alignment.rb +17 -125
  22. data/examples/views/runner.sh +65 -19
  23. data/lib/vedeu/borders/border.rb +6 -6
  24. data/lib/vedeu/borders/refresh.rb +4 -6
  25. data/lib/vedeu/buffers/buffer.rb +1 -1
  26. data/lib/vedeu/buffers/terminal.rb +4 -4
  27. data/lib/vedeu/buffers/view.rb +2 -2
  28. data/lib/vedeu/cells/all.rb +2 -2
  29. data/lib/vedeu/cells/border.rb +5 -0
  30. data/lib/vedeu/cells/borders/all.rb +2 -8
  31. data/lib/vedeu/cells/borders/edges/all.rb +6 -0
  32. data/lib/vedeu/cells/borders/{bottom_horizontal.rb → edges/bottom_horizontal.rb} +0 -0
  33. data/lib/vedeu/cells/borders/{left_vertical.rb → edges/left_vertical.rb} +0 -0
  34. data/lib/vedeu/cells/borders/{right_vertical.rb → edges/right_vertical.rb} +0 -0
  35. data/lib/vedeu/cells/borders/{top_horizontal.rb → edges/top_horizontal.rb} +0 -0
  36. data/lib/vedeu/cells/borders/horizontal.rb +5 -0
  37. data/lib/vedeu/cells/borders/vertical.rb +5 -0
  38. data/lib/vedeu/cells/borders/vertices/all.rb +6 -0
  39. data/lib/vedeu/cells/borders/{bottom_left.rb → vertices/bottom_left.rb} +5 -0
  40. data/lib/vedeu/cells/borders/{bottom_right.rb → vertices/bottom_right.rb} +5 -0
  41. data/lib/vedeu/cells/borders/{top_left.rb → vertices/top_left.rb} +5 -0
  42. data/lib/vedeu/cells/borders/{top_right.rb → vertices/top_right.rb} +5 -0
  43. data/lib/vedeu/cells/char.rb +16 -0
  44. data/lib/vedeu/cells/clear.rb +5 -0
  45. data/lib/vedeu/cells/cursor.rb +70 -0
  46. data/lib/vedeu/cells/empty.rb +24 -14
  47. data/lib/vedeu/cells/escape.rb +8 -7
  48. data/lib/vedeu/cells/support/all.rb +3 -0
  49. data/lib/vedeu/cells/support/html.rb +98 -0
  50. data/lib/vedeu/colours/background.rb +21 -1
  51. data/lib/vedeu/colours/colour.rb +10 -2
  52. data/lib/vedeu/colours/foreground.rb +21 -1
  53. data/lib/vedeu/colours/translator.rb +17 -24
  54. data/lib/vedeu/colours/validator.rb +9 -9
  55. data/lib/vedeu/configuration/api.rb +1 -1
  56. data/lib/vedeu/cursors/cursor.rb +5 -5
  57. data/lib/vedeu/dsl/elements.rb +22 -79
  58. data/lib/vedeu/dsl/string/text.rb +3 -3
  59. data/lib/vedeu/editor/cropper.rb +2 -2
  60. data/lib/vedeu/editor/cursor.rb +1 -1
  61. data/lib/vedeu/editor/document.rb +1 -1
  62. data/lib/vedeu/geometries/area/dimension.rb +1 -1
  63. data/lib/vedeu/geometries/position.rb +5 -2
  64. data/lib/vedeu/interfaces/clear.rb +5 -5
  65. data/lib/vedeu/models/row.rb +4 -3
  66. data/lib/vedeu/output/compressor.rb +7 -7
  67. data/lib/vedeu/output/output.rb +8 -13
  68. data/lib/vedeu/output/viewport.rb +1 -1
  69. data/lib/vedeu/presentation/background.rb +2 -2
  70. data/lib/vedeu/presentation/colour.rb +0 -4
  71. data/lib/vedeu/presentation/foreground.rb +2 -2
  72. data/lib/vedeu/presentation/style.rb +1 -1
  73. data/lib/vedeu/presentation/styles.rb +0 -3
  74. data/lib/vedeu/renderers/file.rb +10 -68
  75. data/lib/vedeu/renderers/html.rb +28 -96
  76. data/lib/vedeu/renderers/json.rb +15 -31
  77. data/lib/vedeu/renderers/options.rb +160 -14
  78. data/lib/vedeu/renderers/templates/html_renderer.vedeu +1 -0
  79. data/lib/vedeu/renderers/terminal.rb +16 -17
  80. data/lib/vedeu/renderers/text.rb +32 -41
  81. data/lib/vedeu/version.rb +1 -1
  82. data/lib/vedeu/views/all.rb +0 -2
  83. data/lib/vedeu/views/chars.rb +6 -3
  84. data/lib/vedeu/views/stream.rb +3 -2
  85. data/test/lib/vedeu/borders/caption_test.rb +17 -17
  86. data/test/lib/vedeu/borders/title_test.rb +12 -12
  87. data/test/lib/vedeu/cells/border_test.rb +6 -0
  88. data/test/lib/vedeu/cells/borders/{bottom_horizontal_test.rb → edges/bottom_horizontal_test.rb} +0 -0
  89. data/test/lib/vedeu/cells/borders/{left_vertical_test.rb → edges/left_vertical_test.rb} +0 -0
  90. data/test/lib/vedeu/cells/borders/{right_vertical_test.rb → edges/right_vertical_test.rb} +0 -0
  91. data/test/lib/vedeu/cells/borders/{top_horizontal_test.rb → edges/top_horizontal_test.rb} +0 -0
  92. data/test/lib/vedeu/cells/borders/horizontal_test.rb +6 -0
  93. data/test/lib/vedeu/cells/borders/vertical_test.rb +6 -0
  94. data/test/lib/vedeu/cells/borders/{bottom_left_test.rb → vertices/bottom_left_test.rb} +6 -0
  95. data/test/lib/vedeu/cells/borders/{bottom_right_test.rb → vertices/bottom_right_test.rb} +6 -0
  96. data/test/lib/vedeu/cells/borders/{top_left_test.rb → vertices/top_left_test.rb} +6 -0
  97. data/test/lib/vedeu/cells/borders/{top_right_test.rb → vertices/top_right_test.rb} +6 -0
  98. data/test/lib/vedeu/cells/char_test.rb +18 -0
  99. data/test/lib/vedeu/cells/clear_test.rb +6 -0
  100. data/test/lib/vedeu/cells/cursor_test.rb +113 -0
  101. data/test/lib/vedeu/cells/empty_test.rb +100 -7
  102. data/test/lib/vedeu/cells/escape_test.rb +29 -13
  103. data/test/lib/vedeu/cells/support/html_test.rb +100 -0
  104. data/test/lib/vedeu/colours/background_test.rb +35 -3
  105. data/test/lib/vedeu/colours/colour_test.rb +66 -0
  106. data/test/lib/vedeu/colours/foreground_test.rb +35 -3
  107. data/test/lib/vedeu/colours/translator_test.rb +0 -34
  108. data/test/lib/vedeu/colours/validator_test.rb +84 -6
  109. data/test/lib/vedeu/cursors/cursor_test.rb +4 -4
  110. data/test/lib/vedeu/cursors/refresh_test.rb +4 -1
  111. data/test/lib/vedeu/dsl/string/text_test.rb +36 -36
  112. data/test/lib/vedeu/editor/cropper_test.rb +15 -15
  113. data/test/lib/vedeu/geometries/position_test.rb +14 -1
  114. data/test/lib/vedeu/models/page_test.rb +10 -10
  115. data/test/lib/vedeu/models/row_test.rb +7 -7
  116. data/test/lib/vedeu/output/compressor_test.rb +63 -50
  117. data/test/lib/vedeu/renderers/file_test.rb +64 -35
  118. data/test/lib/vedeu/renderers/html_test.rb +15 -12
  119. data/test/lib/vedeu/renderers/json_test.rb +79 -56
  120. data/test/lib/vedeu/renderers/options_test.rb +74 -26
  121. data/test/lib/vedeu/renderers/terminal_test.rb +34 -4
  122. data/test/lib/vedeu/renderers/text_test.rb +35 -3
  123. data/test/lib/vedeu/views/chars_test.rb +6 -0
  124. metadata +50 -41
  125. data/examples/views/expected/line.out +0 -1
  126. data/examples/views/expected/lines_alignment.out +0 -1
  127. data/lib/vedeu/cells/html.rb +0 -21
  128. data/lib/vedeu/cells/json.rb +0 -21
  129. data/lib/vedeu/views/char.rb +0 -180
  130. data/lib/vedeu/views/html_char.rb +0 -133
  131. data/test/lib/vedeu/cells/html_test.rb +0 -15
  132. data/test/lib/vedeu/cells/json_test.rb +0 -15
  133. data/test/lib/vedeu/views/char_test.rb +0 -283
  134. data/test/lib/vedeu/views/html_char_test.rb +0 -125
@@ -27,6 +27,13 @@ module Vedeu
27
27
  # @return [String]
28
28
  attr_reader :value
29
29
 
30
+ # Returns the value represented as HTML.
31
+ #
32
+ # @return [String]
33
+ def as_html
34
+ ' '
35
+ end
36
+
30
37
  # @return [Boolean]
31
38
  def cell?
32
39
  true
@@ -49,27 +56,30 @@ module Vedeu
49
56
  ' '
50
57
  end
51
58
 
52
- # @return [Hash]
53
- def to_hash
59
+ # @return [Hash<Symbol => Hash<Symbol => String>, String>]
60
+ def to_h
54
61
  {
55
- colour: colour.to_s,
56
- style: style.to_s,
57
- value: value.to_s,
58
- position: position.to_s,
59
- }
62
+ name: name.to_s,
63
+ style: style.to_s,
64
+ type: type,
65
+ value: value.to_s,
66
+ }.merge!(colour.to_h).merge!(position.to_h)
60
67
  end
68
+ alias_method :to_hash, :to_h
61
69
 
62
- # @param _options [Hash] Ignored.
70
+ # Returns the object represented as HTML.
71
+ #
72
+ # @param options [Hash] Options provided by
73
+ # {Vedeu::Renderers::HTML}.
63
74
  # @return [String]
64
- def to_html(_options = {})
65
- ''
75
+ def to_html(options = {})
76
+ Vedeu::Cells::HTML.new(self, options).to_html
66
77
  end
67
78
 
68
- # @return [String]
69
- def to_s
70
- value.to_s
79
+ # @return [Symbol]
80
+ def type
81
+ :empty
71
82
  end
72
- alias_method :to_str, :to_s
73
83
 
74
84
  private
75
85
 
@@ -40,7 +40,10 @@ module Vedeu
40
40
  #
41
41
  # @return [Hash<void>]
42
42
  def to_h
43
- {}
43
+ {
44
+ type: type,
45
+ value: value,
46
+ }
44
47
  end
45
48
  alias_method :to_hash, :to_h
46
49
 
@@ -55,15 +58,13 @@ module Vedeu
55
58
 
56
59
  # @return [String]
57
60
  def to_s
58
- "#{position}#{value}"
61
+ value
59
62
  end
60
63
  alias_method :to_str, :to_s
61
64
 
62
- private
63
-
64
- # @return [Hash]
65
- def defaults
66
- super.merge!(position: [1, 1], value: '')
65
+ # @return [Symbol]
66
+ def type
67
+ :escape
67
68
  end
68
69
 
69
70
  end # Escape
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'vedeu/cells/support/html'
@@ -0,0 +1,98 @@
1
+ module Vedeu
2
+
3
+ module Cells
4
+
5
+ # Presents a {Vedeu::Cells} member class as a HTML string.
6
+ #
7
+ # @api private
8
+ #
9
+ class HTML
10
+
11
+ include Vedeu::Common
12
+
13
+ # @param cell [void] The {Vedeu::Cells} class to be presented as
14
+ # HTML.
15
+ # @param options [Hash] Options provided by
16
+ # {Vedeu::Renderers::HTML}.
17
+ # @return [Vedeu::Cells::HTML]
18
+ def initialize(cell, options = {})
19
+ @cell = cell
20
+ @options = options || {}
21
+ end
22
+
23
+ # @return [String]
24
+ def to_html
25
+ "#{start_tag}#{style_attribute}>#{value}#{end_tag}"
26
+ end
27
+
28
+ protected
29
+
30
+ # @!attribute [r] cell
31
+ # @return [void]
32
+ attr_reader :cell
33
+
34
+ # @!attribute [r] options
35
+ # @return [Hash]
36
+ attr_reader :options
37
+
38
+ private
39
+
40
+ # @return [String]
41
+ def background
42
+ if cell.respond_to?(:background)
43
+ cell.background.to_html
44
+
45
+ else
46
+ ''
47
+
48
+ end
49
+ end
50
+
51
+ # @return [String]
52
+ def end_tag
53
+ options.fetch(:end_tag, '</td>')
54
+ end
55
+
56
+ # @return [String]
57
+ def foreground
58
+ if cell.respond_to?(:foreground)
59
+ cell.foreground.to_html
60
+
61
+ else
62
+ ''
63
+
64
+ end
65
+ end
66
+
67
+ # @return [String]
68
+ def start_tag
69
+ options.fetch(:start_tag, '<td')
70
+ end
71
+
72
+ # @return [String]
73
+ def style_attribute
74
+ if absent?(background) && absent?(foreground)
75
+ ''
76
+
77
+ else
78
+ " style='#{background}#{foreground}'"
79
+
80
+ end
81
+ end
82
+
83
+ # @return [String]
84
+ def value
85
+ if cell.respond_to?(:as_html) && present?(cell.as_html)
86
+ cell.as_html
87
+
88
+ else
89
+ '&nbsp;'
90
+
91
+ end
92
+ end
93
+
94
+ end # HTML
95
+
96
+ end # Cells
97
+
98
+ end # Vedeu
@@ -17,6 +17,26 @@ module Vedeu
17
17
  present?(to_s)
18
18
  end
19
19
 
20
+ # @return [Hash<Symbol => String>]
21
+ def to_h
22
+ {
23
+ background: colour.to_s
24
+ }
25
+ end
26
+ alias_method :to_hash, :to_h
27
+
28
+ # @param _options [Hash] Ignored.
29
+ # @return [String]
30
+ def to_html(_options = {})
31
+ if rgb?
32
+ "background-color:#{colour};"
33
+
34
+ else
35
+ ''
36
+
37
+ end
38
+ end
39
+
20
40
  private
21
41
 
22
42
  # @return [String]
@@ -31,7 +51,7 @@ module Vedeu
31
51
  # {Vedeu::EscapeSequences::Esc#valid_codes}
32
52
  #
33
53
  # @return [String]
34
- def named_code
54
+ def named
35
55
  Vedeu.esc.background_colour(colour)
36
56
  end
37
57
 
@@ -87,7 +87,7 @@ module Vedeu
87
87
 
88
88
  # An object is equal when its values are the same.
89
89
  #
90
- # @param other [Vedeu::Views::Char]
90
+ # @param other [void]
91
91
  # @return [Boolean]
92
92
  def eql?(other)
93
93
  self.class == other.class && background == other.background &&
@@ -108,12 +108,20 @@ module Vedeu
108
108
  @_foreground = @foreground = Vedeu::Colours::Foreground.coerce(value)
109
109
  end
110
110
 
111
+ # @return [Hash<Symbol => Hash<Symbol => String>>]
112
+ def to_h
113
+ {
114
+ colour: background.to_h.merge!(foreground.to_h)
115
+ }
116
+ end
117
+ alias_method :to_hash, :to_h
118
+
111
119
  # Returns both or either of the converted attributes into a
112
120
  # single escape sequence.
113
121
  #
114
122
  # @return [String]
115
123
  def to_s
116
- foreground.to_s + background.to_s
124
+ "#{foreground}#{background}"
117
125
  end
118
126
  alias_method :to_str, :to_s
119
127
 
@@ -17,6 +17,26 @@ module Vedeu
17
17
  present?(to_s)
18
18
  end
19
19
 
20
+ # @return [Hash<Symbol => String>]
21
+ def to_h
22
+ {
23
+ foreground: colour.to_s
24
+ }
25
+ end
26
+ alias_method :to_hash, :to_h
27
+
28
+ # @param _options [Hash] Ignored.
29
+ # @return [String]
30
+ def to_html(_options = {})
31
+ if rgb?
32
+ "color:#{colour};"
33
+
34
+ else
35
+ ''
36
+
37
+ end
38
+ end
39
+
20
40
  private
21
41
 
22
42
  # @return [String]
@@ -31,7 +51,7 @@ module Vedeu
31
51
  # {Vedeu::EscapeSequences::Esc#valid_codes}
32
52
  #
33
53
  # @return [String]
34
- def named_code
54
+ def named
35
55
  Vedeu.esc.foreground_colour(colour)
36
56
  end
37
57
 
@@ -38,7 +38,7 @@ module Vedeu
38
38
  def_delegators :validator,
39
39
  :named?,
40
40
  :rgb?,
41
- :within_range?
41
+ :numbered?
42
42
 
43
43
  # @!attribute [r] colour
44
44
  # @return [String]
@@ -71,7 +71,7 @@ module Vedeu
71
71
 
72
72
  # An object is equal when its values are the same.
73
73
  #
74
- # @param other [Vedeu::Views::Char]
74
+ # @param other [void]
75
75
  # @return [Boolean]
76
76
  def eql?(other)
77
77
  self.class == other.class && colour == other.colour
@@ -89,11 +89,11 @@ module Vedeu
89
89
  elsif rgb?
90
90
  rgb
91
91
 
92
- elsif within_range?
92
+ elsif numbered?
93
93
  numbered
94
94
 
95
95
  elsif named?
96
- named_code
96
+ named
97
97
 
98
98
  else
99
99
  ''
@@ -103,14 +103,6 @@ module Vedeu
103
103
  alias_method :to_s, :escape_sequence
104
104
  alias_method :to_str, :escape_sequence
105
105
 
106
- # @param _options [Hash] Ignored.
107
- # @return [String]
108
- def to_html(_options = {})
109
- return colour if rgb?
110
-
111
- ''
112
- end
113
-
114
106
  private
115
107
 
116
108
  # Retrieves the escape sequence for the HTML/CSS colour code.
@@ -145,7 +137,14 @@ module Vedeu
145
137
  #
146
138
  # @return [String]
147
139
  def numbered
148
- "#{prefix}5;#{css_to_numbered}m"
140
+ format(numbered_prefix, colour)
141
+ end
142
+
143
+ # Returns an escape sequence.
144
+ #
145
+ # @return [String]
146
+ def numbered_prefix
147
+ "#{prefix}5;%sm"
149
148
  end
150
149
 
151
150
  # Returns an escape sequence.
@@ -155,12 +154,12 @@ module Vedeu
155
154
  if registered?(colour)
156
155
  retrieve(colour)
157
156
 
157
+ elsif [8, 16, 256].include?(Vedeu.config.colour_mode)
158
+ register(colour, format(numbered_prefix, css_to_numbered))
159
+
158
160
  elsif Vedeu.config.colour_mode == 16_777_216
159
161
  register(colour, format(rgb_prefix, *css_to_rgb))
160
162
 
161
- else
162
- register(colour, numbered)
163
-
164
163
  end
165
164
  end
166
165
 
@@ -189,13 +188,7 @@ module Vedeu
189
188
 
190
189
  # @return [Fixnum]
191
190
  def css_to_numbered
192
- if rgb?
193
- [16, red, green, blue].inject(:+)
194
-
195
- elsif within_range?
196
- colour
197
-
198
- end
191
+ [16, red, green, blue].inject(:+)
199
192
  end
200
193
 
201
194
  # Takes the red component of {#css_to_rgb} and converts to the
@@ -228,7 +221,7 @@ module Vedeu
228
221
  def not_implemented
229
222
  fail Vedeu::Error::NotImplemented, 'Subclasses implement this.'
230
223
  end
231
- alias_method :named_code, :not_implemented
224
+ alias_method :named, :not_implemented
232
225
  alias_method :repository, :not_implemented
233
226
 
234
227
  # @return [Vedeu::Colours::Validator]
@@ -25,14 +25,6 @@ module Vedeu
25
25
  @value = value
26
26
  end
27
27
 
28
- # Returns a boolean indicating whether the value is within the
29
- # range of valid terminal numbered colours.
30
- #
31
- # @return [Boolean]
32
- def within_range?
33
- numeric?(value) && value >= 0 && value <= 255
34
- end
35
-
36
28
  # Returns a boolean indicating whether the colour provided is a
37
29
  # valid named colour.
38
30
  #
@@ -41,6 +33,14 @@ module Vedeu
41
33
  Vedeu.esc.valid_name?(value)
42
34
  end
43
35
 
36
+ # Returns a boolean indicating whether the value is within the
37
+ # range of valid terminal numbered colours.
38
+ #
39
+ # @return [Boolean]
40
+ def numbered?
41
+ numeric?(value) && value >= 0 && value <= 255
42
+ end
43
+
44
44
  # Returns a boolean indicated whether the colour is a valid
45
45
  # HTML/CSS colour.
46
46
  #
@@ -53,7 +53,7 @@ module Vedeu
53
53
 
54
54
  # @return [Boolean]
55
55
  def valid?
56
- background? || colour? || foreground? || rgb? || named? || within_range?
56
+ background? || colour? || foreground? || rgb? || named? || numbered?
57
57
  end
58
58
 
59
59
  protected
@@ -389,7 +389,7 @@ module Vedeu
389
389
  # @param renderer [Array<Class>|Class]
390
390
  # @return [Array<Class>]
391
391
  def renderer(*renderer)
392
- options[:renderers] = renderer
392
+ options[:renderers] = renderer.flatten
393
393
  end
394
394
  alias_method :renderers, :renderer
395
395