IndentedTextWriter.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Server / System / Data / Services / Serializers / IndentedTextWriter.cs / 1305376 / IndentedTextWriter.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//  
//      Provides a writer implementation for Json format
//  
// 
// @owner  [....]
//--------------------------------------------------------------------- 

namespace System.Data.Services.Serializers
{
    using System; 
    using System.Diagnostics;
    using System.Globalization; 
    using System.IO; 
    using System.Text;
 
    /// Writes the Json text in indented format.
    /// 
    /// There are many more methods implemented in previous versions
    /// of this file to handle more type and newline cases. 
    /// 
    internal sealed class IndentedTextWriter : TextWriter 
    { 
        ///  writer to which Json text needs to be written
        private TextWriter writer; 

        ///  keeps track of the indentLevel
        private int indentLevel;
 
        ///  keeps track of pending tabs
        private bool tabsPending; 
 
        ///  string representation of tab
        private string tabString; 

        /// 
        /// Creates a new instance of IndentedTextWriter over the given text writer
        ///  
        /// writer which IndentedTextWriter wraps
        public IndentedTextWriter(TextWriter writer) : base(CultureInfo.InvariantCulture) 
        { 
            this.writer = writer;
            this.tabString = "    "; 
        }

        ///  Returns the Encoding for the given writer 
        public override Encoding Encoding 
        {
            get 
            { 
                return this.writer.Encoding;
            } 
        }

        ///  Returns the new line character 
        public override string NewLine 
        {
            get 
            { 
                return this.writer.NewLine;
            } 
        }

        ///  returns the current indent level 
        public int Indent 
        {
            get 
            { 
                return this.indentLevel;
            } 

            set
            {
                Debug.Assert(value >= 0, "value >= 0"); 
                if (value < 0)
                { 
                    value = 0; 
                }
 
                this.indentLevel = value;
            }
        }
 
        ///  Closes the underlying writer
        public override void Close() 
        { 
            // This is done to make sure we don't accidently close the underlying stream.
            // Since we don't own the stream, we should never close it. 
            throw new NotImplementedException();
        }

        ///  Clears all the buffer of the current writer  
        public override void Flush()
        { 
            this.writer.Flush(); 
        }
 
        /// 
        /// Writes the given string value to the underlying writer
        /// 
        /// string value to be written 
        public override void Write(string s)
        { 
            this.OutputTabs(); 
            this.writer.Write(s);
        } 

        /// 
        /// Writes the given char value to the underlying writer
        ///  
        /// char value to be written
        public override void Write(char value) 
        { 
            this.OutputTabs();
            this.writer.Write(value); 
        }

        /// 
        /// Writes the trimmed text if minimizeWhiteSpeace is set to true 
        /// 
        /// string value to be written 
        public void WriteTrimmed(string text) 
        {
            this.Write(text); 
        }

        ///  Writes the tabs depending on the indent level 
        private void OutputTabs() 
        {
            if (this.tabsPending) 
            { 
                for (int i = 0; i < this.indentLevel; i++)
                { 
                    this.writer.Write(this.tabString);
                }

                this.tabsPending = false; 
            }
        } 
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK