2 # Web server for viewing zdump files.
3 # By Stian Haklev (shaklev@gmail.com), 2007
4 # Released under MIT and GPL licenses
7 # ruby mongrel-web.rb <zdumpfile> <path-prefix>
9 %w(cgi rubygems mongrel zarchive htmlshrinker).each {|x| require x}
11 # from http://railsruby.blogspot.com/2006/07/url-escape-and-url-unescape.html
12 def url_unescape(string)
13 string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
14 [$1.delete('%')].pack('H*')
18 Archive = ZArchive.new(ARGV[0])
19 template = Archive.get_article('__Zdump_Template__')
20 Htmlshrink = HTMLExpander.new(template, Archive, Basename)
22 class SimpleHandler < Mongrel::HttpHandler
23 def process(req, resp)
25 url = url_unescape(req.params['PATH_INFO'][1..-1])
26 url = "index.html" if url.empty?
29 if url.match(/(raw|skins|images)\/(.*?)$/)
30 url = Regexp::last_match[0]
34 text = Archive.get_article(url)
36 line1, line2 = text.split("\n",2)
37 text = line2 if line1 == 'Unnamed'
42 txt = Archive.get_article(url)
43 resp.write txt.nil? ? "Sorry, article #{url} not found" : Htmlshrink.uncompress(txt)
45 puts "Got #{url} in #{"%2.3f" % (Time.now - t)} seconds."
50 h = Mongrel::HttpServer.new("0.0.0.0", "2042")
51 h.register("/", SimpleHandler.new)
53 puts "Webserver started, serving at http://localhost:2042/"