Mercurial Hosting > luan
changeset 52:0c0f2b107099
add WebRun
git-svn-id: https://luan-java.googlecode.com/svn/trunk@53 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Mon, 31 Dec 2012 03:15:20 +0000 |
parents | 28dfd91a816c |
children | 54a61d1dc070 |
files | src/luan/tools/CmdLine.java src/luan/tools/WebRun.java src/luan/tools/WebShell.java |
diffstat | 3 files changed, 98 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
diff -r 28dfd91a816c -r 0c0f2b107099 src/luan/tools/CmdLine.java --- a/src/luan/tools/CmdLine.java Fri Dec 28 20:43:06 2012 +0000 +++ b/src/luan/tools/CmdLine.java Mon Dec 31 03:15:20 2012 +0000 @@ -6,6 +6,7 @@ import luan.lib.JavaLib; import luan.lib.StringLib; import luan.lib.TableLib; +import luan.lib.HtmlLib; import luan.Luan; import luan.LuanState; import luan.LuanFunction; @@ -16,12 +17,18 @@ public class CmdLine { - public static void main(String[] args) { + public static LuanState newStandardLuan() { LuanState luan = LuanCompiler.newLuanState(); BasicLib.register(luan); JavaLib.register(luan); StringLib.register(luan); TableLib.register(luan); + HtmlLib.register(luan); + return luan; + } + + public static void main(String[] args) { + LuanState luan = newStandardLuan(); BasicLib.make_standard(luan); boolean interactive = false; boolean showVersion = false; @@ -106,8 +113,7 @@ System.out.print("> "); String input = new Scanner(System.in).nextLine(); try { - LuanFunction fn = BasicLib.load(luan,input,"stdin"); - Object[] rtn = luan.call(fn,null,null); + Object[] rtn = eval(luan,input,"stdin"); if( rtn.length > 0 ) BasicLib.print(luan,rtn); } catch(LuanException e) { @@ -115,4 +121,9 @@ } } } + + public static Object[] eval(LuanState luan,String cmd,String sourceName) throws LuanException { + LuanFunction fn = BasicLib.load(luan,cmd,sourceName); + return luan.call(fn,null,null); + } }
diff -r 28dfd91a816c -r 0c0f2b107099 src/luan/tools/WebRun.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/luan/tools/WebRun.java Mon Dec 31 03:15:20 2012 +0000 @@ -0,0 +1,82 @@ +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.LuanException; +import luan.lib.HtmlLib; + + +public class WebRun extends HttpServlet { + private static final Logger logger = LoggerFactory.getLogger(WebRun.class); + + protected LuanState newLuanState() throws LuanException { + return CmdLine.newStandardLuan(); + } + + 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.out = out; + luan.global().put("request",request); + luan.global().put("response",response); + CmdLine.eval(luan,code,"WebRun"); + } 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(); + } + +}
diff -r 28dfd91a816c -r 0c0f2b107099 src/luan/tools/WebShell.java --- a/src/luan/tools/WebShell.java Fri Dec 28 20:43:06 2012 +0000 +++ b/src/luan/tools/WebShell.java Mon Dec 31 03:15:20 2012 +0000 @@ -18,9 +18,6 @@ import luan.LuanException; import luan.interp.LuanCompiler; import luan.lib.BasicLib; -import luan.lib.JavaLib; -import luan.lib.StringLib; -import luan.lib.TableLib; import luan.lib.HtmlLib; @@ -28,18 +25,11 @@ private static final Logger logger = LoggerFactory.getLogger(WebShell.class); protected LuanState newLuanState() throws LuanException { - LuanState luan = LuanCompiler.newLuanState(); - BasicLib.register(luan); - JavaLib.register(luan); - StringLib.register(luan); - TableLib.register(luan); - HtmlLib.register(luan); - return luan; + return CmdLine.newStandardLuan(); } protected Object[] eval(LuanState luan,String cmd) throws LuanException { - LuanFunction fn = BasicLib.load(luan,cmd,"WebShell"); - return luan.call(fn,null,null); + return CmdLine.eval(luan,cmd,"WebShell"); } protected void service(HttpServletRequest request,HttpServletResponse response)