Ascii85 0.9.0 → 1.0.0
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.
- data.tar.gz.sig +0 -0
- data/History.txt +7 -0
- data/Manifest.txt +1 -0
- data/README.txt +30 -13
- data/Rakefile +13 -33
- data/bin/ascii85 +82 -0
- data/lib/ascii85.rb +56 -28
- data/spec/ascii85_spec.rb +48 -2
- metadata +21 -12
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
data/README.txt
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
* http://ascii85.rubyforge.org
|
4
4
|
|
5
|
+
|
5
6
|
== DESCRIPTION:
|
6
7
|
|
7
8
|
Ascii85 is a simple gem that provides methods for encoding/decoding Adobe's
|
@@ -25,13 +26,29 @@ http://en.wikipedia.org/wiki/Ascii85 for more information about the format.
|
|
25
26
|
In addition, Ascii85::encode can take a second parameter that specifies the
|
26
27
|
length of the returned lines. The default is 80; use +false+ for unlimited.
|
27
28
|
|
28
|
-
Ascii85::decode expects the input to be enclosed in <~ and
|
29
|
-
everything outside of these.
|
29
|
+
Ascii85::decode expects the input to be enclosed in <~ and ~> — it
|
30
|
+
ignores everything outside of these. The output of Ascii85::decode
|
31
|
+
will have the ASCII-8BIT encoding, so in Ruby 1.9 you may have to use
|
32
|
+
<tt>String#force_encoding</tt> to correct the encoding.
|
33
|
+
|
34
|
+
|
35
|
+
== Command-line utility
|
36
|
+
|
37
|
+
This gem includes +ascii85+, a command-line utility modeled after +base64+ from
|
38
|
+
the GNU coreutils. It can be used to encode/decode Ascii85 directly from the
|
39
|
+
command-line:
|
40
|
+
|
41
|
+
Usage: ascii85 [OPTIONS] [FILE]
|
42
|
+
Encodes or decodes FILE or STDIN using Ascii85 and write to STDOUT.
|
43
|
+
-w, --wrap COLUMN Wrap lines at COLUMN. Default is 80, use 0 for no wrapping
|
44
|
+
-d, --decode Decode the input
|
45
|
+
-h, --help Display this help and exit
|
46
|
+
--version Output version information
|
30
47
|
|
31
48
|
|
32
49
|
== INSTALL:
|
33
50
|
|
34
|
-
* sudo gem install
|
51
|
+
* sudo gem install Ascii85
|
35
52
|
|
36
53
|
|
37
54
|
== LICENSE:
|
@@ -40,20 +57,20 @@ everything outside of these.
|
|
40
57
|
|
41
58
|
Copyright (c) 2009 Johannes Holzfuß
|
42
59
|
|
43
|
-
Permission is hereby granted, free of charge, to any person obtaining a
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
60
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
61
|
+
this software and associated documentation files (the "Software"), to deal in
|
62
|
+
the Software without restriction, including without limitation the rights to
|
63
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
64
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
65
|
+
so, subject to the following conditions:
|
49
66
|
|
50
|
-
The above copyright notice and this permission notice shall be included in
|
51
|
-
|
67
|
+
The above copyright notice and this permission notice shall be included in all
|
68
|
+
copies or substantial portions of the Software.
|
52
69
|
|
53
70
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
54
71
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
55
72
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
56
73
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
57
74
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
58
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
59
|
-
|
75
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
76
|
+
SOFTWARE.
|
data/Rakefile
CHANGED
@@ -1,43 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
|
2
3
|
require 'rubygems'
|
3
|
-
|
4
4
|
require 'hoe'
|
5
|
-
require 'rake'
|
6
|
-
require 'rake/clean'
|
7
|
-
require 'rake/rdoctask'
|
8
|
-
require 'spec/rake/spectask'
|
9
|
-
|
10
|
-
require 'lib/ascii85.rb'
|
11
|
-
|
12
|
-
|
13
|
-
# rspec
|
14
|
-
|
15
|
-
desc "Run specs"
|
16
|
-
Spec::Rake::SpecTask.new do |t|
|
17
|
-
t.spec_opts = ["--color"]
|
18
|
-
end
|
19
|
-
|
20
|
-
desc "Show specdoc"
|
21
|
-
Spec::Rake::SpecTask.new('specdoc') do |t|
|
22
|
-
t.spec_opts = ["--color", "--format=specdoc"]
|
23
|
-
end
|
24
5
|
|
6
|
+
Hoe.spec 'Ascii85' do
|
25
7
|
|
26
|
-
|
8
|
+
developer \
|
9
|
+
"Johannes Holzfuß",
|
10
|
+
"Drangon@gmx.de"
|
27
11
|
|
28
|
-
|
29
|
-
|
30
|
-
p.email = "Drangon@gmx.de"
|
31
|
-
p.summary = "Ascii85 encoder/decoder"
|
12
|
+
summary
|
13
|
+
"Ascii85 encoder/decoder"
|
32
14
|
|
33
|
-
|
15
|
+
description
|
16
|
+
"Ascii85 provides methods to encode/decode Adobe's binary-to-text encoding"
|
17
|
+
"of the same name."
|
34
18
|
|
35
|
-
|
19
|
+
self.url =
|
20
|
+
["http://ascii85.rubyforge.org", "http://github.com/drangon/ascii85gem"]
|
36
21
|
|
37
|
-
|
38
|
-
p.test_globs = "spec/ascii85_spec.rb"
|
22
|
+
self.testlib = "spec"
|
39
23
|
end
|
40
|
-
|
41
|
-
|
42
|
-
# default task is spec
|
43
|
-
task :default => :spec
|
data/bin/ascii85
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
#
|
5
|
+
# A simple command-line tool to de- and encode Ascii85, modeled after `base64`
|
6
|
+
# from the GNU Coreutils.
|
7
|
+
#
|
8
|
+
|
9
|
+
|
10
|
+
require "optparse"
|
11
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'ascii85')
|
12
|
+
|
13
|
+
@options = {
|
14
|
+
:wrap => 80,
|
15
|
+
:decode => false
|
16
|
+
}
|
17
|
+
|
18
|
+
ARGV.options do |opts|
|
19
|
+
opts.banner = "Usage: #{File.basename($PROGRAM_NAME)} [OPTIONS] [FILE]\n" +
|
20
|
+
"Encodes or decodes FILE or STDIN using Ascii85 and write to STDOUT."
|
21
|
+
|
22
|
+
|
23
|
+
opts.on( "-w", "--wrap COLUMN", Integer,
|
24
|
+
"Wrap lines at COLUMN. Default is 80, use 0 for no wrapping") do |opt|
|
25
|
+
|
26
|
+
@options[:wrap] = opt.abs
|
27
|
+
@options[:wrap] = false if opt.zero?
|
28
|
+
end
|
29
|
+
|
30
|
+
opts.on( "-d", "--decode", "Decode the input") do
|
31
|
+
@options[:decode] = true
|
32
|
+
end
|
33
|
+
|
34
|
+
opts.on( "-h", "--help", "Display this help and exit") do
|
35
|
+
puts opts
|
36
|
+
exit
|
37
|
+
end
|
38
|
+
|
39
|
+
opts.on( "--version", "Output version information") do |opt|
|
40
|
+
puts "Ascii85 v#{Ascii85::VERSION},\nwritten by Johannes Holzfuß"
|
41
|
+
exit
|
42
|
+
end
|
43
|
+
|
44
|
+
remaining_args = opts.parse!
|
45
|
+
|
46
|
+
case remaining_args.size
|
47
|
+
when 0
|
48
|
+
@options[:file] = '-'
|
49
|
+
when 1
|
50
|
+
@options[:file] = remaining_args.first
|
51
|
+
else
|
52
|
+
abort "Superfluous operand(s): \"#{remaining_args.join('", "')}\""
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
if @options[:file] == '-'
|
58
|
+
$stdin.binmode
|
59
|
+
@input = $stdin.read
|
60
|
+
else
|
61
|
+
unless File.exists?(@options[:file])
|
62
|
+
abort "File not found: \"#{@options[:file]}\""
|
63
|
+
end
|
64
|
+
|
65
|
+
unless File.readable_real?(@options[:file])
|
66
|
+
abort "File is not readable: \"#{@options[:file]}\""
|
67
|
+
end
|
68
|
+
|
69
|
+
File.open(@options[:file], 'rb') do |f|
|
70
|
+
@input = f.read
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
if @options[:decode]
|
75
|
+
begin
|
76
|
+
print Ascii85::decode(@input)
|
77
|
+
rescue Ascii85::DecodingError => error
|
78
|
+
abort "Decoding Error: #{error.message.to_s}"
|
79
|
+
end
|
80
|
+
else
|
81
|
+
print Ascii85::encode(@input, @options[:wrap])
|
82
|
+
end
|
data/lib/ascii85.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
1
4
|
#
|
2
5
|
# Ascii85 is an implementation of Adobe's binary-to-text encoding of the same
|
3
6
|
# name in pure Ruby.
|
@@ -12,13 +15,13 @@
|
|
12
15
|
|
13
16
|
module Ascii85
|
14
17
|
# The gem version number
|
15
|
-
VERSION = '0.
|
18
|
+
VERSION = '1.0.0' # :nodoc:
|
16
19
|
|
17
20
|
#
|
18
|
-
# Encodes the given String as Ascii85.
|
21
|
+
# Encodes the bytes of the given String as Ascii85.
|
19
22
|
#
|
20
|
-
# If +wrap_lines+ evaluates to +false+, the output will be returned as
|
21
|
-
# single long line. Otherwise #encode formats the output into lines of
|
23
|
+
# If +wrap_lines+ evaluates to +false+, the output will be returned as
|
24
|
+
# a single long line. Otherwise #encode formats the output into lines of
|
22
25
|
# length +wrap_lines+ (minimum is 2).
|
23
26
|
#
|
24
27
|
# Ascii85::encode("Ruby")
|
@@ -36,13 +39,21 @@ module Ascii85
|
|
36
39
|
#
|
37
40
|
def self.encode(str, wrap_lines = 80)
|
38
41
|
|
39
|
-
|
42
|
+
to_encode = str.to_s
|
43
|
+
return '' if to_encode.empty?
|
44
|
+
|
45
|
+
# Deal with multi-byte encodings
|
46
|
+
if to_encode.methods.include?(:bytesize)
|
47
|
+
input_size = to_encode.bytesize
|
48
|
+
else
|
49
|
+
input_size = to_encode.size
|
50
|
+
end
|
40
51
|
|
41
52
|
# Compute number of \0s to pad the message with (0..3)
|
42
|
-
padding_length = (-
|
53
|
+
padding_length = (-input_size) % 4
|
43
54
|
|
44
55
|
# Extract big-endian integers
|
45
|
-
tuples = (
|
56
|
+
tuples = (to_encode + ("\0" * padding_length)).unpack('N*')
|
46
57
|
|
47
58
|
# Encode
|
48
59
|
tuples.map! do |tuple|
|
@@ -51,7 +62,7 @@ module Ascii85
|
|
51
62
|
else
|
52
63
|
tmp = ""
|
53
64
|
5.times do
|
54
|
-
tmp
|
65
|
+
tmp << ((tuple % 85) + 33).chr
|
55
66
|
tuple /= 85
|
56
67
|
end
|
57
68
|
tmp.reverse
|
@@ -66,12 +77,9 @@ module Ascii85
|
|
66
77
|
# Cut off the padding
|
67
78
|
tuples[-1] = tuples[-1][0..(4 - padding_length)]
|
68
79
|
|
69
|
-
#
|
70
|
-
result = '<~' + tuples.join
|
71
|
-
|
72
|
-
# If we don't need to wrap the lines to a certain length, add ~> and return
|
80
|
+
# If we don't need to wrap the lines, add delimiters and return
|
73
81
|
if (!wrap_lines)
|
74
|
-
return
|
82
|
+
return '<~' + tuples.join + '~>'
|
75
83
|
end
|
76
84
|
|
77
85
|
# Otherwise we wrap the lines
|
@@ -79,15 +87,17 @@ module Ascii85
|
|
79
87
|
line_length = [2, wrap_lines.to_i].max
|
80
88
|
|
81
89
|
wrapped = []
|
82
|
-
|
83
|
-
|
90
|
+
to_wrap = '<~' + tuples.join
|
91
|
+
|
92
|
+
0.step(to_wrap.length, line_length) do |index|
|
93
|
+
wrapped << to_wrap.slice(index, line_length)
|
84
94
|
end
|
85
95
|
|
86
|
-
# Add end-marker
|
96
|
+
# Add end-marker – on a new line if necessary
|
87
97
|
if (wrapped.last.length + 2) > line_length
|
88
98
|
wrapped << '~>'
|
89
99
|
else
|
90
|
-
wrapped[-1]
|
100
|
+
wrapped[-1] << '~>'
|
91
101
|
end
|
92
102
|
|
93
103
|
return wrapped.join("\n")
|
@@ -96,8 +106,9 @@ module Ascii85
|
|
96
106
|
#
|
97
107
|
# Searches through +str+ and decodes the _first_ Ascii85-String found.
|
98
108
|
#
|
99
|
-
# #decode expects an Ascii85-encoded String enclosed in <~ and
|
100
|
-
# ignore all characters outside these markers.
|
109
|
+
# #decode expects an Ascii85-encoded String enclosed in <~ and ~> — it
|
110
|
+
# will ignore all characters outside these markers. The returned strings are
|
111
|
+
# always encoded as ASCII-8BIT.
|
101
112
|
#
|
102
113
|
# Ascii85::decode("<~;KZGo~>")
|
103
114
|
# => "Ruby"
|
@@ -113,15 +124,32 @@ module Ascii85
|
|
113
124
|
#
|
114
125
|
def self.decode(str)
|
115
126
|
|
116
|
-
|
117
|
-
input = str.to_s.match(/<~.*?~>/mn)
|
127
|
+
input = str.to_s
|
118
128
|
|
119
|
-
|
129
|
+
# Try to compile the regular expression for finding the input between
|
130
|
+
# the <~ and ~> delimiters. In order to work properly with different
|
131
|
+
# input encodings, the RegExp itself is re-encoded to the input encoding
|
132
|
+
# if possible. Thanks to Myrddin Emrys for suggesting this approach
|
133
|
+
# (http://is.gd/5x18O)
|
134
|
+
begin
|
135
|
+
regex = "<~(.*?)?~>"
|
136
|
+
|
137
|
+
if regex.methods.include?(:encode)
|
138
|
+
regex = regex.encode(input.encoding)
|
139
|
+
end
|
140
|
+
regex = Regexp.compile(regex, Regexp::MULTILINE)
|
141
|
+
|
142
|
+
# Find the actual data to be decoded
|
143
|
+
input = input.match(regex)
|
120
144
|
|
121
|
-
|
122
|
-
|
145
|
+
rescue EncodingError
|
146
|
+
raise ArgumentError, "Incompatible input encoding: #{str.encoding.inspect}"
|
147
|
+
end
|
148
|
+
|
149
|
+
return '' if input.nil?
|
123
150
|
|
124
|
-
|
151
|
+
# Get the matched data as String
|
152
|
+
input = input.captures.first
|
125
153
|
|
126
154
|
# Decode
|
127
155
|
result = []
|
@@ -182,9 +210,9 @@ module Ascii85
|
|
182
210
|
count -= 1
|
183
211
|
word += 85**(4 - count)
|
184
212
|
|
185
|
-
result
|
186
|
-
result
|
187
|
-
result
|
213
|
+
result << ((word >> 24) & 255).chr if count >= 1
|
214
|
+
result << ((word >> 16) & 255).chr if count >= 2
|
215
|
+
result << ((word >> 8) & 255).chr if count == 3
|
188
216
|
end
|
189
217
|
|
190
218
|
return result
|
data/spec/ascii85_spec.rb
CHANGED
@@ -6,6 +6,10 @@ require 'ascii85'
|
|
6
6
|
|
7
7
|
describe Ascii85 do
|
8
8
|
|
9
|
+
before( :all ) do
|
10
|
+
@string_has_encoding = "String".methods.include?(:encoding)
|
11
|
+
end
|
12
|
+
|
9
13
|
TEST_CASES = {
|
10
14
|
|
11
15
|
"" => "",
|
@@ -61,6 +65,15 @@ describe Ascii85 do
|
|
61
65
|
end
|
62
66
|
end
|
63
67
|
|
68
|
+
it "[Ruby 1.9] should encode Strings in different encodings correctly" do
|
69
|
+
if @string_has_encoding
|
70
|
+
input_EUC_JP = 'どうもありがとうミスターロボット'.encode('EUC-JP')
|
71
|
+
input_Ascii85 = input_EUC_JP.force_encoding('ASCII-8BIT')
|
72
|
+
|
73
|
+
Ascii85::encode(input_EUC_JP).should == Ascii85::encode(input_Ascii85)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
64
77
|
it "should produce output lines no longer than specified" do
|
65
78
|
test_str = '0123456789' * 30
|
66
79
|
|
@@ -105,13 +118,40 @@ describe Ascii85 do
|
|
105
118
|
|
106
119
|
it "should decode all specified test-cases correctly" do
|
107
120
|
TEST_CASES.each_pair do |decoded, input|
|
108
|
-
|
121
|
+
if @string_has_encoding
|
122
|
+
Ascii85::decode(input).should == decoded.dup.force_encoding('ASCII-8BIT')
|
123
|
+
else
|
124
|
+
Ascii85::decode(input).should == decoded
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
it "[Ruby 1.9] should accept valid input in encodings other than the default" do
|
130
|
+
if @string_has_encoding
|
131
|
+
input = "Ragnarök τέχνη русский язык I ♥ Ruby"
|
132
|
+
input_ascii85 = Ascii85::encode(input)
|
133
|
+
|
134
|
+
# Try to encode input_ascii85 in all possible encodings and see if we
|
135
|
+
# do the right thing in #decode.
|
136
|
+
Encoding.list.each do |encoding|
|
137
|
+
next if encoding.dummy?
|
138
|
+
|
139
|
+
to_test = input_ascii85.encode(encoding)
|
140
|
+
|
141
|
+
lambda {
|
142
|
+
Ascii85::decode(to_test).force_encoding('UTF-8').should == input
|
143
|
+
}.should_not raise_error
|
144
|
+
end
|
145
|
+
|
109
146
|
end
|
110
147
|
end
|
111
148
|
|
112
|
-
it "should
|
149
|
+
it "should only process data within delimiters" do
|
113
150
|
Ascii85::decode("Doesn't contain delimiters").should == ''
|
151
|
+
Ascii85::decode("<~~>").should == ''
|
114
152
|
Ascii85::decode("FooBar<~z~>BazQux").should == ("\0" * 4)
|
153
|
+
Ascii85::decode("<~;KZGo~><~z~>").should == "Ruby"
|
154
|
+
Ascii85::decode("foo~>bar<~baz").should == ''
|
115
155
|
end
|
116
156
|
|
117
157
|
it "should ignore whitespace" do
|
@@ -119,6 +159,12 @@ describe Ascii85 do
|
|
119
159
|
decoded.should == 'Antidisestablishmentarianism'
|
120
160
|
end
|
121
161
|
|
162
|
+
it "[Ruby 1.9] should return ASCII-8BIT encoded strings" do
|
163
|
+
if @string_has_encoding
|
164
|
+
Ascii85::decode("<~;KZGo~>").encoding.name.should == "ASCII-8BIT"
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
122
168
|
describe "Error conditions" do
|
123
169
|
|
124
170
|
it "should raise DecodingError if it encounters a word >= 2**32" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Ascii85
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Johannes Holzfu\xC3\x9F"
|
@@ -29,7 +29,7 @@ cert_chain:
|
|
29
29
|
5FGhYN16QZS8VKLApBtxxP9XmwFASMyJLNizTN2q6hCCy/MjoTzHWzodPaWm0Q==
|
30
30
|
-----END CERTIFICATE-----
|
31
31
|
|
32
|
-
date: 2009-
|
32
|
+
date: 2009-12-25 00:00:00 +01:00
|
33
33
|
default_executable:
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
@@ -40,12 +40,18 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
43
|
+
version: 2.4.0
|
44
44
|
version:
|
45
|
-
description:
|
46
|
-
|
47
|
-
|
48
|
-
|
45
|
+
description: |-
|
46
|
+
Ascii85 is a simple gem that provides methods for encoding/decoding Adobe's
|
47
|
+
binary-to-text encoding of the same name.
|
48
|
+
|
49
|
+
See http://www.adobe.com/products/postscript/pdfs/PLRM.pdf page 131 and
|
50
|
+
http://en.wikipedia.org/wiki/Ascii85 for more information about the format.
|
51
|
+
email:
|
52
|
+
- Drangon@gmx.de
|
53
|
+
executables:
|
54
|
+
- ascii85
|
49
55
|
extensions: []
|
50
56
|
|
51
57
|
extra_rdoc_files:
|
@@ -57,10 +63,13 @@ files:
|
|
57
63
|
- Manifest.txt
|
58
64
|
- README.txt
|
59
65
|
- Rakefile
|
66
|
+
- bin/ascii85
|
60
67
|
- lib/ascii85.rb
|
61
68
|
- spec/ascii85_spec.rb
|
62
69
|
has_rdoc: true
|
63
70
|
homepage: http://ascii85.rubyforge.org
|
71
|
+
licenses: []
|
72
|
+
|
64
73
|
post_install_message:
|
65
74
|
rdoc_options:
|
66
75
|
- --main
|
@@ -82,9 +91,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
91
|
requirements: []
|
83
92
|
|
84
93
|
rubyforge_project: ascii85
|
85
|
-
rubygems_version: 1.3.
|
94
|
+
rubygems_version: 1.3.5
|
86
95
|
signing_key:
|
87
|
-
specification_version:
|
88
|
-
summary: Ascii85
|
89
|
-
test_files:
|
90
|
-
|
96
|
+
specification_version: 3
|
97
|
+
summary: Ascii85 is a simple gem that provides methods for encoding/decoding Adobe's binary-to-text encoding of the same name
|
98
|
+
test_files: []
|
99
|
+
|
metadata.gz.sig
CHANGED
Binary file
|