2 %w(cgi rubygems mongrel zarchive htmlshrinker gui tk tk/root tk/frame tk/bindtag rubyscript2exe).each {|x| require x}
4 # from http://railsruby.blogspot.com/2006/07/url-escape-and-url-unescape.html
6 string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do
7 '%' + $1.unpack('H2' * $1.size).join('%').upcase
11 def url_unescape(string)
12 string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
13 [$1.delete('%')].pack('H*')
18 dumpfile = File.join(RUBYSCRIPT2EXE.exedir, "..", 'Resources/archive')
19 extrafiles = File.join(RUBYSCRIPT2EXE.exedir, "..", 'Resources/extrafiles')
21 Archive = ZArchive.new(dumpfile)
22 Htmlshrink = HTMLShrinker.new(extrafiles)
24 class SimpleHandler < Mongrel::HttpHandler
25 def process(req, resp)
27 url = url_unescape(req.params['PATH_INFO'][1..-1])
28 return if url =~ /(jpg|png|gif)$/
29 url = url.gsub("%7E", "~")
30 url = "#{Basename}/index.html" if url == "/"
31 url = Basename + url unless url[0..(Basename.size-1)] == Basename
32 txt = Archive.get_article(url)
34 resp.write "Sorry, article not found"
36 resp.write Htmlshrink.uncompress(txt)
38 puts "Served #{url} in #{Time.now - t} seconds."
43 H = Mongrel::HttpServer.new("0.0.0.0", "2042")
44 H.register("/", SimpleHandler.new)
45 H.register("/files", Mongrel::DirHandler.new("."))
46 trap("INT"){ H.stop; TkRoot.destroy; exit(0) }
49 puts "Webserver started, serving at http://localhost:2042/"