1 30 31 package jbet; 32 import java.io.*; 33 import java.util.*; 34 35 36 37 38 abstract public class LineWriter extends PrintWriter { 39 abstract protected void doflush(); 40 abstract protected void doclose(); 41 abstract protected void outline(String s); 42 43 public static class PrintStreamLineWriter extends LineWriter { 44 protected PrintStream out; 45 PrintStreamLineWriter(PrintStream o) { out = o; } 46 protected void doflush() { out.flush(); } 47 protected void doclose() { out.close(); } 48 protected void outline(String s) { out.println(s); } 49 } 50 51 protected int ilevel = 0; 52 protected boolean startofline = true; 53 protected String indentstring = " "; 54 protected StringBuffer currline; 55 56 protected void doindent() { 57 for (int i = 0; i < ilevel; i++) 58 currline.append(indentstring); 59 } 60 61 protected void dowrite (char[] buf, int off, int len) { 62 while (off < len) { 63 int i; 64 for (i = off; i < off + len; i++) 65 if (buf[i] == '\n') break; 66 if (startofline) { 67 startofline = false; 68 doindent(); 69 } 70 currline.append(buf, off, i-off); 71 if (i < off + len) { 72 outline(currline.toString()); 73 currline.setLength(0); 74 startofline = true; 75 } 76 off = i + 1; 77 } 78 } 79 80 private static class MyWriter extends Writer { 81 LineWriter parent = null; 82 public void flush() { 83 parent.doflush(); 84 } 85 public void close() { 86 parent.doclose(); 87 } 88 public void write (char[] buf, int off, int len) { 89 parent.dowrite(buf, off,len); 90 } 91 MyWriter() {} 92 } 93 94 private LineWriter(MyWriter w) { 95 super(w); 96 w.parent = this; 97 currline = new StringBuffer (); 98 } 99 100 public LineWriter() { 101 this(new MyWriter()); 102 } 103 104 public void indent(int i) { 105 ilevel += i; 106 } 107 108 public void in() { 109 indent(1); 110 } 111 112 public void out() { 113 indent(-1); 114 } 115 116 } 117 | Popular Tags |