Mercurial Hosting > luan
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; }