comparison core/src/luan/modules/IoLuan.java @ 693:ca169567ce07

module URIs must now include ".luan"
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 19 Apr 2016 15:54:11 -0600
parents cdc70de628b5
children d0280c7fdc3a
comparison
equal deleted inserted replaced
692:7bd97d642f37 693:ca169567ce07
519 public static LuanTable string(String s) throws LuanException { 519 public static LuanTable string(String s) throws LuanException {
520 Utils.checkNotNull(s); 520 Utils.checkNotNull(s);
521 return new LuanString(s).table(); 521 return new LuanString(s).table();
522 } 522 }
523 523
524 public static LuanTable file(LuanState luan,String name,Boolean addExtension) throws LuanException { 524 public static LuanTable file(LuanState luan,String name) throws LuanException {
525 if( addExtension != null && addExtension )
526 name += ".luan";
527 File file = new File(name); 525 File file = new File(name);
528 return new LuanFile(file).table(); 526 return new LuanFile(file).table();
529 } 527 }
530 528
531 public static LuanTable classpath(LuanState luan,String name,Boolean addExtension) throws LuanException { 529 public static LuanTable classpath(LuanState luan,String name) throws LuanException {
532 if( name.contains("//") ) 530 if( name.contains("//") )
533 return null; 531 return null;
534 if( addExtension != null && addExtension )
535 name += ".luan";
536 String path = name; 532 String path = name;
537 check(luan,"classpath:"+path); 533 check(luan,"classpath:"+path);
538 URL url; 534 URL url;
539 if( !path.contains("#") ) { 535 if( !path.contains("#") ) {
540 url = ClassLoader.getSystemResource(path); 536 url = ClassLoader.getSystemResource(path);
559 return new LuanUrl(url).table(); 555 return new LuanUrl(url).table();
560 556
561 return null; 557 return null;
562 } 558 }
563 559
564 private static LuanTable url(String url,Boolean addExtension) throws IOException { 560 private static LuanTable url(String url) throws IOException {
565 if( addExtension != null && addExtension )
566 url += ".luan";
567 return new LuanUrl(new URL(url)).table(); 561 return new LuanUrl(new URL(url)).table();
568 } 562 }
569 563
570 public static LuanTable http(String path,Boolean addExtension) throws IOException { 564 public static LuanTable http(String path) throws IOException {
571 return url("http:"+path,addExtension); 565 return url("http:"+path);
572 } 566 }
573 567
574 public static LuanTable https(String path,Boolean addExtension) throws IOException { 568 public static LuanTable https(String path) throws IOException {
575 return url("https:"+path,addExtension); 569 return url("https:"+path);
576 } 570 }
577 571
578 public static LuanTable luan(LuanState luan,String path,Boolean addExtension) throws LuanException { 572 public static LuanTable luan(LuanState luan,String path) throws LuanException {
579 return classpath( luan, "luan/modules/" + path, addExtension ); 573 return classpath( luan, "luan/modules/" + path );
580 } 574 }
581 575
582 public static LuanTable stdin(LuanState luan) throws LuanException { 576 public static LuanTable stdin(LuanState luan) throws LuanException {
583 LuanTable io = (LuanTable)PackageLuan.require(luan,"luan:Io"); 577 LuanTable io = (LuanTable)PackageLuan.require(luan,"luan:Io.luan");
584 return (LuanTable)io.get(luan,"stdin"); 578 return (LuanTable)io.get(luan,"stdin");
585 } 579 }
586 580
587 public static LuanTable newSchemes() { 581 public static LuanTable newSchemes() {
588 LuanTable schemes = new LuanTable(); 582 LuanTable schemes = new LuanTable();
589 try { 583 try {
590 schemes.rawPut( "null", new LuanJavaFunction(IoLuan.class.getMethod("null_"),null) ); 584 schemes.rawPut( "null", new LuanJavaFunction(IoLuan.class.getMethod("null_"),null) );
591 add( schemes, "string", String.class ); 585 add( schemes, "string", String.class );
592 add( schemes, "file", LuanState.class, String.class, Boolean.class ); 586 add( schemes, "file", LuanState.class, String.class );
593 add( schemes, "classpath", LuanState.class, String.class, Boolean.class ); 587 add( schemes, "classpath", LuanState.class, String.class );
594 add( schemes, "socket", String.class ); 588 add( schemes, "socket", String.class );
595 add( schemes, "http", String.class, Boolean.class ); 589 add( schemes, "http", String.class );
596 add( schemes, "https", String.class, Boolean.class ); 590 add( schemes, "https", String.class );
597 add( schemes, "luan", LuanState.class, String.class, Boolean.class ); 591 add( schemes, "luan", LuanState.class, String.class );
598 add( schemes, "stdin", LuanState.class ); 592 add( schemes, "stdin", LuanState.class );
599 } catch(NoSuchMethodException e) { 593 } catch(NoSuchMethodException e) {
600 throw new RuntimeException(e); 594 throw new RuntimeException(e);
601 } 595 }
602 return schemes; 596 return schemes;
603 } 597 }
604 598
605 private static LuanTable schemes(LuanState luan) throws LuanException { 599 private static LuanTable schemes(LuanState luan) throws LuanException {
606 LuanTable t = (LuanTable)PackageLuan.loaded(luan).rawGet("luan:Io"); 600 LuanTable t = (LuanTable)PackageLuan.loaded(luan).rawGet("luan:Io.luan");
607 if( t == null ) 601 if( t == null )
608 return newSchemes(); 602 return newSchemes();
609 t = (LuanTable)t.get(luan,"schemes"); 603 t = (LuanTable)t.get(luan,"schemes");
610 if( t == null ) 604 if( t == null )
611 return newSchemes(); 605 return newSchemes();
612 return t; 606 return t;
613 } 607 }
614 608
615 public static LuanTable uri(LuanState luan,String name,Boolean addExtension) throws LuanException { 609 public static LuanTable uri(LuanState luan,String name) throws LuanException {
616 int i = name.indexOf(':'); 610 int i = name.indexOf(':');
617 if( i == -1 ) 611 if( i == -1 )
618 throw new LuanException( "invalid Io.uri name '"+name+"', missing scheme" ); 612 throw new LuanException( "invalid Io.uri name '"+name+"', missing scheme" );
619 String scheme = name.substring(0,i); 613 String scheme = name.substring(0,i);
620 String location = name.substring(i+1); 614 String location = name.substring(i+1);
621 LuanTable schemes = schemes(luan); 615 LuanTable schemes = schemes(luan);
622 LuanFunction opener = (LuanFunction)schemes.get(luan,scheme); 616 LuanFunction opener = (LuanFunction)schemes.get(luan,scheme);
623 if( opener == null ) 617 if( opener == null )
624 throw new LuanException( "invalid scheme '"+scheme+"' in '"+name+"'" ); 618 throw new LuanException( "invalid scheme '"+scheme+"' in '"+name+"'" );
625 return (LuanTable)Luan.first(opener.call(luan,new Object[]{location,addExtension})); 619 return (LuanTable)Luan.first(opener.call(luan,new Object[]{location}));
626 } 620 }
627 621
628 public static final class LuanSocket extends LuanIO { 622 public static final class LuanSocket extends LuanIO {
629 private final Socket socket; 623 private final Socket socket;
630 624