From 31f117aed00626e4b093bbd82eef66a4fa3bdec6 Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Wed, 26 Aug 2020 15:03:49 +0200 Subject: [PATCH] Clean up public API * Make things a bit more consistent * Add extension methods to configure things like tables, panels and grids. --- examples/Panel/Program.cs | 14 +- src/Spectre.Console.Tests/Unit/PanelTests.cs | 2 +- src/Spectre.Console.Tests/Unit/TextTests.cs | 6 + .../Internal/Text/Markup/MarkupParser.cs | 4 +- src/Spectre.Console/Rendering/Grid.cs | 4 +- src/Spectre.Console/Rendering/GridColumn.cs | 28 +- src/Spectre.Console/Rendering/Markup.cs | 12 +- src/Spectre.Console/Rendering/Panel.cs | 10 +- src/Spectre.Console/Rendering/Paragraph.cs | 256 ++++++++++++++++++ src/Spectre.Console/Rendering/Table.cs | 2 +- src/Spectre.Console/Rendering/TableColumn.cs | 2 +- .../Rendering/TableExtensions.cs | 49 ++++ src/Spectre.Console/Rendering/Text.cs | 235 +--------------- .../Extensions}/AlignableExtensions.cs | 8 +- .../Extensions}/BorderExtensions.cs | 6 +- .../Traits/Extensions/ColumnExtensions.cs | 28 ++ .../Traits/Extensions/ExpandableExtensions.cs | 48 ++++ .../Traits/Extensions/PaddableExtensions.cs | 79 ++++++ .../Rendering/{ => Traits}/IAlignable.cs | 0 .../Rendering/Traits/IColumn.cs | 14 + .../Rendering/Traits/IExpandable.cs | 15 + .../Rendering/{ => Traits}/IHasBorder.cs | 0 .../Rendering/Traits/IPaddable.cs | 13 + .../Rendering/{ => Traits}/IRenderable.cs | 0 24 files changed, 569 insertions(+), 266 deletions(-) create mode 100644 src/Spectre.Console/Rendering/Paragraph.cs rename src/Spectre.Console/Rendering/{ => Traits/Extensions}/AlignableExtensions.cs (87%) rename src/Spectre.Console/Rendering/{ => Traits/Extensions}/BorderExtensions.cs (87%) create mode 100644 src/Spectre.Console/Rendering/Traits/Extensions/ColumnExtensions.cs create mode 100644 src/Spectre.Console/Rendering/Traits/Extensions/ExpandableExtensions.cs create mode 100644 src/Spectre.Console/Rendering/Traits/Extensions/PaddableExtensions.cs rename src/Spectre.Console/Rendering/{ => Traits}/IAlignable.cs (100%) create mode 100644 src/Spectre.Console/Rendering/Traits/IColumn.cs create mode 100644 src/Spectre.Console/Rendering/Traits/IExpandable.cs rename src/Spectre.Console/Rendering/{ => Traits}/IHasBorder.cs (100%) create mode 100644 src/Spectre.Console/Rendering/Traits/IPaddable.cs rename src/Spectre.Console/Rendering/{ => Traits}/IRenderable.cs (100%) diff --git a/examples/Panel/Program.cs b/examples/Panel/Program.cs index f219eb36..f605e24d 100644 --- a/examples/Panel/Program.cs +++ b/examples/Panel/Program.cs @@ -6,42 +6,38 @@ namespace PanelExample { static void Main(string[] args) { - var content = Text.Markup( + var content = new Markup( "[underline]I[/] heard [underline on blue]you[/] like πŸ“¦\n\n\n\n" + "So I put a πŸ“¦ in a πŸ“¦\n\n" + - "πŸ˜…"); + "πŸ˜…").Centered(); AnsiConsole.Render( new Panel( new Panel(content) { - Alignment = Justify.Center, Border = BorderKind.Rounded })); // Left adjusted panel with text AnsiConsole.Render(new Panel( - new Text("Left adjusted\nLeft")) + new Text("Left adjusted\nLeft").LeftAligned()) { Expand = true, - Alignment = Justify.Left, }); // Centered ASCII panel with text AnsiConsole.Render(new Panel( - new Text("Centered\nCenter")) + new Text("Centered\nCenter").Centered()) { Expand = true, - Alignment = Justify.Center, Border = BorderKind.Ascii, }); // Right adjusted, rounded panel with text AnsiConsole.Render(new Panel( - new Text("Right adjusted\nRight")) + new Text("Right adjusted\nRight").RightAligned()) { Expand = true, - Alignment = Justify.Right, Border = BorderKind.Rounded, }); } diff --git a/src/Spectre.Console.Tests/Unit/PanelTests.cs b/src/Spectre.Console.Tests/Unit/PanelTests.cs index 72ce417d..31b792dc 100644 --- a/src/Spectre.Console.Tests/Unit/PanelTests.cs +++ b/src/Spectre.Console.Tests/Unit/PanelTests.cs @@ -81,7 +81,7 @@ namespace Spectre.Console.Tests.Unit // Given var console = new PlainConsole(width: 80); var text = new Panel( - Text.Markup("I heard [underline on blue]you[/] like πŸ“¦\n\n\n\nSo I put a πŸ“¦ in a πŸ“¦")); + new Markup("I heard [underline on blue]you[/] like πŸ“¦\n\n\n\nSo I put a πŸ“¦ in a πŸ“¦")); // When console.Render(text); diff --git a/src/Spectre.Console.Tests/Unit/TextTests.cs b/src/Spectre.Console.Tests/Unit/TextTests.cs index f9c2e592..ef9803c1 100644 --- a/src/Spectre.Console.Tests/Unit/TextTests.cs +++ b/src/Spectre.Console.Tests/Unit/TextTests.cs @@ -10,20 +10,26 @@ namespace Spectre.Console.Tests.Unit [Fact] public void Should_Consider_The_Longest_Word_As_Minimum_Width() { + // Given var text = new Text("Foo Bar Baz\nQux\nLol mobile"); + // When var result = ((IRenderable)text).Measure(new RenderContext(Encoding.Unicode, false), 80); + // Then result.Min.ShouldBe(6); } [Fact] public void Should_Consider_The_Longest_Line_As_Maximum_Width() { + // Given var text = new Text("Foo Bar Baz\nQux\nLol mobile"); + // When var result = ((IRenderable)text).Measure(new RenderContext(Encoding.Unicode, false), 80); + // Then result.Max.ShouldBe(11); } diff --git a/src/Spectre.Console/Internal/Text/Markup/MarkupParser.cs b/src/Spectre.Console/Internal/Text/Markup/MarkupParser.cs index 3671b871..2d3d8160 100644 --- a/src/Spectre.Console/Internal/Text/Markup/MarkupParser.cs +++ b/src/Spectre.Console/Internal/Text/Markup/MarkupParser.cs @@ -6,11 +6,11 @@ namespace Spectre.Console.Internal { internal static class MarkupParser { - public static Text Parse(string text, Style? style = null) + public static Paragraph Parse(string text, Style? style = null) { style ??= Style.Plain; - var result = new Text(); + var result = new Paragraph(); using var tokenizer = new MarkupTokenizer(text); var stack = new Stack