Does anybody have or know of a TextWriter for the Console that understand how to indent/unindent and has the ability to set the indent level.
System.CodeDom.Compiler.IndentedTextWriter
This is built in to the .Net Framework in system.dll, but it is not super-robust. It should work under constrained useage (like not having a newline character in a string).
static void Main(string[] args)
{
using (System.CodeDom.Compiler.IndentedTextWriter writer = new System.CodeDom.Compiler.IndentedTextWriter(Console.Out, " "))
{
Console.SetOut(writer);
writer.Indent = 0;
writer.WriteLine("test");
writer.Indent = 1;
writer.WriteLine("What happens\nif there are line-\nbreak in the middle?");
writer.Indent = 2;
writer.WriteLine("another test");
writer.Indent = 3;
writer.WriteLine("and another test");
writer.Indent = 0;
writer.WriteLine("hello");
}
Console.ReadLine();
}
Try this:
class MyConsole : TextWriter {
TextWriter mOldConsole;
bool mDoIndent;
public MyConsole() {
mOldConsole = Console.Out;
Console.SetOut(this);
}
public int Indent { get; set; }
public override void Write(char ch) {
if (mDoIndent) {
mDoIndent = false;
for (int ix = 0; ix < Indent; ++ix) mOldConsole.Write(" ");
}
mOldConsole.Write(ch);
if (ch == '\n') mDoIndent = true;
}
public override System.Text.Encoding Encoding {
get { return mOldConsole.Encoding; }
}
}
Sample usage:
class Program {
static MyConsole Output = new MyConsole();
static void Main(string[] args) {
Console.WriteLine("Hello");
Output.Indent++;
Console.WriteLine("world");
Output.Indent--;
Console.WriteLine("Back");
Console.ReadLine();
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With