Mercurial Hosting > nabble
view src/nabble/naml/compiler/BlockWrapper.java @ 62:4674ed7d56df default tip
remove n2
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 30 Sep 2023 20:25:29 -0600 |
parents | 7ecd1a4ef557 |
children |
line wrap: on
line source
package nabble.naml.compiler; import java.io.StringWriter; import nabble.model.Init; class BlockWrapper { private static final int blockWriterLimit = Init.get("blockWriterLimit",10 * 1024 * 1024); private final Chunk block; private final RunState runState; BlockWrapper(Chunk block,RunState runState) { this.block = block; this.runState = runState; } private static class BlockWriter extends TemplatePrintWriter { private final StringWriter sw; private boolean isNull = false; BlockWriter(StringWriter sw) { super(sw); this.sw = sw; } public void print(Object obj) { if( obj == null && sw.getBuffer().length() == 0 && !isNull ) { isNull = true; return; } super.print(obj); checkSize(); } public void print(String s) { if( s == null && sw.getBuffer().length() == 0 && !isNull ) { isNull = true; return; } super.print(s); checkSize(); } private void checkSize() { if( sw.getBuffer().length() > blockWriterLimit ) throw new RuntimeException("BlockWriter too big"); } String value() { if( isNull ) { if( sw.getBuffer().length() > 0 ) throw new NullPointerException("null written to stream"); return null; } return sw.toString(); } } public final String toString() { BlockWriter out = new BlockWriter(new StringWriter()); printTo(out); out.close(); return out.value(); } void printTo(IPrintWriter out) { block.run(out,runState); } }