changeset 693:ca169567ce07

module URIs must now include ".luan"
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 19 Apr 2016 15:54:11 -0600
parents 7bd97d642f37
children b620b8e1010f
files blog/serve.sh blog/src/edit.luan blog/src/index.html.luan blog/src/lib/Db.luan blog/src/lib/Db_mod.luan blog/src/lib/Post.luan blog/src/lib/test.luan blog/src/new.luan blog/src/private/tools/backup.luan blog/src/private/tools/lucene.luan blog/src/private/tools/run.luan blog/src/private/tools/shell.luan blog/src/private/tools/test.luan blog/test.sh core/src/luan/Luan.java core/src/luan/LuanException.java core/src/luan/cmd_line.luan core/src/luan/impl/LuanParser.java core/src/luan/modules/BasicLuan.java core/src/luan/modules/Html.luan core/src/luan/modules/Io.luan core/src/luan/modules/IoLuan.java core/src/luan/modules/Luan.luan core/src/luan/modules/PackageLuan.java core/src/luan/modules/Rpc.luan core/src/luan/modules/Table.luan core/src/luan/modules/Time.luan core/src/luan/modules/Which_mod.luan core/src/luan/modules/host/Hosting.luan core/src/luan/modules/host/delete.luan core/src/luan/modules/host/push.luan core/src/luan/modules/luan_to_java.luan core/src/luan/modules/mmake.luan core/src/luan/modules/which.luan http/src/luan/modules/http/Dump_mod.luan http/src/luan/modules/http/Http.luan http/src/luan/modules/http/HttpServicer.java http/src/luan/modules/http/Http_test.luan http/src/luan/modules/http/LuanHandler.java http/src/luan/modules/http/Server.luan http/src/luan/modules/http/Shell_mod.luan http/src/luan/modules/http/dump.luan http/src/luan/modules/http/run.luan http/src/luan/modules/http/serve.luan http/src/luan/modules/http/shell.luan http/src/luan/modules/http/test.luan logging/src/luan/modules/logging/init.luan lucene/src/luan/modules/lucene/Ab_testing.luan lucene/src/luan/modules/lucene/Lucene.luan lucene/src/luan/modules/lucene/Versioning.luan lucene/src/luan/modules/lucene/Web_search.luan mail/src/luan/modules/mail/Mail.luan scripts/mmake.sh scripts/test.luan stripe/src/luan/modules/stripe/Stripe.luan website/serve.sh website/src/diff.html.luan website/src/docs.html.luan website/src/examples/hi.luan website/src/examples/hi2.luan website/src/examples/shell.luan website/src/examples/upload-and-email.luan website/src/index.html.luan website/src/manual.html.luan website/src/pil.html.luan website/src/tutorial.html.luan
diffstat 66 files changed, 249 insertions(+), 251 deletions(-) [+]
line wrap: on
line diff
--- a/blog/serve.sh	Mon Apr 18 20:40:21 2016 -0600
+++ b/blog/serve.sh	Tue Apr 19 15:54:11 2016 -0600
@@ -1,1 +1,1 @@
-luan luan:http/serve file:src 2>&1 | tee err
+luan luan:http/serve.luan file:src 2>&1 | tee err
--- a/blog/src/edit.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/blog/src/edit.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,10 +1,10 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
-local String = require "luan:String"
+local String = require "luan:String.luan"
 local to_number = String.to_number or error()
-local Io = require "luan:Io"
-local Http = require "luan:http/Http"
-local Post = require "site:/lib/Post"
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local Post = require "site:/lib/Post.luan"
 
 
 return function()
--- a/blog/src/index.html.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/blog/src/index.html.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,10 +1,10 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
-local Time = require "luan:Time"
-local Io = require "luan:Io"
-local Http = require "luan:http/Http"
-local Post = require "site:/lib/Post"
+local Time = require "luan:Time.luan"
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local Post = require "site:/lib/Post.luan"
 
 
 return function()
--- a/blog/src/lib/Db.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/blog/src/lib/Db.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,1 +1,1 @@
-return require "site:/lib/Db_mod".new_db()
+return require "site:/lib/Db_mod.luan".new_db()
--- a/blog/src/lib/Db_mod.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/blog/src/lib/Db_mod.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,5 +1,5 @@
-local Lucene = require "luan:lucene/Lucene"
-local Io = require "luan:Io"
+local Lucene = require "luan:lucene/Lucene.luan"
+local Io = require "luan:Io.luan"
 
 
 local M = {}
--- a/blog/src/lib/Post.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/blog/src/lib/Post.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,12 +1,12 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
 local assert_string = Luan.assert_string or error()
-local Time = require "luan:Time"
+local Time = require "luan:Time.luan"
 local now = Time.now or error()
-local String = require "luan:String"
+local String = require "luan:String.luan"
 local trim = String.trim or error()
-local Db = require "site:/lib/Db"
+local Db = require "site:/lib/Db.luan"
 
 
 local M = {}
--- a/blog/src/lib/test.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/blog/src/lib/test.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,24 +1,24 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local to_string = Luan.to_string or error()
-local Http = require "luan:http/Http"
-local Http_test = require "luan:http/Http_test"
+local Http = require "luan:http/Http.luan"
+local Http_test = require "luan:http/Http_test.luan"
 local init = Http_test.init or error()
 local get_page = Http_test.get_page or error()
-local Io = require "luan:Io"
+local Io = require "luan:Io.luan"
 local print = Io.print or error()
-local String = require "luan:String"
+local String = require "luan:String.luan"
 local matches = String.matches or error()
 
 Http.uncache_site()
 
-local Db_mod = require "site:/lib/Db_mod"
+local Db_mod = require "site:/lib/Db_mod.luan"
 
 Db_mod.lucene_dir = "site:/private/local/lucene_test"
-local Db = require "site:/lib/Db"
+local Db = require "site:/lib/Db.luan"
 Db.delete_all()
 
-local Post = require "site:/lib/Post"
+local Post = require "site:/lib/Post.luan"
 local page
 
 print 'go'
--- a/blog/src/new.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/blog/src/new.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,8 +1,8 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
-local Io = require "luan:Io"
-local Http = require "luan:http/Http"
-local Post = require "site:/lib/Post"
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local Post = require "site:/lib/Post.luan"
 
 
 return function()
