vedeu 0.8.3 → 0.8.4

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 (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