Compare commits

..

18 Commits

Author SHA1 Message Date
Patrik Svensson
a5125d640c Add initial FIGlet docs 2020-11-22 03:27:15 +01:00
Patrik Svensson
a59e0dcb21 Add FIGlet text support
Closes #97
2020-11-22 03:09:42 +01:00
Simon Cropp
bde61cc6ff Verify: Use custom test directory 2020-11-20 23:27:35 +01:00
Simon Cropp
5c33b87a9c Add Verify for testing 2020-11-20 16:22:23 +01:00
Patrik Svensson
aaf77c3b25 Fix prompt example docs 2020-11-19 14:46:43 +01:00
Patrik Svensson
d70ad661fc Add docs for text prompts 2020-11-19 14:25:24 +01:00
Patrik Svensson
0d209d8f18 Add text prompt support 2020-11-19 12:24:04 +01:00
Patrik Svensson
380c6aca45 Add net5.0 target framework 2020-11-11 15:28:32 +01:00
Patrik Svensson
b1da5e7ba8 Add support for markup text in panel header 2020-11-07 20:43:53 +01:00
Patrik Svensson
be3350a411 Bump dotnet-example to 1.0.0 2020-11-03 18:14:41 +01:00
Patrik Svensson
a1d11e9d0c Add support for moving the cursor 2020-10-28 18:57:08 +01:00
Patrik Svensson
93d1971f48 Update rule example and docs 2020-10-27 17:30:50 +01:00
Martin Andersen
bca1c889d1 Add Padding extension
Add extension method for specifying horizontal and vertical padding.
Similar constructor for `Padding` already existed.

Update documentation for table column appearance (padding).

Update
`Should_Render_Padded_Object_Correctly_When_Nested_Within_Other_Object`
test to use new extension method.
2020-10-27 09:09:30 +01:00
Takahito Yamatoya
9915a0d6a8 Update Documentation for escape 2020-10-27 09:08:27 +01:00
Takahito Yamatoya
f34fc43d00 Update documentation for aligning tables 2020-10-27 09:08:27 +01:00
Patrik Svensson
e7f497050c Add row and column accessors for tables and grids 2020-10-26 18:15:27 +01:00
Martin Andersen
3e5e22d6c2 Update documentation
- ExceptionFormat -> ExceptionFormats.
- Fix link to documentation.
- Add cross reference to Styles.
- Render table in example code.
- Add code for setting background color.
2020-10-26 15:31:44 +01:00
Patrik Svensson
10daf727e9 Fix outdated documentation 2020-10-26 12:20:17 +01:00
257 changed files with 7657 additions and 1539 deletions

View File

