Mercurial Hosting > luan
view src/luan/modules/http/tools/run.luan @ 1152:21d157b153fe
change http parameters interface
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 04 Feb 2018 19:25:12 -0700 |
parents | 0842b9b570f8 |
children | 668f29bc52ea |
line wrap: on
line source
local Luan = require "luan:Luan.luan" local error = Luan.error local load = Luan.load or error() local try = Luan.try or error() local Io = require "luan:Io.luan" local print = Io.print or error() local String = require "luan:String.luan" local gmatch = String.gmatch or error() local Http = require "luan:http/Http.luan" local function lines(s) local matcher = gmatch(s,"([^\n]*)\n|([^\n])+$") return function() local m1, m2 = matcher() return m1 or m2 end end local function print_with_line_numbers(s) local i = 1 for line in lines(s) do print(i,line) i = i + 1 end end local function form() %> <html> <head> <title>Run Luan Code</title> <style> body { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; text-align: center; margin-top: 1em; } h2 { margin-bottom: .3em; font-weight: normal; } textarea { font: inherit; border-radius: 4px; padding: .5em .8em; } input[type="submit"] { margin-top: .3em; color: white; background: #337ab7; border-color: #337ab7; font: inherit; padding: .5em; border-radius: 4px; } input[type="submit"]:hover { background: #236aa7 !important; } </style> </head> <body> <h2>Run Luan Code</h2> <form name="form0" method="post"> <input type="hidden" name="content_type" value="text/plain" /> <div> <textarea name="code" rows="20" cols="90" wrap="off" autofocus></textarea> </div> <div> <input type="submit" value="Execute Luan Code"/> </div> </form> </body> </html> <% end return function() local content_type = Http.request.parameters.content_type if content_type ~= nil then Http.response.headers["content-type"] = content_type end Io.stdout = Http.response.text_writer() local code = Http.request.parameters.code if code == nil then form() return end try { function() local run = load(code,"<web_run>") run() end; catch = function(e) Http.response.reset() Http.response.headers["content-type"] = "text/plain" Io.stdout = Http.response.text_writer() print(e) print"" print"" print_with_line_numbers(code) end; } end