JatinSanghvi.TextDecorator 1.0.0

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package JatinSanghvi.TextDecorator --version 1.0.0                
NuGet\Install-Package JatinSanghvi.TextDecorator -Version 1.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="JatinSanghvi.TextDecorator" Version="1.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add JatinSanghvi.TextDecorator --version 1.0.0                
#r "nuget: JatinSanghvi.TextDecorator, 1.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install JatinSanghvi.TextDecorator as a Cake Addin
#addin nuget:?package=JatinSanghvi.TextDecorator&version=1.0.0

// Install JatinSanghvi.TextDecorator as a Cake Tool
#tool nuget:?package=JatinSanghvi.TextDecorator&version=1.0.0                

Text Decorator for .NET

<div align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="images/logo-dark.png"> <source media="(prefers-color-scheme: light)" srcset="images/logo-light.png"> <img alt="Text Decorator for .NET logo" src="images/logo-light.png"> </picture> <p>An elegant way to color and style text in your console applications.</p> </div>

Text Colors

You will need to activate text decorator once in your application before calling any of its methods, else on certain consoles, the text decorations will not get applied.

_ = TextDecorator.Activate();

Console.WriteLine("Once in a green forest, a curious fox explored.".BrightRed());
Console.WriteLine("Lost and afraid, he sought a way back.".Green());

<picture> <source media="(prefers-color-scheme: dark)" srcset="images/1-fg-methods-dark.png"> <source media="(prefers-color-scheme: light)" srcset="images/1-fg-methods-light.png"> <img alt="Foreground Color Methods" src="images/1-fg-methods-light.png"> </picture>

The following are the different methods supported for setting the text color along with the corresponding ConsoleColor enum members.

Method Name ConsoleColor member
Black() Black
Red() DarkRed
Green() DarkGreen
Yellow() DarkYellow
Blue() DarkBlue
Magenta() DarkMagenta
Cyan() DarkCyan
White() Gray
Gray() DarkGray
BrightBlack() DarkGray
BrightRed() Red
BrightGreen() Green
BrightYellow() Yellow
BrightBlue() Blue
BrightMagenta() Magenta
BrightCyan() Cyan
BrightWhite() White

You can also apply text colors by passing one of the ConsoleColor enum members to the Color() method.

Console.WriteLine("Encountered friendly creatures who helped.".Color(ConsoleColor.DarkGray));

<picture> <source media="(prefers-color-scheme: dark)" srcset="images/2-fg-consolecolor-dark.png"> <source media="(prefers-color-scheme: light)" srcset="images/2-fg-consolecolor-light.png"> <img alt="Foreground ConsoleColor" src="images/2-fg-consolecolor-light.png"> </picture>

Text Background Colors

Console.WriteLine("Time passed; fox learned about the forest.".BgBlue());
Console.WriteLine("Adventures and challenges became life.".BgBrightWhite().Black());

<picture> <source media="(prefers-color-scheme: dark)" srcset="images/3-bg-methods-dark.png"> <source media="(prefers-color-scheme: light)" srcset="images/3-bg-methods-light.png"> <img alt="Background Color Methods" src="images/3-bg-methods-light.png"> </picture>

The following are the different methods supported for setting the text background colors along with the corresponding ConsoleColor enum members.

Method Name ConsoleColor member
BgBlack() Black
BgRed() DarkRed
BgGreen() DarkGreen
BgYellow() DarkYellow
BgBlue() DarkBlue
BgMagenta() DarkMagenta
BgCyan() DarkCyan
BgWhite() Gray
BgGray() DarkGray
BgBrightBlack() DarkGray
BgBrightRed() Red
BgBrightGreen() Green
BgBrightYellow() Yellow
BgBrightBlue() Blue
BgBrightMagenta() Magenta
BgBrightCyan() Cyan
BgBrightWhite() White

As with the text foreground colors, you can also apply text background colors by passing one of the ConsoleColor enum members to the BgColor() method.

Web Colors

You can specify either HTML color names such as HotPink or hex triplets such as #3b82f6 or #2c6, and apply those colors to the text foreground and background.

Console.WriteLine("An owl, wise and old, became his guide.".Color("HotPink"));
Console.WriteLine("Seasons changed, and fox grew wiser.".Color("#3b82f6"));
Console.WriteLine("Home now felt distant; forest was home.".BgColor("#2c6").Color("#031"));

<picture> <source media="(prefers-color-scheme: dark)" srcset="images/4-web-colors-dark.png"> <source media="(prefers-color-scheme: light)" srcset="images/4-web-colors-light.png"> <img alt="Web Colors" src="images/4-web-colors-light.png"> </picture>

Text Styles

Console.WriteLine("With the owl's wisdom, he thrived.".Italic());
Console.WriteLine("The fox embraced nature's harmony.".Underline());

<picture> <source media="(prefers-color-scheme: dark)" srcset="images/5-styles-dark.png"> <source media="(prefers-color-scheme: light)" srcset="images/5-styles-light.png"> <img alt="Text Styles" src="images/5-styles-light.png"> </picture>

There are many text styles supported as listed below.

Method Name Description
Bold() Increases brightness of foreground
Dim() Reduces brightness of foreground
Italic() Uses italic font variant
Underline() Adds underline to text
Blink() Sets text to blinking
Inverse() Swaps foreground and background
Hidden() Sets foreground same as background
Strikethrough() Crosses out text
DoubleUnderline() Adds double underline to text
Overline() Adds line over the text

Color and Style Combinations

You can chain the coloring and styling methods in any order as illustrated below to get the best results.

// String interpolation.
Console.WriteLine("In the {0}, he found {1}.", "green forest".BgGreen(), "belonging".BgBlue());

// String variables.
string action = "danced".Inverse();
Console.WriteLine($"His heart {action} and {action}.".Cyan());

// Composite decoration method.
static string highlight(string text) => text.Bold().Italic().Underline().Blink();

Console.WriteLine($"Forever, the {highlight("curious")} fox {highlight("thrived")}.".Yellow());

<picture> <source media="(prefers-color-scheme: dark)" srcset="images/6-combinations-dark.gif"> <source media="(prefers-color-scheme: light)" srcset="images/6-combinations-light.gif"> <img alt="Color and Style Combinations" src="images/6-combinations-light.gif"> </picture>

Notes

  • The color and style application will be disabled if the NO_COLOR environment variable is set. See https://no-color.org/ for more information.

  • The console colors will vary based on the terminal theme. Use HTML color names or hex triplets to use exact colors.

  • If there is any error during initialization, the library does not print any exception message to keep the user experience intact. It prints the input text without colors or styles applied for the rest of the application lifetime. To see the error message, you can pass true to the TextDecorator.Activate method. This should print exceptions, if any, that prevented the text from being decorated.

  • For decorating the non-string values, you will need to first convert them to strings before calling one of the text decoration methods on them. For example, $"I have {42.ToString().Red()} apples.". I could have defined the decoration extension methods on the object type but that would have flooded the IntelliSense suggestions for each and every variable.

  • The strings returned by TextDecorator methods should only be used for printing to console. Writing these strings to log files for example, may lead to illegible text and corruption of file content structure.

  • Support for Linux and Mac consoles is not yet tested.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.0 187 7/17/2023
1.0.0 143 7/16/2023