2 // System.IO.TextWriter
5 // Marcin Szczepanski (marcins@zipworld.com.au)
6 // Miguel de Icaza (miguel@gnome.org)
7 // Paolo Molaro (lupus@ximian.com)
11 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38 public abstract class TextWriter : MarshalByRefObject, IDisposable {
40 protected TextWriter() {
41 CoreNewLine = System.Environment.NewLine.ToCharArray ();
44 protected TextWriter( IFormatProvider formatProvider ) {
45 CoreNewLine = System.Environment.NewLine.ToCharArray ();
46 internalFormatProvider = formatProvider;
49 protected char[] CoreNewLine;
51 internal IFormatProvider internalFormatProvider;
53 public static readonly TextWriter Null = new NullTextWriter ();
55 public abstract Encoding Encoding { get; }
57 public virtual IFormatProvider FormatProvider {
59 return internalFormatProvider;
63 public virtual string NewLine {
65 return new string(CoreNewLine);
70 value = Environment.NewLine;
72 CoreNewLine = value.ToCharArray();
76 public virtual void Close () {
80 protected virtual void Dispose (bool disposing) { }
82 void System.IDisposable.Dispose () {
87 public virtual void Flush()
92 public static TextWriter Synchronized (TextWriter writer)
94 return Synchronized (writer, false);
97 internal static TextWriter Synchronized (TextWriter writer, bool neverClose)
100 throw new ArgumentNullException ("writer is null");
102 if (writer is SynchronizedWriter)
105 return new SynchronizedWriter (writer, neverClose);
108 public virtual void Write (bool value)
110 Write (value.ToString ());
113 public virtual void Write (char value)
118 public virtual void Write (char[] value)
121 for (int i = 0; i < value.Length; ++i)
126 public virtual void Write (decimal value)
128 Write (value.ToString (internalFormatProvider));
131 public virtual void Write (double value)
133 Write (value.ToString (internalFormatProvider));
136 public virtual void Write (int value)
138 Write (value.ToString (internalFormatProvider));
141 public virtual void Write (long value)
143 Write (value.ToString (internalFormatProvider));
146 public virtual void Write (object value)
149 Write (value.ToString ());
152 public virtual void Write (float value)
154 Write (value.ToString (internalFormatProvider));
157 public virtual void Write (string value)
160 Write (value.ToCharArray ());
163 [CLSCompliant(false)]
164 public virtual void Write (uint value)
166 Write (value.ToString (internalFormatProvider));
169 [CLSCompliant(false)]
170 public virtual void Write (ulong value)
172 Write (value.ToString (internalFormatProvider));
175 public virtual void Write (string format, object arg0)
177 Write (String.Format (format, arg0));
180 public virtual void Write (string format, params object[] arg)
182 Write (String.Format (format, arg));
185 public virtual void Write (char[] buffer, int index, int count)
188 throw new ArgumentNullException ("buffer");
189 if (index < 0 || index > buffer.Length)
190 throw new ArgumentOutOfRangeException ("index");
191 // re-ordered to avoid possible integer overflow
192 if (count < 0 || (index > buffer.Length - count))
193 throw new ArgumentOutOfRangeException ("count");
195 for (; count > 0; --count, ++index) {
196 Write (buffer [index]);
200 public virtual void Write (string format, object arg0, object arg1)
202 Write (String.Format (format, arg0, arg1));
205 public virtual void Write (string format, object arg0, object arg1, object arg2 )
207 Write (String.Format (format, arg0, arg1, arg2));
210 public virtual void WriteLine ()
215 public virtual void WriteLine (bool value)
221 public virtual void WriteLine (char value)
227 public virtual void WriteLine (char[] value)
233 public virtual void WriteLine (decimal value)
239 public virtual void WriteLine (double value)
245 public virtual void WriteLine (int value)
251 public virtual void WriteLine (long value)
257 public virtual void WriteLine (object value)
263 public virtual void WriteLine (float value)
269 public virtual void WriteLine (string value)
275 [CLSCompliant(false)]
276 public virtual void WriteLine (uint value)
282 [CLSCompliant(false)]
283 public virtual void WriteLine (ulong value)
289 public virtual void WriteLine (string format, object arg0)
291 Write (format, arg0);
295 public virtual void WriteLine (string format, params object[] arg)
301 public virtual void WriteLine (char[] buffer, int index, int count)
303 Write (buffer, index, count);
307 public virtual void WriteLine (string format, object arg0, object arg1)
309 Write (format, arg0, arg1);
313 public virtual void WriteLine (string format, object arg0, object arg1, object arg2)
315 Write (format, arg0, arg1, arg2);
320 // Null version of the TextWriter, for the `Null' instance variable
322 sealed class NullTextWriter : TextWriter {
323 public override Encoding Encoding {
325 return Encoding.Default;
329 public override void Write (string s)
332 public override void Write (char value)
335 public override void Write (char[] value, int index, int count)
342 // Sychronized version of the TextWriter.
345 internal class SynchronizedWriter : TextWriter {
346 private TextWriter writer;
347 private bool neverClose;
349 public SynchronizedWriter (TextWriter writer)
350 : this (writer, false)
354 public SynchronizedWriter (TextWriter writer, bool neverClose)
356 this.writer = writer;
357 this.neverClose = neverClose;
360 public override void Close ()
369 public override void Flush ()
376 #region Write methods
377 public override void Write (bool value)
380 writer.Write (value);
384 public override void Write (char value)
387 writer.Write (value);
391 public override void Write (char [] value)
394 writer.Write (value);
398 public override void Write (Decimal value)
401 writer.Write (value);
405 public override void Write (int value)
408 writer.Write (value);
412 public override void Write (long value)
415 writer.Write (value);
419 public override void Write (object value)
422 writer.Write (value);
426 public override void Write (float value)
429 writer.Write (value);
433 public override void Write (string value)
436 writer.Write (value);
440 public override void Write (uint value)
443 writer.Write (value);
447 public override void Write (ulong value)
450 writer.Write (value);
454 public override void Write (string format, object value)
457 writer.Write (format, value);
461 public override void Write (string format, object [] value)
464 writer.Write (format, value);
468 public override void Write (char [] buffer, int index, int count)
471 writer.Write (buffer, index, count);
475 public override void Write (string format, object arg0, object arg1)
478 writer.Write (format, arg0, arg1);
482 public override void Write (string format, object arg0, object arg1, object arg2)
485 writer.Write (format, arg0, arg1, arg2);
489 #region WriteLine methods
490 public override void WriteLine ()
497 public override void WriteLine (bool value)
500 writer.WriteLine (value);
504 public override void WriteLine (char value)
507 writer.WriteLine (value);
511 public override void WriteLine (char [] value)
514 writer.WriteLine (value);
518 public override void WriteLine (Decimal value)
521 writer.WriteLine (value);
525 public override void WriteLine (double value)
528 writer.WriteLine (value);
532 public override void WriteLine (int value)
535 writer.WriteLine (value);
539 public override void WriteLine (long value)
542 writer.WriteLine (value);
546 public override void WriteLine (object value)
549 writer.WriteLine (value);
553 public override void WriteLine (float value)
556 writer.WriteLine (value);
560 public override void WriteLine (string value)
563 writer.WriteLine (value);
567 public override void WriteLine (uint value)
570 writer.WriteLine (value);
574 public override void WriteLine (ulong value)
577 writer.WriteLine (value);
581 public override void WriteLine (string format, object value)
584 writer.WriteLine (format, value);
588 public override void WriteLine (string format, object [] value)
591 writer.WriteLine (format, value);
595 public override void WriteLine (char [] buffer, int index, int count)
598 writer.WriteLine (buffer, index, count);
602 public override void WriteLine (string format, object arg0, object arg1)
605 writer.WriteLine (format, arg0, arg1);
609 public override void WriteLine (string format, object arg0, object arg1, object arg2)
612 writer.WriteLine (format, arg0, arg1, arg2);
617 public override Encoding Encoding {
620 return writer.Encoding;
625 public override IFormatProvider FormatProvider {
628 return writer.FormatProvider;
633 public override string NewLine {
636 return writer.NewLine;
642 writer.NewLine = value;