termgui 0.0.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 (101) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +14 -0
  3. data/README.md +321 -0
  4. data/lib/termgui.rb +1 -0
  5. data/src/action.rb +58 -0
  6. data/src/box.rb +90 -0
  7. data/src/color.rb +174 -0
  8. data/src/cursor.rb +69 -0
  9. data/src/editor/editor_base.rb +152 -0
  10. data/src/editor/editor_base_handlers.rb +116 -0
  11. data/src/element.rb +61 -0
  12. data/src/element_bounds.rb +111 -0
  13. data/src/element_box.rb +64 -0
  14. data/src/element_render.rb +102 -0
  15. data/src/element_style.rb +51 -0
  16. data/src/emitter.rb +102 -0
  17. data/src/emitter_state.rb +19 -0
  18. data/src/enterable.rb +93 -0
  19. data/src/event.rb +92 -0
  20. data/src/focus.rb +102 -0
  21. data/src/geometry.rb +53 -0
  22. data/src/image.rb +60 -0
  23. data/src/input.rb +85 -0
  24. data/src/input_grab.rb +17 -0
  25. data/src/input_time.rb +97 -0
  26. data/src/key.rb +114 -0
  27. data/src/log.rb +24 -0
  28. data/src/node.rb +117 -0
  29. data/src/node_attributes.rb +27 -0
  30. data/src/node_visit.rb +52 -0
  31. data/src/renderer.rb +119 -0
  32. data/src/renderer_cursor.rb +18 -0
  33. data/src/renderer_draw.rb +28 -0
  34. data/src/renderer_image.rb +31 -0
  35. data/src/renderer_print.rb +40 -0
  36. data/src/screen.rb +96 -0
  37. data/src/screen_element.rb +59 -0
  38. data/src/screen_input.rb +43 -0
  39. data/src/screen_renderer.rb +53 -0
  40. data/src/style.rb +149 -0
  41. data/src/tco/colouring.rb +248 -0
  42. data/src/tco/config.rb +57 -0
  43. data/src/tco/palette.rb +603 -0
  44. data/src/tco/tco_termgui.rb +30 -0
  45. data/src/termgui.rb +29 -0
  46. data/src/util/css.rb +98 -0
  47. data/src/util/css_query.rb +23 -0
  48. data/src/util/easing.rb +364 -0
  49. data/src/util/hash_object.rb +131 -0
  50. data/src/util/imagemagick.rb +27 -0
  51. data/src/util/justify.rb +20 -0
  52. data/src/util/unicode-categories.rb +572 -0
  53. data/src/util/wrap.rb +102 -0
  54. data/src/util.rb +110 -0
  55. data/src/widget/button.rb +33 -0
  56. data/src/widget/checkbox.rb +47 -0
  57. data/src/widget/col.rb +30 -0
  58. data/src/widget/image.rb +106 -0
  59. data/src/widget/inline.rb +40 -0
  60. data/src/widget/input_number.rb +73 -0
  61. data/src/widget/inputbox.rb +85 -0
  62. data/src/widget/label.rb +33 -0
  63. data/src/widget/modal.rb +69 -0
  64. data/src/widget/row.rb +26 -0
  65. data/src/widget/selectbox.rb +100 -0
  66. data/src/widget/textarea.rb +54 -0
  67. data/src/xml/xml.rb +80 -0
  68. data/test/action_test.rb +34 -0
  69. data/test/box_test.rb +15 -0
  70. data/test/css_test.rb +39 -0
  71. data/test/editor/editor_base_test.rb +201 -0
  72. data/test/element_bounds_test.rb +77 -0
  73. data/test/element_box_test.rb +8 -0
  74. data/test/element_render_test.rb +124 -0
  75. data/test/element_style_test.rb +85 -0
  76. data/test/element_test.rb +10 -0
  77. data/test/emitter_test.rb +108 -0
  78. data/test/event_test.rb +19 -0
  79. data/test/focus_test.rb +37 -0
  80. data/test/geometry_test.rb +12 -0
  81. data/test/input_test.rb +47 -0
  82. data/test/key_test.rb +14 -0
  83. data/test/log_test.rb +21 -0
  84. data/test/node_test.rb +105 -0
  85. data/test/performance/performance1.rb +48 -0
  86. data/test/renderer_test.rb +74 -0
  87. data/test/renderer_test_rect.rb +4 -0
  88. data/test/screen_test.rb +58 -0
  89. data/test/style_test.rb +18 -0
  90. data/test/termgui_test.rb +10 -0
  91. data/test/test_all.rb +30 -0
  92. data/test/util_hash_object_test.rb +93 -0
  93. data/test/util_test.rb +26 -0
  94. data/test/widget/checkbox_test.rb +99 -0
  95. data/test/widget/col_test.rb +87 -0
  96. data/test/widget/inline_test.rb +40 -0
  97. data/test/widget/label_test.rb +94 -0
  98. data/test/widget/row_test.rb +40 -0
  99. data/test/wrap_test.rb +11 -0
  100. data/test/xml_test.rb +77 -0
  101. metadata +148 -0
