1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/lib/base64.rb
matz 3db12e8b23 Initial revision
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1998-01-16 12:13:05 +00:00

54 lines
1.1 KiB
Ruby

def decode64(str)
string = ''
for line in str.split("\n")
line.delete!('^A-Za-z0-9+/') # remove non-base64 chars
line.tr!('A-Za-z0-9+/', ' -_') # convert to uuencoded format
len = ["#{32 + line.length * 3 / 4}"].pack("c")
# compute length byte
string += "#{len}#{line}".unpack("u") # uudecode and concatenate
end
return string
end
def j2e(str)
while str =~ /\033\$B([^\033]*)\033\(B/
s = $1
pre, post = $`, $'
s.gsub!(/./) { |ch|
(ch[0]|0x80).chr
}
str = pre + s + post
end
# str.gsub!(/\033\$B([^\033]*)\033\(B/) {
# $1.gsub!(/./) { |ch|
# (ch[0]|0x80).chr
# }
# }
str
end
def decode_b(str)
str.gsub!(/=\?ISO-2022-JP\?B\?([!->@-~]+)\?=/i) {
decode64($1)
}
str.gsub!(/\n/, ' ')
str.gsub!(/\0/, '')
j2e(str)
end
def encode64(bin)
encode = ""
pad = 0
[bin].pack("u").each do |uu|
len = (2 + (uu[0] - 32)* 4) / 3
encode << uu[1, len].tr('` -_', 'AA-Za-z0-9+/')
pad += uu.length - 2 - len
end
encode + "=" * (pad % 3)
end
def b64encode(bin, len = 60)
encode64(bin).scan(/.{1,#{len}}/o) do
print $&, "\n"
end
end