Skip to content

Commit a4bbdcc

Browse files
authored
Merge pull request #44 from red-data-tools/canvas_types
Add UnicodePlot.canvas_types
2 parents b6b5715 + 19bb16e commit a4bbdcc

9 files changed

Lines changed: 37 additions & 17 deletions

File tree

lib/unicode_plot.rb

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,6 @@
99
require 'unicode_plot/renderer'
1010

1111
require 'unicode_plot/canvas'
12-
require 'unicode_plot/braille_canvas'
13-
require 'unicode_plot/density_canvas'
14-
require 'unicode_plot/lookup_canvas'
15-
require 'unicode_plot/ascii_canvas'
16-
require 'unicode_plot/dot_canvas'
17-
require 'unicode_plot/block_canvas'
1812

1913
require 'unicode_plot/plot'
2014
require 'unicode_plot/grid_plot'

lib/unicode_plot/canvas.rb

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,13 @@ module UnicodePlot
22
class Canvas
33
include BorderPrinter
44

5+
CANVAS_CLASS_MAP = {}
6+
57
def self.create(canvas_type, width, height, **kw)
6-
case canvas_type
7-
when :ascii
8-
AsciiCanvas.new(width, height, **kw)
9-
when :braille
10-
BrailleCanvas.new(width, height, **kw)
11-
when :density
12-
DensityCanvas.new(width, height, **kw)
13-
when :dot
14-
DotCanvas.new(width, height, **kw)
15-
when :block
16-
BlockCanvas.new(width, height, **kw)
8+
canvas_class = CANVAS_CLASS_MAP[canvas_type]
9+
case canvas_class
10+
when Class
11+
canvas_class.new(width, height, **kw)
1712
else
1813
raise ArgumentError, "unknown canvas type: #{canvas_type}"
1914
end
@@ -168,4 +163,16 @@ def lines!(x, y, color = :normal)
168163
raise ArgumentError, "#{name} has to be positive"
169164
end
170165
end
166+
167+
def self.canvas_types
168+
Canvas::CANVAS_CLASS_MAP.keys
169+
end
171170
end
171+
172+
require_relative 'canvas/ascii_canvas'
173+
require_relative 'canvas/block_canvas'
174+
require_relative 'canvas/braille_canvas'
175+
require_relative 'canvas/density_canvas'
176+
require_relative 'canvas/dot_canvas'
177+
178+
UnicodePlot::Canvas::CANVAS_CLASS_MAP.freeze
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
require_relative 'lookup_canvas'
2+
13
module UnicodePlot
24
class AsciiCanvas < LookupCanvas
5+
Canvas::CANVAS_CLASS_MAP[:ascii] = self
6+
37
ASCII_SIGNS = [
48
[ 0b100_000_000, 0b000_100_000, 0b000_000_100 ].freeze,
59
[ 0b010_000_000, 0b000_010_000, 0b000_000_010 ].freeze,
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ module UnicodePlot
77
# into 4 pixels that can individually be manipulated
88
# using binary operations.
99
class BlockCanvas < LookupCanvas
10+
Canvas::CANVAS_CLASS_MAP[:block] = self
11+
1012
X_PIXEL_PER_CHAR = 2
1113
Y_PIXEL_PER_CHAR = 2
1214

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
module UnicodePlot
22
class BrailleCanvas < Canvas
3+
Canvas::CANVAS_CLASS_MAP[:braille] = self
4+
35
X_PIXEL_PER_CHAR = 2
46
Y_PIXEL_PER_CHAR = 4
57

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
module UnicodePlot
22
class DensityCanvas < Canvas
3+
Canvas::CANVAS_CLASS_MAP[:density] = self
4+
35
DENSITY_SIGNS = [" ", "░", "▒", "▓", "█"].freeze
46

57
MIN_WIDTH = 5
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
module UnicodePlot
22
class DotCanvas < LookupCanvas
3+
Canvas::CANVAS_CLASS_MAP[:dot] = self
4+
35
DOT_SIGNS = [
46
[
57
0b10,

test/test-utils.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class UnicodePlotTest < Test::Unit::TestCase
2+
test("UnicodePlot.canvas_types") do
3+
available_canvas_types = [:ascii, :block, :braille, :density, :dot]
4+
assert_equal(available_canvas_types,
5+
UnicodePlot.canvas_types)
6+
end
7+
end

0 commit comments

Comments
 (0)