comparison core/src/luan/modules/IoLuan.java @ 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 5b36f663a1b8
children f1601a4ce1aa
comparison
equal deleted inserted replaced
461:e12841f7edef 462:2e79b47d02a2
490 public static LuanTable string(LuanState luan,String s) throws LuanException { 490 public static LuanTable string(LuanState luan,String s) throws LuanException {
491 Utils.checkNotNull(luan,s); 491 Utils.checkNotNull(luan,s);
492 return new LuanString(s).table(); 492 return new LuanString(s).table();
493 } 493 }
494 494
495 public static LuanTable file(LuanState luan,String name) throws LuanException { 495 public static LuanTable file(LuanState luan,String name,Boolean addExtension) throws LuanException {
496 if( addExtension != null && addExtension )
497 name += ".luan";
496 File file = new File(name); 498 File file = new File(name);
497 return new LuanFile(file).table(); 499 return new LuanFile(file).table();
498 } 500 }
499 501
500 public static LuanTable classpath(LuanState luan,String name) throws LuanException { 502 public static LuanTable classpath(LuanState luan,String name,Boolean addExtension) throws LuanException {
501 if( name.contains("//") ) 503 if( name.contains("//") )
502 return null; 504 return null;
505 if( addExtension != null && addExtension )
506 name += ".luan";
503 String path = name; 507 String path = name;
504 check(luan,"classpath:"+path); 508 check(luan,"classpath:"+path);
505 URL url; 509 URL url;
506 if( !path.contains("#") ) { 510 if( !path.contains("#") ) {
507 url = ClassLoader.getSystemResource(path); 511 url = ClassLoader.getSystemResource(path);
526 return new LuanUrl(url).table(); 530 return new LuanUrl(url).table();
527 531
528 return null; 532 return null;
529 } 533 }
530 534
531 private static LuanTable url(String url) throws IOException { 535 private static LuanTable url(String url,Boolean addExtension) throws IOException {
536 if( addExtension != null && addExtension )
537 url += ".luan";
532 return new LuanUrl(new URL(url)).table(); 538 return new LuanUrl(new URL(url)).table();
533 } 539 }
534 540
535 public static LuanTable http(String path) throws IOException { 541 public static LuanTable http(String path,Boolean addExtension) throws IOException {
536 return url("http:"+path); 542 return url("http:"+path,addExtension);
537 } 543 }
538 544
539 public static LuanTable https(String path) throws IOException { 545 public static LuanTable https(String path,Boolean addExtension) throws IOException {
540 return url("https:"+path); 546 return url("https:"+path,addExtension);
541 } 547 }
542 548
543 public static LuanTable luan(LuanState luan,String path) throws LuanException { 549 public static LuanTable luan(LuanState luan,String path,Boolean addExtension) throws LuanException {
544 return classpath( luan, "luan/modules/" + path ); 550 return classpath( luan, "luan/modules/" + path, addExtension );
545 } 551 }
546 552
547 public static LuanTable stdin(LuanState luan) throws LuanException { 553 public static LuanTable stdin(LuanState luan) throws LuanException {
548 LuanTable io = (LuanTable)PackageLuan.require(luan,"luan:Io"); 554 LuanTable io = (LuanTable)PackageLuan.require(luan,"luan:Io");
549 return (LuanTable)io.get(luan,"stdin"); 555 return (LuanTable)io.get(luan,"stdin");
551 557
552 public static LuanTable newSchemes() { 558 public static LuanTable newSchemes() {
553 LuanTable schemes = new LuanTable(); 559 LuanTable schemes = new LuanTable();
554 try { 560 try {
555 add( schemes, "string", LuanState.class, String.class ); 561 add( schemes, "string", LuanState.class, String.class );
556 add( schemes, "file", LuanState.class, String.class ); 562 add( schemes, "file", LuanState.class, String.class, Boolean.class );
557 add( schemes, "classpath", LuanState.class, String.class ); 563 add( schemes, "classpath", LuanState.class, String.class, Boolean.class );
558 add( schemes, "socket", LuanState.class, String.class ); 564 add( schemes, "socket", LuanState.class, String.class );
559 add( schemes, "http", String.class ); 565 add( schemes, "http", String.class, Boolean.class );
560 add( schemes, "https", String.class ); 566 add( schemes, "https", String.class, Boolean.class );
561 add( schemes, "luan", LuanState.class, String.class ); 567 add( schemes, "luan", LuanState.class, String.class, Boolean.class );
562 add( schemes, "stdin", LuanState.class ); 568 add( schemes, "stdin", LuanState.class );
563 } catch(NoSuchMethodException e) { 569 } catch(NoSuchMethodException e) {
564 throw new RuntimeException(e); 570 throw new RuntimeException(e);
565 } 571 }
566 return schemes; 572 return schemes;
574 if( t == null ) 580 if( t == null )
575 return newSchemes(); 581 return newSchemes();
576 return t; 582 return t;
577 } 583 }
578 584
579 public static LuanTable uri(LuanState luan,String name) throws LuanException { 585 public static LuanTable uri(LuanState luan,String name,Boolean addExtension) throws LuanException {
580 int i = name.indexOf(':'); 586 int i = name.indexOf(':');
581 if( i == -1 ) 587 if( i == -1 )
582 throw luan.exception( "invalid Io name '"+name+"', missing scheme" ); 588 throw luan.exception( "invalid Io.uri name '"+name+"', missing scheme" );
583 String scheme = name.substring(0,i); 589 String scheme = name.substring(0,i);
584 String location = name.substring(i+1); 590 String location = name.substring(i+1);
585 LuanTable schemes = schemes(luan); 591 LuanTable schemes = schemes(luan);
586 LuanFunction opener = (LuanFunction)schemes.get(luan,scheme); 592 LuanFunction opener = (LuanFunction)schemes.get(luan,scheme);
587 if( opener == null ) 593 if( opener == null )
588 throw luan.exception( "invalid scheme '"+scheme+"' in '"+name+"'" ); 594 throw luan.exception( "invalid scheme '"+scheme+"' in '"+name+"'" );
589 return (LuanTable)Luan.first(luan.call(opener,"<open \""+name+"\">",new Object[]{location})); 595 return (LuanTable)Luan.first(luan.call(opener,"<open \""+name+"\">",new Object[]{location,addExtension}));
590 } 596 }
591 597
592 public static final class LuanSocket extends LuanIO { 598 public static final class LuanSocket extends LuanIO {
593 private final Socket socket; 599 private final Socket socket;
594 600