#!/usr/bin/env ruby $:.push('/home/hamaji/local/lib/ruby/site_ruby/1.8') $:.push('/home/hamaji/local/lib/ruby/site_ruby/1.8/i386-freebsd4') require 'time' require 'depot' require 'villa' require 'nkf' require 'cgi' require 'reform' cgi = CGI.new q = cgi['q'].to_s print "Content-Type: text/html; charset=UTF-8\n\n" def dump_result(rlist, mathfile = "math.db", excludemap = Hash.new) mdb = nil iddb = nil begin mdb = Villa::new(mathfile) iddb = Depot::new("id.db") msg = '' ret = Array.new r = rlist.join('') mdb.curjump(r, Villa::JFORWARD) while true k = mdb.curkey i = k.index(r) break if !i || i != 0 v = mdb.curval.split(',') per = r.size * 100 / (v.shift.to_i + k.size) ret <<= [per, v.shift] mdb.curnext end if (ret.size == 0) msg = "not found" end if (msg.empty?) retmap = Hash.new ret.each do |f| per = f[0] cnt = f[1] info = iddb.get(cnt).split(',') site = info.shift # id = info.shift # time = Time.at(info.shift.to_i) title = info.shift formula = info.join(',') ninfo = [ per, cnt, site, title, formula ] # ninfo = [ per, cnt, site, id, time, title, formula ] if (!excludemap.key?(title)) af = formula.split(/(?:=|\\equiv)/) raf = af.collect {|p| reform(p.dup).join('')} if (raf.size > 1 && raf.include?(r)) retmap[reform(formula.dup).join('')] = formula end end end print "
#{msg}\n) end ensure mdb.close if mdb iddb.close if iddb end end begin arg = q.dup msg = nil if (arg.size < 3) msg = 'too short' elsif ((r = reform(arg)).size < 2) msg = 'too short' else print %Q(
'#{q}' => '#{r.join(' ')}') rmap = dump_result(r) # if (rmap && ri = intersect(r)) # print %Q(
'#{q}' => '#{ri.join(' ')}') # dump_result(ri, "int.db", rmap) # end end if (msg) print %Q(
#{q} : #{msg}\n) end rescue print "
\n" print CGI.escapeHTML("#{$!.to_s}\n") print CGI.escapeHTML("#{$!.backtrace.join("\n")}\n") print "\n" ensure end