Revert "adding trollop.rb, but still not supported"
[zip-doc.git] / zutil.rb
blob7dead6230d2c48affccd2eb2ce7991329ffb6384
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 require 'digest'
11 module ZUtil
12   def unpack(string)
13     return string.unpack('H40V4' * (string.size/36))
14   end  
16   def pack(sha1, bstart, bsize, start, size)
17     return [sha1, bstart, bsize, start, size].pack('H40V4')
18   end
20   def sha1subset(four, no = 4)
21     four[0..(no-1)].to_i(16)                                                  
22   end
23   
24   def sha1_w_sub(string, no = 4)
25     sha1 = Digest::SHA1.hexdigest( string )
26     firstfour = sha1subset( sha1, no )
27     return sha1, firstfour
28   end
29     
30   def writeloc(file, text, offset)
31     file.seek offset
32     file.write text
33   end
35   def readloc(file, size, offset) 
36     file.seek(offset)
37     file.read(size)
38   end
40   def strip_whitespace(txt)
41     return txt.gsub(/\t/, " ").gsub('  ',' ').gsub("\n", '') 
42   end
44   # from http://railsruby.blogspot.com/2006/07/url-escape-and-url-unescape.html
45   def url_unescape(string)
46     string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
47       [$1.delete('%')].pack('H*')
48     end
49   end                           
50              
51   def npp(num)
52     sprintf("%.2f" % num)
53   end
55   module_function :unpack, :pack, :sha1subset, :writeloc, :readloc, :strip_whitespace
56   module_function :url_unescape, :npp, :sha1_w_sub
57 end
59 class String
60   def pop(number = 1)
61     slice!(-number..-1)
62   end
63 end