@@ -0,0 +1,94 @@
1
+ require 'test/unit'
2
+ include Test::Unit::Assertions
3
+ require_relative '../../src/screen'
4
+ require_relative '../../src/style'
5
+ require_relative '../../src/widget/label'
6
+
7
+ class LabelTest < Test::Unit::TestCase
8
+ def test_size_autoadjust
9
+ screen = Screen.new_for_testing(width: 30, height: 10)
10
+ label = Label.new(text: 'hello world', x: 12, y: 3, parent: screen)
11
+ label.style.border = Border.new
12
+ screen.clear
13
+ screen.render
14
+ # label.render screen
15
+ # expected = ' \n' \
16
+ # ' \n' \
17
+ # ' ┌───────────┐ \n' \
18
+ # ' │hello world│ \n' \
19
+ # ' └───────────┘ \n' \
20
+ # ' \n' \
21
+ # ' \n' \
22
+ # ' \n' \
23
+ # ' \n' \
24
+ # ' \n'
25
+ assert_equal ' \n' \
26
+ ' \n' \
27
+ ' \n' \
28
+ ' ┌───────────┐ \n' \
29
+ ' │hello world│ \n' \
30
+ ' └───────────┘ \n' \
31
+ ' \n' \
32
+ ' \n' \
33
+ ' \n' \
34
+ ' \n', screen.print
35
+
36
+ label2 = Label.new(
37
+ text: 'hello longer world', x: 3, y: 5, width: 10,
38
+ style: Style.new(bg: 'white', fg: 'blue', wrap: true, border: Border.new)
39
+ )
40
+ label2.style.wrap = true
41
+ label2.style.border = Border.new
42
+ screen.clear
43
+ label2.render screen
44
+ # expected = '' \
45
+ # ' \n' \
46
+ # ' \n' \
47
+ # ' \n' \
48
+ # ' \n' \
49
+ # ' ┌──────────┐ \n' \
50
+ # ' │hello │ \n' \
51
+ # ' │longer │ \n' \
52
+ # ' │world │ \n' \
53
+ # ' └──────────┘ \n' \
54
+ # ' \n'
55
+ assert_equal ' \n' \
56
+ ' \n' \
57
+ ' \n' \
58
+ ' \n' \
59
+ ' \n' \
60
+ ' ┌──────────┐ \n' \
61
+ ' │hello │ \n' \
62
+ ' │longer │ \n' \
63
+ ' │world │ \n' \
64
+ ' └──────────┘ \n', screen.print
65
+
66
+ screen.clear
67
+ screen.append_child(label)
68
+ screen.append_child(label2)
69
+ label2.style.border = Border.new(style: :double)
70
+ screen.render
71
+
72
+ # expected = '' \
73
+ # ' \n' \
74
+ # ' \n' \
75
+ # ' ┌───────────┐ \n' \
76
+ # ' │hello world│ \n' \
77
+ # ' ╔══════════╗─────────┘ \n' \
78
+ # ' ║hello ║ \n' \
79
+ # ' ║longer ║ \n' \
80
+ # ' ║world ║ \n' \
81
+ # ' ╚══════════╝ \n' \
82
+ # ' \n'
83
+ assert_equal ' \n' \
84
+ ' \n' \
85
+ ' \n' \
86
+ ' ┌───────────┐ \n' \
87
+ ' │hello world│ \n' \
88
+ ' ╔══════════╗─────────┘ \n' \
89
+ ' ║hello ║ \n' \
90
+ ' ║longer ║ \n' \
91
+ ' ║world ║ \n' \
92
+ ' ╚══════════╝ \n', screen.print
93
+ end
94
+ end
@@ -0,0 +1,40 @@
1
+ require 'test/unit'
2
+ include Test::Unit::Assertions
3
+ require_relative '../../src/screen'
4
+ require_relative '../../src/widget/label'
5
+ require_relative '../../src/widget/row'
6
+ require_relative '../../src/widget/button'
7
+
8
+ class RowTest < Test::Unit::TestCase
9
+ def test_simple
10
+ screen = Screen.new_for_testing(width: 20, height: 3)
11
+ l1 = Label.new(text: 'label1')
12
+ l2 = Label.new(text: 'label2')
13
+ l3 = Label.new(text: 'label3')
14
+ Row.new(children: [l1, l2, l3], y: 1, parent: screen)
15
+ screen.clear
16
+ screen.render
17
+ assert_equal '' \
18
+ ' \n' \
19
+ 'label1label2label3 \n' \
20
+ ' \n' \
21
+ '', screen.print
22
+ end
23
+
24
+ def test_element_border
25
+ screen = Screen.new_for_testing(width: 40, height: 5)
26
+ l1 = Button.new(text: 'label1')
27
+ l2 = Button.new(text: 'label2')
28
+ l3 = Button.new(text: 'label3')
29
+ Row.new(children: [l1, l2, l3], y: 2, x: 2).append_to(screen)
30
+ screen.clear
31
+ screen.render
32
+ assert_equal('' \
33
+ ' \n' \
34
+ ' \n' \
35
+ ' ┌──────┐┌──────┐┌──────┐ \n' \
36
+ ' │label1││label2││label3│ \n' \
37
+ ' └──────┘└──────┘└──────┘ \n' \
38
+ '', screen.print)
39
+ end
40
+ end
data/test/wrap_test.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'test/unit'
2
+ include Test::Unit::Assertions
3
+ require_relative '../src/util/wrap'
4
+
5
+ class WrapTest < Test::Unit::TestCase
6
+ def test_simple
7
+ w = Wrapper.new('some long long long tyext text', 13)
8
+ assert_equal "some long\nlong long\ntyext text\n", w.wrap
9
+ assert_equal "some long\nlong long\ntyext text\n", w.fit
10
+ end
11
+ end
data/test/xml_test.rb ADDED
@@ -0,0 +1,77 @@
1
+ # require 'test/unit'
2
+ # include Test::Unit::Assertions
3
+ # require_relative '../src/xml/xml'
4
+
5
+ # class XmlTest < Test::Unit::TestCase
6
+ # def test_render_xml
7
+ # aaaa = 0
8
+ # xml = '
9
+ # <element>
10
+ # <button action="proc { aaaa=33}" style="{bg: :yellow}" x="11" y="5" height="3" width="12">hello</button>
11
+ # <label x="12" y="3" height="3" width="12">hehhe</label>
12
+ # </element>
13
+ # '
14
+ # s = Screen.new_for_testing(width: 33, height: 12)
15
+ # render_xml(xml: xml, parent: s, binding: binding)
16
+ # s.render
17
+
18
+ # assert_equal ' \n' \
19
+ # ' \n' \
20
+ # ' \n' \
21
+ # ' hehhe \n' \
22
+ # ' ┌─────┐ \n' \
23
+ # ' │hello│ \n' \
24
+ # ' └─────┘ \n' \
25
+ # ' \n' \
26
+ # ' \n' \
27
+ # ' \n' \
28
+ # ' \n' \
29
+ # ' \n', s.renderer.print
30
+
31
+ # s.query_by_name('button')[0].set_attribute('focused', true)
32
+ # s.set_timeout do
33
+ # assert_equal 0, aaaa
34
+ # s.event.handle_key(KeyEvent.new('enter'))
35
+ # s.destroy
36
+ # end
37
+ # s.start
38
+ # assert_equal 33, aaaa
39
+ # end
40
+
41
+ # def test_render_erb
42
+ # aaaa = 0
43
+ # s = Screen.new_for_testing(width: 33, height: 13)
44
+ # erb = '
45
+ # <element width="0.99" height="0.99" x="2" y="2">
46
+ # <% list.each_with_index {|t, i| %>
47
+ # <button action="proc { aaaa=33}" y="<%= i*3%>">hello <%= t %></button>
48
+ # <% } %>
49
+ # </element>
50
+ # '
51
+ # list = %w[sdf fffff sdf]
52
+ # render_erb(template: erb, parent: s, binding: binding, erb_binding: binding)
53
+ # s.query_by_name('button')[0].set_attribute('focused', true)
54
+ # s.set_timeout do
55
+ # assert_equal 0, aaaa
56
+ # s.event.handle_key(KeyEvent.new('enter'))
57
+ # s.destroy
58
+ # end
59
+ # s.render
60
+ # assert_equal ' \n' \
61
+ # ' ┌─────────┐ \n' \
62
+ # ' │hello sdf│ \n' \
63
+ # ' └─────────┘ \n' \
64
+ # ' ┌───────────┐ \n' \
65
+ # ' │hello fffff│ \n' \
66
+ # ' └───────────┘ \n' \
67
+ # ' ┌─────────┐ \n' \
68
+ # ' │hello sdf│ \n' \
69
+ # ' └─────────┘ \n' \
70
+ # ' \n' \
71
+ # ' \n' \
72
+ # ' \n', s.print
73
+ # # s.renderer.print_dev_stdout
74
+ # s.start
75
+ # assert_equal 33, aaaa
76
+ # end
77
+ # end
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: termgui
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Sebastián Gurin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-02-10 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: "\n * Repository: https://github.com/cancerberoSgx/termgui\n\n * Pure
14
+ Ruby library for creating desktop-like interfaces in the command line.\n\n * Flexible
15
+ and easy to use utilities for focus/actions/scroll/events/cursor.\n\n * Support
16
+ high level APIs similar to HTML DOM APIs like layouts, styles, box-model, cascade
17
+ styles, XML/ERB, boxes, fonts, images, colors, easing,\n\n * Low level utilities
18
+ can be used independently without bloating the performance\n\n * Event loop supporting
19
+ set_timeout, wait_for, set_interval\n\n * Many high level widgets, utilities implemented
20
+ expected in GUIs.\n\n * WIP (my first Ruby project)\n "
21
+ email: sebastigurin@gmail.com
22
+ executables: []
23
+ extensions: []
24
+ extra_rdoc_files: []
25
+ files:
26
+ - Gemfile
27
+ - README.md
28
+ - lib/termgui.rb
29
+ - src/action.rb
30
+ - src/box.rb
31
+ - src/color.rb
32
+ - src/cursor.rb
33
+ - src/editor/editor_base.rb
34
+ - src/editor/editor_base_handlers.rb
35
+ - src/element.rb
36
+ - src/element_bounds.rb
37
+ - src/element_box.rb
38
+ - src/element_render.rb
39
+ - src/element_style.rb
40
+ - src/emitter.rb
41
+ - src/emitter_state.rb
42
+ - src/enterable.rb
43
+ - src/event.rb
44
+ - src/focus.rb
45
+ - src/geometry.rb
46
+ - src/image.rb
47
+ - src/input.rb
48
+ - src/input_grab.rb
49
+ - src/input_time.rb
50
+ - src/key.rb
51
+ - src/log.rb
52
+ - src/node.rb
53
+ - src/node_attributes.rb
54
+ - src/node_visit.rb
55
+ - src/renderer.rb
56
+ - src/renderer_cursor.rb
57
+ - src/renderer_draw.rb
58
+ - src/renderer_image.rb
59
+ - src/renderer_print.rb
60
+ - src/screen.rb
61
+ - src/screen_element.rb
62
+ - src/screen_input.rb
63
+ - src/screen_renderer.rb
64
+ - src/style.rb
65
+ - src/tco/colouring.rb
66
+ - src/tco/config.rb
67
+ - src/tco/palette.rb
68
+ - src/tco/tco_termgui.rb
69
+ - src/termgui.rb
70
+ - src/util.rb
71
+ - src/util/css.rb
72
+ - src/util/css_query.rb
73
+ - src/util/easing.rb
74
+ - src/util/hash_object.rb
75
+ - src/util/imagemagick.rb
76
+ - src/util/justify.rb
77
+ - src/util/unicode-categories.rb
78
+ - src/util/wrap.rb
79
+ - src/widget/button.rb
80
+ - src/widget/checkbox.rb
81
+ - src/widget/col.rb
82
+ - src/widget/image.rb
83
+ - src/widget/inline.rb
84
+ - src/widget/input_number.rb
85
+ - src/widget/inputbox.rb
86
+ - src/widget/label.rb
87
+ - src/widget/modal.rb
88
+ - src/widget/row.rb
89
+ - src/widget/selectbox.rb
90
+ - src/widget/textarea.rb
91
+ - src/xml/xml.rb
92
+ - test/action_test.rb
93
+ - test/box_test.rb
94
+ - test/css_test.rb
95
+ - test/editor/editor_base_test.rb
96
+ - test/element_bounds_test.rb
97
+ - test/element_box_test.rb
98
+ - test/element_render_test.rb
99
+ - test/element_style_test.rb
100
+ - test/element_test.rb
101
+ - test/emitter_test.rb
102
+ - test/event_test.rb
103
+ - test/focus_test.rb
104
+ - test/geometry_test.rb
105
+ - test/input_test.rb
106
+ - test/key_test.rb
107
+ - test/log_test.rb
108
+ - test/node_test.rb
109
+ - test/performance/performance1.rb
110
+ - test/renderer_test.rb
111
+ - test/renderer_test_rect.rb
112
+ - test/screen_test.rb
113
+ - test/style_test.rb
114
+ - test/termgui_test.rb
115
+ - test/test_all.rb
116
+ - test/util_hash_object_test.rb
117
+ - test/util_test.rb
118
+ - test/widget/checkbox_test.rb
119
+ - test/widget/col_test.rb
120
+ - test/widget/inline_test.rb
121
+ - test/widget/label_test.rb
122
+ - test/widget/row_test.rb
123
+ - test/wrap_test.rb
124
+ - test/xml_test.rb
125
+ homepage: https://rubygems.org/gems/termgui
126
+ licenses:
127
+ - MIT
128
+ metadata: {}
129
+ post_install_message:
130
+ rdoc_options: []
131
+ require_paths:
132
+ - lib
133
+ required_ruby_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ required_rubygems_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubygems_version: 3.0.3
145
+ signing_key:
146
+ specification_version: 4
147
+ summary: Pure Ruby library for building amazing interactive command line interfaces
148
+ test_files: []