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