mirror of
https://github.com/nsnail/spectre.console.git
synced 2025-04-16 17:02:51 +08:00
Add more borders for grids, tables, and panels
* Ascii2 * AsciiDoubleHead * Double * DoubleEdge * Heavy * HeavyEdge * HeavyHead * Horizontal * Minimal * MinimalDoubleHead * MinimalHeavyHead * Simple * SimpleHeavy
This commit is contained in:
parent
3cc19520b0
commit
3e9796849b
14
examples/Borders/Borders.csproj
Normal file
14
examples/Borders/Borders.csproj
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
<Description>Demonstrates the different kind of borders.</Description>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
48
examples/Borders/Program.cs
Normal file
48
examples/Borders/Program.cs
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
using System;
|
||||||
|
using Spectre.Console;
|
||||||
|
using Spectre.Console.Rendering;
|
||||||
|
|
||||||
|
namespace Borders
|
||||||
|
{
|
||||||
|
public static class Program
|
||||||
|
{
|
||||||
|
public static void Main()
|
||||||
|
{
|
||||||
|
var items = new[]
|
||||||
|
{
|
||||||
|
Create("Ascii", Border.Ascii),
|
||||||
|
Create("Ascii2", Border.Ascii2),
|
||||||
|
Create("AsciiDoubleHead", Border.AsciiDoubleHead),
|
||||||
|
Create("Horizontal", Border.Horizontal),
|
||||||
|
Create("Simple", Border.Simple),
|
||||||
|
Create("SimpleHeavy", Border.SimpleHeavy),
|
||||||
|
Create("Minimal", Border.Minimal),
|
||||||
|
Create("MinimalHeavyHead", Border.MinimalHeavyHead),
|
||||||
|
Create("MinimalDoubleHead", Border.MinimalDoubleHead),
|
||||||
|
Create("Square", Border.Square),
|
||||||
|
Create("Rounded", Border.Rounded),
|
||||||
|
Create("Heavy", Border.Heavy),
|
||||||
|
Create("HeavyEdge", Border.HeavyEdge),
|
||||||
|
Create("HeavyHead", Border.HeavyHead),
|
||||||
|
Create("Double", Border.Double),
|
||||||
|
Create("DoubleEdge", Border.DoubleEdge),
|
||||||
|
};
|
||||||
|
|
||||||
|
AnsiConsole.WriteLine();
|
||||||
|
AnsiConsole.Render(new Columns(items).Collapse());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IRenderable Create(string name, Border border)
|
||||||
|
{
|
||||||
|
var table = new Table().SetBorder(border);
|
||||||
|
table.AddColumns("[yellow]Header 1[/]", "[yellow]Header 2[/]");
|
||||||
|
table.AddRow("Cell", "Cell");
|
||||||
|
table.AddRow("Cell", "Cell");
|
||||||
|
|
||||||
|
return new Panel(table)
|
||||||
|
.SetHeader($" {name} ", Style.Parse("blue"), Justify.Center)
|
||||||
|
.SetBorderStyle(Style.Parse("grey"))
|
||||||
|
.NoBorder();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
using Shouldly;
|
using Shouldly;
|
||||||
using Xunit;
|
|
||||||
using Spectre.Console.Rendering;
|
using Spectre.Console.Rendering;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
namespace Spectre.Console.Tests.Unit
|
namespace Spectre.Console.Tests.Unit
|
||||||
{
|
{
|
||||||
@ -30,6 +30,23 @@ namespace Spectre.Console.Tests.Unit
|
|||||||
border.ShouldBeSameAs(Border.None);
|
border.ShouldBeSameAs(Border.None);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().NoBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(3);
|
||||||
|
console.Lines[0].ShouldBe("Header 1 Header 2");
|
||||||
|
console.Lines[1].ShouldBe("Cell Cell ");
|
||||||
|
console.Lines[2].ShouldBe("Cell Cell ");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class AsciiBorder
|
public sealed class AsciiBorder
|
||||||
@ -56,6 +73,118 @@ namespace Spectre.Console.Tests.Unit
|
|||||||
border.ShouldBeSameAs(Border.Ascii);
|
border.ShouldBeSameAs(Border.Ascii);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().AsciiBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe("+---------------------+");
|
||||||
|
console.Lines[1].ShouldBe("| Header 1 | Header 2 |");
|
||||||
|
console.Lines[2].ShouldBe("|----------+----------|");
|
||||||
|
console.Lines[3].ShouldBe("| Cell | Cell |");
|
||||||
|
console.Lines[4].ShouldBe("| Cell | Cell |");
|
||||||
|
console.Lines[5].ShouldBe("+---------------------+");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class Ascii2Border
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Correct_Visibility()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var visibility = Border.Ascii2.Visible;
|
||||||
|
|
||||||
|
// Then
|
||||||
|
visibility.ShouldBeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TheSafeGetBorderMethod
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Safe_Border()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var border = Border.Ascii2.GetSafeBorder(safe: true);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
border.ShouldBeSameAs(Border.Ascii2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().Ascii2Border();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe("+----------+----------+");
|
||||||
|
console.Lines[1].ShouldBe("| Header 1 | Header 2 |");
|
||||||
|
console.Lines[2].ShouldBe("|----------+----------|");
|
||||||
|
console.Lines[3].ShouldBe("| Cell | Cell |");
|
||||||
|
console.Lines[4].ShouldBe("| Cell | Cell |");
|
||||||
|
console.Lines[5].ShouldBe("+----------+----------+");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class AsciiDoubleHeadBorder
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Correct_Visibility()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var visibility = Border.AsciiDoubleHead.Visible;
|
||||||
|
|
||||||
|
// Then
|
||||||
|
visibility.ShouldBeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TheSafeGetBorderMethod
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Safe_Border()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var border = Border.AsciiDoubleHead.GetSafeBorder(safe: true);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
border.ShouldBeSameAs(Border.AsciiDoubleHead);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().AsciiDoubleHeadBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe("+----------+----------+");
|
||||||
|
console.Lines[1].ShouldBe("| Header 1 | Header 2 |");
|
||||||
|
console.Lines[2].ShouldBe("|==========+==========|");
|
||||||
|
console.Lines[3].ShouldBe("| Cell | Cell |");
|
||||||
|
console.Lines[4].ShouldBe("| Cell | Cell |");
|
||||||
|
console.Lines[5].ShouldBe("+----------+----------+");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class SquareBorder
|
public sealed class SquareBorder
|
||||||
@ -82,6 +211,26 @@ namespace Spectre.Console.Tests.Unit
|
|||||||
border.ShouldBeSameAs(Border.Square);
|
border.ShouldBeSameAs(Border.Square);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().SquareBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe("┌──────────┬──────────┐");
|
||||||
|
console.Lines[1].ShouldBe("│ Header 1 │ Header 2 │");
|
||||||
|
console.Lines[2].ShouldBe("├──────────┼──────────┤");
|
||||||
|
console.Lines[3].ShouldBe("│ Cell │ Cell │");
|
||||||
|
console.Lines[4].ShouldBe("│ Cell │ Cell │");
|
||||||
|
console.Lines[5].ShouldBe("└──────────┴──────────┘");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class RoundedBorder
|
public sealed class RoundedBorder
|
||||||
@ -108,6 +257,544 @@ namespace Spectre.Console.Tests.Unit
|
|||||||
border.ShouldBeSameAs(Border.Square);
|
border.ShouldBeSameAs(Border.Square);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().RoundedBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe("╭──────────┬──────────╮");
|
||||||
|
console.Lines[1].ShouldBe("│ Header 1 │ Header 2 │");
|
||||||
|
console.Lines[2].ShouldBe("├──────────┼──────────┤");
|
||||||
|
console.Lines[3].ShouldBe("│ Cell │ Cell │");
|
||||||
|
console.Lines[4].ShouldBe("│ Cell │ Cell │");
|
||||||
|
console.Lines[5].ShouldBe("╰──────────┴──────────╯");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class MinimalBorder
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Correct_Visibility()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var visibility = Border.Minimal.Visible;
|
||||||
|
|
||||||
|
// Then
|
||||||
|
visibility.ShouldBeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TheSafeGetBorderMethod
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Safe_Border()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var border = Border.Minimal.GetSafeBorder(safe: true);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
border.ShouldBeSameAs(Border.Minimal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().MinimalBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe(" ");
|
||||||
|
console.Lines[1].ShouldBe(" Header 1 │ Header 2 ");
|
||||||
|
console.Lines[2].ShouldBe(" ──────────┼────────── ");
|
||||||
|
console.Lines[3].ShouldBe(" Cell │ Cell ");
|
||||||
|
console.Lines[4].ShouldBe(" Cell │ Cell ");
|
||||||
|
console.Lines[5].ShouldBe(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class MinimalHeavyHeadBorder
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Correct_Visibility()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var visibility = Border.MinimalHeavyHead.Visible;
|
||||||
|
|
||||||
|
// Then
|
||||||
|
visibility.ShouldBeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TheSafeGetBorderMethod
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Safe_Border()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var border = Border.MinimalHeavyHead.GetSafeBorder(safe: true);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
border.ShouldBeSameAs(Border.Minimal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().MinimalHeavyHeadBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe(" ");
|
||||||
|
console.Lines[1].ShouldBe(" Header 1 │ Header 2 ");
|
||||||
|
console.Lines[2].ShouldBe(" ━━━━━━━━━━┿━━━━━━━━━━ ");
|
||||||
|
console.Lines[3].ShouldBe(" Cell │ Cell ");
|
||||||
|
console.Lines[4].ShouldBe(" Cell │ Cell ");
|
||||||
|
console.Lines[5].ShouldBe(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class MinimalDoubleHeadBorder
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Correct_Visibility()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var visibility = Border.MinimalDoubleHead.Visible;
|
||||||
|
|
||||||
|
// Then
|
||||||
|
visibility.ShouldBeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TheSafeGetBorderMethod
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Safe_Border()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var border = Border.MinimalDoubleHead.GetSafeBorder(safe: true);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
border.ShouldBeSameAs(Border.MinimalDoubleHead);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().MinimalDoubleHeadBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe(" ");
|
||||||
|
console.Lines[1].ShouldBe(" Header 1 │ Header 2 ");
|
||||||
|
console.Lines[2].ShouldBe(" ══════════╪══════════ ");
|
||||||
|
console.Lines[3].ShouldBe(" Cell │ Cell ");
|
||||||
|
console.Lines[4].ShouldBe(" Cell │ Cell ");
|
||||||
|
console.Lines[5].ShouldBe(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class SimpleBorder
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Correct_Visibility()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var visibility = Border.Simple.Visible;
|
||||||
|
|
||||||
|
// Then
|
||||||
|
visibility.ShouldBeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TheSafeGetBorderMethod
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Safe_Border()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var border = Border.Simple.GetSafeBorder(safe: true);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
border.ShouldBeSameAs(Border.Simple);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().SimpleBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe(" ");
|
||||||
|
console.Lines[1].ShouldBe(" Header 1 Header 2 ");
|
||||||
|
console.Lines[2].ShouldBe("───────────────────────");
|
||||||
|
console.Lines[3].ShouldBe(" Cell Cell ");
|
||||||
|
console.Lines[4].ShouldBe(" Cell Cell ");
|
||||||
|
console.Lines[5].ShouldBe(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class HorizontalBorder
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Correct_Visibility()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var visibility = Border.Horizontal.Visible;
|
||||||
|
|
||||||
|
// Then
|
||||||
|
visibility.ShouldBeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TheSafeGetBorderMethod
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Safe_Border()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var border = Border.Horizontal.GetSafeBorder(safe: true);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
border.ShouldBeSameAs(Border.Horizontal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().HorizontalBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe("───────────────────────");
|
||||||
|
console.Lines[1].ShouldBe(" Header 1 Header 2 ");
|
||||||
|
console.Lines[2].ShouldBe("───────────────────────");
|
||||||
|
console.Lines[3].ShouldBe(" Cell Cell ");
|
||||||
|
console.Lines[4].ShouldBe(" Cell Cell ");
|
||||||
|
console.Lines[5].ShouldBe("───────────────────────");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class SimpleHeavyBorder
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Correct_Visibility()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var visibility = Border.SimpleHeavy.Visible;
|
||||||
|
|
||||||
|
// Then
|
||||||
|
visibility.ShouldBeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TheSafeGetBorderMethod
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Safe_Border()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var border = Border.SimpleHeavy.GetSafeBorder(safe: true);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
border.ShouldBeSameAs(Border.Simple);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().SimpleHeavyBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe(" ");
|
||||||
|
console.Lines[1].ShouldBe(" Header 1 Header 2 ");
|
||||||
|
console.Lines[2].ShouldBe("━━━━━━━━━━━━━━━━━━━━━━━");
|
||||||
|
console.Lines[3].ShouldBe(" Cell Cell ");
|
||||||
|
console.Lines[4].ShouldBe(" Cell Cell ");
|
||||||
|
console.Lines[5].ShouldBe(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class HeavyBorder
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Correct_Visibility()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var visibility = Border.Heavy.Visible;
|
||||||
|
|
||||||
|
// Then
|
||||||
|
visibility.ShouldBeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TheSafeGetBorderMethod
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Safe_Border()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var border = Border.Heavy.GetSafeBorder(safe: true);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
border.ShouldBeSameAs(Border.Square);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().HeavyBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe("┏━━━━━━━━━━┳━━━━━━━━━━┓");
|
||||||
|
console.Lines[1].ShouldBe("┃ Header 1 ┃ Header 2 ┃");
|
||||||
|
console.Lines[2].ShouldBe("┣━━━━━━━━━━╋━━━━━━━━━━┫");
|
||||||
|
console.Lines[3].ShouldBe("┃ Cell ┃ Cell ┃");
|
||||||
|
console.Lines[4].ShouldBe("┃ Cell ┃ Cell ┃");
|
||||||
|
console.Lines[5].ShouldBe("┗━━━━━━━━━━┻━━━━━━━━━━┛");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class HeavyEdgeBorder
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Correct_Visibility()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var visibility = Border.HeavyEdge.Visible;
|
||||||
|
|
||||||
|
// Then
|
||||||
|
visibility.ShouldBeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TheSafeGetBorderMethod
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Safe_Border()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var border = Border.HeavyEdge.GetSafeBorder(safe: true);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
border.ShouldBeSameAs(Border.Square);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().HeavyEdgeBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe("┏━━━━━━━━━━┯━━━━━━━━━━┓");
|
||||||
|
console.Lines[1].ShouldBe("┃ Header 1 │ Header 2 ┃");
|
||||||
|
console.Lines[2].ShouldBe("┠──────────┼──────────┨");
|
||||||
|
console.Lines[3].ShouldBe("┃ Cell │ Cell ┃");
|
||||||
|
console.Lines[4].ShouldBe("┃ Cell │ Cell ┃");
|
||||||
|
console.Lines[5].ShouldBe("┗━━━━━━━━━━┷━━━━━━━━━━┛");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class HeavyHeadBorder
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Correct_Visibility()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var visibility = Border.HeavyHead.Visible;
|
||||||
|
|
||||||
|
// Then
|
||||||
|
visibility.ShouldBeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TheSafeGetBorderMethod
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Safe_Border()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var border = Border.HeavyHead.GetSafeBorder(safe: true);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
border.ShouldBeSameAs(Border.Square);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().HeavyHeadBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe("┏━━━━━━━━━━┳━━━━━━━━━━┓");
|
||||||
|
console.Lines[1].ShouldBe("┃ Header 1 ┃ Header 2 ┃");
|
||||||
|
console.Lines[2].ShouldBe("┡━━━━━━━━━━╇━━━━━━━━━━┩");
|
||||||
|
console.Lines[3].ShouldBe("│ Cell │ Cell │");
|
||||||
|
console.Lines[4].ShouldBe("│ Cell │ Cell │");
|
||||||
|
console.Lines[5].ShouldBe("└──────────┴──────────┘");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class DoubleBorder
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Correct_Visibility()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var visibility = Border.Double.Visible;
|
||||||
|
|
||||||
|
// Then
|
||||||
|
visibility.ShouldBeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TheSafeGetBorderMethod
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Safe_Border()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var border = Border.Double.GetSafeBorder(safe: true);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
border.ShouldBeSameAs(Border.Double);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().DoubleBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe("╔══════════╦══════════╗");
|
||||||
|
console.Lines[1].ShouldBe("║ Header 1 ║ Header 2 ║");
|
||||||
|
console.Lines[2].ShouldBe("╠══════════╬══════════╣");
|
||||||
|
console.Lines[3].ShouldBe("║ Cell ║ Cell ║");
|
||||||
|
console.Lines[4].ShouldBe("║ Cell ║ Cell ║");
|
||||||
|
console.Lines[5].ShouldBe("╚══════════╩══════════╝");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class DoubleEdgeBorder
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Correct_Visibility()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var visibility = Border.DoubleEdge.Visible;
|
||||||
|
|
||||||
|
// Then
|
||||||
|
visibility.ShouldBeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class TheSafeGetBorderMethod
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Should_Return_Safe_Border()
|
||||||
|
{
|
||||||
|
// Given, When
|
||||||
|
var border = Border.DoubleEdge.GetSafeBorder(safe: true);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
border.ShouldBeSameAs(Border.DoubleEdge);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Should_Render_As_Expected()
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new PlainConsole();
|
||||||
|
var table = Fixture.GetTable().DoubleEdgeBorder();
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Render(table);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Lines.Count.ShouldBe(6);
|
||||||
|
console.Lines[0].ShouldBe("╔══════════╤══════════╗");
|
||||||
|
console.Lines[1].ShouldBe("║ Header 1 │ Header 2 ║");
|
||||||
|
console.Lines[2].ShouldBe("╟──────────┼──────────╢");
|
||||||
|
console.Lines[3].ShouldBe("║ Cell │ Cell ║");
|
||||||
|
console.Lines[4].ShouldBe("║ Cell │ Cell ║");
|
||||||
|
console.Lines[5].ShouldBe("╚══════════╧══════════╝");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class Fixture
|
||||||
|
{
|
||||||
|
public static Table GetTable()
|
||||||
|
{
|
||||||
|
var table = new Table();
|
||||||
|
table.AddColumns("Header 1", "Header 2");
|
||||||
|
table.AddRow("Cell", "Cell");
|
||||||
|
table.AddRow("Cell", "Cell");
|
||||||
|
return table;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Columns", "..\examples\Colu
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Info", "..\examples\Info\Info.csproj", "{225CE0D4-06AB-411A-8D29-707504FE53B3}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Info", "..\examples\Info\Info.csproj", "{225CE0D4-06AB-411A-8D29-707504FE53B3}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Borders", "..\examples\Borders\Borders.csproj", "{094245E6-4C94-485D-B5AC-3153E878B112}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@ -135,6 +137,18 @@ Global
|
|||||||
{225CE0D4-06AB-411A-8D29-707504FE53B3}.Release|x64.Build.0 = Release|Any CPU
|
{225CE0D4-06AB-411A-8D29-707504FE53B3}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{225CE0D4-06AB-411A-8D29-707504FE53B3}.Release|x86.ActiveCfg = Release|Any CPU
|
{225CE0D4-06AB-411A-8D29-707504FE53B3}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{225CE0D4-06AB-411A-8D29-707504FE53B3}.Release|x86.Build.0 = Release|Any CPU
|
{225CE0D4-06AB-411A-8D29-707504FE53B3}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{094245E6-4C94-485D-B5AC-3153E878B112}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{094245E6-4C94-485D-B5AC-3153E878B112}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{094245E6-4C94-485D-B5AC-3153E878B112}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{094245E6-4C94-485D-B5AC-3153E878B112}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{094245E6-4C94-485D-B5AC-3153E878B112}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{094245E6-4C94-485D-B5AC-3153E878B112}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{094245E6-4C94-485D-B5AC-3153E878B112}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{094245E6-4C94-485D-B5AC-3153E878B112}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{094245E6-4C94-485D-B5AC-3153E878B112}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{094245E6-4C94-485D-B5AC-3153E878B112}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{094245E6-4C94-485D-B5AC-3153E878B112}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{094245E6-4C94-485D-B5AC-3153E878B112}.Release|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@ -146,6 +160,7 @@ Global
|
|||||||
{1F51C55C-BA4C-4856-9001-0F7924FFB179} = {F0575243-121F-4DEE-9F6B-246E26DC0844}
|
{1F51C55C-BA4C-4856-9001-0F7924FFB179} = {F0575243-121F-4DEE-9F6B-246E26DC0844}
|
||||||
{33357599-C79D-4299-888F-634E2C3EACEF} = {F0575243-121F-4DEE-9F6B-246E26DC0844}
|
{33357599-C79D-4299-888F-634E2C3EACEF} = {F0575243-121F-4DEE-9F6B-246E26DC0844}
|
||||||
{225CE0D4-06AB-411A-8D29-707504FE53B3} = {F0575243-121F-4DEE-9F6B-246E26DC0844}
|
{225CE0D4-06AB-411A-8D29-707504FE53B3} = {F0575243-121F-4DEE-9F6B-246E26DC0844}
|
||||||
|
{094245E6-4C94-485D-B5AC-3153E878B112} = {F0575243-121F-4DEE-9F6B-246E26DC0844}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {5729B071-67A0-48FB-8B1B-275E6822086C}
|
SolutionGuid = {5729B071-67A0-48FB-8B1B-275E6822086C}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using Spectre.Console.Rendering;
|
using Spectre.Console.Rendering;
|
||||||
|
|
||||||
namespace Spectre.Console
|
namespace Spectre.Console
|
||||||
@ -17,6 +18,16 @@ namespace Spectre.Console
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static Border Ascii { get; } = new AsciiBorder();
|
public static Border Ascii { get; } = new AsciiBorder();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets another ASCII border.
|
||||||
|
/// </summary>
|
||||||
|
public static Border Ascii2 { get; } = new Ascii2Border();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets an ASCII border with a double header border.
|
||||||
|
/// </summary>
|
||||||
|
public static Border AsciiDoubleHead { get; } = new AsciiDoubleHeadBorder();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a square border.
|
/// Gets a square border.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -26,5 +37,61 @@ namespace Spectre.Console
|
|||||||
/// Gets a rounded border.
|
/// Gets a rounded border.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Border Rounded { get; } = new RoundedBorder();
|
public static Border Rounded { get; } = new RoundedBorder();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a minimal border.
|
||||||
|
/// </summary>
|
||||||
|
public static Border Minimal { get; } = new MinimalBorder();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a minimal border with a heavy head.
|
||||||
|
/// </summary>
|
||||||
|
public static Border MinimalHeavyHead { get; } = new MinimalHeavyHeadBorder();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a minimal border with a double header border.
|
||||||
|
/// </summary>
|
||||||
|
public static Border MinimalDoubleHead { get; } = new MinimalDoubleHeadBorder();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a simple border.
|
||||||
|
/// </summary>
|
||||||
|
public static Border Simple { get; } = new SimpleBorder();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a simple border with heavy lines.
|
||||||
|
/// </summary>
|
||||||
|
public static Border SimpleHeavy { get; } = new SimpleHeavyBorder();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a horizontal border.
|
||||||
|
/// </summary>
|
||||||
|
public static Border Horizontal { get; } = new HorizontalBorder();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a heavy border.
|
||||||
|
/// </summary>
|
||||||
|
public static Border Heavy { get; } = new HeavyBorder();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a border with a heavy edge.
|
||||||
|
/// </summary>
|
||||||
|
public static Border HeavyEdge { get; } = new HeavyEdgeBorder();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a border with a heavy header.
|
||||||
|
/// </summary>
|
||||||
|
public static Border HeavyHead { get; } = new HeavyHeadBorder();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a double border.
|
||||||
|
/// </summary>
|
||||||
|
[SuppressMessage("Naming", "CA1720:Identifier contains type name")]
|
||||||
|
public static Border Double { get; } = new DoubleBorder();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a border with a double edge.
|
||||||
|
/// </summary>
|
||||||
|
public static Border DoubleEdge { get; } = new DoubleEdgeBorder();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
37
src/Spectre.Console/Rendering/Borders/Ascii2Border.cs
Normal file
37
src/Spectre.Console/Rendering/Borders/Ascii2Border.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Rendering
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents another old school ASCII border.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class Ascii2Border : Border
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override string GetBoxPart(BorderPart part)
|
||||||
|
{
|
||||||
|
return part switch
|
||||||
|
{
|
||||||
|
BorderPart.HeaderTopLeft => "+",
|
||||||
|
BorderPart.HeaderTop => "-",
|
||||||
|
BorderPart.HeaderTopSeparator => "+",
|
||||||
|
BorderPart.HeaderTopRight => "+",
|
||||||
|
BorderPart.HeaderLeft => "|",
|
||||||
|
BorderPart.HeaderSeparator => "|",
|
||||||
|
BorderPart.HeaderRight => "|",
|
||||||
|
BorderPart.HeaderBottomLeft => "|",
|
||||||
|
BorderPart.HeaderBottom => "-",
|
||||||
|
BorderPart.HeaderBottomSeparator => "+",
|
||||||
|
BorderPart.HeaderBottomRight => "|",
|
||||||
|
BorderPart.CellLeft => "|",
|
||||||
|
BorderPart.CellSeparator => "|",
|
||||||
|
BorderPart.CellRight => "|",
|
||||||
|
BorderPart.FooterBottomLeft => "+",
|
||||||
|
BorderPart.FooterBottom => "-",
|
||||||
|
BorderPart.FooterBottomSeparator => "+",
|
||||||
|
BorderPart.FooterBottomRight => "+",
|
||||||
|
_ => throw new InvalidOperationException("Unknown box part."),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Rendering
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents an old school ASCII border with a double header border.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class AsciiDoubleHeadBorder : Border
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override string GetBoxPart(BorderPart part)
|
||||||
|
{
|
||||||
|
return part switch
|
||||||
|
{
|
||||||
|
BorderPart.HeaderTopLeft => "+",
|
||||||
|
BorderPart.HeaderTop => "-",
|
||||||
|
BorderPart.HeaderTopSeparator => "+",
|
||||||
|
BorderPart.HeaderTopRight => "+",
|
||||||
|
BorderPart.HeaderLeft => "|",
|
||||||
|
BorderPart.HeaderSeparator => "|",
|
||||||
|
BorderPart.HeaderRight => "|",
|
||||||
|
BorderPart.HeaderBottomLeft => "|",
|
||||||
|
BorderPart.HeaderBottom => "=",
|
||||||
|
BorderPart.HeaderBottomSeparator => "+",
|
||||||
|
BorderPart.HeaderBottomRight => "|",
|
||||||
|
BorderPart.CellLeft => "|",
|
||||||
|
BorderPart.CellSeparator => "|",
|
||||||
|
BorderPart.CellRight => "|",
|
||||||
|
BorderPart.FooterBottomLeft => "+",
|
||||||
|
BorderPart.FooterBottom => "-",
|
||||||
|
BorderPart.FooterBottomSeparator => "+",
|
||||||
|
BorderPart.FooterBottomRight => "+",
|
||||||
|
_ => throw new InvalidOperationException("Unknown box part."),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
37
src/Spectre.Console/Rendering/Borders/DoubleBorder.cs
Normal file
37
src/Spectre.Console/Rendering/Borders/DoubleBorder.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Rendering
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a double border.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class DoubleBorder : Border
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override string GetBoxPart(BorderPart part)
|
||||||
|
{
|
||||||
|
return part switch
|
||||||
|
{
|
||||||
|
BorderPart.HeaderTopLeft => "╔",
|
||||||
|
BorderPart.HeaderTop => "═",
|
||||||
|
BorderPart.HeaderTopSeparator => "╦",
|
||||||
|
BorderPart.HeaderTopRight => "╗",
|
||||||
|
BorderPart.HeaderLeft => "║",
|
||||||
|
BorderPart.HeaderSeparator => "║",
|
||||||
|
BorderPart.HeaderRight => "║",
|
||||||
|
BorderPart.HeaderBottomLeft => "╠",
|
||||||
|
BorderPart.HeaderBottom => "═",
|
||||||
|
BorderPart.HeaderBottomSeparator => "╬",
|
||||||
|
BorderPart.HeaderBottomRight => "╣",
|
||||||
|
BorderPart.CellLeft => "║",
|
||||||
|
BorderPart.CellSeparator => "║",
|
||||||
|
BorderPart.CellRight => "║",
|
||||||
|
BorderPart.FooterBottomLeft => "╚",
|
||||||
|
BorderPart.FooterBottom => "═",
|
||||||
|
BorderPart.FooterBottomSeparator => "╩",
|
||||||
|
BorderPart.FooterBottomRight => "╝",
|
||||||
|
_ => throw new InvalidOperationException("Unknown box part."),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
37
src/Spectre.Console/Rendering/Borders/DoubleEdgeBorder.cs
Normal file
37
src/Spectre.Console/Rendering/Borders/DoubleEdgeBorder.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Rendering
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a border with a double edge.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class DoubleEdgeBorder : Border
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override string GetBoxPart(BorderPart part)
|
||||||
|
{
|
||||||
|
return part switch
|
||||||
|
{
|
||||||
|
BorderPart.HeaderTopLeft => "╔",
|
||||||
|
BorderPart.HeaderTop => "═",
|
||||||
|
BorderPart.HeaderTopSeparator => "╤",
|
||||||
|
BorderPart.HeaderTopRight => "╗",
|
||||||
|
BorderPart.HeaderLeft => "║",
|
||||||
|
BorderPart.HeaderSeparator => "│",
|
||||||
|
BorderPart.HeaderRight => "║",
|
||||||
|
BorderPart.HeaderBottomLeft => "╟",
|
||||||
|
BorderPart.HeaderBottom => "─",
|
||||||
|
BorderPart.HeaderBottomSeparator => "┼",
|
||||||
|
BorderPart.HeaderBottomRight => "╢",
|
||||||
|
BorderPart.CellLeft => "║",
|
||||||
|
BorderPart.CellSeparator => "│",
|
||||||
|
BorderPart.CellRight => "║",
|
||||||
|
BorderPart.FooterBottomLeft => "╚",
|
||||||
|
BorderPart.FooterBottom => "═",
|
||||||
|
BorderPart.FooterBottomSeparator => "╧",
|
||||||
|
BorderPart.FooterBottomRight => "╝",
|
||||||
|
_ => throw new InvalidOperationException("Unknown box part."),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
40
src/Spectre.Console/Rendering/Borders/HeavyBorder.cs
Normal file
40
src/Spectre.Console/Rendering/Borders/HeavyBorder.cs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Rendering
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a heavy border.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class HeavyBorder : Border
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override Border? SafeBorder => Border.Square;
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override string GetBoxPart(BorderPart part)
|
||||||
|
{
|
||||||
|
return part switch
|
||||||
|
{
|
||||||
|
BorderPart.HeaderTopLeft => "┏",
|
||||||
|
BorderPart.HeaderTop => "━",
|
||||||
|
BorderPart.HeaderTopSeparator => "┳",
|
||||||
|
BorderPart.HeaderTopRight => "┓",
|
||||||
|
BorderPart.HeaderLeft => "┃",
|
||||||
|
BorderPart.HeaderSeparator => "┃",
|
||||||
|
BorderPart.HeaderRight => "┃",
|
||||||
|
BorderPart.HeaderBottomLeft => "┣",
|
||||||
|
BorderPart.HeaderBottom => "━",
|
||||||
|
BorderPart.HeaderBottomSeparator => "╋",
|
||||||
|
BorderPart.HeaderBottomRight => "┫",
|
||||||
|
BorderPart.CellLeft => "┃",
|
||||||
|
BorderPart.CellSeparator => "┃",
|
||||||
|
BorderPart.CellRight => "┃",
|
||||||
|
BorderPart.FooterBottomLeft => "┗",
|
||||||
|
BorderPart.FooterBottom => "━",
|
||||||
|
BorderPart.FooterBottomSeparator => "┻",
|
||||||
|
BorderPart.FooterBottomRight => "┛",
|
||||||
|
_ => throw new InvalidOperationException("Unknown box part."),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
40
src/Spectre.Console/Rendering/Borders/HeavyEdgeBorder.cs
Normal file
40
src/Spectre.Console/Rendering/Borders/HeavyEdgeBorder.cs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Rendering
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a border with a heavy edge.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class HeavyEdgeBorder : Border
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override Border? SafeBorder => Border.Square;
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override string GetBoxPart(BorderPart part)
|
||||||
|
{
|
||||||
|
return part switch
|
||||||
|
{
|
||||||
|
BorderPart.HeaderTopLeft => "┏",
|
||||||
|
BorderPart.HeaderTop => "━",
|
||||||
|
BorderPart.HeaderTopSeparator => "┯",
|
||||||
|
BorderPart.HeaderTopRight => "┓",
|
||||||
|
BorderPart.HeaderLeft => "┃",
|
||||||
|
BorderPart.HeaderSeparator => "│",
|
||||||
|
BorderPart.HeaderRight => "┃",
|
||||||
|
BorderPart.HeaderBottomLeft => "┠",
|
||||||
|
BorderPart.HeaderBottom => "─",
|
||||||
|
BorderPart.HeaderBottomSeparator => "┼",
|
||||||
|
BorderPart.HeaderBottomRight => "┨",
|
||||||
|
BorderPart.CellLeft => "┃",
|
||||||
|
BorderPart.CellSeparator => "│",
|
||||||
|
BorderPart.CellRight => "┃",
|
||||||
|
BorderPart.FooterBottomLeft => "┗",
|
||||||
|
BorderPart.FooterBottom => "━",
|
||||||
|
BorderPart.FooterBottomSeparator => "┷",
|
||||||
|
BorderPart.FooterBottomRight => "┛",
|
||||||
|
_ => throw new InvalidOperationException("Unknown box part."),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
40
src/Spectre.Console/Rendering/Borders/HeavyHeadBorder.cs
Normal file
40
src/Spectre.Console/Rendering/Borders/HeavyHeadBorder.cs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Rendering
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a border with a heavy header.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class HeavyHeadBorder : Border
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override Border? SafeBorder => Border.Square;
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override string GetBoxPart(BorderPart part)
|
||||||
|
{
|
||||||
|
return part switch
|
||||||
|
{
|
||||||
|
BorderPart.HeaderTopLeft => "┏",
|
||||||
|
BorderPart.HeaderTop => "━",
|
||||||
|
BorderPart.HeaderTopSeparator => "┳",
|
||||||
|
BorderPart.HeaderTopRight => "┓",
|
||||||
|
BorderPart.HeaderLeft => "┃",
|
||||||
|
BorderPart.HeaderSeparator => "┃",
|
||||||
|
BorderPart.HeaderRight => "┃",
|
||||||
|
BorderPart.HeaderBottomLeft => "┡",
|
||||||
|
BorderPart.HeaderBottom => "━",
|
||||||
|
BorderPart.HeaderBottomSeparator => "╇",
|
||||||
|
BorderPart.HeaderBottomRight => "┩",
|
||||||
|
BorderPart.CellLeft => "│",
|
||||||
|
BorderPart.CellSeparator => "│",
|
||||||
|
BorderPart.CellRight => "│",
|
||||||
|
BorderPart.FooterBottomLeft => "└",
|
||||||
|
BorderPart.FooterBottom => "─",
|
||||||
|
BorderPart.FooterBottomSeparator => "┴",
|
||||||
|
BorderPart.FooterBottomRight => "┘",
|
||||||
|
_ => throw new InvalidOperationException("Unknown box part."),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
37
src/Spectre.Console/Rendering/Borders/HorizontalBorder.cs
Normal file
37
src/Spectre.Console/Rendering/Borders/HorizontalBorder.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Rendering
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a horizontal border.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class HorizontalBorder : Border
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override string GetBoxPart(BorderPart part)
|
||||||
|
{
|
||||||
|
return part switch
|
||||||
|
{
|
||||||
|
BorderPart.HeaderTopLeft => "─",
|
||||||
|
BorderPart.HeaderTop => "─",
|
||||||
|
BorderPart.HeaderTopSeparator => "─",
|
||||||
|
BorderPart.HeaderTopRight => "─",
|
||||||
|
BorderPart.HeaderLeft => " ",
|
||||||
|
BorderPart.HeaderSeparator => " ",
|
||||||
|
BorderPart.HeaderRight => " ",
|
||||||
|
BorderPart.HeaderBottomLeft => "─",
|
||||||
|
BorderPart.HeaderBottom => "─",
|
||||||
|
BorderPart.HeaderBottomSeparator => "─",
|
||||||
|
BorderPart.HeaderBottomRight => "─",
|
||||||
|
BorderPart.CellLeft => " ",
|
||||||
|
BorderPart.CellSeparator => " ",
|
||||||
|
BorderPart.CellRight => " ",
|
||||||
|
BorderPart.FooterBottomLeft => "─",
|
||||||
|
BorderPart.FooterBottom => "─",
|
||||||
|
BorderPart.FooterBottomSeparator => "─",
|
||||||
|
BorderPart.FooterBottomRight => "─",
|
||||||
|
_ => throw new InvalidOperationException("Unknown box part."),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
37
src/Spectre.Console/Rendering/Borders/MinimalBorder.cs
Normal file
37
src/Spectre.Console/Rendering/Borders/MinimalBorder.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Rendering
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a minimal border.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class MinimalBorder : Border
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override string GetBoxPart(BorderPart part)
|
||||||
|
{
|
||||||
|
return part switch
|
||||||
|
{
|
||||||
|
BorderPart.HeaderTopLeft => " ",
|
||||||
|
BorderPart.HeaderTop => " ",
|
||||||
|
BorderPart.HeaderTopSeparator => " ",
|
||||||
|
BorderPart.HeaderTopRight => " ",
|
||||||
|
BorderPart.HeaderLeft => " ",
|
||||||
|
BorderPart.HeaderSeparator => "│",
|
||||||
|
BorderPart.HeaderRight => " ",
|
||||||
|
BorderPart.HeaderBottomLeft => " ",
|
||||||
|
BorderPart.HeaderBottom => "─",
|
||||||
|
BorderPart.HeaderBottomSeparator => "┼",
|
||||||
|
BorderPart.HeaderBottomRight => " ",
|
||||||
|
BorderPart.CellLeft => " ",
|
||||||
|
BorderPart.CellSeparator => "│",
|
||||||
|
BorderPart.CellRight => " ",
|
||||||
|
BorderPart.FooterBottomLeft => " ",
|
||||||
|
BorderPart.FooterBottom => " ",
|
||||||
|
BorderPart.FooterBottomSeparator => " ",
|
||||||
|
BorderPart.FooterBottomRight => " ",
|
||||||
|
_ => throw new InvalidOperationException("Unknown box part."),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Rendering
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a minimal border with a double header border.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class MinimalDoubleHeadBorder : Border
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override string GetBoxPart(BorderPart part)
|
||||||
|
{
|
||||||
|
return part switch
|
||||||
|
{
|
||||||
|
BorderPart.HeaderTopLeft => " ",
|
||||||
|
BorderPart.HeaderTop => " ",
|
||||||
|
BorderPart.HeaderTopSeparator => " ",
|
||||||
|
BorderPart.HeaderTopRight => " ",
|
||||||
|
BorderPart.HeaderLeft => " ",
|
||||||
|
BorderPart.HeaderSeparator => "│",
|
||||||
|
BorderPart.HeaderRight => " ",
|
||||||
|
BorderPart.HeaderBottomLeft => " ",
|
||||||
|
BorderPart.HeaderBottom => "═",
|
||||||
|
BorderPart.HeaderBottomSeparator => "╪",
|
||||||
|
BorderPart.HeaderBottomRight => " ",
|
||||||
|
BorderPart.CellLeft => " ",
|
||||||
|
BorderPart.CellSeparator => "│",
|
||||||
|
BorderPart.CellRight => " ",
|
||||||
|
BorderPart.FooterBottomLeft => " ",
|
||||||
|
BorderPart.FooterBottom => " ",
|
||||||
|
BorderPart.FooterBottomSeparator => " ",
|
||||||
|
BorderPart.FooterBottomRight => " ",
|
||||||
|
_ => throw new InvalidOperationException("Unknown box part."),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Rendering
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a minimal border with a heavy header.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class MinimalHeavyHeadBorder : Border
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override Border? SafeBorder => Border.Minimal;
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override string GetBoxPart(BorderPart part)
|
||||||
|
{
|
||||||
|
return part switch
|
||||||
|
{
|
||||||
|
BorderPart.HeaderTopLeft => " ",
|
||||||
|
BorderPart.HeaderTop => " ",
|
||||||
|
BorderPart.HeaderTopSeparator => " ",
|
||||||
|
BorderPart.HeaderTopRight => " ",
|
||||||
|
BorderPart.HeaderLeft => " ",
|
||||||
|
BorderPart.HeaderSeparator => "│",
|
||||||
|
BorderPart.HeaderRight => " ",
|
||||||
|
BorderPart.HeaderBottomLeft => " ",
|
||||||
|
BorderPart.HeaderBottom => "━",
|
||||||
|
BorderPart.HeaderBottomSeparator => "┿",
|
||||||
|
BorderPart.HeaderBottomRight => " ",
|
||||||
|
BorderPart.CellLeft => " ",
|
||||||
|
BorderPart.CellSeparator => "│",
|
||||||
|
BorderPart.CellRight => " ",
|
||||||
|
BorderPart.FooterBottomLeft => " ",
|
||||||
|
BorderPart.FooterBottom => " ",
|
||||||
|
BorderPart.FooterBottomSeparator => " ",
|
||||||
|
BorderPart.FooterBottomRight => " ",
|
||||||
|
_ => throw new InvalidOperationException("Unknown box part."),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
37
src/Spectre.Console/Rendering/Borders/SimpleBorder.cs
Normal file
37
src/Spectre.Console/Rendering/Borders/SimpleBorder.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Rendering
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a simple border.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class SimpleBorder : Border
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override string GetBoxPart(BorderPart part)
|
||||||
|
{
|
||||||
|
return part switch
|
||||||
|
{
|
||||||
|
BorderPart.HeaderTopLeft => " ",
|
||||||
|
BorderPart.HeaderTop => " ",
|
||||||
|
BorderPart.HeaderTopSeparator => " ",
|
||||||
|
BorderPart.HeaderTopRight => " ",
|
||||||
|
BorderPart.HeaderLeft => " ",
|
||||||
|
BorderPart.HeaderSeparator => " ",
|
||||||
|
BorderPart.HeaderRight => " ",
|
||||||
|
BorderPart.HeaderBottomLeft => "─",
|
||||||
|
BorderPart.HeaderBottom => "─",
|
||||||
|
BorderPart.HeaderBottomSeparator => "─",
|
||||||
|
BorderPart.HeaderBottomRight => "─",
|
||||||
|
BorderPart.CellLeft => " ",
|
||||||
|
BorderPart.CellSeparator => " ",
|
||||||
|
BorderPart.CellRight => " ",
|
||||||
|
BorderPart.FooterBottomLeft => " ",
|
||||||
|
BorderPart.FooterBottom => " ",
|
||||||
|
BorderPart.FooterBottomSeparator => " ",
|
||||||
|
BorderPart.FooterBottomRight => " ",
|
||||||
|
_ => throw new InvalidOperationException("Unknown box part."),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
40
src/Spectre.Console/Rendering/Borders/SimpleHeavyBorder.cs
Normal file
40
src/Spectre.Console/Rendering/Borders/SimpleHeavyBorder.cs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Rendering
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a simple border with heavy lines.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class SimpleHeavyBorder : Border
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override Border? SafeBorder => Border.Simple;
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override string GetBoxPart(BorderPart part)
|
||||||
|
{
|
||||||
|
return part switch
|
||||||
|
{
|
||||||
|
BorderPart.HeaderTopLeft => " ",
|
||||||
|
BorderPart.HeaderTop => " ",
|
||||||
|
BorderPart.HeaderTopSeparator => " ",
|
||||||
|
BorderPart.HeaderTopRight => " ",
|
||||||
|
BorderPart.HeaderLeft => " ",
|
||||||
|
BorderPart.HeaderSeparator => " ",
|
||||||
|
BorderPart.HeaderRight => " ",
|
||||||
|
BorderPart.HeaderBottomLeft => "━",
|
||||||
|
BorderPart.HeaderBottom => "━",
|
||||||
|
BorderPart.HeaderBottomSeparator => "━",
|
||||||
|
BorderPart.HeaderBottomRight => "━",
|
||||||
|
BorderPart.CellLeft => " ",
|
||||||
|
BorderPart.CellSeparator => " ",
|
||||||
|
BorderPart.CellRight => " ",
|
||||||
|
BorderPart.FooterBottomLeft => " ",
|
||||||
|
BorderPart.FooterBottom => " ",
|
||||||
|
BorderPart.FooterBottomSeparator => " ",
|
||||||
|
BorderPart.FooterBottomRight => " ",
|
||||||
|
_ => throw new InvalidOperationException("Unknown box part."),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -230,7 +230,8 @@ namespace Spectre.Console
|
|||||||
if (firstCell && showBorder)
|
if (firstCell && showBorder)
|
||||||
{
|
{
|
||||||
// Show left column edge
|
// Show left column edge
|
||||||
result.Add(new Segment(border.GetPart(BorderPart.CellLeft), borderStyle));
|
var part = firstRow && ShowHeaders ? BorderPart.HeaderLeft : BorderPart.CellLeft;
|
||||||
|
result.Add(new Segment(border.GetPart(part), borderStyle));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pad column on left side.
|
// Pad column on left side.
|
||||||
@ -266,12 +267,14 @@ namespace Spectre.Console
|
|||||||
if (lastCell && showBorder)
|
if (lastCell && showBorder)
|
||||||
{
|
{
|
||||||
// Add right column edge
|
// Add right column edge
|
||||||
result.Add(new Segment(border.GetPart(BorderPart.CellRight), borderStyle));
|
var part = firstRow && ShowHeaders ? BorderPart.HeaderRight : BorderPart.CellRight;
|
||||||
|
result.Add(new Segment(border.GetPart(part), borderStyle));
|
||||||
}
|
}
|
||||||
else if (showBorder)
|
else if (showBorder)
|
||||||
{
|
{
|
||||||
// Add column separator
|
// Add column separator
|
||||||
result.Add(new Segment(border.GetPart(BorderPart.CellSeparator), borderStyle));
|
var part = firstRow && ShowHeaders ? BorderPart.HeaderSeparator : BorderPart.CellSeparator;
|
||||||
|
result.Add(new Segment(border.GetPart(part), borderStyle));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,6 +43,30 @@ namespace Spectre.Console
|
|||||||
return SetBorder(obj, Border.Ascii);
|
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>
|
/// <summary>
|
||||||
/// Display a rounded border.
|
/// Display a rounded border.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -55,6 +79,138 @@ namespace Spectre.Console
|
|||||||
return SetBorder(obj, Border.Rounded);
|
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>
|
/// <summary>
|
||||||
/// Sets the border.
|
/// Sets the border.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user