vamp 0.1.3 → 0.1.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.
@@ -0,0 +1,217 @@
1
+ module Vamp
2
+ module Graphic
3
+ # Transfer dotter data into ASCII
4
+ class Transfer5
5
+
6
+ attr_reader :char_width
7
+ attr_reader :char_height
8
+ attr_reader :context
9
+ attr_reader :mapping
10
+
11
+ SPACE = <<-'END'
12
+ _____
13
+ _____
14
+ _____
15
+ _____
16
+ _____
17
+ END
18
+
19
+ SLASH = <<-'END'
20
+ ___X_
21
+ __X__
22
+ _X___
23
+ X____
24
+ _____
25
+ END
26
+
27
+ BACKSLASH = <<-'END'
28
+ X____
29
+ _X___
30
+ __X__
31
+ ___X_
32
+ _____
33
+ END
34
+
35
+ BACKTICK = <<-'END'
36
+ _X___
37
+ _____
38
+ _____
39
+ _____
40
+ _____
41
+ END
42
+
43
+ PIPE = <<-'END'
44
+ __X__
45
+ __X__
46
+ __X__
47
+ __X__
48
+ _____
49
+ END
50
+
51
+ MINUS = <<-'END'
52
+ _____
53
+ _____
54
+ XXXX_
55
+ _____
56
+ _____
57
+ END
58
+
59
+ UNDERSCORE = <<-'END'
60
+ _____
61
+ _____
62
+ _____
63
+ _____
64
+ XXXXX
65
+ END
66
+
67
+ FULLSTOP = <<-'END'
68
+ _____
69
+ _____
70
+ _____
71
+ __X__
72
+ _____
73
+ END
74
+
75
+ DOUBLEQUOTES = <<-'END'
76
+ _X_X_
77
+ _____
78
+ _____
79
+ _____
80
+ _____
81
+ END
82
+
83
+ SINGLEQUOTE = <<-'END'
84
+ __X__
85
+ _____
86
+ _____
87
+ _____
88
+ _____
89
+ END
90
+
91
+ STAR = <<-'END'
92
+ _____
93
+ __X__
94
+ _XXX_
95
+ __X__
96
+ _____
97
+ END
98
+
99
+ HASH = <<-'END'
100
+ _____
101
+ _XXX_
102
+ _XXX_
103
+ _XXX_
104
+ _____
105
+ END
106
+
107
+ def initialize(context)
108
+ @context = context
109
+ @char_width = 5
110
+ @char_height = 5
111
+ @mapping = {
112
+ " " => create_pattern(SPACE),
113
+ "/" => create_pattern(SLASH),
114
+ "\\" => create_pattern(BACKSLASH),
115
+ "`" => create_pattern(BACKTICK),
116
+ "|" => create_pattern(PIPE),
117
+ "-" => create_pattern(MINUS),
118
+ "_" => create_pattern(UNDERSCORE),
119
+ "." => create_pattern(FULLSTOP),
120
+ "\"" => create_pattern(DOUBLEQUOTES),
121
+ "'" => create_pattern(SINGLEQUOTE),
122
+ "*" => create_pattern(STAR),
123
+ "\#" => create_pattern(HASH),
124
+ }
125
+ end
126
+
127
+ def create_data(pattern)
128
+ a = pattern.split("\n")
129
+ fail "pattern has wrong height" if a.size != char_height
130
+ char_height.times do |dy|
131
+ fail "pattern has wrong width" if a[dy].size != char_width
132
+ end
133
+ a
134
+ end
135
+
136
+ def create_pattern(pattern)
137
+ char = TextDotter.new(char_width, char_height)
138
+ a = create_data(pattern)
139
+ char_height.times do |y|
140
+ char_width.times do |x|
141
+ char.dot(x, y) if a[y][x] == "X"
142
+ end
143
+ end
144
+ char
145
+ end
146
+
147
+ def get_pattern(x, y)
148
+ pattern = ""
149
+ char_height.times do |dy|
150
+ char_width.times do |dx|
151
+ if context.in?(x + dx, y + dy)
152
+ pattern += (context.dot?(x + dx, y + dy) ? "X" : "_")
153
+ else
154
+ pattern += "_"
155
+ end
156
+ end
157
+ pattern += "\n"
158
+ end
159
+ create_pattern(pattern.strip)
160
+ end
161
+
162
+ def difference(pattern1, pattern2)
163
+ m = 0
164
+ char_width.times do |dx|
165
+ char_height.times do |dy|
166
+ m += 1 if pattern1.dot?(dx, dy) != pattern2.dot?(dx, dy)
167
+ end
168
+ end
169
+ m
170
+ end
171
+
172
+ def get_matching(pattern, without_blank = false)
173
+ ranking = {}
174
+ mapping.each do |k, v|
175
+ next if without_blank and v == " "
176
+ r = difference(pattern, v)
177
+ ranking[k] = r
178
+ end
179
+ match = ranking.min_by{|k, v| v}
180
+ # require "pp"
181
+ # pp match
182
+ match[0..1]
183
+ end
184
+
185
+
186
+ def ascii
187
+ a = ""
188
+ (context.height / char_height).times do |y|
189
+ (context.width / char_width).times do |x|
190
+ m = get_matching(get_pattern(x * char_width, y * char_height))
191
+ if (m[1] > 0)
192
+ n = []
193
+ n << get_matching(get_pattern(x * char_width + 1, y * char_height), true)
194
+ n << get_matching(get_pattern(x * char_width - 1, y * char_height), true)
195
+ n << get_matching(get_pattern(x * char_width, y * char_height + 1), true)
196
+ n << get_matching(get_pattern(x * char_width, y * char_height - 1), true)
197
+ =begin
198
+ n << get_matching(get_pattern(x * char_width + 2, y * char_height), true)
199
+ n << get_matching(get_pattern(x * char_width - 2, y * char_height), true)
200
+ n << get_matching(get_pattern(x * char_width, y * char_height + 2), true)
201
+ n << get_matching(get_pattern(x * char_width, y * char_height - 2), true)
202
+ =end
203
+ n.each do |v|
204
+ if v[1] < m[1]
205
+ m = v
206
+ end
207
+ end
208
+ end
209
+ a += m[0]
210
+ end
211
+ a += "\n"
212
+ end
213
+ a.chomp
214
+ end
215
+ end
216
+ end
217
+ end
@@ -0,0 +1,17 @@
1
+ require_relative "graphic/context"
2
+
3
+ module Vamp
4
+ module Graphic
5
+ end
6
+ end
7
+
8
+ if __FILE__ == $0
9
+ g = Vamp::Graphic::Context.new(Vamp::Graphic::TextDotter.new(80, 20))
10
+ g.dot(10, 10)
11
+ g.line 1, 2, 70, 9
12
+
13
+ g.draw 40, 10, 100, 1
14
+ puts g.screen
15
+ puts "now we get an error:"
16
+ g.line 1, 1, 100, 100
17
+ end
data/lib/vamp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Vamp
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
data/lib/vamp.rb CHANGED
@@ -1,21 +1,13 @@
1
1
  require_relative "vamp/animator"
