ascii_paint 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/block_characters/100.txt +5 -0
- data/data/block_characters/101.txt +5 -0
- data/data/block_characters/102.txt +5 -0
- data/data/block_characters/103.txt +5 -0
- data/data/block_characters/104.txt +5 -0
- data/data/block_characters/105.txt +5 -0
- data/data/block_characters/106.txt +5 -0
- data/data/block_characters/107.txt +5 -0
- data/data/block_characters/108.txt +5 -0
- data/data/block_characters/109.txt +5 -0
- data/data/block_characters/110.txt +5 -0
- data/data/block_characters/111.txt +5 -0
- data/data/block_characters/112.txt +5 -0
- data/data/block_characters/113.txt +5 -0
- data/data/block_characters/114.txt +5 -0
- data/data/block_characters/115.txt +5 -0
- data/data/block_characters/116.txt +5 -0
- data/data/block_characters/117.txt +5 -0
- data/data/block_characters/118.txt +5 -0
- data/data/block_characters/119.txt +5 -0
- data/data/block_characters/120.txt +5 -0
- data/data/block_characters/121.txt +5 -0
- data/data/block_characters/122.txt +5 -0
- data/data/block_characters/123.txt +5 -0
- data/data/block_characters/124.txt +5 -0
- data/data/block_characters/125.txt +5 -0
- data/data/block_characters/126.txt +5 -0
- data/data/block_characters/32.txt +5 -0
- data/data/block_characters/33.txt +5 -0
- data/data/block_characters/34.txt +5 -0
- data/data/block_characters/35.txt +5 -0
- data/data/block_characters/36.txt +5 -0
- data/data/block_characters/37.txt +5 -0
- data/data/block_characters/38.txt +5 -0
- data/data/block_characters/39.txt +5 -0
- data/data/block_characters/40.txt +5 -0
- data/data/block_characters/41.txt +5 -0
- data/data/block_characters/42.txt +5 -0
- data/data/block_characters/43.txt +5 -0
- data/data/block_characters/44.txt +5 -0
- data/data/block_characters/45.txt +5 -0
- data/data/block_characters/46.txt +5 -0
- data/data/block_characters/47.txt +5 -0
- data/data/block_characters/{0.txt → 48.txt} +0 -0
- data/data/block_characters/{1.txt → 49.txt} +0 -0
- data/data/block_characters/{2.txt → 50.txt} +0 -0
- data/data/block_characters/{3.txt → 51.txt} +0 -0
- data/data/block_characters/{4.txt → 52.txt} +0 -0
- data/data/block_characters/{5.txt → 53.txt} +0 -0
- data/data/block_characters/{6.txt → 54.txt} +0 -0
- data/data/block_characters/{7.txt → 55.txt} +0 -0
- data/data/block_characters/{8.txt → 56.txt} +0 -0
- data/data/block_characters/{9.txt → 57.txt} +0 -0
- data/data/block_characters/58.txt +5 -0
- data/data/block_characters/59.txt +5 -0
- data/data/block_characters/60.txt +5 -0
- data/data/block_characters/61.txt +5 -0
- data/data/block_characters/62.txt +5 -0
- data/data/block_characters/63.txt +5 -0
- data/data/block_characters/64.txt +5 -0
- data/data/block_characters/{A.txt → 65.txt} +0 -0
- data/data/block_characters/{B.txt → 66.txt} +0 -0
- data/data/block_characters/{C.txt → 67.txt} +0 -0
- data/data/block_characters/{D.txt → 68.txt} +0 -0
- data/data/block_characters/{E.txt → 69.txt} +0 -0
- data/data/block_characters/{F.txt → 70.txt} +0 -0
- data/data/block_characters/{G.txt → 71.txt} +0 -0
- data/data/block_characters/{H.txt → 72.txt} +0 -0
- data/data/block_characters/{I.txt → 73.txt} +0 -0
- data/data/block_characters/{J.txt → 74.txt} +0 -0
- data/data/block_characters/{K.txt → 75.txt} +0 -0
- data/data/block_characters/{L.txt → 76.txt} +0 -0
- data/data/block_characters/{M.txt → 77.txt} +0 -0
- data/data/block_characters/{N.txt → 78.txt} +0 -0
- data/data/block_characters/{O.txt → 79.txt} +0 -0
- data/data/block_characters/{P.txt → 80.txt} +0 -0
- data/data/block_characters/{Q.txt → 81.txt} +1 -1
- data/data/block_characters/{R.txt → 82.txt} +0 -0
- data/data/block_characters/{S.txt → 83.txt} +0 -0
- data/data/block_characters/{T.txt → 84.txt} +0 -0
- data/data/block_characters/{U.txt → 85.txt} +0 -0
- data/data/block_characters/{V.txt → 86.txt} +0 -0
- data/data/block_characters/{W.txt → 87.txt} +0 -0
- data/data/block_characters/{X.txt → 88.txt} +0 -0
- data/data/block_characters/{Y.txt → 89.txt} +0 -0
- data/data/block_characters/{Z.txt → 90.txt} +0 -0
- data/data/block_characters/91.txt +5 -0
- data/data/block_characters/92.txt +5 -0
- data/data/block_characters/93.txt +5 -0
- data/data/block_characters/94.txt +5 -0
- data/data/block_characters/95.txt +5 -0
- data/data/block_characters/96.txt +5 -0
- data/data/block_characters/97.txt +5 -0
- data/data/block_characters/98.txt +5 -0
- data/data/block_characters/99.txt +5 -0
- data/lib/ascii_paint.rb +11 -2
- data/lib/ascii_paint/block_character.rb +7 -2
- data/lib/ascii_paint/block_string.rb +8 -16
- data/lib/ascii_paint/config.rb +4 -39
- data/lib/ascii_paint/version.rb +1 -1
- data/spec/block_string_spec.rb +28 -8
- data/spec/spec_helper.rb +1 -0
- metadata +96 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa0af97bf7c65f945f41cc0ea7afba9160fede60
|
4
|
+
data.tar.gz: f2c02fbf638f7c3452948466343aff4403d86c55
|
5
5
|
!binary "U0hBNTEy":
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba79db13cfa0f7bbd267e4c6c4c567a054733f286b9cb5ce3886c7f7664cf6d61644a0fc45ac174c6a332de6a4a3e45aae5c78a11ad1b422e30ac69e207d2f9b
|
7
|
+
data.tar.gz: add9b24a0997a21aac2ca0ce489926bed8a23292205b82ccfdbd01a5c7ed3fe86884a2027ce3146fffc6a678f0837d8f93729da3536951daaffaa03f01449f33
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/ascii_paint.rb
CHANGED
@@ -30,6 +30,7 @@ module AsciiPaint
|
|
30
30
|
# @return [String]
|
31
31
|
# the name of the painted PNG file
|
32
32
|
def self.paint(ascii_art, out_filename, configuration = {})
|
33
|
+
# TODO: full path return value
|
33
34
|
global_configuration = self.config
|
34
35
|
local_configuration = global_configuration.dup.set_options(configuration)
|
35
36
|
|
@@ -59,7 +60,7 @@ module AsciiPaint
|
|
59
60
|
if ascii_art.size == 1
|
60
61
|
ascii_art = File.open(ascii_art[0], 'r').to_a.map(&:chomp)
|
61
62
|
end
|
62
|
-
ascii_art
|
63
|
+
rectangularize(ascii_art)
|
63
64
|
end
|
64
65
|
|
65
66
|
def self.ascii_to_image(ascii_array, configuration)
|
@@ -73,7 +74,7 @@ module AsciiPaint
|
|
73
74
|
width = lines.map(&:size).max
|
74
75
|
|
75
76
|
width_pixels, height_pixels = configuration.characters_to_pixels(width, height)
|
76
|
-
png = ChunkyPNG::Image.new(width_pixels, height_pixels,
|
77
|
+
png = ChunkyPNG::Image.new(width_pixels, height_pixels, ChunkyPNG::Color::TRANSPARENT)
|
77
78
|
end
|
78
79
|
|
79
80
|
def self.ascii_to_colors(strings, configuration)
|
@@ -98,6 +99,14 @@ module AsciiPaint
|
|
98
99
|
image
|
99
100
|
end
|
100
101
|
|
102
|
+
def self.rectangularize(lines)
|
103
|
+
width = lines.map(&:size).max
|
104
|
+
|
105
|
+
lines.map do |line|
|
106
|
+
line.ljust(width, ' ')
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
101
110
|
def self.save_image(image, filename, _)
|
102
111
|
image.save(filename, :interlace => true)
|
103
112
|
end
|
@@ -20,7 +20,7 @@ module AsciiPaint
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def newline?
|
23
|
-
|
23
|
+
@newline == true
|
24
24
|
end
|
25
25
|
|
26
26
|
def to_s
|
@@ -55,7 +55,7 @@ module AsciiPaint
|
|
55
55
|
|
56
56
|
# TODO: filename escaping
|
57
57
|
def load_ascii(character)
|
58
|
-
path =
|
58
|
+
path = path_for character
|
59
59
|
if File.exists? path
|
60
60
|
@ascii = File.open(path, 'r').to_a.map(&:chomp)
|
61
61
|
@ascii = pad_ascii(@ascii)
|
@@ -64,6 +64,11 @@ module AsciiPaint
|
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
|
+
def path_for(character)
|
68
|
+
# Use ASCII codes!
|
69
|
+
block_characters_dir.join "#{character.ord}.txt"
|
70
|
+
end
|
71
|
+
|
67
72
|
def pad_ascii(ascii)
|
68
73
|
left = " " * self.class.left_padding
|
69
74
|
right = " " * self.class.right_padding
|
@@ -6,27 +6,19 @@ module AsciiPaint
|
|
6
6
|
@block_characters = string.chars.map { |char| BlockCharacter.new(char) }
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
nil
|
16
|
-
else
|
17
|
-
:not_newline
|
18
|
-
end
|
19
|
-
end.map do |symbol, row|
|
20
|
-
row
|
9
|
+
def rows
|
10
|
+
block_characters.inject([[]]) do |rows, block_char|
|
11
|
+
if block_char.newline?
|
12
|
+
rows << []
|
13
|
+
else
|
14
|
+
rows.last << block_char
|
21
15
|
end
|
22
|
-
|
23
|
-
rows.each do |row|
|
24
|
-
yield row
|
16
|
+
rows
|
25
17
|
end
|
26
18
|
end
|
27
19
|
|
28
20
|
def to_a
|
29
|
-
|
21
|
+
rows.flat_map do |block_row|
|
30
22
|
(0...BlockCharacter.height).map do |h|
|
31
23
|
block_row.inject('') do |string_row, block_char|
|
32
24
|
string_row + block_char.ascii[h]
|
data/lib/ascii_paint/config.rb
CHANGED
@@ -131,45 +131,7 @@ module AsciiPaint
|
|
131
131
|
COLOR_FOR_UNDEFINED_CHARACTER = :black
|
132
132
|
COLOR_MAP =
|
133
133
|
begin
|
134
|
-
map = {
|
135
|
-
' ' => :transparent,
|
136
|
-
|
137
|
-
'!' => :red,
|
138
|
-
'@' => :orange,
|
139
|
-
'#' => :yellow,
|
140
|
-
'$' => :green,
|
141
|
-
'%' => :blue,
|
142
|
-
'^' => :purple,
|
143
|
-
|
144
|
-
'_' => :white,
|
145
|
-
'~' => :black,
|
146
|
-
|
147
|
-
'<' => :lightgrey,
|
148
|
-
'>' => :grey,
|
149
|
-
'?' => :darkgrey,
|
150
|
-
',' => :lightslategrey,
|
151
|
-
'.' => :slategrey,
|
152
|
-
'/' => :darkslategrey,
|
153
|
-
'\\' => :dimgrey,
|
154
|
-
|
155
|
-
':' => :chocolate,
|
156
|
-
';' => :blanchedalmond,
|
157
|
-
'\'' => :coral,
|
158
|
-
'"' => :deepskyblue,
|
159
|
-
'{' => :indigo,
|
160
|
-
'}' => :ivory,
|
161
|
-
'[' => :khaki,
|
162
|
-
']' => :lavender,
|
163
|
-
'|' => :hotpink,
|
164
|
-
'&' => :darksalmon,
|
165
|
-
'*' => :lime,
|
166
|
-
'(' => :lightyellow,
|
167
|
-
')' => :honeydew,
|
168
|
-
'-' => :azure,
|
169
|
-
'+' => :crimson,
|
170
|
-
'=' => :antiquewhite,
|
171
|
-
'`' => :cornsilk
|
172
|
-
}
|
134
|
+
map = {}
|
173
135
|
|
174
136
|
letters = ('a'..'z').zip('A'..'Z').flatten # ['a', 'A', 'b', 'B', ...]
|
175
137
|
map.merge! rainbow_mapping(letters)
|
@@ -177,6 +139,9 @@ module AsciiPaint
|
|
177
139
|
numbers = ('0'..'9')
|
178
140
|
map.merge! rainbow_mapping(numbers)
|
179
141
|
|
142
|
+
punctuation = '~!@#$%^&*()_+`-={}|[]\:;"\'<>?,./'.chars
|
143
|
+
map.merge! rainbow_mapping(punctuation)
|
144
|
+
|
180
145
|
map
|
181
146
|
end
|
182
147
|
end
|
data/lib/ascii_paint/version.rb
CHANGED
data/spec/block_string_spec.rb
CHANGED
@@ -41,6 +41,26 @@ describe AsciiPaint::BlockString do
|
|
41
41
|
File.should_not be_a_file OUTPUT_FILENAME
|
42
42
|
end
|
43
43
|
|
44
|
+
it "renders adjacent newlines" do
|
45
|
+
ascii = "ASCII\n\npaint"
|
46
|
+
AsciiPaint.block_paint(ascii, OUTPUT_FILENAME, character_height: 10)
|
47
|
+
result = ChunkyPNG::Image.from_file(OUTPUT_FILENAME)
|
48
|
+
|
49
|
+
rows = 3
|
50
|
+
row_height = 10 * AsciiPaint::BlockCharacter.height
|
51
|
+
result.height.should eq(rows * row_height)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "renders leading and trailing newlines" do
|
55
|
+
ascii = "\nASCII\npaint\n"
|
56
|
+
AsciiPaint.block_paint(ascii, OUTPUT_FILENAME, character_height: 10)
|
57
|
+
result = ChunkyPNG::Image.from_file(OUTPUT_FILENAME)
|
58
|
+
|
59
|
+
rows = 4
|
60
|
+
row_height = 10 * AsciiPaint::BlockCharacter.height
|
61
|
+
result.height.should eq(rows * row_height)
|
62
|
+
end
|
63
|
+
|
44
64
|
context "data directory" do
|
45
65
|
it "has character files of the correct width" do
|
46
66
|
Helpers.each_block_character_path do |path|
|
@@ -60,16 +80,16 @@ describe AsciiPaint::BlockString do
|
|
60
80
|
end
|
61
81
|
end
|
62
82
|
|
63
|
-
it "has character files for all
|
64
|
-
|
65
|
-
|
83
|
+
it "has character files for all printing ASCII characters" do
|
84
|
+
printing_character_codes = (32..126).map { |code| code.to_s }
|
85
|
+
character_codes_present =
|
86
|
+
Helpers.each_block_character_path.map do |path|
|
87
|
+
path.to_s.match(/\/(\d+)\.txt/)[1]
|
88
|
+
end
|
66
89
|
|
67
|
-
|
68
|
-
character = path.to_s.match(/\/(.)\.txt/)[1]
|
69
|
-
found_characters << character
|
70
|
-
end
|
90
|
+
missing_character_codes = printing_character_codes - character_codes_present
|
71
91
|
|
72
|
-
|
92
|
+
missing_character_codes.should be_empty, missing_character_codes.to_s
|
73
93
|
end
|
74
94
|
end
|
75
95
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -45,6 +45,7 @@ module Helpers
|
|
45
45
|
|
46
46
|
# TODO: split into separate helper
|
47
47
|
def self.each_block_character_path
|
48
|
+
return to_enum(:each_block_character_path) unless block_given?
|
48
49
|
block_characters_dir = AsciiPaint.root.join('data', 'block_characters')
|
49
50
|
block_characters_dir.each_child(false) do |path|
|
50
51
|
full_path = block_characters_dir.join(path)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ascii_paint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nate Sullivan
|
@@ -63,42 +63,101 @@ files:
|
|
63
63
|
- lib/ascii_paint/config.rb
|
64
64
|
- lib/ascii_paint/version.rb
|
65
65
|
- lib/ascii_paint.rb
|
66
|
-
- data/block_characters/
|
67
|
-
- data/block_characters/
|
68
|
-
- data/block_characters/
|
69
|
-
- data/block_characters/
|
70
|
-
- data/block_characters/
|
71
|
-
- data/block_characters/
|
72
|
-
- data/block_characters/
|
73
|
-
- data/block_characters/
|
74
|
-
- data/block_characters/
|
75
|
-
- data/block_characters/
|
76
|
-
- data/block_characters/
|
77
|
-
- data/block_characters/
|
78
|
-
- data/block_characters/
|
79
|
-
- data/block_characters/
|
80
|
-
- data/block_characters/
|
81
|
-
- data/block_characters/
|
82
|
-
- data/block_characters/
|
83
|
-
- data/block_characters/
|
84
|
-
- data/block_characters/
|
85
|
-
- data/block_characters/
|
86
|
-
- data/block_characters/
|
87
|
-
- data/block_characters/
|
88
|
-
- data/block_characters/
|
89
|
-
- data/block_characters/
|
90
|
-
- data/block_characters/
|
91
|
-
- data/block_characters/
|
92
|
-
- data/block_characters/
|
93
|
-
- data/block_characters/
|
94
|
-
- data/block_characters/
|
95
|
-
- data/block_characters/
|
96
|
-
- data/block_characters/
|
97
|
-
- data/block_characters/
|
98
|
-
- data/block_characters/
|
99
|
-
- data/block_characters/
|
100
|
-
- data/block_characters/
|
101
|
-
- data/block_characters/
|
66
|
+
- data/block_characters/100.txt
|
67
|
+
- data/block_characters/101.txt
|
68
|
+
- data/block_characters/102.txt
|
69
|
+
- data/block_characters/103.txt
|
70
|
+
- data/block_characters/104.txt
|
71
|
+
- data/block_characters/105.txt
|
72
|
+
- data/block_characters/106.txt
|
73
|
+
- data/block_characters/107.txt
|
74
|
+
- data/block_characters/108.txt
|
75
|
+
- data/block_characters/109.txt
|
76
|
+
- data/block_characters/110.txt
|
77
|
+
- data/block_characters/111.txt
|
78
|
+
- data/block_characters/112.txt
|
79
|
+
- data/block_characters/113.txt
|
80
|
+
- data/block_characters/114.txt
|
81
|
+
- data/block_characters/115.txt
|
82
|
+
- data/block_characters/116.txt
|
83
|
+
- data/block_characters/117.txt
|
84
|
+
- data/block_characters/118.txt
|
85
|
+
- data/block_characters/119.txt
|
86
|
+
- data/block_characters/120.txt
|
87
|
+
- data/block_characters/121.txt
|
88
|
+
- data/block_characters/122.txt
|
89
|
+
- data/block_characters/123.txt
|
90
|
+
- data/block_characters/124.txt
|
91
|
+
- data/block_characters/125.txt
|
92
|
+
- data/block_characters/126.txt
|
93
|
+
- data/block_characters/32.txt
|
94
|
+
- data/block_characters/33.txt
|
95
|
+
- data/block_characters/34.txt
|
96
|
+
- data/block_characters/35.txt
|
97
|
+
- data/block_characters/36.txt
|
98
|
+
- data/block_characters/37.txt
|
99
|
+
- data/block_characters/38.txt
|
100
|
+
- data/block_characters/39.txt
|
101
|
+
- data/block_characters/40.txt
|
102
|
+
- data/block_characters/41.txt
|
103
|
+
- data/block_characters/42.txt
|
104
|
+
- data/block_characters/43.txt
|
105
|
+
- data/block_characters/44.txt
|
106
|
+
- data/block_characters/45.txt
|
107
|
+
- data/block_characters/46.txt
|
108
|
+
- data/block_characters/47.txt
|
109
|
+
- data/block_characters/48.txt
|
110
|
+
- data/block_characters/49.txt
|
111
|
+
- data/block_characters/50.txt
|
112
|
+
- data/block_characters/51.txt
|
113
|
+
- data/block_characters/52.txt
|
114
|
+
- data/block_characters/53.txt
|
115
|
+
- data/block_characters/54.txt
|
116
|
+
- data/block_characters/55.txt
|
117
|
+
- data/block_characters/56.txt
|
118
|
+
- data/block_characters/57.txt
|
119
|
+
- data/block_characters/58.txt
|
120
|
+
- data/block_characters/59.txt
|
121
|
+
- data/block_characters/60.txt
|
122
|
+
- data/block_characters/61.txt
|
123
|
+
- data/block_characters/62.txt
|
124
|
+
- data/block_characters/63.txt
|
125
|
+
- data/block_characters/64.txt
|
126
|
+
- data/block_characters/65.txt
|
127
|
+
- data/block_characters/66.txt
|
128
|
+
- data/block_characters/67.txt
|
129
|
+
- data/block_characters/68.txt
|
130
|
+
- data/block_characters/69.txt
|
131
|
+
- data/block_characters/70.txt
|
132
|
+
- data/block_characters/71.txt
|
133
|
+
- data/block_characters/72.txt
|
134
|
+
- data/block_characters/73.txt
|
135
|
+
- data/block_characters/74.txt
|
136
|
+
- data/block_characters/75.txt
|
137
|
+
- data/block_characters/76.txt
|
138
|
+
- data/block_characters/77.txt
|
139
|
+
- data/block_characters/78.txt
|
140
|
+
- data/block_characters/79.txt
|
141
|
+
- data/block_characters/80.txt
|
142
|
+
- data/block_characters/81.txt
|
143
|
+
- data/block_characters/82.txt
|
144
|
+
- data/block_characters/83.txt
|
145
|
+
- data/block_characters/84.txt
|
146
|
+
- data/block_characters/85.txt
|
147
|
+
- data/block_characters/86.txt
|
148
|
+
- data/block_characters/87.txt
|
149
|
+
- data/block_characters/88.txt
|
150
|
+
- data/block_characters/89.txt
|
151
|
+
- data/block_characters/90.txt
|
152
|
+
- data/block_characters/91.txt
|
153
|
+
- data/block_characters/92.txt
|
154
|
+
- data/block_characters/93.txt
|
155
|
+
- data/block_characters/94.txt
|
156
|
+
- data/block_characters/95.txt
|
157
|
+
- data/block_characters/96.txt
|
158
|
+
- data/block_characters/97.txt
|
159
|
+
- data/block_characters/98.txt
|
160
|
+
- data/block_characters/99.txt
|
102
161
|
- spec/ascii_paint_spec.rb
|
103
162
|
- spec/block_string_spec.rb
|
104
163
|
- spec/fixtures/ascii.txt
|