2 %w(cgi rubygems mongrel zarchive htmlshrinker).each {|x| require x}
4 # from http://railsruby.blogspot.com/2006/07/url-escape-and-url-unescape.html
5 def url_unescape(string)
6 string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
7 [$1.delete('%')].pack('H*')
11 Archive = ZArchive.new(ARGV[0])
12 template = Archive.get_article('__Zdump_Template__')
13 Basename = ARGV[1].nil? ? '' : ARGV[1]
14 Htmlshrink = HTMLExpander.new(template, Archive, Basename)
15 class SimpleHandler < Mongrel::HttpHandler
16 def process(req, resp)
18 url = url_unescape(req.params['PATH_INFO'][1..-1])
19 # return if url =~ /(jpg|png|gif)$/
20 url = "#{Basename}index.html" if url.empty?
21 url = Basename + url unless url[0..(Basename.size-1)] == Basename
24 if url.match(/(raw|skins|images)\/(.*?)$/)
25 url = Basename + Regexp::last_match[0]
26 resp.write Archive.get_article(url)
28 txt = Archive.get_article(url)
29 resp.write txt.nil? ? "Sorry, article not found" : Htmlshrink.uncompress(txt)
31 puts "Got #{url} in #{"%2.3f" % (Time.now - t)} seconds."
36 h = Mongrel::HttpServer.new("0.0.0.0", "2042")
37 h.register("/", SimpleHandler.new)
38 h.register("/raw", Mongrel::DirHandler.new("raw"))
39 h.register("/skins", Mongrel::DirHandler.new("skins"))
41 puts "Webserver started, serving at http://localhost:2042/"