KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jbet > LineWriter


1 /*
2  * JBET - Java Binary Enhancement Tool
3  * Copyright (c) 2003 Networks Associates Technology, Inc.
4  *
5  * This software was developed under DARPA/SPAWAR contract
6  * N66001-00-C-8602 "SPMA" as part of the
7  * DARPA OASIS research program.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in the
16  * documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28  * SUCH DAMAGE.
29  */

30
31 package jbet;
32 import java.io.*;
33 import java.util.*;
34
35 /* this class abstractifys PrintWriter and makes it line-oriented */
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 JavaDoc 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 JavaDoc s) { out.println(s); }
49     }
50
51     protected int ilevel = 0;
52     protected boolean startofline = true;
53     protected String JavaDoc indentstring = " ";
54     protected StringBuffer JavaDoc 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 JavaDoc();
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