From b89f4520e502e4e100c3d56216305eaf870243b6 Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 21 Jan 2004 07:10:41 +0000 Subject: [PATCH] * lib/base64.rb: enclosed in a module. [ruby-core:02285] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5518 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++ lib/base64.rb | 155 ++++++++++++++++++++++++++++---------------------- 2 files changed, 92 insertions(+), 67 deletions(-) diff --git a/ChangeLog b/ChangeLog index df18214c4b..b724e05c8c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Wed Jan 21 16:10:36 2004 Nobuyoshi Nakada + + * lib/base64.rb: enclosed in a module. [ruby-core:02285] + Wed Jan 21 16:01:26 2004 Nobuyoshi Nakada * ext/digest/rmd160/extconf.rb: have_library appends found library. diff --git a/lib/base64.rb b/lib/base64.rb index 0e14dde9f7..d4d33d0bf0 100644 --- a/lib/base64.rb +++ b/lib/base64.rb @@ -12,73 +12,94 @@ require "kconv" # puts plain +module Base64 + module_function -# Returns the Base64-decoded version of \obj{str}. -# -# require 'base64' -# str = 'VGhpcyBpcyBsaW5lIG9uZQpUaGlzIG' + -# 'lzIGxpbmUgdHdvClRoaXMgaXMgbGlu' + -# 'ZSB0aHJlZQpBbmQgc28gb24uLi4K' -# puts decode64(str) -# -# Generates: -# -# This is line one -# This is line two -# This is line three -# And so on... + # Returns the Base64-decoded version of \obj{str}. + # + # require 'base64' + # str = 'VGhpcyBpcyBsaW5lIG9uZQpUaGlzIG' + + # 'lzIGxpbmUgdHdvClRoaXMgaXMgbGlu' + + # 'ZSB0aHJlZQpBbmQgc28gb24uLi4K' + # puts decode64(str) + # + # Generates: + # + # This is line one + # This is line two + # This is line three + # And so on... -def decode64(str) - str.unpack("m")[0] -end - - -# Decodes text formatted using a subset of RFC2047 (the one used for -# mime-encoding mail headers). Only supports an encoding type of 'b' -# (base 64), and only supports the character sets ISO-2022-JP and -# SHIFT_JIS (so the only two encoded word sequences recognized are -# =?ISO-2022-JP?B?...= and -# =?SHIFT_JIS?B?...=). Recognition of these sequences is case -# insensitive. - -def decode_b(str) - str.gsub!(/=\?ISO-2022-JP\?B\?([!->@-~]+)\?=/i) { - decode64($1) - } - str = Kconv::toeuc(str) - str.gsub!(/=\?SHIFT_JIS\?B\?([!->@-~]+)\?=/i) { - decode64($1) - } - str = Kconv::toeuc(str) - str.gsub!(/\n/, ' ') - str.gsub!(/\0/, '') - str -end - -# Returns the Base64-encoded version of \obj{str}. -# -# require 'base64' -# str = "Once\nupon\na\ntime." #!sh! -# enc = encode64(str) -# decode64(enc) - -def encode64(bin) - [bin].pack("m") -end - -# Prints the Base64 encoded version of _bin_ (a +String+) in lines of -# _len_ (default 60) characters. -# -# require 'base64' -# b64encode("Now is the time for all good coders\nto learn Ruby") -# -# Generates -# -# Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g -# UnVieQ== - -def b64encode(bin, len = 60) - encode64(bin).scan(/.{1,#{len}}/o) do - print $&, "\n" + def decode64(str) + str.unpack("m")[0] end -end + + + # Decodes text formatted using a subset of RFC2047 (the one used for + # mime-encoding mail headers). Only supports an encoding type of 'b' + # (base 64), and only supports the character sets ISO-2022-JP and + # SHIFT_JIS (so the only two encoded word sequences recognized are + # =?ISO-2022-JP?B?...= and + # =?SHIFT_JIS?B?...=). Recognition of these sequences is case + # insensitive. + + def decode_b(str) + str.gsub!(/=\?ISO-2022-JP\?B\?([!->@-~]+)\?=/i) { + decode64($1) + } + str = Kconv::toeuc(str) + str.gsub!(/=\?SHIFT_JIS\?B\?([!->@-~]+)\?=/i) { + decode64($1) + } + str = Kconv::toeuc(str) + str.gsub!(/\n/, ' ') + str.gsub!(/\0/, '') + str + end + + # Returns the Base64-encoded version of \obj{str}. + # + # require 'base64' + # str = "Once\nupon\na\ntime." #!sh! + # enc = encode64(str) + # decode64(enc) + + def encode64(bin) + [bin].pack("m") + end + + # Prints the Base64 encoded version of _bin_ (a +String+) in lines of + # _len_ (default 60) characters. + # + # require 'base64' + # b64encode("Now is the time for all good coders\nto learn Ruby") + # + # Generates + # + # Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g + # UnVieQ== + + def b64encode(bin, len = 60) + encode64(bin).scan(/.{1,#{len}}/o) do + print $&, "\n" + end + end + + module Deprecated + include Base64 + + def _deprecated_base64(*args) + m0, m1 = caller(0) + m = m0[/\`(.*?)\'\z/, 1] + warn("#{m1}: #{m} is deprecated; use Base64.#{m} instead") + super + end + dep = instance_method(:_deprecated_base64) + remove_method(:_deprecated_base64) + for m in Base64.private_instance_methods(false) + define_method(m, dep) + end + end +end + +include Base64::Deprecated