2010-04-06 Jb Evain <jbevain@novell.com>
[mcs.git] / class / System / System.CodeDom.Compiler / IndentedTextWriter.cs
blob239d49b18b17a1d1069a772abcc9a6e456c43a4f
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.
30 using System.IO;
31 using System.Security.Permissions;
32 using System.Text;
34 namespace System.CodeDom.Compiler {
36 [PermissionSet (SecurityAction.LinkDemand, Unrestricted = true)]
37 [PermissionSet (SecurityAction.InheritanceDemand, Unrestricted = true)]
38 public class IndentedTextWriter
39 : TextWriter
41 private TextWriter writer;
42 private string tabString;
43 private int indent;
44 private bool newline;
47 // Constructors
49 public IndentedTextWriter( TextWriter writer )
51 this.writer = writer;
52 this.tabString = DefaultTabString;
53 newline = true;
56 public IndentedTextWriter( TextWriter writer, string tabString )
58 this.writer = writer;
59 this.tabString = tabString;
60 newline = true;
65 // Fields
67 public const string DefaultTabString = " ";
70 // Properties
72 public override Encoding Encoding {
73 get {
74 return writer.Encoding;
78 public int Indent {
79 get {
80 return indent;
82 set {
83 if (value < 0) {
84 value = 0;
86 indent = value;
90 public TextWriter InnerWriter {
91 get {
92 return writer;
96 public override string NewLine {
97 get {
98 return writer.NewLine;
100 set {
101 writer.NewLine = value;
106 // Methods
108 public override void Close()
110 writer.Close();
113 public override void Flush()
115 writer.Flush();
118 public override void Write( bool value )
120 OutputTabs();
121 writer.Write( value );
124 public override void Write( char value )
126 OutputTabs();
127 writer.Write( value );
130 public override void Write( char[] value )
132 OutputTabs();
133 writer.Write( value );
136 public override void Write( double value )
138 OutputTabs();
139 writer.Write( value );
142 public override void Write( int value )
144 OutputTabs();
145 writer.Write( value );
148 public override void Write( long value )
150 OutputTabs();
151 writer.Write( value );
154 public override void Write( object value )
156 OutputTabs();
157 writer.Write( value );
160 public override void Write( float value )
162 OutputTabs();
163 writer.Write( value );
166 public override void Write( string value )
168 OutputTabs();
169 writer.Write( value );
172 public override void Write( string format, object arg )
174 OutputTabs();
175 writer.Write( format, arg );
178 public override void Write( string format, params object[] args )
180 OutputTabs();
181 writer.Write( format, args );
184 public override void Write( char[] buffer, int index, int count )
186 OutputTabs();
187 writer.Write( buffer, index, count );
190 public override void Write( string format, object arg0, object arg1 )
192 OutputTabs();
193 writer.Write( format, arg0, arg1 );
197 public override void WriteLine()
199 OutputTabs();
200 writer.WriteLine();
201 newline = true;
204 public override void WriteLine( bool value )
206 OutputTabs();
207 writer.WriteLine( value );
208 newline = true;
211 public override void WriteLine( char value )
213 OutputTabs();
214 writer.WriteLine( value );
215 newline = true;
218 public override void WriteLine( char[] value )
220 OutputTabs();
221 writer.WriteLine( value );
222 newline = true;
225 public override void WriteLine( double value )
227 OutputTabs();
228 writer.WriteLine( value );
229 newline = true;
232 public override void WriteLine( int value )
234 OutputTabs();
235 writer.WriteLine( value );
236 newline = true;
239 public override void WriteLine( long value )
241 OutputTabs();
242 writer.WriteLine( value );
243 newline = true;
246 public override void WriteLine( object value )
248 OutputTabs();
249 writer.WriteLine( value );
250 newline = true;
253 public override void WriteLine( float value )
255 OutputTabs();
256 writer.WriteLine( value );
257 newline = true;
260 public override void WriteLine( string value )
262 OutputTabs();
263 writer.WriteLine( value );
264 newline = true;
267 [CLSCompliant(false)]
268 public override void WriteLine( uint value )
270 OutputTabs();
271 writer.WriteLine( value );
272 newline = true;
275 public override void WriteLine( string format, object arg )
277 OutputTabs();
278 writer.WriteLine( format, arg );
279 newline = true;
282 public override void WriteLine( string format, params object[] args )
284 OutputTabs();
285 writer.WriteLine( format, args );
286 newline = true;
289 public override void WriteLine( char[] buffer, int index, int count )
291 OutputTabs();
292 writer.WriteLine( buffer, index, count );
293 newline = true;
296 public override void WriteLine( string format, object arg0, object arg1 )
298 OutputTabs();
299 writer.WriteLine( format, arg0, arg1 );
300 newline = true;
304 public void WriteLineNoTabs( string value )
306 writer.WriteLine( value );
307 newline = true;
311 protected virtual void OutputTabs()
313 if ( newline ) {
314 for ( int i = 0; i < indent; ++i )
315 writer.Write( tabString );
316 newline = false;