Adding option of bzip2 or zlib, marked in the file. Similarily, option of size of...
[zip-doc.git] / zutil.rb
blobe9136731ebb11d8ec73c62763e439746fbb227d6
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     sprintf("%d", "0x" + four[0..(no-1)]).to_i                                                  
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