| File: FrameworkFork\Microsoft.CodeDom\Compiler\IndentTextWriter.cs | Web Access |
| Project: src\src\dotnet-svcutil\lib\src\dotnet-svcutil-lib.csproj (dotnet-svcutil-lib) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. namespace Microsoft.CodeDom.Compiler { using System.Diagnostics; using System; using System.IO; using System.Text; using System.Globalization; /// <devdoc> /// <para>Provides a text writer that can indent new lines by a tabString token.</para> /// </devdoc> public class IndentedTextWriter : TextWriter { private TextWriter _writer; private int _indentLevel; private bool _tabsPending; private string _tabString; /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public const string DefaultTabString = " "; /// <devdoc> /// <para> /// Initializes a new instance of <see cref='Microsoft.CodeDom.Compiler.IndentedTextWriter'/> using the specified /// text writer and default tab string. /// </para> /// </devdoc> public IndentedTextWriter(TextWriter writer) : this(writer, DefaultTabString) { } /// <devdoc> /// <para> /// Initializes a new instance of <see cref='Microsoft.CodeDom.Compiler.IndentedTextWriter'/> using the specified /// text writer and tab string. /// </para> /// </devdoc> public IndentedTextWriter(TextWriter writer, string tabString) : base(CultureInfo.InvariantCulture) { _writer = writer; _tabString = tabString; _indentLevel = 0; _tabsPending = false; } /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override Encoding Encoding { get { return _writer.Encoding; } } /// <devdoc> /// <para> /// Gets or sets the new line character to use. /// </para> /// </devdoc> public override string NewLine { get { return _writer.NewLine; } set { _writer.NewLine = value; } } /// <devdoc> /// <para> /// Gets or sets the number of spaces to indent. /// </para> /// </devdoc> public int Indent { get { return _indentLevel; } set { Debug.Assert(value >= 0, "Bogus Indent... probably caused by mismatched Indent++ and Indent--"); if (value < 0) { value = 0; } _indentLevel = value; } } /// <devdoc> /// <para> /// Gets or sets the TextWriter to use. /// </para> /// </devdoc> public TextWriter InnerWriter { get { return _writer; } } internal string TabString { get { return _tabString; } } /// <devdoc> /// <para> /// Closes the document being written to. /// </para> /// </devdoc> //public override void Close() { // writer.Close(); //} /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override void Flush() { _writer.Flush(); } /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> protected virtual void OutputTabs() { if (_tabsPending) { for (int i = 0; i < _indentLevel; i++) { _writer.Write(_tabString); } _tabsPending = false; } } /// <devdoc> /// <para> /// Writes a string /// to the text stream. /// </para> /// </devdoc> public override void Write(string s) { OutputTabs(); _writer.Write(s); } /// <devdoc> /// <para> /// Writes the text representation of a Boolean value to the text stream. /// </para> /// </devdoc> public override void Write(bool value) { OutputTabs(); _writer.Write(value); } /// <devdoc> /// <para> /// Writes a character to the text stream. /// </para> /// </devdoc> public override void Write(char value) { OutputTabs(); _writer.Write(value); } /// <devdoc> /// <para> /// Writes a /// character array to the text stream. /// </para> /// </devdoc> public override void Write(char[] buffer) { OutputTabs(); _writer.Write(buffer); } /// <devdoc> /// <para> /// Writes a subarray /// of characters to the text stream. /// </para> /// </devdoc> public override void Write(char[] buffer, int index, int count) { OutputTabs(); _writer.Write(buffer, index, count); } /// <devdoc> /// <para> /// Writes the text representation of a Double to the text stream. /// </para> /// </devdoc> public override void Write(double value) { OutputTabs(); _writer.Write(value); } /// <devdoc> /// <para> /// Writes the text representation of /// a Single to the text /// stream. /// </para> /// </devdoc> public override void Write(float value) { OutputTabs(); _writer.Write(value); } /// <devdoc> /// <para> /// Writes the text representation of an integer to the text stream. /// </para> /// </devdoc> public override void Write(int value) { OutputTabs(); _writer.Write(value); } /// <devdoc> /// <para> /// Writes the text representation of an 8-byte integer to the text stream. /// </para> /// </devdoc> public override void Write(long value) { OutputTabs(); _writer.Write(value); } /// <devdoc> /// <para> /// Writes the text representation of an object /// to the text stream. /// </para> /// </devdoc> public override void Write(object value) { OutputTabs(); _writer.Write(value); } /// <devdoc> /// <para> /// Writes out a formatted string, using the same semantics as specified. /// </para> /// </devdoc> public override void Write(string format, object arg0) { OutputTabs(); _writer.Write(format, arg0); } /// <devdoc> /// <para> /// Writes out a formatted string, /// using the same semantics as specified. /// </para> /// </devdoc> public override void Write(string format, object arg0, object arg1) { OutputTabs(); _writer.Write(format, arg0, arg1); } /// <devdoc> /// <para> /// Writes out a formatted string, /// using the same semantics as specified. /// </para> /// </devdoc> public override void Write(string format, params object[] arg) { OutputTabs(); _writer.Write(format, arg); } /// <devdoc> /// <para> /// Writes the specified /// string to a line without tabs. /// </para> /// </devdoc> public void WriteLineNoTabs(string s) { _writer.WriteLine(s); } /// <devdoc> /// <para> /// Writes the specified string followed by /// a line terminator to the text stream. /// </para> /// </devdoc> public override void WriteLine(string s) { OutputTabs(); _writer.WriteLine(s); _tabsPending = true; } /// <devdoc> /// <para> /// Writes a line terminator. /// </para> /// </devdoc> public override void WriteLine() { OutputTabs(); _writer.WriteLine(); _tabsPending = true; } /// <devdoc> /// <para> /// Writes the text representation of a Boolean followed by a line terminator to /// the text stream. /// </para> /// </devdoc> public override void WriteLine(bool value) { OutputTabs(); _writer.WriteLine(value); _tabsPending = true; } /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override void WriteLine(char value) { OutputTabs(); _writer.WriteLine(value); _tabsPending = true; } /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override void WriteLine(char[] buffer) { OutputTabs(); _writer.WriteLine(buffer); _tabsPending = true; } /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override void WriteLine(char[] buffer, int index, int count) { OutputTabs(); _writer.WriteLine(buffer, index, count); _tabsPending = true; } /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override void WriteLine(double value) { OutputTabs(); _writer.WriteLine(value); _tabsPending = true; } /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override void WriteLine(float value) { OutputTabs(); _writer.WriteLine(value); _tabsPending = true; } /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override void WriteLine(int value) { OutputTabs(); _writer.WriteLine(value); _tabsPending = true; } /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override void WriteLine(long value) { OutputTabs(); _writer.WriteLine(value); _tabsPending = true; } /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override void WriteLine(object value) { OutputTabs(); _writer.WriteLine(value); _tabsPending = true; } /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override void WriteLine(string format, object arg0) { OutputTabs(); _writer.WriteLine(format, arg0); _tabsPending = true; } /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override void WriteLine(string format, object arg0, object arg1) { OutputTabs(); _writer.WriteLine(format, arg0, arg1); _tabsPending = true; } /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override void WriteLine(string format, params object[] arg) { OutputTabs(); _writer.WriteLine(format, arg); _tabsPending = true; } /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> //// [CLSCompliant(false)] public override void WriteLine(UInt32 value) { OutputTabs(); _writer.WriteLine(value); _tabsPending = true; } internal void InternalOutputTabs() { for (int i = 0; i < _indentLevel; i++) { _writer.Write(_tabString); } } } internal class Indentation { private IndentedTextWriter _writer; private int _indent; private string _s; internal Indentation(IndentedTextWriter writer, int indent) { _writer = writer; _indent = indent; _s = null; } internal string IndentationString { get { if (_s == null) { string tabString = _writer.TabString; StringBuilder sb = new StringBuilder(_indent * tabString.Length); for (int i = 0; i < _indent; i++) { sb.Append(tabString); } _s = sb.ToString(); } return _s; } } } }