summaryrefslogtreecommitdiff
path: root/lib/base64.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/base64.rb')
-rw-r--r--lib/base64.rb55
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/base64.rb b/lib/base64.rb
new file mode 100644
index 0000000000..a6bf1adf92
--- /dev/null
+++ b/lib/base64.rb
@@ -0,0 +1,55 @@
+def decode64(str)
+ e = -1;
+ c = ","
+ string=''
+ for line in str.split("\n")
+ line.sub!(/=+$/, '')
+ line.tr! 'A-Za-z0-9+/', "\000-\377"
+ line.each_byte { |ch|
+ n +=1
+ e +=1
+ if e==0
+ c = ch << 2
+ elsif e==1
+ c |= ch >>4
+ string += [c].pack('c')
+ c = ch << 4
+ elsif e == 2
+ c |= ch >> 2
+ string += [c].pack('c');
+ c = ch << 6
+ elsif e==3
+ c |= ch
+ string += [c].pack('c')
+ e = -1
+ end
+ }
+ 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\?([!->@-~]+)\?=/) {
+ decode64($1)
+ }
+ str.gsub!(/\n/, ' ')
+ str.gsub!(/\0/, '')
+ j2e(str)
+end