termgui 0.0.4 → 0.0.5
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.
- checksums.yaml +4 -4
- data/lib/termgui.rb +1 -1
- metadata +40 -107
- data/Gemfile +0 -14
- data/README.md +0 -321
- data/src/action.rb +0 -58
- data/src/box.rb +0 -90
- data/src/color.rb +0 -174
- data/src/cursor.rb +0 -69
- data/src/editor/editor_base.rb +0 -152
- data/src/editor/editor_base_handlers.rb +0 -116
- data/src/element.rb +0 -61
- data/src/element_bounds.rb +0 -111
- data/src/element_box.rb +0 -64
- data/src/element_render.rb +0 -102
- data/src/element_style.rb +0 -51
- data/src/emitter.rb +0 -102
- data/src/emitter_state.rb +0 -19
- data/src/enterable.rb +0 -93
- data/src/event.rb +0 -92
- data/src/focus.rb +0 -102
- data/src/geometry.rb +0 -53
- data/src/image.rb +0 -60
- data/src/input.rb +0 -85
- data/src/input_grab.rb +0 -17
- data/src/input_time.rb +0 -97
- data/src/key.rb +0 -114
- data/src/log.rb +0 -24
- data/src/node.rb +0 -117
- data/src/node_attributes.rb +0 -27
- data/src/node_visit.rb +0 -52
- data/src/renderer.rb +0 -119
- data/src/renderer_cursor.rb +0 -18
- data/src/renderer_draw.rb +0 -28
- data/src/renderer_image.rb +0 -31
- data/src/renderer_print.rb +0 -40
- data/src/screen.rb +0 -96
- data/src/screen_element.rb +0 -59
- data/src/screen_input.rb +0 -43
- data/src/screen_renderer.rb +0 -53
- data/src/style.rb +0 -149
- data/src/tco/colouring.rb +0 -248
- data/src/tco/config.rb +0 -57
- data/src/tco/palette.rb +0 -603
- data/src/tco/tco_termgui.rb +0 -30
- data/src/termgui.rb +0 -29
- data/src/util.rb +0 -110
- data/src/util/css.rb +0 -98
- data/src/util/css_query.rb +0 -23
- data/src/util/easing.rb +0 -364
- data/src/util/hash_object.rb +0 -131
- data/src/util/imagemagick.rb +0 -27
- data/src/util/justify.rb +0 -20
- data/src/util/unicode-categories.rb +0 -572
- data/src/util/wrap.rb +0 -102
- data/src/widget/button.rb +0 -33
- data/src/widget/checkbox.rb +0 -47
- data/src/widget/col.rb +0 -30
- data/src/widget/image.rb +0 -106
- data/src/widget/inline.rb +0 -40
- data/src/widget/input_number.rb +0 -73
- data/src/widget/inputbox.rb +0 -85
- data/src/widget/label.rb +0 -33
- data/src/widget/modal.rb +0 -69
- data/src/widget/row.rb +0 -26
- data/src/widget/selectbox.rb +0 -100
- data/src/widget/textarea.rb +0 -54
- data/src/xml/xml.rb +0 -80
- data/test/action_test.rb +0 -34
- data/test/box_test.rb +0 -15
- data/test/css_test.rb +0 -39
- data/test/editor/editor_base_test.rb +0 -201
- data/test/element_bounds_test.rb +0 -77
- data/test/element_box_test.rb +0 -8
- data/test/element_render_test.rb +0 -124
- data/test/element_style_test.rb +0 -85
- data/test/element_test.rb +0 -10
- data/test/emitter_test.rb +0 -108
- data/test/event_test.rb +0 -19
- data/test/focus_test.rb +0 -37
- data/test/geometry_test.rb +0 -12
- data/test/input_test.rb +0 -47
- data/test/key_test.rb +0 -14
- data/test/log_test.rb +0 -21
- data/test/node_test.rb +0 -105
- data/test/performance/performance1.rb +0 -48
- data/test/renderer_test.rb +0 -74
- data/test/renderer_test_rect.rb +0 -4
- data/test/screen_test.rb +0 -58
- data/test/style_test.rb +0 -18
- data/test/termgui_test.rb +0 -10
- data/test/test_all.rb +0 -30
- data/test/util_hash_object_test.rb +0 -93
- data/test/util_test.rb +0 -26
- data/test/widget/checkbox_test.rb +0 -99
- data/test/widget/col_test.rb +0 -87
- data/test/widget/inline_test.rb +0 -40
- data/test/widget/label_test.rb +0 -94
- data/test/widget/row_test.rb +0 -40
- data/test/wrap_test.rb +0 -11
- data/test/xml_test.rb +0 -77
data/src/geometry.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
module TermGui
|
2
|
-
# represents a scroll viewport offset
|
3
|
-
class Offset
|
4
|
-
attr_accessor :left, :top
|
5
|
-
|
6
|
-
def initialize(left: 0, top: 0)
|
7
|
-
@left = left
|
8
|
-
@top = top
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
# Represents a rectangle in the form of {top, left, bottom, top}
|
13
|
-
class Bounds < Offset
|
14
|
-
attr_accessor :right, :bottom
|
15
|
-
|
16
|
-
def initialize(left: 0, right: 0, top: 0, bottom: 0)
|
17
|
-
super(left: left, top: top)
|
18
|
-
@right = right
|
19
|
-
@bottom = bottom
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.from_hash(hash)
|
23
|
-
merge_hash_into_object hash, Bounds.new
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class Point
|
28
|
-
attr_accessor :x, :y
|
29
|
-
def initialize(x: 0, y: 0)
|
30
|
-
@x = x
|
31
|
-
@y = y
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
class Rectangle < Point
|
36
|
-
attr_accessor :width, :height
|
37
|
-
|
38
|
-
def initialize(x: 0, y: 0, width: 0, height: 0)
|
39
|
-
super(x: x, y: y)
|
40
|
-
@width = width
|
41
|
-
@height = height
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.from_hash(hash)
|
45
|
-
merge_hash_into_object hash, Rectangle.new
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
Offset = TermGui::Offset
|
51
|
-
Bounds = TermGui::Bounds
|
52
|
-
Point = TermGui::Point
|
53
|
-
Rectangle = TermGui::Rectangle
|
data/src/image.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'chunky_png'
|
2
|
-
require 'fileutils'
|
3
|
-
require_relative 'util/imagemagick'
|
4
|
-
# small facade for image decoding and processing
|
5
|
-
# Right now only supports reading png thanks to chunky_png
|
6
|
-
module TermGui
|
7
|
-
class Image
|
8
|
-
attr_reader :path
|
9
|
-
|
10
|
-
def initialize(image = nil, path = image.is_a?(String) ? image : 'unknown.png')
|
11
|
-
if image.is_a?(String)
|
12
|
-
if File.extname(image).capitalize != '.png'
|
13
|
-
if !image_magick_available
|
14
|
-
throw 'Cannot create image from non PNG file without imagemagick available'
|
15
|
-
else
|
16
|
-
image = convert(image)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
@image = image.is_a?(String) ? ChunkyPNG::Image.from_file(image) : image
|
21
|
-
@path = path
|
22
|
-
end
|
23
|
-
|
24
|
-
def rgb(x = 0, y = 0, transparent_color = nil)
|
25
|
-
p = @image[x, y]
|
26
|
-
if transparent_color
|
27
|
-
bg = ChunkyPNG::Color.rgb(transparent_color[0], transparent_color[1], transparent_color[2])
|
28
|
-
p = ChunkyPNG::Color. interpolate_quick(p, bg, ChunkyPNG::Color.a(p))
|
29
|
-
end
|
30
|
-
[ChunkyPNG::Color.r(p), ChunkyPNG::Color.g(p), ChunkyPNG::Color.b(p)]
|
31
|
-
end
|
32
|
-
|
33
|
-
def rgba(x = 0, y = 0)
|
34
|
-
p = @image[x, y]
|
35
|
-
[ChunkyPNG::Color.r(p), ChunkyPNG::Color.g(p), ChunkyPNG::Color.b(p), ChunkyPNG::Color.a(p)]
|
36
|
-
end
|
37
|
-
|
38
|
-
def width
|
39
|
-
@image.width
|
40
|
-
end
|
41
|
-
|
42
|
-
def height
|
43
|
-
@image.height
|
44
|
-
end
|
45
|
-
|
46
|
-
# returns a new image which is the result of scaling this image to given dimentions
|
47
|
-
def scale(width: @image.width, height: @image.height,
|
48
|
-
algorithm: 'bilineal') # bilinear, nearest_neighbor
|
49
|
-
if algorithm == 'nearest_neighbor'
|
50
|
-
Image.new(@image.resample_nearest_neighbor(width, height), path)
|
51
|
-
else
|
52
|
-
Image.new(@image.resample_bilinear(width, height), path)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def crop(x: 0, y: 0, width: @image.width, height: @image.height)
|
57
|
-
Image.new(@image.crop(x, y, width, height), path)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
data/src/input.rb
DELETED
@@ -1,85 +0,0 @@
|
|
1
|
-
require_relative 'emitter'
|
2
|
-
require_relative 'log'
|
3
|
-
require_relative 'event'
|
4
|
-
require_relative 'input_time'
|
5
|
-
require_relative 'input_grab'
|
6
|
-
require 'io/console'
|
7
|
-
require 'io/wait'
|
8
|
-
require_relative 'key'
|
9
|
-
|
10
|
-
module TermGui
|
11
|
-
# responsible of listening stdin and event loop
|
12
|
-
class Input < Emitter
|
13
|
-
include InputTime
|
14
|
-
include InputGrab
|
15
|
-
|
16
|
-
attr_reader :interval, :stdin, :stopped
|
17
|
-
|
18
|
-
def initialize(stdin = $stdin, interval = 0.0000001)
|
19
|
-
super
|
20
|
-
@interval = interval
|
21
|
-
@stdin = stdin
|
22
|
-
@stopped = true
|
23
|
-
install(:key)
|
24
|
-
end
|
25
|
-
|
26
|
-
def stop
|
27
|
-
@stopped = true
|
28
|
-
end
|
29
|
-
|
30
|
-
# starts listening for user input. Implemented like an event loop reading from @input_stream each @interval
|
31
|
-
def start
|
32
|
-
return self unless @stopped
|
33
|
-
|
34
|
-
@stdin.raw do |io|
|
35
|
-
@io = io
|
36
|
-
@stopped = false
|
37
|
-
loop do
|
38
|
-
tick
|
39
|
-
break if @stopped
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
# Once it `start`s this method is called on the loop to read input. Calls update_status which update timers (timeout - interval).
|
45
|
-
# Could be useful for applications with their own event loops or time long blocking tasks to notify input/timeouts
|
46
|
-
def tick
|
47
|
-
char = get_char_or_sequence
|
48
|
-
if char
|
49
|
-
key = char.inspect
|
50
|
-
key = key[1..key.length - 2]
|
51
|
-
key = char_to_name(key) || char
|
52
|
-
emit_key char, key
|
53
|
-
else
|
54
|
-
sleep @interval
|
55
|
-
end
|
56
|
-
update_status
|
57
|
-
end
|
58
|
-
|
59
|
-
def emit_key(char, key = char)
|
60
|
-
event = KeyEvent.new key, char
|
61
|
-
emit 'key', event
|
62
|
-
end
|
63
|
-
|
64
|
-
def write(s)
|
65
|
-
@stdin.write s
|
66
|
-
end
|
67
|
-
|
68
|
-
protected
|
69
|
-
|
70
|
-
def get_char_or_sequence(io = @io)
|
71
|
-
if io.ready?
|
72
|
-
result = io.sysread(1)
|
73
|
-
while (CSI.start_with?(result) ||
|
74
|
-
(result.start_with?(CSI) &&
|
75
|
-
!result.codepoints[-1].between?(64, 126))) &&
|
76
|
-
(next_char = get_char_or_sequence(io))
|
77
|
-
result << next_char
|
78
|
-
end
|
79
|
-
result
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
Input = TermGui::Input
|
data/src/input_grab.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require_relative 'util'
|
2
|
-
|
3
|
-
# Add Input support for grab, this is stop notifying listeners and notify others. Based on EmitterState
|
4
|
-
module InputGrab
|
5
|
-
def grab(block = nil, &b)
|
6
|
-
the_block = block == nil ? b : block
|
7
|
-
throw 'Block not given' unless the_block
|
8
|
-
emitter_save('grab')
|
9
|
-
emitter_reset
|
10
|
-
install(:key)
|
11
|
-
subscribe(:key, the_block)
|
12
|
-
end
|
13
|
-
|
14
|
-
def ungrab
|
15
|
-
emitter_load('grab')
|
16
|
-
end
|
17
|
-
end
|
data/src/input_time.rb
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
require_relative 'util'
|
2
|
-
|
3
|
-
# Add Input support for set_timeout and set_interval based on input event loop.
|
4
|
-
# Assumes `@time = Time.now` is assigned on each iteration.
|
5
|
-
module InputTime
|
6
|
-
def initialize(*_args)
|
7
|
-
@time = Time.now
|
8
|
-
@timeout_listeners = []
|
9
|
-
@interval_listeners = []
|
10
|
-
@wait_timeout = 5
|
11
|
-
@wait_interval = 0.1
|
12
|
-
end
|
13
|
-
|
14
|
-
# register a timeout listener that will be called in given seconds (aprox).
|
15
|
-
# Returns a listener object that can be used with clear_timeout to remove the listener
|
16
|
-
def set_timeout(seconds = @interval, block = nil, &proc_block)
|
17
|
-
the_block = block == nil ? proc_block : block
|
18
|
-
throw 'No block provided' if the_block == nil
|
19
|
-
listener = { seconds: seconds, block: the_block, target: @time + seconds }
|
20
|
-
@timeout_listeners.push listener
|
21
|
-
listener
|
22
|
-
end
|
23
|
-
|
24
|
-
# clears a previoulsy registered timeout listener. Use the same block (or what set_timeout returned)
|
25
|
-
def clear_timeout(listener)
|
26
|
-
@timeout_listeners.delete listener
|
27
|
-
end
|
28
|
-
|
29
|
-
# similar to HTML window.setInterval
|
30
|
-
def set_interval(seconds = @interval, block = nil, &proc_block)
|
31
|
-
seconds = seconds == nil ? @interval : seconds
|
32
|
-
the_block = block == nil ? proc_block : block
|
33
|
-
throw 'No block provided' if the_block == nil
|
34
|
-
listener = { seconds: seconds || @interval, block: the_block, next: @time + seconds }
|
35
|
-
@interval_listeners.push listener
|
36
|
-
listener
|
37
|
-
end
|
38
|
-
|
39
|
-
# clears a previoulsy registered interval listener. Use the same block (or what set_interval returned)
|
40
|
-
def clear_interval(listener)
|
41
|
-
@interval_listeners.delete listener
|
42
|
-
end
|
43
|
-
|
44
|
-
def wait_for(predicate, timeout = @wait_timeout, interval = @wait_interval, &block)
|
45
|
-
throw 'No block provided' unless block
|
46
|
-
interval_listener = nil
|
47
|
-
timeout_listener = set_timeout(timeout) do
|
48
|
-
clear_interval interval_listener
|
49
|
-
block.call true
|
50
|
-
end
|
51
|
-
interval_listener = set_interval(interval) do
|
52
|
-
if predicate.call
|
53
|
-
clear_interval interval_listener
|
54
|
-
clear_timeout timeout_listener
|
55
|
-
block.call false
|
56
|
-
end
|
57
|
-
end
|
58
|
-
[timeout_listener, interval_listener]
|
59
|
-
end
|
60
|
-
|
61
|
-
def clear_wait_for(listeners)
|
62
|
-
clear_interval listeners[1]
|
63
|
-
clear_timeout listeners[0]
|
64
|
-
end
|
65
|
-
|
66
|
-
def stop
|
67
|
-
super
|
68
|
-
@timeout_listeners = []
|
69
|
-
@interval_listeners = []
|
70
|
-
end
|
71
|
-
|
72
|
-
protected
|
73
|
-
|
74
|
-
def update_status
|
75
|
-
@time = Time.now
|
76
|
-
dispatch_set_interval
|
77
|
-
dispatch_set_timeout
|
78
|
-
end
|
79
|
-
|
80
|
-
def dispatch_set_timeout
|
81
|
-
@timeout_listeners.each do |listener|
|
82
|
-
if listener[:target] < @time
|
83
|
-
listener[:block].call
|
84
|
-
@timeout_listeners.delete listener
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def dispatch_set_interval
|
90
|
-
@interval_listeners.each do |listener|
|
91
|
-
if listener[:next] < @time
|
92
|
-
listener[:block].call
|
93
|
-
listener[:next] = @time + listener[:seconds]
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
data/src/key.rb
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
# maps charsequences like '\n', '\e[1;7C' to objects like {name: 'enter'}, {name: 'right', control: true, meta: true}
|
2
|
-
# TODO: support meta-d ('\xC3': 'C-', '\xB0': 'C-') which is defined by two characters
|
3
|
-
|
4
|
-
require_relative 'log'
|
5
|
-
|
6
|
-
CSI = "\e[".freeze
|
7
|
-
|
8
|
-
CHAR_NAMES = {
|
9
|
-
|
10
|
-
'\e[A': 'up',
|
11
|
-
'\e[1;3A': 'M-up',
|
12
|
-
'e[1;2A': 'S-up',
|
13
|
-
'\e[1;6A': 'S-C-up',
|
14
|
-
'\e[1;7A': 'M-C-up',
|
15
|
-
|
16
|
-
'\e[B': 'down',
|
17
|
-
'\e[1;3B': 'M-down',
|
18
|
-
'e[1;2B': 'S-down',
|
19
|
-
'\e[1;6B': 'S-C-down',
|
20
|
-
'\e[1;7B': 'M-C-down',
|
21
|
-
|
22
|
-
'\e[D': 'left',
|
23
|
-
'\eb': 'M-left',
|
24
|
-
'e[1;2D': 'S-left',
|
25
|
-
'\e[1;6D': 'S-C-left',
|
26
|
-
'\e[1;7D': 'M-C-left',
|
27
|
-
|
28
|
-
'\e[C': 'right',
|
29
|
-
'\ef': 'M-right',
|
30
|
-
'e[1;2C': 'S-right',
|
31
|
-
'\e[1;6C': 'S-C-right',
|
32
|
-
'\e[1;7C': 'M-C-right',
|
33
|
-
|
34
|
-
'\e': 'escape',
|
35
|
-
'\r': 'enter',
|
36
|
-
'\t': 'tab',
|
37
|
-
'\e[Z': 'S-tab',
|
38
|
-
|
39
|
-
'\e[3~': 'delete',
|
40
|
-
"\u232B": 'delete',
|
41
|
-
|
42
|
-
'\x7F': 'backspace',
|
43
|
-
' ': 'space',
|
44
|
-
|
45
|
-
# control-x
|
46
|
-
'\x01': 'C-a',
|
47
|
-
'\x02': 'C-b',
|
48
|
-
'\x03': 'C-c',
|
49
|
-
'\x04': 'C-d',
|
50
|
-
'\x05': 'C-e',
|
51
|
-
'\x06': 'C-f',
|
52
|
-
'\a': 'C-g',
|
53
|
-
'\b': 'C-h',
|
54
|
-
# '\t': "C-i",
|
55
|
-
'\n': 'C-j',
|
56
|
-
'\v': 'C-k',
|
57
|
-
'\f': 'C-l',
|
58
|
-
'\x0E': 'C-n',
|
59
|
-
'\x0F': 'C-o',
|
60
|
-
'\x10': 'C-p',
|
61
|
-
'\x11': 'C-q',
|
62
|
-
'\x12': 'C-r',
|
63
|
-
'\x13': 'C-s',
|
64
|
-
'\x14': 'C-t',
|
65
|
-
'\x15': 'C-u',
|
66
|
-
'\x16': 'C-v',
|
67
|
-
'\x18': 'C-x',
|
68
|
-
'\x19': 'C-y',
|
69
|
-
'\x1A': 'C-z'
|
70
|
-
}.freeze
|
71
|
-
|
72
|
-
def name_to_char(name)
|
73
|
-
char = CHAR_NAMES.keys.find { |c| CHAR_NAMES[c] == name }
|
74
|
-
char ? char.to_s : name
|
75
|
-
end
|
76
|
-
|
77
|
-
def char_to_name(ch)
|
78
|
-
CHAR_NAMES[:"#{ch}"]
|
79
|
-
end
|
80
|
-
|
81
|
-
ALPHANUMERICS =
|
82
|
-
('a'...'z').to_a
|
83
|
-
.concat(('A'..'Z').to_a)
|
84
|
-
.concat(('0'...'9').to_a)
|
85
|
-
.concat(%w[z Z 9])
|
86
|
-
.concat(',.-;:_ç´Ç¨+`*^{}[]¡\'¡¿?ªº\\!"·$%&/()=|@#¢∞¬÷“”'.split(''))
|
87
|
-
|
88
|
-
def alphanumeric?(c)
|
89
|
-
ALPHANUMERICS.include? c
|
90
|
-
end
|
91
|
-
|
92
|
-
NUMERICS = ['.'].concat(('0'...'9').to_a).push('9')
|
93
|
-
|
94
|
-
def numeric?(c)
|
95
|
-
NUMERICS.include? c
|
96
|
-
end
|
97
|
-
|
98
|
-
BRAILE = ['⠋', ',⠇', '⠉', '⠃', '⠙', '⢮', '⢯', '⢱', '⢲', '⢳', '⢴', '⢵', '⢶', '⢷', '⢸', '⢹', '⢺', '⢻', '⢼', '⢽', '⢾', '⠂', '⠃', '⠄', '⠅', '⠆', '⠇', '⠈', '⠉', '⠊', '⠋', '⠍', '⠎', '⠏', '⠐', '⠑', '⠒', '⠓', '⠕', '⠖', '⠗', '⠘', '⠙', '⠚', '⠛', '⠜', '⠝', '⠞', '⠟', '⠠', '⠡', '⠢', '⠣', '⠤', '⠥', '⠦', '⠧', '⠨', '⠩', '⠫', '⠬', '⠭', '⠮', '⠯', '⠰', '⠱', '⠲', '⠳', '⠴', '⠶', '⠷', '⠹', '⠺', '⠻', '⠼', '⠽', '⠾', '⠿', '⡀', '⡁', '⡂', '⡄', '⡅', '⡆', '⡇', '⡈', '⡉', '⡊', '⡋', '⡌', '⡍', '⡏', '⡐', '⡑', '⡒', '⡓', '⡔', '⡕', '⡖', '⡗', '⡘', '⡚', '⡛', '⡝', '⡞', '⡟', '⡠', '⡡', '⡣', '⡤', '⡥', '⡦', '⡧', '⡨', '⡩', '⡪', '⡫', '⡬', '⡭', '⡮', '⡯', '⡱', '⡲', '⡳', '⡴', '⡵', '⡶', '⡷', '⡸', '⡹', '⡺', '⡻', '⡼', '⡽', '⡾', '⡿', '⢀', '⢂', '⢃', '⢄', '⢅', '⢆', '⢇', '⢈', '⢉', '⢊', '⢋', '⢍', '⢎', '⢏', '⢐', '⢑', '⢒', '⢓', '⢔', '⢕', '⢖', '⢗', '⢘', '⢙', '⢚', '⢛', '⢜', '⢝', '⢞', '⢟', '⢠', '⢡', '⢣', '⢤', '⢥', '⢦', '⢧', '⢨', '⢩', '⢪', '⢫', '⢬', '⢭', '⢮', '⢯', '⢱', '⢲', '⢳', '⢴', '⢵', '⢶', '⢷', '⢸', '⢹', '⢺', '⢻', '⢼', '⢽', '⢾', '⢿', '⣀', '⣂', '⣃', '⣄', '⣅', '⣆', '⣇', '⣈', '⣉', '⣊', '⣋', '⣍', '⣎', '⣏', '⣐', '⣑', '⣓', '⣔', '⣕', '⣖', '⣗', '⣙', '⣚', '⣛', '⣜', '⣝', '⣞', '⣟', '⣠', '⣢', '⣣', '⣥', '⣦', '⣧', '⣨', '⣩', '⣪', '⣫', '⣬', '⣭', '⣮', '⣯', '⣱', '⣲', '⣳', '⣴', '⣵', '⣶', '⣷', '⣸', '⣹', '⣺', '⣻', '⣼', '⣽', '⣾', '⣿'].freeze
|
99
|
-
|
100
|
-
BRAILE_FILLED = ['⢮', '⢯', '⢱', '⢲', '⢳', '⢴', '⢵', '⢶', '⢷', '⢻', '⢼', '⢽', '⢾', '⠟', '⠮', '⠯', '⠳', '⠴', '⠶', '⠷', '⠹', '⠺', '⠻', '⠼', '⠽', '⠾', '⠿', '⡝', '⡞', '⡟', '⡪', '⡫', '⡬', '⡭', '⡮', '⡯', '⡱', '⡲', '⡳', '⡴', '⡵', '⡶', '⡷', '⡸', '⡹', '⡺', '⡻', '⡼', '⡽', '⡾', '⡿', '⢜', '⢝', '⢞', '⢟', '⢭', '⢮', '⢯', '⢱', '⢲', '⢳', '⢴', '⢵', '⢶', '⢷', '⢸', '⢹', '⢺', '⢻', '⢼', '⢽', '⢾', '⢿', '⣀', '⣂', '⣃', '⣄', '⣅', '⣆', '⣇', '⣈', '⣉', '⣊', '⣋', '⣍', '⣎', '⣏', '⣐', '⣑', '⣓', '⣔', '⣕', '⣖', '⣗', '⣙', '⣚', '⣛', '⣜', '⣝', '⣞', '⣟', '⣠', '⣢', '⣣', '⣥', '⣦', '⣧', '⣨', '⣩', '⣪', '⣫', '⣬', '⣭', '⣮', '⣯', '⣱', '⣲', '⣳', '⣴', '⣵', '⣶', '⣷', '⣸', '⣹', '⣺', '⣻', '⣼', '⣽', '⣾', '⣿'].freeze
|
101
|
-
|
102
|
-
BLOCKS = ['▀', '▁', '▂', '▃', '▄', '▅', '▆', '▇', '█', '▉', '▊', '▋', '▌', '▍', '▎', '▏', '▐', '░', '▒', '▓', '▔', '▕', '▖', '▗', '▘', '▙', '▚', '▛', '▜', '▝', '▞', '▟', '■', '□', '▢', '▣', '▤', '▥', '▦', '▧', '▨', '▩', '▪', '▫', '▬', '▭', '▮', '▯'].freeze
|
103
|
-
|
104
|
-
GEOMETRIC_SHAPES = ['■', '□', '▢', '▣', '▤', '▥', '▦', '▧', '▨', '▩', '▪', '▫', '▬', '▭', '▮', '▯', '▰', '▱', '▲', '△', '▴', '▵', '▶', '▷', '▸', '▹', '►', '▻', '▼', '▽', '▾', '▿', '◀', '◁', '◂', '◃', '◄', '◅', '◆', '◇', '◈', '◉', '◊', '○', '◌', '◍', '◎', '●', '◐', '◑', '◒', '◓', '◔', '◕', '◖', '◗', '◘', '◙', '◚', '◛', '◜', '◝', '◞', '◟', '◠', '◡', '◢', '◣', '◤', '◥', '◦', '◧', '◨', '◩', '◪', '◫', '◬', '◭', '◮', '◯', '◰', '◱', '◲', '◳', '◴', '◵', '◶', '◷', '◸', '◹', '◺', '◻', '◼', '◽', '◾', '◿'].freeze
|
105
|
-
|
106
|
-
KANGXI = ['⼁', '⼂', '⼃', '⼄', '⼅', '⼆', '⼇', '⼈', '⼉', '⼊', '⼋', '⼌', '⼍', '⼎', '⼏', '⼐', '⼑', '⼒', '⼓', '⼔', '⼕', '⼖', '⼗', '⼘', '⼙', '⼚', '⼛', '⼜', '⼝', '⼞', '⼟', '⼠', '⼡', '⼢', '⼣', '⼤', '⼥', '⼦', '⼧', '⼨', '⼩', '⼪', '⼫', '⼬', '⼭', '⼮', '⼯', '⼰', '⼱', '⼲', '⼳', '⼴', '⼵', '⼶', '⼷', '⼸', '⼹', '⼺', '⼻', '⼼', '⼽', '⼾', '⼿', '⽀', '⽁', '⽂', '⽃', '⽄', '⽅', '⽆', '⽇', '⽈', '⽉', '⽊', '⽋', '⽌', '⽍', '⽎', '⽏', '⽐', '⽑', '⽒', '⽓', '⽔', '⽕', '⽖', '⽗', '⽘', '⽙', '⽚', '⽛', '⽜', '⽝', '⽞', '⽟', '⽠', '⽡', '⽢', '⽣', '⽤', '⽥', '⽦', '⽧', '⽨', '⽩', '⽪', '⽫', '⽬', '⽭', '⽮', '⽯', '⽰', '⽱', '⽲', '⽳', '⽴', '⽵', '⽶', '⽷', '⽸', '⽹', '⽺', '⽻', '⽼', '⽽', '⽾', '⽿', '⾀', '⾁', '⾂', '⾃', '⾄', '⾅', '⾆', '⾇', '⾈', '⾉', '⾊', '⾋', '⾌', '⾍', '⾎', '⾏', '⾐', '⾑', '⾒', '⾓', '⾔', '⾕', '⾖', '⾗', '⾘', '⾙', '⾚', '⾛', '⾜', '⾝', '⾞', '⾟', '⾠', '⾡', '⾢', '⾣', '⾤', '⾥', '⾦', '⾧', '⾨', '⾩', '⾪', '⾫', '⾬', '⾭', '⾮', '⾯', '⾰', '⾱', '⾲', '⾳', '⾴', '⾵', '⾶', '⾷', '⾸', '⾹', '⾺', '⾻', '⾼', '⾽', '⾾', '⾿', '⿀', '⿁', '⿂', '⿃', '⿄', '⿅', '⿆', '⿇', '⿈', '⿉', '⿊', '⿋', '⿌', '⿍', '⿎', '⿏', '⿐', '⿑', '⿒', '⿓', '⿔', '⿕'].freeze
|
107
|
-
|
108
|
-
Yijing = ['䷀', '䷁', '䷂', '䷃', '䷄', '䷅', '䷆', '䷇', '䷈', '䷉', '䷊', '䷋', '䷌', '䷍', '䷎', '䷏', '䷐', '䷑', '䷒', '䷓', '䷔', '䷕', '䷖', '䷗', '䷘', '䷙', '䷚', '䷛', '䷜', '䷝', '䷞', '䷟', '䷠', '䷡', '䷢', '䷣', '䷤', '䷥', '䷦', '䷧', '䷨', '䷩', '䷪', '䷫', '䷬', '䷭', '䷮', '䷯', '䷰', '䷱', '䷲', '䷳', '䷴', '䷵', '䷶', '䷷', '䷸', '䷹', '䷺', '䷻', '䷼', '䷽', '䷾', '䷿'].freeze
|
109
|
-
|
110
|
-
SAURASHTRA = ['ꢂ', 'ꢃ', 'ꢄ', 'ꢅ', 'ꢆ', 'ꢇ', 'ꢈ', 'ꢉ', 'ꢊ', 'ꢋ', 'ꢌ', 'ꢍ', 'ꢎ', 'ꢏ', 'ꢐ', 'ꢑ', 'ꢒ', 'ꢓ', 'ꢔ', 'ꢕ', 'ꢖ', 'ꢗ', 'ꢘ', 'ꢙ', 'ꢚ', 'ꢛ', 'ꢜ', 'ꢝ', 'ꢞ', 'ꢟ', 'ꢠ', 'ꢡ', 'ꢢ', 'ꢣ', 'ꢤ', 'ꢥ', 'ꢦ', 'ꢧ', 'ꢨ', 'ꢩ', 'ꢪ', 'ꢫ', 'ꢬ', 'ꢭ', 'ꢮ', 'ꢯ', 'ꢰ', 'ꢱ', 'ꢲ', 'ꢳ', '꣎', '꣏', '꣐', '꣑', '꣒', '꣓', '꣔', '꣕', '꣖', '꣗', '꣘', '꣙'].freeze
|
111
|
-
|
112
|
-
LINEAR_B_IDEOGRAMS = %w[𐁜 𐁝 𐂀 𐂁 𐂂 𐂃 𐂄 𐂅 𐂆 𐂇 𐂈 𐂉 𐂊 𐂋 𐂌 𐂍 𐂎 𐂏 𐂐 𐂑 𐂒 𐂓 𐂔 𐂕 𐂖 𐂗 𐂘 𐂙 𐂚 𐂛 𐂜 𐂝 𐂞 𐂟 𐂠 𐂡 𐂢 𐂣 𐂤 𐂥 𐂦 𐂧 𐂨 𐂩 𐂪 𐂫 𐂬 𐂭 𐂮 𐂯 𐂰 𐂱 𐂲 𐂳 𐂴 𐂵 𐂶 𐂷 𐂸 𐂹 𐂺 𐂻 𐂼 𐂽 𐂾 𐂿 𐃀 𐃁 𐃂 𐃃 𐃄 𐃅 𐃆 𐃇 𐃈 𐃉 𐃊 𐃋 𐃌 𐃍 𐃎 𐃏 𐃐 𐃑 𐃒 𐃓 𐃔 𐃕 𐃖 𐃗 𐃘 𐃙 𐃚 𐃛 𐃜 𐃝 𐃞 𐃟 𐃠 𐃡 𐃢 𐃣 𐃤 𐃥 𐃦 𐃧 𐃨 𐃩 𐃪 𐃫 𐃬 𐃭 𐃮 𐃯 𐃰 𐃱 𐃲 𐃳 𐃴 𐃵 𐃶 𐃷 𐃸 𐃹 𐃺].freeze
|
113
|
-
|
114
|
-
CUNEIFORM = %w[𒀀 𒀁 𒀂 𒀃 𒀄 𒀅 𒀆 𒀇 𒀈 𒀉 𒀊 𒀋 𒀌 𒀍 𒀎 𒀏 𒀐 𒀑 𒀒 𒀓 𒀔 𒀕 𒀖 𒀗 𒀘 𒀙 𒀚 𒀛 𒀜 𒀝 𒀞 𒀟 𒀠 𒀡 𒀢 𒀣 𒀤 𒀥 𒀦 𒀧 𒀨 𒀩 𒀪 𒀫 𒀬 𒀭 𒀮 𒀯 𒀰 𒀱 𒀲 𒀳 𒀴 𒀵 𒀶 𒀷 𒀸 𒀹 𒀺 𒀻 𒀼 𒀽 𒀾 𒀿 𒁀 𒁁 𒁂 𒁃 𒁄 𒁅 𒁆 𒁇 𒁈 𒁉 𒁊 𒁋 𒁌 𒁍 𒁎 𒁏 𒁐 𒁑 𒁒 𒁓 𒁔 𒁕 𒁖 𒁗 𒁘 𒁙 𒁚 𒁛 𒁜 𒁝 𒁞 𒁟 𒁠 𒁡 𒁢 𒁣 𒁤 𒁥 𒁦 𒁧 𒁨 𒁩 𒁪 𒁫 𒁬 𒁭 𒁮 𒁯 𒁰 𒁱 𒁲 𒁳 𒁴 𒁵 𒁶 𒁷 𒁸 𒁹 𒁺 𒁻 𒁼 𒁽 𒁾 𒁿 𒂀 𒂁 𒂂 𒂃 𒂄 𒂅 𒂆 𒂇 𒂈 𒂉 𒂊 𒂋 𒂌 𒂍 𒂎 𒂏 𒂐 𒂑 𒂒 𒂓 𒂔 𒂕 𒂖 𒂗 𒂘 𒂙 𒂚 𒂛 𒂜 𒂝 𒂞 𒂟 𒂠 𒂡 𒂢 𒂣 𒂤 𒂥 𒂦 𒂧 𒂨 𒂩 𒂪 𒂫 𒂬 𒂭 𒂮 𒂯 𒂰 𒂱 𒂲 𒂳 𒂴 𒂵 𒂶 𒂷 𒂸 𒂹 𒂺 𒂻 𒂼 𒂽 𒂾 𒂿 𒃀 𒃁 𒃂 𒃃 𒃄 𒃅 𒃆 𒃇 𒃈 𒃉 𒃊 𒃋 𒃌 𒃍 𒃎 𒃏 𒃐 𒃑 𒃒 𒃓 𒃔 𒃕 𒃖 𒃗 𒃘 𒃙 𒃚 𒃛 𒃜 𒃝 𒃞 𒃟 𒃠 𒃡 𒃢 𒃣 𒃤 𒃥 𒃦 𒃧 𒃨 𒃩 𒃪 𒃫 𒃬 𒃭 𒃮 𒃯 𒃰 𒃱 𒃲 𒃳 𒃴 𒃵 𒃶 𒃷 𒃸 𒃹 𒃺 𒃻 𒃼 𒃽 𒃾 𒃿 𒄀 𒄁 𒄂 𒄃 𒄄 𒄅 𒄆 𒄇 𒄈 𒄉 𒄊 𒄋 𒄌 𒄍 𒄎 𒄏 𒄐 𒄑 𒄒 𒄓 𒄔 𒄕 𒄖 𒄗 𒄘 𒄙 𒄚 𒄛 𒄜 𒄝 𒄞 𒄟 𒄠 𒄡 𒄢 𒄣 𒄤 𒄥 𒄦 𒄧 𒄨 𒄩 𒄪 𒄫 𒄬 𒄭 𒄮 𒄯 𒄰 𒄱 𒄲 𒄳 𒄴 𒄵 𒄶 𒄷 𒄸 𒄹 𒄺 𒄻 𒄼 𒄽 𒄾 𒄿 𒅀 𒅁 𒅂 𒅃 𒅄 𒅅 𒅆 𒅇 𒅈 𒅉 𒅊 𒅋 𒅌 𒅍 𒅎 𒅏 𒅐 𒅑 𒅒 𒅓 𒅔 𒅕 𒅖 𒅗 𒅘 𒅙 𒅚 𒅛 𒅜 𒅝 𒅞 𒅟 𒅠 𒅡 𒅢 𒅣 𒅤 𒅥 𒅦 𒅧 𒅨 𒅩 𒅪 𒅫 𒅬 𒅭 𒅮 𒅯 𒅰 𒅱 𒅲 𒅳 𒅴 𒅵 𒅶 𒅷 𒅸 𒅹 𒅺 𒅻 𒅼 𒅽 𒅾 𒅿 𒆀 𒆁 𒆂 𒆃 𒆄 𒆅 𒆆 𒆇 𒆈 𒆉 𒆊 𒆋 𒆌 𒆍 𒆎 𒆏 𒆐 𒆑 𒆒 𒆓 𒆔 𒆕 𒆖 𒆗 𒆘 𒆙 𒆚 𒆛 𒆜 𒆝 𒆞 𒆟 𒆠 𒆡 𒆢 𒆣 𒆤 𒆥 𒆦 𒆧 𒆨 𒆩 𒆪 𒆫 𒆬 𒆭 𒆮 𒆯 𒆰 𒆱 𒆲 𒆳 𒆴 𒆵 𒆶 𒆷 𒆸 𒆹 𒆺 𒆻 𒆼 𒆽 𒆾 𒆿 𒇀 𒇁 𒇂 𒇃 𒇄 𒇅 𒇆 𒇇 𒇈 𒇉 𒇊 𒇋 𒇌 𒇍 𒇎 𒇏 𒇐 𒇑 𒇒 𒇓 𒇔 𒇕 𒇖 𒇗 𒇘 𒇙 𒇚 𒇛 𒇜 𒇝 𒇞 𒇟 𒇠 𒇡 𒇢 𒇣 𒇤 𒇥 𒇦 𒇧 𒇨 𒇩 𒇪 𒇫 𒇬 𒇭 𒇮 𒇯 𒇰 𒇱 𒇲 𒇳 𒇴 𒇵 𒇶 𒇷 𒇸 𒇹 𒇺 𒇻 𒇼 𒇽 𒇾 𒇿 𒈀 𒈁 𒈂 𒈃 𒈄 𒈅 𒈆 𒈇 𒈈 𒈉 𒈊 𒈋 𒈌 𒈍 𒈎 𒈏 𒈐 𒈑 𒈒 𒈓 𒈔 𒈕 𒈖 𒈗 𒈘 𒈙 𒈚 𒈛 𒈜 𒈝 𒈞 𒈟 𒈠 𒈡 𒈢 𒈣 𒈤 𒈥 𒈦 𒈧 𒈨 𒈩 𒈪 𒈫 𒈬 𒈭 𒈮 𒈯 𒈰 𒈱 𒈲 𒈳 𒈴 𒈵 𒈶 𒈷 𒈸 𒈹 𒈺 𒈻 𒈼 𒈽 𒈾 𒈿 𒉀 𒉁 𒉂 𒉃 𒉄 𒉅 𒉆 𒉇 𒉈 𒉉 𒉊 𒉋 𒉌 𒉍 𒉎 𒉏 𒉐 𒉑 𒉒 𒉓 𒉔 𒉕 𒉖 𒉗 𒉘 𒉙 𒉚 𒉛 𒉜 𒉝 𒉞 𒉟 𒉠 𒉡 𒉢 𒉣 𒉤 𒉥 𒉦 𒉧 𒉨 𒉩 𒉪 𒉫 𒉬 𒉭 𒉮 𒉯 𒉰 𒉱 𒉲 𒉳 𒉴 𒉵 𒉶 𒉷 𒉸 𒉹 𒉺 𒉻 𒉼 𒉽 𒉾 𒉿 𒊀 𒊁 𒊂 𒊃 𒊄 𒊅 𒊆 𒊇 𒊈 𒊉 𒊊 𒊋 𒊌 𒊍 𒊎 𒊏 𒊐 𒊑 𒊒 𒊓 𒊔 𒊕 𒊖 𒊗 𒊘 𒊙 𒊚 𒊛 𒊜 𒊝 𒊞 𒊟 𒊠 𒊡 𒊢 𒊣 𒊤 𒊥 𒊦 𒊧 𒊨 𒊩 𒊪 𒊫 𒊬 𒊭 𒊮 𒊯 𒊰 𒊱 𒊲 𒊳 𒊴 𒊵 𒊶 𒊷 𒊸 𒊹 𒊺 𒊻 𒊼 𒊽 𒊾 𒊿 𒋀 𒋁 𒋂 𒋃 𒋄 𒋅 𒋆 𒋇 𒋈 𒋉 𒋊 𒋋 𒋌 𒋍 𒋎 𒋏 𒋐 𒋑 𒋒 𒋓 𒋔 𒋕 𒋖 𒋗 𒋘 𒋙 𒋚 𒋛 𒋜 𒋝 𒋞 𒋟 𒋠 𒋡 𒋢 𒋣 𒋤 𒋥 𒋦 𒋧 𒋨 𒋩 𒋪 𒋫 𒋬 𒋭 𒋮 𒋯 𒋰 𒋱 𒋲 𒋳 𒋴 𒋵 𒋶 𒋷 𒋸 𒋹 𒋺 𒋻 𒋼 𒋽 𒋾 𒋿 𒌀 𒌁 𒌂 𒌃 𒌄 𒌅 𒌆 𒌇 𒌈 𒌉 𒌊 𒌋 𒌌 𒌍 𒌎 𒌏 𒌐 𒌑 𒌒 𒌓 𒌔 𒌕 𒌖 𒌗 𒌘 𒌙 𒌚 𒌛 𒌜 𒌝 𒌞 𒌟 𒌠 𒌡 𒌢 𒌣 𒌤 𒌥 𒌦 𒌧 𒌨 𒌩 𒌪 𒌫 𒌬 𒌭 𒌮 𒌯 𒌰 𒌱 𒌲 𒌳 𒌴 𒌵 𒌶 𒌷 𒌸 𒌹 𒌺 𒌻 𒌼 𒌽 𒌾 𒌿 𒍀 𒍁 𒍂 𒍃 𒍄 𒍅 𒍆 𒍇 𒍈 𒍉 𒍊 𒍋 𒍌 𒍍 𒍎 𒍏 𒍐 𒍑 𒍒 𒍓 𒍔 𒍕 𒍖 𒍗 𒍘 𒍙 𒍚 𒍛 𒍜 𒍝 𒍞 𒍟 𒍠 𒍡 𒍢 𒍣 𒍤 𒍥 𒍦 𒍧 𒍨 𒍩 𒍪 𒍫 𒍬 𒍭 𒍮 𒍯 𒍰 𒍱 𒍲 𒍳 𒍴 𒍵 𒍶 𒍷 𒍸 𒍹 𒍺 𒍻 𒍼 𒍽 𒍾 𒍿 𒎀 𒎁 𒎂 𒎃 𒎄 𒎅 𒎆 𒎇 𒎈 𒎉 𒎊 𒎋 𒎌 𒎍 𒎎 𒎏 𒎐 𒎑 𒎒 𒎓 𒎔 𒎕 𒎖 𒎗 𒎘 𒎙].freeze
|
data/src/log.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# Adds logging to file and screen capabilities
|
2
|
-
module Log
|
3
|
-
def log_file=(file)
|
4
|
-
@file = file
|
5
|
-
end
|
6
|
-
|
7
|
-
def log(*args)
|
8
|
-
file = @file || 'tmp_log.txt'
|
9
|
-
s = args.nil? ? 'nil' : args.to_s
|
10
|
-
s = "------\n#{s}\n"
|
11
|
-
File.open(file, 'a') { |f| f.puts s }
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
# default logger class
|
16
|
-
class DefaultLogger
|
17
|
-
include Log
|
18
|
-
end
|
19
|
-
|
20
|
-
DEFAULT_LOGGER = DefaultLogger.new
|
21
|
-
|
22
|
-
def log(*args)
|
23
|
-
DEFAULT_LOGGER.log *args
|
24
|
-
end
|