merge -r 61110:61111
[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 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
17 // 
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 // 
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 //
29
30 using System.IO;
31 using System.Security.Permissions;
32 using System.Text;
33
34 namespace System.CodeDom.Compiler {
35         
36         [PermissionSet (SecurityAction.LinkDemand, Unrestricted = true)]
37         [PermissionSet (SecurityAction.InheritanceDemand, Unrestricted = true)]
38         public class IndentedTextWriter
39                 : TextWriter
40         {
41                 private TextWriter writer;
42                 private string tabString;
43                 private int indent;
44                 private bool newline;
45
46                 //
47                 // Constructors
48                 //
49                 public IndentedTextWriter( TextWriter writer )
50                 {
51                         this.writer = writer;
52                         this.tabString = DefaultTabString;
53                         newline = true;
54                 }
55
56                 public IndentedTextWriter( TextWriter writer, string tabString )
57                 {
58                         this.writer = writer;
59                         this.tabString = tabString;
60                         newline = true;
61                 }
62
63                 
64                 //
65                 // Fields
66                 //
67                 public const string DefaultTabString = "    ";
68
69                 //
70                 // Properties
71                 //
72                 public override Encoding Encoding {
73                         get {
74                                 return writer.Encoding;
75                         }
76                 }
77
78                 public int Indent {
79                         get {
80                                 return indent;
81                         }
82                         set {
83                                 if (value < 0) {
84                                         value = 0;
85                                 }
86                                 indent = value;
87                         }
88                 }
89
90                 public TextWriter InnerWriter {
91                         get {
92                                 return writer;
93                         }
94                 }
95
96                 public override string NewLine {
97                         get {
98                                 return writer.NewLine;
99                         }
100                         set {
101                                 writer.NewLine = value;
102                         }
103                 }
104
105                 //
106                 // Methods
107                 //
108                 public override void Close()
109                 {
110                         writer.Close();
111                 }
112
113                 public override void Flush()
114                 {
115                         writer.Flush();
116                 }
117
118                 public override void Write( bool value )
119                 {
120                         OutputTabs();
121                         writer.Write( value );
122                 }
123
124                 public override void Write( char value )
125                 {
126                         OutputTabs();
127                         writer.Write( value );
128                 }
129                 
130                 public override void Write( char[] value )
131                 {
132                         OutputTabs();
133                         writer.Write( value );
134                 }
135
136                 public override void Write( double value )
137                 {
138                         OutputTabs();
139                         writer.Write( value );
140                 }
141
142                 public override void Write( int value )
143                 {
144                         OutputTabs();
145                         writer.Write( value );
146                 }
147
148                 public override void Write( long value )
149                 {
150                         OutputTabs();
151                         writer.Write( value );
152                 }
153
154                 public override void Write( object value )
155                 {
156                         OutputTabs();
157                         writer.Write( value );
158                 }
159
160                 public override void Write( float value )
161                 {
162                         OutputTabs();
163                         writer.Write( value );
164                 }
165
166                 public override void Write( string value )
167                 {
168                         OutputTabs();
169                         writer.Write( value );
170                 }
171
172                 public override void Write( string format, object arg )
173                 {
174                         OutputTabs();
175                         writer.Write( format, arg );
176                 }
177
178                 public override void Write( string format, params object[] args )
179                 {
180                         OutputTabs();
181                         writer.Write( format, args );
182                 }
183
184                 public override void Write( char[] buffer, int index, int count )
185                 {
186                         OutputTabs();
187                         writer.Write( buffer, index, count );
188                 }
189                 
190                 public override void Write( string format, object arg0, object arg1 )
191                 {
192                         OutputTabs();
193                         writer.Write( format, arg0, arg1 );
194                 }
195
196                 
197                 public override void WriteLine()
198                 {
199                         OutputTabs();
200                         writer.WriteLine();
201                         newline = true;
202                 }
203
204                 public override void WriteLine( bool value )
205                 {
206                         OutputTabs();
207                         writer.WriteLine( value );
208                         newline = true;
209                 }
210
211                 public override void WriteLine( char value )
212                 {
213                         OutputTabs();
214                         writer.WriteLine( value );
215                         newline = true;
216                 }
217
218                 public override void WriteLine( char[] value )
219                 {
220                         OutputTabs();
221                         writer.WriteLine( value );
222                         newline = true;
223                 }
224
225                 public override void WriteLine( double value )
226                 {
227                         OutputTabs();
228                         writer.WriteLine( value );
229                         newline = true;
230                 }
231
232                 public override void WriteLine( int value )
233                 {
234                         OutputTabs();
235                         writer.WriteLine( value );
236                         newline = true;
237                 }
238
239                 public override void WriteLine( long value )
240                 {
241                         OutputTabs();
242                         writer.WriteLine( value );
243                         newline = true;
244                 }
245
246                 public override void WriteLine( object value )
247                 {
248                         OutputTabs();
249                         writer.WriteLine( value );
250                         newline = true;
251                 }
252
253                 public override void WriteLine( float value )
254                 {
255                         OutputTabs();
256                         writer.WriteLine( value );
257                         newline = true;
258                 }
259
260                 public override void WriteLine( string value )
261                 {
262                         OutputTabs();
263                         writer.WriteLine( value );
264                         newline = true;
265                 }
266
267                 [CLSCompliant(false)]
268                 public override void WriteLine( uint value )
269                 {
270                         OutputTabs();
271                         writer.WriteLine( value );
272                         newline = true;
273                 }
274
275                 public override void WriteLine( string format, object arg )
276                 {
277                         OutputTabs();
278                         writer.WriteLine( format, arg );
279                         newline = true;
280                 }
281
282                 public override void WriteLine( string format, params object[] args )
283                 {
284                         OutputTabs();
285                         writer.WriteLine( format, args );
286                         newline = true;
287                 }
288
289                 public override void WriteLine( char[] buffer, int index, int count )
290                 {
291                         OutputTabs();
292                         writer.WriteLine( buffer, index, count );
293                         newline = true;
294                 }
295
296                 public override void WriteLine( string format, object arg0, object arg1 )
297                 {
298                         OutputTabs();
299                         writer.WriteLine( format, arg0, arg1 );
300                         newline = true;
301                 }
302
303
304                 public void WriteLineNoTabs( string value )
305                 {
306                         writer.WriteLine( value );
307                         newline = true;
308                 }
309
310
311                 protected virtual void OutputTabs()
312                 {
313                         if ( newline ) {
314                                 for ( int i = 0; i < indent; ++i )
315                                         writer.Write( tabString );
316                                 newline = false;
317                         }
318                 }
319         }
320 }