Newer
Older
2019-madoka / root / textcode.rb
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
Encoding.default_external = 'utf-8'

require'cgi'
require'open3'
require'sqlite3'
require'timeout'
require'csv'
  
c = CGI.new(:accept_charset => "UTF-8")

begin
Timeout.timeout(0.1){
print"Content-type: text/html; charset=utf-8\n\n"

coderead = c["example"]
namae = c["name"]
ans = c["ans"].delete("\r")
newans = ans.strip

if /system|exec|open/ =~ coderead
  file = File.open("no.txt", "r")
  puts file.read
  file.close
  exit
end

cmd = "ruby -Ku -e '#{coderead}'"
o,e,s = Open3.capture3(cmd) #o,e,s = 実行結果、エラー文、プロセス?
newo = o.strip


print <<EOF
<DOCTYPE html>
  <head> 
    <meta charset=utf-8>
    <title>テキストエディタ読み込み</title>
    <link rel="stylesheet" type="text/css" href="root/editor.css">
    <style>
<!--
-->
    </style>
  </head>
  <body>

  <div class="mondai">
  <h1 class="sen1">結果画面</h1>
  </div>


EOF

puts("<div class=\"editor\">")
puts("<h1><span class=\"waku1\">入力したコード</span></h1>")
printf("<textarea name=\"example\" readonly=\"readonly\">%s</textarea>", coderead)
puts("</div>")

puts("<div class=\"ex\">")
puts("<h1><span class=\"waku1\">実行結果</span></h1>")
puts("<div>")
printf("<pre>%s</pre>", o) #evalでRubyコードとして読み込む
puts("</div>")
puts("</div>")


puts("<div class=\"kekka\">")
if newans == newo
  puts("<h2><span class=\"sucsess\">sucsess!!</span></h2>")
else
  puts("<h2><span class=\"no\">NO!!!実行結果が違います</span></h2>")
end 

if e != ""
  puts("<h2><span class=\"waku1\">エラー文</span></h2>")
  printf("<p>%s</p>\n", e)
  remess = e.split(" ")
  open("err.csv", "r") do |f|
    while line = f.gets
      if /^#/ =~ line
        next
      elsif /(.+),(.+)/ =~ line
        for i in 0..remess.length
          if remess[i].to_s.include?($1)
            printf("<h4>[<a href=\"https://www.google.com/search?q=%s+ruby\">%s</a>]→%s</h4>\n", $1, $1 ,$2)
          end
        end
      end
    end
  end

else
  print("<p>エラー文はないよ!</p>")
end

puts("</div>")

puts("<div class=\"send\">")
puts("<a href=\"./editor.rb\">エディタ画面へ戻る</a>")
puts("</div>")

puts("</body>\n</html>")
  
}
rescue Timeout::Error
  file = File.open("errormes.txt", "r")
  puts file.read
  file.close
end