Mercurial Hosting > luan
annotate src/luan/modules/parsers/LuanToString.java @ 1485:6a24c8b33d6b
minor
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 01 May 2020 11:23:29 -0600 |
parents | 59fd2e8b1b9d |
children | f989778ca9e1 |
rev | line source |
---|---|
1189 | 1 package luan.modules.parsers; |
720 | 2 |
3 import java.util.List; | |
4 import java.util.Map; | |
1189 | 5 import luan.Luan; |
6 import luan.LuanTable; | |
7 import luan.LuanException; | |
1388
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
8 import luan.LuanRuntimeException; |
720 | 9 |
10 | |
1189 | 11 public final class LuanToString { |
1388
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
12 public boolean strict = false; |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
13 public boolean numberTypes = false; |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
14 public boolean compressed = false; |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
15 |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
16 private String equal; |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
17 private String comma; |
720 | 18 |
1388
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
19 public String toString(Object obj) throws LuanException { |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
20 equal = compressed ? "=" : " = "; |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
21 comma = compressed ? "," : ", "; |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
22 StringBuilder sb = new StringBuilder(); |
1388
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
23 toString(obj,sb,0); |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
24 return sb.toString(); |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
25 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
26 |
1189 | 27 private void toString(Object obj,StringBuilder sb,int indented) throws LuanException { |
28 if( obj == null ) { | |
29 sb.append( "nil" ); | |
30 return; | |
31 } | |
32 if( obj instanceof Boolean ) { | |
33 sb.append( obj ); | |
34 return; | |
35 } | |
36 if( obj instanceof Number ) { | |
1388
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
37 toString((Number)obj,sb); |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
38 return; |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
39 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
40 if( obj instanceof String ) { |
1190 | 41 sb.append( '"' ); |
42 sb.append( Luan.stringEncode((String)obj) ); | |
43 sb.append( '"' ); | |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
44 return; |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
45 } |
1189 | 46 if( obj instanceof LuanTable ) { |
47 toString((LuanTable)obj,sb,indented); | |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
48 return; |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
49 } |
1189 | 50 if( strict ) |
1409 | 51 throw new LuanException("can't handle type "+Luan.type(obj)); |
1189 | 52 sb.append( '<' ); |
53 sb.append( obj ); | |
54 sb.append( '>' ); | |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
55 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
56 |
1189 | 57 private void toString(LuanTable tbl,StringBuilder sb,int indented) throws LuanException { |
58 List list = tbl.asList(); | |
59 Map map = tbl.rawMap(); | |
60 sb.append( '{' ); | |
61 if( !list.isEmpty() ) { | |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
62 if( !compressed ) |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
63 indent(sb,indented+1); |
1485 | 64 toString(list.get(0),sb,indented+1); |
65 final int n = list.size(); | |
66 for( int i=1; i<n; i++ ) { | |
67 sb.append(comma); | |
68 toString(list.get(i),sb,indented+1); | |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
69 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
70 } |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
71 boolean first = true; |
1189 | 72 for( Object obj : map.entrySet() ) { |
73 Map.Entry entry = (Map.Entry)obj; | |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
74 if( compressed && first ) |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
75 first = false; |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
76 else |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
77 indent(sb,indented+1); |
1189 | 78 toString(entry,sb,indented+1); |
79 } | |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
80 if( !compressed && (!list.isEmpty() || !map.isEmpty()) ) |
1116 | 81 indent(sb,indented); |
1189 | 82 sb.append( '}' ); |
1115
809d74db1415
add json_pretty_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1113
diff
changeset
|
83 return; |
809d74db1415
add json_pretty_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1113
diff
changeset
|
84 } |
809d74db1415
add json_pretty_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1113
diff
changeset
|
85 |
1189 | 86 private void toString(Map.Entry entry,StringBuilder sb,int indented) throws LuanException { |
87 Object key = entry.getKey(); | |
88 if( key instanceof String && ((String)key).matches("[a-zA-Z_][a-zA-Z_0-9]*") ) { | |
89 sb.append( (String)key ); | |
90 } else { | |
91 sb.append( '[' ); | |
92 toString( key, sb, indented ); | |
93 sb.append( ']' ); | |
1115
809d74db1415
add json_pretty_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1113
diff
changeset
|
94 } |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
95 sb.append( equal ); |
1189 | 96 toString( entry.getValue(), sb, indented ); |
1115
809d74db1415
add json_pretty_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1113
diff
changeset
|
97 } |
809d74db1415
add json_pretty_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1113
diff
changeset
|
98 |
1189 | 99 private void indent(StringBuilder sb,int indented) { |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
100 if( compressed ) { |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
101 sb.append( comma ); |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
102 return; |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
103 } |
1189 | 104 sb.append( '\n' ); |
1117
9a1aa6fc0b4e
remove json_pretty_string and make json_string somewhat pretty
Franklin Schmidt <fschmidt@gmail.com>
parents:
1116
diff
changeset
|
105 for( int i=0; i<indented; i++ ) { |
1189 | 106 sb.append( '\t' ); |
1117
9a1aa6fc0b4e
remove json_pretty_string and make json_string somewhat pretty
Franklin Schmidt <fschmidt@gmail.com>
parents:
1116
diff
changeset
|
107 } |
9a1aa6fc0b4e
remove json_pretty_string and make json_string somewhat pretty
Franklin Schmidt <fschmidt@gmail.com>
parents:
1116
diff
changeset
|
108 } |
1115
809d74db1415
add json_pretty_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1113
diff
changeset
|
109 |
1388
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
110 private void toString(Number n,StringBuilder sb) throws LuanException { |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
111 if( numberTypes ) { |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
112 sb.append( n.getClass().getSimpleName().toLowerCase() ); |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
113 sb.append( '(' ); |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
114 } |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
115 sb.append( Luan.toString(n) ); |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
116 if( numberTypes ) |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
117 sb.append( ')' ); |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
118 } |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
119 |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
120 public static void addNumberTypes(LuanTable env) { |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
121 try { |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
122 LuanTable module = (LuanTable)env.luan().require("luan:Number.luan"); |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
123 env.put( "double", module.fn("double") ); |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
124 env.put( "float", module.fn("float") ); |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
125 env.put( "integer", module.fn("integer") ); |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
126 env.put( "long", module.fn("long") ); |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
127 } catch(LuanException e) { |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
128 throw new LuanRuntimeException(e); |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
129 } |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
130 } |
720 | 131 } |