2 # Web server for viewing zdump files.
3 # By Stian Haklev (shaklev@gmail.com), 2007
4 # Released under MIT and GPL licenses
6 # Currently in disarray, tried to get it to work with rubyscript2exe
9 %w(cgi rubygems mongrel zarchive htmlshrinker gui tk tk/root tk/frame tk/bindtag rubyscript2exe).each {|x| require x}
11 # from http://railsruby.blogspot.com/2006/07/url-escape-and-url-unescape.html
12 def url_escape(string)
13 string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do
14 '%' + $1.unpack('H2' * $1.size).join('%').upcase
18 def url_unescape(string)
19 string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
20 [$1.delete('%')].pack('H*')
25 dumpfile = File.join(RUBYSCRIPT2EXE.exedir, "..", 'Resources/archive')
26 extrafiles = File.join(RUBYSCRIPT2EXE.exedir, "..", 'Resources/extrafiles')
28 Archive = ZArchive.new(dumpfile)
29 Htmlshrink = HTMLShrinker.new(extrafiles)
31 class SimpleHandler < Mongrel::HttpHandler
32 def process(req, resp)
34 url = url_unescape(req.params['PATH_INFO'][1..-1])
35 return if url =~ /(jpg|png|gif)$/
36 url = url.gsub("%7E", "~")
37 url = "#{Basename}/index.html" if url == "/"
38 url = Basename + url unless url[0..(Basename.size-1)] == Basename
39 txt = Archive.get_article(url)
41 resp.write "Sorry, article not found"
43 resp.write Htmlshrink.uncompress(txt)
45 puts "Served #{url} in #{Time.now - t} seconds."
50 H = Mongrel::HttpServer.new("0.0.0.0", "2042")
51 H.register("/", SimpleHandler.new)
52 H.register("/files", Mongrel::DirHandler.new("."))
53 trap("INT"){ H.stop; TkRoot.destroy; exit(0) }
56 puts "Webserver started, serving at http://localhost:2042/"