require 'cgi'
lines=[]
last_line=nil
trace=nil
IO.foreach(ARGV[0]) { |line|
if line=~/^ / then
trace||=[]
trace << line
elsif line=~/^stack backtrace/ then
trace=nil
else
lines << [last_line,trace] unless last_line.nil?
trace=nil
last_line=line
end
}
lines << [last_line,trace] unless last_line.nil?
puts <<EOF
<style type="text/css">
input, pre { display: none }
input:checked + pre { display: block }
</style>
EOF
i=0
lines.each { |line,trace|
vis=(trace.nil?) ? ' style="visibility:hidden"' : ""
puts "<label for=\"line#{i}\" style=\"font-family:monospace\"><span#{vis}>+ </span>#{CGI.escapeHTML(line.strip)}</label><br>"
puts "<input id=\"line#{i}\" type=\"checkbox\"><pre>#{CGI.escapeHTML(trace*"")}</pre>" unless trace.nil?
i+=1
}