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 public void Dispose ()
87 void System.IDisposable.Dispose () {
93 public virtual void Flush()
98 public static TextWriter Synchronized (TextWriter writer)
100 return Synchronized (writer, false);
103 internal static TextWriter Synchronized (TextWriter writer, bool neverClose)
106 throw new ArgumentNullException ("writer is null");
108 if (writer is SynchronizedWriter)
111 return new SynchronizedWriter (writer, neverClose);
114 public virtual void Write (bool value)
116 Write (value.ToString ());
119 public virtual void Write (char value)
124 public virtual void Write (char[] value)
128 Write (value, 0, value.Length);
131 public virtual void Write (decimal value)
133 Write (value.ToString (internalFormatProvider));
136 public virtual void Write (double value)
138 Write (value.ToString (internalFormatProvider));
141 public virtual void Write (int value)
143 Write (value.ToString (internalFormatProvider));
146 public virtual void Write (long value)
148 Write (value.ToString (internalFormatProvider));
151 public virtual void Write (object value)
154 Write (value.ToString ());
157 public virtual void Write (float value)
159 Write (value.ToString (internalFormatProvider));
162 public virtual void Write (string value)
165 Write (value.ToCharArray ());
168 [CLSCompliant(false)]
169 public virtual void Write (uint value)
171 Write (value.ToString (internalFormatProvider));
174 [CLSCompliant(false)]
175 public virtual void Write (ulong value)
177 Write (value.ToString (internalFormatProvider));
180 public virtual void Write (string format, object arg0)
182 Write (String.Format (format, arg0));
185 public virtual void Write (string format, params object[] arg)
187 Write (String.Format (format, arg));
190 public virtual void Write (char[] buffer, int index, int count)
193 throw new ArgumentNullException ("buffer");
194 if (index < 0 || index > buffer.Length)
195 throw new ArgumentOutOfRangeException ("index");
196 // re-ordered to avoid possible integer overflow
197 if (count < 0 || (index > buffer.Length - count))
198 throw new ArgumentOutOfRangeException ("count");
200 for (; count > 0; --count, ++index) {
201 Write (buffer [index]);
205 public virtual void Write (string format, object arg0, object arg1)
207 Write (String.Format (format, arg0, arg1));
210 public virtual void Write (string format, object arg0, object arg1, object arg2 )
212 Write (String.Format (format, arg0, arg1, arg2));
215 public virtual void WriteLine ()
220 public virtual void WriteLine (bool value)
226 public virtual void WriteLine (char value)
232 public virtual void WriteLine (char[] value)
238 public virtual void WriteLine (decimal value)
244 public virtual void WriteLine (double value)
250 public virtual void WriteLine (int value)
256 public virtual void WriteLine (long value)
262 public virtual void WriteLine (object value)
268 public virtual void WriteLine (float value)
274 public virtual void WriteLine (string value)
280 [CLSCompliant(false)]
281 public virtual void WriteLine (uint value)
287 [CLSCompliant(false)]
288 public virtual void WriteLine (ulong value)
294 public virtual void WriteLine (string format, object arg0)
296 Write (format, arg0);
300 public virtual void WriteLine (string format, params object[] arg)
306 public virtual void WriteLine (char[] buffer, int index, int count)
308 Write (buffer, index, count);
312 public virtual void WriteLine (string format, object arg0, object arg1)
314 Write (format, arg0, arg1);
318 public virtual void WriteLine (string format, object arg0, object arg1, object arg2)
320 Write (format, arg0, arg1, arg2);
325 // Null version of the TextWriter, for the `Null' instance variable
327 sealed class NullTextWriter : TextWriter {
328 public override Encoding Encoding {
330 return Encoding.Default;
334 public override void Write (string s)
337 public override void Write (char value)
340 public override void Write (char[] value, int index, int count)
347 // Sychronized version of the TextWriter.
350 internal class SynchronizedWriter : TextWriter {
351 private TextWriter writer;
352 private bool neverClose;
354 public SynchronizedWriter (TextWriter writer)
355 : this (writer, false)
359 public SynchronizedWriter (TextWriter writer, bool neverClose)
361 this.writer = writer;
362 this.neverClose = neverClose;
365 public override void Close ()
374 public override void Flush ()
381 #region Write methods
382 public override void Write (bool value)
385 writer.Write (value);
389 public override void Write (char value)
392 writer.Write (value);
396 public override void Write (char [] value)
399 writer.Write (value);
403 public override void Write (Decimal value)
406 writer.Write (value);
410 public override void Write (int value)
413 writer.Write (value);
417 public override void Write (long value)
420 writer.Write (value);
424 public override void Write (object value)
427 writer.Write (value);
431 public override void Write (float value)
434 writer.Write (value);
438 public override void Write (string value)
441 writer.Write (value);
445 public override void Write (uint value)
448 writer.Write (value);
452 public override void Write (ulong value)
455 writer.Write (value);
459 public override void Write (string format, object value)
462 writer.Write (format, value);
466 public override void Write (string format, object [] value)
469 writer.Write (format, value);
473 public override void Write (char [] buffer, int index, int count)
476 writer.Write (buffer, index, count);
480 public override void Write (string format, object arg0, object arg1)
483 writer.Write (format, arg0, arg1);
487 public override void Write (string format, object arg0, object arg1, object arg2)
490 writer.Write (format, arg0, arg1, arg2);
494 #region WriteLine methods
495 public override void WriteLine ()
502 public override void WriteLine (bool value)
505 writer.WriteLine (value);
509 public override void WriteLine (char value)
512 writer.WriteLine (value);
516 public override void WriteLine (char [] value)
519 writer.WriteLine (value);
523 public override void WriteLine (Decimal value)
526 writer.WriteLine (value);
530 public override void WriteLine (double value)
533 writer.WriteLine (value);
537 public override void WriteLine (int value)
540 writer.WriteLine (value);
544 public override void WriteLine (long value)
547 writer.WriteLine (value);
551 public override void WriteLine (object value)
554 writer.WriteLine (value);
558 public override void WriteLine (float value)
561 writer.WriteLine (value);
565 public override void WriteLine (string value)
568 writer.WriteLine (value);
572 public override void WriteLine (uint value)
575 writer.WriteLine (value);
579 public override void WriteLine (ulong value)
582 writer.WriteLine (value);
586 public override void WriteLine (string format, object value)
589 writer.WriteLine (format, value);
593 public override void WriteLine (string format, object [] value)
596 writer.WriteLine (format, value);
600 public override void WriteLine (char [] buffer, int index, int count)
603 writer.WriteLine (buffer, index, count);
607 public override void WriteLine (string format, object arg0, object arg1)
610 writer.WriteLine (format, arg0, arg1);
614 public override void WriteLine (string format, object arg0, object arg1, object arg2)
617 writer.WriteLine (format, arg0, arg1, arg2);
622 public override Encoding Encoding {
625 return writer.Encoding;
630 public override IFormatProvider FormatProvider {
633 return writer.FormatProvider;
638 public override string NewLine {
641 return writer.NewLine;
647 writer.NewLine = value;