--- a/blog/src/private/tools/backup.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/blog/src/private/tools/backup.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,6 +1,6 @@
-local Io = require "luan:Io"
-local Http = require "luan:http/Http"
-local Db = require "site:/lib/Db"
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local Db = require "site:/lib/Db.luan"
 
 
 return function()
--- a/blog/src/private/tools/lucene.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/blog/src/private/tools/lucene.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,4 +1,4 @@
-local Web_search = require "luan:lucene/Web_search"
-local Db = require "site:/lib/Db"
+local Web_search = require "luan:lucene/Web_search.luan"
+local Db = require "site:/lib/Db.luan"
 
 return Web_search.of(Db)
--- a/blog/src/private/tools/run.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/blog/src/private/tools/run.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,1 +1,1 @@
-return require "luan:http/run"
+return require "luan:http/run.luan"
--- a/blog/src/private/tools/shell.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/blog/src/private/tools/shell.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,1 +1,1 @@
-return require "luan:http/shell"
+return require "luan:http/shell.luan"
--- a/blog/src/private/tools/test.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/blog/src/private/tools/test.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,9 +1,9 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local do_file = Luan.do_file
 local try = Luan.try
-local Io = require "luan:Io"
+local Io = require "luan:Io.luan"
 local print = Io.print
-local Http = require "luan:http/Http"
+local Http = require "luan:http/Http.luan"
 
 
 return function()
--- a/blog/test.sh	Mon Apr 18 20:40:21 2016 -0600
+++ b/blog/test.sh	Tue Apr 19 15:54:11 2016 -0600
@@ -1,1 +1,1 @@
-luan luan:http/test file:src site:/lib/test 2>&1 | tee err
+luan luan:http/test.luan file:src site:/lib/test.luan 2>&1 | tee err
--- a/core/src/luan/Luan.java	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/Luan.java	Tue Apr 19 15:54:11 2016 -0600
@@ -8,7 +8,7 @@
 
 	public static void main(String[] args) throws LuanException {
 		LuanState luan = new LuanState();
-		LuanFunction standalone = (LuanFunction)BasicLuan.load_file(luan,"classpath:luan/cmd_line.luan",null);
+		LuanFunction standalone = (LuanFunction)BasicLuan.load_file(luan,"classpath:luan/cmd_line.luan");
 		standalone.call(luan,args);
 	}
 
