big patch:
[mono.git] / mcs / class / System / System.CodeDom.Compiler / IndentedTextWriter.cs
1 //
2 // System.CodeDom.Compiler IndentedTextWriter class
3 //
4 // Author:
5 //   Daniel Stodden (stodden@in.tum.de)
6 //
7 // (C) 2002 Ximian, Inc.
8 //
9
10 using System.IO;
11 using System.Text;
12
13 namespace System.CodeDom.Compiler {
14         
15         public class IndentedTextWriter
16                 : TextWriter
17         {
18                 private TextWriter writer;
19                 private string tabString;
20                 private int indent;
21                 private bool newline;
22
23                 //
24                 // Constructors
25                 //
26                 public IndentedTextWriter( TextWriter writer )
27                 {
28                         this.writer = writer;
29                         this.tabString = DefaultTabString;
30                         newline = true;
31                 }
32
33                 public IndentedTextWriter( TextWriter writer, string tabString )
34                 {
35                         this.writer = writer;
36                         this.tabString = tabString;
37                         newline = true;
38                 }
39
40                 
41                 //
42                 // Fields
43                 //
44                 public const string DefaultTabString = " ";
45
46                 //
47                 // Properties
48                 //
49                 public override Encoding Encoding {
50                         get {
51                                 return writer.Encoding;
52                         }
53                 }
54
55                 public int Indent {
56                         get {
57                                 return indent;
58                         }
59                         set {
60                                 indent = value;
61                         }
62                 }
63
64                 public TextWriter InnerWriter {
65                         get {
66                                 return writer;
67                         }
68                 }
69
70                 public override string NewLine {
71                         get {
72                                 return writer.NewLine;
73                         }
74                         set {
75                                 writer.NewLine = value;
76                         }
77                 }
78
79                 //
80                 // Methods
81                 //
82                 public override void Close()
83                 {
84                         writer.Close();
85                 }
86
87                 public override void Flush()
88                 {
89                         writer.Flush();
90                 }
91
92                 public override void Write( bool value )
93                 {
94                         OutputTabs();
95                         writer.Write( value );
96                 }
97
98                 public override void Write( char value )
99                 {
100                         OutputTabs();
101                         writer.Write( value );
102                 }
103                 
104                 public override void Write( char[] value )
105                 {
106                         OutputTabs();
107                         writer.Write( value );
108                 }
109
110                 public override void Write( double value )
111                 {
112                         OutputTabs();
113                         writer.Write( value );
114                 }
115
116                 public override void Write( int value )
117                 {
118                         OutputTabs();
119                         writer.Write( value );
120                 }
121
122                 public override void Write( long value )
123                 {
124                         OutputTabs();
125                         writer.Write( value );
126                 }
127
128                 public override void Write( object value )
129                 {
130                         OutputTabs();
131                         writer.Write( value );
132                 }
133
134                 public override void Write( float value )
135                 {
136                         OutputTabs();
137                         writer.Write( value );
138                 }
139
140                 public override void Write( string value )
141                 {
142                         OutputTabs();
143                         writer.Write( value );
144                 }
145
146                 public override void Write( string format, object arg )
147                 {
148                         OutputTabs();
149                         writer.Write( format, arg );
150                 }
151
152                 public override void Write( string format, params object[] args )
153                 {
154                         OutputTabs();
155                         writer.Write( format, args );
156                 }
157
158                 public override void Write( char[] buffer, int index, int count )
159                 {
160                         OutputTabs();
161                         writer.Write( buffer, index, count );
162                 }
163                 
164                 public override void Write( string format, object arg0, object arg1 )
165                 {
166                         OutputTabs();
167                         writer.Write( format, arg0, arg1 );
168                 }
169
170                 
171                 public override void WriteLine()
172                 {
173                         OutputTabs();
174                         writer.WriteLine();
175                         newline = true;
176                 }
177
178                 public override void WriteLine( char value )
179                 {
180                         OutputTabs();
181                         writer.WriteLine( value );
182                         newline = true;
183                 }
184
185                 public override void WriteLine( char[] value )
186                 {
187                         OutputTabs();
188                         writer.WriteLine( value );
189                         newline = true;
190                 }
191
192                 public override void WriteLine( double value )
193                 {
194                         OutputTabs();
195                         writer.WriteLine( value );
196                         newline = true;
197                 }
198
199                 public override void WriteLine( int value )
200                 {
201                         OutputTabs();
202                         writer.WriteLine( value );
203                         newline = true;
204                 }
205
206                 public override void WriteLine( long value )
207                 {
208                         OutputTabs();
209                         writer.WriteLine( value );
210                         newline = true;
211                 }
212
213                 public override void WriteLine( object value )
214                 {
215                         OutputTabs();
216                         writer.WriteLine( value );
217                         newline = true;
218                 }
219
220                 public override void WriteLine( float value )
221                 {
222                         OutputTabs();
223                         writer.WriteLine( value );
224                         newline = true;
225                 }
226
227                 public override void WriteLine( string value )
228                 {
229                         OutputTabs();
230                         writer.WriteLine( value );
231                         newline = true;
232                 }
233
234                 public override void WriteLine( uint value )
235                 {
236                         OutputTabs();
237                         writer.WriteLine( value );
238                         newline = true;
239                 }
240
241                 public override void WriteLine( string format, object arg )
242                 {
243                         OutputTabs();
244                         writer.WriteLine( format, arg );
245                         newline = true;
246                 }
247
248                 public override void WriteLine( string format, params object[] args )
249                 {
250                         OutputTabs();
251                         writer.WriteLine( format, args );
252                         newline = true;
253                 }
254
255                 public override void WriteLine( char[] buffer, int index, int count )
256                 {
257                         OutputTabs();
258                         writer.WriteLine( buffer, index, count );
259                         newline = true;
260                 }
261
262                 public override void WriteLine( string format, object arg0, object arg1 )
263                 {
264                         OutputTabs();
265                         writer.WriteLine( format, arg0, arg1 );
266                         newline = true;
267                 }
268
269
270                 public void WriteLineNoTabs( string value )
271                 {
272                         writer.WriteLine( value );
273                         newline = true;
274                 }
275
276
277                 protected virtual void OutputTabs()
278                 {
279                         if ( newline ) {
280                                 for ( int i = 0; i < indent; ++i )
281                                         writer.Write( tabString );
282                                 newline = false;
283                         }
284                 }
285         }
286 }