mirror of
				https://github.com/nsnail/spectre.console.git
				synced 2025-11-04 10:35:27 +08:00 
			
		
		
		
	Add support for markdown tables
Closes #85 * Split Border into BoxBorder and TableBorder * Change how different table parts are composed * Add markdown table border
This commit is contained in:
		
				
					committed by
					
						
						Patrik Svensson
					
				
			
			
				
	
			
			
			
						parent
						
							697273917e
						
					
				
				
					commit
					93ec7401c8
				
			@@ -3,7 +3,7 @@ using System;
 | 
			
		||||
namespace Spectre.Console.Rendering
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Contains extension methods for <see cref="Border"/>.
 | 
			
		||||
    /// Contains extension methods for <see cref="TableBorder"/>.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public static class BorderExtensions
 | 
			
		||||
    {
 | 
			
		||||
@@ -13,7 +13,7 @@ namespace Spectre.Console.Rendering
 | 
			
		||||
        /// <param name="border">The border to get the safe border for.</param>
 | 
			
		||||
        /// <param name="safe">Whether or not to return the safe border.</param>
 | 
			
		||||
        /// <returns>The safe border if one exist, otherwise the original border.</returns>
 | 
			
		||||
        public static Border GetSafeBorder(this Border border, bool safe)
 | 
			
		||||
        public static TableBorder GetSafeBorder(this TableBorder border, bool safe)
 | 
			
		||||
        {
 | 
			
		||||
            if (border is null)
 | 
			
		||||
            {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										31
									
								
								src/Spectre.Console/Extensions/BoxExtensions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/Spectre.Console/Extensions/BoxExtensions.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
namespace Spectre.Console.Rendering
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Contains extension methods for <see cref="BoxBorder"/>.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public static class BoxExtensions
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets the safe border for a border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="border">The border to get the safe border for.</param>
 | 
			
		||||
        /// <param name="safe">Whether or not to return the safe border.</param>
 | 
			
		||||
        /// <returns>The safe border if one exist, otherwise the original border.</returns>
 | 
			
		||||
        public static BoxBorder GetSafeBorder(this BoxBorder border, bool safe)
 | 
			
		||||
        {
 | 
			
		||||
            if (border is null)
 | 
			
		||||
            {
 | 
			
		||||
                throw new ArgumentNullException(nameof(border));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (safe && border.SafeBorder != null)
 | 
			
		||||
            {
 | 
			
		||||
                border = border.SafeBorder;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return border;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -7,229 +7,6 @@ namespace Spectre.Console
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public static class HasBorderExtensions
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Do not display a border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T NoBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.None);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a square border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T SquareBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.Square);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display an ASCII border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T AsciiBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.Ascii);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display another ASCII border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T Ascii2Border<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.Ascii2);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display an ASCII border with a double header border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T AsciiDoubleHeadBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.AsciiDoubleHead);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a rounded border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T RoundedBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.Rounded);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a minimal border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T MinimalBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.Minimal);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a minimal border with a heavy head.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T MinimalHeavyHeadBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.MinimalHeavyHead);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a minimal border with a double header border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T MinimalDoubleHeadBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.MinimalDoubleHead);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a simple border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T SimpleBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.Simple);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a simple border with heavy lines.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T SimpleHeavyBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.SimpleHeavy);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a simple border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T HorizontalBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.Horizontal);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a heavy border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T HeavyBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.Heavy);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a border with a heavy edge.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T HeavyEdgeBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.HeavyEdge);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a border with a heavy header.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T HeavyHeadBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.HeavyHead);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a double border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T DoubleBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.Double);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a border with a double edge.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T DoubleEdgeBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, Border.DoubleEdge);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Sets the border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <param name="border">The border to use.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T SetBorder<T>(this T obj, Border border)
 | 
			
		||||
            where T : class, IHasBorder
 | 
			
		||||
        {
 | 
			
		||||
            if (obj is null)
 | 
			
		||||
            {
 | 
			
		||||
                throw new ArgumentNullException(nameof(obj));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            obj.Border = border;
 | 
			
		||||
            return obj;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Disables the safe border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										101
									
								
								src/Spectre.Console/Extensions/HasBoxBorderExtensions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								src/Spectre.Console/Extensions/HasBoxBorderExtensions.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
namespace Spectre.Console
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Contains extension methods for <see cref="IHasBoxBorder"/>.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public static class HasBoxBorderExtensions
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Do not display a border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T NoBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBoxBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, BoxBorder.None);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a square border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T SquareBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBoxBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, BoxBorder.Square);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display an ASCII border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T AsciiBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBoxBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, BoxBorder.Ascii);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a rounded border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T RoundedBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBoxBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, BoxBorder.Rounded);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a heavy border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T HeavyBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBoxBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, BoxBorder.Heavy);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a double border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T DoubleBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasBoxBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, BoxBorder.Double);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Sets the border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <param name="border">The border to use.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T SetBorder<T>(this T obj, BoxBorder border)
 | 
			
		||||
            where T : class, IHasBoxBorder
 | 
			
		||||
        {
 | 
			
		||||
            if (obj is null)
 | 
			
		||||
            {
 | 
			
		||||
                throw new ArgumentNullException(nameof(obj));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            obj.Border = border;
 | 
			
		||||
            return obj;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										245
									
								
								src/Spectre.Console/Extensions/HasTableBorderExtensions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										245
									
								
								src/Spectre.Console/Extensions/HasTableBorderExtensions.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,245 @@
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
namespace Spectre.Console
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Contains extension methods for <see cref="IHasTableBorder"/>.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public static class HasTableBorderExtensions
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Do not display a border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T NoBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.None);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a square border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T SquareBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.Square);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display an ASCII border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T AsciiBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.Ascii);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display another ASCII border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T Ascii2Border<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.Ascii2);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display an ASCII border with a double header border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T AsciiDoubleHeadBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.AsciiDoubleHead);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a rounded border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T RoundedBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.Rounded);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a minimal border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T MinimalBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.Minimal);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a minimal border with a heavy head.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T MinimalHeavyHeadBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.MinimalHeavyHead);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a minimal border with a double header border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T MinimalDoubleHeadBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.MinimalDoubleHead);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a simple border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T SimpleBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.Simple);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a simple border with heavy lines.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T SimpleHeavyBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.SimpleHeavy);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a simple border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T HorizontalBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.Horizontal);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a heavy border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T HeavyBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.Heavy);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a border with a heavy edge.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T HeavyEdgeBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.HeavyEdge);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a border with a heavy header.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T HeavyHeadBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.HeavyHead);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a double border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T DoubleBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.Double);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a border with a double edge.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T DoubleEdgeBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.DoubleEdge);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Display a markdown border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T MarkdownBorder<T>(this T obj)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            return SetBorder(obj, TableBorder.Markdown);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Sets the border.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <typeparam name="T">An object type with a border.</typeparam>
 | 
			
		||||
        /// <param name="obj">The object to set the border for.</param>
 | 
			
		||||
        /// <param name="border">The border to use.</param>
 | 
			
		||||
        /// <returns>The same instance so that multiple calls can be chained.</returns>
 | 
			
		||||
        public static T SetBorder<T>(this T obj, TableBorder border)
 | 
			
		||||
            where T : class, IHasTableBorder
 | 
			
		||||
        {
 | 
			
		||||
            if (obj is null)
 | 
			
		||||
            {
 | 
			
		||||
                throw new ArgumentNullException(nameof(obj));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            obj.Border = border;
 | 
			
		||||
            return obj;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user