changeset 462:2e79b47d02a2

remove all command line options; add add_extension boolean arg to scheme fns;
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 06 May 2015 16:54:20 -0600
parents e12841f7edef
children 895afcd2b281
files core/src/luan/cmd_line.luan core/src/luan/modules/BasicLuan.java core/src/luan/modules/IoLuan.java core/src/luan/modules/PackageLuan.java web/src/luan/modules/web/Server.luan
diffstat 5 files changed, 37 insertions(+), 89 deletions(-) [+]
line wrap: on
line diff
--- a/core/src/luan/cmd_line.luan	Wed May 06 14:51:23 2015 -0600
+++ b/core/src/luan/cmd_line.luan	Wed May 06 16:54:20 2015 -0600
@@ -1,82 +1,27 @@
 local Luan = require "luan:Luan"
 local ipairs = Luan.ipairs
-local load = Luan.load
 local load_file = Luan.load_file
 local try = Luan.try
-require "luan:String"  -- for String methods
 local Table = require "luan:Table"
 local Io = require "luan:Io"
 local print = Io.print
 local Debug = require "luan:Debug"
 
 
-local standalone_usage = [=[
-usage: java luan.Luan [options] [script-URI [args]]
-Available options are:
-  -e stat  execute string 'stat'
-  -i       enter interactive mode after executing 'script'
-  -v       show version information
-  --       stop handling options
-  -        stop handling options and execute stdin
-]=]
-
-local function standalone_error(msg)
-	Io.stderr.write( msg, "\n", standalone_usage )
-end
-
-
 local args = {...}
-local interactive = false
-local showVersion = false
-local i = 1
 if #args == 0 then
-	interactive = true
-	showVersion = true
+	print(Luan.VERSION)
+	Debug.debug("> ")
 else
-	while i <= #args do
-		local arg = args[i]
-		if arg.sub(1,1) ~= "-" or arg == "--" then
-			break
-		end
-		if arg == "-i" then
-			interactive = true
-		elseif arg == "-v" then
-			showVersion = true
-		elseif arg == "-e" then
-			i = i + 1
-			if i > #args then
-				standalone_error "'-e' needs argument"
-				return
-			end
-			local cmd = args[i]
-			local stat = load(cmd,"(command line)",{},true)
-			local result = Table.pack( stat() )
-			if result.n > 0 then
-				print( Table.unpack(result,1,result.n) )
-			end
-		elseif arg == "-" then
-			local src = Io.stdin.read_text()
-			local stdin = load(src,"stdin")
-			stdin()
-			return
-		else
-			standalone_error( "unrecognized option '"..arg.."'" )
-			return
-		end
-		i = i + 1
-	end
-end
-if showVersion then print(Luan.VERSION) end
-if i <= #args then
-	local file = args[i]
+	local file = args[1]
 	Luan.arg = {}
 	for j,v in ipairs(args) do
-		Luan.arg[j-i] = v
+		Luan.arg[j-1] = v
 	end
 	try {
 		function()
-			local main_file = load_file(file..".luan")
-			main_file( Table.unpack(Luan.arg) )
+			local main_file = load_file(file,true)
+			Debug.print_if_something( main_file( Table.unpack(Luan.arg) ) )
 		end;
 		catch = function(e)
 --			java(); e.printStackTrace(); return
@@ -84,6 +29,3 @@
 		end;
 	}
 end
-if interactive then
-	Debug.debug("> ")
-end
--- a/core/src/luan/modules/BasicLuan.java	Wed May 06 14:51:23 2015 -0600
+++ b/core/src/luan/modules/BasicLuan.java	Wed May 06 16:54:20 2015 -0600
@@ -34,13 +34,13 @@
 		return LuanCompiler.compile(luan,new LuanSource(sourceName,text),env,allowExpr);
 	}
 
