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.
12 return string.unpack('H32V4' * (string.size/32))
15 def pack(md5, bstart, bsize, start, size)
16 return [md5, bstart, bsize, start, size].pack('H32V4')
20 sprintf("%d", "0x" + four[0..3]).to_i
24 md5 = MD5::md5( string ).hexdigest
25 firstfour = md5subset( md5 )
29 def writeloc(file, text, offset)
34 def readloc(file, size, offset)
39 def strip_whitespace(txt)
40 return txt.gsub(/\t/, " ").gsub(' ',' ').gsub("\n", '')
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*')
54 module_function :unpack, :pack, :md5subset, :writeloc, :readloc, :strip_whitespace
55 module_function :url_unescape, :npp