comparison core/src/luan/Luan.java @ 171:3dcb0f9bee82

add core component git-svn-id: https://luan-java.googlecode.com/svn/trunk@172 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Sun, 22 Jun 2014 05:41:22 +0000
parents src/luan/Luan.java@9169581dc8fc
children 4edbf3204ca6
comparison
equal deleted inserted replaced
170:7c792a328a83 171:3dcb0f9bee82
1 package luan;
2
3 import luan.modules.BasicLuan;
4
5
6 public final class Luan {
7 public static final String version = "Luan 0.1";
8
9 public static void main(String[] args) {
10 LuanState luan = LuanState.newStandard();
11 try {
12 LuanFunction standalone = (LuanFunction)BasicLuan.load_file(luan,"java:luan/cmd_line.luan");
13 luan.call(standalone,args);
14 } catch(LuanException e) {
15 System.err.println(e.getMessage());
16 // e.printStackTrace();
17 System.exit(-1);
18 }
19 }
20
21 public static Object first(Object obj) {
22 if( !(obj instanceof Object[]) )
23 return obj;
24 Object[] a = (Object[])obj;
25 return a.length==0 ? null : a[0];
26 }
27
28 public static Object[] array(Object obj) {
29 return obj instanceof Object[] ? (Object[])obj : new Object[]{obj};
30 }
31
32 public static String type(Object obj) {
33 if( obj == null )
34 return "nil";
35 if( obj instanceof String )
36 return "string";
37 if( obj instanceof Boolean )
38 return "boolean";
39 if( obj instanceof Number )
40 return "number";
41 if( obj instanceof LuanTable )
42 return "table";
43 if( obj instanceof LuanFunction )
44 return "function";
45 if( obj instanceof byte[] )
46 return "binary";
47 return "userdata";
48 }
49
50 public static boolean toBoolean(Object obj) {
51 return obj != null && !Boolean.FALSE.equals(obj);
52 }
53
54 public static String asString(Object obj) {
55 if( obj instanceof String )
56 return (String)obj;
57 if( obj instanceof Number )
58 return toString((Number)obj);
59 return null;
60 }
61
62 public static Number toNumber(Object obj) {
63 return toNumber(obj,null);
64 }
65
66 public static Number toNumber(Object obj,Integer base) {
67 if( obj instanceof Number )
68 return (Number)obj;
69 if( obj instanceof String ) {
70 String s = (String)obj;
71 try {
72 if( base==null )
73 return Double.valueOf(s);
74 else
75 return Long.valueOf(s,base);
76 } catch(NumberFormatException e) {}
77 }
78 return null;
79 }
80
81 public static String toString(Number n) {
82 if( n instanceof Integer )
83 return n.toString();
84 String s = n.toString();
85 int iE = s.indexOf('E');
86 String ending = null;
87 if( iE != -1 ) {
88 ending = s.substring(iE);
89 s = s.substring(0,iE);
90 }
91 if( s.endsWith(".0") )
92 s = s.substring(0,s.length()-2);
93 if( ending != null )
94 s += ending;
95 return s;
96 }
97
98 public static Integer asInteger(Object obj) {
99 if( obj instanceof Integer )
100 return (Integer)obj;
101 if( !(obj instanceof Number) )
102 return null;
103 Number n = (Number)obj;
104 int i = n.intValue();
105 return i==n.doubleValue() ? Integer.valueOf(i) : null;
106 }
107
108 public static String toString(Object obj) {
109 if( obj == null )
110 return "nil";
111 if( obj instanceof Number )
112 return Luan.toString((Number)obj);
113 if( obj instanceof LuanException ) {
114 LuanException le = (LuanException)obj;
115 return le.getMessage();
116 }
117 if( obj instanceof byte[] )
118 return "binary: " + Integer.toHexString(obj.hashCode());
119 return obj.toString();
120 }
121
122 public static String stringEncode(String s) {
123 s = s.replace("\\","\\\\");
124 s = s.replace("\u0007","\\a");
125 s = s.replace("\b","\\b");
126 s = s.replace("\f","\\f");
127 s = s.replace("\n","\\n");
128 s = s.replace("\r","\\r");
129 s = s.replace("\t","\\t");
130 s = s.replace("\u000b","\\v");
131 s = s.replace("\"","\\\"");
132 return s;
133 }
134
135 public static String repr(Object obj) {
136 if( obj == null )
137 return "nil";
138 if( obj instanceof Boolean )
139 return Luan.toString((Boolean)obj);
140 if( obj instanceof Number )
141 return Luan.toString((Number)obj);
142 if( obj instanceof String )
143 return "\"" + stringEncode((String)obj) + "\"";
144 if( obj instanceof LuanRepr )
145 return ((LuanRepr)obj).repr();
146 return null;
147 }
148
149 private Luan() {} // never
150 }