Mercurial Hosting > luan
annotate src/luan/modules/parsers/LuanToString.java @ 1806:3b7a8f1cc887 default tip
update discord
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 09 May 2024 20:39:53 -0600 |
parents | f8f5c51f5b36 |
children |
rev | line source |
---|---|
1189 | 1 package luan.modules.parsers; |
720 | 2 |
3 import java.util.List; | |
4 import java.util.Map; | |
1552
46d4baaad64d
add long_string_keys
Franklin Schmidt <fschmidt@gmail.com>
parents:
1550
diff
changeset
|
5 import java.util.Set; |
1553 | 6 import java.util.HashSet; |
1552
46d4baaad64d
add long_string_keys
Franklin Schmidt <fschmidt@gmail.com>
parents:
1550
diff
changeset
|
7 import java.util.Collections; |
1189 | 8 import luan.Luan; |
9 import luan.LuanTable; | |
1607 | 10 import luan.LuanFunction; |
1189 | 11 import luan.LuanException; |
1388
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
12 import luan.LuanRuntimeException; |
720 | 13 |
14 | |
1189 | 15 public final class LuanToString { |
1623
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
16 private static final Set<String> settingsKeys = new HashSet<String>(); |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
17 static { |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
18 Collections.addAll(settingsKeys |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
19 ,"strict" |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
20 ,"number_types" |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
21 ,"compressed" |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
22 ,"long_strings" |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
23 ,"inline" |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
24 ,"no_name_keys" |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
25 ); |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
26 } |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
27 |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
28 private static void checkOptions(LuanTable options) throws LuanException { |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
29 for( Map.Entry entry : options.rawIterable() ) { |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
30 if( !settingsKeys.contains(entry.getKey()) ) |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
31 throw new LuanException("invalid option: "+entry.getKey()); |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
32 if( !(entry.getValue() instanceof Boolean) ) |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
33 throw new LuanException("options values must be boolean"); |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
34 } |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
35 } |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
36 |
1553 | 37 public static class Settings implements Cloneable { |
38 public boolean strict = false; | |
39 public boolean numberTypes = false; | |
40 public boolean compressed = false; | |
41 public boolean longStrings = false; | |
42 public boolean inline = false; | |
1623
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
43 public boolean noNameKeys = false; |
1553 | 44 |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
45 void applyOptions(LuanTable options) throws LuanException { |
1623
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
46 checkOptions(options); |
1553 | 47 Boolean b; |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
48 b = (Boolean)options.rawGet("strict"); |
1553 | 49 if( b != null ) |
50 strict = b; | |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
51 b = (Boolean)options.rawGet("number_types"); |
1553 | 52 if( b != null ) |
53 numberTypes = b; | |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
54 b = (Boolean)options.rawGet("compressed"); |
1553 | 55 if( b != null ) |
56 compressed = b; | |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
57 b = (Boolean)options.rawGet("long_strings"); |
1553 | 58 if( b != null ) |
59 longStrings = b; | |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
60 b = (Boolean)options.rawGet("inline"); |
1553 | 61 if( b != null ) |
62 inline = b; | |
1623
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
63 b = (Boolean)options.rawGet("no_name_keys"); |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
64 if( b != null ) |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
65 noNameKeys = b; |
1553 | 66 } |
67 | |
68 public Settings cloneSettings() { | |
69 try { | |
70 return (Settings)clone(); | |
71 } catch(CloneNotSupportedException e) { | |
72 throw new RuntimeException(e); | |
73 } | |
74 } | |
75 } | |
76 private static final Settings keySettings = new Settings(); | |
77 | |
78 public final Settings settingsInit = new Settings(); | |
1623
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
79 private final Luan luan; |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
80 private final LuanFunction fnOptions; |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
81 private final LuanTable stack = new LuanTable(); |
1791 | 82 private final Set<LuanTable> seen = new HashSet<LuanTable>(); |
1623
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
83 |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
84 public LuanToString() { |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
85 this.luan = null; |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
86 this.fnOptions = null; |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
87 } |
1553 | 88 |
1623
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
89 public LuanToString(Luan luan) throws LuanException { |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
90 this.luan = luan; |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
91 this.fnOptions = null; |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
92 } |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
93 |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
94 public LuanToString(Luan luan,LuanTable options) throws LuanException { |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
95 this.luan = luan; |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
96 this.fnOptions = null; |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
97 settingsInit.applyOptions(options); |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
98 } |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
99 |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
100 public LuanToString(Luan luan,LuanFunction fnOptions) throws LuanException { |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
101 this.luan = luan; |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
102 this.fnOptions = fnOptions; |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
103 LuanTable options = getOptions(); |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
104 if( options != null ) |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
105 settingsInit.applyOptions(options); |
1623
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
106 } |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
107 |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
108 private LuanTable getOptions() throws LuanException { |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
109 if( fnOptions == null ) |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
110 return null; |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
111 Object rtn = fnOptions.call(luan,stack); |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
112 if( !(rtn==null || rtn instanceof LuanTable) ) |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
113 throw new LuanException("options-function must return table or nil"); |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
114 return (LuanTable)rtn; |
1553 | 115 } |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
116 |
1388
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
117 public String toString(Object obj) throws LuanException { |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
118 StringBuilder sb = new StringBuilder(); |
1791 | 119 objectToString(obj,sb,0,settingsInit); |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
120 return sb.toString(); |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
121 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
122 |
1791 | 123 private void objectToString(Object obj,StringBuilder sb,int indented,Settings settings) throws LuanException { |
1189 | 124 if( obj == null ) { |
125 sb.append( "nil" ); | |
126 return; | |
127 } | |
128 if( obj instanceof Boolean ) { | |
129 sb.append( obj ); | |
130 return; | |
131 } | |
132 if( obj instanceof Number ) { | |
1553 | 133 toString((Number)obj,sb,settings); |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
134 return; |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
135 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
136 if( obj instanceof String ) { |
1553 | 137 toString((String)obj,sb,settings); |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
138 return; |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
139 } |
1189 | 140 if( obj instanceof LuanTable ) { |
1553 | 141 toString((LuanTable)obj,sb,indented,settings); |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
142 return; |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
143 } |
1553 | 144 if( settings.strict ) |
1409 | 145 throw new LuanException("can't handle type "+Luan.type(obj)); |
1189 | 146 sb.append( '<' ); |
147 sb.append( obj ); | |
148 sb.append( '>' ); | |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
149 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
150 |
1553 | 151 private void toString(LuanTable tbl,StringBuilder sb,int indented,Settings settings) throws LuanException { |
1791 | 152 if( !seen.add(tbl) ) { |
153 if( settings.strict ) | |
154 throw new LuanException("loop in "+tbl.rawToString()); | |
155 sb.append("<loop>"); | |
156 return; | |
157 } | |
1607 | 158 if( tbl.getMetatable()!=null ) { |
159 if( settings.strict ) | |
160 throw new LuanException("can't handle metatables when strict"); | |
161 if( luan==null ) | |
162 throw new LuanException("can't handle metatables when luan isn't set"); | |
1612 | 163 LuanFunction pairs = luan.getHandlerFunction("__pairs",tbl); |
164 if( pairs != null ) { | |
165 sb.append( '{' ); | |
166 boolean first = true; | |
167 for( Object obj : tbl.iterable(luan) ) { | |
168 Map.Entry entry = (Map.Entry)obj; | |
169 if( settings.compressed ) { | |
170 if( first ) | |
171 first = false; | |
172 else | |
173 sb.append( ',' ); | |
174 } else if( settings.inline ) { | |
175 if( first ) { | |
176 first = false; | |
177 sb.append( ' ' ); | |
178 } else | |
179 sb.append( ", " ); | |
180 } else { | |
1607 | 181 first = false; |
1612 | 182 indent(sb,indented+1); |
183 } | |
184 toString(entry,sb,indented+1,settings); | |
185 } | |
186 if( !first ) { | |
187 if( settings.compressed ) { | |
188 } else if( settings.inline ) { | |
1607 | 189 sb.append( ' ' ); |
1612 | 190 } else { |
191 indent(sb,indented); | |
192 } | |
1607 | 193 } |
1612 | 194 sb.append( '}' ); |
195 return; | |
1607 | 196 } |
197 } | |
1189 | 198 List list = tbl.asList(); |
199 Map map = tbl.rawMap(); | |
200 sb.append( '{' ); | |
1518
f989778ca9e1
stringify, json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1485
diff
changeset
|
201 boolean first = true; |
f989778ca9e1
stringify, json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1485
diff
changeset
|
202 for( Object obj : list ) { |
1553 | 203 if( settings.compressed ) { |
204 if( first ) | |
205 first = false; | |
206 else | |
207 sb.append( ',' ); | |
208 } else if( settings.inline ) { | |
209 if( first ) { | |
210 first = false; | |
211 sb.append( ' ' ); | |
212 } else | |
213 sb.append( ", " ); | |
214 } else { | |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1409
diff
changeset
|
215 indent(sb,indented+1); |
1553 | 216 } |
1791 | 217 objectToString(obj,sb,indented+1,settings); |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
720
diff
changeset
|
218 } |
1189 | 219 for( Object obj : map.entrySet() ) { |
220 Map.Entry entry = (Map.Entry)obj; | |
1553 | 221 if( settings.compressed ) { |
222 if( first ) | |
223 first = false; | |
224 else | |
225 sb.append( ',' ); | |
226 } else if( settings.inline ) { | |
227 if( first ) { | |
228 first = false; | |
229 sb.append( ' ' ); | |
230 } else | |
231 sb.append( ", " ); | |
232 } else { | |
1518
f989778ca9e1
stringify, json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1485
diff
changeset
|
233 indent(sb,indented+1); |
1553 | 234 } |
235 toString(entry,sb,indented+1,settings); | |
1189 | 236 } |
1553 | 237 if( !list.isEmpty() || !map.isEmpty() ) { |
238 if( settings.compressed ) { | |
239 } else if( settings.inline ) { | |
240 sb.append( ' ' ); | |
241 } else { | |
242 indent(sb,indented); | |
243 } | |
244 } | |
1189 | 245 sb.append( '}' ); |
1115
809d74db1415
add json_pretty_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1113
diff
changeset
|
246 return; |
809d74db1415
add json_pretty_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1113
diff
changeset
|
247 } |
809d74db1415
add json_pretty_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1113
diff
changeset
|
248 |
1623
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
249 private void toString(Map.Entry entry,StringBuilder sb,int indented,Settings settings) |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
250 throws LuanException |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
251 { |
1189 | 252 Object key = entry.getKey(); |
1623
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
253 if( key instanceof String && !settings.noNameKeys && ((String)key).matches("[a-zA-Z_][a-zA-Z_0-9]*") ) { |
1189 | 254 sb.append( (String)key ); |
255 } else { | |
256 sb.append( '[' ); | |
1791 | 257 objectToString( key, sb, indented, keySettings ); |
1189 | 258 sb.append( ']' ); |
1115
809d74db1415
add json_pretty_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1113
diff
changeset
|
259 } |
1553 | 260 sb.append( settings.compressed ? "=" : " = " ); |
1623
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
261 stack.rawAdd(key); // push |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
262 LuanTable options = getOptions(); |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
263 if( options != null ) { |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
264 settings = settings.cloneSettings(); |
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
265 settings.applyOptions(options); |
1553 | 266 } |
1791 | 267 objectToString( entry.getValue(), sb, indented, settings ); |
1623
582384548a69
LuanToString takes function
Franklin Schmidt <fschmidt@gmail.com>
parents:
1618
diff
changeset
|
268 stack.removeFromList(stack.rawLength()); // pop |
1115
809d74db1415
add json_pretty_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1113
diff
changeset
|
269 } |
809d74db1415
add json_pretty_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1113
diff
changeset
|
270 |
1189 | 271 private void indent(StringBuilder sb,int indented) { |
272 sb.append( '\n' ); | |
1117
9a1aa6fc0b4e
remove json_pretty_string and make json_string somewhat pretty
Franklin Schmidt <fschmidt@gmail.com>
parents:
1116
diff
changeset
|
273 for( int i=0; i<indented; i++ ) { |
1189 | 274 sb.append( '\t' ); |
1117
9a1aa6fc0b4e
remove json_pretty_string and make json_string somewhat pretty
Franklin Schmidt <fschmidt@gmail.com>
parents:
1116
diff
changeset
|
275 } |
9a1aa6fc0b4e
remove json_pretty_string and make json_string somewhat pretty
Franklin Schmidt <fschmidt@gmail.com>
parents:
1116
diff
changeset
|
276 } |
1115
809d74db1415
add json_pretty_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1113
diff
changeset
|
277 |
1553 | 278 private void toString(Number n,StringBuilder sb,Settings settings) throws LuanException { |
279 if( settings.numberTypes ) { | |
1388
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
280 sb.append( n.getClass().getSimpleName().toLowerCase() ); |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
281 sb.append( '(' ); |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
282 } |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
283 sb.append( Luan.toString(n) ); |
1553 | 284 if( settings.numberTypes ) |
1388
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
285 sb.append( ')' ); |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
286 } |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
287 |
1562 | 288 public static void addNumberTypes(Luan luan,LuanTable env) { |
1388
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
289 try { |
1562 | 290 LuanTable module = (LuanTable)luan.require("luan:Number.luan"); |
1618
a37ffe2d1b14
fix not_found_handler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1612
diff
changeset
|
291 env.rawPut( "double", module.fn(luan,"double") ); |
a37ffe2d1b14
fix not_found_handler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1612
diff
changeset
|
292 env.rawPut( "float", module.fn(luan,"float") ); |
a37ffe2d1b14
fix not_found_handler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1612
diff
changeset
|
293 env.rawPut( "integer", module.fn(luan,"integer") ); |
a37ffe2d1b14
fix not_found_handler
Franklin Schmidt <fschmidt@gmail.com>
parents:
1612
diff
changeset
|
294 env.rawPut( "long", module.fn(luan,"long") ); |
1388
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
295 } catch(LuanException e) { |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
296 throw new LuanRuntimeException(e); |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
297 } |
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1190
diff
changeset
|
298 } |
1550 | 299 |
1553 | 300 private void toString(String s,StringBuilder sb,Settings settings) { |
301 if( settings.longStrings ) { | |
1552
46d4baaad64d
add long_string_keys
Franklin Schmidt <fschmidt@gmail.com>
parents:
1550
diff
changeset
|
302 StringBuilder start = new StringBuilder("[["); |
46d4baaad64d
add long_string_keys
Franklin Schmidt <fschmidt@gmail.com>
parents:
1550
diff
changeset
|
303 if( s.indexOf('\n') != -1 ) |
46d4baaad64d
add long_string_keys
Franklin Schmidt <fschmidt@gmail.com>
parents:
1550
diff
changeset
|
304 start.append('\n'); |
1550 | 305 StringBuilder end = new StringBuilder("]]"); |
306 while( s.contains(end) ) { | |
307 start.insert(1,'='); | |
308 end.insert(1,'='); | |
309 } | |
310 sb.append(start); | |
311 sb.append(s); | |
312 sb.append(end); | |
313 return; | |
314 } | |
315 sb.append( '"' ); | |
316 sb.append( Luan.stringEncode(s) ); | |
317 sb.append( '"' ); | |
318 } | |
319 | |
720 | 320 } |