vedeu 0.8.3 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -0
  3. data/integrations/342_streams.rb +74 -0
  4. data/integrations/dsl_app_001.rb +58 -0
  5. data/integrations/dsl_app_002.rb +59 -0
  6. data/integrations/dsl_app_003.rb +58 -0
  7. data/integrations/dsl_app_004.rb +63 -0
  8. data/integrations/dsl_app_005.rb +62 -0
  9. data/integrations/dsl_app_006.rb +57 -0
  10. data/integrations/dsl_app_007.rb +63 -0
  11. data/integrations/dsl_app_008.rb +65 -0
  12. data/integrations/dsl_app_009.rb +70 -0
  13. data/integrations/dsl_app_010.rb +71 -0
  14. data/integrations/dsl_app_011.rb +61 -0
  15. data/integrations/dsl_app_012.rb +59 -0
  16. data/integrations/dsl_app_013.rb +60 -0
  17. data/integrations/dsl_app_014.rb +60 -0
  18. data/integrations/dsl_app_015.rb +60 -0
  19. data/integrations/dsl_app_016.rb +64 -0
  20. data/integrations/dsl_app_017.rb +56 -0
  21. data/integrations/dsl_app_018.rb +56 -0
  22. data/integrations/dsl_app_019.rb +56 -0
  23. data/integrations/dsl_app_020.rb +56 -0
  24. data/integrations/expected/342_streams.out +1 -0
  25. data/integrations/expected/dsl_app_001.out +1 -0
  26. data/integrations/expected/dsl_app_002.out +1 -0
  27. data/integrations/expected/dsl_app_003.out +1 -0
  28. data/integrations/expected/dsl_app_004.out +1 -0
  29. data/integrations/expected/dsl_app_005.out +1 -0
  30. data/integrations/expected/dsl_app_006.out +1 -0
  31. data/integrations/expected/dsl_app_007.out +1 -0
  32. data/integrations/expected/dsl_app_008.out +1 -0
  33. data/integrations/expected/dsl_app_009.out +1 -0
  34. data/integrations/expected/dsl_app_010.out +1 -0
  35. data/integrations/expected/dsl_app_011.out +1 -0
  36. data/integrations/expected/dsl_app_012.out +1 -0
  37. data/integrations/expected/dsl_app_013.out +1 -0
  38. data/integrations/expected/dsl_app_014.out +1 -0
  39. data/integrations/expected/dsl_app_015.out +1 -0
  40. data/integrations/expected/dsl_app_016.out +1 -0
  41. data/integrations/support/test_interface.rb +13 -0
  42. data/integrations/test_runner.sh +32 -0
  43. data/lib/vedeu/cells/empty.rb +14 -0
  44. data/lib/vedeu/colours/background.rb +13 -0
  45. data/lib/vedeu/colours/colour.rb +11 -4
  46. data/lib/vedeu/colours/foreground.rb +13 -0
  47. data/lib/vedeu/common.rb +42 -0
  48. data/lib/vedeu/dsl/attributes.rb +1 -1
  49. data/lib/vedeu/dsl/elements.rb +57 -23
  50. data/lib/vedeu/dsl/string/align.rb +17 -2
  51. data/lib/vedeu/geometries/position.rb +5 -0
  52. data/lib/vedeu/geometries/positionable.rb +2 -2
  53. data/lib/vedeu/presentation/style.rb +5 -0
  54. data/lib/vedeu/renderers/all.rb +1 -0
  55. data/lib/vedeu/renderers/escape.rb +96 -0
  56. data/lib/vedeu/repositories/defaults.rb +14 -6
  57. data/lib/vedeu/runtime/launcher.rb +5 -1
  58. data/lib/vedeu/version.rb +1 -1
  59. data/lib/vedeu/views/lines.rb +5 -0
  60. data/lib/vedeu/views/stream.rb +8 -1
  61. data/lib/vedeu/views/streams.rb +6 -1
  62. data/lib/vedeu/views/value.rb +2 -8
  63. data/lib/vedeu/views/view.rb +1 -1
  64. data/test/lib/vedeu/colours/colour_test.rb +0 -8
  65. data/test/lib/vedeu/common_test.rb +72 -0
  66. data/test/lib/vedeu/dsl/string/align_test.rb +1 -1
  67. metadata +43 -17
  68. data/examples/284_slow_rendering.rb +0 -108
  69. data/examples/views/expected/vedeu_line.html +0 -140
  70. data/examples/views/expected/vedeu_line.json +0 -96050
  71. data/examples/views/expected/vedeu_line.out +0 -1
  72. data/examples/views/expected/vedeu_line.txt +0 -58
  73. data/examples/views/expected/vedeu_lines.html +0 -140
  74. data/examples/views/expected/vedeu_lines.json +0 -96050
  75. data/examples/views/expected/vedeu_lines.out +0 -1
  76. data/examples/views/expected/vedeu_lines_alignment.html +0 -80
  77. data/examples/views/expected/vedeu_lines_alignment.json +0 -46370
  78. data/examples/views/expected/vedeu_lines_alignment.out +0 -1
  79. data/examples/views/line.rb +0 -128
  80. data/examples/views/lines.rb +0 -165
  81. data/examples/views/lines_alignment.rb +0 -126
  82. data/examples/views/runner.sh +0 -73
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require 'bundler/setup'
6
+ require 'vedeu'
7
+
8
+ class DSLApp
9
+
10
+ Vedeu.bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
11
+
12
+ Vedeu.configure do
13
+ debug!
14
+ log '/tmp/vedeu_views_dsl.log'
15
+ renderers [
16
+ Vedeu::Renderers::Terminal.new(
17
+ filename: '/tmp/dsl_app_014.out',
18
+ write_file: true),
19
+ # Vedeu::Renderers::JSON.new(filename: '/tmp/dsl_app_014.json'),
20
+ # Vedeu::Renderers::HTML.new(filename: '/tmp/dsl_app_014.html'),
21
+ # Vedeu::Renderers::Text.new(filename: '/tmp/dsl_app_014.txt'),
22
+ ]
23
+ run_once!
24
+ standalone!
25
+ end
26
+
27
+ load './support/test_interface.rb'
28
+
29
+ Vedeu.render do
30
+ view(:test_interface) do
31
+ lines do
32
+ right 'view->lines->right 1', { foreground: '#00ff00' }
33
+ right 'view->lines->right 2', { background: '#00ff00', foreground: '#000000' }
34
+ end
35
+ end
36
+ end
37
+
38
+ def self.actual
39
+ File.read('/tmp/dsl_app_014.out')
40
+ end
41
+
42
+ def self.expected
43
+ File.read(File.expand_path('../expected/dsl_app_014.out', __FILE__))
44
+ end
45
+
46
+ def self.start(argv = ARGV)
47
+ Vedeu::Launcher.execute!(argv)
48
+ end
49
+
50
+ end # DSLApp
51
+
52
+ DSLApp.start
53
+
54
+ if DSLApp.expected == DSLApp.actual
55
+ puts "#{__FILE__} \e[32mPassed.\e[39m"
56
+ exit 0;
57
+ else
58
+ puts "#{__FILE__} \e[31mFailed.\e[39m"
59
+ exit 1;
60
+ end
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require 'bundler/setup'
6
+ require 'vedeu'
7
+
8
+ class DSLApp
9
+
10
+ Vedeu.bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
11
+
12
+ Vedeu.configure do
13
+ debug!
14
+ log '/tmp/vedeu_views_dsl.log'
15
+ renderers [
16
+ Vedeu::Renderers::Terminal.new(
17
+ filename: '/tmp/dsl_app_015.out',
18
+ write_file: true),
19
+ # Vedeu::Renderers::JSON.new(filename: '/tmp/dsl_app_015.json'),
20
+ # Vedeu::Renderers::HTML.new(filename: '/tmp/dsl_app_015.html'),
21
+ # Vedeu::Renderers::Text.new(filename: '/tmp/dsl_app_015.txt'),
22
+ ]
23
+ run_once!
24
+ standalone!
25
+ end
26
+
27
+ load './support/test_interface.rb'
28
+
29
+ Vedeu.render do
30
+ view(:test_interface) do
31
+ lines do
32
+ centre 'view->lines->centre 1', { foreground: '#0044ff' }
33
+ centre 'view->lines->centre 2', { background: '#0044ff', foreground: '#000000' }
34
+ end
35
+ end
36
+ end
37
+
38
+ def self.actual
39
+ File.read('/tmp/dsl_app_015.out')
40
+ end
41
+
42
+ def self.expected
43
+ File.read(File.expand_path('../expected/dsl_app_015.out', __FILE__))
44
+ end
45
+
46
+ def self.start(argv = ARGV)
47
+ Vedeu::Launcher.execute!(argv)
48
+ end
49
+
50
+ end # DSLApp
51
+
52
+ DSLApp.start
53
+
54
+ if DSLApp.expected == DSLApp.actual
55
+ puts "#{__FILE__} \e[32mPassed.\e[39m"
56
+ exit 0;
57
+ else
58
+ puts "#{__FILE__} \e[31mFailed.\e[39m"
59
+ exit 1;
60
+ end
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require 'bundler/setup'
6
+ require 'vedeu'
7
+
8
+ class DSLApp
9
+
10
+ Vedeu.bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
11
+
12
+ Vedeu.configure do
13
+ debug!
14
+ log '/tmp/vedeu_views_dsl.log'
15
+ renderers [
16
+ Vedeu::Renderers::Terminal.new(
17
+ filename: '/tmp/dsl_app_016.out',
18
+ write_file: true),
19
+ # Vedeu::Renderers::JSON.new(filename: '/tmp/dsl_app_016.json'),
20
+ # Vedeu::Renderers::HTML.new(filename: '/tmp/dsl_app_016.html'),
21
+ # Vedeu::Renderers::Text.new(filename: '/tmp/dsl_app_016.txt'),
22
+ ]
23
+ run_once!
24
+ standalone!
25
+ end
26
+
27
+ load './support/test_interface.rb'
28
+
29
+ Vedeu.render do
30
+ view(:test_interface) do
31
+ foreground '#ffffff'
32
+ line do
33
+ left 'v->l->left', { background: '#aa2200', width: 14 }
34
+ right 'v->l->right', { background: '#0022ff', width: 15 }
35
+ end
36
+ line do
37
+ centre 'v->l->centre', { background: '#007700', width: 30 }
38
+ end
39
+ end
40
+ end
41
+
42
+ def self.actual
43
+ File.read('/tmp/dsl_app_016.out')
44
+ end
45
+
46
+ def self.expected
47
+ File.read(File.expand_path('../expected/dsl_app_016.out', __FILE__))
48
+ end
49
+
50
+ def self.start(argv = ARGV)
51
+ Vedeu::Launcher.execute!(argv)
52
+ end
53
+
54
+ end # DSLApp
55
+
56
+ DSLApp.start
57
+
58
+ if DSLApp.expected == DSLApp.actual
59
+ puts "#{__FILE__} \e[32mPassed.\e[39m"
60
+ exit 0;
61
+ else
62
+ puts "#{__FILE__} \e[31mFailed.\e[39m"
63
+ exit 1;
64
+ end
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require 'bundler/setup'
6
+ require 'vedeu'
7
+
8
+ class DSLApp
9
+
10
+ Vedeu.bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
11
+
12
+ Vedeu.configure do
13
+ debug!
14
+ log '/tmp/vedeu_views_dsl.log'
15
+ renderers [
16
+ Vedeu::Renderers::Terminal.new(
17
+ filename: '/tmp/dsl_app_017.out',
18
+ write_file: true),
19
+ # Vedeu::Renderers::JSON.new(filename: '/tmp/dsl_app_017.json'),
20
+ # Vedeu::Renderers::HTML.new(filename: '/tmp/dsl_app_017.html'),
21
+ # Vedeu::Renderers::Text.new(filename: '/tmp/dsl_app_017.txt'),
22
+ ]
23
+ run_once!
24
+ standalone!
25
+ end
26
+
27
+ load './support/test_interface.rb'
28
+
29
+ Vedeu.render do
30
+ view(:test_interface) do
31
+ end
32
+ end
33
+
34
+ def self.actual
35
+ File.read('/tmp/dsl_app_017.out')
36
+ end
37
+
38
+ def self.expected
39
+ File.read(File.expand_path('../expected/dsl_app_017.out', __FILE__))
40
+ end
41
+
42
+ def self.start(argv = ARGV)
43
+ Vedeu::Launcher.execute!(argv)
44
+ end
45
+
46
+ end # DSLApp
47
+
48
+ DSLApp.start
49
+
50
+ if DSLApp.expected == DSLApp.actual
51
+ puts "#{__FILE__} \e[32mPassed.\e[39m"
52
+ exit 0;
53
+ else
54
+ puts "#{__FILE__} \e[31mFailed.\e[39m"
55
+ exit 1;
56
+ end
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require 'bundler/setup'
6
+ require 'vedeu'
7
+
8
+ class DSLApp
9
+
10
+ Vedeu.bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
11
+
12
+ Vedeu.configure do
13
+ debug!
14
+ log '/tmp/vedeu_views_dsl.log'
15
+ renderers [
16
+ Vedeu::Renderers::Terminal.new(
17
+ filename: '/tmp/dsl_app_018.out',
18
+ write_file: true),
19
+ # Vedeu::Renderers::JSON.new(filename: '/tmp/dsl_app_018.json'),
20
+ # Vedeu::Renderers::HTML.new(filename: '/tmp/dsl_app_018.html'),
21
+ # Vedeu::Renderers::Text.new(filename: '/tmp/dsl_app_018.txt'),
22
+ ]
23
+ run_once!
24
+ standalone!
25
+ end
26
+
27
+ load './support/test_interface.rb'
28
+
29
+ Vedeu.render do
30
+ view(:test_interface) do
31
+ end
32
+ end
33
+
34
+ def self.actual
35
+ File.read('/tmp/dsl_app_018.out')
36
+ end
37
+
38
+ def self.expected
39
+ File.read(File.expand_path('../expected/dsl_app_018.out', __FILE__))
40
+ end
41
+
42
+ def self.start(argv = ARGV)
43
+ Vedeu::Launcher.execute!(argv)
44
+ end
45
+
46
+ end # DSLApp
47
+
48
+ DSLApp.start
49
+
50
+ if DSLApp.expected == DSLApp.actual
51
+ puts "#{__FILE__} \e[32mPassed.\e[39m"
52
+ exit 0;
53
+ else
54
+ puts "#{__FILE__} \e[31mFailed.\e[39m"
55
+ exit 1;
56
+ end
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require 'bundler/setup'
6
+ require 'vedeu'
7
+
8
+ class DSLApp
9
+
10
+ Vedeu.bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
11
+
12
+ Vedeu.configure do
13
+ debug!
14
+ log '/tmp/vedeu_views_dsl.log'
15
+ renderers [
16
+ Vedeu::Renderers::Terminal.new(
17
+ filename: '/tmp/dsl_app_019.out',
18
+ write_file: true),
19
+ # Vedeu::Renderers::JSON.new(filename: '/tmp/dsl_app_019.json'),
20
+ # Vedeu::Renderers::HTML.new(filename: '/tmp/dsl_app_019.html'),
21
+ # Vedeu::Renderers::Text.new(filename: '/tmp/dsl_app_019.txt'),
22
+ ]
23
+ run_once!
24
+ standalone!
25
+ end
26
+
27
+ load './support/test_interface.rb'
28
+
29
+ Vedeu.render do
30
+ view(:test_interface) do
31
+ end
32
+ end
33
+
34
+ def self.actual
35
+ File.read('/tmp/dsl_app_019.out')
36
+ end
37
+
38
+ def self.expected
39
+ File.read(File.expand_path('../expected/dsl_app_019.out', __FILE__))
40
+ end
41
+
42
+ def self.start(argv = ARGV)
43
+ Vedeu::Launcher.execute!(argv)
44
+ end
45
+
46
+ end # DSLApp
47
+
48
+ DSLApp.start
49
+
50
+ if DSLApp.expected == DSLApp.actual
51
+ puts "#{__FILE__} \e[32mPassed.\e[39m"
52
+ exit 0;
53
+ else
54
+ puts "#{__FILE__} \e[31mFailed.\e[39m"
55
+ exit 1;
56
+ end
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require 'bundler/setup'
6
+ require 'vedeu'
7
+
8
+ class DSLApp
9
+
10
+ Vedeu.bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
11
+
12
+ Vedeu.configure do
13
+ debug!
14
+ log '/tmp/vedeu_views_dsl.log'
15
+ renderers [
16
+ Vedeu::Renderers::Terminal.new(
17
+ filename: '/tmp/dsl_app_020.out',
18
+ write_file: true),
19
+ # Vedeu::Renderers::JSON.new(filename: '/tmp/dsl_app_020.json'),
20
+ # Vedeu::Renderers::HTML.new(filename: '/tmp/dsl_app_020.html'),
21
+ # Vedeu::Renderers::Text.new(filename: '/tmp/dsl_app_020.txt'),
22
+ ]
23
+ run_once!
24
+ standalone!
25
+ end
26
+
27
+ load './support/test_interface.rb'
28
+
29
+ Vedeu.render do
30
+ view(:test_interface) do
31
+ end
32
+ end
33
+
34
+ def self.actual
35
+ File.read('/tmp/dsl_app_020.out')
36
+ end
37
+
38
+ def self.expected
39
+ File.read(File.expand_path('../expected/dsl_app_020.out', __FILE__))
40
+ end
41
+
42
+ def self.start(argv = ARGV)
43
+ Vedeu::Launcher.execute!(argv)
44
+ end
45
+
46
+ end # DSLApp
47
+
48
+ DSLApp.start
49
+
50
+ if DSLApp.expected == DSLApp.actual
51
+ puts "#{__FILE__} \e[32mPassed.\e[39m"
52
+ exit 0;
53
+ else
54
+ puts "#{__FILE__} \e[31mFailed.\e[39m"
55
+ exit 1;
56
+ end
@@ -0,0 +1 @@
1
+ 07/01/2016 21:32:19 null > hi                      
@@ -0,0 +1 @@
1
+ (0l(B(0q(B Test (0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0k(B(0x(Bview->line                   (0x(B(0x(B                             (0x(B(0x(B                             (0x(B(0m(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0j(B
@@ -0,0 +1 @@
1
+ (0l(B(0q(B Test (0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0k(B(0x(Bview->line 1                 (0x(B(0x(Bview->line 2                 (0x(B(0x(B                             (0x(B(0m(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0j(B
@@ -0,0 +1 @@
1
+ (0l(B(0q(B Test (0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0k(B(0x(Bview->text 1                 (0x(B(0x(Bview->text 2                 (0x(B(0x(B                             (0x(B(0m(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0j(B
@@ -0,0 +1 @@
1
+ (0l(B(0q(B Test (0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0k(B(0x(Bview->line 1->text           (0x(B(0x(Bview->line 2->text 1view->lin(0x(B(0x(B                             (0x(B(0m(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0j(B
@@ -0,0 +1 @@
1
+ (0l(B(0q(B Test (0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0k(B(0x(Bview->lines->line 1          (0x(B(0x(Bview->lines->line 2          (0x(B(0x(Bview->lines->line 3          (0x(B(0m(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0j(B
@@ -0,0 +1 @@
1
+ (0l(B(0q(B Test (0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0k(B(0x(Bview->stream                 (0x(B(0x(B                             (0x(B(0x(B                             (0x(B(0m(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0j(B
@@ -0,0 +1 @@
1
+ (0l(B(0q(B Test (0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0k(B(0x(Bview->line 1->stream         (0x(B(0x(Bview->line 2->stream 1view->l(0x(B(0x(B                             (0x(B(0m(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0j(B
@@ -0,0 +1 @@
1
+ (0l(B(0q(B Test (0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0k(B(0x(Bview->lines->line->stream    (0x(B(0x(Bview->stream 2->text 1view->s(0x(B(0x(B                             (0x(B(0m(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0q(B(0j(B