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 ) {