Mercurial Hosting > luan
comparison src/luan/modules/parsers/LuanToString.java @ 1607:fa066aaa068c
nginx caching
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 30 Apr 2021 20:23:28 -0600 |
parents | 8fbcc4747091 |
children | 8852f34a646a |
comparison
equal
deleted
inserted
replaced
1606:7c7f28c724e8 | 1607:fa066aaa068c |
---|---|
5 import java.util.Set; | 5 import java.util.Set; |
6 import java.util.HashSet; | 6 import java.util.HashSet; |
7 import java.util.Collections; | 7 import java.util.Collections; |
8 import luan.Luan; | 8 import luan.Luan; |
9 import luan.LuanTable; | 9 import luan.LuanTable; |
10 import luan.LuanFunction; | |
10 import luan.LuanException; | 11 import luan.LuanException; |
11 import luan.LuanRuntimeException; | 12 import luan.LuanRuntimeException; |
12 | 13 |
13 | 14 |
14 public final class LuanToString { | 15 public final class LuanToString { |
60 throw new LuanException("options values must be boolean"); | 61 throw new LuanException("options values must be boolean"); |
61 } | 62 } |
62 } | 63 } |
63 | 64 |
64 public final Settings settingsInit = new Settings(); | 65 public final Settings settingsInit = new Settings(); |
66 public Luan luan = null; | |
65 private final LuanTable subOptions; | 67 private final LuanTable subOptions; |
66 | 68 |
67 public LuanToString(LuanTable options,LuanTable subOptions) throws LuanException { | 69 public LuanToString(LuanTable options,LuanTable subOptions) throws LuanException { |
68 this.subOptions = subOptions; | 70 this.subOptions = subOptions; |
69 if( options != null ) { | 71 if( options != null ) { |
117 sb.append( obj ); | 119 sb.append( obj ); |
118 sb.append( '>' ); | 120 sb.append( '>' ); |
119 } | 121 } |
120 | 122 |
121 private void toString(LuanTable tbl,StringBuilder sb,int indented,Settings settings) throws LuanException { | 123 private void toString(LuanTable tbl,StringBuilder sb,int indented,Settings settings) throws LuanException { |
124 if( tbl.getMetatable()!=null ) { | |
125 if( settings.strict ) | |
126 throw new LuanException("can't handle metatables when strict"); | |
127 if( luan==null ) | |
128 throw new LuanException("can't handle metatables when luan isn't set"); | |
129 } | |
130 LuanFunction pairs = luan.getHandlerFunction("__pairs",tbl); | |
131 if( pairs != null ) { | |
132 sb.append( '{' ); | |
133 boolean first = true; | |
134 for( Object obj : tbl.iterable(luan) ) { | |
135 Map.Entry entry = (Map.Entry)obj; | |
136 if( settings.compressed ) { | |
137 if( first ) | |
138 first = false; | |
139 else | |
140 sb.append( ',' ); | |
141 } else if( settings.inline ) { | |
142 if( first ) { | |
143 first = false; | |
144 sb.append( ' ' ); | |
145 } else | |
146 sb.append( ", " ); | |
147 } else { | |
148 first = false; | |
149 indent(sb,indented+1); | |
150 } | |
151 toString(entry,sb,indented+1,settings); | |
152 } | |
153 if( !first ) { | |
154 if( settings.compressed ) { | |
155 } else if( settings.inline ) { | |
156 sb.append( ' ' ); | |
157 } else { | |
158 indent(sb,indented); | |
159 } | |
160 } | |
161 sb.append( '}' ); | |
162 return; | |
163 } | |
122 List list = tbl.asList(); | 164 List list = tbl.asList(); |
123 Map map = tbl.rawMap(); | 165 Map map = tbl.rawMap(); |
124 sb.append( '{' ); | 166 sb.append( '{' ); |
125 boolean first = true; | 167 boolean first = true; |
126 for( Object obj : list ) { | 168 for( Object obj : list ) { |