Mercurial Hosting > luan
view src/luan/tools/WebRun.java @ 130:0594c132888b
cleanup
git-svn-id: https://luan-java.googlecode.com/svn/trunk@131 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Tue, 10 Jun 2014 02:43:40 +0000 |
parents | d00f41edbbd6 |
children |
line wrap: on
line source
package luan.tools; import java.io.IOException; import java.io.PrintStream; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import luan.LuanState; import luan.LuanTable; import luan.LuanException; import luan.lib.HtmlLib; import luan.lib.IoLib; public class WebRun extends HttpServlet { private static final Logger logger = LoggerFactory.getLogger(WebRun.class); protected LuanState newLuanState() throws LuanException { return LuanState.newStandard(); } protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { ServletOutputStream sout = response.getOutputStream(); PrintStream out = new PrintStream(sout); String contentType = request.getParameter("content_type"); if( contentType != null ) response.setContentType("text/plain"); String code = request.getParameter("code"); try { LuanState luan = newLuanState(); luan.set( "Io.stdout", IoLib.textWriter(out) ); LuanTable env = luan.global(); env.put("request",request); env.put("response",response); luan.eval(code); } catch(LuanException e) { logger.error(null,e); response.reset(); response.setHeader("Content-Type","text/html"); out.println( "<html>" ); out.println( "<body>" ); out.println( "<pre>" ); out.println( e ); out.println(); out.println( addLineNumbers(HtmlLib.encode(code)) ); out.println( "</pre>" ); out.println( "</body>" ); out.println( "</html>" ); } } public static String addLineNumbers(String s) { StringBuilder buf = new StringBuilder(); int line = 1; int i = 0; while(true) { buf.append( fmt(line++,3) ); buf.append(" "); int i2 = s.indexOf('\n',i); if( i2 == -1 ) { buf.append( s.substring(i) ); break; } buf.append( s.substring(i,i2+1) ); i = i2 + 1; } return buf.toString(); } private static String fmt(int i,int w) { StringBuilder buf = new StringBuilder(); buf.append(i); while( buf.length() < w ) { buf.insert(0,' '); } return buf.toString(); } }