@@ -21,7 +21,7 @@ jobs:
- name: Setup dotnet - name: Setup dotnet
uses: actions/setup-dotnet@v1 uses: actions/setup-dotnet@v1
with: with:
dotnet-version: '3.1.301' # SDK Version to use. dotnet-version: 5.0.100
- name: Build - name: Build
shell: bash shell: bash
@@ -55,10 +55,15 @@ jobs:
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Setup dotnet - name: Setup dotnet 3.1.402
uses: actions/setup-dotnet@v1 uses: actions/setup-dotnet@v1
with: with:
dotnet-version: 3.1.301 dotnet-version: 3.1.402
- name: Setup dotnet 5.0.100
uses: actions/setup-dotnet@v1
with:
dotnet-version: 5.0.100
- name: Integration Tests - name: Integration Tests
shell: bash shell: bash
@@ -77,4 +82,12 @@ jobs:
shell: bash shell: bash
run: | run: |
dotnet tool restore dotnet tool restore
dotnet cake dotnet cake
- name: Upload Verify Test Results
if: failure()
uses: actions/upload-artifact@v2
with:
name: verify-test-results
path: |
**/*.received.*

View File

@@ -24,7 +24,7 @@ jobs:
- name: Setup dotnet - name: Setup dotnet
uses: actions/setup-dotnet@v1 uses: actions/setup-dotnet@v1
with: with:
dotnet-version: '3.1.301' # SDK Version to use. dotnet-version: 5.0.100
- name: Publish - name: Publish
shell: bash shell: bash

View File

@@ -29,7 +29,7 @@ jobs:
- name: Setup dotnet - name: Setup dotnet
uses: actions/setup-dotnet@v1 uses: actions/setup-dotnet@v1
with: with:
dotnet-version: '3.1.301' # SDK Version to use. dotnet-version: 5.0.100
- name: Build - name: Build
shell: bash shell: bash
@@ -64,10 +64,15 @@ jobs:
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Setup dotnet - name: Setup dotnet 3.1.402
uses: actions/setup-dotnet@v1 uses: actions/setup-dotnet@v1
with: with:
dotnet-version: 3.1.301 dotnet-version: 3.1.402
- name: Setup dotnet 5.0.100
uses: actions/setup-dotnet@v1
with:
dotnet-version: 5.0.100
- name: Build - name: Build
shell: bash shell: bash
@@ -90,10 +95,15 @@ jobs:
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Setup dotnet - name: Setup dotnet 3.1.402
uses: actions/setup-dotnet@v1 uses: actions/setup-dotnet@v1
with: with:
dotnet-version: 3.1.301 dotnet-version: 3.1.402
- name: Setup dotnet 5.0.100
uses: actions/setup-dotnet@v1
with:
dotnet-version: 5.0.100
- name: Publish - name: Publish
shell: bash shell: bash

2
.gitignore vendored
View File

@@ -88,3 +88,5 @@ packages
# Windows # Windows
Thumbs.db Thumbs.db
*.received.*

View File

@@ -88,7 +88,7 @@ Spectre.Consoleでできることを見るために、
``` ```
> dotnet tool install -g dotnet-example > dotnet tool restore
``` ```
このリポジトリで提供している例が一覧表示されます このリポジトリで提供している例が一覧表示されます
@@ -381,8 +381,8 @@ AnsiConsole.WriteException(ex);
```csharp ```csharp
AnsiConsole.WriteException(ex, AnsiConsole.WriteException(ex,
ExceptionFormat.ShortenPaths | ExceptionFormat.ShortenTypes | ExceptionFormats.ShortenPaths | ExceptionFormats.ShortenTypes |
ExceptionFormat.ShortenMethods | ExceptionFormat.ShowLinks); ExceptionFormats.ShortenMethods | ExceptionFormats.ShowLinks);
``` ```
![exception](docs/input/assets/images/compact_exception.png) ![exception](docs/input/assets/images/compact_exception.png)

View File

@@ -49,7 +49,7 @@ regular `System.Console` API.
If the current terminal does not support ANSI escape sequences, If the current terminal does not support ANSI escape sequences,
`Spectre.Console` will fallback to using the `System.Console` API. `Spectre.Console` will fallback to using the `System.Console` API.
_NOTE: This library is currently under development and API's _NOTE: This library is currently under development and APIs
might change or get removed at any point up until a 1.0 release._ might change or get removed at any point up until a 1.0 release._
### Using the static API ### Using the static API
@@ -100,7 +100,7 @@ To see Spectre.Console in action, install the
global tool. global tool.
``` ```
> dotnet tool install -g dotnet-example > dotnet tool restore
``` ```
Now you can list available examples in this repository: Now you can list available examples in this repository:

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory> <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>
<DefaultItemExcludes>$(DefaultItemExcludes);output\**;.gitignore</DefaultItemExcludes> <DefaultItemExcludes>$(DefaultItemExcludes);output\**;.gitignore</DefaultItemExcludes>
<MinVerSkip Condition="'$(Configuration)' == 'Debug'">true</MinVerSkip> <MinVerSkip Condition="'$(Configuration)' == 'Debug'">true</MinVerSkip>
@@ -31,8 +31,8 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Statiq.Web" Version="1.0.0-beta.5" /> <PackageReference Include="Statiq.Web" Version="1.0.0-beta.13" />
<PackageReference Include="MinVer" PrivateAssets="All" Version="2.3.0" /> <PackageReference Include="MinVer" PrivateAssets="All" Version="2.3.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -10,7 +10,7 @@ The documentation site uses [Statiq](https://statiq.dev), a static site generato
> dotnet run preview --virtual-dir "spectre.console" > dotnet run preview --virtual-dir "spectre.console"
``` ```
After the build is complete, you can navigate to [http://localhost:5080/spectre.consle](http://localhost:5080/spectre.console). After the build is complete, you can navigate to [http://localhost:5080/spectre.console](http://localhost:5080/spectre.console).
**Note that the site runs under a virtual directory.** **Note that the site runs under a virtual directory.**

View File

@@ -130,7 +130,7 @@
<div class="sidebar-nav-item @(Document.IdEquals(root) ? "active" : null)"> <div class="sidebar-nav-item @(Document.IdEquals(root) ? "active" : null)">
@if(root.ShowLink()) @if(root.ShowLink())
{ {
@Html.DocumentLink(root) @Html.DocumentLink(root)
} }
else else
{ {
@@ -140,6 +140,11 @@
@foreach (IDocument document in OutputPages.GetChildrenOf(root).OnlyVisible()) @foreach (IDocument document in OutputPages.GetChildrenOf(root).OnlyVisible())
{ {
if(string.IsNullOrWhiteSpace(document.GetTitle()))
{
continue;
}
DocumentList<IDocument> documentChildren = OutputPages.GetChildrenOf(document); DocumentList<IDocument> documentChildren = OutputPages.GetChildrenOf(document);
<div class="sidebar-nav-item @(Document.IdEquals(document) ? "active" : null) @(documentChildren.Any() ? "has-children" : null)"> <div class="sidebar-nav-item @(Document.IdEquals(document) ? "active" : null) @(documentChildren.Any() ? "has-children" : null)">
@if(document.ShowLink()) @if(document.ShowLink())

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

@@ -19,8 +19,8 @@ the hyperlinks are clickable is up to the terminal.
```csharp ```csharp
AnsiConsole.WriteException(ex, AnsiConsole.WriteException(ex,
ExceptionFormat.ShortenPaths | ExceptionFormat.ShortenTypes | ExceptionFormats.ShortenPaths | ExceptionFormats.ShortenTypes |
ExceptionFormat.ShortenMethods | ExceptionFormat.ShowLinks); ExceptionFormats.ShortenMethods | ExceptionFormats.ShowLinks);
``` ```
<img src="assets/images/compact_exception.png" style="max-width: 100%;"> <img src="assets/images/compact_exception.png" style="max-width: 100%;">
@@ -36,15 +36,15 @@ AnsiConsole.WriteException(ex, new ExceptionSettings
Format = ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks, Format = ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks,
Style = new ExceptionStyle Style = new ExceptionStyle
{ {
Exception = Style.WithForeground(Color.Grey), Exception = new Style().Foreground(Color.Grey),
Message = Style.WithForeground(Color.White), Message = new Style().Foreground(Color.White),
NonEmphasized = Style.WithForeground(Color.Cornsilk1), NonEmphasized = new Style().Foreground(Color.Cornsilk1),
Parenthesis = Style.WithForeground(Color.Cornsilk1), Parenthesis = new Style().Foreground(Color.Cornsilk1),
Method = Style.WithForeground(Color.Red), Method = new Style().Foreground(Color.Red),
ParameterName = Style.WithForeground(Color.Cornsilk1), ParameterName = new Style().Foreground(Color.Cornsilk1),
ParameterType = Style.WithForeground(Color.Red), ParameterType = new Style().Foreground(Color.Red),
Path = Style.WithForeground(Color.Red), Path = new Style().Foreground(Color.Red),
LineNumber = Style.WithForeground(Color.Cornsilk1), LineNumber = new Style().Foreground(Color.Cornsilk1),
} }
}); });
``` ```

33
docs/input/figlet.md Normal file
View File

@@ -0,0 +1,33 @@
Title: Figlet
Order: 5
---
Spectre.Console can render [FIGlet](http://www.figlet.org/) text by using the `FigletText` class.
# Default font
```csharp
AnsiConsole.Render(
new FigletText("Hello")
.LeftAligned()
.Color(Color.Red));
```
```text
_ _ _ _
| | | | ___ | | | | ___
| |_| | / _ \ | | | | / _ \
| _ | | __/ | | | | | (_) |
|_| |_| \___| |_| |_| \___/
```
# Custom font
```csharp
var font = FigletFont.Load("starwars.flf");
AnsiConsole.Render(
new FigletText(font, "Hello")
.LeftAligned()
.Color(Color.Red));
```

View File

@@ -1,4 +1,4 @@
Title: Welcome Title: Welcome
Order: 0 Order: 0
--- ---

View File

@@ -6,7 +6,7 @@ The class `Markup` allows you to output rich text to the console.
# Syntax # Syntax
Console markup uses a syntax inspired by bbcode. If you write the style (see Styles) Console markup uses a syntax inspired by bbcode. If you write the style (see [Styles](xref:styles))
in square brackets, e.g. `[bold red]`, that style will apply until it is closed with a `[/]`. in square brackets, e.g. `[bold red]`, that style will apply until it is closed with a `[/]`.
```csharp ```csharp
@@ -21,6 +21,7 @@ rendering of `IRenderable` also have overloads for rendering rich text.
var table = new Table(); var table = new Table();
table.AddColumn(new TableColumn(new Markup("[yellow]Foo[/]"))); table.AddColumn(new TableColumn(new Markup("[yellow]Foo[/]")));
table.AddColumn(new TableColumn("[blue]Bar[/]")); table.AddColumn(new TableColumn("[blue]Bar[/]"));
AnsiConsole.Render(table);
``` ```
# Convenience methods # Convenience methods
@@ -43,20 +44,24 @@ AnsiConsole.Markup("[[Hello]] "); // [Hello]
AnsiConsole.Markup("[red][[World]][/]"); // [World] AnsiConsole.Markup("[red][[World]][/]"); // [World]
``` ```
You can also use the `SafeMarkup` extension method. You can also use the `EscapeMarkup` extension method.
```csharp ```csharp
AnsiConsole.Markup("[red]{0}[/]", "Hello [World]".SafeMarkup()); AnsiConsole.Markup("[red]{0}[/]", "Hello [World]".EscapeMarkup());
``` ```
You can also use the `Markup.Escape` method.
```csharp
AnsiConsole.Markup("[red]{0}[/]", Markup.Escape("Hello [World]"));
```
# Setting background color # Setting background color
You can set the background color in markup by prefixing the color with You can set the background color in markup by prefixing the color with
`on`. `on`.
``` ```csharp
[bold yellow on blue]Hello[/] AnsiConsole.Markup("[bold yellow on blue]Hello[/]");
[default on blue]World[/] AnsiConsole.Markup("[default on blue]World[/]");
``` ```
# Rendering emojis # Rendering emojis
@@ -64,7 +69,7 @@ You can set the background color in markup by prefixing the color with
To output an emoji as part of markup, you can use emoji shortcodes. To output an emoji as part of markup, you can use emoji shortcodes.
```csharp ```csharp
AnsiConsole.MarkupLine("Hello :globe_showing_europe_africa:!"); AnsiConsole.Markup("Hello :globe_showing_europe_africa:!");
``` ```
For a list of emoji, see the [Emojis](xref:emojis) appendix section. For a list of emoji, see the [Emojis](xref:emojis) appendix section.

99
docs/input/prompt.md Normal file
View File

@@ -0,0 +1,99 @@
Title: Prompt
Order: 4
---
Sometimes you want to get some input from the user, and for this
you can use the `Prompt<TResult>`.
# Confirmation
```csharp
if (!AnsiConsole.Confirm("Run example?"))
{
return;
}
```
```text
Run example? [y/n] (y): _
```
# Simple
```csharp
// Ask for the user's name
string name = AnsiConsole.Ask<string>("What's your [green]name[/]?");
// Ask for the user's age
int age = AnsiConsole.Ask<int>("What's your [green]age[/]?");
```
```text
What's your name? Patrik
What's your age? 37
```
# Choices
```csharp
var fruit = AnsiConsole.Prompt(
new TextPrompt<string>("What's your [green]favorite fruit[/]?")
.InvalidChoiceMessage("[red]That's not a valid fruit[/]")
.DefaultValue("Orange")
.AddChoice("Apple")
.AddChoice("Banana")
.AddChoice("Orange"));
```
```text
What's your favorite fruit? [Apple/Banana/Orange] (Orange): _
```
# Validation
```csharp
var age = AnsiConsole.Prompt(
new TextPrompt<int>("What's the secret number?")
.Validate(age =>
{
return age switch
{
< 99 => ValidationResult.Error("[red]Too low[/]"),
> 99 => ValidationResult.Error("[red]Too high[/]"),
_ => ValidationResult.Success(),
};
}));
```
```text
What's the secret number? 32
Too low
What's the secret number? 102
Too high
What's the secret number? _
```
# Secrets
```csharp
var password = AnsiConsole.Prompt(
new TextPrompt<string>("Enter [green]password[/]")
.PromptStyle("red")
.Secret());
```
```text
Enter password: ************_
```
# Optional
```csharp
var color = AnsiConsole.Prompt(
new TextPrompt<string>("[grey][[Optional]][/] [green]Favorite color[/]?")
.AllowEmpty());
```
```text
[Optional] Favorite color? _
```

View File

@@ -12,7 +12,9 @@ To render a calendar, create a `Calendar` instance with a target date.
```csharp ```csharp
var calendar = new Calendar(2020,10); var calendar = new Calendar(2020,10);
AnsiConsole.Render(calendar); AnsiConsole.Render(calendar);
```
```text
2020 October 2020 October
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │ │ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │
@@ -32,20 +34,22 @@ You can set the calendar's culture to show localized weekdays.
```csharp ```csharp
var calendar = new Calendar(2020,10); var calendar = new Calendar(2020,10);
calendar.SetCulture("ja-JP"); calendar.Culture("ja-JP");
AnsiConsole.Render(calendar); AnsiConsole.Render(calendar);
```
202010 ```text
┌────┬────┬────┬────┬────┬────┬────┐ Oktober 2020
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐
├────┼────┼────┼────┼────┼────┼────┤ │ Mån │ Tis │ Ons │ Tor │ Fre │ Lör │ Sön │
1 2 3 ├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
4 5 6 7 8 9 10 │ │ │ │ 1 │ 2 │ 3 │ 4 │
11 12 13 14 15 16 17 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11* │
18 19 20 21 22 23 24 │ 12 │ 13 │ 14 │ 15 │ 16 │ 17 │ 18 │
25 26 27 28 29 30 31 │ 19 │ 20 │ 21 │ 22 │ 23 │ 24 │ 25 │
│ 26 │ 27 │ 28 │ 29 │ 30 │ 31 │
└────┴────┴────┴────┴────┴────┴────┘ │ │ │ │ │ │ │ │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┘
``` ```
## Header ## Header
@@ -54,9 +58,11 @@ You can hide the calendar header.
```csharp ```csharp
var calendar = new Calendar(2020,10); var calendar = new Calendar(2020,10);
calendar.ShowHeader = false; calendar.ShowHeader();
AnsiConsole.Render(calendar); AnsiConsole.Render(calendar);
```
```text
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │ │ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
@@ -72,13 +78,13 @@ AnsiConsole.Render(calendar);
You can set the header style of the calendar. You can set the header style of the calendar.
```csharp ```csharp
var calendar = new Calendar(2020,10); var calendar = new Calendar(2020, 10);
calendar.SetHeaderStyle(Style.Parse("blue bold")); calendar.HeaderStyle(Style.Parse("blue bold"));
AnsiConsole.Render(calendar); AnsiConsole.Render(calendar);
``` ```
## Calendar Event ## Calendar Events
You can add an event to the calendar. You can add an event to the calendar.
If a date has an event associated with it, the date gets highlighted in the calendar. If a date has an event associated with it, the date gets highlighted in the calendar.
@@ -87,7 +93,9 @@ If a date has an event associated with it, the date gets highlighted in the cale
var calendar = new Calendar(2020,10); var calendar = new Calendar(2020,10);
calendar.AddCalendarEvent(2020, 10, 11); calendar.AddCalendarEvent(2020, 10, 11);
AnsiConsole.Render(calendar); AnsiConsole.Render(calendar);
```
```text
2020 October 2020 October
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │ │ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │
@@ -106,9 +114,8 @@ AnsiConsole.Render(calendar);
You can set the highlight style for a calendar event via `SetHighlightStyle`. You can set the highlight style for a calendar event via `SetHighlightStyle`.
```csharp ```csharp
var calendar = new Calendar(2020,10); var calendar = new Calendar(2020, 10);
calendar.AddCalendarEvent(2020, 10, 11); calendar.AddCalendarEvent(2020, 10, 11);
calendar.SetHighlightStyle(Style.Parse("yellow bold")); calendar.HighlightStyle(Style.Parse("yellow bold"));
AnsiConsole.Render(calendar); AnsiConsole.Render(calendar);
``` ```

View File

@@ -1,11 +1,11 @@
Title: Rule Title: Rule
Order: 5 Order: 5
RedirectFrom: rule RedirectFrom: rule
--- ---
The `Rule` class is used to render a horizontal rule (line) to the terminal. The `Rule` class is used to render a horizontal rule (line) to the terminal.
![Rule](../assets/images/rule.png) <img src="../assets/images/rule.png" style="width: 100%;" />
# Usage # Usage
@@ -23,8 +23,9 @@ You can set the rule title markup text.
```csharp ```csharp
var rule = new Rule("[red]Hello[/]"); var rule = new Rule("[red]Hello[/]");
AnsiConsole.Render(rule); AnsiConsole.Render(rule);
```
// output ```text
───────────────────────────────── Hello ───────────────────────────────── ───────────────────────────────── Hello ─────────────────────────────────
``` ```
@@ -36,36 +37,36 @@ You can set the rule's title alignment.
var rule = new Rule("[red]Hello[/]"); var rule = new Rule("[red]Hello[/]");
rule.Alignment = Justify.Left; rule.Alignment = Justify.Left;
AnsiConsole.Render(rule); AnsiConsole.Render(rule);
```
//output ```text
── Hello ──────────────────────────────────────────────────────────────── ── Hello ────────────────────────────────────────────────────────────────
``` ```
You can also specify it with a method You can also specify it via an extension method:
```csharp ```csharp
var rule = new Rule("[red]Hello[/]"); var rule = new Rule("[red]Hello[/]");
rule.LeftAligned(); rule.LeftAligned();
AnsiConsole.Render(rule); AnsiConsole.Render(rule);
```
//output ```text
── Hello ──────────────────────────────────────────────────────────────── ── Hello ────────────────────────────────────────────────────────────────
``` ```
## Style ## Styling
You can set the rule style.
```csharp ```csharp
var rule = new Rule("[red]Hello[/]"); var rule = new Rule("[red]Hello[/]");
rule.Style = Style.Parse("red dim"); rule.Style = Style.Parse("red dim");
AnsiConsole.Render(rule); AnsiConsole.Render(rule);
``` ```
You can also specify it with a method You can also specify it via an extension method
```csharp ```csharp
var rule = new Rule("[red]Hello[/]"); var rule = new Rule("[red]Hello[/]");
rule.SetStyle("red dim"); rule.RuleStyle("red dim");
AnsiConsole.Render(rule); AnsiConsole.Render(rule);
``` ```

View File

@@ -51,10 +51,10 @@ For a list of borders, see the [Borders](xref:borders) appendix section.
```csharp ```csharp
// Sets the border // Sets the border
table.SetBorder(Border.None); table.Border(TableBorder.None);
table.SetBorder(Border.Ascii); table.Border(TableBorder.Ascii);
table.SetBorder(Border.Square); table.Border(TableBorder.Square);
table.SetBorder(Border.Rounded); table.Border(TableBorder.Rounded);
``` ```
## Expand / Collapse ## Expand / Collapse
@@ -79,7 +79,16 @@ table.HideHeaders();
```csharp ```csharp
// Sets the table width to 50 cells // Sets the table width to 50 cells
table.SetWidth(50); table.Width(50);
```
## Alignment
```csharp
table.Alignment(Justify.Right);
table.RightAligned();
table.Centered();
table.LeftAligned();
``` ```
# Column appearance # Column appearance
@@ -91,31 +100,37 @@ table.SetWidth(50);
## Alignment ## Alignment
```csharp ```csharp
// Set the alignment explicitly table.Columns[0].Alignment(Justify.Right);
column.SetAlignment(Justify.Right); table.Columns[0].LeftAligned();
table.Columns[0].Centered();
table.Columns[0].RightAligned();
``` ```
## Padding ## Padding
```csharp ```csharp
// Set left and right padding // Set padding individually
column.SetPadding(left: 3, right: 5); table.Columns[0].PadLeft(3);
table.Columns[0].PadRight(5);
// Set padding individually. // Or chained together
column.PadLeft(3); table.Columns[0].PadLeft(3).PadRight(5);
column.PadRight(5);
// Or with the shorthand method if the left and right
// padding are identical. Vertical padding is ignored.
table.Columns[0].Padding(4, 0);
``` ```
## Disable column wrapping ## Disable column wrapping
```csharp ```csharp
// Disable column wrapping // Disable column wrapping
column.NoWrap(); table.Columns[0].NoWrap();
``` ```
## Set column width ## Set column width
```csharp ```csharp
// Set the column width (no fluent extension method for this yet) // Set the column width
column.Width = 15; table.Columns[0].Width(15);
``` ```

View File

@@ -3,7 +3,7 @@
"isRoot": true, "isRoot": true,
"tools": { "tools": {
"cake.tool": { "cake.tool": {
"version": "0.38.4", "version": "1.0.0-rc0001",
"commands": [ "commands": [
"dotnet-cake" "dotnet-cake"
] ]
@@ -15,7 +15,7 @@
] ]
}, },
"dotnet-example": { "dotnet-example": {
"version": "0.8.0", "version": "1.1.0",
"commands": [ "commands": [
"dotnet-example" "dotnet-example"
] ]

View File

@@ -1,8 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<Title>Borders</Title> <Title>Borders</Title>
<Description>Demonstrates the different kind of borders.</Description> <Description>Demonstrates the different kind of borders.</Description>

View File

@@ -1,4 +1,3 @@
using System.Diagnostics;
using Spectre.Console; using Spectre.Console;
using Spectre.Console.Rendering; using Spectre.Console.Rendering;
@@ -22,7 +21,7 @@ namespace BordersExample
static IRenderable CreatePanel(string name, BoxBorder border) static IRenderable CreatePanel(string name, BoxBorder border)
{ {
return new Panel($"This is a panel with\nthe [yellow]{name}[/] border.") return new Panel($"This is a panel with\nthe [yellow]{name}[/] border.")
.Header($" {name} ", Style.Parse("blue"), Justify.Center) .Header($" [blue]{name}[/] ", Justify.Center)
.Border(border) .Border(border)
.BorderStyle(Style.Parse("grey")); .BorderStyle(Style.Parse("grey"));
} }
@@ -54,7 +53,7 @@ namespace BordersExample
table.AddRow("Cell", "Cell"); table.AddRow("Cell", "Cell");
return new Panel(table) return new Panel(table)
.Header($" {name} ", Style.Parse("blue"), Justify.Center) .Header($" [blue]{name}[/] ", Justify.Center)
.NoBorder(); .NoBorder();
} }

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<Title>Calendars</Title> <Title>Calendars</Title>
<Description>Demonstrates how to render calendars.</Description> <Description>Demonstrates how to render calendars.</Description>

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<Title>Colors</Title> <Title>Colors</Title>
<Description>Demonstrates how to use [yellow]c[/][red]o[/][green]l[/][blue]o[/][aqua]r[/][lime]s[/] in the console.</Description> <Description>Demonstrates how to use [yellow]c[/][red]o[/][green]l[/][blue]o[/][aqua]r[/][lime]s[/] in the console.</Description>

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<Title>Columns</Title> <Title>Columns</Title>
<Description>Demonstrates how to render data into columns.</Description> <Description>Demonstrates how to render data into columns.</Description>

View File

@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable>
<Title>Cursor</Title>
<Description>Demonstrates how to move the cursor.</Description>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Spectre.Console\Spectre.Console.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,20 @@
using Spectre.Console;
namespace Cursor
{
public static class Program
{
public static void Main(string[] args)
{
AnsiConsole.Write("Hello");
// Move the cursor 3 cells to the right
AnsiConsole.Cursor.Move(CursorDirection.Right, 3);
AnsiConsole.Write("World");
// Move the cursor 5 cells to the left.
AnsiConsole.Cursor.Move(CursorDirection.Left, 5);
AnsiConsole.WriteLine("Universe");
}
}
}

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<Title>Emojis</Title> <Title>Emojis</Title>
<Description>Demonstrates how to render emojis.</Description> <Description>Demonstrates how to render emojis.</Description>

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<Title>Exceptions</Title> <Title>Exceptions</Title>
<Description>Demonstrates how to render formatted exceptions.</Description> <Description>Demonstrates how to render formatted exceptions.</Description>

View File

@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable>
<Title>Figlet</Title>
<Description>Demonstrates how to render FIGlet text.</Description>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Spectre.Console\Spectre.Console.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,14 @@
using Spectre.Console;
namespace EmojiExample
{
public static class Program
{
public static void Main(string[] args)
{
AnsiConsole.Render(new FigletText("Left aligned").LeftAligned().Color(Color.Red));
AnsiConsole.Render(new FigletText("Centered").Centered().Color(Color.Green));
AnsiConsole.Render(new FigletText("Right aligned").RightAligned().Color(Color.Blue));
}
}
}

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<Title>Grids</Title> <Title>Grids</Title>
<Description>Demonstrates how to render grids in a console.</Description> <Description>Demonstrates how to render grids in a console.</Description>

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<Title>Info</Title> <Title>Info</Title>
<Description>Displays the capabilities of the current console.</Description> <Description>Displays the capabilities of the current console.</Description>

View File

@@ -1,3 +1,4 @@
using System;
using Spectre.Console; using Spectre.Console;
namespace InfoExample namespace InfoExample
@@ -12,6 +13,7 @@ namespace InfoExample
.AddRow("[b]Color system[/]", $"{AnsiConsole.Capabilities.ColorSystem}") .AddRow("[b]Color system[/]", $"{AnsiConsole.Capabilities.ColorSystem}")
.AddRow("[b]Supports ansi?[/]", $"{YesNo(AnsiConsole.Capabilities.SupportsAnsi)}") .AddRow("[b]Supports ansi?[/]", $"{YesNo(AnsiConsole.Capabilities.SupportsAnsi)}")
.AddRow("[b]Legacy console?[/]", $"{YesNo(AnsiConsole.Capabilities.LegacyConsole)}") .AddRow("[b]Legacy console?[/]", $"{YesNo(AnsiConsole.Capabilities.LegacyConsole)}")
.AddRow("[b]Interactive?[/]", $"{YesNo(Environment.UserInteractive)}")
.AddRow("[b]Buffer width[/]", $"{AnsiConsole.Console.Width}") .AddRow("[b]Buffer width[/]", $"{AnsiConsole.Console.Width}")
.AddRow("[b]Buffer height[/]", $"{AnsiConsole.Console.Height}"); .AddRow("[b]Buffer height[/]", $"{AnsiConsole.Console.Height}");

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<Title>Links</Title> <Title>Links</Title>
<Description>Demonstrates how to render links in a console.</Description> <Description>Demonstrates how to render links in a console.</Description>

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<Title>Panels</Title> <Title>Panels</Title>
<Description>Demonstrates how to render items in panels.</Description> <Description>Demonstrates how to render items in panels.</Description>

View File

@@ -20,16 +20,14 @@ namespace PanelExample
new Panel(new Text("Left adjusted\nLeft").LeftAligned()) new Panel(new Text("Left adjusted\nLeft").LeftAligned())
.Expand() .Expand()
.SquareBorder() .SquareBorder()
.Header("Left") .Header("[red]Left[/]"));
.HeaderStyle("red"));
// Centered ASCII panel with text // Centered ASCII panel with text
AnsiConsole.Render( AnsiConsole.Render(
new Panel(new Text("Centered\nCenter").Centered()) new Panel(new Text("Centered\nCenter").Centered())
.Expand() .Expand()
.AsciiBorder() .AsciiBorder()
.Header("Center") .Header("[green]Center[/]")
.HeaderStyle("green")
.HeaderAlignment(Justify.Center)); .HeaderAlignment(Justify.Center));
// Right adjusted, rounded panel with text // Right adjusted, rounded panel with text
@@ -37,8 +35,7 @@ namespace PanelExample
new Panel(new Text("Right adjusted\nRight").RightAligned()) new Panel(new Text("Right adjusted\nRight").RightAligned())
.Expand() .Expand()
.RoundedBorder() .RoundedBorder()
.Header("Right") .Header("[blue]Right[/]")
.HeaderStyle("blue")
.HeaderAlignment(Justify.Right)); .HeaderAlignment(Justify.Right));
} }
} }

View File

@@ -0,0 +1,77 @@
using Spectre.Console;
namespace Cursor
{
public static class Program
{
public static void Main(string[] args)
{
// Confirmation
if (!AnsiConsole.Confirm("Run prompt example?"))
{
AnsiConsole.MarkupLine("Ok... :(");
return;
}
// String
AnsiConsole.WriteLine();
AnsiConsole.Render(new Rule("[yellow]Strings[/]").RuleStyle("grey").LeftAligned());
var name = AnsiConsole.Ask<string>("What's your [green]name[/]?");
// String with choices
AnsiConsole.WriteLine();
AnsiConsole.Render(new Rule("[yellow]Choices[/]").RuleStyle("grey").LeftAligned());
var fruit = AnsiConsole.Prompt(
new TextPrompt<string>("What's your [green]favorite fruit[/]?")
.InvalidChoiceMessage("[red]That's not a valid fruit[/]")
.DefaultValue("Orange")
.AddChoice("Apple")
.AddChoice("Banana")
.AddChoice("Orange"));
// Integer
AnsiConsole.WriteLine();
AnsiConsole.Render(new Rule("[yellow]Integers[/]").RuleStyle("grey").LeftAligned());
var age = AnsiConsole.Prompt(
new TextPrompt<int>("How [green]old[/] are you?")
.PromptStyle("green")
.ValidationErrorMessage("[red]That's not a valid age[/]")
.Validate(age =>
{
return age switch
{
<= 0 => ValidationResult.Error("[red]You must at least be 1 years old[/]"),
>= 123 => ValidationResult.Error("[red]You must be younger than the oldest person alive[/]"),
_ => ValidationResult.Success(),
};
}));
// Secret
AnsiConsole.WriteLine();
AnsiConsole.Render(new Rule("[yellow]Secrets[/]").RuleStyle("grey").LeftAligned());
var password = AnsiConsole.Prompt(
new TextPrompt<string>("Enter [green]password[/]?")
.PromptStyle("red")
.Secret());
// Optional
AnsiConsole.WriteLine();
AnsiConsole.Render(new Rule("[yellow]Optional[/]").RuleStyle("grey").LeftAligned());
var color = AnsiConsole.Prompt(
new TextPrompt<string>("[grey][[Optional]][/] What is your [green]favorite color[/]?")
.AllowEmpty());
// Summary
AnsiConsole.WriteLine();
AnsiConsole.Render(new Rule("[yellow]Results[/]").RuleStyle("grey").LeftAligned());
AnsiConsole.Render(new Table().AddColumns("[grey]Question[/]", "[grey]Answer[/]")
.RoundedBorder()
.BorderColor(Color.Grey)
.AddRow("[grey]Name[/]", name)
.AddRow("[grey]Favorite fruit[/]", fruit)
.AddRow("[grey]Age[/]", age.ToString())
.AddRow("[grey]Password[/]", password)
.AddRow("[grey]Favorite color[/]", string.IsNullOrEmpty(color) ? "Unknown" : color));
}
}
}

View File

@@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<LangVersion>9</LangVersion>
<IsPackable>false</IsPackable>
<Title>Prompt</Title>
<Description>Demonstrates how to get input from a user.</Description>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Spectre.Console\Spectre.Console.csproj" />
</ItemGroup>
</Project>

View File

@@ -10,30 +10,33 @@ namespace EmojiExample
WrapInPanel( WrapInPanel(
new Rule() new Rule()
.RuleStyle(Style.Parse("yellow")) .RuleStyle(Style.Parse("yellow"))
.AsciiBorder()
.LeftAligned()); .LeftAligned());
// Left aligned title // Left aligned title
WrapInPanel( WrapInPanel(
new Rule("[white]Left aligned[/]") new Rule("[blue]Left aligned[/]")
.RuleStyle(Style.Parse("red")) .RuleStyle(Style.Parse("red"))
.DoubleBorder()
.LeftAligned()); .LeftAligned());
// Centered title // Centered title
WrapInPanel( WrapInPanel(
new Rule("[silver]Centered[/]") new Rule("[green]Centered[/]")
.RuleStyle(Style.Parse("green")) .RuleStyle(Style.Parse("green"))
.HeavyBorder()
.Centered()); .Centered());
// Right aligned title // Right aligned title
WrapInPanel( WrapInPanel(
new Rule("[grey]Right aligned[/]") new Rule("[red]Right aligned[/]")
.RuleStyle(Style.Parse("blue")) .RuleStyle(Style.Parse("blue"))
.RightAligned()); .RightAligned());
} }
private static void WrapInPanel(Rule rule) private static void WrapInPanel(Rule rule)
{ {
AnsiConsole.Render(new Panel(rule).Expand().BorderStyle(Style.Parse("grey"))); AnsiConsole.Render(rule);
AnsiConsole.WriteLine(); AnsiConsole.WriteLine();
} }
} }

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<Title>Rules</Title> <Title>Rules</Title>
<Description>Demonstrates how to render horizontal rules (lines).</Description> <Description>Demonstrates how to render horizontal rules (lines).</Description>

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<Title>Tables</Title> <Title>Tables</Title>
<Description>Demonstrates how to render tables in a console.</Description> <Description>Demonstrates how to render tables in a console.</Description>

View File

@@ -1,7 +1,7 @@
{ {
"projects": [ "src" ], "projects": [ "src" ],
"sdk": { "sdk": {
"version": "3.1.301", "version": "5.0.100",
"rollForward": "latestPatch" "rollForward": "latestPatch"
} }
} }

View File

@@ -1,7 +1,7 @@
<Project> <Project>
<PropertyGroup Label="Settings"> <PropertyGroup Label="Settings">
<Deterministic>true</Deterministic> <Deterministic>true</Deterministic>
<LangVersion>8.0</LangVersion> <LangVersion>9.0</LangVersion>
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>embedded</DebugType> <DebugType>embedded</DebugType>
<MinVerSkip Condition="'$(Configuration)' == 'Debug'">true</MinVerSkip> <MinVerSkip Condition="'$(Configuration)' == 'Debug'">true</MinVerSkip>

View File

@@ -0,0 +1,719 @@
flf2a$ 7 6 22 15 4
starwars.flf by Ryan Youck (youck@cs.uregina.ca) Dec 25/1994
I am not responsible for use of this font
Based on Big.flf by Glenn Chappell
$ $@
$ $@
$ $@
$ $@
$ $@
$ $@
$ $@@
__ $@
| |$@
| |$@
| |$@
|__|$@
(__)$@
$@@
_ _ @
( | )@
V V @
$ @
$ @
$ @
@@
_ _ @
_| || |_$@
|_ __ _|@
_| || |_ @
|_ __ _|@
|_||_| $@
@@
__,--,_.@
/ |@
| (----`@
\ \ $@
.----) | $@
|_ __/ $@
'--' $@@
_ ___$ @
/ \ / /$ @
( o ) / / $ @
\_/ / / _$ @
/ / / \ @
/ / ( o )@
/__/ \_/ @@
@
___ @
( _ ) $@
/ _ \/\@
| (_> <@
\___/\/@
$@@
__ @
(_ )@
|/ @
$ @
$ @
$ @
@@
___@
/ /@
| |$@
| |$@
| |$@
| |$@
\__\@@
___ @
\ \ @
| |@
| |@
| |@
| |@
/__/ @@
_ @
/\| |/\ @
\ ` ' /$@
|_ _|@
/ , . \$@
\/|_|\/ @
@@
@
_ @
_| |_$@
|_ _|@
|_| $@
$ @
@@
@
@
$ @
$ @
__ @
(_ )@
|/ @@
@
@
______ @
|______|@
$ @
$ @
@@
@
@
@
$ @
__ @
(__)@
@@
___@
/ /@
/ / @
/ /$ @
/ /$ @
/__/$ @
@@
___ $@
/ _ \ $@
| | | |$@
| | | |$@
| |_| |$@
\___/ $@
$@@
__ $@
/_ |$@
| |$@
| |$@
| |$@
|_|$@
$@@
___ $@
|__ \ $@
$) |$@
/ / $@
/ /_ $@
|____|$@
$@@
____ $@
|___ \ $@
__) |$@
|__ < $@
___) |$@
|____/ $@
$@@
_ _ $@
| || | $@
| || |_ $@
|__ _|$@
| | $@
|_| $@
$@@
_____ $@
| ____|$@
| |__ $@
|___ \ $@
___) |$@
|____/ $@
$@@
__ $@
/ / $@
/ /_ $@
| '_ \ $@
| (_) |$@
\___/ $@
$@@
______ $@
|____ |$@
$/ / $@
/ / $@
/ / $@
/_/ $@
$@@
___ $@
/ _ \ $@
| (_) |$@
> _ < $@
| (_) |$@
\___/ $@
$@@
___ $@
/ _ \ $@
| (_) |$@
\__, |$@
/ / $@
/_/ $@
$@@
@
_ @
(_)@
$ @
_ @
(_)@
@@
@
_ @
(_)@
$ @
_ @
( )@
|/ @@
___@
/ /@
/ /$@
< <$ @
\ \$@
\__\@
@@
@
______ @
|______|@
______ @
|______|@
@
@@
___ @
\ \$ @
\ \ @
> >@
/ / @
/__/$ @
@@
______ $@
| \ $@
`----) |$@
/ / $@
|__| $@
__ $@
(__) $@@
____ @
/ __ \ @
/ / _` |@
| | (_| |@
\ \__,_|@
\____/ @
@@
___ $ @
/ \ $ @
/ ^ \$ @
/ /_\ \$ @
/ _____ \$ @
/__/ \__\$@
$@@
.______ $@
| _ \ $@
| |_) |$@
| _ < $@
| |_) |$@
|______/ $@
$@@
______$@
/ |@
| ,----'@
| | $@
| `----.@
\______|@
$@@
_______ $@
| \$@
| .--. |@
| | | |@
| '--' |@
|_______/$@
$@@
_______ @
| ____|@
| |__ $@
| __| $@
| |____ @
|_______|@
@@
_______ @
| ____|@
| |__ $@
| __| $@
| | $ @
|__| @
@@
_______ @
/ _____|@
| | __ $@
| | |_ |$@
| |__| |$@
\______|$@
$@@
__ __ $@
| | | |$@
| |__| |$@
| __ |$@
| | | |$@
|__| |__|$@
$@@
__ $@
| |$@
| |$@
| |$@
| |$@
|__|$@
$@@
__ $@
| |$@
| |$@
.--. | |$@
| `--' |$@
\______/ $@
$@@
__ ___$@
| |/ /$@
| ' / $@
| < $@
| . \ $@
|__|\__\$@
$@@
__ $@
| | $@
| | $@
| | $@
| `----.@
|_______|@
$@@
.___ ___.$@
| \/ |$@
| \ / |$@
| |\/| |$@
| | | |$@
|__| |__|$@
$@@
.__ __.$@
| \ | |$@
| \| |$@
| . ` |$@
| |\ |$@
|__| \__|$@
$@@
______ $@
/ __ \ $@
| | | |$@
| | | |$@
| `--' |$@
\______/ $@
$@@
.______ $@
| _ \ $@
| |_) |$@
| ___/ $@
| | $ @
| _| $ @
$ @@
______ $ @
/ __ \ $ @
| | | | $ @
| | | | $ @
| `--' '--. @
\_____\_____\@
$ @@
.______ $ @
| _ \ $ @
| |_) | $ @
| / $ @
| |\ \----.@
| _| `._____|@
$@@
_______.@
/ |@
| (----`@
\ \ $@
.----) | $@
|_______/ $@
$@@
.___________.@
| |@
`---| |----`@
| | $ @
| | $ @
|__| $ @
$ @@
__ __ $@
| | | |$@
| | | |$@
| | | |$@
| `--' |$@
\______/ $@
$@@
____ ____$@
\ \ / /$@
\ \/ /$ @
\ /$ @
\ /$ @
\__/$ @
$ @@
____ __ ____$@
\ \ / \ / /$@
\ \/ \/ /$ @
\ /$ @
\ /\ /$ @
\__/ \__/$ @
$ @@
___ ___$@
\ \ / /$@
\ V / $@
> < $@
/ . \ $@
/__/ \__\$@
$@@
____ ____$@
\ \ / /$@
\ \/ /$ @
\_ _/$ @
| |$ @
|__|$ @
$ @@
________ $@
| / $@
`---/ / $@
/ / $@
/ /----.@
/________|@
$@@
____ @
| |@
| |-`@
| | $@
| | $@
| |-.@
|____|@@
___ @
\ \ $ @
\ \$ @
\ \$ @
\ \$@
\__\@
@@
____ @
| |@
`-| |@
| |@
| |@
.-| |@
|____|@@
___ @
/ \ @
/--^--\@
$@
$@
$@
$@@
@
@
@
$ @
$ @
______ @
|______|@@
__ @
( _)@
\| @
$ @
$ @
$ @
@@
___ $ @
/ \ $ @
/ ^ \$ @
/ /_\ \$ @
/ _____ \$ @
/__/ \__\$@
$@@
.______ $@
| _ \ $@
| |_) |$@
| _ < $@
| |_) |$@
|______/ $@
$@@
______$@
/ |@
| ,----'@
| | $@
| `----.@
\______|@
$@@
_______ $@
| \$@
| .--. |@
| | | |@
| '--' |@
|_______/$@
$@@
_______ @
| ____|@
| |__ $@
| __| $@
| |____ @
|_______|@
@@
_______ @
| ____|@
| |__ $@
| __| $@
| | $ @
|__| @
@@
_______ @
/ _____|@
| | __ $@
| | |_ |$@
| |__| |$@
\______|$@
$@@
__ __ $@
| | | |$@
| |__| |$@
| __ |$@
| | | |$@
|__| |__|$@
$@@
__ $@
| |$@
| |$@
| |$@
| |$@
|__|$@
$@@
__ $@
| |$@
| |$@
.--. | |$@
| `--' |$@
\______/ $@
$@@
__ ___$@
| |/ /$@
| ' / $@
| < $@
| . \ $@
|__|\__\$@
$@@
__ $@
| | $@
| | $@
| | $@
| `----.@
|_______|@
$@@
.___ ___.$@
| \/ |$@
| \ / |$@
| |\/| |$@
| | | |$@
|__| |__|$@
$@@
.__ __.$@
| \ | |$@
| \| |$@
| . ` |$@
| |\ |$@
|__| \__|$@
$@@
______ $@
/ __ \ $@
| | | |$@
| | | |$@
| `--' |$@
\______/ $@
$@@
.______ $@
| _ \ $@
| |_) |$@
| ___/ $@
| | $ @
| _| $ @
$ @@
______ $ @
/ __ \ $ @
| | | | $ @
| | | | $ @
| `--' '--. @
\_____\_____\@
$ @@
.______ $ @
| _ \ $ @
| |_) | $ @
| / $ @
| |\ \----.@
| _| `._____|@
$@@
_______.@
/ |@
| (----`@
\ \ $@
.----) | $@
|_______/ $@
$@@
.___________.@
| |@
`---| |----`@
| | $ @
| | $ @
|__| $ @
$ @@
__ __ $@
| | | |$@
| | | |$@
| | | |$@
| `--' |$@
\______/ $@
$@@
____ ____$@
\ \ / /$@
\ \/ /$ @
\ /$ @
\ /$ @
\__/$ @
$ @@
____ __ ____$@
\ \ / \ / /$@
\ \/ \/ /$ @
\ /$ @
\ /\ /$ @
\__/ \__/$ @
$ @@
___ ___$@
\ \ / /$@
\ V / $@
> < $@
/ . \ $@
/__/ \__\$@
$@@
____ ____$@
\ \ / /$@
\ \/ /$ @
\_ _/$ @
| |$ @
|__|$ @
$ @@
________ $@
| / $@
`---/ / $@
/ / $@
/ /----.@
/________|@
$@@
___@
/ /@
| |$@
/ /$ @
\ \$ @
| |$@
\__\@@
__ $@
| |$@
| |$@
| |$@
| |$@
| |$@
|__|$@@
___ @
\ \$ @
| | @
\ \@
/ /@
| | @
/__/$ @@
__ _ @
/ \/ |@
|_/\__/ @
$ @
$ @
$ @
@@
_ _ @
(_)_(_) @
/ \ @
/ _ \ @
/ ___ \ @
/_/ \_\@
@@
_ _ @
(_)_(_)@
/ _ \ @
| | | |@
| |_| |@
\___/ @
@@
_ _ @
(_) (_)@
| | | |@
| | | |@
| |_| |@
\___/ @
@@
_ _ @
(_) (_)@
__ _ @
/ _` |@
| (_| |@
\__,_|@
@@
_ _ @
(_) (_)@
___ @
/ _ \ @
| (_) |@
\___/ @
@@
_ _ @
(_) (_)@
_ _ @
| | | |@
| |_| |@
\__,_|@
@@
___ @
/ _ \ @
| | ) |@
| |< < @
| | ) |@
| ||_/ @
|_| @@

View File

@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using Xunit.Sdk;
namespace Spectre.Console.Tests
{
public sealed class EmbeddedResourceDataAttribute : DataAttribute
{
private readonly string _args;
public EmbeddedResourceDataAttribute(string args)
{
_args = args ?? throw new ArgumentNullException(nameof(args));
}
public override IEnumerable<object[]> GetData(MethodInfo testMethod)
{
var result = new object[1];
result[0] = ReadManifestData(_args);
return new[] { result };
}
public static string ReadManifestData(string resourceName)
{
if (resourceName is null)
{
throw new ArgumentNullException(nameof(resourceName));
}
using (var stream = ResourceReader.LoadResourceStream(resourceName))
{
if (stream == null)
{
throw new InvalidOperationException("Could not load manifest resource stream.");
}
using (var reader = new StreamReader(stream))
{
return reader.ReadToEnd().NormalizeLineEndings();
}
}
}
}
}

View File

@@ -0,0 +1,3 @@
+-Greeting----+
| Hello World |
+-------------+

View File

@@ -0,0 +1,3 @@
╔═Greeting════╗
║ Hello World ║
╚═════════════╝

View File

@@ -0,0 +1,3 @@
┏━Greeting━━━━┓
┃ Hello World ┃
┗━━━━━━━━━━━━━┛

View File

@@ -0,0 +1,3 @@
╭─Greeting────╮
│ Hello World │
╰─────────────╯

View File

@@ -0,0 +1,3 @@
┌─Greeting────┐
│ Hello World │
└─────────────┘

View File

@@ -0,0 +1,11 @@
2020 October
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ │ │ │ │ 1 │ 2 │ 3* │
│ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │
│ 11 │ 12* │ 13 │ 14 │ 15 │ 16 │ 17 │
│ 18 │ 19 │ 20 │ 21 │ 22 │ 23 │ 24 │
│ 25 │ 26 │ 27 │ 28 │ 29 │ 30 │ 31 │
│ │ │ │ │ │ │ │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┘

View File

@@ -0,0 +1,11 @@
2020 October
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ │ │ │ │ 1 │ 2 │ 3* │
│ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │
│ 11 │ 12* │ 13 │ 14 │ 15 │ 16 │ 17 │
│ 18 │ 19 │ 20 │ 21 │ 22 │ 23 │ 24 │
│ 25 │ 26 │ 27 │ 28 │ 29 │ 30 │ 31 │
│ │ │ │ │ │ │ │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┘

View File

@@ -0,0 +1,11 @@
2020 October
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ │ │ │ │ 1 │ 2 │ 3* │
│ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │
│ 11 │ 12* │ 13 │ 14 │ 15 │ 16 │ 17 │
│ 18 │ 19 │ 20 │ 21 │ 22 │ 23 │ 24 │
│ 25 │ 26 │ 27 │ 28 │ 29 │ 30 │ 31 │
│ │ │ │ │ │ │ │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┘

View File

@@ -0,0 +1,11 @@
Oktober 2020
┌─────┬────┬────┬────┬────┬────┬────┐
│ Mo │ Di │ Mi │ Do │ Fr │ Sa │ So │
├─────┼────┼────┼────┼────┼────┼────┤
│ │ │ │ 1 │ 2 │ 3* │ 4 │
│ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │
│ 12* │ 13 │ 14 │ 15 │ 16 │ 17 │ 18 │
│ 19 │ 20 │ 21 │ 22 │ 23 │ 24 │ 25 │
│ 26 │ 27 │ 28 │ 29 │ 30 │ 31 │ │
│ │ │ │ │ │ │ │
└─────┴────┴────┴────┴────┴────┴────┘

View File

@@ -0,0 +1,11 @@
2020 October
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ │ │ │ │ 1 │ 2 │ 3* │
│ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │
│ 11 │ 12* │ 13 │ 14 │ 15 │ 16 │ 17 │
│ 18 │ 19 │ 20 │ 21 │ 22 │ 23 │ 24 │
│ 25 │ 26 │ 27 │ 28 │ 29 │ 30 │ 31 │
│ │ │ │ │ │ │ │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┘

View File

@@ -0,0 +1,4 @@
╭────────────────────╮ ╭────────────────╮ ╭─────────────────╮
│ Savannah Thompson │ │ Sophie Ramos │ │ Katrin Goldberg │
│ Australia │ │ United States │ │ Germany │
╰────────────────────╯ ╰────────────────╯ ╰─────────────────╯

View File

@@ -0,0 +1,4 @@
System.InvalidOperationException: Throwing!
at Spectre.Console.Tests.Data.TestExceptions.MethodThatThrows(Nullable`1 number) in /xyz/Exceptions.cs:nn
at Spectre.Console.Tests.Unit.ExceptionTests.<>c.<Should_Write_Exception>b__0_0() in /xyz/ExceptionTests.cs:nn
at Spectre.Console.Tests.Unit.ExceptionTests.GetException(Action action) in /xyz/ExceptionTests.cs:nn

View File

@@ -0,0 +1,7 @@
System.InvalidOperationException: Something threw!
System.InvalidOperationException: Throwing!
at Spectre.Console.Tests.Data.TestExceptions.MethodThatThrows(Nullable`1 number) in /xyz/Exceptions.cs:nn
at Spectre.Console.Tests.Data.TestExceptions.ThrowWithInnerException() in /xyz/Exceptions.cs:nn
at Spectre.Console.Tests.Data.TestExceptions.ThrowWithInnerException() in /xyz/Exceptions.cs:nn
at Spectre.Console.Tests.Unit.ExceptionTests.<>c.<Should_Write_Exception_With_Inner_Exception>b__3_0() in /xyz/ExceptionTests.cs:nn
at Spectre.Console.Tests.Unit.ExceptionTests.GetException(Action action) in /xyz/ExceptionTests.cs:nn

View File

@@ -0,0 +1,4 @@
System.InvalidOperationException: Throwing!
at MethodThatThrows(Nullable`1 number) in /xyz/Exceptions.cs:nn
at <Should_Write_Exception_With_Shortened_Methods>b__2_0() in /xyz/ExceptionTests.cs:nn
at GetException(Action action) in /xyz/ExceptionTests.cs:nn

View File

@@ -0,0 +1,4 @@
InvalidOperationException: Throwing!
at Spectre.Console.Tests.Data.TestExceptions.MethodThatThrows(Nullable`1 number) in /xyz/Exceptions.cs:nn
at Spectre.Console.Tests.Unit.ExceptionTests.<>c.<Should_Write_Exception_With_Shortened_Types>b__1_0() in /xyz/ExceptionTests.cs:nn
at Spectre.Console.Tests.Unit.ExceptionTests.GetException(Action action) in /xyz/ExceptionTests.cs:nn

View File

@@ -0,0 +1,7 @@
.______ ___ .___________..______ __ __ ___ ____ __ ____ ___ _______. __ __ _______ .______ _______
| _ \ / \ | || _ \ | | | |/ / \ \ / \ / / / \ / | | | | | | ____|| _ \ | ____|
| |_) | / ^ \ `---| |----`| |_) | | | | ' / \ \/ \/ / / ^ \ | (----` | |__| | | |__ | |_) | | |__
| ___/ / /_\ \ | | | / | | | < \ / / /_\ \ \ \ | __ | | __| | / | __|
| | / _____ \ | | | |\ \----.| | | . \ \ /\ / / _____ \ .----) | | | | | | |____ | |\ \----.| |____
| _| /__/ \__\ |__| | _| `._____||__| |__|\__\ \__/ \__/ /__/ \__\ |_______/ |__| |__| |_______|| _| `._____||_______|

View File

@@ -0,0 +1,6 @@
____ _ ____ _
/ ___| _ __ ___ ___ | |_ _ __ ___ / ___| ___ _ __ ___ ___ | | ___
\___ \ | '_ \ / _ \ / __| | __| | '__| / _ \ | | / _ \ | '_ \ / __| / _ \ | | / _ \
___) | | |_) | | __/ | (__ | |_ | | | __/ _ | |___ | (_) | | | | | \__ \ | (_) | | | | __/
|____/ | .__/ \___| \___| \__| |_| \___| (_) \____| \___/ |_| |_| |___/ \___/ |_| \___|
|_|

View File

@@ -0,0 +1,6 @@
____ _ ____ _
/ ___| _ __ ___ ___ | |_ _ __ ___ / ___| ___ _ __ ___ ___ | | ___
\___ \ | '_ \ / _ \ / __| | __| | '__| / _ \ | | / _ \ | '_ \ / __| / _ \ | | / _ \
___) | | |_) | | __/ | (__ | |_ | | | __/ _ | |___ | (_) | | | | | \__ \ | (_) | | | | __/
|____/ | .__/ \___| \___| \__| |_| \___| (_) \____| \___/ |_| |_| |___/ \___/ |_| \___|
|_|

View File

@@ -0,0 +1,6 @@
____ _ ____ _
/ ___| _ __ ___ ___ | |_ _ __ ___ / ___| ___ _ __ ___ ___ | | ___
\___ \ | '_ \ / _ \ / __| | __| | '__| / _ \ | | / _ \ | '_ \ / __| / _ \ | | / _ \
___) | | |_) | | __/ | (__ | |_ | | | __/ _ | |___ | (_) | | | | | \__ \ | (_) | | | | __/
|____/ | .__/ \___| \___| \__| |_| \___| (_) \____| \___/ |_| |_| |___/ \___/ |_| \___|
|_|

View File

@@ -0,0 +1,12 @@
____ _ _ _
| _ \ __ _ | |_ _ __ (_) | | __ __ __ __ _ ___
| |_) | / _` | | __| | '__| | | | |/ / \ \ /\ / / / _` | / __|
| __/ | (_| | | |_ | | | | | < \ V V / | (_| | \__ \
|_| \__,_| \__| |_| |_| |_|\_\ \_/\_/ \__,_| |___/
_
| |__ ___ _ __ ___
| '_ \ / _ \ | '__| / _ \
| | | | | __/ | | | __/
|_| |_| \___| |_| \___|

View File

@@ -0,0 +1,12 @@
____ _ ____
/ ___| _ __ ___ ___ | |_ _ __ ___ / ___| ___
\___ \ | '_ \ / _ \ / __| | __| | '__| / _ \ | | / _ \
___) | | |_) | | __/ | (__ | |_ | | | __/ _ | |___ | (_) |
|____/ | .__/ \___| \___| \__| |_| \___| (_) \____| \___/
|_|
_
_ __ ___ ___ | | ___
| '_ \ / __| / _ \ | | / _ \
| | | | \__ \ | (_) | | | | __/
|_| |_| |___/ \___/ |_| \___|

View File

@@ -0,0 +1,3 @@
Foo Bar Baz
Qux Corgi Waldo
GraultGarplyFred

View File

@@ -0,0 +1,4 @@
Options
-h, --help Show command line help.
-c, --configuration The configuration to run for.
The default for most projects is Debug.

View File

@@ -0,0 +1,3 @@
Foo Bar Baz
Qux Corgi Waldo
Grault Garply Fred

View File

@@ -0,0 +1,2 @@
Qux Corgi Waldo
Grault Garply Fred

View File

@@ -0,0 +1,3 @@
Foo Bar Baz
Qux Corgi Waldo
Grault Garply Fred

View File

@@ -0,0 +1,12 @@
┌───────┬───────┐
│ Foo │ Bar │
├───────┼───────┤
│ Baz │ Qux │
│ Corgi │ Waldo │
└───────┴───────┘

View File

@@ -0,0 +1,12 @@
┌───────┬───────┐
│ Foo │ Bar │
├───────┼───────┤
│ Baz │ Qux │
│ Corgi │ Waldo │
└───────┴───────┘

View File

@@ -0,0 +1,16 @@
┌───────┬─────────────┐
│ Foo │Bar │
├───────┼─────────────┤
│ Baz │Qux │
│ Corgi │ │
│ │ ┌───────┐ │
│ │ │ Waldo │ │
│ │ └───────┘ │
│ │ │
└───────┴─────────────┘

View File

@@ -0,0 +1,3 @@
┌───────────────────────┐
│ Hello World │
└───────────────────────┘

View File

@@ -0,0 +1,4 @@
┌─Greet…─┐
│ Hello │
│ World │
└────────┘

View File

@@ -0,0 +1,3 @@
┌──────────────────────────────────────────────────────────────────────────────┐
│ Hello World │
└──────────────────────────────────────────────────────────────────────────────┘

View File

@@ -0,0 +1,3 @@
┌───────────────────────┐
│ Hello World │
└───────────────────────┘

View File

@@ -0,0 +1,7 @@
┌───────────────────────┐
│ I heard you like 📦 │
│ │
│ │
│ │
│ So I put a 📦 in a 📦 │
└───────────────────────┘

View File

@@ -0,0 +1,3 @@
┌─────────────┐
│ Hello World │
└─────────────┘

View File

@@ -0,0 +1,5 @@
┌─────────────────┐
│ ┌─────────────┐ │
│ │ Hello World │ │
│ └─────────────┘ │
└─────────────────┘

View File

@@ -0,0 +1,3 @@
┌───────────────────────────────────Greeting───────────────────────────────────┐
│ Hello World │
└──────────────────────────────────────────────────────────────────────────────┘

View File

@@ -0,0 +1,3 @@
┌─Greeting─────────────────────────────────────────────────────────────────────┐
│ Hello World │
└──────────────────────────────────────────────────────────────────────────────┘

View File

@@ -0,0 +1,3 @@
┌─Greeting─────────────────────────────────────────────────────────────────────┐
│ Hello World │
└──────────────────────────────────────────────────────────────────────────────┘

View File

@@ -0,0 +1,4 @@
┌─────────────┐
│ Hello World │
│ Foo Bar │
└─────────────┘

View File

@@ -0,0 +1,6 @@
┌───────────────────┐
│ │
│ Hello World │
│ │
│ │
└───────────────────┘

View File

@@ -0,0 +1,3 @@
┌───────────┐
│Hello World│
└───────────┘

View File

@@ -0,0 +1,3 @@
┌─────────────────────────────────────────────────────────────────────Greeting─┐
│ Hello World │
└──────────────────────────────────────────────────────────────────────────────┘

View File

@@ -0,0 +1,5 @@
┌────┐
│ │
│ 💩 │
│ │
└────┘

View File

@@ -0,0 +1,4 @@
╭─Short paths──────────────────────────────────────────────────────────────────────╮
│ at System.Runtime.CompilerServices.TaskAwaiter. │
│ HandleNonSuccessAndDebuggerNotification(Task task) │
╰──────────────────────────────────────────────────────────────────────────────────╯

View File

@@ -0,0 +1 @@
Favorite fruit? [Banana/Orange] (Banana): Orange

View File

@@ -0,0 +1 @@
Favorite fruit? [Banana/Orange] (Banana): Banana

View File

@@ -0,0 +1,3 @@
Favorite fruit? [Banana/Orange] (Banana): Apple
Please select one of the available options
Favorite fruit? [Banana/Orange] (Banana): Banana

View File

@@ -0,0 +1,7 @@
Guess number: 22
Too low
Guess number: 102
Too high
Guess number: ABC
Invalid input
Guess number: 99

View File

@@ -0,0 +1,5 @@
[
Age? ninety-nine,
Invalid input,
Age? 99
]

View File

@@ -0,0 +1,10 @@
<pre style="font-size:90%;font-family:consolas,'Courier New',monospace">
<span>┌─────────────────┬───────┬─────┐</span>
<span>│ </span><span style="color: #FF0000;background-color: #000000">Foo</span><span> │ </span><span style="color: #008000;font-weight: bold;font-style: italic">Bar</span><span> │ </span><span style="color: #0000FF">Qux</span><span> │</span>
<span>├─────────────────┼───────┼─────┤</span>
<span>│ </span><span style="text-decoration: underline">Corgi</span><span> │ </span><span style="font-weight: bold;font-style: italic;text-decoration: line-through">Waldo</span><span> │ </span><span style="color: #7F7F7F">Zap</span><span> │</span>
<span>│ </span><span style="color: #FF0000">╭─────────────╮</span><span> │ │ │</span>
<span>│ </span><span style="color: #FF0000">│</span><span> </span><span style="color: #0000FF">Hello World</span><span> </span><span style="color: #FF0000">│</span><span> │ │ │</span>
<span>│ </span><span style="color: #FF0000">╰─────────────╯</span><span> │ │ │</span>
<span>└─────────────────┴───────┴─────┘</span>
</pre>

Some files were not shown because too many files have changed in this diff Show More