source: extensions/gsdl-video/trunk/installed/cmdline/lib/ruby/1.8/base64.rb@ 18425

Last change on this file since 18425 was 18425, checked in by davidb, 15 years ago

Video extension to Greenstone

File size: 3.4 KB
Line 
1#
2# = base64.rb: methods for base64-encoding and -decoding stings
3#
4# Author:: Yukihiro Matsumoto
5# Documentation:: Dave Thomas and Gavin Sinclair
6#
7# Until Ruby 1.8.1, these methods were defined at the top-level. Now
8# they are in the Base64 module but included in the top-level, where
9# their usage is deprecated.
10#
11# See Base64 for documentation.
12#
13
14require "kconv"
15
16
17# The Base64 module provides for the encoding (#encode64) and decoding
18# (#decode64) of binary data using a Base64 representation.
19#
20# The following particular features are also provided:
21# - encode into lines of a given length (#b64encode)
22# - decode the special format specified in RFC2047 for the
23# representation of email headers (decode_b)
24#
25# == Example
26#
27# A simple encoding and decoding.
28#
29# require "base64"
30#
31# enc = Base64.encode64('Send reinforcements')
32# # -> "U2VuZCByZWluZm9yY2VtZW50cw==\n"
33# plain = Base64.decode64(enc)
34# # -> "Send reinforcements"
35#
36# The purpose of using base64 to encode data is that it translates any
37# binary data into purely printable characters. It is specified in
38# RFC 2045 (http://www.faqs.org/rfcs/rfc2045.html).
39
40module Base64
41 module_function
42
43 # Returns the Base64-decoded version of +str+.
44 #
45 # require 'base64'
46 # str = 'VGhpcyBpcyBsaW5lIG9uZQpUaGlzIG' +
47 # 'lzIGxpbmUgdHdvClRoaXMgaXMgbGlu' +
48 # 'ZSB0aHJlZQpBbmQgc28gb24uLi4K'
49 # puts Base64.decode64(str)
50 #
51 # <i>Generates:</i>
52 #
53 # This is line one
54 # This is line two
55 # This is line three
56 # And so on...
57
58 def decode64(str)
59 str.unpack("m")[0]
60 end
61
62
63 # Decodes text formatted using a subset of RFC2047 (the one used for
64 # mime-encoding mail headers).
65 #
66 # Only supports an encoding type of 'b' (base 64), and only supports
67 # the character sets ISO-2022-JP and SHIFT_JIS (so the only two
68 # encoded word sequences recognized are <tt>=?ISO-2022-JP?B?...=</tt> and
69 # <tt>=?SHIFT_JIS?B?...=</tt>). Recognition of these sequences is case
70 # insensitive.
71
72 def decode_b(str)
73 str.gsub!(/=\?ISO-2022-JP\?B\?([!->@-~]+)\?=/i) {
74 decode64($1)
75 }
76 str = Kconv::toeuc(str)
77 str.gsub!(/=\?SHIFT_JIS\?B\?([!->@-~]+)\?=/i) {
78 decode64($1)
79 }
80 str = Kconv::toeuc(str)
81 str.gsub!(/\n/, ' ')
82 str.gsub!(/\0/, '')
83 str
84 end
85
86 # Returns the Base64-encoded version of +str+.
87 #
88 # require 'base64'
89 # Base64.b64encode("Now is the time for all good coders\nto learn Ruby")
90 #
91 # <i>Generates:</i>
92 #
93 # Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g
94 # UnVieQ==
95
96 def encode64(bin)
97 [bin].pack("m")
98 end
99
100 # _Prints_ the Base64 encoded version of +bin+ (a +String+) in lines of
101 # +len+ (default 60) characters.
102 #
103 # require 'base64'
104 # data = "Now is the time for all good coders\nto learn Ruby"
105 # Base64.b64encode(data)
106 #
107 # <i>Generates:</i>
108 #
109 # Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g
110 # UnVieQ==
111
112 def b64encode(bin, len = 60)
113 encode64(bin).scan(/.{1,#{len}}/o) do
114 print $&, "\n"
115 end
116 end
117
118
119 module Deprecated # :nodoc:
120 include Base64
121
122 for m in Base64.private_instance_methods(false)
123 module_eval %{
124 def #{m}(*args)
125 warn("\#{caller(1)[0]}: #{m} is deprecated; use Base64.#{m} instead")
126 super
127 end
128 }
129 end
130 end
131end
132
133include Base64::Deprecated
Note: See TracBrowser for help on using the repository browser.