--- a/core/src/luan/LuanException.java	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/LuanException.java	Tue Apr 19 15:54:11 2016 -0600
@@ -70,6 +70,7 @@
 
 	public String getFullMessage() {
 		return getLuanStackTraceString();
+//		return getLuanStackTraceString()+"\n"+getJavaStackTraceString();
 /*
 		StringBuilder buf = new StringBuilder();
 
--- a/core/src/luan/cmd_line.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/cmd_line.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,10 +1,10 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
 local load_file = Luan.load_file or error()
 local try = Luan.try or error()
-local Table = require "luan:Table"
-local Io = require "luan:Io"
+local Table = require "luan:Table.luan"
+local Io = require "luan:Io.luan"
 local print = Io.print or error()
 
 
@@ -20,7 +20,7 @@
 	end
 	try {
 		function()
-			local main_file = load_file(file,true)
+			local main_file = load_file(file)
 			print( main_file( Table.unpack(Luan.arg) ) )
 		end;
 		catch = function(e)
--- a/core/src/luan/impl/LuanParser.java	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/impl/LuanParser.java	Tue Apr 19 15:54:11 2016 -0600
@@ -377,7 +377,7 @@
 		if( exprs == null )
 			return null;
 		Stmts stmt = new Stmts();
-		stmt.add( "Luan.checkFunction(luan.index(PackageLuan.require(luan,\"luan:Io\"),\"template_write\")).call(luan," );
+		stmt.add( "Luan.checkFunction(luan.index(PackageLuan.require(luan,\"luan:Io.luan\"),\"template_write\")).call(luan," );
 		stmt.addAll( exprs.array() );
 		stmt.add( ");  " );
 		return stmt;
--- a/core/src/luan/modules/BasicLuan.java	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/BasicLuan.java	Tue Apr 19 15:54:11 2016 -0600
@@ -32,10 +32,13 @@
 		return LuanCompiler.compile(sourceName,text,env,allowExpr);
 	}
 
-	public static LuanFunction load_file(LuanState luan,String fileName,Boolean addExtension) throws LuanException {
-		if( fileName == null )
+	public static LuanFunction load_file(LuanState luan,String fileName) throws LuanException {
+		if( fileName == null ) {
 			fileName = "stdin:";
-		String src = PackageLuan.read(luan,fileName,addExtension);
+		} else if( fileName.indexOf(':') == -1 ) {
+			fileName = "file:" + fileName;
+		}
+		String src = PackageLuan.read(luan,fileName);
 		if( src == null )
 			throw new LuanException("file '"+fileName+"' not found" );
 		return load(luan,src,fileName,null,false);
--- a/core/src/luan/modules/Html.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/Html.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -2,12 +2,12 @@
 local HtmlLuan = require "java:luan.modules.HtmlLuan"
 local HtmlParser = require "java:luan.modules.parsers.Html"
 local URLEncoder = require "java:java.net.URLEncoder"
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
 local pairs = Luan.pairs or error()
 local type = Luan.type or error()
-local Io = require "luan:Io"
+local Io = require "luan:Io.luan"
 local output_of = Io.output_of or error()
 
 
--- a/core/src/luan/modules/Io.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/Io.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -13,7 +13,7 @@
 M.stderr = IoLuan.textWriter(System.err)
 
 
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local to_string = Luan.to_string or error()
 local type = Luan.type or error()
@@ -22,9 +22,9 @@
 local pairs = Luan.pairs or error()
 local values = Luan.values or error()
 local load = Luan.load or error()
-local Table = require "luan:Table"
+local Table = require "luan:Table.luan"
 local unpack = Table.unpack or error()
-local String = require "luan:String"
+local String = require "luan:String.luan"
 local encode = String.encode or error()
 local matches = String.matches or error()
 
--- a/core/src/luan/modules/IoLuan.java	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/IoLuan.java	Tue Apr 19 15:54:11 2016 -0600
@@ -521,18 +521,14 @@
 		return new LuanString(s).table();
 	}
 
-	public static LuanTable file(LuanState luan,String name,Boolean addExtension) throws LuanException {
-		if( addExtension != null && addExtension )
-			name += ".luan";
+	public static LuanTable file(LuanState luan,String name) throws LuanException {
 		File file = new File(name);
 		return new LuanFile(file).table();
 	}
 
-	public static LuanTable classpath(LuanState luan,String name,Boolean addExtension) throws LuanException {
+	public static LuanTable classpath(LuanState luan,String name) throws LuanException {
 		if( name.contains("//") )
 			return null;
-		if( addExtension != null && addExtension )
-			name += ".luan";
 		String path = name;
 		check(luan,"classpath:"+path);
 		URL url;
@@ -561,26 +557,24 @@
 		return null;
 	}
 
-	private static LuanTable url(String url,Boolean addExtension) throws IOException {
-		if( addExtension != null && addExtension )
-			url += ".luan";
+	private static LuanTable url(String url) throws IOException {
 		return new LuanUrl(new URL(url)).table();
 	}
 
-	public static LuanTable http(String path,Boolean addExtension) throws IOException {
-		return url("http:"+path,addExtension);
+	public static LuanTable http(String path) throws IOException {
+		return url("http:"+path);
 	}
 
-	public static LuanTable https(String path,Boolean addExtension) throws IOException {
-		return url("https:"+path,addExtension);
+	public static LuanTable https(String path) throws IOException {
+		return url("https:"+path);
 	}
 
-	public static LuanTable luan(LuanState luan,String path,Boolean addExtension) throws LuanException {
-		return classpath( luan, "luan/modules/" + path, addExtension );
+	public static LuanTable luan(LuanState luan,String path) throws LuanException {
+		return classpath( luan, "luan/modules/" + path );
 	}
 
 	public static LuanTable stdin(LuanState luan) throws LuanException {
-		LuanTable io = (LuanTable)PackageLuan.require(luan,"luan:Io");
+		LuanTable io = (LuanTable)PackageLuan.require(luan,"luan:Io.luan");
 		return (LuanTable)io.get(luan,"stdin");
 	}
 
@@ -589,12 +583,12 @@
 		try {
 			schemes.rawPut( "null", new LuanJavaFunction(IoLuan.class.getMethod("null_"),null) );
 			add( schemes, "string", String.class );
-			add( schemes, "file", LuanState.class, String.class, Boolean.class );
-			add( schemes, "classpath", LuanState.class, String.class, Boolean.class );
+			add( schemes, "file", LuanState.class, String.class );
+			add( schemes, "classpath", LuanState.class, String.class );
 			add( schemes, "socket", 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, "http", String.class );
+			add( schemes, "https", String.class );
+			add( schemes, "luan", LuanState.class, String.class );
 			add( schemes, "stdin", LuanState.class );
 		} catch(NoSuchMethodException e) {
 			throw new RuntimeException(e);
@@ -603,7 +597,7 @@
 	}
 
 	private static LuanTable schemes(LuanState luan) throws LuanException {
-		LuanTable t = (LuanTable)PackageLuan.loaded(luan).rawGet("luan:Io");
+		LuanTable t = (LuanTable)PackageLuan.loaded(luan).rawGet("luan:Io.luan");
 		if( t == null )
 			return newSchemes();
 		t = (LuanTable)t.get(luan,"schemes");
@@ -612,7 +606,7 @@
 		return t;
 	}
 
-	public static LuanTable uri(LuanState luan,String name,Boolean addExtension) throws LuanException {
+	public static LuanTable uri(LuanState luan,String name) throws LuanException {
 		int i = name.indexOf(':');
 		if( i == -1 )
 			throw new LuanException( "invalid Io.uri name '"+name+"', missing scheme" );
@@ -622,7 +616,7 @@
 		LuanFunction opener = (LuanFunction)schemes.get(luan,scheme);
 		if( opener == null )
 			throw new LuanException( "invalid scheme '"+scheme+"' in '"+name+"'" );
-		return (LuanTable)Luan.first(opener.call(luan,new Object[]{location,addExtension}));
+		return (LuanTable)Luan.first(opener.call(luan,new Object[]{location}));
 	}
 
 	public static final class LuanSocket extends LuanIO {
--- a/core/src/luan/modules/Luan.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/Luan.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -29,8 +29,8 @@
 M.type = BasicLuan.type
 M.values = BasicLuan.values
 
-function M.do_file(uri,add_extension)
-	return M.load_file(uri,add_extension)()
+function M.do_file(uri)
+	return M.load_file(uri)()
 end
 
 M.VERSION = M.do_file "classpath:luan/version.luan"
--- a/core/src/luan/modules/PackageLuan.java	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/PackageLuan.java	Tue Apr 19 15:54:11 2016 -0600
@@ -45,7 +45,7 @@
 			if( modName.startsWith("java:") ) {
 				mod = JavaLuan.load(luan,modName.substring(5));
 			} else {
-				String src = read(luan,modName,true);
+				String src = read(luan,modName);
 				if( src == null )
 					return null;
 				LuanFunction loader = BasicLuan.load(luan,src,modName,null,false);
@@ -64,8 +64,8 @@
 		return mod;
 	}
 
-	static String read(LuanState luan,String uri,Boolean addExtension) throws LuanException {
-		LuanTable t = IoLuan.uri(luan,uri,addExtension);
+	static String read(LuanState luan,String uri) throws LuanException {
+		LuanTable t = IoLuan.uri(luan,uri);
 		if( t == null )
 			return null;
 		LuanFunction existsFn = (LuanFunction)t.get(luan,"exists");
--- a/core/src/luan/modules/Rpc.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/Rpc.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,10 +1,10 @@
 java()
 local RpcLuan = require "java:luan.modules.RpcLuan"
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local set_metatable = Luan.set_metatable or error()
-local Io = require "luan:Io"
-local Thread = require "luan:Thread"
+local Io = require "luan:Io.luan"
+local Thread = require "luan:Thread.luan"
 
 
 local M = {}
--- a/core/src/luan/modules/Table.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/Table.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -14,7 +14,7 @@
 M.unpack = TableLuan.unpack
 
 
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local pairs = Luan.pairs
 
 function M.is_empty(t)
--- a/core/src/luan/modules/Time.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/Time.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,10 +1,10 @@
 -- incomplete, will add as needed
 
 java()
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
-local Table = require "luan:Table"
+local Table = require "luan:Table.luan"
 local System = require "java:java.lang.System"
 local Calendar = require "java:java.util.Calendar"
 local Date = require "java:java.util.Date"
--- a/core/src/luan/modules/Which_mod.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/Which_mod.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,12 +1,12 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
 local pairs = Luan.pairs or error()
 local type = Luan.type or error()
-local String = require "luan:String"
+local String = require "luan:String.luan"
 local literal = String.literal or error()
 local matches = String.matches or error()
-local Io = require "luan:Io"
+local Io = require "luan:Io.luan"
 local print = Io.print or error()
 
 
--- a/core/src/luan/modules/host/Hosting.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/host/Hosting.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,13 +1,13 @@
 -- Hosting
 
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
 local pairs = Luan.pairs or error()
-local Io = require "luan:Io"
+local Io = require "luan:Io.luan"
 local print = Io.print or error()
-local Rpc = require "luan:Rpc"
-local String = require "luan:String"
+local Rpc = require "luan:Rpc.luan"
+local String = require "luan:String.luan"
 local matches = String.matches or error()
 
 
--- a/core/src/luan/modules/host/delete.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/host/delete.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,6 +1,6 @@
-local Io = require "luan:Io"
+local Io = require "luan:Io.luan"
 local print = Io.print
-local Hosting = require "luan:host/Hosting"
+local Hosting = require "luan:host/Hosting.luan"
 
 if #{...} ~= 2 then
 	Io.stderr.write "usage: luan luan:host/delete domain password\n"
--- a/core/src/luan/modules/host/push.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/host/push.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,6 +1,6 @@
-local Io = require "luan:Io"
+local Io = require "luan:Io.luan"
 local print = Io.print
-local Hosting = require "luan:host/Hosting"
+local Hosting = require "luan:host/Hosting.luan"
 
 if #{...} ~= 3 then
 	Io.stderr.write "usage: luan luan:host/push domain password dir\n"
--- a/core/src/luan/modules/luan_to_java.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/luan_to_java.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,5 +1,5 @@
 java()
 local LuanCompiler = require "java:luan.impl.LuanCompiler"
-local Io = require "luan:Io"
+local Io = require "luan:Io.luan"
 
 Io.stdout.write( LuanCompiler.toJava( "stdin", Io.stdin.read_text() ) )
--- a/core/src/luan/modules/mmake.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/mmake.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,10 +1,10 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local ipairs = Luan.ipairs
-local Table = require "luan:Table"
-local Io = require "luan:Io"
+local Table = require "luan:Table.luan"
+local Io = require "luan:Io.luan"
 local print = Io.print
-local String = require "luan:String"
-local Time = require "luan:Time"
+local String = require "luan:String.luan"
+local Time = require "luan:Time.luan"
 
 
 local compiler = Table.concat( { "javac -g -encoding UTF8", ... }, " " )
--- a/core/src/luan/modules/which.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/core/src/luan/modules/which.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,7 +1,7 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local values = Luan.values or error()
-local Which_mod = require "luan:Which_mod"
+local Which_mod = require "luan:Which_mod.luan"
 local which = Which_mod.which or error()
 
 for name in values(...) do
--- a/http/src/luan/modules/http/Dump_mod.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/http/src/luan/modules/http/Dump_mod.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,8 +1,8 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local pairs = Luan.pairs
 local ipairs = Luan.ipairs
-local Io = require "luan:Io"
-local Http = require "luan:http/Http"
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
 java()
 local HttpServicer = require "java:luan.modules.http.HttpServicer"
 
--- a/http/src/luan/modules/http/Http.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/http/src/luan/modules/http/Http.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,16 +1,16 @@
 java()
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
 local pairs = Luan.pairs or error()
 local set_metatable = Luan.set_metatable or error()
-local Io = require "luan:Io"
-local Html = require "luan:Html"
+local Io = require "luan:Io.luan"
+local Html = require "luan:Html.luan"
 local url_encode = Html.url_encode or error()
-local Table = require "luan:Table"
+local Table = require "luan:Table.luan"
 local clear = Table.clear or error()
-local Package = require "luan:Package"
-local String = require "luan:String"
+local Package = require "luan:Package.luan"
+local String = require "luan:String.luan"
 local matches = String.matches or error()
 local HttpServicer = require "java:luan.modules.http.HttpServicer"
 local IoLuan = require "java:luan.modules.IoLuan"
--- a/http/src/luan/modules/http/HttpServicer.java	Mon Apr 18 20:40:21 2016 -0600
+++ b/http/src/luan/modules/http/HttpServicer.java	Tue Apr 19 15:54:11 2016 -0600
@@ -46,7 +46,7 @@
 	{
 		LuanFunction fn;
 		synchronized(luan) {
-			LuanTable module = (LuanTable)PackageLuan.require(luan,"luan:http/Http");
+			LuanTable module = (LuanTable)PackageLuan.require(luan,"luan:http/Http.luan");
 			LuanTable per_session_pages = (LuanTable)module.rawGet("per_session_pages");
 			Object mod = PackageLuan.load(luan,modName);
 			if( mod==null )
@@ -71,7 +71,7 @@
 			}
 		}
 
-		LuanTable module = (LuanTable)PackageLuan.require(luan,"luan:http/Http");
+		LuanTable module = (LuanTable)PackageLuan.require(luan,"luan:http/Http.luan");
 
 		// request
 		LuanFunction newRequestFn = (LuanFunction)module.rawGet("new_request");
--- a/http/src/luan/modules/http/Http_test.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/http/src/luan/modules/http/Http_test.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,10 +1,10 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local set_metatable = Luan.set_metatable or error()
-local Io = require "luan:Io"
-local String = require "luan:String"
+local Io = require "luan:Io.luan"
+local String = require "luan:String.luan"
 local matches = String.matches or error()
-local Http = require "luan:http/Http"
+local Http = require "luan:http/Http.luan"
 
 
 local M = {}
@@ -17,7 +17,7 @@
 		path = path .. M.welcome_file
 	end
 	local old_out = Io.stdout
-	local mod = require("site:"..path)
+	local mod = require("site:"..path..".luan")
 	mod()
 	M.text_writer.close()
 	Io.stdout = old_out
--- a/http/src/luan/modules/http/LuanHandler.java	Mon Apr 18 20:40:21 2016 -0600
+++ b/http/src/luan/modules/http/LuanHandler.java	Tue Apr 19 15:54:11 2016 -0600
@@ -31,7 +31,7 @@
 		if( target.endsWith("/") )
 			target += welcomeFile;
 		try {
-			if( !HttpServicer.service(luan,request,response,"site:"+target) )
+			if( !HttpServicer.service(luan,request,response,"site:"+target+".luan") )
 				return;
 		} catch(LuanException e) {
 			String err = e.getFullMessage();
--- a/http/src/luan/modules/http/Server.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/http/src/luan/modules/http/Server.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,10 +1,10 @@
-local String = require "luan:String"
+local String = require "luan:String.luan"
 local gsub = String.gsub
 local matches = String.matches
-local Io = require "luan:Io"
-local Package = require "luan:Package"
-local Http = require "luan:http/Http"
-require "luan:logging/init"  -- initialize logging
+local Io = require "luan:Io.luan"
+local Package = require "luan:Package.luan"
+local Http = require "luan:http/Http.luan"
+require "luan:logging/init.luan"  -- initialize logging
 
 java()
 local Server = require "java:org.eclipse.jetty.server.Server"
@@ -76,8 +76,8 @@
 function M.init(dir)
 	dir = gsub(dir,"/$","")  -- remove trailing '/' if any
 	Http.dir = dir
-	function Io.schemes.site(path,add_extension)
-		return Io.uri( dir..path, add_extension )
+	function Io.schemes.site(path)
+		return Io.uri( dir..path )
 	end
 	M.authentication_handler.setPassword(M.private_password)
 	local base = dir
--- a/http/src/luan/modules/http/Shell_mod.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/http/src/luan/modules/http/Shell_mod.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,11 +1,11 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
 local load = Luan.load or error()
 local try = Luan.try or error()
-local Io = require "luan:Io"
+local Io = require "luan:Io.luan"
 local print = Io.print or error()
-local Http = require "luan:http/Http"
+local Http = require "luan:http/Http.luan"
 
 
 local M = {}
--- a/http/src/luan/modules/http/dump.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/http/src/luan/modules/http/dump.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,1 +1,1 @@
-return require("luan:http/Dump_mod").respond
+return require("luan:http/Dump_mod.luan").respond
--- a/http/src/luan/modules/http/run.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/http/src/luan/modules/http/run.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,12 +1,12 @@
-local Luan = require "luan:Luan"
+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"
+local Io = require "luan:Io.luan"
 local print = Io.print or error()
-local String = require "luan:String"
+local String = require "luan:String.luan"
 local gmatch = String.gmatch or error()
-local Http = require "luan:http/Http"
+local Http = require "luan:http/Http.luan"
 
 
 local function lines(s)
--- a/http/src/luan/modules/http/serve.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/http/src/luan/modules/http/serve.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,5 +1,5 @@
-local Io = require "luan:Io"
-local Server = require "luan:http/Server"
+local Io = require "luan:Io.luan"
+local Server = require "luan:http/Server.luan"
 
 if #{...} ~= 1 then
 	Io.stderr.write "usage: luan luan:http/serve dir-URI\n"
--- a/http/src/luan/modules/http/shell.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/http/src/luan/modules/http/shell.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,1 +1,1 @@
-return require("luan:http/Shell_mod").respond
+return require("luan:http/Shell_mod.luan").respond
--- a/http/src/luan/modules/http/test.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/http/src/luan/modules/http/test.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,6 +1,6 @@
-local Luan = require "luan:Luan"
-local Io = require "luan:Io"
-local Server = require "luan:http/Server"
+local Luan = require "luan:Luan.luan"
+local Io = require "luan:Io.luan"
+local Server = require "luan:http/Server.luan"
 
 if #{...} ~= 2 then
 	Io.stderr.write "usage: luan luan:http/serve dir-URI test-URI\n"
@@ -9,4 +9,4 @@
 
 local dir, test = ...
 Server.init(dir)
-Luan.do_file(test,true)
+Luan.do_file(test)
--- a/logging/src/luan/modules/logging/init.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/logging/src/luan/modules/logging/init.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,2 +1,2 @@
-require "luan:logging/Logging".init()
+require "luan:logging/Logging.luan".init()
 return true
--- a/lucene/src/luan/modules/lucene/Ab_testing.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/lucene/src/luan/modules/lucene/Ab_testing.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,16 +1,16 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local pairs = Luan.pairs
 local ipairs = Luan.ipairs
 local error = Luan.error
 local range = Luan.range
-local Math = require "luan:Math"
-local Table = require "luan:Table"
-local String = require "luan:String"
+local Math = require "luan:Math.luan"
+local Table = require "luan:Table.luan"
+local String = require "luan:String.luan"
 local gsub = String.gsub
-local Io = require "luan:Io"
-local Http = require "luan:http/Http"
-local Logging = require "luan:logging/Logging"
-local Lucene = require "luan:lucene/Lucene"
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local Logging = require "luan:logging/Logging.luan"
+local Lucene = require "luan:lucene/Lucene.luan"
 
 local M = {}
 
--- a/lucene/src/luan/modules/lucene/Lucene.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/lucene/src/luan/modules/lucene/Lucene.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,9 +1,9 @@
 java()
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
 local type = Luan.type or error()
-local Html = require "luan:Html"
+local Html = require "luan:Html.luan"
 local LuceneIndex = require "java:luan.modules.lucene.LuceneIndex"
 local NumberFieldParser = require "java:sane.lucene.queryparser.NumberFieldParser"
 local StringFieldParser = require "java:sane.lucene.queryparser.StringFieldParser"
--- a/lucene/src/luan/modules/lucene/Versioning.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/lucene/src/luan/modules/lucene/Versioning.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,18 +1,18 @@
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local pairs = Luan.pairs or error()
-local Number = require "luan:Number"
+local Number = require "luan:Number.luan"
 local integer = Number.integer or error()
 local long = Number.long or error()
-local String = require "luan:String"
+local String = require "luan:String.luan"
 local matches = String.matches or error()
 local sub = String.sub or error()
 local string_to_number = String.to_number or error()
-local Table = require "luan:Table"
+local Table = require "luan:Table.luan"
 local copy = Table.copy or error()
-local Lucene = require "luan:lucene/Lucene"
-require "luan:logging/init"
-local Logging = require "luan:logging/Logging"
+local Lucene = require "luan:lucene/Lucene.luan"
+require "luan:logging/init.luan"
+local Logging = require "luan:logging/Logging.luan"
 
 local logger = Logging.logger "lucene versioning"
 
--- a/lucene/src/luan/modules/lucene/Web_search.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/lucene/src/luan/modules/lucene/Web_search.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,15 +1,15 @@
- local Luan = require "luan:Luan"
+ local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local pairs = Luan.pairs or error()
 local ipairs = Luan.ipairs or error()
 local range = Luan.range or error()
 local to_string = Luan.to_string or error()
-local Io = require "luan:Io"
+local Io = require "luan:Io.luan"
 local repr = Io.repr or error()
-local Http = require "luan:http/Http"
-local String = require "luan:String"
+local Http = require "luan:http/Http.luan"
+local String = require "luan:String.luan"
 local string_to_number = String.to_number or error()
-local Html = require "luan:Html"
+local Html = require "luan:Html.luan"
 
 
 local M = {}
--- a/mail/src/luan/modules/mail/Mail.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/mail/src/luan/modules/mail/Mail.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,5 +1,5 @@
 java()
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local assert_table = Luan.assert_table
 local System = require "java:java.lang.System"
 local SmtpCon = require "java:luan.modules.mail.SmtpCon"
--- a/scripts/mmake.sh	Mon Apr 18 20:40:21 2016 -0600
+++ b/scripts/mmake.sh	Tue Apr 19 15:54:11 2016 -0600
@@ -1,1 +1,1 @@
-luan luan:mmake $*
+luan luan:mmake.luan $*
--- a/scripts/test.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/scripts/test.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,21 +1,21 @@
-local Binary = require "luan:Binary"
-local Html = require "luan:Html"
-local Io = require "luan:Io"
-local Luan = require "luan:Luan"
-local Math = require "luan:Math"
-local Package = require "luan:Package"
-local String = require "luan:String"
-local Table = require "luan:Table"
-local Thread = require "luan:Thread"
-local Time = require "luan:Time"
-local Hosting = require "luan:host/Hosting"
-local Http = require "luan:http/Http"
-local Http_test = require "luan:http/Http_test"
-local Server = require "luan:http/Server"
-local Lucene = require "luan:lucene/Lucene"
-local Versioning = require "luan:lucene/Versioning"
-local Mail = require "luan:mail/Mail"
-local Stripe = require "luan:stripe/Stripe"
+local Binary = require "luan:Binary.luan"
+local Html = require "luan:Html.luan"
+local Io = require "luan:Io.luan"
+local Luan = require "luan:Luan.luan"
+local Math = require "luan:Math.luan"
+local Package = require "luan:Package.luan"
+local String = require "luan:String.luan"
+local Table = require "luan:Table.luan"
+local Thread = require "luan:Thread.luan"
+local Time = require "luan:Time.luan"
+local Hosting = require "luan:host/Hosting.luan"
+local Http = require "luan:http/Http.luan"
+local Http_test = require "luan:http/Http_test.luan"
+local Server = require "luan:http/Server.luan"
+local Lucene = require "luan:lucene/Lucene.luan"
+local Versioning = require "luan:lucene/Versioning.luan"
+local Mail = require "luan:mail/Mail.luan"
+local Stripe = require "luan:stripe/Stripe.luan"
 
 local error = Luan.error
 local range = Luan.range or error()
@@ -23,21 +23,21 @@
 local find = String.find or error()
 local init = Http_test.init or error()
 local get_page = Http_test.get_page or error()
-local Ab_testing = require "luan:lucene/Ab_testing"
+local Ab_testing = require "luan:lucene/Ab_testing.luan"
 
 
 local function print(...)
 	Io.print_to(Io.stderr,...)
 end
 
-function Io.schemes.site(path,add_extension)
-	return Io.uri( "luan:http"..path, add_extension )
+function Io.schemes.site(path)
+	return Io.uri( "luan:http"..path )
 end
 
 local page
 
 init()
-Http.request.parameter.code = "require('luan:Io').print 'hi'"
+Http.request.parameter.code = "require('luan:Io.luan').print 'hi'"
 page = get_page "/run"
 trim(page) == "hi" or error "failed"
 
@@ -76,7 +76,7 @@
 init()
 ab_testing.web_page{"All","null"}()
 
-local Web_search = require "luan:lucene/Web_search"
+local Web_search = require "luan:lucene/Web_search.luan"
 local web_search = Web_search.of(db)
 
 init()
@@ -91,8 +91,8 @@
 
 -- website
 
-function Io.schemes.site(path,add_extension)
-	return Io.uri( "file:../website/src"..path, add_extension )
+function Io.schemes.site(path)
+	return Io.uri( "file:../website/src"..path )
 end
 
 init(); get_page "/"
--- a/stripe/src/luan/modules/stripe/Stripe.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/stripe/src/luan/modules/stripe/Stripe.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,8 +1,8 @@
 java()
-local Luan = require "luan:Luan"
+local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local assert_integer = Luan.assert_integer
-local Table = require "luan:Table"
+local Table = require "luan:Table.luan"
 local Stripe = require "java:com.stripe.Stripe"
 local Customer = require "java:com.stripe.model.Customer"
 local Charge = require "java:com.stripe.model.Charge"
--- a/website/serve.sh	Mon Apr 18 20:40:21 2016 -0600
+++ b/website/serve.sh	Tue Apr 19 15:54:11 2016 -0600
@@ -1,1 +1,1 @@
-luan luan:http/serve file:src 2>&1 | tee err
+luan luan:http/serve.luan file:src 2>&1 | tee err
--- a/website/src/diff.html.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/website/src/diff.html.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,6 +1,6 @@
-local Io = require "luan:Io"
-local Http = require "luan:http/Http"
-local Shared = require "site:/Shared"
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local Shared = require "site:/Shared.luan"
 
 
 return function()
--- a/website/src/docs.html.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/website/src/docs.html.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,6 +1,6 @@
-local Io = require "luan:Io"
-local Http = require "luan:http/Http"
-local Shared = require "site:/Shared"
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local Shared = require "site:/Shared.luan"
 
 
 return function()
--- a/website/src/examples/hi.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/website/src/examples/hi.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,5 +1,5 @@
-local Io = require "luan:Io"
-local Http = require "luan:http/Http"
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
 
 
 return function()
--- a/website/src/examples/hi2.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/website/src/examples/hi2.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,5 +1,5 @@
-local Io = require "luan:Io"
-local Http = require "luan:http/Http"
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
 
 
 local function form()
--- a/website/src/examples/shell.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/website/src/examples/shell.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,1 +1,1 @@
-return require "luan:http/shell"
+return require "luan:http/shell.luan"
--- a/website/src/examples/upload-and-email.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/website/src/examples/upload-and-email.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,6 +1,6 @@
-local Io = require "luan:Io"
-local Http = require "luan:http/Http"
-local Mail = require "luan:mail/Mail"
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local Mail = require "luan:mail/Mail.luan"
 
 
 local send = Mail.Sender{
--- a/website/src/index.html.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/website/src/index.html.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,5 +1,5 @@
-local Io = require "luan:Io"
-local Http = require "luan:http/Http"
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
 
 
 return function()
--- a/website/src/manual.html.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/website/src/manual.html.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,8 +1,8 @@
-local Luan = require "luan:Luan"
-local Io = require "luan:Io"
-local Html = require "luan:Html"
-local Http = require "luan:http/Http"
-local Shared = require "site:/Shared"
+local Luan = require "luan:Luan.luan"
+local Io = require "luan:Io.luan"
+local Html = require "luan:Html.luan"
+local Http = require "luan:http/Http.luan"
+local Shared = require "site:/Shared.luan"
 
 
 return function()
@@ -1095,7 +1095,7 @@
 
 <pre><%=Html.encode[[
 	local name = "Bob"
-	require("luan:Io").stdout.write( %>
+	require("luan:Io.luan").stdout.write( %>
 	Hello <%= name %>!
 	Bye <%= name %>.
 	<% )
@@ -1770,7 +1770,7 @@
 Example use:
 
 <pre>
-	local Table = require "luan:Table"
+	local Table = require "luan:Table.luan"
 </pre>
 
 <p>
@@ -1789,7 +1789,7 @@
 Include this library by:
 
 <pre>
-	local Luan = require "luan:Luan"
+	local Luan = require "luan:Luan.luan"
 </pre>
 
 <p>
@@ -1955,7 +1955,7 @@
 If the <code>allow_expression</code> parameter is <code>true</code> then the entire text can be nothing more than an expression in which case the chunk returns the value of this expression.
 
 
-<h4 heading><a name="Luan.load_file" href="#Luan.load_file"><code>Luan.load_file (file_uri [, add_extension])</code></a></h4>
+<h4 heading><a name="Luan.load_file" href="#Luan.load_file"><code>Luan.load_file ([file_uri])</code></a></h4>
 
 <p>
 Similar to <a href="#Luan.load"><code>load</code></a>,
@@ -1967,9 +1967,9 @@
 Could be defined as:
 
 <pre>
-	function Luan.load_file(file_uri,add_extension)
+	function Luan.load_file(file_uri)
 		file_uri = file_uri or "stdin:"
-		local f = Io.uri(file_uri,add_extension)
+		local f = Io.uri(file_uri)
 		f.exists() or <a href="#Luan.error">Luan.error</a>("file '"..file_uri.."' not found")
 		return <a href="#Luan.load">Luan.load</a>( f.read_text(), file_uri )
 	end
@@ -2231,7 +2231,7 @@
 Include this library by:
 
 <pre>
-	local Package = require "luan:Package"
+	local Package = require "luan:Package.luan"
 </pre>
 
 <p>
@@ -2253,7 +2253,7 @@
 To load a new value, <code>Package.load</code> first checks if <code>mod_uri</code> starts with "<b>java:</b>".  If yes, then this is a Java class which is loaded by special Java code.
 
 <p>
-If <code>mod_uri</code> is not a Java class, then <code>Package.load</code> tries to read the text of the file referred to by <code>mod_uri</code> (using <code>add_extension</code>=true).  If the file doesn't exist, then <code>Package.load</code> returns <b>nil</b>.  If the file exists, then its content is compiled into a chunk calling <a href="#Luan.load"><code>Luan.load</code></a> and passing in an empty table as the <code>env</code> value.  This chunk is run passing in <code>mod_uri</code> as an argument.  If the chunk returns a value other than <b>nil</b>, then that value is the value of this module.  Otherwise the <code>env</code> that was passed in is the value of this module.
+If <code>mod_uri</code> is not a Java class, then <code>Package.load</code> tries to read the text of the file referred to by <code>mod_uri</code>.  If the file doesn't exist, then <code>Package.load</code> returns <b>nil</b>.  If the file exists, then its content is compiled into a chunk calling <a href="#Luan.load"><code>Luan.load</code></a> and passing in an empty table as the <code>env</code> value.  This chunk is run passing in <code>mod_uri</code> as an argument.  If the chunk returns a value other than <b>nil</b>, then that value is the value of this module.  Otherwise the <code>env</code> that was passed in is the value of this module.
 
 <p>
 If a new value for the module successful loaded, then it is stored in <code>Package.loaded[mod_uri]</code>.  The value is returned.
@@ -2288,7 +2288,7 @@
 Include this library by:
 
 <pre>
-	local String = require "luan:String"
+	local String = require "luan:String.luan"
 </pre>
 
 <p>
@@ -2634,7 +2634,7 @@
 Include this library by:
 
 <pre>
-	local Binary = require "luan:Binary"
+	local Binary = require "luan:Binary.luan"
 </pre>
 
 
@@ -2671,7 +2671,7 @@
 Include this library by:
 
 <pre>
-	local Table = require "luan:Table"
+	local Table = require "luan:Table.luan"
 </pre>
 
 <p>
@@ -2784,7 +2784,7 @@
 Include this library by:
 
 <pre>
-	local Number = require "luan:Number"
+	local Number = require "luan:Number.luan"
 </pre>
 
 
@@ -2825,7 +2825,7 @@
 Include this library by:
 
 <pre>
-	local Math = require "luan:Math"
+	local Math = require "luan:Math.luan"
 </pre>
 
 <p>
--- a/website/src/pil.html.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/website/src/pil.html.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,6 +1,6 @@
-local Io = require "luan:Io"
-local Http = require "luan:http/Http"
-local Shared = require "site:/Shared"
+local Io = require "luan:Io.luan"
+local Http = require "luan:http/Http.luan"
+local Shared = require "site:/Shared.luan"
 
 
 return function()
--- a/website/src/tutorial.html.luan	Mon Apr 18 20:40:21 2016 -0600
+++ b/website/src/tutorial.html.luan	Tue Apr 19 15:54:11 2016 -0600
@@ -1,7 +1,7 @@
-local Io = require "luan:Io"
-local Html = require "luan:Html"
-local Http = require "luan:http/Http"
-local Shared = require "site:/Shared"
+local Io = require "luan:Io.luan"
+local Html = require "luan:Html.luan"
+local Http = require "luan:http/Http.luan"
+local Shared = require "site:/Shared.luan"
 
 
 return function()
@@ -43,22 +43,22 @@
 <p>This should print <b>Hello Bob</b>.  Now let's try a more conventional approach:</p>
 
 <pre>
-	local Io = require "luan:Io"
+	local Io = require "luan:Io.luan"
 	local print = Io.print
 
 	print("Hello World")
 </pre>
 
-<p>In Luan, a function call with one string argument doesn't require parenthesis, so <b>print("Hello World")</b> is the same as <b>print "Hello World"</b> and <b>require "luan:Io"</b> is the same as <b>require("luan:Io")</b>.  Both <b>require</b> and <b>print</b> are functions.</p>
+<p>In Luan, a function call with one string argument doesn't require parenthesis, so <b>print("Hello World")</b> is the same as <b>print "Hello World"</b> and <b>require "luan:Io.luan"</b> is the same as <b>require("luan:Io.luan")</b>.  Both <b>require</b> and <b>print</b> are functions.</p>
 
-<p>The <b>require</b> function takes a <a href="http://en.wikipedia.org/wiki/Uniform_resource_identifier">URI</a> as an argument.  Examples of URIs are "<b>luan:Io</b>" and "<b>file:hello</b>".  <b>require</b> is used to import a module, which is returned from the <b>require</b> function call.  In the case above, we assign the module to the local variable <b>Io</b>.  The function <b>print</b> is a member of this module.  We could have done <b>Io.print("Hello World")</b> but instead we chose to assign <b>print</b> to a local variable and use that to call the function.</p>
+<p>The <b>require</b> function takes a <a href="http://en.wikipedia.org/wiki/Uniform_resource_identifier">URI</a> as an argument.  Examples of URIs are "<b>luan:Io.luan</b>" and "<b>file:hello.luan</b>".  <b>require</b> is used to import a module, which is returned from the <b>require</b> function call.  In the case above, we assign the module to the local variable <b>Io</b>.  The function <b>print</b> is a member of this module.  We could have done <b>Io.print("Hello World")</b> but instead we chose to assign <b>print</b> to a local variable and use that to call the function.</p>
 
 <p>Luan starts with only two defined functions: <b>require</b> and <b>java</b>.  You will use <b>require</b> to import whatever you need.  This is a little more work, but makes it clear in each file where each function comes from.</p>
 
 <p>Let's a make fancier version:</p>
 
 <pre>
-	local Io = require "luan:Io"
+	local Io = require "luan:Io.luan"
 	local print = Io.print
 
 	local function hello(name)
@@ -73,8 +73,8 @@
 <p>Now let's make a web page.  First we need a directory for our website.  So create a directory <b>site</b>.  In this directory, create a file <b>hi.luan</b> containing:
 
 <pre><%=Html.encode[[
-	local Io = require "luan:Io"
-	local Http = require "luan:http/Http"
+	local Io = require "luan:Io.luan"
+	local Http = require "luan:http/Http.luan"
 	
 	return function()
 		Io.stdout = Http.response.text_writer()
@@ -88,7 +88,7 @@
 	end
 ]]%></pre>
 
-<p>Now go back to the parent directory and do <b>luan luan:http/serve file:site</b>.  This will run the Luan web server on port 8080.  Try going to <a href="http://localhost:8080/">http://localhost:8080/</a>.  You should see the directory.  If you click on <b>hi.luan</b> you will see the source.  But if you remove the <b>.luan</b> and just go to <a href="http://localhost:8080/hi">http://localhost:8080/hi</a> then you will run the program which will generate the web page.</p>
+<p>Now go back to the parent directory and do <b>luan luan:http/serve.luan file:site</b>.  This will run the Luan web server on port 8080.  Try going to <a href="http://localhost:8080/">http://localhost:8080/</a>.  You should see the directory.  If you click on <b>hi.luan</b> you will see the source.  But if you remove the <b>.luan</b> and just go to <a href="http://localhost:8080/hi">http://localhost:8080/hi</a> then you will run the program which will generate the web page.</p>
 
 <p>The Luan webserver expects the file to return a function and calls it to generate the page.  Code of the form <b><%=Html.encode[[%>...<%]]%></b> writes its output to <b>Io.stdout</b> which by default is the standard output of the command line.  So in the returned function one usually starts by setting <b>Io.stdout</b> to a <code>text_writer</code> which writes its output to the HTTP response (to the web browser).</p>
 
@@ -97,10 +97,10 @@
 <p>So now you have built your website and you want to publish it to the web.  If you have your own domain, create a CNAME record for it pointing to <b>s1.luanhost.com</b>.  If you don't have a domain, just use a domain like <b>bob.s1.luanhost.com</b> (anything of the form <b>*.s1.luanhost.com</b>).  Assuming your directory is <b>site</b> and you will use the password <b>secret</b>, do the following from the command line:
 
 <pre>
-	luan luan:host/push bob.s1.luanhost.com secret site
+	luan luan:host/push.luan bob.s1.luanhost.com secret site
 </pre>
 
-<p>The form is <b>luan luan:host/push domain password directory</b>.  If you change your site, just run this again and your site will be updated.  To delete your site, do <b>luan luan:host/delete domain password</b>.</p>
+<p>The form is <b>luan luan:host/push.luan domain password directory</b>.  If you change your site, just run this again and your site will be updated.  To delete your site, do <b>luan luan:host/delete.luan domain password</b>.</p>
 
 <p>Hopefully this short tutorial gave you an idea of how to use Luan to make a website.</p>