vedeu 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
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