2
+ require_relative "vamp/art"
2
3
  require_relative "vamp/colorize"
3
4
  require_relative "vamp/ply"
4
5
  require_relative "vamp/version"
5
6
 
6
7
  module Vamp
7
8
 
8
- # ascii art vampire by the queen of ascii art: Joan Stark
9
- # https://en.wikipedia.org/wiki/Joan_Stark
10
- VAMPIRE = <<-END
11
- =/\\ /\\=
12
- / \\'._ (\\_/) _.'/ \\
13
- / .''._'--(o.o)--'_.''. \\
14
- /.' _/ |`'=/ " \\='`| \\_ `.\\
15
- /` .' `\\;-,'\\___/',-;/` '. '\\
16
- /.-' jgs `\\(-V-)/` `-.\\
17
- ` " " `
18
- END
9
+ # ascii art: vampire
10
+ VAMPIRE = Vamp::Art::VAMPIRE
19
11
 
20
12
  # return random quote
21
13
  def quote
@@ -69,7 +61,8 @@ module Vamp
69
61
  "Only those prepared to die will find eternal life.",
70
62
  "I remember everything. It's a burden.",
71
63
  "I am teaching you something you don't want to know.",
72
- "Death is not the worst. There are things more horrible than death."
64
+ "Death is not the worst. There are things more horrible than death.",
65
+ "I'll protect you from the hooded claw; Keep the vampires from your door."
73
66
  ].sample
74
67
  end
75
68
  end
