complete refactoring of zarchive and zdump
[zip-doc.git] / zutil.rb
blob8e27d391c7f40511dd5b18deaf07998332c26560
1 # Part of the zip-doc suite
2 # By Stian Haklev (shaklev@gmail.com), 2007
3 # Released under MIT and GPL licenses
5 # Just a few utility functions that are used in several places
6 # I started out with having these as extensions of String and IO, but 
7 # I guess that's not very nice in a library? I keep the pop though -
8 # cannot believe it isn't standard.
10 module ZUtil
11   def unpack(string)
12     return string.unpack('H32V4' * (string.size/32))
13   end  
15   def pack(md5, bstart, bsize, start, size)
16     return [md5, bstart, bsize, start, size].pack('H32V4')
17   end
19   def md5subset(four)
20     sprintf("%d", "0x" + four[0..3]).to_i                                                  
21   end                                                        
22   
23   def md5_w_sub(string)
24     md5 = MD5::md5( string ).hexdigest
25     firstfour = md5subset( md5 )
26     return md5, firstfour
27   end
28     
29   def writeloc(file, text, offset)
30     file.seek offset
31     file.write text
32   end
34   def readloc(file, size, offset) 
35     file.seek(offset)
36     file.read(size)
37   end
39   def strip_whitespace(txt)
40     return txt.gsub(/\t/, " ").gsub('  ',' ').gsub("\n", '') 
41   end
43   # from http://railsruby.blogspot.com/2006/07/url-escape-and-url-unescape.html
44   def url_unescape(string)
45     string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
46       [$1.delete('%')].pack('H*')
47     end
48   end                           
49              
50   def npp(num)
51     sprintf("%.2f" % num)
52   end
54   module_function :unpack, :pack, :md5subset, :writeloc, :readloc, :strip_whitespace
55   module_function :url_unescape, :npp
56 end
58 class String
59   def pop(number = 1)
60     slice!(-number..-1)
61   end
62 end