1
2
3
4
5 package xjavadoc;
6
7 import java.io.PrintWriter;
8 import java.io.Writer;
9
10 /***
11 * This visitor prints a node and all its children to a PrintWriter. The
12 * PrintWriter must be passed to the data variable in the jjtAccept method of
13 * the node from which printing should start. T print a whole class, call
14 * compilationUnit.jjtAccept( new PrintVisitor(), System.out );
15 *
16 * @author Aslak Hellesøy
17 * @created 8. januar 2002
18 * @todo replace PrintWriter with PrintWriter and remove the
19 * addUnicodeEscapes()
20 */
21 public final class NodePrinter
22 {
23
24 /***
25 * Describe what the method does
26 *
27 * @param node Describe what the parameter does
28 * @param o
29 * @todo-javadoc Write javadocs for method parameter
30 * @todo-javadoc Write javadocs for method
31 * @todo-javadoc Write javadocs for method parameter
32 * @todo-javadoc Write javadocs for method parameter
33 * @todo-javadoc Write javadocs for return value
34 */
35 public static void print( SimpleNode node, Writer o )
36 {
37 PrintWriter out = new PrintWriter( o );
38 Token t1 = node.getFirstToken();
39 Token t = new Token();
40
41 t.next = t1;
42
43 SimpleNode n;
44
45 for( int ord = 0; ord < node.jjtGetNumChildren(); ord++ )
46 {
47 n = ( SimpleNode ) node.jjtGetChild( ord );
48 while( true )
49 {
50 t = t.next;
51 if( t == n.getFirstToken() )
52 {
53 break;
54 }
55 print( t, out );
56 }
57 print( n, out );
58 t = n.getLastToken();
59 }
60
61 while( t != node.getLastToken() && t != null )
62 {
63 t = t.next;
64 if( t != null )
65 {
66 print( t, out );
67 }
68 }
69 }
70
71 /***
72 * Describe what the method does
73 *
74 * @param t Describe what the parameter does
75 * @param out Describe what the parameter does
76 * @todo-javadoc Write javadocs for method
77 * @todo-javadoc Write javadocs for method parameter
78 * @todo-javadoc Write javadocs for method parameter
79 */
80 private final static void print( Token t, PrintWriter out )
81 {
82 Token tt = t.specialToken;
83
84 if( tt != null )
85 {
86 while( tt.specialToken != null )
87 {
88 tt = tt.specialToken;
89 }
90 while( tt != null )
91 {
92 out.print( addUnicodeEscapes( tt.image ) );
93
94 tt = tt.next;
95 }
96 }
97 out.print( addUnicodeEscapes( t.image ) );
98
99 }
100
101 /***
102 * Describe the method
103 *
104 * @param str Describe the method parameter
105 * @return Describe the return value
106 * @todo-javadoc Describe the method
107 * @todo-javadoc Describe the method parameter
108 * @todo-javadoc Write javadocs for return value
109 */
110 private final static String addUnicodeEscapes( final String str )
111 {
112 return str;
113 }
114
115 /***
116 * Describe the method
117 *
118 * @param str Describe the method parameter
119 * @return Describe the return value
120 * @todo-javadoc Describe the method
121 * @todo-javadoc Describe the method parameter
122 * @todo-javadoc Write javadocs for return value
123 */
124 protected String addUnicodeEscapesOld( String str )
125 {
126 String retval = "";
127 char ch;
128
129 for( int i = 0; i < str.length(); i++ )
130 {
131 ch = str.charAt( i );
132 if( ( ch < 0x20 || ch > 0x7e ) &&
133 ch != '\t' && ch != '\n' && ch != '\r' && ch != '\f' )
134 {
135 String s = "0000" + Integer.toString( ch, 16 );
136
137 retval += "//u" + s.substring( s.length() - 4, s.length() );
138 }
139 else
140 {
141 retval += ch;
142 }
143 }
144 return retval;
145 }
146
147 }