diff src/luan/lib/PackageLib.java @ 136:7e160d2f6d9c

update HttpLib, untested git-svn-id: https://luan-java.googlecode.com/svn/trunk@137 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Wed, 11 Jun 2014 09:33:02 +0000
parents 3119326260ea
children 06159094b802
line wrap: on
line diff
--- a/src/luan/lib/PackageLib.java	Wed Jun 11 06:30:46 2014 +0000
+++ b/src/luan/lib/PackageLib.java	Wed Jun 11 09:33:02 2014 +0000
@@ -5,6 +5,7 @@
 import java.net.URL;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
 import luan.Luan;
 import luan.LuanState;
 import luan.LuanTable;
@@ -34,7 +35,7 @@
 			LuanTable searchers = luan.searchers();
 			searchers.add(preloadSearcher);
 			searchers.add(fileSearcher);
-			searchers.add(javaFileSearcher);
+			searchers.put("java",javaFileSearcher);
 			module.put("searchers",searchers);
 			return module;
 		}
@@ -48,12 +49,27 @@
 		LuanTable loaded = luan.loaded();
 		Object mod = loaded.get(modName);
 		if( mod == null ) {
+			List<Object> list = null;
+			String searchFor = modName;
 			LuanTable searchers = (LuanTable)luan.get("Package.searchers");
-			if( searchers == null )
-				searchers = new LuanTable(Collections.<Object>singletonList(preloadSearcher));
-			for( Object s : searchers.asList() ) {
+			if( searchers == null ) {
+				list = Collections.<Object>singletonList(preloadSearcher);
+			} else {
+				int i = modName.indexOf(':');
+				if( i != -1 ) {
+					String prefix = modName.substring(0,i);
+					Object searcher = searchers.get(prefix);
+					if( searcher != null ) {
+						list = Collections.<Object>singletonList(searcher);
+						searchFor = modName.substring(i+1);
+					}
+				}
+				if( list == null )
+					list = searchers.asList();
+			}
+			for( Object s : list ) {
 				LuanFunction searcher = (LuanFunction)s;
-				Object[] a = Luan.array(luan.call(searcher,"<searcher>",new Object[]{modName}));
+				Object[] a = Luan.array(luan.call(searcher,"<searcher>",new Object[]{searchFor}));
 				if( a.length >= 1 && a[0] instanceof LuanFunction ) {
 					LuanFunction loader = (LuanFunction)a[0];
 					a[0] = modName;
@@ -127,16 +143,10 @@
 
 	public static final LuanFunction javaFileSearcher = new LuanFunction() {
 		@Override public Object[] call(LuanState luan,Object[] args) {
-			String modName = (String)args[0];
-			String path = (String)luan.get("Package.jpath");
-			if( path==null )
-				return LuanFunction.NOTHING;
-			for( String s : path.split(";") ) {
-				String file = s.replaceAll("\\?",modName);
-				URL url = ClassLoader.getSystemResource(file);
-				if( url != null ) {
-					return new Object[]{javaFileLoader,url.toString()};
-				}
+			String path = (String)args[0];
+			String url = IoLib.java_resource_to_url(path);
+			if( url != null ) {
+				return new Object[]{javaFileLoader,url};
 			}
 			return LuanFunction.NOTHING;
 		}