-	public static LuanFunction load_file(LuanState luan,String fileName,LuanTable env) throws LuanException {
+	public static LuanFunction load_file(LuanState luan,String fileName,Boolean addExtension) throws LuanException {
 		if( fileName == null )
 			fileName = "stdin:";
-		String src = PackageLuan.read(luan,fileName);
+		String src = PackageLuan.read(luan,fileName,addExtension);
 		if( src == null )
 			throw luan.exception( "file '"+fileName+"' not found" );
-		return load(luan,src,fileName,env,false);
+		return load(luan,src,fileName,null,false);
 	}
 
 	public static Object do_file(LuanState luan,String fileName) throws LuanException {
--- a/core/src/luan/modules/IoLuan.java	Wed May 06 14:51:23 2015 -0600
+++ b/core/src/luan/modules/IoLuan.java	Wed May 06 16:54:20 2015 -0600
@@ -492,14 +492,18 @@
 		return new LuanString(s).table();
 	}
 
-	public static LuanTable file(LuanState luan,String name) throws LuanException {
+	public static LuanTable file(LuanState luan,String name,Boolean addExtension) throws LuanException {
+		if( addExtension != null && addExtension )
+			name += ".luan";
 		File file = new File(name);
 		return new LuanFile(file).table();
 	}
 
-	public static LuanTable classpath(LuanState luan,String name) throws LuanException {
+	public static LuanTable classpath(LuanState luan,String name,Boolean addExtension) throws LuanException {
 		if( name.contains("//") )
 			return null;
+		if( addExtension != null && addExtension )
+			name += ".luan";
 		String path = name;
 		check(luan,"classpath:"+path);
 		URL url;
@@ -528,20 +532,22 @@
 		return null;
 	}
 
-	private static LuanTable url(String url) throws IOException {
+	private static LuanTable url(String url,Boolean addExtension) throws IOException {
+		if( addExtension != null && addExtension )
+			url += ".luan";
 		return new LuanUrl(new URL(url)).table();
 	}
 
-	public static LuanTable http(String path) throws IOException {
-		return url("http:"+path);
+	public static LuanTable http(String path,Boolean addExtension) throws IOException {
+		return url("http:"+path,addExtension);
 	}
 
-	public static LuanTable https(String path) throws IOException {
-		return url("https:"+path);
+	public static LuanTable https(String path,Boolean addExtension) throws IOException {
+		return url("https:"+path,addExtension);
 	}
 
-	public static LuanTable luan(LuanState luan,String path) throws LuanException {
-		return classpath( luan, "luan/modules/" + path );
+	public static LuanTable luan(LuanState luan,String path,Boolean addExtension) throws LuanException {
+		return classpath( luan, "luan/modules/" + path, addExtension );
 	}
 
 	public static LuanTable stdin(LuanState luan) throws LuanException {
@@ -553,12 +559,12 @@
 		LuanTable schemes = new LuanTable();
 		try {
 			add( schemes, "string", LuanState.class, String.class );
-			add( schemes, "file", LuanState.class, String.class );
-			add( schemes, "classpath", LuanState.class, String.class );
+			add( schemes, "file", LuanState.class, String.class, Boolean.class );
+			add( schemes, "classpath", LuanState.class, String.class, Boolean.class );
 			add( schemes, "socket", LuanState.class, String.class );
-			add( schemes, "http", String.class );
-			add( schemes, "https", String.class );
-			add( schemes, "luan", LuanState.class, String.class );
+			add( schemes, "http", String.class, Boolean.class );
+			add( schemes, "https", String.class, Boolean.class );
+			add( schemes, "luan", LuanState.class, String.class, Boolean.class );
 			add( schemes, "stdin", LuanState.class );
 		} catch(NoSuchMethodException e) {
 			throw new RuntimeException(e);
@@ -576,17 +582,17 @@
 		return t;
 	}
 
-	public static LuanTable uri(LuanState luan,String name) throws LuanException {
+	public static LuanTable uri(LuanState luan,String name,Boolean addExtension) throws LuanException {
 		int i = name.indexOf(':');
 		if( i == -1 )
-			throw luan.exception( "invalid Io name '"+name+"', missing scheme" );
+			throw luan.exception( "invalid Io.uri name '"+name+"', missing scheme" );
 		String scheme = name.substring(0,i);
 		String location = name.substring(i+1);
 		LuanTable schemes = schemes(luan);
 		LuanFunction opener = (LuanFunction)schemes.get(luan,scheme);
 		if( opener == null )
 			throw luan.exception( "invalid scheme '"+scheme+"' in '"+name+"'" );
-		return (LuanTable)Luan.first(luan.call(opener,"<open \""+name+"\">",new Object[]{location}));
+		return (LuanTable)Luan.first(luan.call(opener,"<open \""+name+"\">",new Object[]{location,addExtension}));
 	}
 
 	public static final class LuanSocket extends LuanIO {
--- a/core/src/luan/modules/PackageLuan.java	Wed May 06 14:51:23 2015 -0600
+++ b/core/src/luan/modules/PackageLuan.java	Wed May 06 16:54:20 2015 -0600
@@ -46,7 +46,7 @@
 			if( modName.startsWith("java:") ) {
 				mod = JavaLuan.load(luan,modName.substring(5));
 			} else {
-				String src = read(luan,modName+".luan");
+				String src = read(luan,modName,true);
 				if( src == null )
 					return null;
 				LuanTable env = new LuanTable();
@@ -61,8 +61,8 @@
 		return mod;
 	}
 
-	static String read(LuanState luan,String uri) throws LuanException {
-		LuanTable t = IoLuan.uri(luan,uri);
+	static String read(LuanState luan,String uri,Boolean addExtension) throws LuanException {
+		LuanTable t = IoLuan.uri(luan,uri,addExtension);
 		if( t == null )
 			return null;
 		LuanFunction existsFn = (LuanFunction)t.get(luan,"exists");
--- a/web/src/luan/modules/web/Server.luan	Wed May 06 14:51:23 2015 -0600
+++ b/web/src/luan/modules/web/Server.luan	Wed May 06 16:54:20 2015 -0600
@@ -72,8 +72,8 @@
 function init(dir)
 	dir = dir.gsub("/$","")  -- remove trailing '/' if any
 	Http.dir = dir
-	function Io.schemes.site(path)
-		return Io.uri( dir..path )
+	function Io.schemes.site(path,add_extension)
+		return Io.uri( dir..path, add_extension )
 	end
 	authentication_handler.setPassword(private_password)
 	local base = dir