data/sample/gui.rb ADDED
@@ -0,0 +1,98 @@
1
+ require "green_shoes"
2
+
3
+ =begin
4
+ Shoes.app do
5
+ flow do
6
+ stack :width => 200 do
7
+ background lavender
8
+ caption "Column one"
9
+ para "is 200 pixels wide"
10
+ end
11
+ stack :width => -200 do
12
+ background bisque
13
+ caption "Column two"
14
+ para "is 100% minus 200 pixels wide"
15
+ end
16
+ end
17
+ end
18
+ =end
19
+
20
+ =begin
21
+ Shoes.app do
22
+ fill black.push(0.1)
23
+ 100.times do |i|
24
+ oval i, i, i * 2 if i > 0
25
+ end
26
+ end
27
+
28
+ =end
29
+
30
+ =begin
31
+ Shoes.app width: 800, height:900, margin: 10, title: "VAMP GUI" do
32
+ stack width: 800, height: 200, margin: 10 do
33
+ border black, strokewidth: 2
34
+ end
35
+ end
36
+ =end
37
+
38
+ =begin
39
+ Shoes.app do
40
+ lb = list_box items: COLORS.keys.map(&:to_s), choose: 'red' do |s|
41
+ @o.style fill: eval(s.text)
42
+ @p.text = s.text
43
+ end.move(300, 0)
44
+ @p = para
45
+ nostroke
46
+ @o = oval 100, 100, 100, 100
47
+ i = 0
48
+ button('print'){para lb.text, top: 20*(i+=1)}.move(500, 0)
49
+ end
50
+
51
+ =end
52
+
53
+ =begin
54
+ Shoes.app do
55
+ background chocolate..black, angle: 130
56
+ strokewidth 20
57
+ border deeppink..forestgreen, curve: 30
58
+ nostroke
59
+ fill crimson..cyan
60
+ oval 100, 100, 100, 100, angle: 45
61
+ nofill
62
+ strokewidth 50
63
+ rect 200, 200, 300, 200, stroke: darkblue..ivory, angle: 90
64
+ end
65
+
66
+ =end
67
+
68
+ =begin
69
+ Shoes.app width: 400, height: 400 do
70
+ cap [:rect, :curve, :project][rand 3]
71
+ background lightgrey
72
+ rect 0, 0, 100, 100
73
+ rect 100, 100, 100, 100
74
+ rect 200, 200, 100, 100
75
+ rect 0, 200, 100, 100
76
+ rect 200, 0, 100, 100
77
+ stroke File.join(DIR, '../static/gshoes-icon.png')
78
+ strokewidth 10
79
+ line 355, 180, 5, 111, strokewidth: 20
80
+ stroke red
81
+ line 0, 0, 100, 0
82
+ line 0, 100, 0, 0
83
+ line 300, 200, 200, 200
84
+ line 100, 200, 200, 100
85
+ stroke white
86
+ line 200, 200, 200, 300
87
+ line 300, 200, 200, 100
88
+ end
89
+ =end
90
+
91
+ Shoes.app width: 800, height: 600 do
92
+ background lightgrey
93
+ strokewidth 1
94
+ stroke black
95
+ d = 10
96
+ (height / d + 1).times { |i| line 0, i * d, width, i * d }
97
+ (width / d + 1).times { |i| line i * d, 0, i * d, height }
98
+ end
data/spec/art_spec.rb ADDED
@@ -0,0 +1,56 @@
1
+ require "spec_helper"
2
+
3
+ describe Vamp::Art do
4
+ it "has a vampire" do
5
+ expect(subject::VAMPIRE).not_to be nil
6
+ puts "\n#{subject::VAMPIRE}"
7
+ end
8
+ it "has a colorful hobgoblin" do
9
+ expect(subject::HOBGOBLIN_COLOR).not_to be nil
10
+ puts "\n#{subject::HOBGOBLIN_COLOR}"
11
+ end
12
+ it "has a hobgoblin" do
13
+ expect(subject::HOBGOBLIN).not_to be nil
14
+ puts "\n#{subject::HOBGOBLIN}"
15
+ end
16
+ it "has a colorful shark" do
17
+ expect(subject::SHARK_COLOR).not_to be nil
18
+ puts "\n#{subject::SHARK_COLOR}"
19
+ end
20
+ it "has a shark" do
21
+ expect(subject::SHARK).not_to be nil
22
+ puts "\n#{subject::SHARK}"
23
+ end
24
+ it "has a colorful skull" do
25
+ expect(subject::SKULL_COLOR).not_to be nil
26
+ puts "\n#{subject::SKULL_COLOR}"
27
+ end
28
+ it "has a skull" do
29
+ expect(subject::SKULL).not_to be nil
30
+ puts "\n#{subject::SKULL}"
31
+ end
32
+ it "has a colorful lizard" do
33
+ expect(subject::LIZARD_COLOR).not_to be nil
34
+ puts "\n#{subject::LIZARD_COLOR}"
35
+ end
36
+ it "has a lizard" do
37
+ expect(subject::LIZARD).not_to be nil
38
+ puts "\n#{subject::LIZARD}"
39
+ end
40
+ it "has a colorful dragon" do
41
+ expect(subject::DRAGON_COLOR).not_to be nil
42
+ puts "\n#{subject::DRAGON_COLOR}"
43
+ end
44
+ it "has a dragon" do
45
+ expect(subject::DRAGON).not_to be nil
46
+ puts "\n#{subject::DRAGON}"
47
+ end
48
+ it "has a running man" do
49
+ expect(subject::RUNNING).not_to be nil
50
+ puts "\n#{subject::RUNNING}"
51
+ end
52
+ it "has a declaring woman" do
53
+ expect(subject::DECLARING).not_to be nil
54
+ puts "\n#{subject::DECLARING}"
55
+ end
56
+ end